2013-04-24  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Remove the setContentsToColor flavor of LayerTiler::TextureJob
        https://bugs.webkit.org/show_bug.cgi?id=115092

        Reviewed by Carlos Garcia Campos.

        With the Skia backend, we had an optimization to detect solid color
        layers. The Skia code has been purged, but these bits remained. With
        BlackBerry::Platform::Graphics::PlatformGraphicsContext, only the solid
        color will be drawn anyway, so we don't need to detect such layers at
        the WebCore level. Fixed by removing the setContentsToColor flavor of
        LayerTiler::TextureJob.

        BlackBerry::WebKit::WebOverlay still uses
        TextureCacheCompositingThread::textureForColor() so that one can stay
        for now.

        This was dead code so no new tests.

        * platform/graphics/blackberry/LayerTile.cpp:
        * platform/graphics/blackberry/LayerTile.h:
        (LayerTile):
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::processTextureJob):
        (WebCore::LayerTiler::performTileJob):
        * platform/graphics/blackberry/LayerTiler.h:
        (WebCore::LayerTiler::TextureJob::setContents):
        (TextureJob):

2013-04-24  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move image decoders, some other GStreamer, Cairo and Soup sources to libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=115050

        Reviewed by Martin Robinson.

        No new tests - no new functionality.

        * GNUmakefile.list.am: Move the image decoders source files and a couple of GStreamer, Cairo and Libsoup source
        files under the libPlatform's list of files to build. All of these are already free of platform layer violations.

2013-04-23  Kent Tamura  <tkent@chromium.org>

        Remove TextFieldDecoration feature
        https://bugs.webkit.org/show_bug.cgi?id=115068

        Reviewed by Andreas Kling.

        Only Chromium port used this feature.

        * dom/Element.h: Remove isTextFieldDecoration.
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        Update a comment.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        Remove call sites of willAddTextFieldDecorationsTo and addTextFieldDecorationsTo.
        * html/shadow/TextFieldDecorationElement.cpp: Removed.
        * html/shadow/TextFieldDecorationElement.h: Removed.
        * page/ChromeClient.h:
        (ChromeClient): Remove willAddTextFieldDecorationsTo and
        addTextFieldDecorationsTo

2013-04-23  Andreas Kling  <akling@apple.com>

        Micro-optimize Length::initFromLength().
        <http://webkit.org/b/115073>

        From Blink r148621 by <timloh@chromium.org>:

        This appears to improve html5-full-render by 1-2% on my system (gcc 4.6.3) by using memcpy
        instead of copying members (and branching to copy the union).

        * platform/Length.h:
        (WebCore::Length::initFromLength):

2013-04-23  Kent Tamura  <tkent@chromium.org>

        Add missing copyright header to ColorChooserClient.h
        https://bugs.webkit.org/show_bug.cgi?id=115067

        Reviewed by Andreas Kling.

        * platform/ColorChooserClient.h:
        This was added in 2011 by a Google employee.
        http://trac.webkit.org/changeset/103168

2013-04-23  Andreas Kling  <akling@apple.com>

        Call the correct superclass in RenderSlider::layout().
        <http://webkit.org/b/115071>

        From Blink r147850 by <cbiesinger@chromium.org>:

        The superclass is RenderFlexibleBox, not RenderBlock.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout):

2013-04-23  Mihai Tica  <mitica@adobe.com>

        Add platform support for -webkit-background-blend-mode to CG context with background color
        https://bugs.webkit.org/show_bug.cgi?id=114412

        Reviewed by Darin Adler.

        Tests: css3/compositing/effect-background-blend-mode-color.html, css3/compositing/effect-background-blend-mode-color2.html

        This patch adds support for blending on background colors to the Core Graphics port of WebKit.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2013-04-23  Ryosuke Niwa  <rniwa@webkit.org>

        Remove an unused member variable erroneously added in r149007.

        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):
        (LogicalSelectionOffsetCaches):

2013-04-22  Ryosuke Niwa  <rniwa@webkit.org>

        logicalLeftSelectionGap and logicalRightSelectionGap call availableLogicalWidth() multiple times
        https://bugs.webkit.org/show_bug.cgi?id=113479

        Reviewed by David Hyatt.

        Introduced LogicalSelectionOffsetCaches to cache the containing blocks and their logical left and right
        selection offsets in computing selection gaps. An instance of this class stores the containing block for
        each position type and caches their logical selection offsets when none of their block ancestors up until
        its nearest selection root do no have any floating objects or regions and exclusions.

        When blockSelectionGaps recurses to another level, it creates a new cache instance by "inheriting"
        (like RenderStyle) from the old cache, overriding those containing blocks that are replaced by "this".

        This eliminates the need to traverse containing block ancestors in RenderBlock::logicalLeftSelectionOffset
        and RenderBlock::logicalRightSelectionOffset, and improves WebKit's performance by roughly 20%.

        Performance Tests: Interactive/SelectAll.html

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.xcodeproj/project.pbxproj:

        * rendering/LogicalSelectionOffsetCaches.h: Added.
        (WebCore::isContainingBlockCandidateForAbsolutelyPositionedObject): Moved from RenderObject.h.
        (WebCore::isNonRenderBlockInline): Ditto.
        (WebCore::containingBlockForFixedPosition): Extracted from RenderObject::containingBlock.
        (WebCore::containingBlockForAbsolutePosition): Ditto.
        (WebCore::containingBlockForObjectInFlow): Ditto.

        (WebCore::LogicalSelectionOffsetCaches): Added.
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::ContainingBlockInfo): Added.
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::setBlock): Added. m_hasFloatsOrRegions is
        or'ed with itself when ContainingBlockInfo is copy constructed since m_hasFloatsOrRegions needs be true
        for a block when any of its containing block ancestors have floats or regions.
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::block): Added.
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::cache): Added.
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::logicalLeftSelectionOffset): Added. Caches
        the logical selection offset if it hasn't.
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::logicalRightSelectionOffset): Ditto.

        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches): The first constructor is used
        for a selection root. The second one is used for inheriting from another cache. In the latter case,
        copy all containing block information except ones that need to be overridden by this block.
        (WebCore::LogicalSelectionOffsetCaches::containingBlockInfo): Returns a ContainingBlockInfo based on
        object's position value.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::inlineSelectionGaps):
        (WebCore::RenderBlock::blockSelectionGaps): Exit before instantiating a new LogicalSelectionOffsetCaches
        if there is no child to recurse.
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionOffset): Use LogicalSelectionOffsetCaches to get its containing
        block and its logical selection offset.
        (WebCore::RenderBlock::logicalRightSelectionOffset): Ditto.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock):

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock): Extracted code into LogicalSelectionOffsetCaches.h.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::lineSelectionGap):

        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox):

2013-04-23  Eric Carlson  <eric.carlson@apple.com>

        [Mac] forced subtitle track should change when audio track language changes
        https://bugs.webkit.org/show_bug.cgi?id=115043

        Reviewed by Jer Noble.

        No new tests, it isn't possible to test this automatically because there is currently no way
        to enable/disable audio tracks.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Set m_forcedOrAutomaticSubtitleTrackLanguage.
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):  Call markCaptionAndSubtitleTracksAsUnconfigured
            after a delay if the language of the primary audio track changes.
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible): markCaptionAndSubtitleTracksAsUnconfigured API change.
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured): Take parameter to allow
            the reconfiguration to happen after a delay to avoid doing it during a callback from the
            media engine. Clear the ConfigureTextTracks bit in m_pendingActionFlags to cancel any pending 
            asynch configuration.
        * html/HTMLMediaElement.h:

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::textTrackSelectionScore): Clean up logic.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Call characteristicChanged when
            the primary audio track language changes.

2013-04-23  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Improve ExclusionPolygon smart pointer safety
        https://bugs.webkit.org/show_bug.cgi?id=114984

        Reviewed by Dirk Schulze.

        Assign newly allocated objects to PassOwnPtrs as early as possible to reduce the
        chances of future leaks. No new tests were added, this change adds no new functionality.

        * rendering/ExclusionPolygon.cpp:
        (WebCore::computeShapePaddingBounds):
        (WebCore::computeShapeMarginBounds):
        (WebCore::ExclusionPolygon::shapePaddingBounds):
        (WebCore::ExclusionPolygon::shapeMarginBounds):
        * rendering/ExclusionShape.cpp:
        (WebCore::ExclusionShape::createExclusionShape):

2013-04-23  Andreas Kling  <akling@apple.com>

        Revert "Throttle resize events during live window resize."
        <http://webkit.org/b/114292>
        <rdar://problem/13411454>
        <rdar://problem/13694839>

        Reviewed by Geoffrey Garen.

        It appears that this caused more glitches than it helped resize performance.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::sendResizeEvent):

            Turn the null-check of m_frame into an assertion since this method is
            no longer called asynchronously.

        (WebCore::FrameView::willEndLiveResize):

            Ninja fix: call up to the closest superclass implementation.

2013-04-23  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Global constructors should be configurable and not enumerable
        https://bugs.webkit.org/show_bug.cgi?id=110573

        Reviewed by Geoffrey Garen.

        Update JSC Code generator so that global constructors now have the following
        attributes:
        { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }
        instead of previously:
        { [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: false }

        The new behavior is according to the Web IDL specification (section 4.4):
        http://dev.w3.org/cvsweb/~checkout~/2006/webapi/WebIDL/Overview.html?rev=1.617;content-type=text%2Fhtml#es-interfaces

        This also matches the behavior of Firefox.

        Tests: fast/js/global-constructors-attributes.html
               fast/js/global-constructors-deletable.html

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

2013-04-23  Simon Fraser  <simon.fraser@apple.com>

        Don't create compositing layers for sticky position unless using the ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=115060

        Reviewed by Tim Horton.
        
        Creating compositing layers for sticky position elements is only useful
        when we're using a ScrollingCoordinator, so don't create them if
        we're not in a frame that uses a scrolling coordinator.

        Tests: compositing/layer-creation/no-compositing-for-sticky.html
               platform/mac-wk2/tiled-drawing/sticky/sticky-layers.html

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

2013-04-23  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        'length' property of DOM bindings functions returns wrong value
        https://bugs.webkit.org/show_bug.cgi?id=110569

        Reviewed by Geoffrey Garen.

        Make the 'length' property of Function objects and Interface
        objects behave according to the latest Web IDL specification
        editor draft:
        http://dev.w3.org/2006/webapi/WebIDL/#es-interface-call
        http://dev.w3.org/2006/webapi/WebIDL/#es-operations

        As a result, only mandatory arguments are taken into account
        when computing the value for the 'length' property. This
        behavior is consistent with Firefox and Blink.

        Tests: fast/js/constructor-length.html
               fast/js/function-length.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateConstructorHelperMethods):
        Update the JSC code generator to only account for mandatory parameters
        when computing the value for the 'length' property of Function objects
        and constructors.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        (WebCore):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        (WebCore):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore):
        Rebaseline bindings tests results.

        * fileapi/Blob.idl:
        Remove 'ConstructorParameters=2' extended attribute as the correct value
        is 0, given that a Blob can be constructed without parameter.

        * html/canvas/DataView.idl:
        Update ConstructorParameters extended attribute value from 3 to 1 as only
        one of the 3 parameters is mandatory.

        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        Remove 'ConstructorParameters=1' extended attribute from interfaces using
        'ConstructorTemplate=TypedArray' as the bindings generator now properly
        compute the number of constructor parameters for such interfaces.

        * page/WebKitPoint.idl:
        Remove 'ConstructorParameters=2' extended attribute as the correct value
        should be 0, given that a WebKitPoint can be constructed without parameters.

2013-04-23  Benjamin Poulain  <benjamin@webkit.org>

        Minor String usage fixes in WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=115021

        Reviewed by Andreas Kling.

        Use ASCIILiteral when possible + minor fixes.

        * platform/ContentType.cpp:
        (WebCore::ContentType::codecs):
        * platform/ContentType.h:
        (ContentType):
        * platform/Decimal.cpp:
        (WebCore::Decimal::toString):
        * platform/KURL.cpp:
        (WebCore::KURL::setProtocol):

2013-04-23  Dirk Schulze  <krit@webkit.org>

        Pick up color and mat values in custom shaders
        https://bugs.webkit.org/show_bug.cgi?id=115046

        Reviewed by Dean Jackson.

        The custom filter functions accept color values and mat2-4 functions
        as parameter types. These were implemented in CSS already.
        This patch picks up the values and applies them as uniforms to the
        custom shader program. 

        Tests: css3/filters/custom/custom-filter-color.html
               css3/filters/custom/custom-filter-matN.html

        * platform/graphics/filters/CustomFilterRenderer.cpp:
        (WebCore::CustomFilterRenderer::bindProgramColorParameters): Set uniform for color values.
        (WebCore):
        (WebCore::CustomFilterRenderer::bindProgramMatrixParameters): Set uniform for mat2-4 values.
        (WebCore::CustomFilterRenderer::bindProgramParameters): Call color and matrix functions.
        * platform/graphics/filters/CustomFilterRenderer.h:
        (WebCore):
        (CustomFilterRenderer):

2013-04-23  Jacky Jiang  <zhajiang@blackberry.com>

        Remove redundant code in ViewportArguments::resolve
        https://bugs.webkit.org/show_bug.cgi?id=115054

        Reviewed by Kenneth Rohde Christiansen.

        Remove redundant code "result.orientation = orientation;".

        * dom/ViewportArguments.cpp:
        (WebCore::ViewportArguments::resolve):

2013-04-23  Simon Fraser  <simon.fraser@apple.com>

        Tiled layers clipped inside nested transform/preserve-3d hierarchies
        https://bugs.webkit.org/show_bug.cgi?id=115044

        Reviewed by Dean Jackson.
        
        The optimization added in r139479 to call move() for integral translation
        transforms hit a bug in TransformState::move(). If m_accumulatedTransform is
        not null, we have to apply it.

        Test: compositing/visible-rect/flipped-preserve-3d.html

        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::move):

2013-04-23  Claudio Saavedra  <csaavedra@igalia.com>

        Ctrl+Shift+Right in Windows should select the spacing after the word
        https://bugs.webkit.org/show_bug.cgi?id=110487

        Reviewed by Ryosuke Niwa.

        Tests: editing/deleting/smart-editing-disabled-win.html
               editing/execCommand/remove-format-multiple-elements-win.html
               editing/execCommand/toggle-link-win.html
               editing/execCommand/toggle-unlink-win.html
               editing/selection/extend-selection-enclosing-block-win.html
               editing/style/make-text-writing-direction-inline-win.html
               editing/style/push-down-font-styles-win.html
               editing/style/push-down-implicit-styles-around-list-win.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::nextWordPositionForPlatform): New method
        that takes platform-specific editing behaviour in order to decide
        what the next word position is, that is, for Windows, skip
        spacing, for all other platforms, behave as currently.
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyMovingForward):
        (WebCore::FrameSelection::modifyExtendingLeft): Use the new method
        in all of the above.
        * editing/FrameSelection.h: Declare the new method.

2013-04-23  Benjamin Poulain  <bpoulain@apple.com>

        Inline SelectorQuery::matches, SelectorQuery::queryAll, SelectorQuery::queryFirst
        https://bugs.webkit.org/show_bug.cgi?id=115012

        Reviewed by Andreas Kling.

        Each of these function has a single call site:
        -SelectorQuery::matches from Element::webkitMatchesSelector.
        -SelectorQuery::queryAll from Node::querySelectorAll.
        -SelectorQuery::queryFirst from Node::querySelector.

        Having a dedicated method to jump to was a little overkill.

        * dom/SelectorQuery.cpp:
        * dom/SelectorQuery.h:
        (WebCore::SelectorQuery::matches):
        (WebCore::SelectorQuery::queryAll):
        (WebCore::SelectorQuery::queryFirst):

2013-04-23  Benjamin Poulain  <bpoulain@apple.com>

        Remove wxWebKit's folders from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=115007

        Reviewed by Andreas Kling.

        The wxWebKit port is no longer actively maintained by Kevin
        on webkit.org. Remove the code until new maintainers resume the work.

        * accessibility/wx/AccessibilityObjectWx.cpp: Removed.
        * editing/wx/EditorWx.cpp: Removed.
        * page/wx/DragControllerWx.cpp: Removed.
        * page/wx/EventHandlerWx.cpp: Removed.
        * platform/graphics/wx/ColorWx.cpp: Removed.
        * platform/graphics/wx/FloatRectWx.cpp: Removed.
        * platform/graphics/wx/FontCacheWx.cpp: Removed.
        * platform/graphics/wx/FontCustomPlatformData.cpp: Removed.
        * platform/graphics/wx/FontCustomPlatformData.h: Removed.
        * platform/graphics/wx/FontPlatformData.h: Removed.
        * platform/graphics/wx/FontPlatformDataWx.cpp: Removed.
        * platform/graphics/wx/FontPlatformDataWxMac.mm: Removed.
        * platform/graphics/wx/FontWx.cpp: Removed.
        * platform/graphics/wx/GlyphMapWx.cpp: Removed.
        * platform/graphics/wx/GradientWx.cpp: Removed.
        * platform/graphics/wx/GraphicsContextWx.cpp: Removed.
        * platform/graphics/wx/IconWx.cpp: Removed.
        * platform/graphics/wx/ImageBufferDataWx.h: Removed.
        * platform/graphics/wx/ImageBufferWx.cpp: Removed.
        * platform/graphics/wx/ImageWx.cpp: Removed.
        * platform/graphics/wx/IntPointWx.cpp: Removed.
        * platform/graphics/wx/IntRectWx.cpp: Removed.
        * platform/graphics/wx/IntSizeWx.cpp: Removed.
        * platform/graphics/wx/PathWx.cpp: Removed.
        * platform/graphics/wx/SimpleFontDataWx.cpp: Removed.
        * platform/graphics/wx/TransformationMatrixWx.cpp: Removed.
        * platform/image-decoders/wx/ImageDecoderWx.cpp: Removed.
        * platform/wx/ClipboardWx.cpp: Removed.
        * platform/wx/ClipboardWx.h: Removed.
        * platform/wx/ContextMenuItemWx.cpp: Removed.
        * platform/wx/ContextMenuWx.cpp: Removed.
        * platform/wx/CursorWx.cpp: Removed.
        * platform/wx/DragDataWx.cpp: Removed.
        * platform/wx/DragImageWx.cpp: Removed.
        * platform/wx/EventLoopWx.cpp: Removed.
        * platform/wx/FileSystemWx.cpp: Removed.
        * platform/wx/KeyEventWin.cpp: Removed.
        * platform/wx/KeyboardEventWx.cpp: Removed.
        * platform/wx/LanguageWx.cpp: Removed.
        * platform/wx/LocalDC.h: Removed.
        * platform/wx/LocalizedStringsWx.cpp: Removed.
        * platform/wx/LoggingWx.cpp: Removed.
        * platform/wx/MimeTypeRegistryWx.cpp: Removed.
        * platform/wx/MouseEventWx.cpp: Removed.
        * platform/wx/MouseWheelEventWx.cpp: Removed.
        * platform/wx/PasteboardWx.cpp: Removed.
        * platform/wx/PopupMenuWx.cpp: Removed.
        * platform/wx/PopupMenuWx.h: Removed.
        * platform/wx/RenderThemeWx.cpp: Removed.
        * platform/wx/RunLoopWx.cpp: Removed.
        * platform/wx/SSLKeyGeneratorWx.cpp: Removed.
        * platform/wx/ScreenWx.cpp: Removed.
        * platform/wx/ScrollViewWx.cpp: Removed.
        * platform/wx/ScrollbarThemeWx.cpp: Removed.
        * platform/wx/ScrollbarThemeWx.h: Removed.
        * platform/wx/SearchPopupMenuWx.cpp: Removed.
        * platform/wx/SearchPopupMenuWx.h: Removed.
        * platform/wx/SharedBufferWx.cpp: Removed.
        * platform/wx/SharedTimerWx.cpp: Removed.
        * platform/wx/SoundWx.cpp: Removed.
        * platform/wx/SystemTimeWx.cpp: Removed.
        * platform/wx/TemporaryLinkStubs.cpp: Removed.
        * platform/wx/TextBreakIteratorInternalICUWx.cpp: Removed.
        * platform/wx/WidgetWx.cpp: Removed.
        * platform/wx/wxcode/cairo/non-kerned-drawing.cpp: Removed.
        * platform/wx/wxcode/fontprops.cpp: Removed.
        * platform/wx/wxcode/fontprops.h: Removed.
        * platform/wx/wxcode/gdiplus/non-kerned-drawing.cpp: Removed.
        * platform/wx/wxcode/gtk/fontprops.cpp: Removed.
        * platform/wx/wxcode/gtk/non-kerned-drawing.cpp: Removed.
        * platform/wx/wxcode/gtk/scrollbar_render.cpp: Removed.
        * platform/wx/wxcode/mac/carbon/fontprops.mm: Removed.
        * platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp: Removed.
        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp: Removed.
        * platform/wx/wxcode/non-kerned-drawing.h: Removed.
        * platform/wx/wxcode/scrollbar_render.h: Removed.
        * platform/wx/wxcode/win/fontprops.cpp: Removed.
        * platform/wx/wxcode/win/non-kerned-drawing.cpp: Removed.
        * platform/wx/wxcode/win/scrollbar_render.cpp: Removed.
        * plugins/wx/PluginDataWx.cpp: Removed.

2013-04-23  Roger Fong  <roger_fong@apple.com>

        AppleWin build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-04-23  Roger Fong  <roger_fong@apple.com>

        AppleWin build fix.

        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::create):
        (WebCore):
        * inspector/InspectorMemoryAgent.h:
        (InspectorMemoryAgent):

2013-04-23  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Exclusions] shape-inside overflow should be pushed to the outside of the content box
        https://bugs.webkit.org/show_bug.cgi?id=114526

        Reviewed by David Hyatt.

        The specification has changed to define shape-outside as the inverse of an exclusion. Overflowing content
        should not overlap the shape, and it should be pushed outside the content box. This change affects several
        tests, but only one new has been added. In this change I'm not intended to include the behavior change for
        shape-inside on CSS Regions, I'm going to fix that in a follow up patch.

        Tests: fast/exclusions/shape-inside/shape-inside-overflow-fixed-dimensions.html: Modified.
               fast/exclusions/shape-inside/shape-inside-bottom-edge.html: Modified.
               fast/exclusions/shape-inside/shape-inside-empty.html: Modified.
               fast/exclusions/shape-inside/shape-inside-overflow-fixed-dimensions.html: Added.
               fast/exclusions/shape-inside/shape-inside-overflow.html: Modified.
               fast/exclusions/shape-inside/shape-inside-percentage.html: Modified.
               fast/exclusions/shape-inside/shape-inside-rounded-rectangle-004.html: Modified.

        * rendering/ExclusionShapeInfo.h:
        (WebCore::ExclusionShapeInfo::clearSegments): Shape-outside's code uses shape-inside codepaths, when that happens we need to provide a
        way to reset the m_segments member.
        (WebCore::ExclusionShapeInfo::shapeContainingBlockHeight): The containing block's height is stored in m_shapeLogicalHeight, I added a
        function to get this value when we need it to calculate the content box's bottom position.
        (ExclusionShapeInfo):
        (WebCore::ExclusionShapeInfo::lineOverlapsShapeBounds):
        (WebCore::ExclusionShapeInfo::lineWithinShapeBounds):  Add function to test whether a whole line is within a shape or not.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Overflowing content should start under the content box.
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): Since we use shape-inside codepaths for shape-outside in layoutRunsAndFloatsInRange function
        and for shape-outside is not a requirement to check the line's bottom position is within the shape we might end up with some extra segments here.
        In this case we should clear segments, since we don't want to apply any horizontal offsets on the overflowing content.

2013-04-23  Antti Koivisto  <antti@apple.com>

        Avoid computing style twice when element has no existing style
        https://bugs.webkit.org/show_bug.cgi?id=115042

        Reviewed by Andreas Kling.
        
        We currently compute element style twice if we end up having to reattach, first in recalcStyle and then
        again during attach(). We can easily avoid this in common case where the element has no existing style
        (usually because it is display:none). 

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        
            Don't compute the style and diff if there is no existing style. There is nothing to diff against.
            Instead just call reattach() directly, we ended up doing that anyway with the existing code.
        
2013-04-23  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        WebSocket: Return type of send() should be void if hybi-10 protocol is chosen
        https://bugs.webkit.org/show_bug.cgi?id=65850

        Reviewed by Alexey Proskuryakov.

        WebSocket API draft changed the return type of send() from boolean to void based on Simon
        Pieters' post to WHATWG. Firefox 8 and IE 10 already follow the specification, hence it should
        make sense for us to do the same when hybi protocol is used.

        Original patch by Yuta Kitamura  <yutak@chromium.org>

        Tests: http/tests/websocket/tests/hybi/bufferedAmount-after-close.html (updated)
               http/tests/websocket/tests/hybi/send-after-close-on-unload.html (updated)

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::send):
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocket.idl:

2013-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        ScrollbarThemeComposite depends on Page/FrameView/ChromeClient
        https://bugs.webkit.org/show_bug.cgi?id=21361

        Reviewed by Andreas Kling.

        Remove unused header includes.

        * platform/ScrollbarThemeComposite.cpp:

2013-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=112160

        Reviewed by Andreas Kling.

        * platform/network/soup/GOwnPtrSoup.cpp:
        (WTF::SoupMessageHeaders): Add freeOwnedGPtr implementation for
        SoupMessageHeaders.
        (WTF):
        * platform/network/soup/GOwnPtrSoup.h:
        (WTF):
        * platform/network/soup/ResourceRequest.h:
        (ResourceRequest):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageHeaders): New function
        to update the given SoupMessageHeaders with the ResourceRequest
        headers.
        (WebCore::ResourceRequest::updateFromSoupMessageHeaders): New
        function to update the ResourceRequest headers with the given
        SoupMessageHeaders.
        (WebCore::ResourceRequest::updateSoupMessage): Use
        updateSoupMessageHeaders() to update the headers.
        (WebCore::ResourceRequest::toSoupMessage): Ditto.
        (WebCore::ResourceRequest::updateFromSoupMessage): Use
        updateFromSoupMessageHeaders to update the headers.

2013-04-23  Andreas Kling  <akling@apple.com>

        Clear StyleResolver state before returning from styleForElement().
        <http://webkit.org/b/115035>

        Reviewed by Antti Koivisto.

        From Blink r148687 by <inferno@chromium.org>.

        A cached element pointer in the resolver state was causing confusion because
        in some cases a subsequent call to styleForElement() would use a pointer to
        a different object that is at the same memory address as the previous one.

        Test: fast/css/reload-non-styled-element-crash.html

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

2013-04-23  Andreas Kling  <akling@apple.com>

        XSSAuditor performance regression due to threaded parser changes.
        <http://webkit.org/b/115037>
        <rdar://problem/13716069>

        Reviewed by Anders Carlsson.

        From Blink r148792 by <abarth@chromium.org>:

        The refactoring we did for the threaded parser introduced a performance
        regression in innerHTML because we'd boot up the XSSAuditor for fragment
        parsing. This CL returns to our earlier behavior of not booting up the
        XSSAuditor when parsing fragments.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::initForFragment):
        * html/parser/XSSAuditor.h:
        (XSSAuditor):

2013-04-23  Andreas Kling  <akling@apple.com>

        Speed up ElementData::getAttributeItem(), which is hot.
        <http://webkit.org/b/115031>

        Reviewed by Antti Koivisto.

        From Blink r148622 by <cevans@chromium.org>.

        The previous version had a couple of issues:
        - Incurred new WTF::Vector::operator[] checks.
        - Had a branch in _every_ loop iteration that checked whether the storage was Vector or array[] backed.

        Both these issues are fixed, and CloneNodes.html seems reliably at +2%.
        I also believe GetElement.html is maybe +1%.

        For WebKit, also applied the same optimization to getAttributeItemIndex().

        * dom/Element.h:
        (WebCore::ElementData::attributeBase):
        (WebCore::ElementData::getAttributeItemIndex):
        (WebCore::ElementData::getAttributeItem):
        (WebCore::ElementData::attributeItem):

2013-04-23  Antoine Quint  <graouts@apple.com>

        Initial advance of text runs should be taken into account
        https://bugs.webkit.org/show_bug.cgi?id=114949

        Reviewed by Darin Adler.

        Keep track of complex text runs' initial advance by adding a new
        member to GlyphBuffer and adding the initial advance of any non-first
        text run to the advance of the last glyph added for the previous text run.
        Additionally, we now correctly handle advance values in the y-axis.

        Test: fast/text/complex-initial-advance.html

        * WebCore.exp.in:
        Add support for new WebKitSystemInterface API.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::drawGlyphBuffer):
        Take into account the buffer's initial advance in the y-axis to adjust
        the point at which to draw the buffers. Additionally, keep track of advances
        on the y-axis as well as the x-axis (which we already were doing) as we iterate
        through glyphs and adjust the start point.
        (WebCore::Font::drawEmphasisMarks):
        Adopt change of GlyphBuffer::advanceAt() return type.
        * platform/graphics/GlyphBuffer.h:
        Removing the WINCE-specific GlyphBufferAdvance struct since heights are now necessary.
        (WebCore::GlyphBufferAdvance::GlyphBufferAdvance):
        New default constructor for GlyphBufferAdvance to support the m_initialAdvance member.
        (WebCore::GlyphBuffer::setInitialAdvance):
        (WebCore::GlyphBuffer::initialAdvance):
        New APIs to get and set the initial advance for a glyph buffer.
        (WebCore::GlyphBuffer::advanceAt):
        Return a GlyphBufferAdvance rather than a float which used to be only
        the glyph buffer's x-axis advance. This is necessary to handle deltas
        on the y-axis as well (see WebCore::Font::drawGlyphBuffer).
        * platform/graphics/GlyphBuffer.h:
        (GlyphBuffer):
        (WebCore::GlyphBuffer::setInitialAdvance):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advanceOneCharacter):
        Adopt change of GlyphBuffer::advanceAt() return type.
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        Adopt change of GlyphBuffer::advanceAt() return type.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::advance):
        When processing the first text run, set that run's initial advance as
        the glyph buffer's initial advance.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        Represent the initial advance for a text run by adjusting the advance
        of the last glyph of the previous text run in the glyph buffer.
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::initialAdvance):
        (ComplexTextRun):
        New API to read the inital advance of a complex text run.
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        Obtain the text run's initial advance via the new wkCTRunGetInitialAdvance
        WebKitSystemInterface API.
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawGlyphs):
        Adopt change of GlyphBuffer::advanceAt() return type.
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Add support for the new wkCTRunGetInitialAdvance WebKitSystemInterface API.
        * platform/wx/wxcode/cairo/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):
        Adopt change of GlyphBuffer::advanceAt() return type.
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::drawSVGGlyphs):
        Adopt change of GlyphBuffer::advanceAt() return type.

2013-04-23  Noam Rosenthal  <noam@webkit.org>

        [Texmap] Don't paint to an intermediate surface when the result is going to be clipped out completely.
        https://bugs.webkit.org/show_bug.cgi?id=115015

        Reviewed by Allan Sandfeld Jensen.

        Maintain a clipBounds rectangle in TextureMapper, and test it against the bounds of an intermediate
        surface before it is painted.
        This allows us to opt out completely of painting into the surface if the result is going to be optimized
        out by the GPU clipping.

        Covered by tests in compositing/overlap-blending.

        * platform/graphics/texmap/TextureMapper.h:
        (TextureMapper):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::clipBounds):
        (WebCore):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintUsingOverlapRegions):

2013-04-23  Noam Rosenthal  <noam@webkit.org>

        [Coordinated Graphics] Remove the lockAnimations code path
        https://bugs.webkit.org/show_bug.cgi?id=114899

        Reviewed by Benjamin Poulain.

        Remove locking/unlocking animations and checks for the lock state.
        The animation locking has been tested to create not-so-smooth animations,
        while the use case where the composited animations run out of sync from
        the non-composited animations is very rare and unnoticeable.

        No new tests, removing functionality that wasn't tested in the first place.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::CoordinatedGraphicsScene):
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebCore::CoordinatedGraphicsScene::commitSceneState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        (CoordinatedGraphicsScene):

2013-04-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Respect image-rendering setting for determing image-rendering quality
        https://bugs.webkit.org/show_bug.cgi?id=113405

        Reviewed by Benjamin Poulain.

        Remove the CSS4 values as they are not ready for implementation yet.
        We still parse the -webkit-crisp-edges and SVG compatibility values to
        be closer to the the partial support in Gecko and Presto.

        Tests: fast/css/image-rendering-canvas.html
               fast/css/image-rendering-parsing.html
               fast/css/image-rendering.html
               fast/css/optimize-contrast-image.html

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EImageRendering):
        * css/CSSValueKeywords.in:
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/style/RenderStyleConstants.h:

2013-04-23  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148923.
        http://trac.webkit.org/changeset/148923
        https://bugs.webkit.org/show_bug.cgi?id=115020

        The patch causes multiple failures in CSS, canvas tests
        (Requested by zdobersek on #webkit).

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-04-22  Noam Rosenthal  <noam@webkit.org>

        [EFL] Assertion Failures in Coordinated Graphics after r148433
        https://bugs.webkit.org/show_bug.cgi?id=114731

        Reviewed by Gyuyoung Kim.

        The assert is incorrect. In some cases in coordinated graphics we may have a backing store
        and drawsContent would be set to false.

        No new tests.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):

2013-04-22  Suchit Agrawal  <a.suchit@samsung.com>

        table's text aligned on top instead of center because of rowspan
        https://bugs.webkit.org/show_bug.cgi?id=18092

        Reviewed by Beth Dakin.

        Last row in the rowspan is not getting the height of rowspan cell because there is not
        enough rows present below rowspan cell and we are strictly applying height of rowspan
        to the row which should lay last in the rowspan based of rowspan value.

        When row contains rowspan cell and it is last row of the table then
        rowspan height is adding to last row of the table.

        Test: fast/table/Rowspan-value-more-than-number-of-rows-present.html

        It calculates logical height of the rows in the table.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2013-04-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Region's float parent doesn't size according to region size but to content node size
        https://bugs.webkit.org/show_bug.cgi?id=111332

        Reviewed by David Hyatt.

        Tests: fast/regions/intrinsic-sized-regions.html
               fast/regions/region-with-float-parent.html

        The patch ensures that the computation of region's preferred widths
        takes into account the region width/min-width if these values are specified.
        Also implemented the computation of intrinsic widths for a region,
        based on the min/max preferred widths of the associated flow thread.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::computeIntrinsicLogicalWidths):
        (WebCore):
        (WebCore::RenderRegion::computePreferredLogicalWidths):
        * rendering/RenderRegion.h:
        (RenderRegion):

2013-04-22  Jessie Berlin  <jberlin@apple.com>

        Debug build fix.

        Rubber-stamped by Ryosuke Niwa.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h:
        (WebCore):
        (WebCore::InspectorMemoryAgent::create):
        (InspectorMemoryAgent):

2013-04-22  Brady Eidson  <beidson@apple.com>

        Address review feedback I forgot to address in r148929
        https://bugs.webkit.org/show_bug.cgi?id=114480

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest): Rework the "what" comment into a more useful "why" comment.

2013-04-22  Benjamin Poulain  <bpoulain@apple.com>

        Second Mac debug build fix after r148921

        Unreviewed.

        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h:
        (InspectorMemoryAgent):

2013-04-22  Brady Eidson  <beidson@apple.com>

        REGRESSION (r141136): Wiki "Random article" function very broken.
        <rdar://problem/13229985> and https://bugs.webkit.org/show_bug.cgi?id=114480

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/navigation/redirect-to-random-url-versus-memory-cache.html

        If we are performing a conditional GET to revalidate a resource and there's a redirect,
        check to see if the redirect is to a different URL than the final URL of the resource.

        If the URLs differ then we should make the redirect-request unconditional and do a normal load.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::makeUnconditional):

        * platform/network/ResourceRequestBase.h:
        (ResourceRequestBase):

2013-04-22  Benjamin Poulain  <bpoulain@apple.com>

        Mac debug build fix after r148921

        Unreviewed.

        * page/animation/CompositeAnimation.cpp:

2013-04-22  Rashmi Shyamasundar  <rashmi.s2@samsung.com>

        [Cairo] Canvas-shadow behavior is not being as expected
        https://bugs.webkit.org/show_bug.cgi?id=108897

        Reviewed by Martin Robinson.

        Use the pattern-extend-mode "CAIRO_EXTEND_NONE" instead of "CAIRO_EXTEND_PAD" in
        PlatformContextCairo::drawSurfaceToContext().

        In the function PlatformContextCairo::drawSurfaceToContext(), a pattern is being
        created from the source surface and this pattern is drawn onto the destination
        context. There is no gradient involved. Hence the extend mode for filling the
        pattern should be "CAIRO_EXTEND_NONE". If we use the extend mode
        "CAIRO_EXTEND_PAD" in PlatformContextCairo::drawSurfaceToContext(), the original
        image area is also filled with the shadow color which is not the expected behavior.

        Test: fast/canvas/canvas-image-shadow.html

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-04-22  Benjamin Poulain  <benjamin@webkit.org>

        Remove the memory instrumentation code
        https://bugs.webkit.org/show_bug.cgi?id=114931

        Reviewed by Andreas Kling.

        The Memory Instrumentation code is unfinished and has already
        become out of sync the objects it is supposed to represent.

        The current approach does not seem maintainable, it is better to
        remove it before someone gets hurt.

        By removing the code, the binary become 1240976 bytes smaller.
        Yep, almost 1 Mb, bringing WebCore to the size it has 5 months ago :)

        * MostWebCoreFiles: remove the support for memory instrumentation.

2013-04-22  Bear Travis  <betravis@adobe.com>

        Do not reuse ExclusionShapeInsideInfo in a recursive region layout
        https://bugs.webkit.org/show_bug.cgi?id=114467

        Reviewed by David Hyatt.

        Elements that respect shape-inside that have inline children should not reuse an
        ExclusionShapeInsideInfo for their children's layout. This patch adds the test
        for regions. See the details for non-region layout in bug 104582.
        https://bugs.webkit.org/show_bug.cgi?id=104582

        Test: fast/regions/shape-inside/shape-inside-recursive-layout.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutExclusionShapeInsideInfo): Do not look up a region's
        ExclusionShapeInsideInfo if a block is already respecting shape-inside.

2013-04-22  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Fix remaining introspection warnings
        https://bugs.webkit.org/show_bug.cgi?id=114980

        Reviewed by Gustavo Noronha Silva.

        * bindings/gobject/WebKitDOMCustom.h: Add scope and transfer annotations and flesh
        out gtkdoc for completeness.
        * bindings/gobject/WebKitDOMEventTarget.h:
        (_WebKitDOMEventTargetIface): Ditto and also align virtual method names with those used
        for the concrete ones.

2013-04-22  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Support unlocking encrypted PDFs
        https://bugs.webkit.org/show_bug.cgi?id=114938
        <rdar://problem/12872888>

        Reviewed by Alexey Proskuryakov.

        Export HTMLNames::typeAttr.

        * WebCore.exp.in:

2013-04-22  Ryosuke Niwa  <rniwa@webkit.org>

        Use-after-free in CompositeEditCommand::cloneParagraphUnderNewElement
        https://bugs.webkit.org/show_bug.cgi?id=114911

        Reviewed by Oliver Hunt.

        Back ported https://src.chromium.org/viewvc/blink?revision=148680&view=revision.

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

2013-04-22  Eric Carlson  <eric.carlson@apple.com>

        [Mac] "automatic" track selection should only select a track that matches user language
        https://bugs.webkit.org/show_bug.cgi?id=114976

        Reviewed by Jer Noble.

        Test: media/track/track-automatic-subtitles.html

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::textTrackSelectionScore): When in "automatic" mode, only
            consider text tracks that match the user's preferred language when the primary audio track
            does not.

2013-04-22  Jer Noble  <jer.noble@apple.com>

        Cancelling load may cause deadlock in -[AVPlayerItem release]
        https://bugs.webkit.org/show_bug.cgi?id=114962

        Reviewed by Eric Carlson.

        Work around a bug in AVAssetResourceLoader by using a generic, non-main dispatch queue
        to recieve AVAssetResourceLoaderDelegate callbacks, and then marshalling those
        callbacks to the main thread asynchronously.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::globalLoaderDelegateQueue): Added.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Use the new global queue.
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
            Marshall the request to the main queue, and return YES (wait) immediately.

2013-04-22  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up libPlatform.la
        https://bugs.webkit.org/show_bug.cgi?id=114168

        Reviewed by Martin Robinson.

        No new tests - no new functionality.

        * GNUmakefile.am: Also add the LevelDB-specific cppflags to the platform_cppflags if required as the LevelDB
        code is now built into the new libPlatform.la library.
        * GNUmakefile.list.am: Build a small set of non-GTK-specific platform source files that are already free of
        platform violations into the new libPlatform.la library.

2013-04-22  Andy Estes  <aestes@apple.com>

        Range.getClientRects() should not include rects for partially selected elements
        https://bugs.webkit.org/show_bug.cgi?id=76839

        Reviewed by Sam Weinig.

        CSSOM says that Range.getClientRects() should include the border boxes
        of each element selected by the range. However, we were also
        incorrectly including border boxes for partially selected elements.
        For instance, consider the following selection:

            <div>line one<br>line two</div>
            -------------

        The <div> is two lines tall, but only the first line is selected.
        Despite this, we'd include the <div>'s border box since its start tag
        was included in the selection.

        Fix this by excluding partially selected elements. This is accomplished
        by skipping over elements that come after the start boundary point of
        the range but are ancestors of the end boundary point.

        Added test cases to LayoutTests/fast/dom/Range/getClientRects.html.

        * dom/Range.cpp:
        (WebCore::Range::getBorderAndTextQuads):

2013-04-22  Yi Shen  <max.hong.shen@gmail.com>

        Crash on OS X when shift clicking outside of input
        https://bugs.webkit.org/show_bug.cgi?id=104058

        Reviewed by Chang Shu.

        Shift clicking outside of a focused div while removing the focused div from
        the dom tree at the same time may hit a null visible position, which should
        not be used to calculate the text distance with the new selection's start and
        end position. Otherwise, the browser may crash.

        Test: editing/selection/crash-on-shift-click.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):

2013-04-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Scrollbar should not depend on EventHandler, Frame and FrameView
        https://bugs.webkit.org/show_bug.cgi?id=114941

        Reviewed by Darin Adler.

        It's a layering violation that Scrollbar uses EventHandler, Frame
        and FrameView. Frame is used to get the EventHandler that is used
        to set mousePressed to false after a Scrollbar::mouseUp(). This is
        not really needed, since EventHandler already sets m_mousePressed
        to false when calling Scrollbar::mouseUp(). The PopupMenu windows
        implementation also calls Scrollbar::mouseUp(), but that scrollbar
        is not inside a FrameView.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::isScrollViewScrollbar):
        isScrollViewScrollbar() is a method of ScrollView so we don't need
        to cast to FrameView.
        (WebCore::Scrollbar::mouseUp): Remove EventHandler ussage.

2013-04-22  Andreas Kling  <akling@apple.com>

        Shrink baseline size of WTF::Vector on 64-bit by switching to unsigned capacity and size.
        <http://webkit.org/b/97268>
        <rdar://problem/12376519>

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Add a workaround for GCC 4.6.x in Release mode so it
        does not crash.

2013-04-22  John Griggs  <jgriggs@blackberry.com>

        [BlackBerry] URL decode data: URLs before passing to the platform media player.
        https://bugs.webkit.org/show_bug.cgi?id=114887

        Reviewed by Rob Buis.

        Pass data URL through URL decoding before passing to platform media player.  PR 313635.

        Reviewed internally by Liam Quinn

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::load):

2013-04-22  Xuefei Ren  <xren@blackberry.com>


        fix build warning(unused parameter)
        https://bugs.webkit.org/show_bug.cgi?id=114855

        Reviewed by Rob Buis.

        remove warning(unused parameter) in
        Source/WebCore/platform/graphics/blackberry

        * platform/graphics/blackberry/CanvasLayerWebKitThread.cpp:
        (WebCore::CanvasLayerCompositingThreadClient::drawTextures):
        (WebCore::CanvasLayerCompositingThreadClient::deleteTextures):
        (WebCore::CanvasLayerCompositingThreadClient::commitPendingTextureUploads):
        * platform/graphics/blackberry/FontBlackBerry.cpp:
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/blackberry/FontCacheBlackBerry.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getTraitsInFamily):
        * platform/graphics/blackberry/GlyphPageTreeNodeBlackBerry.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/blackberry/GraphicsContextBlackBerry.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clipConvexPolygon):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/blackberry/ImageBufferBlackBerry.cpp:
        (WebCore::flushAndDraw):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::drawTile):
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/blackberry/PatternBlackBerry.cpp:
        (WebCore::Pattern::platformPattern):

2013-04-22  Mike Fenton  <mifenton@rim.com>

        [BlackBerry] Add additional datalist support.
        https://bugs.webkit.org/show_bug.cgi?id=114883

        Reviewed by Rob Buis.

        PR 210083.

        Extend support for datalist to include all non-popup input types.

        Re-enabling fast/forms/datalist/input-list

        Internally Reviewed by Otto Cheung.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::supportsDataListUI):

2013-04-22  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Add dummy implementations of DragData::droppedFileSystemId()
        https://bugs.webkit.org/show_bug.cgi?id=114861

        Reviewed by Carlos Garcia Campos.

        * platform/blackberry/DragDataBlackBerry.cpp:
        (WebCore):
        (WebCore::DragData::droppedFileSystemId):

2013-04-22  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Elements in a region should be assignable to a named flow
        https://bugs.webkit.org/show_bug.cgi?id=74144

        Reviewed by David Hyatt.

        DOM children of a region must not be rendered as children of the region, but can be collected in flow threads.

        NodeRenderingContext::parentRenderer now creates the parent render flow thread if it doesn't exist.

        Element::moveToFlowThreadIsNeeded is a virtual method that is overriden in PseudoElement to return false and
        in SVGElement so only svg root elements can directly be collected by a render flow thread.

        RenderObject::canDOMChildrenHaveRenderParent exists to optimize the code so nodes inside regions (and maybe
        other types of renderers in the future) can still have renderers if they need to be in a flow thread while the
        rest of renderers that can't have children skip the new instructions.

        Tests: fast/regions/flow-body-in-html.html . To test the duplicate bug #103685.
               fast/regions/region-content-flown-into-region.html
               fast/regions/universal-selector-children-to-the-same-region.html . To test the duplicate bug #103685.

        * dom/Element.cpp:
        (WebCore::Element::moveToFlowThreadIsNeeded):
        * dom/Element.h:
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::parentRenderer): the renderer that will be the parent for this node's renderer.
        In the case of RenderFlowThreads, it may need to create it.
        (WebCore::NodeRenderingContext::shouldCreateRenderer): In a region, only the children that need to be in a flow
        thread should have a renderer.
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        (WebCore::NodeRenderingContext::moveToFlowThread):
        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        * dom/PseudoElement.h: pseudo-elements cannot be directly collected into a named flow.
        * dom/Text.cpp:
        (WebCore::Text::textRendererIsNeeded):
        (WebCore::Text::updateTextRenderer): Because calling textRendererIsNeeded(NodeRenderingContext(...)) on a
        non-const l-value NodeRenderingContext cannot be done on a temporary object on the stack.
        * dom/Text.h:
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::isContentNodeRegisteredWithAnyNamedFlow):
        * rendering/FlowThreadController.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::canDOMChildrenHaveRenderParent): Even if this render object can't have render children,
        the children in the DOM tree may have a render parent (that is different from this render object).
        * rendering/RenderRegion.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::moveToFlowThreadIsNeeded): Allow only svg root elements to be directly collected by a
        render flow thread.
        * svg/SVGElement.h:

2013-04-22  Alberto Garcia  <agarcia@igalia.com>

        Gradient: add PlatformGradient definition for BlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=114727

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/Gradient.h:
        (Graphics):

2013-04-22  Andrei Bucur  <abucur@adobe.com>

        Use DOM ordering for list counts
        https://bugs.webkit.org/show_bug.cgi?id=110352

        Reviewed by Elliott Sprehn.

        Currently the list items ordering is made by traversing the render tree. This gives bad results for:
        - list items flown inside regions because they are not rendered as descendants of their DOM list ancestors.
        - list items matched to insertion points inside a shadow tree. The insertion point may be a child of a
        list so the numbering gets broken.

        To implement correct DOM ordering I've taken into account the fact that pseudo-elements can have display: list-item
        so they should be included when traversing the DOM tree. I've added helper methods on the NodeTraversal
        namespace that should allow easily traversing the tree including the pseudo-elements (e.g. firstChildWithPseudo
        for an element with pseudo-before will return the before PseudoElement). Using these helper methods I've implemented
        pre-order traversal methods aware of the pseudo-elements.
        An effect of this change is how the list items inside shadow tree update their counting. With the patch, if there's
        no <ol> or <ul> element on the ancestor chain of a <li> element to the shadow root, the list node will be considered the
        first parent of the <li> or the shadow root if there is no ancestor.
        The RenderListItem class now makes use of this new method of traversal, replacing the one based on the render tree.
        To simplify the CSS counters implementation, I've changed the traversal functions inside RenderCounter to also make use
        of this method. The CSS counters and the list items now have the same traversal algorithm.

        In later patches I'll add tests that should cover the regions and shadow DOM use cases.
        Tests bug for shadow DOM: https://bugs.webkit.org/show_bug.cgi?id=113193
        Tests bug for regions: https://bugs.webkit.org/show_bug.cgi?id=103975

        Tests: no new tests is this patch; added the correct expectations for fast/lists/positioned-count-crash.html
        and fast/dom/shadow/shadow-and-list-elements.html

        * dom/Node.cpp:
        (WebCore::Node::pseudoAwarePreviousSibling):
        (WebCore):
        (WebCore::Node::pseudoAwareNextSibling):
        (WebCore::Node::pseudoAwareFirstChild):
        (WebCore::Node::pseudoAwareLastChild):
        * dom/Node.h:
        (Node):
        * dom/NodeTraversal.cpp:
        (WebCore):
        (WebCore::NodeTraversal::previousIncludingPseudo):
        (NodeTraversal):
        (WebCore::NodeTraversal::nextIncludingPseudo):
        (WebCore::NodeTraversal::nextIncludingPseudoSkippingChildren):
        * dom/NodeTraversal.h:
        (ElementTraversal):
        (NodeTraversal):
        (WebCore::ElementTraversal::previousIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudoSkippingChildren):
        (WebCore::ElementTraversal::pseudoAwarePreviousSibling):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::attach):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::updateItemValues):
        (WebCore::HTMLOListElement::recalculateItemCount):
        * rendering/RenderCounter.cpp:
        (WebCore::previousInPreOrder):
        (WebCore::previousSiblingOrParent):
        (WebCore::parentElement):
        (WebCore::nextInPreOrder):
        * rendering/RenderListItem.cpp:
        (WebCore):
        (WebCore::enclosingList):
        (WebCore::RenderListItem::nextListItem):
        (WebCore::previousListItem):
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::explicitValueChanged):
        (WebCore::previousOrNextItem):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderListItem.h:
        (RenderListItem):

2013-04-22  Alberto Garcia  <agarcia@igalia.com>

        Fix multiple definition of ImageBuffer::platformLayer() in the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=114936

        Reviewed by Carlos Garcia Campos.

        We already have a definition in ImageBufferBlackBerry.cpp.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore):

2013-04-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Division by zero in CSSGradientValue::addStops()
        https://bugs.webkit.org/show_bug.cgi?id=114807

        Reviewed by Dean Jackson.

        The normalization of the color stop positions of a linear gradient
        doesn't take into account that the first and last position can be
        the same. In such case the positions are computed dividing by 0.
        Clamp the positions to 1 without moving the end points in such
        case to match what other browsers do. This ensures that positions
        passed to the platform gradient are in the 0-1 range which fixes a
        crash due to an assert in BlackBerry port running test
        fast/forms/type-after-focus-rule-shrink-width.html.

        Test: fast/gradients/css3-color-stop-invalid.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):

2013-04-21  Benjamin Poulain  <benjamin@webkit.org>

        Fix some minor bad use of strings in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=114907

        Reviewed by Darin Adler.

        * editing/Editor.cpp:
        (WebCore::Editor::selectedText): This was implicitly getting the emptyString()
        for the argument "".
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::takeResults): ditto.

2013-04-21  Dirk Schulze  <krit@webkit.org>

        [Part 4] Parse the custom() function in -webkit-filter: parse the matN() functions
        https://bugs.webkit.org/show_bug.cgi?id=71444

        Reviewed by Dean Jackson.

        Custom filter parameters should support mat2 to mat4 value functions. Added parsing
        and style resolving bits to support the matrix function values. A later patch will
        add the matrices to the shader program.

        https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#custom-filter-parameters

        Modified existing tests to cover changes.

        * GNUmakefile.list.am: Added WebKitCSSMatFunctionValue to individual build systems.
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForCustomFilterMatParameter):
        (WebCore):
        (WebCore::valueForCustomFilterParameter):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseMatValue):
        (WebCore):
        (WebCore::CSSParser::parseCustomFilterParameters):
        * css/CSSParser.h:
        (WebCore):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::reportMemoryUsage):
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        (WebCore::CSSValue::isWebKitCSSMatFunctionValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::parseCustomFilterArrayParameter):
        (WebCore::StyleResolver::parseCustomFilterParameter):
        * css/StyleResolver.h:
        (StyleResolver):
        * css/WebKitCSSMatFunctionValue.cpp:
        (WebCore::WebKitCSSMatFunctionValue::WebKitCSSMatFunctionValue):
        (WebCore::WebKitCSSMatFunctionValue::customCssText):
        (WebCore::WebKitCSSMatFunctionValue::cloneForCSSOM):
        (WebCore::WebKitCSSMatFunctionValue::equals):
        (WebCore::WebKitCSSMatFunctionValue::reportDescendantMemoryUsage):
        * css/WebKitCSSMatFunctionValue.h:
        (WebKitCSSMatFunctionValue):
        (WebCore::WebKitCSSMatFunctionValue::create):
        * platform/graphics/filters/CustomFilterArrayParameter.h:
        (WebCore::CustomFilterArrayParameter::create):
        (WebCore::CustomFilterArrayParameter::CustomFilterArrayParameter):
        * platform/graphics/filters/CustomFilterParameter.h:
        (CustomFilterParameter):
        * platform/graphics/filters/CustomFilterRenderer.cpp:
        (WebCore::CustomFilterRenderer::bindProgramParameters):

2013-04-12  Balazs Kelemen  <kbalazs@webkit.org>

        [GStreamer] Media attribute preload="none" is not honored
        https://bugs.webkit.org/show_bug.cgi?id=114357

        Reviewed by Philippe Normand.

        Fix the logic that prevents live streams from being buffered to not make preload="none" ignored.

        Test: http/tests/media/video-preload.html
        We need a http test because the bug does not triggered with local files.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):
        Remove m_originalPreloadWasAutoAndWasOverridden because it is not necessary and it is causing this bug.
        Currently if the tag has preload="none" attribute we set m_preload to Auto in the constructor. After that
        MedaPlayer calls setPreload(None), so we set m_originalPreloadWasAutoAndWasOverridden to true and later
        reset m_preload to Auto. The error prone factor here is that the m_preload member is repeated in the
        private class and setPreload is also used there. This seems to be necessary because we need to be able
        to ignore preloading if this is a live stream. Fortunately the original parsed value is available in the
        constructor, so we can use that. This will give the correct value that we should override only in the case
        of a live stream and that's it, we don't need to reset it later to Auto.
        Furthermore, we should ignore setting preload to auto from js if it is a live stream. This patch also handles
        this with an early return in setPreload.

2013-04-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Widget should not depend on AXObjectCache
        https://bugs.webkit.org/show_bug.cgi?id=114514

        Reviewed by Chris Fleizach.

        Move AXObjectCache usage from platform files to FrameView.

        * WebCore.exp.in: Update symbols.
        * page/FrameView.cpp:
        (WebCore::FrameView::didAddScrollbar): Handle scrollbar updates in
        AXObjectCache.
        (WebCore::FrameView::willRemoveScrollbar): Handle scrollbar
        updates in AXObjectCache and remove the scrollbar from the cache.
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar): Use
        didAddScrollbar/willRemoveScrollbar
        (WebCore::ScrollView::setHasVerticalScrollbar): Ditto.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::didAddScrollbar): This is the old
        didAddVerticalScrollbar and didAddHorizontalScrollbar joined in a
        single method that receives a ScrollbarOrientation parameter.
        (WebCore::ScrollableArea::willRemoveScrollbar): This is the old
        willRemoveVerticalScrollbar and
        willRemoveHorizontalScrollbarScrollbar joined in a single method
        that receives a ScrollbarOrientation parameter.
        * platform/ScrollableArea.h:
        (ScrollableArea):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::~Scrollbar): Remove AXObjectCache usage.
        * platform/Scrollbar.h:
        * platform/Widget.h:
        (Widget): Remove axObjectCache() method.
        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar): Use didAddScrollbar.
        (WebCore::RenderLayer::destroyScrollbar): Use willRemoveScrollbar.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::createScrollbar): Use didAddScrollbar.
        (WebCore::RenderListBox::destroyScrollbar): Use willRemoveScrollbar.

2013-04-20  Dirk Schulze  <krit@webkit.org>

        [Part 5] Parse color value for custom() function parameters
        https://bugs.webkit.org/show_bug.cgi?id=114902

        Reviewed by Dean Jackson.

        Custom filter parameters should support color values. Added parsing
        and style resolving bits to support color values. A later patch will
        add the color values to the shader program.

        https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#custom-filter-parameters

        Modified existing tests to cover changes.

        * GNUmakefile.list.am: Added CustomFilterColorParameter to support color values
            as custom filter parameters.
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForCustomFilterColorParameter):
        (WebCore):
        (WebCore::valueForCustomFilterParameter):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCustomFilterParameters):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::parseCustomFilterColorParameter):
        (WebCore):
        (WebCore::StyleResolver::parseCustomFilterParameter):
        * css/StyleResolver.h:
        (StyleResolver):
        * platform/graphics/filters/CustomFilterColorParameter.h: Added.
        (WebCore):
        (WebCore::blendFunc):
        (CustomFilterColorParameter):
        (WebCore::CustomFilterColorParameter::create):
        (WebCore::CustomFilterColorParameter::blend):
        (WebCore::CustomFilterColorParameter::color):
        (WebCore::CustomFilterColorParameter::setColor):
        (WebCore::CustomFilterColorParameter::operator==):
        (WebCore::CustomFilterColorParameter::CustomFilterColorParameter):
        (WebCore::CustomFilterColorParameter::~CustomFilterColorParameter):
        * platform/graphics/filters/CustomFilterParameter.h:
        (CustomFilterParameter):
        * platform/graphics/filters/CustomFilterRenderer.cpp:
        (WebCore::CustomFilterRenderer::bindProgramParameters):

2013-04-20  Glenn Adams  <glenn@skynav.com>

        REGRESSION (r147588): Line breaks occur in the middle of Hebrew words at haaertz.co.il and other websites
        https://bugs.webkit.org/show_bug.cgi?id=114721

        Reviewed by Dean Jackson.

        Tests: fast/text/line-break-after-empty-inline-hebrew.html
               fast/text/line-break-after-inline-latin1.html

        If prior context changes content or length after creating line break iterator, then need to
        create new iterator with new prior context instead of using cached iterator with old prior context.

        * platform/text/TextBreakIterator.h:
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator): Initialize members to cache reference to initialized prior context.
        (WebCore::LazyLineBreakIterator::get): Create new iterator if prior context content reference changes.
        (WebCore::LazyLineBreakIterator::resetStringAndReleaseIterator): Reset cached prior context references.
        (LazyLineBreakIterator): Add members to cache reference to initialized prior context.

2013-04-19  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Arrow of combo box are drawn twice
        https://bugs.webkit.org/show_bug.cgi?id=113917

        Reviewed by Gyuyoung Kim.

        combo_button_icon part is for arrow so that images of combo_button part should
        not contain arrow.

        No new tests required due to no behavioral change.

        * platform/efl/DefaultTheme/widget/combo/combo_focus_button.png:
        * platform/efl/DefaultTheme/widget/combo/combo_hover_button.png:
        * platform/efl/DefaultTheme/widget/combo/combo_press_button.png:

2013-04-19  Brendan Long  <b.long@cablelabs.com>

        Add interfaces and stubs for audio and video tracks
        https://bugs.webkit.org/show_bug.cgi?id=113965

        Reviewed by Jer Noble.

        No new tests because there's no implementations, so there's nothing
        interesting to test.

        * CMakeLists.txt: Add AudioTrack, VideoTrack, AudioTrackList and VideoTrackList.
        * DerivedSources.cpp: Same.
        * DerivedSources.make: Same.
        * DerivedSources.pri: Same.
        * GNUmakefile.list.am: Same.
        * Target.pri: Same.
        * UseJSC.cmake: Same.
        * WebCore.vcproj/WebCore.vcproj: Same.
        * WebCore.xcodeproj/project.pbxproj: Same.
        * bindings/gobject/GNUmakefile.am: Same.
        * bindings/js/JSAudioTrackCustom.cpp: Added, based on JSTestTrackCustom
        * bindings/js/JSAudioTrackListCustom.cpp: Same.
        * bindings/js/JSBindingsAllInOne.cpp: Add AudioTrack, VideoTrack, AudioTrackList and VideoTrackList.
        * bindings/js/JSVideoTrackCustom.cpp: Added, based on JSTestTrackCustom
        * bindings/js/JSVideoTrackListCustom.cpp: Same.
        * dom/EventTarget.h: Make AudioTrackList and VideoTrackList event targets.
        * dom/EventTargetFactory.in: Same.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Add m_audioTracks and m_videoTracks
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Clear clients for audio and video tracks
        (WebCore::HTMLMediaElement::audioTrackEnabledChanged): Added.
        (WebCore::HTMLMediaElement::videoTrackSelectedChanged): Added.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack): Added, based on mediaPlayerDidAddTextTrack
        (WebCore::HTMLMediaElement::mediaPlayerDidAddVideoTrack): Same.
        (WebCore::HTMLMediaElement::mediaPlayerDidRemoveAudioTrack): Added, based on mediaPlayerDidRemoveTextTrack
        (WebCore::HTMLMediaElement::mediaPlayerDidRemoveVideoTrack): Same.
        (WebCore::HTMLMediaElement::addAudioTrack): Added, based on addTextTrack
        (WebCore::HTMLMediaElement::addVideoTrack): Same.
        (WebCore::HTMLMediaElement::removeAudioTrack): Added, based on removeTextTrack
        (WebCore::HTMLMediaElement::removeVideoTrack): Added, based on removeTextTrack
        (WebCore::HTMLMediaElement::removeAllInbandTracks): Remove audio and video tracks too
        (WebCore::HTMLMediaElement::audioTracks): Added, based on textTracks
        (WebCore::HTMLMediaElement::videoTracks): Added, based on textTracks
        (WebCore::HTMLMediaElement::reportMemoryUsage): Add audio and video tracks
        * html/HTMLMediaElement.h: Add audioTracks and videoTracks and related functions
        * html/HTMLMediaElement.idl: Add audioTracks and videoTracks
        * html/track/AudioTrack.cpp: Added, based on TextTrack and InbandTextTrack.
        * html/track/AudioTrack.h: Same.
        * html/track/AudioTrack.idl: Added.
        * html/track/AudioTrackList.cpp: Added, based on TextTrackList
        * html/track/AudioTrackList.h: Same.
        * html/track/AudioTrackList.idl: Added.
        * html/track/TextTrackList.h: Add missing OVERRIDE on interfaceName()
        * html/track/VideoTrack.cpp: Added, based on TextTrack and InbandTextTrack.
        * html/track/VideoTrack.h: Same.
        * html/track/VideoTrack.idl: Added.
        * html/track/VideoTrackList.cpp: Added, based on TextTrackList
        * html/track/VideoTrackList.h: Same.
        * html/track/VideoTrackList.idl: Added.
        * platform/graphics/AudioTrackPrivate.h: Added, based on InbandTextTrackPrivate.h
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::addAudioTrack): Added, based on addTextTrack
        (WebCore::MediaPlayer::removeAudioTrack): Added, based on removeTextTrack
        (WebCore::MediaPlayer::addVideoTrack): Added, based on addTextTrack
        (WebCore::MediaPlayer::removeVideoTrack): Added, based on removeTextTrack
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerDidAddAudioTrack): Added, based on mediaPlayerDidAddTextTrack
        (WebCore::MediaPlayerClient::mediaPlayerDidAddVideoTrack): Same
        (WebCore::MediaPlayerClient::mediaPlayerDidRemoveAudioTrack): Added, based on mediaPlayerDidRemoveTextTrack
        (WebCore::MediaPlayerClient::mediaPlayerDidRemoveVideoTrack): Same
        * platform/graphics/VideoTrackPrivate.h: Added, based on InbandTextTrackPrivate.h

2013-04-19  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions] Implement empty segments for multiple-segment shape-insides
        https://bugs.webkit.org/show_bug.cgi?id=100049

        Reviewed by David Hyatt.

        Content should not overflow a shape-inside segment, even if that means no content
        will be placed in that segment. Overflow may be pushed to outside the shape. This
        patch removes the restriction that every line must consume at least some text
        input while inside a shape-inside. Content that does not fit is pushed down until
        it does, either inside the shape or just below it.

        Test: fast/exclusions/shape-inside/shape-inside-empty-segments.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForSegment): Do not include empty segments for
        consideration, as the actual BidiRuns construction expects to consume at
        least one character.
        (WebCore::constructBidiRunsForLine): Ditto.
        (WebCore::firstPositiveWidth): Find the first positive word measurement width,
        as there may be some empty word break measurements inserted.
        (WebCore::adjustLogicalLineTop): Move the current line down, if necessary, to
        fit it within the shape inside.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): If nothing fit in the
        current segment, find the first available position for the smallest item
        at the beginning of the text.
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): Return an empty segment
        for a line that is inside the shape, but has no segments.
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak): Do not consume
        input to meet minimum size requirements if you are inside a shape.

2013-04-19  Ryosuke Niwa  <rniwa@webkit.org>

        Add a missing null pointer check after r148759.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):

2013-04-19  Benjamin Poulain  <benjamin@webkit.org>

        Use Vector instead of StringBuilder for CSSPreloadScanner's buffers
        https://bugs.webkit.org/show_bug.cgi?id=114794

        Reviewed by Ryosuke Niwa.

        Cleanup for other String changes.

        CSSPreloadScanner only handles UChar, StringBuilder was a little
        overkill.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore):
        (WebCore::ruleEqualIgnoringCase):
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/CSSPreloadScanner.h:

2013-04-19  Benjamin Poulain  <benjamin@webkit.org>

        StyledMarkupAccumulator::appendText() should not allocate an intermediary StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=114847

        Reviewed by Geoffrey Garen.

        For some reason StyledMarkupAccumulator::appendText() was allocating a separate buffer
        for invoking appendStyleNodeOpenTag. This is a bad idea.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendStyleNodeOpenTag):
        (WebCore::StyledMarkupAccumulator::appendText):

2013-04-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Support the SourceMap header, X-SourceMap was deprecated
        https://bugs.webkit.org/show_bug.cgi?id=114888

        Check first for SourceMap, then fallback to X-SourceMap. Leaving in
        support for the deprecated header because most tools and articles
        online mention that version and have not yet updated.

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::sourceMapURLForScript):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::sourceMapURLForResource):

2013-04-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Backend should detect sourceMappingURLs in CSS Resources
        https://bugs.webkit.org/show_bug.cgi?id=114854

        Reviewed by Timothy Hatcher.

        Test: http/tests/inspector/network/css-source-mapping-url.html

        * inspector/Inspector.json:
        - Page.getResourceTree - add sourceMapURL to resource payloads
        - Network.loadingFinished and Network.requestServedFromMemoryCache,
          include the sourceMapURL in the results.

        * inspector/ContentSearchUtils.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::scriptCommentPattern):
        (WebCore::ContentSearchUtils::stylesheetCommentPattern):
        (WebCore::ContentSearchUtils::findMagicComment):
        (WebCore::ContentSearchUtils::findScriptSourceURL):
        (WebCore::ContentSearchUtils::findScriptSourceMapURL):
        (WebCore::ContentSearchUtils::findStylesheetSourceMapURL):
        Separate Script and Stylesheet regex pattern creation, but
        share the search function using the pattern.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::sourceMapURLForScript):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        Update function names. Check for the SourceMap header before
        checking for a sourceMappingURL comment.

        * inspector/InspectorPageAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::sourceMapURLForResource):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        Provide the sourceMapURL for Page.getResourceTree.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        Include sourceMapURLs in finish loading and request served from cache.

2013-04-19  Shawn Singh  <shawnsingh@chromium.org>

        Remove non-overlap testing code in RenderLayerCompositor
        https://bugs.webkit.org/show_bug.cgi?id=85521

        Reviewed by Simon Fraser.

        m_compositingConsultsOverlap is always true in the current
        code. This patch removes this flag, and removes dead code that is
        never executed because it was never false.

        No new tests, no change in behavior.  The cleanup is covered by
        existing tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        removed if-statement that is always true.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds):
        removed if-statement that would never get triggered.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        removed m_compositingConsultsOverlap, and retained the code as if the flag were "true".
        
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-04-19  Roger Fong  <roger_fong@apple.com>

        Unreviewed. WebKit_Source is incorrectly set.

        * WebCore.vcxproj/WebCore.make:

2013-04-18  Ryosuke Niwa  <rniwa@webkit.org>

        Make loops in RenderObject::containingBlock homogeneous in their forms to simplify
        https://bugs.webkit.org/show_bug.cgi?id=114853

        Reviewed by David Hyatt.

        This patch prepares us to avoid computing containing blocks during a depth-first traversal of the render tree.

        Extracted inline functions out of RenderBlock::containingBlock to make the code simpler. Also moved the code
        to obtain the nearest containing block out of the loop for a relatively positioned inline.

        * rendering/RenderObject.cpp:
        (WebCore::isNonReplacedInlineInFlowPosition): Extracted.
        (WebCore::isContainingBlockCandidateForAbsolutelyPositionedObject): Extracted.
        (WebCore::isNonRenderBlockInline): Extracted.
        (WebCore::RenderObject::containingBlock): Refactored as stated above.

2013-04-19  Tim Horton  <timothy_horton@apple.com>

        WebKit should not decode or support PDF favicons
        https://bugs.webkit.org/show_bug.cgi?id=114650
        <rdar://problem/10133914>

        Reviewed by Dan Bernstein.

        Drop the image data on the floor if it begins with the PDF magic number.
        No other browser I can find on OS X supports PDF favicons (by experimentation),
        and we do not properly display them.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::notifyFinished):

2013-04-19  Martin Robinson  <mrobinson@igalia.com>

        Remove the OpenVG backend
        https://bugs.webkit.org/show_bug.cgi?id=114881

        Reviewed by Tim Horton.

        * platform/graphics/FloatRect.h:
        (FloatRect): Remove #ifdefs for OpenVG backend.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore): Ditto.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/NativeImagePtr.h:
        (WebCore): Ditto.
        * platform/graphics/Path.cpp:
        (WebCore): Ditto.
        * platform/graphics/Path.h:
        * platform/graphics/openvg/EGLDisplayOpenVG.cpp: Removed.
        * platform/graphics/openvg/EGLDisplayOpenVG.h: Removed.
        * platform/graphics/openvg/EGLUtils.h: Removed.
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp: Removed.
        * platform/graphics/openvg/ImageOpenVG.cpp: Removed.
        * platform/graphics/openvg/PainterOpenVG.cpp: Removed.
        * platform/graphics/openvg/PainterOpenVG.h: Removed.
        * platform/graphics/openvg/PathOpenVG.cpp: Removed.
        * platform/graphics/openvg/PlatformPathOpenVG.h: Removed.
        * platform/graphics/openvg/SharedResourceOpenVG.cpp: Removed.
        * platform/graphics/openvg/SharedResourceOpenVG.h: Removed.
        * platform/graphics/openvg/SurfaceOpenVG.cpp: Removed.
        * platform/graphics/openvg/SurfaceOpenVG.h: Removed.
        * platform/graphics/openvg/TiledImageOpenVG.cpp: Removed.
        * platform/graphics/openvg/TiledImageOpenVG.h: Removed.
        * platform/graphics/openvg/VGUtils.cpp: Removed.
        * platform/graphics/openvg/VGUtils.h: Removed.
        * platform/graphics/transforms/AffineTransform.h:
        (AffineTransform): Ditto.
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix): Ditto.
        * platform/image-decoders/openvg/ImageDecoderOpenVG.cpp: Removed.

2013-04-19  Andrei Bucur  <abucur@adobe.com>

        ContainerNode::removeChildren should first detach the children then remove them
        https://bugs.webkit.org/show_bug.cgi?id=113433

        Reviewed by Ryosuke Niwa.

        Currently, ContainerNode::removeChildren initially removes the nodes from the DOM tree and then
        calls detach() on each of them. This is anti-intuitive and can lead to subtle bugs because the
        detached renderers are not backed by a valid DOM tree any more. With the patch, the nodes are first
        detached and then removed from the DOM.
        The patch also lets the tree in a consistent state after each node removal by clearing the previous
        sibling pointer of the node following the one removed.
        I haven't found any proof the performance will get worse if the detachment happens when the children
        are still in the DOM tree.

        Tests: No changed visible functionality.

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

2013-04-19  Dirk Schulze  <krit@webkit.org>

        Refactor transform code in StyleResolver
        https://bugs.webkit.org/show_bug.cgi?id=114874

        Reviewed by Andreas Kling.

        Move transform code frome StyleResolver into own files.

        Refactoring, no changes in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::parseCustomFilterTransformParameter):
        * css/StyleResolver.h:
        * css/TransformFunctions.cpp: Added.
        (WebCore):
        (WebCore::transformOperationType):
        (WebCore::convertToFloatLength):
        (WebCore::transformsForValue):
        * css/TransformFunctions.h: Added.
        (WebCore):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):

2013-04-19  Erik Arvidsson  <arv@chromium.org>

        Rename TextTrackList owner to element for consistency
        https://bugs.webkit.org/show_bug.cgi?id=79822

        Reviewed by Eric Carlson.

        No new tests. Covered by existing tests.

        * bindings/js/JSTextTrackListCustom.cpp:
        (WebCore::JSTextTrackListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTextTrackList::visitChildren):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        * html/track/TextTrackList.cpp:
        (TextTrackList::append):
        (TextTrackList::remove):
        * html/track/TextTrackList.h:
        (WebCore::TextTrackList::create):
        * html/track/TrackListBase.cpp:
        (TrackListBase::TrackListBase):
        (TrackListBase::remove):
        * html/track/TrackListBase.h:
        (WebCore::TrackListBase::clearElement):
        (WebCore::TrackListBase::element):
        (TrackListBase):

2013-04-19  Andreas Kling  <akling@apple.com>

        [Mac] ComplexTextController is slow with large numbers of text runs.
        <http://webkit.org/b/114875>
        <rdar://problem/13337036>

        Reviewed by Dan Bernstein.

        Instead of iterating over the text runs in indexOfCurrentRun() to figure out the leftmost glyph,
        create a lookup table of [run# -> distance in glyphs] at ComplexTextController construction time.

        This avoids O(n^2) behavior in indexOfCurrentRun().

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::indexOfCurrentRun):
        * platform/graphics/mac/ComplexTextController.h:
        (ComplexTextController):

2013-04-19  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Minimize calls to GailTextUtil in AtkText implementation
        https://bugs.webkit.org/show_bug.cgi?id=114868

        Reviewed by Martin Robinson.

        Create a new helper function to concentrate inside of it the calls to
        gail_text_util_get_text(), so we can get rid of it later more easily.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextGetTextForOffset): New helper function.
        (webkitAccessibleTextGetTextAfterOffset): Rely on the new function.
        (webkitAccessibleTextGetTextAtOffset): Ditto.
        (webkitAccessibleTextGetTextBeforeOffset): Ditto.

2013-04-19  Noam Rosenthal  <noam@webkit.org>

        [Texmap] Implementation for pattern compositing
        https://bugs.webkit.org/show_bug.cgi?id=109588

        Reviewed by Allan Sandfeld Jensen.

        Enable pattern compositing (background images) for CoordinatedGraphics/TextureMapperGL.
        Use the existing patternTransform shader uniform, multiplying it by a matrix calculated
        using the contentsRect, tileSize and tilePhase.

        Covered by existing tests in compositing/patterns.

        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
            Conditionally enable pattern compositing for coordinated graphics.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::TextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::setPatternTransform):
        (WebCore::TextureMapper::setWrapMode):
        (WebCore::TextureMapper::wrapMode):
        (WebCore::TextureMapper::patternTransform):
            Add wrapMode and patternTransform properties to the TextureMapper state.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
            Paint with GL_REPEAT and a pattern transform when needed.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computePatternTransformIfNeeded):
        (WebCore):
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::setContentsRect):
        (WebCore::TextureMapperLayer::setContentsTileSize):
        (WebCore::TextureMapperLayer::setContentsTilePhase):
            Apply the patternTransform from the tile size/phase.

        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::TextureMapperLayer):
        (TextureMapperLayer):
        (WebCore::TextureMapperLayer::setShouldMapBackingStoreToContentsRect):
        (State):
        (WebCore::TextureMapperLayer::State::State):
            Allow the client to configure whether a layer uses its bounds or its
            contents rect to paint the backing store.
            This is needed now since layers with background images, unlike layers
            with regular images, may have bounds that are greater than the contents
            rect.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
        (WebCore::CoordinatedGraphicsLayer::setShouldSupportContentsTiling):
        (WebCore::GraphicsLayer::supportsContentsTiling):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        (WebCore::CoordinatedGraphicsScene::assignImageBackingToLayer):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (CoordinatedGraphicsLayerState):
            Logic to pass the tileSize/tilePhase from CoordinatedGraphicsLayer
            to TextureMapperLayer.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
            Don't reset the layer's image contents when this is a directly composited image.

2013-04-19  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Manage actor's children by using clutter's own way.
        https://bugs.webkit.org/show_bug.cgi?id=114257

        Reviewed by Gustavo Noronha Silva.

        I believe we don't need to maintain a children list of GList. We can do it
        by using clutter APIs like clutter_actor_get_children, clutter_actor_get_first_child, etc.

        No new tests since no functionality changed.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphics_layer_actor_init):
        (graphicsLayerActorAllocate):
        (graphicsLayerActorPaint):
        (graphicsLayerActorRemoveAll):
        (graphicsLayerActorGetnChildren):
        (graphicsLayerActorReplaceSublayer):
        (graphicsLayerActorInsertSublayer):
        * platform/graphics/clutter/GraphicsLayerActor.h:
        (_GraphicsLayerActor):

2013-04-19  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Support masksToBounds for clutter AC backend.
        https://bugs.webkit.org/show_bug.cgi?id=114113

        Reviewed by Gustavo Noronha Silva.

        We can support the masksToBounds property by using clutter_actor_set_clip simply.

        Covered by existing AC tests.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorSetMasksToBounds):
        * platform/graphics/clutter/GraphicsLayerActor.h:
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::setMasksToBounds):
        (WebCore):
        (WebCore::GraphicsLayerClutter::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerClutter::setupContentsLayer):
        (WebCore::GraphicsLayerClutter::updateMasksToBounds):
        * platform/graphics/clutter/GraphicsLayerClutter.h:
        (GraphicsLayerClutter):

2013-04-19  Dan Beam  <dbeam@chromium.org>

        Remove unmaintained feature REQUEST_AUTOCOMPLETE
        https://bugs.webkit.org/show_bug.cgi?id=114846

        Reviewed by Kent Tamura.

        * GNUmakefile.list.am: Remove AutocompleteErrorEvent.h include.
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore): Remove requestAutocomplete() runtime feature.
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures): Remove requestAutocomplete() runtime feature.
        * dom/AutocompleteErrorEvent.h: Removed.
        * dom/AutocompleteErrorEvent.idl: Removed.
        * dom/EventNames.h: Remove `autocomplete` and `autocompleteerror` event names.
        (WebCore):
        * dom/EventNames.in: Remove `autocomplete` and `autocompleteerror` event names.
        * html/HTMLAttributeNames.in: Remove `onautocomplete` and `onautocompleteerror` form attributes.
        * html/HTMLFormElement.cpp: Remove requestAutocomplete() related code.
        (WebCore::HTMLFormElement::HTMLFormElement): Remove timer and event queue for requestAutocomplete() related events.
        (WebCore::HTMLFormElement::parseAttribute): Remove parsing of `onautocomplete` and `onautocompleterror`.
        * html/HTMLFormElement.h: Remove requestAutocomplete() related members.
        (HTMLFormElement):
        * html/HTMLFormElement.idl: Remove public requestAutocomplete() API method.
        * loader/EmptyClients.cpp: Remove stub implementation.
        (WebCore):
        * loader/EmptyClients.h: Remove stub interface.
        (EmptyFrameLoaderClient):
        * loader/FrameLoaderClient.h: Remove didRequestAutocomplete() from interface.
        (FrameLoaderClient):
        * page/DOMWindow.idl: Remove `AutocompleteErrorEvent` from window DOM interface.

2013-04-18  Timothy Hatcher  <timothy@apple.com>

        Add CSS.setStyleText to the Web Inspector protocol.

        This provides a direct path for the Safari Web Inspector to live edit whole style rules.

        https://webkit.org/b/109340
        rdar://problem/13337211

        Reviewed by Joseph Pecoraro.

        * inspector/Inspector.json:
        (CSS.setStyleText): Added.
        * inspector/InspectorCSSAgent.cpp:
        (InspectorCSSAgent::SetStyleTextAction):
        (WebCore::InspectorCSSAgent::SetStyleTextAction::SetStyleTextAction): Added.
        (WebCore::InspectorCSSAgent::SetStyleTextAction::perform): Added.
        (WebCore::InspectorCSSAgent::SetStyleTextAction::undo): Added.
        (WebCore::InspectorCSSAgent::SetStyleTextAction::redo): Added.
        (WebCore::InspectorCSSAgent::SetStyleTextAction::mergeId): Added.
        (WebCore::InspectorCSSAgent::SetStyleTextAction::merge): Added.
        (WebCore::InspectorCSSAgent::SetPropertyTextAction::redo):
        (WebCore::InspectorCSSAgent::setStyleText): Added.
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::getText): Added.
        (WebCore::InspectorStyle::setText): Added.
        (WebCore::InspectorStyleSheet::setStyleText):
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorStyle::styleText): Added as an alias to getText.
        (WebCore::InspectorStyle::applyStyleText): Added as an alias to setText.

2013-04-18  Jer Noble  <jer.noble@apple.com>

        Unreviewed gardening; fix bindings tests after r148700.

        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetOwner::isReachableFromOpaqueRoots):

2013-04-18  Andy Estes  <aestes@apple.com>

        REGRESSION (r116645): Versions app's UI is munged in HiDPI due to background-size being reset to 'auto' when background short-hand is also specified
        https://bugs.webkit.org/show_bug.cgi?id=114833

        Reviewed by David Kilzer.

        Added applicationIsVersions() to RuntimeApplicationChecks.

        * WebCore.exp.in:
        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::applicationIsVersions):
        (WebCore):
        * platform/RuntimeApplicationChecks.h:
        (WebCore):

2013-04-18  Sam Weinig  <sam@webkit.org>

        Network Process crashing trying to read in IDNScriptWhiteList.txt
        https://bugs.webkit.org/show_bug.cgi?id=114827

        Reviewed by Anders Carlsson.

        Move IDNScriptWhiteList.txt from WebKit to WebCore, so that the NetworkProcess does not have to link against
        WebKit. It was a layering violation for WebCore to be trying to access WebKit resources anyway.

        * Resources/IDNScriptWhiteList.txt: Copied from Source/WebKit/mac/Resources/IDNScriptWhiteList.txt.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::readIDNScriptWhiteList):

2013-04-18  Simon Fraser  <simon.fraser@apple.com>

        Remove GraphicsLayerCA::constrainedSize() now that we can manage large layer memory use ourselves in TileController
        https://bugs.webkit.org/show_bug.cgi?id=114834

        Reviewed by Tim Horton.

        GraphicsLayerCA::constrainedSize() was added to handle poor CATiledLayer behavior when layer sizes
        got extremely large. Now that we no longer use CATiledLayer, remove this code. We can later add
        tile memory bounding to TileController if that becomes necessary.

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

2013-04-18  Alberto Garcia  <agarcia@igalia.com>

        Remove obsolete macros from libpng
        https://bugs.webkit.org/show_bug.cgi?id=114817

        Reviewed by Benjamin Poulain.

        libpng 1.4 removes the png_voidp_NULL and png_error_ptr_NULL
        macros. Null pointers must be used directly instead.

        * platform/image-encoders/PNGImageEncoder.cpp:
        (WebCore::compressRGBABigEndianToPNG):

2013-04-18  Jer Noble  <jer.noble@apple.com>

        CodeGeneratorJS.pm should generate "isFiringEventListeners()" check in isReachableFromOpaqueRoots()
        https://bugs.webkit.org/show_bug.cgi?id=114784

        Reviewed by Geoffrey Garen.

        EventTarget subclasses shouldn't have to use CustomIsReachable directives
        in order to keep their wrappers alive while firing event listeners.

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

2013-04-17  Geoffrey Garen  <ggaren@apple.com>

        Renamed JSGlobalData to VM
        https://bugs.webkit.org/show_bug.cgi?id=114777

        Reviewed by Phil Pizlo.

        * ForwardingHeaders/runtime/JSGlobalData.h: Removed.
        * ForwardingHeaders/runtime/VM.h: Copied from Source/WebCore/ForwardingHeaders/runtime/JSGlobalData.h.
        * WebCore.exp.in:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/DOMObjectHashTableMap.cpp:
        (WebCore::DOMObjectHashTableMap::mapFor):
        * bindings/js/DOMObjectHashTableMap.h:
        (JSC):
        (DOMObjectHashTableMap):
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::normalWorld):
        (WebCore::mainThreadNormalWorld):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::create):
        (WebCore::DOMWrapperWorld::vm):
        (DOMWrapperWorld):
        (WebCore):
        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::garbageCollectSoon):
        (WebCore::GCController::garbageCollectNow):
        (WebCore::GCController::setJavaScriptGarbageCollectorTimerEnabled):
        (WebCore::GCController::discardAllCompiledCode):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::get):
        (WebCore::set):
        (WebCore::deserializeIDBValue):
        (WebCore::deserializeIDBValueBuffer):
        (WebCore::idbKeyToScriptValue):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::JSCustomXPathNSResolver):
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getHashTableForGlobalData):
        (WebCore::reportException):
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::createStructure):
        (WebCore::DOMConstructorWithDocument::finishCreation):
        (WebCore::getDOMStructure):
        (WebCore::setInlineCachedWrapper):
        (WebCore):
        (WebCore::jsStringWithCache):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::finishCreation):
        * bindings/js/JSDOMGlobalObject.h:
        (JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::createStructure):
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::finishCreation):
        (WebCore::JSDOMWindowBase::updateDocument):
        (WebCore::JSDOMWindowBase::commonVM):
        * bindings/js/JSDOMWindowBase.h:
        (JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::createStructure):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::DialogHandler::dialogCreated):
        (WebCore::DialogHandler::returnValue):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::finishCreation):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDOMWindowShell.h:
        (JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::create):
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::createAccelerationObject):
        (WebCore::createRotationRateObject):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        (WebCore::JSDictionary::JSDictionary):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::setWrapper):
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::all):
        (WebCore::JSHTMLDocument::setAll):
        * bindings/js/JSHTMLTemplateElementCustom.cpp:
        (WebCore::JSHTMLTemplateElement::content):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::state):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::finishCreation):
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::createStructure):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::JSInjectedScriptHost::functionDetails):
        (WebCore::getJSListenerFunctions):
        (WebCore::JSInjectedScriptHost::getEventListeners):
        (WebCore::JSInjectedScriptHost::inspect):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        (WebCore::handleInitMessageEvent):
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverConstructor::constructJSMutationObserver):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        (JSNodeFilterCondition):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter):
        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::cacheState):
        * bindings/js/JSRequestAnimationFrameCallbackCustom.cpp:
        (WebCore::JSRequestAnimationFrameCallback::handleEvent):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::JSWorkerContextBase::JSWorkerContextBase):
        (WebCore::JSWorkerContextBase::finishCreation):
        * bindings/js/JSWorkerContextBase.h:
        (WebCore::JSWorkerContextBase::createStructure):
        (JSWorkerContextBase):
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        (WebCore::ScriptCachedFrameData::clear):
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createWindowShell):
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::createWorld):
        (WebCore::ScriptController::getAllWorlds):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::cacheableBindingRootObject):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::clearScriptObjects):
        (WebCore::ScriptController::shouldBypassMainWorldContentSecurityPolicy):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidPause):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerBody):
        (WebCore::eventListenerHandler):
        (WebCore::eventListenerHandlerLocation):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptCallback::call):
        * bindings/js/ScriptGCEvent.cpp:
        (WebCore::ScriptGCEvent::getHeapSize):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::ScriptObject):
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/ScriptState.h:
        (WebCore):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::deserialize):
        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        * bindings/js/ScriptWrappable.h:
        (JSC):
        (ScriptWrappable):
        * bindings/js/ScriptWrappableInlines.h:
        (WebCore::ScriptWrappable::setWrapper):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::SerializedScriptValue::deserializeForInspector):
        (WebCore::SerializedScriptValue::maybeThrowExceptionIfSerializationFailed):
        * bindings/js/WebCoreJSClientData.h:
        (WebCoreJSClientData):
        (WebCore::initNormalWorldClientData):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::~WorkerScriptController):
        (WebCore::WorkerScriptController::initScript):
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::isExecutionTerminating):
        (WebCore::WorkerScriptController::disableEval):
        * bindings/js/WorkerScriptController.h:
        (JSC):
        (WebCore::WorkerScriptController::vm):
        (WorkerScriptController):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateCallbackImplementation):
        (JSValueToNative):
        (GenerateConstructorDeclaration):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::getJSFloat64ArrayConstructorTable):
        (WebCore::JSFloat64ArrayConstructor::finishCreation):
        (WebCore::getJSFloat64ArrayPrototypeTable):
        (WebCore::getJSFloat64ArrayTable):
        (WebCore::JSFloat64Array::finishCreation):
        (WebCore::JSFloat64Array::createPrototype):
        * bindings/scripts/test/JS/JSFloat64Array.h:
        (WebCore::JSFloat64Array::create):
        (WebCore::JSFloat64Array::createStructure):
        (JSFloat64Array):
        (WebCore::JSFloat64ArrayPrototype::create):
        (WebCore::JSFloat64ArrayPrototype::createStructure):
        (WebCore::JSFloat64ArrayPrototype::JSFloat64ArrayPrototype):
        (WebCore::JSFloat64ArrayConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        (WebCore::JSTestActiveDOMObject::finishCreation):
        (WebCore::JSTestActiveDOMObject::createPrototype):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        (WebCore::JSTestActiveDOMObject::create):
        (WebCore::JSTestActiveDOMObject::createStructure):
        (JSTestActiveDOMObject):
        (WebCore::JSTestActiveDOMObjectPrototype::create):
        (WebCore::JSTestActiveDOMObjectPrototype::createStructure):
        (WebCore::JSTestActiveDOMObjectPrototype::JSTestActiveDOMObjectPrototype):
        (WebCore::JSTestActiveDOMObjectConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithNoParam):
        (WebCore::JSTestCallback::callbackWithClass1Param):
        (WebCore::JSTestCallback::callbackWithClass2Param):
        (WebCore::JSTestCallback::callbackWithStringList):
        (WebCore::JSTestCallback::callbackWithBoolean):
        (WebCore::JSTestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        (WebCore::JSTestCustomNamedGetter::finishCreation):
        (WebCore::JSTestCustomNamedGetter::createPrototype):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        (WebCore::JSTestCustomNamedGetter::create):
        (WebCore::JSTestCustomNamedGetter::createStructure):
        (JSTestCustomNamedGetter):
        (WebCore::JSTestCustomNamedGetterPrototype::create):
        (WebCore::JSTestCustomNamedGetterPrototype::createStructure):
        (WebCore::JSTestCustomNamedGetterPrototype::JSTestCustomNamedGetterPrototype):
        (WebCore::JSTestCustomNamedGetterConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        (WebCore::JSTestEventConstructor::finishCreation):
        (WebCore::JSTestEventConstructor::createPrototype):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::create):
        (WebCore::JSTestEventConstructor::createStructure):
        (JSTestEventConstructor):
        (WebCore::JSTestEventConstructorPrototype::create):
        (WebCore::JSTestEventConstructorPrototype::createStructure):
        (WebCore::JSTestEventConstructorPrototype::JSTestEventConstructorPrototype):
        (WebCore::JSTestEventConstructorConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        (WebCore::JSTestEventTarget::finishCreation):
        (WebCore::JSTestEventTarget::createPrototype):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTarget::create):
        (WebCore::JSTestEventTarget::createStructure):
        (JSTestEventTarget):
        (WebCore::JSTestEventTargetPrototype::create):
        (WebCore::JSTestEventTargetPrototype::createStructure):
        (WebCore::JSTestEventTargetPrototype::JSTestEventTargetPrototype):
        (WebCore::JSTestEventTargetConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::finishCreation):
        (WebCore::JSTestException::finishCreation):
        (WebCore::JSTestException::createPrototype):
        * bindings/scripts/test/JS/JSTestException.h:
        (WebCore::JSTestException::create):
        (WebCore::JSTestException::createStructure):
        (JSTestException):
        (WebCore::JSTestExceptionPrototype::create):
        (WebCore::JSTestExceptionPrototype::createStructure):
        (WebCore::JSTestExceptionPrototype::JSTestExceptionPrototype):
        (WebCore::JSTestExceptionConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        (WebCore::JSTestInterface::finishCreation):
        (WebCore::JSTestInterface::createPrototype):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterface::create):
        (WebCore::JSTestInterface::createStructure):
        (JSTestInterface):
        (WebCore::JSTestInterfacePrototype::create):
        (WebCore::JSTestInterfacePrototype::createStructure):
        (WebCore::JSTestInterfacePrototype::JSTestInterfacePrototype):
        (WebCore::JSTestInterfaceConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        (WebCore::JSTestMediaQueryListListener::finishCreation):
        (WebCore::JSTestMediaQueryListListener::createPrototype):
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::create):
        (WebCore::JSTestMediaQueryListListener::createStructure):
        (JSTestMediaQueryListListener):
        (WebCore::JSTestMediaQueryListListenerPrototype::create):
        (WebCore::JSTestMediaQueryListListenerPrototype::createStructure):
        (WebCore::JSTestMediaQueryListListenerPrototype::JSTestMediaQueryListListenerPrototype):
        (WebCore::JSTestMediaQueryListListenerConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        (WebCore::JSTestNamedConstructor::finishCreation):
        (WebCore::JSTestNamedConstructor::createPrototype):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (WebCore::JSTestNamedConstructor::create):
        (WebCore::JSTestNamedConstructor::createStructure):
        (JSTestNamedConstructor):
        (WebCore::JSTestNamedConstructorPrototype::create):
        (WebCore::JSTestNamedConstructorPrototype::createStructure):
        (WebCore::JSTestNamedConstructorPrototype::JSTestNamedConstructorPrototype):
        (WebCore::JSTestNamedConstructorConstructor::createStructure):
        (WebCore::JSTestNamedConstructorNamedConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::finishCreation):
        (WebCore::JSTestNode::finishCreation):
        (WebCore::JSTestNode::createPrototype):
        * bindings/scripts/test/JS/JSTestNode.h:
        (WebCore::JSTestNode::create):
        (WebCore::JSTestNode::createStructure):
        (JSTestNode):
        (WebCore::JSTestNodePrototype::create):
        (WebCore::JSTestNodePrototype::createStructure):
        (WebCore::JSTestNodePrototype::JSTestNodePrototype):
        (WebCore::JSTestNodeConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::finishCreation):
        (WebCore::JSTestObj::finishCreation):
        (WebCore::JSTestObj::createPrototype):
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjAnyAttribute):
        (WebCore::setJSTestObjReplaceableAttribute):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::create):
        (WebCore::JSTestObj::createStructure):
        (JSTestObj):
        (WebCore::JSTestObjPrototype::create):
        (WebCore::JSTestObjPrototype::createStructure):
        (WebCore::JSTestObjPrototype::JSTestObjPrototype):
        (WebCore::JSTestObjConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        (WebCore::JSTestOverloadedConstructors::finishCreation):
        (WebCore::JSTestOverloadedConstructors::createPrototype):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        (WebCore::JSTestOverloadedConstructors::create):
        (WebCore::JSTestOverloadedConstructors::createStructure):
        (JSTestOverloadedConstructors):
        (WebCore::JSTestOverloadedConstructorsPrototype::create):
        (WebCore::JSTestOverloadedConstructorsPrototype::createStructure):
        (WebCore::JSTestOverloadedConstructorsPrototype::JSTestOverloadedConstructorsPrototype):
        (WebCore::JSTestOverloadedConstructorsConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        (WebCore::JSTestSerializedScriptValueInterface::finishCreation):
        (WebCore::JSTestSerializedScriptValueInterface::createPrototype):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::create):
        (WebCore::JSTestSerializedScriptValueInterface::createStructure):
        (JSTestSerializedScriptValueInterface):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::create):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::JSTestSerializedScriptValueInterfacePrototype):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        (WebCore::JSTestTypedefs::finishCreation):
        (WebCore::JSTestTypedefs::createPrototype):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        (WebCore::JSTestTypedefs::create):
        (WebCore::JSTestTypedefs::createStructure):
        (JSTestTypedefs):
        (WebCore::JSTestTypedefsPrototype::create):
        (WebCore::JSTestTypedefsPrototype::createStructure):
        (WebCore::JSTestTypedefsPrototype::JSTestTypedefsPrototype):
        (WebCore::JSTestTypedefsConstructor::createStructure):
        * bridge/c/CRuntimeObject.h:
        (JSC::Bindings::CRuntimeObject::createStructure):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::create):
        (JSC::Bindings::CRuntimeMethod::createStructure):
        (JSC::Bindings::CRuntimeMethod::finishCreation):
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        * bridge/objc/ObjCRuntimeObject.h:
        (JSC::Bindings::ObjCRuntimeObject::createStructure):
        * bridge/objc/objc_instance.mm:
        (ObjCRuntimeMethod::create):
        (ObjCRuntimeMethod::createStructure):
        (ObjCRuntimeMethod::finishCreation):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        (JSC::Bindings::ObjcFallbackObjectImp::finishCreation):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObject::createStructure):
        (JSC::Bindings::QtInstance::~QtInstance):
        (JSC::Bindings::QtInstance::getQtInstance):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::RuntimeArray):
        (JSC::RuntimeArray::finishCreation):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::create):
        (JSC::RuntimeArray::createStructure):
        (RuntimeArray):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::finishCreation):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::create):
        (JSC::RuntimeMethod::createStructure):
        (RuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::RuntimeObject):
        (JSC::Bindings::RuntimeObject::finishCreation):
        * bridge/runtime_object.h:
        (JSC::Bindings::RuntimeObject::createStructure):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::RootObject):
        (JSC::Bindings::RootObject::gcProtect):
        (JSC::Bindings::RootObject::gcUnprotect):
        (JSC::Bindings::RootObject::updateGlobalObject):
        (JSC::Bindings::RootObject::addRuntimeObject):
        * bridge/runtime_root.h:
        (RootObject):
        * dom/Node.cpp:
        * dom/Node.h:
        (JSC):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::vm):
        * dom/ScriptExecutionContext.h:
        (JSC):
        (ScriptExecutionContext):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * inspector/ScriptArguments.cpp:
        (WebCore::ScriptArguments::ScriptArguments):
        * loader/icon/IconDatabaseBase.cpp:
        (WebCore):
        (WebCore::iconDatabase):
        (WebCore::setGlobalIconDatabase):
        * platform/qt/MemoryUsageSupportQt.cpp:
        (WebCore::memoryUsageKB):
        (WebCore::actualMemoryUsageKB):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::npObject):
        (WebCore::PluginView::privateBrowsingStateChanged):
        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::getWindowInfo):
        * plugins/efl/PluginViewEfl.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::platformStart):
        * plugins/mac/PluginViewMac.mm:
        (WebCore::PluginView::platformStart):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::setNPWindowIfNeeded):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):

2013-04-18  Oliver Hunt  <oliver@apple.com>

        Fix windows build by moving template definition to JSDOMBinding.h

        * bindings/js/JSDOMBinding.h:
        (WebCore):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * 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:

2013-04-18  Eric Carlson  <eric.carlson@apple.com>

        Forced subtitles never rendered
        https://bugs.webkit.org/show_bug.cgi?id=114818

        Reviewed by Jer Noble.

        No new tests, media/track/track-forced-subtitles-in-band.html was updated to test this change.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::isRendered): "forced" tracks are rendered.

2013-04-17  Anders Carlsson  <andersca@apple.com>

        Change storage factory functions to take a PageGroup and Page respectively
        https://bugs.webkit.org/show_bug.cgi?id=114776

        Reviewed by Beth Dakin.

        Change StorageNamespace::localStorageNamespace to take a PageGroup since WebKit2 needs
        to know which local storage namespace belongs to which page group. Also remove the quota parameter from
        the sessionStorageNamespace function since that's trivial to get from the Page.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::sessionStorage):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::localStorageNamespace):
        (WebCore::StorageNamespace::sessionStorageNamespace):
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::localStorageNamespace):
        (WebCore::StorageNamespaceImpl::sessionStorageNamespace):
        * storage/StorageNamespaceImpl.h:
        * storage/StorageStrategy.cpp:
        (WebCore::StorageStrategy::localStorageNamespace):
        (WebCore::StorageStrategy::sessionStorageNamespace):
        * storage/StorageStrategy.h:

2013-04-18  Martin Robinson  <mrobinson@igalia.com>

        [GTK] fast/canvas/DrawImageSinglePixelStretch.html fails
        https://bugs.webkit.org/show_bug.cgi?id=58309

        Reviewed by Alejandro G. Castro.

        No new tests. This patch unskips a test.

        Prevent sampling outside source boundaries, by creating subsurfaces from source surfaces.
        This also requires careful handling of negative and floating source rectangles.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext): Use a subsurface to prevent sampling
        outside rectangle boundaries.

2013-04-18  Jonathan Feldstein  <jfeldstein@blackberry.com>

        [BlackBerry] Improper initialization of ANGLEResources (resubmission)
        https://bugs.webkit.org/show_bug.cgi?id=114814

        Reviewed by Yong Li, Rob Buis
        Internally reviewed by Maxim Mogilnitsky

        MaxDrawBuffers, OES_standard_derivatives, OES_EGL_image_external and ARB_texture_rectangle
        are initialized through the ShBuiltInResources function so these fields do not need to be
        set again in GraphicsContext3DBlackBerry.cpp. In addition, the extension flags should not
        be set to true without getExtension being called (Khronos WebGL specs, section 5.14.14.).
        In fact, as a direct result of these extensions being enabled prior to calling
        getExtension, a WebGL conformance suite test for GL_OES_standard_derivatives was failing.

        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2013-04-18  Xuefei Ren  <xren@blackberry.com>

        remove build warning(unused parameter)
        https://bugs.webkit.org/show_bug.cgi?id=114670

        Reviewed by Rob Buis.

        remove warning(unused parameter) in
        Source/WebCore/html/shadow/MediaControlsBlackBerry.cpp
        Source/WebCore/loader/blackberry/CookieJarBlackBerry.cpp
        Source/WebCore/platform/blackberry/AuthenticationChallengeManager.cpp
        Source/WebCore/platform/blackberry/RenderThemeBlackBerry.cpp
        Source/WebCore/platform/network/blackberry/ResourceResponseBlackBerry.cpp
        Source/WebCore/platform/network/blackberry/SocketStreamHandleBlackBerry.cpp
        Source/WebCore/plugins/blackberry/PluginViewBlackBerry.cpp


        * html/shadow/MediaControlsBlackBerry.cpp:
        (WebCore::MediaControlFullscreenFullscreenButtonElement::setIsFullscreen):
        * loader/blackberry/CookieJarBlackBerry.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/blackberry/AuthenticationChallengeManager.cpp:
        (WebCore::AuthenticationChallengeManager::notifyChallengeResult):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderTheme::themeForPage):
        * platform/network/blackberry/ResourceResponseBlackBerry.cpp:
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/blackberry/SocketStreamHandleBlackBerry.cpp:
        (WebCore::SocketStreamHandle::notifyStatusReceived):
        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::invalidateRegion):

2013-04-18  Xuefei Ren  <xren@blackberry.com>


        remove build warning(unused parameter)
        https://bugs.webkit.org/show_bug.cgi?id=114670

        Reviewed by Rob Buis.

        remove builde warning (unused parameter) in
        Source/WebCore/platform/blackberry/CursorBlackBerry.cpp

        * platform/blackberry/CursorBlackBerry.cpp:
        (WebCore::Cursor::Cursor):

2013-04-18  Andreas Kling  <akling@apple.com>

        EditingStyle: Avoid some unnecessary CSSStyleDeclaration wrappers.
        <http://webkit.org/b/114763>

        Reviewed by Antti Koivisto.

        removeEquivalentProperties(CSSStyleDeclaration) and removeEquivalentProperties(StylePropertySet)
        only have different behavior if the CSSStyleDeclaration is computed style (they differ in handling
        of the 'font-size' property.)

        Avoid creating a CSSStyleDeclaration for StylePropertySets where we can just pass them in directly.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::removeStyleAddedByNode):
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode):

2013-04-18  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Unset :hover in inner documents
        https://bugs.webkit.org/show_bug.cgi?id=114446

        Reviewed by Antonio Gomes.

        Fixes a regression from r145126 where hover nodes in inner documents was sometimes
        not unset. Additionally it uses the new api from r145126 to avoid an unnecessary
        hit test in touch-event handling.

        Test: fast/events/touch/frame-hover-update.html

        * dom/Document.cpp:
        (WebCore::Document::updateHoverActiveState):
        * page/EventHandler.cpp:
        (WebCore::shouldGesturesTriggerActive):
        (WebCore::EventHandler::handleTouchEvent):

2013-04-18  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Toolbar icons are displayed incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=114792

        Reviewed by Timothy Hatcher.

        Inspector uses small toolbar icons when docking the inspector.
        So icons should have different x position.

        No tests because no behavior change is expected.

        * inspector/front-end/inspector.css: Add missing 'background-position-x' values.
        (body.dock-to-bottom .toolbar-item.profiles .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.cpu-profiler .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.css-profiler .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.heap-profiler .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.canvas-profiler .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.memory-chart-profiler .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.memory-snapshot-profiler .toolbar-icon):

2013-04-17  Jaehun Lim  <ljaehun.lim@samsung.com>

        [css3-text] Rendering -webkit-hanging value for text-indent from css3-text
        https://bugs.webkit.org/show_bug.cgi?id=114663

        Reviewed by Beth Dakin.

        This patch is the rendering part to support hanging value for text-indent.
        "hanging" means "Inverts which lines are affected."
        It's prefixed and guarded by CSS3_TEXT flag.

        Spec: http://dev.w3.org/csswg/css-text/#text-indent

        Test: fast/css3-text/css3-text-indent/text-indent-each-line-hanging.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::requiresIndent): Inverted the return value when "-webkit-hanging" is applied.

2013-04-17  James Craig  <james@cookiecrook.com>

        AX: aria-level does not override implicit level on h1, h2, etc
        https://bugs.webkit.org/show_bug.cgi?id=114692

        Reviewed by Chris Fleizach.

        aria-level now works on headings without an explicit role="heading" defined. Updated existing test coverage.

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

2013-04-17  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver says everything that isn't a link is a "clickable" in Safari reader?
        https://bugs.webkit.org/show_bug.cgi?id=114687

        Reviewed by Tim Horton.

        VoiceOver is saying all text is clickable, because AXPress is exposed as an action on static text.
        That is happening, because there's a click handler on the body element in this case.

        I think the best plan to keep existing functionality, but fix this case is not to expose
        the press action for static text when the handler is on the body element.

        Test: platform/mac/accessibility/press-action-not-exposed-when-body-is-click-handler.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::mouseButtonListener):
           Change from checking getAttributeEventListener to hasEventListeners. The former only
           checks if "onclick" is installed on the element and does not work with addEventListener!

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isStaticText):

2013-04-17  Simon Fraser  <simon.fraser@apple.com>

        Fix GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush() to do predictive visible rect expansion
        https://bugs.webkit.org/show_bug.cgi?id=114775

        Reviewed by Tim Horton.

        GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush() is intended to answer the question
        "if your visible rect is changed to X, would any tiles be created or destroyed?".
        
        However, for compositing layer tiled layers, we do some predictive visible rect expansion based on how
        the visible rect is changing when we actually commit visible rect changes. recursiveVisibleRectChangeRequiresFlush()
        was not doing that, causing it to give confusing answers, so fix it to do so.
        
        Both now call adjustTiledLayerVisibleRect(), and it's cleaner to make this a static function.
        
        A somewhat unrelated change is to take the layer bounds origin into account
        in GraphicsLayerCA::computeVisibleRect(). Desktop WebKit never sets this, but it's used
        on other platforms for composited scrolling, so needs to be taken into account
        when computing visible rects.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush):
        (WebCore::GraphicsLayerCA::computeVisibleRect):
        (WebCore::GraphicsLayerCA::adjustTiledLayerVisibleRect):
        (WebCore::GraphicsLayerCA::updateVisibleRect):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):

2013-04-17  Oliver Hunt  <oliver@apple.com>

        Automate generation of toJS function for classes that need to report extra memory usage
        https://bugs.webkit.org/show_bug.cgi?id=114768

        Reviewed by Geoff Garen.

        Only really used by AudioBuffer for now.  The other classes that need it can be
        trivially refactored at a later date.

        * Modules/webaudio/AudioBuffer.idl:
        * bindings/js/JSAudioBufferCustom.cpp:
        * bindings/js/JSDOMBinding.h:
        (WebCore):
        (HasMemoryCost):
        (NoType):
        (BaseMixin):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2013-04-17  Dirk Schulze  <krit@webkit.org>

        BasicShapeFunctions should use RenderStyle instead of StyleResolver
        https://bugs.webkit.org/show_bug.cgi?id=114743

        Reviewed by Antti Koivisto.

        BasicShapeFunctions does include RenderStyle instead of StyleResolver now.
        This is a simple refactoring patch, no new tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::convertToLength): Use style and rootElementStyle directly.
        (WebCore::basicShapeForValue): Ditto.
        * css/BasicShapeFunctions.h:
        (WebCore):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyExclusionShape::applyValue):

2013-04-17  Beth Dakin  <bdakin@apple.com>

        Content inside frames and scrollbars in overflow areas hit-tests incorrectly when 
        the WKView has a header
        https://bugs.webkit.org/show_bug.cgi?id=114769

        Reviewed by Simon Fraser.

        convertToRenderer() and convertFromRenderer() need to factor in the headerHeight, 
        much like all of the conversion functions on ScrollView. 
        * page/FrameView.cpp:
        (WebCore::FrameView::convertFromRenderer):
        (WebCore::FrameView::convertToRenderer):

        The scrollPosition equivalent of the existing scrollOffsetRelativeToDocument() 
        function. 
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollPositionRelativeToDocument):
        * platform/ScrollView.h:
        (ScrollView):

2013-04-17  Andreas Kling  <akling@apple.com>

        Remove FragmentScriptingPermission.h include from Element.h.
        <http://webkit.org/b/114757>

        Rubber-stamped by Anders Carlsson.

        * dom/Element.h:

2013-04-17  Mark Lam  <mark.lam@apple.com>

        Add LLINT and baseline JIT support for timing out scripts.
        https://bugs.webkit.org/show_bug.cgi?id=114577.

        Reviewed by Geoffrey Garen.

        Replaced use of the obsolete JSGlobalData.terminator methods with the
        JSGlobalData.watchdog equivalents.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::maybeThrowExceptionIfSerializationFailed):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::isExecutionTerminating):

2013-04-16  Jer Noble <jer.noble@apple.com>

        Crash in WebCore::HTMLMediaElement::~HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=113531

        Reviewed by Eric Carlson.

        No new tests, though this is intermittently reproducible with
        http/tests/misc/delete-frame-during-readystatechange.html under ASAN.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Clear the media player manually
            before the destructor exits. Clearing the media player may cancel a resource load,
            which can trigger a readystatechange event. It's possible for the HTMLMediaElement
            to attempt to fire an abort event within the readystatechange event, even though it is
            now in an inconsistent state. Clearling the media player before finishing the destructor
            ensures that the HTMLMediaElement will at least still be alive if this case is triggered.
            Set m_completelyLoaded to true to ensure that if userCancelledLoad() is called, it doesn't
            attempt to fire events while destructing.

2013-04-17  Sergio Correia  <sergio.correia@openbossa.org>

        Web Inspector: make generate-inspector-protocol-version work with python3 
        https://bugs.webkit.org/show_bug.cgi?id=114717

        Revision r146765 added print() calls that made the script complain about 
        invalid syntax when using python3.

        This commit replaces such calls with calls to sys.stdout.write(), analogous
        to the sys.stderr.write() ones already used throughout the file.

        Reviewed by Timothy Hatcher.

        No new tests. No user visible behavior changed.

        * inspector/generate-inspector-protocol-version:
        (main):

2013-04-17  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Fix Localized string warngs
        https://bugs.webkit.org/show_bug.cgi?id=114718

        Reviewed by Timothy Hatcher.

        No tests because no behavior change is expected.

        * English.lproj/localizedStrings.js:

2013-04-17  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed Windows buildfix.

        * platform/qt/DragDataQt.cpp: Add a missing include.

2013-04-17  ChangSeok Oh  <shivamidow@gmail.com>

        Breaking Float: floated block level element following inline element in floated container breaks to next line
        https://bugs.webkit.org/show_bug.cgi?id=45274

        Reviewed by David Hyatt.

        Fix position issue of floating element in floating element.
        Inner floating element has placed at next line when outer floating element has text,
        even though previous line has spaces enough to fit it.
        To solve this, the width of a space added temporarily for prohibiting duplication more than 2 empty spaces
        is subtracted when floating element is checked whether it fits on a line.

        Tests: css2.1/20110323/floats-001.html
               css2.1/20110323/floats-102.html
               fast/inline-block/float-both-whitespace.html
               fast/inline-block/float-leading-whitespace.html
               fast/inline-block/float-no-whitespace.html
               fast/inline-block/float-trailing-whitespace.html
               fast/inline-block/multiple-floats-with-whitespace.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::fitsOnLine):
        (WebCore::LineWidth::trailingWhitespaceWidth):
        (WebCore::LineWidth::setTrailingWhitespaceWidth):
        (LineWidth):
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):

2013-04-17  Leo Yang  <leoyang@rim.com>

        Lots of unused parameter warnings in filesystem code
        https://bugs.webkit.org/show_bug.cgi?id=114747

        Reviewed by Carlos Garcia Campos.

        Comment out or remove unused parameter identifiers.

        No functionalities changed, no new tests.

        * Modules/filesystem/DOMFileSystem.cpp: Comment out |snapshot| because
        it is referred in the comments inside the function.
        (WebCore):
        * Modules/filesystem/DOMFileSystemSync.cpp: Ditto.
        (WebCore):
        * Modules/filesystem/FileWriter.cpp: Remove unused |ec|.
        (WebCore::FileWriter::abort):
        * Modules/filesystem/FileWriterSync.cpp:
        (WebCore::FileWriterSync::didWrite): Remove unused |bytes|.
        * platform/AsyncFileSystemCallbacks.h:
        (WebCore::AsyncFileSystemCallbacks::didOpenFileSystem): Comment out unused parameters
        because the function is inlined.
        (WebCore::AsyncFileSystemCallbacks::didCreateSnapshotFile): Ditto.
        (WebCore::AsyncFileSystemCallbacks::didReadDirectoryEntry): Ditto.
        (WebCore::AsyncFileSystemCallbacks::didReadDirectoryEntries): Ditto.
        (WebCore::AsyncFileSystemCallbacks::didCreateFileWriter): Ditto.
        * platform/blackberry/WorkerAsyncFileSystemBlackBerry.cpp:
        (WebCore::WorkerAsyncFileSystemBlackBerry::createWriterOnMainThread): Remove unused |client|.

2013-04-17  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Stop individually building WTF files in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=114705

        Reviewed by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Remove references to WTF objects.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto

2013-04-17  Dirk Schulze  <krit@webkit.org>

        Make lengthConversion methods and arguments const
        https://bugs.webkit.org/show_bug.cgi?id=114749

        Reviewed by Andreas Kling.

        Refactoring, no new tests.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcValue::computeLengthPx):
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        (WebCore::CSSCalcPrimitiveValue::computeLengthPx):
        (WebCore::CSSCalcBinaryOperation::toCalcValue):
        (WebCore::CSSCalcBinaryOperation::computeLengthPx):
        * css/CSSCalculationValue.h:
        (WebCore::CSSCalcValue::toCalcValue):
        (CSSCalcValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        (WebCore::CSSPrimitiveValue::viewportPercentageLength):
        * css/CSSPrimitiveValue.h:
        (CSSPrimitiveValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::convertToIntLength):
        (WebCore::StyleResolver::convertToFloatLength):
        * css/StyleResolver.h:
        (StyleResolver):

2013-04-17  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [refactor] Moved ScriptedAnimationController common code to inline function
        https://bugs.webkit.org/show_bug.cgi?id=114681

        Reviewed by Daniel Bates.

        Avoided duplicated code by moving ScriptedAnimationController clearance
        code to a common function used by both Document::dispose() and
        Document::detach().

        No new tests, no behavior changes.

        * dom/Document.cpp:
        (WebCore::Document::dispose):
        (WebCore::Document::detach):
        (WebCore::Document::clearScriptedAnimationController): Added.
        * dom/Document.h:
        (Document):

2013-04-17  Chris Fleizach  <cfleizach@apple.com>

        AX: When img@alt is undefined, WebKit should use @title as accessibility label if available
        https://bugs.webkit.org/show_bug.cgi?id=114535

        Reviewed by Tim Horton.

        Don't hide images from Accessibility that have the title attribute on them.

        Test: accessibility/empty-image-with-title.html

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

2013-04-17  Arpita Bahuguna  <a.bah@samsung.com>

        getAttribute does not behave correctly for mixed-case attributes on HTML elements
        https://bugs.webkit.org/show_bug.cgi?id=105713

        Reviewed by Andreas Kling.

        getAttribute() and getAttributeNode() APIs do not convert the
        passed attribute name to lowercase before comparing against the
        existing attributes.
        The specification however states that the passed name should
        be converted to ASCII lowercase before checking for the existence
        of the given attribute. [www.w3.org/TR/domcore/#dom-element-getattribute]

        Test: fast/dom/Element/getAttribute-case-insensitivity.html

        * dom/Element.h:
        (WebCore::ElementData::getAttributeItemIndex):
        getAttributeItemIndex() accepts a bool param 'shouldIgnoreAttributeCase'
        which specifies whether or not the attribute's case should be ignored
        before comparison but we don't really convert the passed name to lowercase
        before carrying out the comparison.

        Thus, when called from APIs such as getAttribute() and getAttributeNode()
        which do not explicitally convert the attribute name to lowercase
        before calling on this method, it fails to carry out a case-insensitive
        search.

        Have thus made changes to convert the passed attribute's name to
        lowercase if 'shouldIgnoreAttributeCase' is true.

2013-04-17  John Griggs  <jgriggs@blackberry.com>

        [BlackBerry] Add support for filesystem: URLs to BlackBerry Media Player.
        https://bugs.webkit.org/show_bug.cgi?id=114686
        https://przilla.ott.qnx.com/bugzilla/show_bug.cgi?id=314865

        Reviewed by Rob Buis.

        Translate filesystem: URLs to file:// URLs for use by the media player, but only after the filesystem: URL has been checked for security, etc.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::onError):
        (WebCore::MediaPlayerPrivate::onDurationChanged):
        (WebCore::MediaPlayerPrivate::notifyChallengeResult):

2013-04-17  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Eclipse warnings in MediaPlayerPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=114654

        Reviewed by Philippe Normand.

        No new tests (nothing added).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        Initialize m_volumeAndMuteInitialized
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        Initialize signal handlers to 0.

2013-04-17  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Remove m_flowThread from NodeRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=114732

        Reviewed by Antti Koivisto.

        Cleanup NodeRenderingContext. Remove unused member m_flowThread.

        Tests: None needed.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        * dom/NodeRenderingContext.h: Removed m_flowThread.

2013-04-17  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] MediaPlayerPrivateQt.cpp doesn't build in debug

        Unreviewed build fix.

        We need to include Logging.h to get the LOG definitions.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:

2013-04-17  Claudio Saavedra  <csaavedra@igalia.com>

        execCommand("RemoveFormat") might remove format after the selection
        https://bugs.webkit.org/show_bug.cgi?id=112240

        Reviewed by Ryosuke Niwa.

        Tests: editing/execCommand/remove-format-multiple-elements-mac.html

        This bug is hit when ApplyStyleCommand is used to change the
        style and the current selection ends in the beginning of a new node.
        The bug is actually a two-fold thing:

        1. There was no check as to whether the end node is really
        selected or not, and format was always removed from it with
        pushDownInlineStyleAroundNode(). An equivalent check for the start
        node was already in place, so fix it analogously.

        2. Previous stage might change the dom tree, resulting in a render
        tree that is not up-to-date. Position::upstream() is later used
        and, in order to be able to find a visually equivalent position in
        a text node, this method needs the render tree to be up-to-date,
        therefore, a call to updateLayoutIgnorePendingStylesheets() is
        necessary.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyle): Make sure that no
        format is removed from the end node if it's not fully selected.
        (WebCore::ApplyStyleCommand::nodeFullySelected): Call updateLayoutIgnorePendingStylesheets()

2013-04-17  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] GraphicsContext3D: don't initialize m_extensions in the constructor
        https://bugs.webkit.org/show_bug.cgi?id=114726

        Reviewed by Carlos Garcia Campos.

        m_extensions is now initialized on demand by
        GraphicsContext3D::getExtensions().

        Doing it in the constructor produces a crash, because
        Extensions3DOpenGLES() calls glGetString before the WebGL context
        is current.

        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2013-04-16  Maciej Stachowiak  <mjs@apple.com>

        Replace JSC-specific IDL extended attributes with generic (JSC+V8) ones, now that the distinction no longer matters
        https://bugs.webkit.org/show_bug.cgi?id=114712

        Reviewed by Dan Bernstein.

        No behavior change expected.

        * bindings/scripts/IDLAttributes.txt: Remove the JSFoo attributes
        that have bare Foo equivalents.
        * bindings/scripts/CodeGeneratorJS.pm: Remove support for JSFoo
        aliases.
        (GetGenerateIsReachable):
        (GetCustomIsReachable):
        (ShouldGenerateToJSDeclaration):
        (ShouldGenerateToJSImplementation):
        (HasCustomConstructor):
        (HasCustomGetter):
        (HasCustomSetter):
        (HasCustomMethod):

        Replace JSFoo attributes with equivalen Foo attributs in all files
        below:
        
        * Modules/geolocation/Geolocation.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/websockets/DOMWindowWebSocket.idl:
        * Modules/websockets/WorkerContextWebSocket.idl:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * dom/MessagePort.idl:
        * dom/MutationObserver.idl:
        * dom/Node.idl:
        * fileapi/Blob.idl:
        * html/HTMLDocument.idl:
        * html/HTMLTemplateElement.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/DataView.idl:
        * 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:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackList.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/MemoryInfo.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * page/WorkerNavigator.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * workers/AbstractWorker.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:
        * workers/WorkerLocation.idl:
        * xml/XMLHttpRequestUpload.idl:

2013-04-16  Beth Dakin  <bdakin@apple.com>

        Re-name Page::layoutMilestones() to Page::requestedLayoutMilestones()
        https://bugs.webkit.org/show_bug.cgi?id=114713

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::addLayoutMilestones):
        (WebCore::Page::removeLayoutMilestones):
        (WebCore::Page::isCountingRelevantRepaintedObjects):
        * page/Page.h:
        (WebCore::Page::requestedLayoutMilestones):
        (Page):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):

2013-04-16  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Fix dependecy calculation for generated inspector files
        https://bugs.webkit.org/show_bug.cgi?id=114092

        Reviewed by Brent Fulgham.

        At least in a generated Visual Studio solution the files generated via
        CodeGeneratorInspector.py are considered outdated all the time because
        the code generator only touches the file when the content changed.
        Add an --write_always parameter to the script to touch the file always.

        * CMakeLists.txt:
        * inspector/CodeGeneratorInspector.py:

2013-04-16  Anders Carlsson  <andersca@apple.com>

        Clone storage namespaces for window.open
        https://bugs.webkit.org/show_bug.cgi?id=114703

        Reviewed by Sam Weinig.

        Pass the new page to StorageNamespace::copy.

        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow):
        * storage/StorageNamespace.h:
        (StorageNamespace):
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::copy):
        * storage/StorageNamespaceImpl.h:
        (WebCore):
        (StorageNamespaceImpl):

2013-04-16  Sam Weinig  <sam@webkit.org>

        Fix fallout after r148545.

        * platform/text/TextChecking.h:
        Move Platform defines that were incorrectly in WebCore, into Platform.h

2013-04-16  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] polygon shape-inside layout fails
        https://bugs.webkit.org/show_bug.cgi?id=114402

        Reviewed by Dirk Schulze.

        The firstIncludedIntervalLogicalTop() method's implementation relied on optimistic
        assumptions about floating point accuracy which, in rare cases, caused it to discard
        first-fit locations based on the intersection of the minLogicalIntervalTop offset edge
        and a polygon offset edge. Now: we do not verify that first-fit locations based on the
        intersection of an offset edge and the minLogicalIntervalTop offset edge are below
        the horizontal minLogicalIntervalTop line. They're essentially below the line "by definition".

        Test: fast/exclusions/shape-inside/shape-inside-polygon-layout.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop): Avoid floating point problems
            when checking intersections with the offset edge based on minLogicalIntervalTop.
        * rendering/ExclusionPolygon.h:
        (WebCore::OffsetPolygonEdge::OffsetPolygonEdge): Initialize the basis field.
        (WebCore::OffsetPolygonEdge::basis): Report what the offset edge is "based on": a polygon
            edge, the top of the line, or a (reflex) vertex.
        (OffsetPolygonEdge): Added the Basis enum to enable tracking what the geometry of
            an offset edge is based on.

2013-04-16  Jer Noble  <jer.noble@apple.com>

        Further unreviewed build fix: protect JSAudioBufferCustom with a ENABLE(WEB_AUDIO) check.

        * bindings/js/JSAudioBufferCustom.cpp:

2013-04-16  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; add new JSAudioBuffer.cpp file to more build systems.

        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:

2013-04-16  Jer Noble  <jer.noble@apple.com>

        Repeated use of decodeAudioData() causes leak
        https://bugs.webkit.org/show_bug.cgi?id=114709

        Reviewed by Geoffrey Garen.

        Report the correct size of the AudioBuffer to the garbage collector so that creating
        these large buffers will trigger garbage collection.

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::memoryCost): Added; simple sum of the buffer sizes in m_channels;
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioBuffer.idl: Add the CustomToJSObject flag.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioBufferCustom.cpp: Added.
        (WebCore::toJS): Added; report the extra size of an AudioBuffer when the wrapper
            is created.

2013-04-16  Beth Dakin  <bdakin@apple.com>

        Need a new layout milestone to notify bundle clients when the header has been 
        flushed
        https://bugs.webkit.org/show_bug.cgi?id=114706
        -and corresponding-
        <rdar://problem/13657284>

        Reviewed by Simon Fraser.

        New LayoutMilestone is DidFirstFlushForHeaderLayer.
        * page/LayoutMilestones.h:
        
        New API to allow removing a LayoutMilestone.
        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::removeLayoutMilestones):
        * page/Page.h:
        (Page):

        New boolean member variable m_headerLayerAwaitingFirstFlush keeps track of whether 
        we need to send the DidFirstFlushForHeaderLayer milestone.
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):

        Send the milestone if appropriate.
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):

         Set m_headerLayerAwaitingFirstFlush to true for a newly created layer.
        (WebCore::RenderLayerCompositor::updateLayerForHeader):

2013-04-16  Tim Horton  <timothy_horton@apple.com>

        PlugIn Snapshotting: Crashes refreshing non-main-frame PDFPlugins
        https://bugs.webkit.org/show_bug.cgi?id=114702
        <rdar://problem/13542020>

        Reviewed by Dean Jackson.

        If:

            a) a plugin fails all the tests in willCreatePlugIn, so it is WaitingForSnapshot there
            b) primary plugin detection attempts to restart a plugin between the
               time that willCreatePlugIn and didCreatePlugIn fire
            c) when didCreatePlugIn fires, shouldAlwaysAutoStart() returns true,
               because the plug-in is whitelisted,

        we end up reattach()ing and going to Restarted state, and then going straight
        to Playing state in didCreatePlugIn.

        Instead, primary plugin promotion should be deferred until after the plugin is created,
        so that we can take that one last bit of information (shouldAlwaysAutoStart) into account
        before restarting and reattaching the plug-in.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn):
        (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn):
        (WebCore::HTMLPlugInImageElement::subframeLoaderDidCreatePlugIn):
        * html/HTMLPlugInImageElement.h:

2013-04-16  Wei James  <james.wei@intel.com>

        ASSERTION FAILED: i < size(), UNKNOWN in WebCore::ChannelMergerNode::process
        https://bugs.webkit.org/show_bug.cgi?id=112657

        Avoid to access input bus in checkNumberOfChannelsForInput() before the
        bus is updated with AudioNode::checkNumberOfChannelsForInput().

        Reviewed by Chris Rogers.

        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::checkNumberOfChannelsForInput):

2013-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        Even more Windows build fix and a Qt minimal build fix attempt.

        * html/parser/XSSAuditorDelegate.cpp:
        * page/win/FrameCGWin.cpp:

2013-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        More Windows build fixes.

        * platform/win/DragDataWin.cpp:
        * platform/win/PasteboardWin.cpp:

2013-04-16  Sam Weinig  <sam@webkit.org>

        Windows build fix.

        * page/win/FrameWin.cpp:

2013-04-16  Dean Jackson  <dino@apple.com>

        PlugIns that resize in user gestures should be immune to snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=114697
        <rdar://problem/13666258>

        Reviewed by Tim Horton.

        Now that we snapshot plugins if they resize above the snapshotting threshold,
        we need to make sure that we don't do it in response to a user gesture
        such as a click.

        Due to the complexities of real-world content and the way they often do
        things using timeout, I copied the code from the generic user gesture
        timeout, which gives a 5 second grace period after clicks.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::documentHadRecentUserGesture): New static function to share the code for
            checking the time since the last click (or whatever).
        (WebCore::HTMLPlugInImageElement::checkSizeChangeForSnapshotting): Make sure
            to test for a user gesture.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Move the
            code into the new function.

2013-04-15  Sam Weinig  <sam@webkit.org>

        Remove more #includes from Frame.h
        https://bugs.webkit.org/show_bug.cgi?id=114642

        Reviewed by Anders Carlsson.

        Convert Editor, FrameSelection, EventHandler and AnimationController into
        OwnPtrs, to avoid inclusion.

        * accessibility/AXObjectCache.cpp:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.cpp:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * bindings/objc/DOM.mm:
        * dom/CharacterData.cpp:
        * dom/ContainerNode.cpp:
        * dom/Element.cpp:
        * editing/AlternativeTextController.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/DeleteButtonController.h:
        * editing/EditingStyle.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/SpellChecker.cpp:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/TextInsertionBaseCommand.cpp:
        * history/CachedFrame.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLSelectElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        * html/HTMLTextFormControlElement.cpp:
        * html/TextFieldInputType.cpp:
        * html/shadow/ClearButtonElement.cpp:
        * html/shadow/MediaControlElements.cpp:
        * html/shadow/SliderThumbElement.cpp:
        * inspector/InspectorPageAgent.h:
        * loader/FrameLoader.cpp:
        * page/DOMWindow.cpp:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * page/Page.cpp:
        * page/TouchAdjustment.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/gtk/PasteboardGtk.cpp:
        * platform/qt/ClipboardQt.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderNamedFlowThread.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderSnapshottedPlugIn.cpp:
        * svg/graphics/SVGImage.cpp:
        * testing/Internals.cpp:

2013-04-16  Jessie Berlin  <jberlin@apple.com>

        Speculative Windows build fix.

        * platform/win/ContextMenuWin.cpp:

2013-04-16  Eric Carlson  <eric.carlson@apple.com>

        [Mac] in-band cues sometimes displayed late
        https://bugs.webkit.org/show_bug.cgi?id=114629

        Reviewed by Jer Noble.

        No new tests, this deals with a platform-specific issue that is extremely timing dependent.

        * html/track/InbandTextTrack.cpp:
        (WebCore::TextTrackCueMap::add): New, two way cue data <-> cue map.
        (WebCore::TextTrackCueMap::find): 
        (WebCore::TextTrackCueMap::remove):
        (WebCore::InbandTextTrack::updateCueFromCueData): New, update an existing cue. Set cue end time
            to video duration if it is unknown.
        (WebCore::InbandTextTrack::addGenericCue): Look for existing cues without considering duration
            so we can match incomplete cues.
        (WebCore::InbandTextTrack::updateGenericCue): New, update an existing cue. This allows us to 
            add in-band cues as soon as we get them from the media engine and update them as more
            information becomes available.
        (WebCore::InbandTextTrack::removeGenericCue): New, remove an existing cue. This is necessary
            because we never want to keep an incomplete cue when a seek happens.
        (WebCore::InbandTextTrack::removeCue): New, base class override so we can keep the two way
            map up to date.
        * html/track/InbandTextTrack.h:

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue): TextTrack::removeCue takes a RefPtr.
        (WebCore::TextTrack::removeCue): Take a RefPtr.
        (WebCore::TextTrack::hasCue): Allow caller to request match without considering end time.
        * html/track/TextTrack.h:

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::TextTrackCue): Initialize m_processingCueChanges.
        (WebCore::TextTrackCue::willChange): Renamed from cueWillChange. Use m_processingCueChanges
            to avoid thrashing the track when many cue properties will change.
        (WebCore::TextTrackCue::didChange): Renamed from cueDidChange. Use m_processingCueChanges
            to avoid thrashing the track when many cue properties will change.
        (WebCore::TextTrackCue::setId): cueWillChange -> willChange. cueDidChange -> didChange. 
        (WebCore::TextTrackCue::setStartTime): Ditto.
        (WebCore::TextTrackCue::setEndTime): Ditto.
        (WebCore::TextTrackCue::setPauseOnExit): Ditto.
        (WebCore::TextTrackCue::setVertical): Ditto.
        (WebCore::TextTrackCue::setSnapToLines): Ditto.
        (WebCore::TextTrackCue::setLine): Ditto.
        (WebCore::TextTrackCue::setPosition): Ditto.
        (WebCore::TextTrackCue::setSize): Ditto.
        (WebCore::TextTrackCue::setAlign): Ditto.
        (WebCore::TextTrackCue::setText): Ditto.
        (WebCore::TextTrackCue::setRegionId): Ditto.
        (WebCore::TextTrackCue::isEqual): Renamed from operator==, take match rules param.
        * html/track/TextTrackCue.h:

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::isEqual): Renamed from operator==, take match rules param.
        * html/track/TextTrackCueGeneric.h:

        * platform/graphics/InbandTextTrackPrivateClient.h: Make GenericCueData refcounted.
        (WebCore::GenericCueData::create): New.
        (WebCore::GenericCueData::status): Ditto.
        (WebCore::GenericCueData::setStatus): Ditto.
        (WebCore::GenericCueData::GenericCueData):

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue): Add cues as soon as we get them from the media
            engine, update duration once we know it.
        (WebCore::InbandTextTrackPrivateAVF::resetCueValues): Tell the client to remove all incomplete
            cues we have delivered.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Do not flush cues when seek completes,
            we did that when the seek started and cues can be delivered before we get the the 
            seek completed  notification.

2013-04-16  James Craig  <james@cookiecrook.com>

        dfn element should be exposed as AXGroup:AXDefinition
        https://bugs.webkit.org/show_bug.cgi?id=108980

        Reviewed by Chris Fleizach.

        dfn element now exposed as AXGroup:AXDefinition. Updated existing tests.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):

2013-04-16  Anders Carlsson  <andersca@apple.com>

        Begin chipping away at ScriptState
        https://bugs.webkit.org/show_bug.cgi?id=114695

        Reviewed by Geoffrey Garen.

        Remove ScriptStateProtectedPtr as well as evalEnabled and setEvalEnabled.

        * bindings/js/ScriptState.cpp:
        * bindings/js/ScriptState.h:
        * inspector/InjectedScriptBase.cpp:
        (WebCore::InjectedScriptBase::callFunctionWithEvalEnabled):
        * inspector/ScriptArguments.cpp:
        (WebCore::ScriptArguments::ScriptArguments):
        (WebCore::ScriptArguments::globalState):
        * inspector/ScriptArguments.h:

2013-04-15  Anders Carlsson  <andersca@apple.com>

        Remove unneeded headers from ScriptExecutionContext.h
        https://bugs.webkit.org/show_bug.cgi?id=114631

        Reviewed by Alexey Proskuryakov.

        This shaves another minute off WebCore build time on my MacBook Pro.

        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * fileapi/Blob.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderFlowThread.cpp:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderIFrame.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderListBox.cpp:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderMedia.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderRegion.cpp:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderReplica.cpp:
        * rendering/RenderRubyRun.cpp:
        * rendering/RenderScrollbarPart.cpp:
        * rendering/RenderSlider.cpp:
        * rendering/RenderTable.cpp:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderTextTrackCue.cpp:
        * rendering/RenderVideo.cpp:
        * rendering/RenderView.cpp:
        * rendering/RenderWidget.cpp:
        * rendering/svg/RenderSVGContainer.cpp:
        * rendering/svg/RenderSVGForeignObject.cpp:
        * rendering/svg/RenderSVGGradientStop.cpp:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGText.cpp:

2013-04-16  Maciej Stachowiak  <mjs@apple.com>

        Remove even yet still more traces of v8
        https://bugs.webkit.org/show_bug.cgi?id=114693

        Reviewed by Anders Carlsson.

        No behavior change.

        * bindings/generic/ActiveDOMCallback.h:
        (WebCore::ActiveDOMCallback::isScriptControllerTerminating): Remove a V8-specific
        method and the comment referencing it.
        * bindings/generic/ActiveDOMCallback.cpp:
        (WebCore::ActiveDOMCallback::isScriptControllerTerminating): ditto
        * fileapi/File.cpp:
        (WebCore::File::File): Remove a comment referencing v8
        * inspector/InjectedScriptExterns.js: ditto

2013-04-16  Alexey Proskuryakov  <ap@apple.com>

        Remove unused AlternativeTextClient::dismissDictationAlternativeUI
        https://bugs.webkit.org/show_bug.cgi?id=114598

        Reviewed by Ryosuke Niwa.

        Removing dead code.

        * WebCore.exp.in:
        * editing/mac/AlternativeTextUIController.h: Made dismissAlternatives() private.
        * page/AlternativeTextClient.h:

2013-04-16  Robert Hogan  <robert@webkit.org>

        Float at exact multiple of line-height affects too many lines
        https://bugs.webkit.org/show_bug.cgi?id=112744

        Reviewed by David Hyatt.

        Tests: fast/block/float/float-with-fractional-height-vertical-lr.html
               fast/block/float/float-with-fractional-height.html

        When adding floats to the interval tree used for testing floats' overlap with lineboxes
        truncate the dimensions of the float rather than rounding them. This matches the
        treatment of linebox dimensions so ensures the test for overlap is comparing like
        with like.

        * rendering/RenderBlock.cpp:
        (WebCore::::collectIfNeeded):
        (WebCore::RenderBlock::FloatingObjects::intervalForFloatingObject):
        (WebCore::::string):

2013-04-16  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-valuetext is not exposed on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=114628

        Reviewed by Tim Horton.

        aria-valuetext is only being exposed on ARIA controls. That's because there were
        checks in place so that ONLY ARIA defined controls would return anything related to valuetext.
        We should allow this to work on native controls as well.

        Test: platform/mac/accessibility/aria-valuetext-on-native-slider.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::valueDescription):
        (WebCore):
        (WebCore::AccessibilityNodeObject::valueForRange):
        (WebCore::AccessibilityNodeObject::maxValueForRange):
        (WebCore::AccessibilityNodeObject::minValueForRange):
        * accessibility/AccessibilityNodeObject.h:
        (AccessibilityNodeObject):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isRangeControl):
             Rename isARIAControl to isRangeControl and make it apply to all elements.
        * accessibility/AccessibilityObject.h:

2013-04-15  Jon Lee  <jonlee@apple.com>

        RenderView should bail out of paintBoxDecorations() when painting with a different renderer
        https://bugs.webkit.org/show_bug.cgi?id=114665
        <rdar://problem/13434884>

        Reviewed by Simon Fraser.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations): Add a check to see if we should paint within the renderer.
        This check exists in all other implementations of paintBoxDecorations(), and correctly avoids painting the
        decorations if the root provided is not the RenderView.

2013-04-16  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Remove the cache of validated programs
        https://bugs.webkit.org/show_bug.cgi?id=112844

        Reviewed by Dean Jackson.

        Since we're caching CustomFilterProgram(s) now, we don't need another cache for
        CustomFilterValidatedProgram(s). With this patch, CustomFilterProgram stores a reference
        to a lazily created CustomFilterValidatedProgram, and CustomFilterGlobalContext no longer
        has a validated program cache.

        Also, this patch removes the CustomFilterValidatedProgram's stored reference to
        CustomFilterGlobalContext. The removal of the validated program cache would cause
        this reference to become weak. Validated programs only needed to keep the global context
        reference in order to create a CustomFilterCompiledProgram. In this patch, we create
        CustomFilterCompiledProgram(s) in FECustomFilter instead of in CustomFilterValidatedProgram,
        so validated programs don't need to store the global context reference anymore.

        No new tests. Just Refactoring.

        * platform/graphics/filters/CustomFilterCompiledProgram.cpp:
        (WebCore::CustomFilterCompiledProgram::CustomFilterCompiledProgram):
        * platform/graphics/filters/CustomFilterGlobalContext.cpp:
        (WebCore::CustomFilterGlobalContext::~CustomFilterGlobalContext):
        * platform/graphics/filters/CustomFilterGlobalContext.h:
        (CustomFilterGlobalContext):
        * platform/graphics/filters/CustomFilterProgram.cpp:
        (WebCore::CustomFilterProgram::validatedProgram):
        (WebCore::CustomFilterProgram::setValidatedProgram):
        * platform/graphics/filters/CustomFilterProgram.h:
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::CustomFilterValidatedProgram):
        (WebCore::CustomFilterValidatedProgram::compiledProgram):
        (WebCore::CustomFilterValidatedProgram::setCompiledProgram):
        (WebCore::CustomFilterValidatedProgram::~CustomFilterValidatedProgram):
        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        (CustomFilterValidatedProgram):
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::prepareForDrawing):
        * rendering/FilterEffectRenderer.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeFilterOperations):

2013-04-16  Anthony Scian  <ascian@blackberry.com>

        [BlackBerry] LayerTexture: check if the graphics context is NULL
        https://bugs.webkit.org/show_bug.cgi?id=114674

        Reviewed by Rob Buis.

        Internal PR: 256522

        * platform/graphics/blackberry/LayerTexture.cpp:
        (WebCore::LayerTexture::setContentsToColor):

2013-04-13  Andreas Kling  <akling@apple.com>

        REGRESSION(r148128): window.resizeTo doesn't work from Safari address bar.
        <rdar://problem/13635894>
        <http://webkit.org/b/114561>

        Reviewed by Sam Weinig.

        Suppressing window geometry changes while any user gesture is active was a bit too restrictive,
        and broke legitimate use-cases. Narrow it down to checking EventHandler::mousePressed().

        No test yet, adding one is tracked by <http://webkit.org/b/114561>.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::allowedToChangeWindowGeometry):

            Added to share code between all DOMWindow functions that alter window geometry.

        (WebCore::DOMWindow::moveBy):
        (WebCore::DOMWindow::moveTo):
        (WebCore::DOMWindow::resizeBy):
        (WebCore::DOMWindow::resizeTo):

2013-04-16  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][EFL] Remove deprecated libsoup API usage
        https://bugs.webkit.org/show_bug.cgi?id=104894

        Reviewed by Philippe Normand.

        Based on a patch by Claudio Saavedra <csaavedra@igalia.com>.
        Remove LIBSOUP_USE_UNSTABLE_REQUEST_API and only include
        libsoup/soup.h.

        * platform/network/ResourceHandleInternal.h:
        * platform/network/soup/GOwnPtrSoup.cpp:
        * platform/network/soup/ProxyResolverSoup.h:
        * platform/network/soup/ResourceErrorSoup.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ensureSessionIsInitialized): No need to add the requester
        feature.
        (WebCore::createSoupRequestAndMessageForHandle): SoupSession has a
        requester API, use it.

2013-04-15  Maciej Stachowiak  <mjs@apple.com>

        Remove more traces of the now-obsolete support for V8
        https://bugs.webkit.org/show_bug.cgi?id=114657

        Reviewed by Ryosuke Niwa.

        In addition to passing existing tests, I verified that the ElementFactory
        and ElementWrapperFactory files were all textually identical before and after.

        * dom/CustomEvent.cpp:
        (WebCore): Remove Use(V8) bock.
        * dom/CustomEvent.h:
        (CustomEvent): ditto
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent): ditto
        (WebCore::MessageEvent::initMessageEvent): ditto
        * dom/Node.h:
        (Node): ditto
        * dom/make_event_factory.pl:
        (generateImplementation): Remove V8 support.
        * dom/make_names.pl: Remove gobs of V8 support and simplify.
        (printJSElementIncludes): 
        (printConditionalElementIncludes):
        (printFactoryCppFile):
        (printWrapperFunctions):
        (printWrapperFactoryCppFile):
        (printWrapperFactoryHeaderFile):
        * inspector/InjectedScriptCanvasModuleSource.js: Remove V8 stack
        trace code.
        * platform/qt/PlatformSupport.h: Remove a macro only used for V8 
        bindings.
        * svg/SVGZoomAndPan.h:
        (SVGZoomAndPan): Remove mention of V8 from comment.

2013-04-15  Ryosuke Niwa  <rniwa@webkit.org>

        Potential use after free in ApplyStyleCommand::splitAncestorsWithUnicodeBidi
        https://bugs.webkit.org/show_bug.cgi?id=114664

        Reviewed by Oliver Hunt.

        Use RefPtr as needed.

        No new tests since this bug was discovered by code inspection.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):

2013-04-15  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Make var and function declarations work again in the Console.

        https://webkit.org/b/114534
        rdar://problem/13614477

        Reviewed by Oliver Hunt.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._evaluateOn): Use 'with' when not evaluating
        on a call frame.

2013-04-15  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Add missing Localized strings
        https://bugs.webkit.org/show_bug.cgi?id=114656

        Reviewed by Timothy Hatcher.

        No tests because no behavior change is expected.

        * English.lproj/localizedStrings.js:

2013-04-15  Dean Jackson  <dino@apple.com>

        Rename restartedPlugin to isRestartedPlugin. This was
        review feedback from r148038 that I thought I fixed
        everywhere but failed.
        https://bugs.webkit.org/show_bug.cgi?id=114233

        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::isRestartedPlugin): Prefix with "is".
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::setDisplayState):
        (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired):
        * html/HTMLPlugInImageElement.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::isRestartedPlugin):

2013-04-15  Maciej Stachowiak  <mjs@apple.com>

        Remove V8 attribtues from IDLAttributes.txt
        https://bugs.webkit.org/show_bug.cgi?id=114651

        Reviewed by Sam Weinig.

        No tests because no behavior change is expected.

        * bindings/scripts/IDLAttributes.txt: Remove V8 attribtues.
        * html/track/TextTrackList.idl: Remove a stray V8-specific attribute
        (so I guess this change is not useless)

2013-04-15  James Craig  <james@cookiecrook.com>

        WebKit should not expose AXSubrole:AXDescriptionList on Mountain Lion as it causes a regression in VoiceOver behavior
        https://bugs.webkit.org/show_bug.cgi?id=113975

        Reviewed by Chris Fleizach.

        Serve NSAccessibilityDescriptionListSubrole or NSAccessibilityDefinitionListSubrole
        depending on platform. Updated existing test coverage.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):

2013-04-15  Dean Jackson  <dino@apple.com>

        Plugins that resize might need to be snapshotted.
        https://bugs.webkit.org/show_bug.cgi?id=102157
        <rdar://problem/12696259>

        Reviewed by Tim Horton.

        A plugin could avoid snapshotting if it started very
        small (below the threshold where we autostart), and then
        resized to be large (above the threshold). Detect this
        case and tell the plugin to snapshot.

        There unfortunately is a bit of state to track when doing
        this. We have to start the snapshotting in a post-layout
        task, so we carry a flag to say we're checking size but
        not wanting the plugin to update (which would restart it).
        We also might be a plugin that would have already restarted
        due to a similar plugin being clicked or detected as dominant.
        So this patch introduces a member variable that tracks what
        decision has been made on snapshotting.

        I also added some more logging to be more clear about what is
        happening to plugins going through the snapshot process, and
        changed the order of the tests in the algorithm so that domain
        detection comes before examining the size.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Initialise
            the two new member variables.
        (WebCore::HTMLPlugInImageElement::setDisplayState): Mark a restarted
            plugin as NeverSnapshot. This means that if it later resizes above the
            threshold, it won't trigger the snapshot detection.
        (WebCore::HTMLPlugInImageElement::checkSnapshotStatus): Renamed from
            updateSnapshotInfo. This now updates the snapshot, but also runs
            the check for size changes.
        (WebCore::addPlugInsFromNodeListMatchingPlugInOrigin): Gather all plugins
            that look like a restarting plugin, not just those snapshotted. That
            way they can all be marked as NeverSnapshot.
        (WebCore::HTMLPlugInImageElement::restartSimilarPlugIns): Bless every
            plugin that looks similar, whether or not it is snapshotted.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): More logging.
        (WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn): Ditto.
        (WebCore::HTMLPlugInImageElement::checkSizeChangeForSnapshotting): New
            method. If the plugin was below the threshold and is now above it,
            begin the snapshotting process.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Plugins
            that were marked as NeverSnapshot should start immediately. Move the origin
            test earlier in the method. If a plugin avoided snapshotting due to size,
            remember the size.
        (WebCore::HTMLPlugInImageElement::subframeLoaderDidCreatePlugIn): Mark the
            plugin as NeverSnapshot.

        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): Four new member variables:
            - the decision we made regarding snapshotting (or not), uses the SnapshotDecision enum
            - the size when it avoided snapshotting
            - a flag to indicate the post layout update was triggered due to
              a size change
        (WebCore::HTMLPlugInImageElement::needsCheckForSizeChange): New method.
        (WebCore::HTMLPlugInImageElement::setNeedsCheckForSizeChange): New method.
        (WebCore::HTMLPlugInImageElement::snapshotDecision): Return the decision
            regarding snapshotting or not snapshotting.

        * page/FrameView.cpp:
        (WebCore::FrameView::addWidgetToUpdate): Guard updating the widget. We don't
            want to do it when we're checking for a size change in the plugin.
        (WebCore::FrameView::updateWidget): Call new name.

        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::beginSnapshottingRunningPlugin): Empty virtual
            method to snapshot a running plugin.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout): If the plugin has increased in
            size add it to the post layout list so that it will be checked.

2013-04-15  Chris Fleizach  <cfleizach@apple.com>

        activating a focused link to an in-page fragment ID should transfer focus to the target of the link when possible
        https://bugs.webkit.org/show_bug.cgi?id=17450

        Reviewed by Maciej Stachowiak.

        When a fragment is scrolled to due to an activation event or on load, focus should attempt to 
        move to the fragment if possible.

        Test: fast/dom/fragment-activation-focuses-target.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):

2013-04-12  Maciej Stachowiak  <mjs@apple.com>

        Remove V8-specific extended attributes from IDL files
        https://bugs.webkit.org/show_bug.cgi?id=114523

        Reviewed by Geoffrey Garen.

        No tests because no behavior change is expected.

        * Modules/encryptedmedia/MediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/MediaKeyNeededEvent.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/filesystem/HTMLInputElementFileSystem.idl:
        * Modules/indexeddb/IDBAny.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/webaudio/AudioDestinationNode.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueList.idl:
        * html/track/TextTrackList.idl:
        * html/track/TextTrackRegion.idl:
        * html/track/TextTrackRegionList.idl:
        * html/track/TrackEvent.idl:
        * storage/Storage.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElement.idl:
        * workers/WorkerContext.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XPathNSResolver.idl:

2013-04-15  Anders Carlsson  <andersca@apple.com>

        ScriptWrappable subclasses shouldn't have to include WeakInlines.h
        https://bugs.webkit.org/show_bug.cgi?id=114641

        Reviewed by Alexey Proskuryakov.

        Remove ScriptWrappableInlines.h includes, they're not needed anymore.

        * css/WebKitCSSMatrix.cpp:
        * dom/ClientRect.cpp:
        * dom/ClientRectList.cpp:
        * dom/Clipboard.cpp:
        * dom/DOMStringMap.cpp:
        * dom/Event.cpp:
        * dom/MutationRecord.cpp:
        * fileapi/FileList.cpp:
        * page/BarInfo.cpp:
        * plugins/DOMMimeTypeArray.cpp:
        * plugins/DOMPlugin.cpp:
        * plugins/DOMPluginArray.cpp:
        * storage/Storage.cpp:

2013-04-15  Igor Oliveira  <igor.o@sisa.samsung.com>

        Call directly RenderBlock::deleteLineBoxTree
        https://bugs.webkit.org/show_bug.cgi?id=102761

        Reviewed by Darin Adler.

        Instead of implementing RenderLineBoxList::deleteLineBoxTree logic inside 
        RenderBlock::determineStartPosition, we can reuse the code. The commentaries added
        in the changeset #86628 are not valid anymore, nextRootBox is casting m_nextLineBox 
        and nextLineBox is returning m_nextLineBox.

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

2013-04-15  Anders Carlsson  <andersca@apple.com>

        Remove files related to quota and proximity events from the Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=114635

        Reviewed by Benjamin Poulain.

        * WebCore.xcodeproj/project.pbxproj:
        * history/PageCache.cpp:
        * page/DOMWindow.cpp:

2013-04-15  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Add WTF_USE_*_UNICODE variables
        https://bugs.webkit.org/show_bug.cgi?id=114556

        Reviewed by Brent Fulgham.

        WTF_USE_ICU_UNICODE and WTF_USE_WCHAR_UNICODE are used to
        reduce duplication in the platform specific CMake files.

        * CMakeLists.txt:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformWinCE.cmake:

2013-04-15  Eric Carlson  <eric.carlson@apple.com>

        HTMLMediaElement::removeTextTrack should clear track client
        https://bugs.webkit.org/show_bug.cgi?id=114630

        Reviewed by Jer Noble.

        No new tests, this is clean-up that prevents a potential crash.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removeTextTrack): Clear the track client.

2013-04-15  Robert Hogan  <robert@webkit.org>

        An inline element with an absolutely positioned child does not correctly calculate/render padding and margin
        https://bugs.webkit.org/show_bug.cgi?id=47554

        Reviewed by David Hyatt.

        When looking for padding/margin to add from the start of a child's parent skip past any leading positioned siblings as 
        we don't add the padding/margin of the common parent when skipping past them in |skipLeadingWhitespace|. We
        don't need to worry about the case of trailing positioned objects as we will account for their parent's
        border/margin/padding when we encounter them in |nextSegmentBreak|.

        Test: fast/inline/padding-before-leading-positioned-element-contributes-width.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::previousInFlowSibling):
        (WebCore):
        (WebCore::inlineLogicalWidth):

2013-04-15  peavo@outlook.com  <peavo@outlook.com>

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

        Reviewed by Brent Fulgham.

        * platform/network/curl/CookieJarCurl.cpp: Added required header files.

2013-04-15  Rob Buis  <rbuis@rim.com>

        Fix some compiler warnings (miscellaneous)
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Darin Adler.

        It does not seem needed to initialize jpeg_create_compress struct to zero,
        all that is needed is set the err field. See for instance SkImageDecoder_libjpeg.cpp.

        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::compressRGBABigEndianToJPEG):

2013-04-15  Patrick Gansterer  <paroga@webkit.org>

        [GTK] Remove platform specific implementation of KURL::fileSystemPath()
        https://bugs.webkit.org/show_bug.cgi?id=114133

        Reviewed by Martin Robinson.

        r147883 added a generic implementation of this function,
        which can be used by all ports to share the code.

        * GNUmakefile.list.am:
        * platform/KURL.cpp:
        (WebCore):
        * platform/gtk/KURLGtk.cpp: Removed.

2013-04-15  Csaba Osztrogonác  <ossy@webkit.org>

        Debug buildfix after r148433.
        https://bugs.webkit.org/show_bug.cgi?id=108295

        Reviewed by Allan Sandfeld Jensen.

        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::children): Added.

2013-04-15  Noam Rosenthal  <noam@webkit.org>

        Coordinated Graphics: Remove GraphicsLayerTextureMapper dependency from CoordinatedGraphicsScene.
        https://bugs.webkit.org/show_bug.cgi?id=108295

        Since all the changes to the TextureMapperLayer tree now come in a single IPC message via
        CoordinatedGraphicsState, we don't need the additional buffering done in GraphicsLayerTextureMapper.

        This reduces unnecessary function calls, and also streamlines GraphicsLayerTextureMapper to be used
        only in WebKit1 (without CoordinatedGraphics).

        Reviewed by Allan Sandfeld Jensen.

        No new tests, refactor only.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerTextureMapper::setDrawsContent):
        (WebCore::GraphicsLayerTextureMapper::prepareBackingStoreIfNeeded):
        (WebCore::GraphicsLayerTextureMapper::updateDebugBorderAndRepaintCount):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIfNeeded):
        (WebCore):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
            Removed references to m_hasOwnBackingStore, which was done to separate the CoordinatedGraphics
            path from the WK1 path.

        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::drawsContent):
        (WebCore::TextureMapperLayer::contentsAreVisible):
        (WebCore::TextureMapperLayer::size):
        (WebCore::TextureMapperLayer::opacity):
        (WebCore::TextureMapperLayer::transform):
        (WebCore::TextureMapperLayer::isShowingRepaintCounter):
        (WebCore::TextureMapperLayer::fixedToViewport):
        (TextureMapperLayer):
            Added a few public functions needed by CoordinatedGraphicsScene.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::layerShouldHaveBackingStore):
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebCore::CoordinatedGraphicsScene::paintToGraphicsContext):
        (WebCore::CoordinatedGraphicsScene::adjustPositionForFixedLayers):
        (WebCore::CoordinatedGraphicsScene::createCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::syncCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::destroyCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerRepaintCountIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerChildrenIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerFiltersIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        (WebCore::CoordinatedGraphicsScene::getLayerByIDIfExists):
        (WebCore::CoordinatedGraphicsScene::createLayer):
        (WebCore::CoordinatedGraphicsScene::deleteLayer):
        (WebCore::CoordinatedGraphicsScene::setRootLayerID):
        (WebCore::CoordinatedGraphicsScene::prepareContentBackingStore):
        (WebCore::CoordinatedGraphicsScene::createBackingStoreIfNeeded):
        (WebCore::CoordinatedGraphicsScene::removeBackingStoreIfNeeded):
        (WebCore::CoordinatedGraphicsScene::resetBackingStoreSizeToLayerSize):
        (WebCore::CoordinatedGraphicsScene::createTilesIfNeeded):
        (WebCore::CoordinatedGraphicsScene::removeTilesIfNeeded):
        (WebCore::CoordinatedGraphicsScene::updateTilesIfNeeded):
        (WebCore::CoordinatedGraphicsScene::assignImageBackingToLayer):
        (WebCore::CoordinatedGraphicsScene::commitSceneState):
        (WebCore::CoordinatedGraphicsScene::ensureRootLayer):
        (WebCore::CoordinatedGraphicsScene::setLayerAnimationsIfNeeded):
        (WebCore::CoordinatedGraphicsScene::findScrollableContentsLayerAt):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        (CoordinatedGraphicsScene):
        (WebCore::CoordinatedGraphicsScene::layerByID):
        (WebCore::CoordinatedGraphicsScene::rootLayer):
            Use TextureMapperLayer instead of GraphicsLayer and GraphicsLayerTextureMapper.

2013-04-15  Antti Koivisto  <antti@apple.com>

        Dynamically triggered subframe loads are causing tile churn
        https://bugs.webkit.org/show_bug.cgi?id=114440
        
        Reviewed by Andreas Kling.
        
        In some cases we switch in and out of minimal tiles multiple times during page loading. This
        creates tile churn where we create speculative tiles and then throw them out. This can be
        caused by various reasons including dynamically created subframes.

        * page/FrameView.cpp:
        (WebCore::FrameView::setIsVisuallyNonEmpty):
        
            Stay in minimal tiles modes until there is some visual contents. This avoids switching out from minimal
            tiles while awaiting response for the initial requests.

        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::computeTileCoverage):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::didSwitchToFullTileCoverageDuringLoading):
        (WebCore::RenderLayerBacking::setDidSwitchToFullTileCoverageDuringLoading):
        
            Only switch into minimal coverage mode once per page load.

        (RenderLayerBacking):

2013-04-15  Rune Lillesveen  <rune@opera.com>

        color-index media feature not supported
        https://bugs.webkit.org/show_bug.cgi?id=114468

        Reviewed by Kenneth Rohde Christiansen.

        Support the color-index media feature. Currently assumes that no WebKit
        browser will have an output device that uses a color lookup table.

        Tests: fast/media/mq-color-index-01.html
               fast/media/mq-color-index-02.html

        * css/MediaFeatureNames.h:
        (MediaFeatureNames):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::color_indexMediaFeatureEval):
        (WebCore):
        (WebCore::min_color_indexMediaFeatureEval):
        (WebCore::max_color_indexMediaFeatureEval):
        * css/MediaQueryExp.cpp:
        (WebCore::featureWithPositiveInteger):
        (WebCore::featureWithoutValue):

2013-04-15  Balazs Kelemen  <kbalazs@webkit.org>

        [CoordGfx] Background color should not be part of GraphicsLayerState
        https://bugs.webkit.org/show_bug.cgi?id=113785

        Page background is independent from layer state, send it to the UI
        as soon as possible.

        Should not cause observable change in behavior so no new tests.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::commitSceneState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:

2013-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [BlackBerry] Filesystem callback notifyCreateSnapshotFileAndReadMetadata can be called on the wring thread
        https://bugs.webkit.org/show_bug.cgi?id=114610

        Reviewed by Xan Lopez.

        Override notifyCreateSnapshotFileAndReadMetadata to make sure the
        callback is called on the right thread.

        Fixes a crash in several fast/filesystem test in debug builds.

        * platform/blackberry/WorkerPlatformAsyncFileSystemCallbacks.cpp:
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyCreateSnapshotFileAndReadMetadata):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyCreateSnapshotFileAndReadMetadataOnWorkerThread):
        * platform/blackberry/WorkerPlatformAsyncFileSystemCallbacks.h:

2013-04-15  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry][CSS Filters] Non-image content disappears when filter applied
        https://bugs.webkit.org/show_bug.cgi?id=114498

        Reviewed by Carlos Garcia Campos.

        Applying a filter to a div with simple text content caused the div to
        disappear.

        In https://bugs.webkit.org/show_bug.cgi?id=114276, we added some GL
        state save/restore code for vertex attributes to make sure the state
        changes done by BlackBerry::Platform::Graphics don't interfere with
        GL code executing in WebKit. However, saving and restoring vertex
        attribute state won't do much good if those attributes were never
        enabled to begin with. Fixed by enabling vertex attributes
        appropriately when setting them, so that state can be saved and
        restored.

        All the CSS Filters layout tests apply the filters to simple rectangles
        or images, there's nothing sufficiently complex that we manage to
        trigger this GL state conflict in the BlackBerry port. This suggests
        adding a new platform-specific layout test would be appropriate, but
        since we don't use pixel tests yet, such a test would not help detect
        regressions. Ultimately we decided against adding a layout test for
        this bug at this time.

        * platform/graphics/blackberry/LayerFilterRenderer.cpp:
        (WebCore::LayerFilterRenderer::applyActions):

2013-04-14  Jaehun Lim  <ljaehun.lim@samsung.com>

        [css3-text] Parsing -webkit-hanging value for text-indent from css3-text
        https://bugs.webkit.org/show_bug.cgi?id=113680

        Reviewed by Andreas Kling.

        This patch is the parsing part to support hanging value for text-indent.
        "hanging" means "Inverts which lines are affected."
        It's prefixed and guarded by CSS3_TEXT flag.

        No new tests, this patch updates existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTextIndent): Parsed "-webkit-hanging" with "-webkit-each-line".
        * css/CSSValueKeywords.in: Added "-webkit-hanging" keyword.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyTextIndent::applyInheritValue):
        (WebCore::ApplyPropertyTextIndent::applyInitialValue):
        (WebCore::ApplyPropertyTextIndent::applyValue):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h: Added enum TextIndentType.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h: Added m_textIndentType.
        (StyleRareInheritedData):
            Added the usual getter / setter / initial methods for m_textIndentType.

2013-04-14  Sam Weinig  <sam@webkit.org>

        Move Mac specific snapshotting code into its own file
        https://bugs.webkit.org/show_bug.cgi?id=114597

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMRange renderedImageForcingBlackText:]):
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/mac/FrameSnapshottingMac.h: Added.
        * page/mac/FrameSnapshottingMac.mm: Added.
        (WebCore::imageFromRect):
        (WebCore::selectionImage):
        (WebCore::rangeImage):
        (WebCore::snapshotDragImage):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::dragNSImage):
        Move the four Mac specific snapshotting functions in Frame.h into FrameSnapshottingMac.h/mm and turn
        them into free standing functions.

2013-04-14  Andreas Kling  <akling@apple.com>

        Hawtfix Mac build.

        * WebCore.exp.in:

2013-04-14  Andreas Kling  <akling@apple.com>

        Only MutableStylePropertySets should be able to have CSSOM wrappers.
        <http://webkit.org/b/114595>

        Reviewed by Antti Koivisto.

        Tighten typing so that only MutableStylePropertySets can have CSSOM wrappers associated.
        This allows us to get rid of the out-of-line base class destructor.

        * WebCore.exp.in:
        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::~MutableStylePropertySet):
        (WebCore::MutableStylePropertySet::cssStyleDeclaration):
        (WebCore::MutableStylePropertySet::ensureInlineCSSStyleDeclaration):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (MutableStylePropertySet):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::inlineStyleCSSOMWrapper):

2013-04-14  Andreas Kling  <akling@apple.com>

        Remove unused function declaration StylePropertySet::setNeedsStyleRecalc().

        Rubber-stamped by Antti Koivisto.

        * css/StylePropertySet.h:
        (StylePropertySet):

2013-04-14  Andreas Kling  <akling@apple.com>

        Move StylePropertySet internal storage access helpers to subclass.
        <http://webkit.org/b/114592>

        Reviewed by Antti Koivisto.

        Removed mutablePropertyVector() since most call sites are inside MutableStylePropertySet
        and can access m_propertyVector directly. The few ones that aren't can just cast.

        For ImmutableStylePropertySet, moved value/metadata array accessors to the subclass
        and remove "immutable" from their names.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::immutableCopyIfNeeded):
        (WebCore::ImmutableStylePropertySet::ImmutableStylePropertySet):
        (WebCore::ImmutableStylePropertySet::~ImmutableStylePropertySet):
        (WebCore::MutableStylePropertySet::MutableStylePropertySet):
        (WebCore::MutableStylePropertySet::removeProperty):
        (WebCore::MutableStylePropertySet::removePrefixedOrUnprefixedProperty):
        (WebCore::MutableStylePropertySet::setProperty):
        (WebCore::MutableStylePropertySet::appendPrefixingVariantProperty):
        (WebCore::MutableStylePropertySet::parseDeclaration):
        (WebCore::MutableStylePropertySet::addParsedProperties):
        (WebCore::MutableStylePropertySet::clear):
        (WebCore::MutableStylePropertySet::removePropertiesInSet):
        (WebCore::MutableStylePropertySet::findCSSPropertyWithID):
        (WebCore::MutableStylePropertySet::removeEquivalentProperties):
        (WebCore::StylePropertySet::reportMemoryUsage):
        * css/StylePropertySet.h:
        (PropertyReference):
        (StylePropertySet):
        (ImmutableStylePropertySet):
        (WebCore::ImmutableStylePropertySet::valueArray):
        (WebCore::ImmutableStylePropertySet::metadataArray):
        (WebCore::StylePropertySet::PropertyReference::propertyMetadata):
        (WebCore::StylePropertySet::PropertyReference::propertyValue):
        (WebCore::StylePropertySet::propertyCount):

2013-04-14  Andreas Kling  <akling@apple.com>

        Specialize propertyCount() in StylePropertySet subclasses.
        <http://webkit.org/b/114590>

        Reviewed by Antti Koivisto.

        Avoid branching on m_isMutable in code that already knows which type of set it is.

        * css/StylePropertySet.h:
        (WebCore::ImmutableStylePropertySet::propertyCount):
        (ImmutableStylePropertySet):
        (WebCore::MutableStylePropertySet::propertyCount):
        (MutableStylePropertySet):

2013-04-14  Andreas Kling  <akling@apple.com>

        Move property setting/removing functions to MutableStylePropertySet.
        <http://webkit.org/b/114589>

        Reviewed by Antti Koivisto.

        Move all functions for setting/removing properties from StylePropertySet to MutableStylePropertySet.
        Had to change SVGElement::animatedSMILStyleProperties() & friends to hand out MutableStylePropertySet*
        which was always the internal type anyway.

        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::removeShorthandProperty):
        (WebCore::MutableStylePropertySet::removeProperty):
        (WebCore::MutableStylePropertySet::removePrefixedOrUnprefixedProperty):
        (WebCore::MutableStylePropertySet::setProperty):
        (WebCore::MutableStylePropertySet::appendPrefixingVariantProperty):
        (WebCore::MutableStylePropertySet::setPrefixingVariantProperty):
        (WebCore::MutableStylePropertySet::mergeAndOverrideOnConflict):
        (WebCore::MutableStylePropertySet::removeBlockProperties):
        (WebCore::MutableStylePropertySet::removePropertiesInSet):
        (WebCore::MutableStylePropertySet::findCSSPropertyWithID):
        (WebCore::MutableStylePropertySet::removeEquivalentProperties):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (MutableStylePropertySet):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::triStateOfStyle):
        (WebCore::removePropertiesInStyle):
        (WebCore::reconcileTextDecorationProperties):
        * svg/SVGAnimateElement.cpp:
        (WebCore::applyCSSPropertyToTarget):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::animatedSMILStyleProperties):
        (WebCore::SVGElement::ensureAnimatedSMILStyleProperties):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::animatedSMILStyleProperties):
        (WebCore::SVGElementRareData::ensureAnimatedSMILStyleProperties):
        (SVGElementRareData):

2013-04-14  Andreas Kling  <akling@apple.com>

        EditingStyle should have a MutableStylePropertySet internally.
        <http://webkit.org/b/114588>

        Reviewed by Anders Carlsson.

        Switch EditingStyle::m_mutableStyle to a RefPtr<MutableStylePropertySet>.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::copyBlockProperties):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::setStyle):
        (WebCore::EditingStyle::mergeStyleFromRules):
        (WebCore::StyleChange::StyleChange):
        (WebCore::setTextDecorationProperty):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::diffTextDecorations):
        (WebCore::getPropertiesNotIn):
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::style):
        (EditingStyle):
        (StyleChange):

2013-04-14  Andreas Kling  <akling@apple.com>

        Move addParsedProperty/addParsedProperties to MutableStylePropertySet.
        <http://webkit.org/b/114587>

        Reviewed by Antti Koivisto.

        All CSSParser methods that mutate an existing StylePropertySet now take a MutableStylePropertySet*
        instead of a StylePropertySet*.

        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::parseKeywordValue):
        (WebCore::parseTranslateTransformValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseDeclaration):
        * css/CSSParser.h:
        (CSSParser):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::setProperty):
        (WebCore::MutableStylePropertySet::addParsedProperties):
        (WebCore::MutableStylePropertySet::addParsedProperty):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (MutableStylePropertySet):
        * css/ViewportStyleResolver.h:
        (ViewportStyleResolver):

2013-04-14  Andreas Kling  <akling@apple.com>

        CSSParser should return ImmutableStylePropertySets.
        <http://webkit.org/b/114585>

        Reviewed by Anders Carlsson.

        The StylePropertySets created by CSSParser were already immutable.
        Let this be reflected in the pointer types returned.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseInlineStyleDeclaration):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::createStylePropertySet):
        * css/CSSParser.h:
        (CSSParser):

2013-04-14  Andreas Kling  <akling@apple.com>

        Move StylePropertySet::createImmutable() to ImmutableStylePropertySet.
        <http://webkit.org/b/114584>

        Reviewed by Anders Carlsson.

        StylePropertySet::createImmutable() -> ImmutableStylePropertySet::create()
        Also, immutableCopyIfNeeded() now returns a PassRefPtr<ImmutableStylePropertySet>.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::createStylePropertySet):
        * css/StylePropertySet.cpp:
        (WebCore::ImmutableStylePropertySet::create):
        (WebCore::StylePropertySet::immutableCopyIfNeeded):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (ImmutableStylePropertySet):

2013-04-14  Andreas Kling  <akling@apple.com>

        Move parseDeclaration() and clear() to MutableStylePropertySet.
        <http://webkit.org/b/114583>

        Reviewed by Anders Carlsson.

        ...and remove ASSERT(isMutable()) from the function bodies.

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::removedFrom):

            Use clear() directly instead of taking an empty string through the CSS parser.

        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::parseDeclaration):
        (WebCore::MutableStylePropertySet::clear):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (MutableStylePropertySet):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::setInlineStyleFromString):

2013-04-14  Andreas Kling  <akling@apple.com>

        Move CSSOM classes to using MutableStylePropertySet over StylePropertySet.
        <http://webkit.org/b/114581>

        Reviewed by Anders Carlsson.

        Moved ensureCSSStyleDeclaration() and ensureInlineCSSStyleDeclaration() from StylePropertySet
        to MutableStylePropertySet.

        StyleRule & co now return a MutableStylePropertySet* from mutableProperties() to aid with...

        CSSStyleDeclaration now only deals with MutableStylePropertySets. This was already the case
        in practice, we just didn't have any compile-time foot-shooting protection.
        In other words, if there's a CSSOM wrapper for a given StylePropertySet, it's guaranteed to
        be mutable, and the pointer types now reflect this.

        * WebCore.exp.in:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::StyleRuleCSSStyleDeclaration::StyleRuleCSSStyleDeclaration):
        (WebCore::StyleRuleCSSStyleDeclaration::reattach):
        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore::PropertySetCSSStyleDeclaration::PropertySetCSSStyleDeclaration):
        (PropertySetCSSStyleDeclaration):
        (WebCore::StyleRuleCSSStyleDeclaration::create):
        (StyleRuleCSSStyleDeclaration):
        (WebCore::InlineCSSStyleDeclaration::InlineCSSStyleDeclaration):
        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::ensureCSSStyleDeclaration):
        (WebCore::MutableStylePropertySet::ensureInlineCSSStyleDeclaration):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (MutableStylePropertySet):
        * css/StyleRule.cpp:
        (WebCore::StyleRule::mutableProperties):
        (WebCore::StyleRulePage::mutableProperties):
        (WebCore::StyleRuleFontFace::mutableProperties):
        (WebCore::StyleRuleViewport::mutableProperties):
        (WebCore::StyleRuleFilter::mutableProperties):
        * css/StyleRule.h:
        (StyleRule):
        (StyleRuleFontFace):
        (StyleRulePage):
        (StyleRuleViewport):
        (StyleRuleFilter):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::mutableProperties):
        * css/WebKitCSSKeyframeRule.h:
        (StyleKeyframe):
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/Attr.h:
        (Attr):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::removeStyleAddedByNode):
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode):
        (WebCore::EditingStyle::triStateOfStyle):
        (WebCore::styleFromMatchedRulesForElement):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::copyTypingStyle):
        * editing/FrameSelection.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):

2013-04-14  Andreas Kling  <akling@apple.com>

        Move create() methods from StylePropertySet to MutableStylePropertySet.
        <http://webkit.org/b/114574>

        Reviewed by Antti Koivisto.

        Move the two create() methods that create MutableStylePropertySets from StylePropertySet
        to MutableStylePropertySet, and make them actually return MutableStylePropertySets.
        Switch to using {Pass,}RefPtr<MutableStylePropertySet> where appropriate to keep things building.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::copyPropertiesInSet):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceValue):
        * css/DOMWindowCSS.cpp:
        (WebCore::DOMWindowCSS::supports):
        * css/ElementRuleCollector.cpp:
        (WebCore::leftToRightDeclaration):
        (WebCore::rightToLeftDeclaration):
        * css/FontLoader.cpp:
        (WebCore::FontLoader::resolveFontStyle):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::copyPropertiesInSet):
        (WebCore::MutableStylePropertySet::create):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (MutableStylePropertySet):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::resolveVariables):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/Document.cpp:
        (WebCore::Document::createCSSStyleDeclaration):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::ensureMutableInlineStyle):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::copyStyleOrCreateEmpty):
        * editing/EditingStyle.cpp:
        (WebCore::editingStyleFromComputedStyle):
        (WebCore::HTMLAttributeEquivalent::attributeValueAsCSSValue):
        (WebCore::EditingStyle::setProperty):
        (WebCore::EditingStyle::extractAndRemoveTextDirection):
        (WebCore::styleFromMatchedRulesForElement):
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization):
        (WebCore::EditingStyle::forceInline):
        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection):
        * editing/EditorCommand.cpp:
        (WebCore::executeApplyStyle):
        (WebCore::executeToggleStyleInList):
        (WebCore::executeApplyParagraphStyle):
        (WebCore::executeMakeTextWritingDirectionLeftToRight):
        (WebCore::executeMakeTextWritingDirectionNatural):
        (WebCore::executeMakeTextWritingDirectionRightToLeft):
        * html/HTMLTableElement.cpp:
        (WebCore::leakBorderStyle):
        (WebCore::HTMLTableElement::createSharedCellStyle):
        (WebCore::leakGroupBorderStyle):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::ensureAnimatedSMILStyleProperties):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

2013-04-13  Sam Weinig  <sam@webkit.org>

        Fix three crashes seen on the bots after "Make Frame's ScriptController an OwnPtr and remove the #include"

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        Check that the frame is not null (as it can be in cases like http/tests/xmlhttprequest/detaching-frame-2.html).
        We used to be getting lucky, in that shouldBypassMainWorldContentSecurityPolicy(), the function that is ultimately
        called, only operates on global state. Now that we need to actually dereference the Frame to get the ScriptController,
        we see this crash.

2013-04-13  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Selection direction is not preserved when applying styles
        https://bugs.webkit.org/show_bug.cgi?id=110979

        Reviewed by Ryosuke Niwa.

        The patch is based on the one submitted by Shezan Baig.

        If the starting selection was directional and its base was not first,
        switch newStart and newEnd when setting the ending direction. Otherwise,
        leave the order unchanged.

        Test: editing/style/preserve-selection-direction.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::updateStartEnd):

2013-04-13  Alexey Proskuryakov  <ap@apple.com>

        Added svn:ignore for inspector/CodeGeneratorInspectorStrings.pyc

        * inspector: Added property svn:ignore.

2013-04-13  Sam Weinig  <sam@webkit.org>

        Make Frame's ScriptController an OwnPtr and remove the #include
        https://bugs.webkit.org/show_bug.cgi?id=114105

        Reviewed by Dean Jackson.

        * Modules/websockets/WebSocket.cpp:
        * bindings/generic/BindingSecurity.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/PageScriptDebugServer.cpp:
        * bindings/js/ScriptEventListener.cpp:
        * bindings/js/ScriptState.cpp:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMAbstractView.mm:
        * bindings/objc/DOMInternal.mm:
        * dom/DocumentStyleSheetCollection.cpp:
        * dom/EventTarget.cpp:
        * dom/ScriptElement.cpp:
        * history/CachedFrame.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInImageElement.cpp:
        * html/parser/HTMLParserOptions.cpp:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorController.cpp:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorPageAgent.cpp:
        * inspector/PageRuntimeAgent.cpp:
        * loader/DocumentWriter.cpp:
        * loader/NavigationScheduler.cpp:
        * loader/SubframeLoader.cpp:
        * loader/cache/CachedResourceLoader.cpp:
        * page/DOMWindow.cpp:
        * page/EventSource.cpp:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/Navigator.cpp:
        * page/Page.cpp:
        * page/PageGroup.cpp:
        * xml/XMLHttpRequest.cpp:
        * xml/XMLTreeViewer.cpp:

2013-04-13  Anders Carlsson  <andersca@apple.com>

        Add form delegate method that's invoked right before sending a submit event to a form element
        https://bugs.webkit.org/show_bug.cgi?id=114575

        Reviewed by Dan Bernstein.

        * WebCore.exp.in:
        Export a symbol.

        * WebCore.xcodeproj/project.pbxproj:
        Make DOMHTMLFormElementInternal.h a private header.

2013-03-13  Robert Hogan  <robert@webkit.org>

        Whitespace between nowrap elements ignored after collapsed trailing space in a text run
        https://bugs.webkit.org/show_bug.cgi?id=17705

        Reviewed by Ryosuke Niwa.

        Bug 93448 and r138654 fixed the treatment of line-breaks between nowrap elements. This augments
        that fix by recognizing that we have a potential break not only in situations where the next character is a 
        space and the current character is not, but also where the next character is a space and the current character 
        *is* a space *and* we are ignoring spaces. This is so because any spaces we have ignored up to this point 
        after the actual word end will get collapsed away even if we don't end up taking the line break. 

        In a nutshell, if we allow whitespace collapsing 'word  ' and 'word' are equivalent when before a whitespace
        character, so treat the first as well as the second as a potential linebreak.

        Test: fast/text/whitespace/inline-whitespace-wrapping-5.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):

2013-04-13  Andreas Kling  <akling@apple.com>

        Rename/tweak some StylePropertySet/CSSStyleDeclaration copying functions.
        <http://webkit.org/b/114569>

        Reviewed by Anders Carlsson.

        - StylePropertySet::copy() -> mutableCopy()

            This function now returns a MutableStylePropertySet, and this is also reflected in the name.

        - CSSStyleDeclaration::copy() -> copyProperties()

            Renamed to reflect that it's the properties being copied, not the CSSStyleDeclaration.
            They also now return MutableStylePropertySets.

        - StylePropertySet::copyPropertiesInSet()
        - CSSStyleDeclaration::copyPropertiesInSet()

            These functions now return MutableStylePropertySets.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::copyProperties):
        (WebCore::CSSComputedStyleDeclaration::copyPropertiesInSet):
        * css/CSSComputedStyleDeclaration.h:
        (CSSComputedStyleDeclaration):
        * css/CSSStyleDeclaration.h:
        (CSSStyleDeclaration):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::copyProperties):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::mutableCopy):
        (WebCore::StylePropertySet::copyPropertiesInSet):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * css/StyleRule.cpp:
        (WebCore::StyleRule::StyleRule):
        (WebCore::StyleRule::mutableProperties):
        (WebCore::StyleRulePage::StyleRulePage):
        (WebCore::StyleRulePage::mutableProperties):
        (WebCore::StyleRuleFontFace::StyleRuleFontFace):
        (WebCore::StyleRuleFontFace::mutableProperties):
        (WebCore::StyleRuleViewport::StyleRuleViewport):
        (WebCore::StyleRuleViewport::mutableProperties):
        (WebCore::StyleRuleFilter::StyleRuleFilter):
        (WebCore::StyleRuleFilter::mutableProperties):
        * css/ViewportStyleResolver.cpp:
        (WebCore::ViewportStyleResolver::addViewportRule):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::mutableProperties):
        * dom/Element.cpp:
        (WebCore::UniqueElementData::UniqueElementData):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::ensureMutableInlineStyle):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::copyStyleOrCreateEmpty):
        * editing/EditingStyle.cpp:
        (WebCore::copyEditingProperties):
        (WebCore::editingStyleFromComputedStyle):
        (WebCore::EditingStyle::EditingStyle):
        (WebCore::EditingStyle::init):
        (WebCore::EditingStyle::copy):
        (WebCore::EditingStyle::mergeStyle):
        (WebCore::getPropertiesNotIn):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::copyTypingStyle):

2013-04-13  Dirk Schulze  <krit@webkit.org>

        Rename StyleBuilder to DeprecatedStyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=114532

        Reviewed by Benjamin Poulain.

        The StyleBuilder code is hard to read and maintain. People should
        not add new properties to this class. To make this clear, this
        patch renames the class to DeprecatedStyleBuilder.

        Pure refactoring, no change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/DeprecatedStyleBuilder.cpp: Renamed from Source/WebCore/css/StyleBuilder.cpp.
        * css/DeprecatedStyleBuilder.h: Renamed from Source/WebCore/css/StyleBuilder.h.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleResolver.h:
        (StyleResolver):
        * rendering/style/RenderStyle.h:

2013-04-13  Andreas Kling  <akling@apple.com>

        Remove unused method CSSStyleDeclaration::makeMutable().
        <http://webkit.org/b/114567>

        Reviewed by Anders Carlsson.

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSComputedStyleDeclaration.h:
        (CSSComputedStyleDeclaration):
        * css/CSSStyleDeclaration.h:
        (CSSStyleDeclaration):
        * css/PropertySetCSSStyleDeclaration.cpp:
        * css/PropertySetCSSStyleDeclaration.h:

2013-04-13  Antoine Quint  <graouts@apple.com>

        Width of last of consecutive tabs may be incorrect with "white-space: pre-wrap"
        https://bugs.webkit.org/show_bug.cgi?id=114562

        Reviewed by Dan Bernstein.

        When we measure the last word of a RenderText, make sure we use the correct x
        position taking into account the current accumulated word measurements up to
        this character. This is of particular importance in the case of tabs where the
        measured width would differ based on the x position.

        Test: fast/text/tab-last-word-in-renderer-pre-wrap.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):

2013-04-13  Mark Salisbury  <mark.salisbury@hp.com>

        [Windows, WinCairo] ImageBufferCairo.cpp fails to compile after 148247, 148264.
        https://bugs.webkit.org/show_bug.cgi?id=114540
        
        Reviewed by Brent Fulgham.

        * platform/graphics/cairo/ImageBufferCairo.cpp:

2013-04-13  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r148305.

        * GNUmakefile.list.am: Adding the TrackListBase build targets to the build.

2013-04-09  Roger Fong  <roger_fong@apple.com>

        Update AVFoundationCF code following http://trac.webkit.org/changeset/148291.
        https://bugs.webkit.org/show_bug.cgi?id=114548.

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMinTimeSeekable):
        (WebCore):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMaxTimeSeekable):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        (MediaPlayerPrivateAVFoundationCF):

2013-04-12  Simon Fraser  <simon.fraser@apple.com>

        Demystify some code in RenderLayer::updateScrollableAreaSet()
        https://bugs.webkit.org/show_bug.cgi?id=114543

        Reviewed by Tim Horton.

        Clean up some code that called functions with important side effects
        inside a ternary operator, and clean up the #ifdefs.

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

2013-04-12  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13277362> REGRESSION (r141981): Crash when closing a Google Docs document
        https://bugs.webkit.org/show_bug.cgi?id=114541

        Reviewed by Brady Eidson.

        Test: http/tests/ssl/ping-with-unsafe-redirect.html

        * loader/FrameNetworkingContext.h:
        (WebCore::FrameNetworkingContext::shouldClearReferrerOnHTTPSToHTTPRedirect):
        Added a null check. All NetworkingContext functions except for this one had it already.

2013-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] REGRESSION: Auto substitution strips new lines
        https://bugs.webkit.org/show_bug.cgi?id=114537

        Reviewed by Enrica Casucci.

        The bug was caused by SpellingCorrectionCommand's use of InsertTextCommand. This command can't insert
        new lines and there's even an assertion for it. Use TypingCommand::insertText instead.

        Since TypingCommand::insertText calls appliedEditing on its own, we need to avoid calling that again in
        CompositeEditCommand::apply after SpellingCorrectionCommand::doApply. Replaced the check in apply to use
        callsAppliedEditingInDoApply instead of isTypingCommand, and added callsAppliedEditingInDoApply to both
        TypingCommand and SpellingCorrectionCommand to return true (it returns false by default).

        Test: platform/mac/editing/spelling/autocorrection-with-multi-line-text.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::apply): Use TypingCommand::insertText instead of InsertTextCommand
        (WebCore::CompositeEditCommand::callsAppliedEditingInDoApply): Added. Returns false.
        * editing/CompositeEditCommand.h:
        (CompositeEditCommand):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::doApply):
        (WebCore::SpellingCorrectionCommand::callsAppliedEditingInDoApply): Added. Returns true.
        * editing/SpellingCorrectionCommand.h:
        (SpellingCorrectionCommand):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::callsAppliedEditingInDoApply): Added. Returns true.
        * editing/TypingCommand.h:
        (TypingCommand):

2013-04-12  Brendan Long  <b.long@cablelabs.com>

        Refactor TextTrack and TextTrackList to make it easier to add audio and video tracks
        https://bugs.webkit.org/show_bug.cgi?id=114330

        Reviewed by Jer Noble.

        No new tests because this doesn't add new functionality.

        * CMakeLists.txt: Only compile text track files if ENABLE(VIDEO_TRACK), and add TrackListBase
        * Target.pri: Add TrackListBase
        * WebCore.vcproj/WebCore.vcproj: Correct InbandTextTrackPrivate.h's location and add TrackListBase
        * WebCore.xcodeproj/project.pbxproj: Add TrackListBase
        * html/HTMLMediaElement.cpp: Renamed "track" functions to "textTrack"
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack): Renamed.
        (WebCore::HTMLMediaElement::mediaPlayerDidRemoveTextTrack): Renamed.
        (WebCore::HTMLMediaElement::addTextTrack): Renamed.
        (WebCore::HTMLMediaElement::removeTextTrack): Renamed.
        (WebCore::HTMLMediaElement::removeAllInbandTracks): Use renamed functions.
        (WebCore::HTMLMediaElement::didAddTextTrack): Renamed.
        (WebCore::HTMLMediaElement::didRemoveTextTrack): Renamed.
        * html/HTMLMediaElement.h:
        Renamed "track" functions to "textTrack" and only forward-declare TextTrackList if ENABLE(VIDEO_TRACK)
        * html/HTMLTrackElement.cpp: Renamed "track" functions to "textTrack"
        (WebCore::HTMLTrackElement::insertedInto):
        (WebCore::HTMLTrackElement::removedFrom):
        * html/track/TextTrack.cpp:
        Move media element, label, language and kind into TrackBase and move EventTarget functions into TextTrack.
        (WebCore::TextTrack::TextTrack): Added.
        (WebCore::TextTrack::interfaceName): Added.
        (WebCore::TextTrack::scriptExecutionContext): Added.
        (WebCore::TextTrack::eventTargetData): Added.
        (WebCore::TextTrack::ensureEventTargetData): Added.
        (WebCore::TextTrack::isValidKind): Added to support TrackBase::setKind()
        (WebCore::TextTrack::setKind): Override to support textTrackKindChanged()
        (WebCore::TextTrack::isRendered): Use kind(), label() and language() instead of m_kind, etc.
        (WebCore::TextTrack::platformTextTrack): Ditto.
        (WebCore::TextTrack::isMainProgramContent): Ditto.
        * html/track/TextTrack.h:
        Same as TextTrack.cpp, plus added defaultKindKeyword() so TrackBase::setKind() will work and added
        toTextTrack().
        * html/track/TextTrackList.cpp:
        Move functionality into TrackListBase, add toTextTrack() casts, use
        TrackBase where necesssary and use owner() instead of m_owner.

        Moved EventTarget functions into TrackListBase.
        (TextTrackList::TextTrackList):
        (TextTrackList::getTrackIndexRelativeToRenderedTracks):
        (TextTrackList::item):
        (TextTrackList::invalidateTrackIndexesAfterTrack):
        (TextTrackList::append):
        (TextTrackList::remove):
        (TextTrackList::contains):
        * html/track/TextTrackList.h:
        Move EventTarget, RefCounted and m_inbandTracks into TrackListBase.
        Override length(), contains() and remove().
        * html/track/TrackBase.cpp: Remove EventTarget functions.
        (WebCore::TrackBase::TrackBase):
        Remove EventTarget, add label and language
        (WebCore::TrackBase::setKind): Added
        * html/track/TrackBase.h:
        Don't extend EventTarget (AudioTrack and VideoTrack aren't). Handle
        kind, label, language and media element.
        (WebCore::TrackBase::setMediaElement): Added.
        (WebCore::TrackBase::mediaElement): Added.
        (WebCore::TrackBase::kind): Added.
        (WebCore::TrackBase::label): Added.
        (WebCore::TrackBase::setLabel): Added.
        (WebCore::TrackBase::language): Added.
        (WebCore::TrackBase::setLanguage): Added.
        * html/track/TrackListBase.cpp:
        Added. Handles functionality common to TextTrackList, AudioTrackList and
        VideoTrackList.
        (TrackListBase::TrackListBase): Added.
        (TrackListBase::~TrackListBase): Added.
        (TrackListBase::length): Added.
        (TrackListBase::remove): Added.
        (TrackListBase::contains): Added.
        (TrackListBase::scheduleAddTrackEvent): Added.
        (TrackListBase::scheduleRemoveTrackEvent): Added.
        (TrackListBase::scheduleChangeEvent): Added.
        (TrackListBase::asyncEventTimerFired): Added.
        * html/track/TrackListBase.h:
        Copied from Source/WebCore/html/track/TextTrackList.h. Handles
        functionality common to TextTrackList, AudioTrackList and VideoTrackList.
        (WebCore::TrackListBase::scriptExecutionContext): Added.
        (WebCore::TrackListBase::clearOwner): Added.
        (WebCore::TrackListBase::owner): Added.
        (WebCore::TrackListBase::isFiringEventListeners): Added.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::addTextTrack): Renamed (was addTrack)
        (WebCore::MediaPlayer::removeTextTrack): Renamed (was removeTrack)
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerDidAddTextTrack): Renamed (was mediaPlayerDidAddTrack)
        (WebCore::MediaPlayerClient::mediaPlayerDidRemoveTextTrack): Renamed (was mediaPlayerDidRemoveTrack)

2013-04-12  Oliver Hunt  <oliver@apple.com>

        make the codegenerator actually emit polymorphism check in the "no vtable" path
        https://bugs.webkit.org/show_bug.cgi?id=114533

        Reviewed by David Kilzer.

        Make the "no vtable" check correct so that we actually plant a polymorphism
        check.  Update a few interfaces to have the correct validation attributes.        

        * Modules/webdatabase/SQLTransaction.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/TestInterface.idl:
        * html/track/TextTrackCue.idl:
        * svg/SVGAnimatedAngle.idl:
        * svg/SVGAnimatedBoolean.idl:
        * svg/SVGAnimatedEnumeration.idl:
        * svg/SVGAnimatedInteger.idl:
        * svg/SVGAnimatedLength.idl:
        * svg/SVGAnimatedLengthList.idl:
        * svg/SVGAnimatedNumber.idl:
        * svg/SVGAnimatedNumberList.idl:
        * svg/SVGAnimatedPreserveAspectRatio.idl:
        * svg/SVGAnimatedRect.idl:
        * svg/SVGAnimatedString.idl:
        * svg/SVGAnimatedTransformList.idl:

2013-04-12  Oliver Hunt  <oliver@apple.com>

        Make CodeGeneratorJS plant comments to explain failures in the binding validation
        https://bugs.webkit.org/show_bug.cgi?id=114528

        Reviewed by Sam Weinig.

        No change in behaviour, just make the generated bindings include comments
        to aid diagnosing issues that may be non-obvious.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::toJS):

2013-04-12  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r138858): GIFs don't start playing when they come out of background tabs
        https://bugs.webkit.org/show_bug.cgi?id=108864
        <rdar://problem/13140489>

        Reviewed by Antti Koivisto.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::resumeAnimatingImagesForLoader): Added.
        Iterate through all of the loader's cached resources. If they are bitmap images
        which claim to be animatable, notify the image's observers that the animation advanced
        by one frame. In reality, the image is still on the same frame, but will now be repainted,
        restarting the animation loop.
        * loader/cache/CachedImage.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::setIsInWindow):
        When the FrameView is brought into a window, repaint all animated images.
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::canAnimate): Added. 
        Return whether or not the image should animate (claims to animate, has not already
        finished its animation, and has an ImageObserver) *and* has more than one frame.
        * platform/graphics/BitmapImage.h:
        (BitmapImage): Add canAnimate.

2013-04-12  Martin Robinson  <mrobinson@igalia.com>

        r148197 broke the GTK+ build
        https://bugs.webkit.org/show_bug.cgi?id=114525

        Reviewed by Anders Carlsson.

        Re-add the ENABLE(SCROLLING_THREAD) guards to scrolling thread files
        and extend them with USE(COORDINATED_GRAPHICS). This code is unused
        by other configurations currently.

        * page/scrolling/ScrollingStateFixedNode.cpp: Re-add guards.
        * page/scrolling/ScrollingStateFixedNode.h: Ditto.
        * page/scrolling/ScrollingStateNode.cpp: Ditto.
        * page/scrolling/ScrollingStateNode.h: Ditto.
        * page/scrolling/ScrollingStateScrollingNode.cpp: Ditto.
        * page/scrolling/ScrollingStateScrollingNode.h: Ditto.
        * page/scrolling/ScrollingStateStickyNode.cpp: Ditto.
        * page/scrolling/ScrollingStateStickyNode.h: Ditto.
        * page/scrolling/ScrollingStateTree.cpp: Ditto.
        * page/scrolling/ScrollingStateTree.h: Ditto.
        * page/scrolling/mac/ScrollingStateNodeMac.mm: Ditto.
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm: Ditto.

2013-04-12  Jer Noble  <jer.noble@apple.com>

        (AVFoundation) WebKit fails to detect live stream.
        https://bugs.webkit.org/show_bug.cgi?id=114474

        Reviewed by Eric Carlson.

        Remove a workaround (added by r88944) for an error in an Apple.com javascript
        media controller. The error has been fixed, and the workaround is causing problems
        with other media streams.

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

2013-04-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Split GtkAuthenticationDialog in two widgets
        https://bugs.webkit.org/show_bug.cgi?id=103644

        Reviewed by Xan Lopez.

        The current GtkAuthenticationDialog implements both the common
        logic and widgets to implement a real GtkDialog and a widget to be
        embedded in any container. WebKit1 uses a GtkDialog while WebKit2
        embeds the dialog in the WebView. This patch splits the code to
        leave in Platform only the code that is actually common, leaving
        the widget implementation to the WebKit layer, using a dialog in
        WebKit1 and embedding auth widget in the WebView in WebKit2.

        * GNUmakefile.list.am: Add new files to compilation.
        * platform/gtk/GtkAuthenticationDialog.cpp: Removed.
        * platform/gtk/GtkAuthenticationDialog.h: Removed.
        * platform/gtk/WebKitAuthenticationWidget.cpp: Added.
        (_WebKitAuthenticationWidgetPrivate):
        (packTwoColumnLayoutInBox):
        (createLabel):
        (createEntry):
        (webkitAuthenticationWidgetInitialize):
        (webkitAuthenticationWidgetFinalize):
        (webkit_authentication_widget_init):
        (webkit_authentication_widget_class_init):
        (webkitAuthenticationWidgetNew):
        (webkitAuthenticationWidgetCreateCredential):
        (webkitAuthenticationWidgetGetChallenge):
        * platform/gtk/WebKitAuthenticationWidget.h: Added.
        (_WebKitAuthenticationWidget):
        (_WebKitAuthenticationWidgetClass):

2013-04-11  Jer Noble  <jer.noble@apple.com>

        Add support for MediaPlayer::minTimeSeekable()
        https://bugs.webkit.org/show_bug.cgi?id=114484

        Reviewed by Eric Carlson.

        Plumb a new minTimeSeekable() method through MediaPlayer and
        MediaPlayerPrivate and use this new method in the existing
        HTMLMediaElement::minTimeSeekable() method.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::minTimeSeekable): Pass to MediaPlayer.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::minTimeSeekable): Return 0.
        (WebCore::MediaPlayer::minTimeSeekable): Pass to MediaPlayerPrivate.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekable): Define in terms of 
            minTimeSeekable()
        (WebCore::MediaPlayerPrivateInterface::minTimeSeekable): Default to 0.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
            Initialize new m_cachedMinTimeSeekable ivar.
        (WebCore::MediaPlayerPrivateAVFoundation::maxTimeSeekableDouble):
            Renamed from maxTimeSeekable().
        (WebCore::MediaPlayerPrivateAVFoundation::minTimeSeekable): Added.
            Cache value of platformMinTimeSeekable().
        (WebCore::MediaPlayerPrivateAVFoundation::seekableTimeRangesChanged):
            Reset m_cachedMinTimeSeekable.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): float -> double.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMinTimeSeekable):
            Added. Retrieve the lowest value from -[m_playerItem seekableTimeRanges].
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable):
            float -> double.

2013-04-12  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r147942, r148026, and r148092.
        http://trac.webkit.org/changeset/147942
        http://trac.webkit.org/changeset/148026
        http://trac.webkit.org/changeset/148092
        https://bugs.webkit.org/show_bug.cgi?id=114521

        "r147942 is buggy. Rollback all the patches depending on it."
        (Requested by abucur on #webkit).

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChildren):
        (WebCore):
        (WebCore::ContainerNode::removeChildren):
        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore):
        * dom/Document.h:
        (Document):
        * dom/Node.cpp:
        * dom/Node.h:
        (Node):
        * dom/NodeTraversal.cpp:
        * dom/NodeTraversal.h:
        (ElementTraversal):
        (NodeTraversal):
        * dom/Range.cpp:
        (WebCore::boundaryNodeChildrenWillBeRemoved):
        (WebCore):
        (WebCore::Range::nodeChildrenWillBeRemoved):
        * dom/Range.h:
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::attach):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::updateItemValues):
        (WebCore::HTMLOListElement::recalculateItemCount):
        * rendering/RenderCounter.cpp:
        (WebCore::previousInPreOrder):
        (WebCore::previousSiblingOrParent):
        (WebCore::parentElement):
        (WebCore::nextInPreOrder):
        * rendering/RenderListItem.cpp:
        (WebCore::enclosingList):
        (WebCore::RenderListItem::nextListItem):
        (WebCore::previousListItem):
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::explicitValueChanged):
        (WebCore::previousOrNextItem):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderListItem.h:
        (RenderListItem):

2013-04-12  Jer Noble  <jer.noble@apple.com>

        TimeRanges::nearest() returns incorrect results.
        https://bugs.webkit.org/show_bug.cgi?id=114483

        Reviewed by Eric Carlson.

        Test: media/timeranges-nearest.html

        TimeRanges::nearest() has had an incorrect algorithm since its
        addition, which has gone unnoticed because no media engine supports
        seekable ranges with greater than one entry, and no media engine
        seekable ranges with startTime values > 0.

        Fix the algorithm used to walk a TimeRanges object; return the closest
        time, not the smallest delta between range and target time.
        * html/TimeRanges.cpp:
        (TimeRanges::nearest):

        Add some internal functions to allow us to write LayoutTests for
        TimeRanges objects:
        * WebCore.exp.in:
        * testing/Internals.cpp:
        (WebCore::Internals::createTimeRanges):
        (WebCore::Internals::closestTimeToTimeRanges):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-04-12  Eric Carlson  <eric.carlson@apple.com>

        Support "forced" subtitles
        https://bugs.webkit.org/show_bug.cgi?id=114460

        Reviewed by Jer Noble.

        Test: media/track/track-forced-subtitles.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Enable a forced track if nothing else is enabled.
        (WebCore::HTMLMediaElement::configureTextTracks): Include forced tracks with captions+subtitles.

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack): Deal with kind=forced.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::forcedKeyword): New keyword.
        (WebCore::TextTrack::isValidKindKeyword): Include forced.
        (WebCore::TextTrack::platformTextTrack): Ditto.
        * html/track/TextTrack.h:

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::primaryAudioTrackLanguageOverride): New override to support testing.
        * page/CaptionUserPreferences.h:

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::textTrackSelectionScore): Support forced tracks.
        * platform/graphics/InbandTextTrackPrivate.h:

        * platform/graphics/PlatformTextTrack.h: Add Forced, minor cleanup.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue): Drive-by enhancement: log cue position.

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::kind): Support forced.
        (WebCore::InbandTextTrackPrivateAVFObjC::label): Drive-by cleanup.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processTextTracks): Don't filter out forced tracks.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack): Log the language returned.

        * testing/Internals.cpp:
        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride): New.
        (WebCore::Internals::setCaptionDisplayMode): New.
        * testing/Internals.h:
        * testing/Internals.idl:

2013-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] Some ligatures are applied across different fronts
        https://bugs.webkit.org/show_bug.cgi?id=113604

        Reviewed by Darin Adler.

        The bug was caused by applyFontTransforms applying ligatures without updating the font data in the glyph buffer.

        Suppose we have characters AB and A uses font X and B uses font Y. Further suppose that we have ligatures for AB
        in Y. The problem was that WithIterator::advanceInternal calls applyFontTransforms on AB to apply this ligature
        even though A and B use different fonts. Since X doesn't contain the same ligature for A to be paired with that
        of B in X, we get a blank A.

        Fixed the bug by resetting lastGlyphCount after calling applyFontTransforms. This ensures that we don't call
        applyFontTransforms across different fonts.

        No new tests since this requires a variant of Osaka font that doesn't come with OS X.

        The bug 114482 tracks the effort to add a test for this bug fix. I've already asked someone to create a custom
        font for us so that we can test this bug fix but that's going to a while.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):

2013-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] Enable spellchecking tests added in r141471
        https://bugs.webkit.org/show_bug.cgi?id=108525

        Reviewed by Darin Adler.

        Made automatic quote substitution, dash substitution, text replacement, and spelling correction
        togglable via internals object. These functions are no-op when text replacement is not used.

        This allows us to disable automatic spelling correction in spellcheck tests.

        Enabled several tests added in r141471.

        * WebCore.exp.in:
        * testing/Internals.cpp:
        (WebCore::Internals::setContinuousSpellCheckingEnabled): Don't null check editor() since it's not
        null whenever frame() is not null.
        (WebCore::Internals::setAutomaticQuoteSubstitutionEnabled): Added.
        (WebCore::Internals::setAutomaticLinkDetectionEnabled): Added.
        (WebCore::Internals::setAutomaticDashSubstitutionEnabled): Added.
        (WebCore::Internals::setAutomaticTextReplacementEnabled): Added.
        (WebCore::Internals::setAutomaticSpellingCorrectionEnabled): Added.
        * testing/Internals.h:
        * testing/Internals.idl:

2013-04-12  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Upstream the filesystem code
        https://bugs.webkit.org/show_bug.cgi?id=114437

        Reviewed by Rob Buis.

        These are the changes for AsyncFileSystemBlackBerry.

        This patch contains contributions from many members of the
        BlackBerry WebKit team.

        * platform/blackberry/AsyncFileSystemBlackBerry.cpp:
        (WebCore::AsyncFileSystem::isAvailable):
        (WebCore):
        (WebCore::AsyncFileSystem::create):
        (WebCore::AsyncFileSystem::openFileSystem):
        (WebCore::AsyncFileSystemBlackBerry::openFileSystem):
        (WebCore::AsyncFileSystem::deleteFileSystem):
        (WebCore::AsyncFileSystemBlackBerry::AsyncFileSystemBlackBerry):
        (WebCore::AsyncFileSystemBlackBerry::~AsyncFileSystemBlackBerry):
        (WebCore::AsyncFileSystemBlackBerry::move):
        (WebCore::AsyncFileSystemBlackBerry::copy):
        (WebCore::AsyncFileSystemBlackBerry::remove):
        (WebCore::AsyncFileSystemBlackBerry::removeRecursively):
        (WebCore::AsyncFileSystemBlackBerry::readMetadata):
        (WebCore::AsyncFileSystemBlackBerry::createFile):
        (WebCore::AsyncFileSystemBlackBerry::createDirectory):
        (WebCore::AsyncFileSystemBlackBerry::fileExists):
        (WebCore::AsyncFileSystemBlackBerry::directoryExists):
        (WebCore::AsyncFileSystemBlackBerry::readDirectory):
        (WebCore::AsyncFileSystemBlackBerry::createWriter):
        (WebCore::AsyncFileSystemBlackBerry::createSnapshotFileAndReadMetadata):
        (WebCore::AsyncFileSystemBlackBerry::fileSystemURLToPath):
        * platform/blackberry/AsyncFileSystemBlackBerry.h:
        (WTF):
        (WTF::BlackBerry::Platform::WebFileSystem):
        (WebCore::AsyncFileSystemBlackBerry::create):
        (AsyncFileSystemBlackBerry):

2013-04-12  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Apply our MSVC 2012 optimizer bug workaround to all minor releases
        https://bugs.webkit.org/show_bug.cgi?id=114436

        Reviewed by Alexey Proskuryakov.

        The bug has only been partially fixed in Update 2 but our Update 1 workaround
        still avoids the crash.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::TextEncodingNameHash::equal):

2013-04-12  Mark Rowe  <mrowe@apple.com>

        And again, with the correct case this time.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:

2013-04-12  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        Add missing #include and forward declaration.

2013-04-12  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed functionality fix for ports enabling the MicroData feature.

        * html/DOMSettableTokenList.idl: Add the SkipVTableValidation IDL attribute to the DOMSettableTokenList interface.
        This removes crashes in the MicroData layout tests that are occurring on EFL and GTK builders, the two ports being
        the only ports that enable this feature.

2013-04-11  Alexey Proskuryakov  <ap@apple.com>

        Move CachedRawResourceClient into a separate file
        https://bugs.webkit.org/show_bug.cgi?id=114491

        Reviewed by Mark Rowe.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/cache/CachedRawResource.cpp:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h: Added.
        * loader/icon/IconLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:

2013-04-12  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148262.
        http://trac.webkit.org/changeset/148262
        https://bugs.webkit.org/show_bug.cgi?id=114493

        Cairo dep should now build, rolling r148247 back in (Requested
        by zdobersek on #webkit).

        * platform/graphics/GraphicsContext.cpp:
        (WebCore):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore):
        * platform/graphics/cairo/GLContext.h:
        (GLContext):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::isAcceleratedContext):
        (WebCore):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore):
        (WebCore::createCairoGLSurface):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::mapSurfaceToImage):
        (WebCore::unmapSurfaceFromImage):
        (WebCore::getImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBufferData::paintToTextureMapper):
        (WebCore::ImageBuffer::platformLayer):
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        (ImageBufferData):
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::GLContextEGL):
        (WebCore::GLContextEGL::~GLContextEGL):
        (WebCore::GLContextEGL::cairoDevice):
        (WebCore):
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::GLContextGLX):
        (WebCore::GLContextGLX::~GLContextGLX):
        (WebCore::GLContextGLX::cairoDevice):
        (WebCore):
        * platform/graphics/glx/GLContextGLX.h:
        (GLContextGLX):

2013-04-11  Alexey Proskuryakov  <ap@apple.com>

        Reduce includes of CachedSVGDocument.h
        https://bugs.webkit.org/show_bug.cgi?id=114489

        Reviewed by Jon Honeycutt.

        * loader/cache/CachedSVGDocumentReference.cpp: Added.
        * loader/cache/CachedSVGDocumentReference.h:
        Moved function implementations to newly added .cpp file, and removed an include
        of CachedSVGDocument.h.

        * css/WebKitCSSSVGDocumentValue.h: Just removed an unnecessary include.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-04-11  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148247.
        http://trac.webkit.org/changeset/148247
        https://bugs.webkit.org/show_bug.cgi?id=114490

        Cairo dep fails to build on builders due to missing EGL
        headers (Requested by zdobersek on #webkit).

        * platform/graphics/GraphicsContext.cpp:
        (WebCore):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore):
        * platform/graphics/cairo/GLContext.h:
        (GLContext):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::getImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore):
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        (ImageBufferData):
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::GLContextEGL):
        (WebCore::GLContextEGL::~GLContextEGL):
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::GLContextGLX):
        (WebCore::GLContextGLX::~GLContextGLX):
        * platform/graphics/glx/GLContextGLX.h:
        (GLContextGLX):

2013-04-11  Nico Weber  <thakis@chromium.org>

        Remove debugging code that is no longer used with current mac sdks.
        https://bugs.webkit.org/show_bug.cgi?id=114486

        Reviewed by Dan Bernstein.

        This code compared __MAC_OS_X_VERSION_MAX_ALLOWED and friends to
        107 and 106 instead of the correct 1070 and 1060. Instead of fixing
        this, rip the code out completely: Since WebKit now only targets
        current systems, the ifdef is always false anyways.

        No tests, as this only removes debugging code.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):

2013-04-11  Oliver Hunt  <oliver@apple.com>

        Fix windows build and land new binding test results

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore):
        (WebCore::toJS):

2013-04-11  Shezan Baig  <sbaig1@bloomberg.net>

        Selection gaps don't repaint correctly with transforms
        https://bugs.webkit.org/show_bug.cgi?id=111000

        Reviewed by Simon Fraser.

        When computing offsetFromRepaintContainer, we need to add UseTransforms
        to the MapCoordinateFlags argument. Note that ApplyContainerFlip is
        the default value for the flag, so this change effectively only adds
        the UseTransforms flag.

        Tests: fast/repaint/selection-gap-absolute-child.html
               fast/repaint/selection-gap-fixed-child.html
               fast/repaint/selection-gap-flipped-absolute-child.html
               fast/repaint/selection-gap-flipped-fixed-child.html
               fast/repaint/selection-gap-transformed-absolute-child.html
               fast/repaint/selection-gap-transformed-fixed-child.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint):

2013-04-11  Oliver Hunt  <oliver@apple.com>

        Add more type validation to debug builds
        https://bugs.webkit.org/show_bug.cgi?id=114478

        Reviewed by Mark Hahnenberg.

        Add a bunch more type checks to the JS DOM bindings.

        * Modules/mediastream/MediaStream.idl:
        * Modules/webaudio/AudioDestinationNode.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.h:
        (WebCore::getExistingWrapper):
        (WebCore):
        (WebCore::createNewWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetNativeTypeForConversions):
        (GetGnuVTableRefForInterface):
        (GetGnuVTableNameForInterface):
        (GetGnuMangledNameForInterface):
        (GetGnuVTableOffsetForType):
        (GetWinVTableRefForInterface):
        (GetWinVTableNameForInterface):
        (GetWinMangledNameForInterface):
        (GetNamespaceForInterface):
        (GetImplementationLacksVTableForInterface):
        (GetSkipVTableValidationForInterface):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * dom/Clipboard.idl:
        * dom/DOMStringMap.idl:
        * dom/MutationRecord.idl:
        * dom/NodeList.idl:
        * html/DOMTokenList.idl:
        * html/track/TextTrack.idl:
        * inspector/ScriptProfileNode.idl:
        * storage/Storage.idl:
        * xml/XPathNSResolver.idl:

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Remove ResourceLoadInfo
        https://bugs.webkit.org/show_bug.cgi?id=113302

        Reviewed by Benjamin Poulain.

        Co-authored by Christophe Dumez.

        Removed ResourceLoadInfo since it had been only used by Chromium port.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * platform/network/ResourceLoadInfo.h: Removed.
        * platform/network/ResourceResponseBase.cpp:
        (WebCore):
        (WebCore::ResourceResponseBase::reportMemoryUsage):
        * platform/network/ResourceResponseBase.h:
        (ResourceResponseBase):

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Another Mac Lion build fix attempt after r148197.

        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:

2013-04-11  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Unable to paste twice in input field when specific CSS present
        https://bugs.webkit.org/show_bug.cgi?id=108675

        Reviewed by Ryosuke Niwa.

        When we are pre-rendering text in ReplaceSelectionCommand, we shouldn't care
        whether the content is clipped by its ancestors or not. This bug was caused
        by the fact the plainText() method returned an empty string because the text
        was fully clipped by its ancestors. Make plainText ignore style visibility.

        Test: editing/inserting/insert-text-into-text-field.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):

2013-04-11  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add accelerated 2D canvas support using cairo-gl
        https://bugs.webkit.org/show_bug.cgi?id=104672

        Reviewed by Alejandro G. Castro.

        No new tests. We do not yet have the ability to run tests against
        accelerated content.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore): We don't use the stub implementation of isAcceleratedContext any longer.
        * platform/graphics/ImageBuffer.cpp:
        (WebCore): Ditto for ImageBuffer::platformLayer.
        * platform/graphics/cairo/GLContext.h:
        (GLContext): Added method to get a cairo_device_t from the context.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::isAcceleratedContext): Return true when we are a CairoGL surface.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::ImageBufferData): Initialize the size and the texture to 0.
        (WebCore::createCairoGLSurface): Added this helper.
        (WebCore::ImageBuffer::ImageBuffer): When we are in accelerated rendering mode, create
        a CairoGL surface.
        (WebCore::ImageBuffer::platformTransformColorSpace): Do not implement this for accelerated
        contexts yet.
        (WebCore::mapSurfaceToImage): Added this helper, since we don't require Cairo 1.12 yet,
        which provides an builtin implementation.
        (WebCore::unmapSurfaceFromImage): Ditto.
        (WebCore::getImageData): Map the surface to an image surface first.
        (WebCore::ImageBuffer::putByteArray): Ditto.
        (WebCore::ImageBufferData::paintToTextureMapper): Connect the accelerated canvas into the
        TextureMapper infrastructure.
        (WebCore::ImageBuffer::platformLayer): This lets the TextureMapper at the ImageBufferData.
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        (ImageBufferData): Subclass TexturMapperPlatformLayer where appropriate.
        * platform/graphics/egl/GLContextEGL.cpp: Added implementation of cairoDevice.
        * platform/graphics/egl/GLContextEGL.h: Ditto.
        * platform/graphics/glx/GLContextGLX.cpp: Ditto
        * platform/graphics/glx/GLContextGLX.h: Ditto.

2013-04-11  Anders Carlsson  <andersca@apple.com>

        Implement removing storage area items
        https://bugs.webkit.org/show_bug.cgi?id=114472

        Reviewed by Beth Dakin.

        Export StorageMap::removeItem.

        * WebCore.exp.in:

2013-04-11  Brendan Long  <b.long@cablelabs.com>

        TextTrackList's .onremovetrack is missing from IDL
        https://bugs.webkit.org/show_bug.cgi?id=103421

        Reviewed by Eric Carlson.

        Fixed test media/track/opera/interfaces/TextTrackList/onremovetrack.html

        * html/track/TextTrackList.cpp:
        (TextTrackList::remove):
        (TextTrackList::scheduleRemoveTrackEvent):
        * html/track/TextTrackList.h:
        (TextTrackList):
        * html/track/TextTrackList.idl:

2013-04-11  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Upstream the filesystem code
        https://bugs.webkit.org/show_bug.cgi?id=114437

        Reviewed by Rob Buis.

        This patch contains contributions from many members of the
        BlackBerry WebKit team.

        * platform/blackberry/AsyncFileWriterBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::AsyncFileWriterBlackBerry::write):
        * platform/blackberry/AsyncFileWriterBlackBerry.h: Added.
        (WTF):
        (WTF::BlackBerry::Platform::WebFileWriter):
        (WebCore):
        * platform/blackberry/DOMFileSystemBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::DOMFileSystemBase::createFileSystemURL):
        (WebCore::DOMFileSystemBase::crackFileSystemURL):
        (WebCore::DOMFileSystemBase::supportsToURL):
        (WebCore::DOMFileSystemBase::isValidType):
        * platform/blackberry/LocalFileSystemBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::fileSystemTypeString):
        (WebCore::openFileSystem):
        (WebCore::LocalFileSystem::deleteFileSystem):
        (WebCore::LocalFileSystem::readFileSystem):
        (WebCore::LocalFileSystem::requestFileSystem):
        * platform/blackberry/PlatformAsyncFileSystemCallbacks.cpp: Added.
        (WebCore):
        (WebCore::PlatformAsyncFileSystemCallbacks::notifyOpenFileSystem):
        (WebCore::PlatformAsyncFileSystemCallbacks::notifySucceed):
        (WebCore::PlatformAsyncFileSystemCallbacks::notifyFail):
        (WebCore::getFileMetadata):
        (WebCore::PlatformAsyncFileSystemCallbacks::notifyReadMetadata):
        (WebCore::PlatformAsyncFileSystemCallbacks::notifyCreateSnapshotFileAndReadMetadata):
        (WebCore::PlatformAsyncFileSystemCallbacks::notifyReadDirectory):
        (WebCore::PlatformAsyncFileSystemCallbacks::notifyCreateFileWriter):
        (WebCore::PlatformAsyncFileSystemCallbacks::createAsyncFileSystem):
        (WebCore::PlatformAsyncFileSystemCallbacks::createAsyncFileWriter):
        (WebCore::PlatformAsyncFileSystemCallbacks::deleteMe):
        * platform/blackberry/PlatformAsyncFileSystemCallbacks.h: Added.
        (WebCore):
        * platform/blackberry/PlatformBlob.cpp: Added.
        (WebCore):
        (WebCore::PlatformBlob::nextDataItem):
        * platform/blackberry/PlatformBlob.h: Added.
        (WebCore):
        * platform/blackberry/PlatformFileWriterClient.cpp: Added.
        (WebCore):
        (WebCore::PlatformFileWriterClient::notifyWrite):
        (WebCore::PlatformFileWriterClient::notifyTruncate):
        (WebCore::PlatformFileWriterClient::notifyFail):
        * platform/blackberry/PlatformFileWriterClient.h: Added.
        (WebCore):
        (WTF):
        (WTF::WebCore::PlatformFileWriterClient):
        * platform/blackberry/WorkerAsyncFileSystemBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::WorkerAsyncFileSystemBlackBerry::WorkerAsyncFileSystemBlackBerry):
        (WebCore::WorkerAsyncFileSystemBlackBerry::~WorkerAsyncFileSystemBlackBerry):
        (WebCore::WorkerAsyncFileSystemBlackBerry::waitForOperationToComplete):
        (WebCore::WorkerAsyncFileSystemBlackBerry::openFileSystemOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::deleteFileSystemOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::moveOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::copyOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::removeOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::removeRecursivelyOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::readMetadataOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createFileOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createDirectoryOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::fileExistsOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::directoryExistsOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::readDirectoryOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createWriterOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createSnapshotFileAndReadMetadataOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::openFileSystem):
        (WebCore::WorkerAsyncFileSystemBlackBerry::deleteFileSystem):
        (WebCore::WorkerAsyncFileSystemBlackBerry::move):
        (WebCore::WorkerAsyncFileSystemBlackBerry::copy):
        (WebCore::WorkerAsyncFileSystemBlackBerry::remove):
        (WebCore::WorkerAsyncFileSystemBlackBerry::removeRecursively):
        (WebCore::WorkerAsyncFileSystemBlackBerry::readMetadata):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createFile):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createDirectory):
        (WebCore::WorkerAsyncFileSystemBlackBerry::fileExists):
        (WebCore::WorkerAsyncFileSystemBlackBerry::directoryExists):
        (WebCore::WorkerAsyncFileSystemBlackBerry::readDirectory):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createWriter):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createSnapshotFileAndReadMetadata):
        * platform/blackberry/WorkerAsyncFileSystemBlackBerry.h: Added.
        (WebCore):
        (WorkerAsyncFileSystemBlackBerry):
        (WebCore::WorkerAsyncFileSystemBlackBerry::create):
        * platform/blackberry/WorkerAsyncFileWriterBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::WorkerAsyncFileWriterBlackBerry::writeOnMainThread):
        (WebCore::WorkerAsyncFileWriterBlackBerry::truncateOnMainThread):
        (WebCore::WorkerAsyncFileWriterBlackBerry::abortOnMainThread):
        (WebCore::WorkerAsyncFileWriterBlackBerry::write):
        (WebCore::WorkerAsyncFileWriterBlackBerry::truncate):
        (WebCore::WorkerAsyncFileWriterBlackBerry::abort):
        (WebCore::WorkerAsyncFileWriterBlackBerry::waitForOperationToComplete):
        (WebCore::WorkerAsyncFileWriterBlackBerry::platformWriterClient):
        * platform/blackberry/WorkerAsyncFileWriterBlackBerry.h: Added.
        (WebCore):
        * platform/blackberry/WorkerPlatformAsyncFileSystemCallbacks.cpp: Added.
        (WebCore):
        (WebCore::performTaskOnMainThread):
        (WebCore::postTaskToMainThread):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyStop):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyOpenFileSystem):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifySucceed):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyFail):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyReadMetadata):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyReadDirectory):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyCreateFileWriter):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::createAsyncFileSystem):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::createAsyncFileWriter):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::deleteMe):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::postTaskToWorkerThread):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyOpenFileSystemOnWorkerThread):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifySucceedOnWorkerThread):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyFailOnWorkerThread):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyReadMetadataOnWorkerThread):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyReadDirectoryEntryOnWorkerThread):
        (WebCore::WorkerPlatformAsyncFileSystemCallbacks::notifyCreateFileWriterOnWorkerThread):
        * platform/blackberry/WorkerPlatformAsyncFileSystemCallbacks.h: Added.
        (WebCore):
        * platform/blackberry/WorkerPlatformFileWriterClient.cpp: Added.
        (WebCore):
        (WebCore::WorkerPlatformFileWriterClient::notifyWriteOnWorkerThread):
        (WebCore::WorkerPlatformFileWriterClient::notifyFailOnWorkerThread):
        (WebCore::WorkerPlatformFileWriterClient::notifyTruncateOnWorkerThread):
        (WebCore::WorkerPlatformFileWriterClient::notifyWrite):
        (WebCore::WorkerPlatformFileWriterClient::notifyTruncate):
        (WebCore::WorkerPlatformFileWriterClient::notifyFail):
        (WebCore::WorkerPlatformFileWriterClient::postTaskToWorkerThreadIfNeeded):
        * platform/blackberry/WorkerPlatformFileWriterClient.h: Added.
        (WebCore):
        (WTF):
        (WTF::WebCore::WorkerPlatformFileWriterClient):

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Mac Lion build fix attempt after r148197.

        * page/scrolling/mac/ScrollingStateNodeMac.mm:

2013-04-11  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/10416316> [Mac] WebSocket doesn't work with authenticating proxies
        https://bugs.webkit.org/show_bug.cgi?id=114464

        Reviewed by Brady Eidson.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Updated for new wkCopyCONNECTProxyResponse signature.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::executePACFileURL): Fixed a typo in a comment.
        (WebCore::SocketStreamHandle::addCONNECTCredentials): Don't crash even if the rest
        of the fix didn't work (which would be the case on some OS versions).
        (WebCore::SocketStreamHandle::readStreamCallback): Replaced most breaks with returns,
        because breaks were confusing in such a huge switch. Changed null proxyResponse
        to not be treated as authentication success, because it's not. Merged two parts
        of WaitingForConnect state handling for clarity.
        (WebCore::SocketStreamHandle::writeStreamCallback): Don't blindly assume that we
        can start WebSocket handshake after kCFStreamEventCanAcceptBytes. Perhaps it's
        nothing but a failed CONNECT, and a read callback still needs to send authentication.
        Without this, establishing connections was flaky. Added a check for Closed state,
        matching read callback.

2013-04-11  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        MutationRecord is not exposed
        https://bugs.webkit.org/show_bug.cgi?id=114288

        Reviewed by Darin Adler.

        Expose MutationRecord on DOMWindow. This patch is copied from a patch
        by Adam Klein. https://codereview.chromium.org/13861028

        Test: fast/dom/MutationObserver/mutation-record-constructor.html

        * page/DOMWindow.idl:

2013-04-11  Beth Dakin  <bdakin@apple.com>

        Cannot scroll to footer on a page with overflow:hidden on the body
        https://bugs.webkit.org/show_bug.cgi?id=114462
        -and corresponding-
        <rdar://problem/13530042>

        Reviewed by Simon Fraser.

        Add a new scenario in which we want to overrideHidden -- whenever we are the 
        mainFrame and there is a header or footer.

        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):

2013-04-11  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148034, r148052, r148097, and
        r148194.
        http://trac.webkit.org/changeset/148034
        http://trac.webkit.org/changeset/148052
        http://trac.webkit.org/changeset/148097
        http://trac.webkit.org/changeset/148194
        https://bugs.webkit.org/show_bug.cgi?id=114463

        broke mutiresolution favicons, among other things (Requested
        by thorton on #webkit).

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconDataForIconURL):
        * loader/icon/IconDatabase.h:
        (IconDatabase):
        * loader/icon/IconDatabaseBase.h:
        * loader/icon/IconRecord.cpp:
        * loader/icon/IconRecord.h:
        (IconRecord):

2013-04-11  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Implement GraphicsLayerClutter::moveOrCopyAnimations
        https://bugs.webkit.org/show_bug.cgi?id=114019

        Reviewed by Gustavo Noronha Silva.

        Fill moveOrCopyAnimations that is based on Mac port implementation.

        Tests: animations/3d/change-transform-in-end-event.html
               animations/3d/transform-origin-vs-functions.html
               compositing/animation/state-at-end-event-transform-layer.html

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::moveOrCopyLayerAnimation):
        (WebCore):
        (WebCore::GraphicsLayerClutter::moveOrCopyAnimations):
        * platform/graphics/clutter/GraphicsLayerClutter.h:

2013-04-11  Anders Carlsson  <andersca@apple.com>

        Implement StorageManager::getValues
        https://bugs.webkit.org/show_bug.cgi?id=114461

        Reviewed by Beth Dakin.

        Expose the item hash map.

        * storage/StorageMap.h:
        (WebCore::StorageMap::items):

2013-04-11  Eli Fidler  <efidler@blackberry.com>

        [BlackBerry] Use the platform list of languages with fonts instead of hardcoding
        https://bugs.webkit.org/show_bug.cgi?id=114452

        Reviewed by Rob Buis.

        BlackBerry PR 325244
        Internally reviewed by Jeff Rogers

        No functional change, but platform font changes won't need a WebKit change
        going forward.

        * page/blackberry/SettingsBlackBerry.cpp:
        (WebCore::Settings::initializeDefaultFontFamilies):

2013-04-11  Dirk Schulze  <krit@webkit.org>

        [CSS Shaders] Parse parameters descriptor
        https://bugs.webkit.org/show_bug.cgi?id=114455

        Reviewed by Dean Jackson.

        Add support for the 'parameters' descriptor in the filter at-rule to support
        parameterization of CSS Shaders.

        https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#custom-filter-parameters

        Tests: css3/filters/custom-with-at-rule-syntax/parsing-parameters-property-invalid.html
               css3/filters/custom-with-at-rule-syntax/parsing-parameters-property-valid.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp: Added 'parameters' property and fail parsing if not inside
            of an @filter rule.
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFilterRuleParameters): New helper function to verify
            values.
        (WebCore):
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in: Added new property name 'parameters'.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2013-04-11  Arunprasad Rajkumar  <arunprasadr@nds.com>

        Default Implementation of toString for NPObject shouldn't return NPClass & NPObject address as String
        https://bugs.webkit.org/show_bug.cgi?id=114450

        Reviewed by Anders Carlsson.

        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::stringValue):

2013-04-11  Robert Hogan  <robert@webkit.org>

        REGRESSION (142152): ensure we skip past out-of-flow objects when detecting whitespace to ignore after leading empty inlines
        https://bugs.webkit.org/show_bug.cgi?id=114311

        Reviewed by Emil A Eklund.

        When we hit an empty inline in line layout and try to detect whether it has any whitespace after it that we ought to ignore, then
        we need to skip past out-of-flow and floating objects when looking for that whitespace. Failure to do so will result in us
        adding the width from the first space we encounter to our line width and over-estimating the real width of the line.

        We're hitting this bug now because we have broadened the category of empty inlines that get lineboxes so we go into line layout 
        and have to deal with them and their subsequent whitespace there. Previously this sort of whitespace would have been simply
        consumed by |skipLeadingWhitespace|.

        Test: fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::shouldSkipWhitespaceAfterStartObject):

2013-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Autocorrected text doesn't have a marker of type autocorrected
        https://bugs.webkit.org/show_bug.cgi?id=114337

        Reviewed by Darin Adler.

        The bug was caused by markAndReplaceFor's text replacement errornously assuming that there are
        no other text checking result starting at the same offset. That resulted in us adjusting location
        offsets of the subsequent results pointing at the replaced text, hit an assertion, and blow up.

        Fixed the bug by skipping all remaining results for the replaced text since they're no longer
        applicable.

        Tests: Existing autocorection tests have been updated to assert new behavior.

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):

2013-04-11  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Parse the geometry descriptor
        https://bugs.webkit.org/show_bug.cgi?id=110815

        Added initial parsing for the "geometry" descriptor, as per specification:
        https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#geometry
        This descriptor allows to specify the mesh geometry for custom filters.

        Reviewed by Dirk Schulze.

        Tests: css3/filters/custom-with-at-rule-syntax/parsing-geometry-property-invalid.html
               css3/filters/custom-with-at-rule-syntax/parsing-geometry-property-valid.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGeometry): New method that parses the geometry
        descriptor (grid()).
        (WebCore):
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in: Added conditional "geometry" property.
        * css/CSSValueKeywords.in: Added conditional "attached" value keyword; detached
        was already there.

2013-04-11  Anders Carlsson  <andersca@apple.com>

        Make StorageAreaMap dispatch session storage events
        https://bugs.webkit.org/show_bug.cgi?id=114454

        Reviewed by Beth Dakin.

        Export storage symbols and headers needed by WebKit2.

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

2013-04-11  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        handleMouseMoveEvent should let hit-testing hit-test scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=114430

        Reviewed by Antonio Gomes.

        Allow hit-testing to hit-test frame scrollbars so handleMouseMoveEvent
        does not have to do it itself.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):

2013-04-11  Brian Holt  <brian.holt@samsung.com>

        [Gtk] Combo boxes should be arrow-out-of-able similar to list boxes when caret-browsing is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=76796

        Reviewed by Chris Fleizach.

        When using caret-browsing with the right and left arrows, the
        behaviour of menuLists should be the same as listBoxes. This means
        not default-handling the event and passing it up the stack instead.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):

2013-04-11  Alexey Proskuryakov  <ap@apple.com>

        Remove some ResourceHandle.h includes
        https://bugs.webkit.org/show_bug.cgi?id=114416

        Reviewed by Ryosuke Niwa.

        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightResultCache.h:
        These files don't need ResourceHandle.h, just ResourceHandleTypes.h.

        * loader/TextTrackLoader.cpp:
        * loader/ThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/cache/MemoryCache.h:
        * loader/mac/ResourceLoaderMac.mm:
        * page/Settings.cpp:
        * platform/network/AuthenticationChallengeBase.cpp:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        Just straightforward removal of includes.

2013-04-04  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Use CSS4 image-rendering to determing image scaling quality
        https://bugs.webkit.org/show_bug.cgi?id=113405

        Reviewed by Simon Fraser.

        Implement the new CSS4 image-rendering property values.

        Image scaling now uses low-quality (pixelated) scaling for
        crisp-edges, pixelated and optimizeSpeed values, and always
        use high quality (smooth) scaling for -webkit-smooth and
        optimizeQuality. The latter can be used to disable low quality
        scaling during CSS animations or live resizing.

        The new values are protected with a new CSS4_IMAGES feature, but
        the crisp-edge value has been introduced before to displace the
        deprecated -webkit-optimize-contrast value, and optimizeSpeed
        and optimizeQuality values are supported for SVG compatibility.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EImageRendering):
        * css/CSSValueKeywords.in:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/style/RenderStyleConstants.h:

2013-04-11  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Build fix: use of uninitialized variable in ScrollingStateTree
        https://bugs.webkit.org/show_bug.cgi?id=114443

        Reviewed by Anders Carlsson.

        Initialize pointer to zero before use, fixes build.
        No new tests, no changes on behavior.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):

2013-04-11  Dirk Schulze  <krit@webkit.org>

        [CSS Shaders] Parse mix descriptor
        https://bugs.webkit.org/show_bug.cgi?id=114414

        Reviewed by Antti Koivisto.

        Add support for the 'mix' descriptor in the filter at-rule to support blend modes
        and composite operators in CSS Shaders.
        Each pixel in the fragment shader will be blended and composited with the
        backdrop by taking these values into account.

        https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#custom-filter-mix

        Tests: css3/filters/custom-with-at-rule-syntax/parsing-mix-property-invalid.html
               css3/filters/custom-with-at-rule-syntax/parsing-mix-property-valid.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp: Added 'mix' property and fail parsing if not inside
            of an @filter rule.
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFilterRuleMix): New helper function to verify
            values.
        (WebCore):
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in: Added new property name 'mix'.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2013-04-11  Zalan Bujtas  <zalan@apple.com>

        Parent box with background-size auto and gradient image does not get properly repainted when child box is resized. 
        https://bugs.webkit.org/show_bug.cgi?id=114424

        Reviewed by Antti Koivisto.
        
        Initiate full repaint on fill layer, when the image is generated and the background
        property defines auto size.
        http://www.w3.org/TR/css3-background/#background-size
        'If the image has neither an intrinsic width nor an intrinsic height, its size is determined as for 'contain'.'

        Extended fast/repaint/background-shorthand-with-gradient-and-height-changes.html
        to cover this case too.

        * rendering/RenderObject.cpp:
        (WebCore::mustRepaintFillLayers):

2013-04-11  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] use a smart pointer for GList and ClutterCanvas
        https://bugs.webkit.org/show_bug.cgi?id=114057

        Reviewed by Gustavo Noronha Silva.

        We can make simple code & prevent possible memory leak by using a proper smart pointer.
        Especially if we get children by clutter_actor_get_children, we should free it after using.

        No functionality changed.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorUpdateTexture):
        (graphicsLayerActorRemoveAll):

2013-04-11  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry][CSS Filters] Blur filter fails to recompute blur size when layer size changes
        https://bugs.webkit.org/show_bug.cgi?id=114272

        Reviewed by Rob Buis.

        Blur appeared blocky or pixelated when surface changed size after
        creating the filter actions. The initial image size was used to
        determine the blur size (expressed in texture coordinate system).
        Fixed by recomputing the blur size when the surface size changes, using
        a new Uniform1f subclass that can use a functor to compute the uniform
        value per-frame.

        This fixes css3/filters/effect-blur-hw.html. This can only be verified
        by manual inspection because the BlackBerry port is not currently using
        pixel tests.

        PR 323730

        * platform/graphics/blackberry/LayerFilterRenderer.cpp:
        (WebCore):
        (SurfaceFunctor):
        (WebCore::SurfaceFunctor::SurfaceFunctor):
        (InverseSurfaceWidth):
        (WebCore::InverseSurfaceWidth::InverseSurfaceWidth):
        (WebCore::InverseSurfaceWidth::operator()):
        (InverseSurfaceHeight):
        (WebCore::InverseSurfaceHeight::InverseSurfaceHeight):
        (WebCore::LayerFilterRenderer::actionsForOperations):
        * platform/graphics/blackberry/LayerFilterRenderer.h:
        (Uniform1f):
        (WebCore):
        (Uniform1fWithFunctor):
        (WebCore::Uniform1fWithFunctor::create):
        (WebCore::Uniform1fWithFunctor::Uniform1fWithFunctor):
        (WebCore::Uniform1fWithFunctor::apply):
        (WebCore::Uniform1f::createWithFunctor):

2013-04-11  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Accelerated compositing debug rectangle incorrectly drawn for layers with surfaces
        https://bugs.webkit.org/show_bug.cgi?id=114275

        Reviewed by Carlos Garcia Campos.

        The drawDebugBorder method was updated to mirror the logic in
        compositeLayersRecursive, i.e. if we're compositing a surface to the
        screen, use the transformed bounds stored in the surface. The bounds
        stored in the layer should only be used when drawing the layer to the
        surface.

        Speaking of which, also update the code to skip border drawing when
        drawing a layer to a surface. Drawing the borders inside the surface
        would only result in messing up the surface contents, especially when
        CSS filters like blur were the reason for having a surface in the first
        place - the border would be blurred and hard to discern.

        Only manually testable, the debug border is disabled during layout
        tests.

        PR 323746

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::drawDebugBorder):
        * platform/graphics/blackberry/LayerRendererSurface.cpp:
        (WebCore::LayerRendererSurface::drawRect):
        (WebCore::LayerRendererSurface::transformedBounds): Added.
        (WebCore):
        * platform/graphics/blackberry/LayerRendererSurface.h:
        (LayerRendererSurface):

2013-04-11  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Compiler warning in LayerWebKitThread.cpp
        https://bugs.webkit.org/show_bug.cgi?id=114277

        Reviewed by Carlos Garcia Campos.

        All the relevant WTF::Vector APIs use size_t, storing the position in
        an int resulted in a compiler warning. Fixed by switching to size_t.

        No change in behavior, no new tests.

        PR 323753

        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::remove):
        (WebCore::LayerWebKitThread::replaceSublayer):

2013-04-11  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [CoordinatedGraphics] Use ScrollingStateTree to handle fixed elements positioning while scrolling
        https://bugs.webkit.org/show_bug.cgi?id=114353

        Reviewed by Noam Rosenthal.
        
        ScrollingCoordinatorCoordinatedGraphics should implement threaded scrolling interface and
        re-use threaded scrolling approach (ScrollingStateTree and ViewportConstraints) to handle
        fixed/sticky elements positioning while scrolling. The rationals are below.

        Before the change ScrollingCoordinatorCoordinatedGraphics was implementing Chromium-specific
        interface which is going to be removed eventually as there is no ScrollingCoordinatorChromium
        existing.

        Tested by existing manual tests (fixed-position.html for example.

        * CMakeLists.txt:
        * Target.pri:
            Included ScrollingStateTree files.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        * page/scrolling/ScrollingStateTree.h:
            Removed ENABLE(THREADED_SCROLLING) code guards.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::ScrollingCoordinatorCoordinatedGraphics):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::~ScrollingCoordinatorCoordinatedGraphics):
        (WebCore):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::attachToStateTree):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::detachFromStateTree):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::clearStateTree):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
            ScrollingCoordinatorCoordinatedGraphics is using threaded scrolling approach to handle fixed
            elements positioning while scrolling.

        (WebCore):
        (ScrollingCoordinatorCoordinatedGraphics):
        * page/scrolling/coordinatedgraphics/ScrollingStateNodeCoordinatedGraphics.cpp: Added.
        (WebCore):
        (WebCore::ScrollingStateNode::platformScrollLayer):
        (WebCore::ScrollingStateNode::setScrollPlatformLayer):
        (WebCore::ScrollingStateNode::setScrollLayer):
        * page/scrolling/coordinatedgraphics/ScrollingStateScrollingNodeCoordinatedGraphics.cpp: Added.
        (WebCore):
        (WebCore::ScrollingStateScrollingNode::counterScrollingPlatformLayer):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):

2013-04-11  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] EventHandler should handle Space and BackSpace 
        https://bugs.webkit.org/show_bug.cgi?id=114428

        Reviewed by Jocelyn Turcotte.

        Enable default space-handling for Qt.

        * page/EventHandler.cpp:

2013-04-11  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        IconDatabase: Simplify boolean logic in assertion.
        https://bugs.webkit.org/show_bug.cgi?id=114425

        Reviewed by Andreas Kling.

        Follow-up to r148097; drop the overzealous use of !! to turn a
        PassRefPtr into a boolean.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::updateIconRecord):

2013-04-11  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] LayerTexture refactoring
        https://bugs.webkit.org/show_bug.cgi?id=114276

        Reviewed by Carlos Garcia Campos.

        Remove the GpuHandle and HostType typedefs from LayerTexture, they
        don't make any sense now that we removed the Skia code paths. With Skia
        they used to be an OpenGL texture ID and an SkBitmap respectively, but
        now it's just BlackBerry::Platform::Graphics::Buffer all around.

        This allows us to rename textureId() into buffer() which is more to the
        point. The texture ID concept is now up for grabs and can be used to
        consolidate all the various code for extracting an OpenGL texture from
        a BlackBerry::Platform::Graphics::Buffer. This opportunity is seized in
        LayerTexture::platformTexture(), a name which makes more sense than
        textureId() for anyone familiar with the GraphicsContext3D code. We can
        also leverage the Platform3DObject typedef to avoid including gl2.h.

        The vertex attribute state was getting trampled when interacting with
        BlackBerry::Platform::Graphics in the LayerFilterRenderer. Some
        additional GL state save/restore incantations when accessing the OpenGL
        texture for a LayerTexture in the new LayerTexture::platformTexture()
        method fixes various CSS Filters test cases.

        Since we removed the Skia integration from LayerTiler, nobody cares
        about the dirty rect, tile rect or opaqueness of the tile contents. So
        remove those parameters from the updateContents code path.

        No change in behavior except for fixing CSS Filters tests like
        css3/filters/effect-blur-hw.html. This can only be verified by manually
        looking at the tests, we don't have pixel test support to catch this
        kind of regression.

        PR 322882

        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        (WebCore::LayerCompositingThread::drawSurface):
        * platform/graphics/blackberry/LayerFilterRenderer.cpp:
        (WebCore::LayerFilterRenderer::ping):
        (WebCore::LayerFilterRenderer::pong):
        (WebCore::LayerFilterRenderer::pushSnapshot):
        (WebCore::LayerFilterRenderer::popSnapshot):
        (WebCore::LayerFilterRenderer::applyActions):
        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::useSurface):
        * platform/graphics/blackberry/LayerTexture.cpp:
        (WebCore::LayerTexture::LayerTexture):
        (WebCore::LayerTexture::updateContents):
        (WebCore::LayerTexture::setContentsToColor):
        (WebCore::LayerTexture::protect):
        (WebCore::LayerTexture::platformTexture):
        (WebCore):
        * platform/graphics/blackberry/LayerTexture.h:
        (WebCore::LayerTexture::isDirty):
        (WebCore::LayerTexture::buffer):
        (LayerTexture):
        (WebCore::LayerTexture::setBuffer):
        * platform/graphics/blackberry/LayerTile.cpp:
        (WebCore::LayerTile::setContents):
        (WebCore::LayerTile::updateContents):
        * platform/graphics/blackberry/LayerTile.h:
        (WebCore::LayerTile::hasTexture):
        (LayerTile):
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::updateTextureContentsIfNeeded):
        (WebCore::LayerTiler::uploadTexturesIfNeeded):
        (WebCore::LayerTiler::performTileJob):
        (WebCore::LayerTiler::drawTile):
        * platform/graphics/blackberry/LayerTiler.h:
        (WebCore::LayerTiler::TextureJob::TextureJob):
        (WebCore::LayerTiler::TextureJob::setContents):
        (WebCore::LayerTiler::TextureJob::updateContents):
        (TextureJob):
        (LayerTiler):
        * platform/graphics/blackberry/TextureCacheCompositingThread.cpp:
        (WebCore::TextureCacheCompositingThread::createBuffer):
        (WebCore::TextureCacheCompositingThread::collectGarbage):
        (WebCore::TextureCacheCompositingThread::install):
        (WebCore::TextureCacheCompositingThread::resizeTexture):
        (WebCore::TextureCacheCompositingThread::evict):
        (WebCore::TextureCacheCompositingThread::textureForContents):
        (WebCore::TextureCacheCompositingThread::updateContents):
        * platform/graphics/blackberry/TextureCacheCompositingThread.h:
        (TextureCacheCompositingThread):
        (WebCore::TextureCacheCompositingThread::ZombieTexture::ZombieTexture):
        (ZombieTexture):

2013-04-11  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] RenderThemeBlackBerry: upstream missing code
        https://bugs.webkit.org/show_bug.cgi?id=114343

        Reviewed by Xan Lopez.

        Add implementations of sliderTickSize() and
        sliderTickOffsetFromTrackCenter(), as well as a missing header.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):
        (WebCore::RenderThemeBlackBerry::sliderTickSize):
        (WebCore::RenderThemeBlackBerry::sliderTickOffsetFromTrackCenter):
        * platform/blackberry/RenderThemeBlackBerry.h:
        (RenderThemeBlackBerry):

2013-04-11  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        HitTestRequest::AllowFrameScrollbars does not test main frame scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=112563

        Reviewed by Antonio Gomes.

        Move the frame scrollbar testing from RenderPart to RenderView, so that it is
        tested by all frame and not just child frames. At the same time remove the 
        main frame test from the one current callsite using the option.

        Tested by fast/events/touch/gesture/gesture-scrollbar.html.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::nodeAtPoint):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::hitTest):

2013-04-11  Rune Lillesveen  <rune@opera.com>

        Incorrect evaluation of resolution media queries
        https://bugs.webkit.org/show_bug.cgi?id=114029

        Reviewed by Kenneth Rohde Christiansen.

        The implementation used the physical resolution to evaluate the
        resolution media features. Changed to use the actual CSS resolution,
        also known as the device-pixel-ratio, instead. Unified the code for
        evaluating the resolution and device-pixel-ratio media features.

        No new tests, covered by existing tests.

        * WebCore.exp.in:
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isResolution):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::evalResolution):
        (WebCore::device_pixel_ratioMediaFeatureEval):
        (WebCore::resolutionMediaFeatureEval):
        * page/Screen.cpp:
        * page/Screen.h:
        * page/Settings.cpp:
        (WebCore):
        * page/Settings.h:
        (Settings):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        (Backup):
        (InternalSettings):
        * testing/InternalSettings.idl:

2013-04-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        FrameLoaderClient::assignIdentifierToInitialRequest() not called for the main resource when loaded from the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=112418

        Reviewed by Darin Adler.

        When the main resource is loaded from the memory cache the
        response is not added to the ResponseVector of the document
        loader, so that when committing the provisional load the remaining
        delegate messages are not called because the ResponseVector of the
        document loader is empty. When the main resource is loaded from
        the memory cache, there's no resource loader, and the client is
        notified about the response received using
        ResourceLoadNotifier::dispatchDidReceiveResponse() directly
        instead of ResourceLoadNotifier::didReceiveResponse() which is the
        one adding the response to the ResponseVector of the document
        loader. So, the problem can be fixed by adding the response to the
        ResponseVector before calling dispatchDidReceiveResponse() when
        loading the main resource without a resource loade

        Test: loader/go-back-cached-main-resource.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):

2013-04-10  Alexey Proskuryakov  <ap@apple.com>

        Remove some includes of CachedImage.h
        https://bugs.webkit.org/show_bug.cgi?id=114411

        Reviewed by Dan Bernstein.

        * css/CSSCrossfadeValue.h: Initializing CachedResourceHandle with 0 requires a
        definition of a class it holds, but default construction does not.

        * rendering/RenderImageResource.cpp:
        * rendering/RenderImageResource.h:
        Moved definitions of virtual functions to a .cpp file. There is no win from having
        them inline, and now we don't need CachedImage.h in the header.

        * bindings/js/JSNodeCustom.cpp:
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        * platform/mac/ClipboardMac.h:
        * rendering/InlineFlowBox.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * svg/graphics/SVGImageCache.cpp:
        Removed unnecessary includes.

        * platform/mac/PasteboardMac.mm:
        * rendering/RenderSnapshottedPlugIn.cpp:
        Added ones where they are now necessary.

2013-04-10  No'am Rosenthal  <noam@webkit.org>

        Allow direct compositing of background images
        https://bugs.webkit.org/show_bug.cgi?id=108203

        Reviewed by Simon Fraser.

        Use setContentsToImage for background images, if the GraphicsLayer has only a background
        bitmap image and nothing else. Compute the contentsRect/contentsTileRect from the box model.
        Added new properties to GraphicsLayer, contentsTilePhase and contentsTileSize, which controls the "single tile rect",
        which allows us to compute the pattern-space transform of a tile, thus allowing background-size
        and other characteristics of background images.

        This feature is explicitly disabled when there is any composition with a background color or if
        there are several background images, as in that case having a single backing store has some
        advantages over directly compositing in hardware.

        Currently, this feature is disabled for all ports, allowing ports to implement their backend
        and decide when to enable it.

        Note that RenderBoxModelObject::getGeometryForBackgroundImage crops the contents rect to the 
        area that contains the tiles, which allows us to assume full tiling in GraphicsLayer.
        In this way contentsTileSize/Phase is equivalent to GraphicsContext::drawTiledImage.

        Tests: compositing/patterns/direct-pattern-compositing-add-text.html
               compositing/patterns/direct-pattern-compositing-change.html
               compositing/patterns/direct-pattern-compositing-contain.html
               compositing/patterns/direct-pattern-compositing-cover.html
               compositing/patterns/direct-pattern-compositing-load.html
               compositing/patterns/direct-pattern-compositing-padding.html
               compositing/patterns/direct-pattern-compositing-position.html
               compositing/patterns/direct-pattern-compositing-rotation.html
               compositing/patterns/direct-pattern-compositing-size.html
               compositing/patterns/direct-pattern-compositing.html

        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        (WebCore::GraphicsLayer::setContentsTileSize):
        (WebCore::GraphicsLayer::setContentsTilePhase):
        (WebCore::GraphicsLayer::contentsTileSize):
        (WebCore::GraphicsLayer::contentsTilePhase):
        (WebCore::GraphicsLayer::supportsContentsTiling):
                Add a contentsTileRect property that enables tile-repeat of background images.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):
                Pass background image changes to the layer backing.

        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
                Expose a function that performs the geometry calculations needed to determine 
                the tileRect for a background image. This function is also responsible
                for cropping the contentsRect to fit the area that is drawn into.

        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentChanged):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedContents):
        (WebCore::RenderLayerBacking::resetContentsRect):
        (WebCore::hasBoxDecorationsOrBackgroundImage):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundColor):
        (WebCore::canCreateTiledImage):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
        (WebCore::backgroundRectForBox):
                Allow background images to be directly composited if conditions allow (see bug description).

2013-04-10  Patrick Gansterer  <paroga@webkit.org>

        Replace ENABLE_LEGACY_WEB_AUDIO preprocessor statements in IDL files with Conditional attribute
        https://bugs.webkit.org/show_bug.cgi?id=114351

        Reviewed by Ryosuke Niwa.

        The Conditional attribute does not need a preprocessor, which is source of much pain on native windows.

        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/OscillatorNode.idl:

2013-04-10  Patrick Gansterer  <paroga@webkit.org>

        Replace ENABLE_DIRECTORY_UPLOAD preprocessor statements in IDL files with Conditional attribute
        https://bugs.webkit.org/show_bug.cgi?id=114350

        Reviewed by Ryosuke Niwa.

        The Conditional attribute does not need a preprocessor, which is source of much pain on native windows.

        * fileapi/File.idl:

2013-04-10  Ryosuke Niwa  <rniwa@webkit.org>

        Cleanup local variables in Editor::markAndReplaceFor
        https://bugs.webkit.org/show_bug.cgi?id=114383

        Reviewed by Enrica Casucci.

        Added resultEndLocation, which is the sum of resultLocation and resultLength.

        Also replaced ambiguousBoundaryOffset by useAmbiguousBoundaryOffset since the ambiguous offset is always
        selectionOffset -1 to avoid the extra house keeping and obnoxious -1 check.

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):

2013-04-10  Benjamin Poulain  <bpoulain@apple.com>

        Mass remove all the empty directories

        Rubberstamped by Ryosuke Niwa.

        * Modules/intents: Removed.
        * Modules/protocolhandler: Removed.
        * Modules/speech/mac: Removed.
        * accessibility/efl: Removed.
        * accessibility/gtk: Removed.
        * bridge/jni/jsc: Removed.
        * editing/android: Removed.
        * editing/gtk: Removed.
        * history/android: Removed.
        * page/android: Removed.
        * platform/android: Removed.
        * platform/clutter: Removed.
        * platform/graphics/blackberry/skia: Removed.
        * platform/graphics/harfbuzz/ng: Removed.
        * platform/graphics/pango: Removed.
        * platform/image-decoders/cg: Removed.
        * platform/image-decoders/qt: Removed.
        * platform/network/android: Removed.
        * platform/network/soup/cache/webkit: Removed.
        * platform/text/android: Removed.
        * platform/text/wince: Removed.
        * platform/track: Removed.

2013-04-10  Simon Fraser  <simon.fraser@apple.com>

        Log when the animation timer fires
        https://bugs.webkit.org/show_bug.cgi?id=114393

        Reviewed by Dean Jackson.

        Logging to the Animations log channel when the updateAnimationTimer
        fires is useful, because it indicates whether we're running
        software animations.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):

2013-04-10  Beth Dakin  <bdakin@apple.com>

        Inspector highlights are offset when the WKView has a header
        https://bugs.webkit.org/show_bug.cgi?id=114389
        -and corresponding-
        <rdar://problem/13522434>

        Reviewed by Sam Weinig.

        rootViewToContents() and contentsToRootView() need to factor in the 
        headerHeight(), much like windowToContents() and contentsToWindow() do already. 
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::rootViewToContents):
        (WebCore::ScrollView::contentsToRootView):

2013-04-10  Simon Fraser  <simon.fraser@apple.com>

        Flesh out the Animations logging
        https://bugs.webkit.org/show_bug.cgi?id=114388

        Reviewed by Dean Jackson.

        Log state changes and transition/animation creation and destruction
        to the Animations log channel.

        * page/animation/AnimationBase.cpp:
        (WebCore::nameForState):
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::goIntoEndingOrLoopingState):
        (WebCore::AnimationBase::freezeAtTime):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        * page/animation/KeyframeAnimation.h:
        (WebCore::KeyframeAnimation::keyframes):
        (KeyframeAnimation):

2013-04-10  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13047266> External XML entities are not loaded with modern libxml2
        https://bugs.webkit.org/show_bug.cgi?id=114377

        Reviewed by Darin Adler.

        Covered by http/tests/security/xss-DENIED-xml-external-entity.xhtml when using
        new enough libxml2.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::switchToUTF16): Added a FIXME with an idea for improvement.
        (WebCore::XMLParserContext::createStringParser): Apply XML_PARSE_NOENT in a non-hacky
        way, so that the new libxml2 check doesn't fail.
        (WebCore::XMLParserContext::createMemoryParser): Updated an unhelpful and incorrect
        comment (XML_PARSE_NODICT actually means "Do not reuse the context dictionary").

2013-04-10  Eric Carlson  <eric.carlson@apple.com>

        [Mac] in-band tracks sometimes not recognized
        https://bugs.webkit.org/show_bug.cgi?id=114380

        Reviewed by Jer Noble.

        No new tests, covered by existing in-band tests.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Don't call selectMediaOption,
            availableMediaCharacteristicsWithMediaSelectionOptions is unlikely to be loaded at this time.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processTextTracks): Disable automatic text track
            selection.
        (WebCore::assetMetadataKeyNames): Watch for the status of availableMediaCharacteristicsWithMediaSelectionOptions
            to change.

2013-04-10  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Zoom causes shape-inside to fail when shape-padding is specified
        https://bugs.webkit.org/show_bug.cgi?id=113730

        Reviewed by Dirk Schulze.

        Snap computed margin and polygon boundaries to the LayoutUnit grid to ensure
        that they fall within the shape's LayoutUnit bounding box.

        Test: fast/exclusions/shape-inside/shape-inside-polygon-zoom.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::snapVerticesToLayoutUnitGrid): Convert the FloatPoint coordinates to LayoutUnits and then back to floats.
        (WebCore::computeShapePaddingBounds): Now calls snapVerticesToLayoutUnitGrid() before creating a FloatPolygon.
        (WebCore::computeShapeMarginBounds): Ditto.

2013-04-10  Csaba Osztrogonác  <ossy@webkit.org>

        One more unreviewed buildfix after r148123.

        * platform/graphics/filters/CustomFilterMeshGenerator.h:

2013-04-10  Beth Dakin  <bdakin@apple.com>

        FindBanner matches are offset when the WKView has a header or footer
        https://bugs.webkit.org/show_bug.cgi?id=114314
        -and corresponding-
        <rdar://problem/13522434>

        Reviewed by Simon Fraser.

        There were already a few places in the code where we needed to adjust the 
        scrollOffset() to pretend that (0,0) is that the top of the Document rather than 
        the top of the header. To fix the FindBanner issues, we need to know that version 
        of the offset in a few more places, so I added a function on ScrollView to fetch 
        it called scrollOffsetRelativeToDocument().

        New function subtracts out the headerHeight() to treat the top of 
        the document as (0,0).
        * WebCore.exp.in:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollOffsetRelativeToDocument):

        Use scrollOffsetRelativeToDocument() where we were previously making this 
        calculation. Also re-name an inaccurately named variable where we are actually 
        converting FROM a document offset to a ScrollableArea offset.
        (WebCore::ScrollView::windowToContents):
        * platform/ScrollView.h:
        (ScrollView):

        getRectToExpose needs to know about the actual visibleContentRect and the 
        visibleContentRect that is relative to the Document. So this 
        patch adds a new parameter to getRectToExpose for that purpose.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::getRectToExpose):
        * rendering/RenderLayer.h:

2013-04-10  Chris Fleizach  <cfleizach@apple.com>

        when ARIA button contains a link, label text is ignored (affects main buttons on m.facebook.com)
        https://bugs.webkit.org/show_bug.cgi?id=113906

        Reviewed by Tim Horton.

        If an element does not expose any children, then it's safe to include all of its sub children when determining
        the visible text.
        The bug is that all elements were ignoring focusable elements (like <a>) when determining visible children text

        Test: accessibility/link-inside-button-accessible-text.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::shouldUseAccessiblityObjectInnerText):
        * accessibility/AccessibilityNodeObject.h:
        (AccessibilityNodeObject):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isDescendantOfBarrenParent):
        (AccessibilityObject):

2013-04-10  Chris Fleizach  <cfleizach@apple.com>

        AX: Make sure all AX methods called from outside call prepareAccessibility
        https://bugs.webkit.org/show_bug.cgi?id=113818

        Reviewed by Darin Adler.

        Make sure any calls that can be made from outside WebCore are protected with the
        prepareAccessibility method.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityMathRootIndexObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathRadicandObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathNumeratorObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathDenominatorObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathBaseObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathSubscriptObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathSuperscriptObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathUnderObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathOverObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathFencedOpenString]):
        (-[WebAccessibilityObjectWrapper accessibilityMathFencedCloseString]):
        (-[WebAccessibilityObjectWrapper accessibilityIsMathTopObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathType]):

2013-04-10  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r148123.

        * inspector/InspectorInstrumentation.h:
        (WebCore):

2013-04-10  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Clicking on the volume slider of HTML5 elements is pausing sometimes
        https://bugs.webkit.org/show_bug.cgi?id=112548

        Reviewed by Eric Carlson.

        Test: media/click-volume-bar-not-pausing.html

        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        Calling the setDefaultHandled() method on the event prevents it
        from being incorrectly propagated from the volume button up to the
        MediaDocument.

2013-04-10  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Rename BlackBerry specific Texture class
        https://bugs.webkit.org/show_bug.cgi?id=95781

        Reviewed by Rob Buis.

        Texture was a bit too generic and prone to name conflicts. Renamed it
        to LayerTexture.

        No change in behavior, no new tests.

        PR 322882

        * PlatformBlackBerry.cmake:
        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        (WebCore::LayerCompositingThread::drawSurface):
        (WebCore::LayerCompositingThread::contentsTexture):
        * platform/graphics/blackberry/LayerCompositingThread.h:
        (LayerCompositingThread):
        * platform/graphics/blackberry/LayerCompositingThreadClient.h:
        (WebCore):
        (WebCore::LayerCompositingThreadClient::contentsTexture):
        * platform/graphics/blackberry/LayerFilterRenderer.cpp:
        (WebCore::LayerFilterRenderer::applyActions):
        * platform/graphics/blackberry/LayerFilterRenderer.h:
        (LayerFilterRenderer):
        * platform/graphics/blackberry/LayerRendererSurface.h:
        (WebCore::LayerRendererSurface::texture):
        (LayerRendererSurface):
        * platform/graphics/blackberry/LayerTexture.cpp: Renamed from Source/WebCore/platform/graphics/blackberry/Texture.cpp.
        (WebCore):
        (WebCore::LayerTexture::LayerTexture):
        (WebCore::LayerTexture::~LayerTexture):
        (WebCore::LayerTexture::updateContents):
        (WebCore::LayerTexture::setContentsToColor):
        (WebCore::LayerTexture::protect):
        * platform/graphics/blackberry/LayerTexture.h: Renamed from Source/WebCore/platform/graphics/blackberry/Texture.h.
        (WebCore):
        (LayerTexture):
        (WebCore::LayerTexture::create):
        (WebCore::LayerTexture::textureId):
        (WebCore::LayerTexture::isDirty):
        (WebCore::LayerTexture::hasTexture):
        (WebCore::LayerTexture::isColor):
        (WebCore::LayerTexture::isOpaque):
        (WebCore::LayerTexture::isProtected):
        (WebCore::LayerTexture::protect):
        (WebCore::LayerTexture::unprotect):
        (WebCore::LayerTexture::size):
        (WebCore::LayerTexture::width):
        (WebCore::LayerTexture::height):
        (WebCore::LayerTexture::bytesPerPixel):
        (WebCore::LayerTexture::sizeInBytes):
        (WebCore::LayerTexture::setTextureId):
        (WebCore::LayerTexture::setSize):
        * platform/graphics/blackberry/LayerTile.cpp:
        (WebCore::LayerTile::setContents):
        (WebCore::LayerTile::updateContents):
        (WebCore::LayerTile::setTexture):
        * platform/graphics/blackberry/LayerTile.h:
        (WebCore::LayerTile::texture):
        (LayerTile):
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::drawTile):
        (WebCore::LayerTiler::contentsTexture):
        * platform/graphics/blackberry/LayerTiler.h:
        (LayerTiler):
        (WebCore::LayerTiler::TextureJob::TextureJob):
        (WebCore::LayerTiler::TextureJob::setContents):
        (WebCore::LayerTiler::TextureJob::updateContents):
        (TextureJob):
        * platform/graphics/blackberry/TextureCacheCompositingThread.cpp:
        (WebCore::TextureProtector::TextureProtector):
        (TextureProtector):
        (WebCore::TextureCacheCompositingThread::allocateTextureId):
        (WebCore::freeTextureId):
        (WebCore::TextureCacheCompositingThread::textureResized):
        (WebCore::TextureCacheCompositingThread::textureSizeInBytesChanged):
        (WebCore::TextureCacheCompositingThread::textureDestroyed):
        (WebCore::TextureCacheCompositingThread::install):
        (WebCore::TextureCacheCompositingThread::resizeTexture):
        (WebCore::TextureCacheCompositingThread::evict):
        (WebCore::TextureCacheCompositingThread::textureAccessed):
        (WebCore::TextureCacheCompositingThread::prune):
        (WebCore::TextureCacheCompositingThread::textureForTiledContents):
        (WebCore::TextureCacheCompositingThread::textureForColor):
        (WebCore::TextureCacheCompositingThread::updateContents):
        * platform/graphics/blackberry/TextureCacheCompositingThread.h:
        (WebCore::TextureCacheCompositingThread::createTexture):
        (TextureCacheCompositingThread):
        (WebCore::TextureCacheCompositingThread::ZombieTexture::ZombieTexture):
        (ZombieTexture):

2013-04-10  Andreas Kling  <akling@apple.com>

        Disallow programmatic movement of the browser window while user gestures are in progress.
        <http://webkit.org/b/114271>
        <rdar://problem/13226530>

        Reviewed by Oliver Hunt.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::moveBy):
        (WebCore::DOMWindow::moveTo):
        (WebCore::DOMWindow::resizeBy):
        (WebCore::DOMWindow::resizeTo):

2013-04-10  Ryosuke Niwa  <rniwa@webkit.org>

        Refactor Editor::markAndReplaceFor before fixing autocorrection bugs
        https://bugs.webkit.org/show_bug.cgi?id=114344

        Reviewed by Enrica Casucci.

        This patch refactors Editor::markAndReplaceFor so that we can start fixing bugs in a sane state.
        Extracted isAutomaticTextReplacementType and correctSpellcheckingPreservingTextCheckingParagraph,
        and made convenience local variables const.

        In particular, shouldMarkSpelling used to be assigned of false when shouldShowCorrectionPanel was true
        in a middle of a function but this was removed in favor of explicitly checking this condition later
        since shouldMarkSpelling was only referenced once after the assignment.

        * editing/Editor.cpp:
        (WebCore::isAutomaticTextReplacementType): Extracted.

        (WebCore::correctSpellcheckingPreservingTextCheckingParagraph): Extracted.  Used highestAncestor
        and rangeFromLocationAndLength to match the rest of the up-to-date editing code.

        (WebCore::Editor::markAndReplaceFor): See above.

2013-04-08  Anders Carlsson  <andersca@apple.com>

        Remove unneeded headers from FrameLoader.h
        https://bugs.webkit.org/show_bug.cgi?id=114223

        Reviewed by Geoffrey Garen.

        Remove unneeded headers from FrameLoader.h and add them back into the respective .cpp files where needed.

        * dom/Document.cpp:
        * history/CachedFrame.cpp:
        * history/PageCache.cpp:
        * inspector/InspectorResourceAgent.cpp:
        * loader/DocumentLoader.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::retryAfterFailedCacheOnlyMainResourceLoad):
        * loader/FrameLoader.h:
        (WebCore):
        (WebCore::FrameLoader::policyChecker):
        (WebCore::FrameLoader::history):
        (WebCore::FrameLoader::icon):
        * loader/MixedContentChecker.h:
        * loader/icon/IconLoader.cpp:
        * page/History.cpp:
        * page/Page.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * testing/Internals.cpp:

2013-04-10  Simon Fraser  <simon.fraser@apple.com>

        Minor code cleanup in AnimationBase::progress
        https://bugs.webkit.org/show_bug.cgi?id=114371

        Reviewed by Dean Jackson.

        Convert some "return; else if" to just "return; if".

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::progress):

2013-04-10  Robert Hogan  <robert@webkit.org>

        Empty inline continuations should only get lineboxes if the padding applies to their side of the inline
        https://bugs.webkit.org/show_bug.cgi?id=113896

        Reviewed by David Hyatt.

        Test: fast/inline/inline-with-empty-inline-continuations.html

        Where an empty inline is split across anonymous blocks we should only give lineboxes to the 'sides' of the
        inline that have borders, padding or margin.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::shouldApplyStartBorderPaddingOrMargin):
        (WebCore):
        (WebCore::shouldApplyEndBorderPaddingOrMargin):
        (WebCore::hasInlineDirectionBordersPaddingOrMargin):
        (WebCore::alwaysRequiresLineBox):

2013-04-10  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Exclusions] Increasing padding does not correctly layout child blocks
        https://bugs.webkit.org/show_bug.cgi?id=112929

        Reviewed by David Hyatt.

        If a child block has changed dimension inside a shape and it has affected the block siblings
        we need to relayout the content inside the shape.

        Test: fast/exclusions/shape-inside/shape-inside-sibling-block-dimension-change-needs-relayout.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateRegionsAndExclusionsAfterChildLayout): Add condition for dimension change.
        (WebCore::RenderBlock::layoutBlock): Call updateRegionsAndExclusionsAfterChildLayout with the new parameter.
        * rendering/RenderBlock.h:
        (RenderBlock): Add extra parameter to updateRegionsAndExclusionsAfterChildLayout(...)

2013-04-10  Geoffrey Garen  <ggaren@apple.com>

        Removed bitrotted TimeoutChecker code
        https://bugs.webkit.org/show_bug.cgi?id=114336

        Reviewed by Alexey Proskuryakov.

        This mechanism hasn't worked for a while.

        MarkL is working on a new version of this feature with a distinct
        implementation.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonJSGlobalData):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneBase::CloneBase):
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneDeserializer::deserialize):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):

2013-04-10  Patrick Gansterer  <paroga@webkit.org>

        Replace ENABLE_JAVASCRIPT_DEBUGGER preprocessor statements in IDL files with Conditional attribute
        https://bugs.webkit.org/show_bug.cgi?id=114352

        Reviewed by Timothy Hatcher.

        The Conditional attribute does not need a preprocessor, which is source of much pain on native windows.

        * page/Console.idl:

2013-04-10  Alexandru Chiculita  <achicu@adobe.com>

        Layers with opacity and blur filters are reported as opaque to the compositor
        https://bugs.webkit.org/show_bug.cgi?id=114295

        Reviewed by Simon Fraser.

        Test: compositing/contents-opaque/filter.html

        Some filters like opacity and blur might still trigger transparency in the layer, even though the
        background is opaque. I've added the special case in RenderLayer::backgroundIsKnownToBeOpaqueInRect to check
        for filters that might have transparency. Note that this special case is required only for software drawn
        filters, as the transparency is going to be backed in the GraphicsLayer content. Composited filters can
        figure it out in the compositor.

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

2013-04-10  Noam Rosenthal  <noam@webkit.org>

        [Texmap] In certain situations nested blending with overflow:hidden displays clipped results
        https://bugs.webkit.org/show_bug.cgi?id=114290

        Reviewed by Allan Sandfeld Jensen.

        Always apply the clip when binding a surface, even if it hasn't changed.
        Otherwise when binding a nested surface and rebinding its container surface,
        the clip wouldn't apply.

        Test: compositing/overlap-blending/nested-overlap-overflow.html

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::bind):

2013-04-10  Antti Koivisto  <antti@apple.com>

        Use minimal tiles during live resize
        https://bugs.webkit.org/show_bug.cgi?id=114364

        Reviewed by Darin Adler.

        We currently update non-visible speculative tiles during resizing. We should just drop them.

        * page/FrameView.cpp:
        (WebCore::FrameView::willStartLiveResize):
        (WebCore::FrameView::willEndLiveResize):
        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        
            Use minimal coverage in live resize state.

2013-04-10  Victor Costan  <costan@gmail.com>

        Blob content type normalization.
        https://bugs.webkit.org/show_bug.cgi?id=111380

        Reviewed by Alexey Proskuryakov.

        Tests: http/tests/fast/files/blob-constructor.js
               http/tests/fileapi/xhr-send-form-data-filename-escaping.html
               http/tests/fileapi/xhr-send-form-data-mimetype-normalization.html

        * WebCore.exp.in: exported Blob::isNormalizedContentType()
        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob): remove checks on Blob type, BlobBuilder will normalize it
        * fileapi/Blob.cpp:
        (BlobType): utilities for normalizing a Blob's type according to the File API spec
        (WebCore::BlobType::isValid): content type validity checks in the File API spec
        (WebCore::BlobType::normalize): implements the normalization rules in the File API spec
        (WebCore::BlobType::isNormalized): useful for ASSERTing that a Blob type has been normalized
        (WebCore): implement Blob type normalization according to the File API spec
        (WebCore::Blob::Blob): normalize the Blob type in the data URL
        (WebCore::Blob::slice): normalize the Blob type argument
        * fileapi/Blob.h:
        (BlobType): utilities for normalizing a Blob's type according to the File API spec
        (WebCore::Blob::create): assert that the deserialized Blob's type was normalized
        * fileapi/File.cpp:
        (WebCore::createBlobDataForFileWithType): assert that the File's MIME type is a normalized Blob type
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::getBlob): normalize the Blob's type before building it
        * platform/network/BlobData.h:
        (WebCore::BlobData::setContentType): assert that the Blob type has been normalized
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems): assert that Blob's type has been normalized
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::addContentTypeToMultiPartHeader): assert that the Content-Type field is normalized
        * xml/XMLHttpRequest.cpp: when responseType is blob, normalize Content-Type before passing to Blob constructor

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

        TileController doesn't remove tiles when the view is resized, leading to stale content
        https://bugs.webkit.org/show_bug.cgi?id=114323
        <rdar://problem/13520671>

        Reviewed by Simon Fraser.

        Ensure that tiles are removed if the view shrinks, so that they are not displayed
        with stale content if the view later grows again (they will not be repainted by WebCore
        while out-of-view).

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::revalidateTiles):

2013-04-10  Jessie Berlin  <jberlin@apple.com>

        Update the localizable strings file.

        Rubber-stamped by Dan Bernstein.

        * English.lproj/Localizable.strings:

2013-04-10  Patrick Gansterer  <paroga@webkit.org>

        Replace ENABLE_CHANNEL_MESSAGING preprocessor statements in IDL files with Conditional attribute
        https://bugs.webkit.org/show_bug.cgi?id=114346

        Reviewed by Geoffrey Garen.

        The Conditional attribute does not need a preprocessor, which is source of much pain on native windows.

        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2013-04-10  Eric Carlson  <eric.carlson@apple.com>

        Update all float attributes in HTMLMediaElement to double
        https://bugs.webkit.org/show_bug.cgi?id=113615

        Reviewed by Geoffrey Garen
        Patch by Aaron Colwell

        No new tests. Primary behavior doesn't change. Just time, playbackRate, and volume precision.
        All existing LayoutTests/media tests still pass.

        * WebCore.exp.in: Remove function that no longer need to be exported.

        * html/HTMLMediaElement.cpp: Change all float attributes to double.
        * html/HTMLMediaElement.h: Ditto.
        * html/HTMLMediaElement.idl: Ditto.
        * html/MediaController.cpp: Ditto.
        * html/MediaController.h: Ditto.
        * html/MediaControllerInterface.h: Ditto.
        * html/TimeRanges.cpp: Ditto.
        * html/TimeRanges.idl: Ditto.
        * html/shadow/MediaControlElementTypes.cpp: Ditto.
        * html/shadow/MediaControlElementTypes.h: Ditto.
        * html/shadow/MediaControlElements.cpp: Ditto.
        * html/shadow/MediaControlElements.h: Ditto.
        * html/shadow/MediaControls.cpp: Ditto.
        * html/shadow/MediaControlsApple.cpp: Ditto.
        * html/shadow/MediaControlsBlackBerry.cpp: Ditto.
        * html/shadow/MediaControlsBlackBerry.h: Ditto.
        * html/shadow/MediaControlsGtk.cpp: Ditto.
        * html/track/TextTrackCue.cpp: Ditto.
        * html/track/TextTrackCue.h: Ditto.
        * platform/Clock.h: Ditto.
        * platform/ClockGeneric.cpp: Ditto.
        * platform/ClockGeneric.h: Ditto.
        * platform/graphics/MediaPlayer.cpp: Ditto.
        * platform/graphics/MediaPlayer.h: Ditto.
        * platform/graphics/MediaPlayerPrivate.h: Ditto.
        * platform/mac/PlatformClockCA.cpp: Ditto.
        * platform/mac/PlatformClockCA.h: Ditto.
        * platform/mac/PlatformClockCM.h: Ditto.
        * platform/mac/PlatformClockCM.mm: Ditto.

2013-04-10  Patrick Gansterer  <paroga@webkit.org>

        Replace ENABLE_MICRODATA preprocessor statements in IDL files with Conditional attribute
        https://bugs.webkit.org/show_bug.cgi?id=114349

        Reviewed by Geoffrey Garen.

        The Conditional attribute does not need a preprocessor, which is source of much pain on native windows.

        * dom/Document.idl:
        * html/HTMLElement.idl:

2013-04-10  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        REGRESSION(r148034): IconDatabase::updateIconRecord crashes with null iconData and iconBitmap.
        https://bugs.webkit.org/show_bug.cgi?id=114356

        Reviewed by Tim Horton.

        When loading an icon fails (for example, when a non-existent URI is
        passed to the loader), updateIconRecord can be called with both
        iconData and iconBitmap having no data.

        This used to be fine before r148034, but causes an assertion now.

        No new tests, existing tests such as fast/encoding/mispositioned-meta.html
        were crashing.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::updateIconRecord): Change the ASSERT() to check
        for a NAND condition that only fails if both iconData and iconBitmap
        are not 0.

2013-04-10  JungJik Lee  <jungjik.lee@samsung.com>

        [Texmap] Update a dirty region which is not covered with keepRect.
        https://bugs.webkit.org/show_bug.cgi?id=113752

        Reviewed by Jocelyn Turcotte.

        There can be a dirty region which is not covered with keepRect. 
        However the dirty could be inside the tile area. In this case, 
        currently we ignore the dirty by intersecting with keepRect 
        and the dirty region will not be invalidated until the tile is 
        recreated. We must expand the keep rect to its intersecting tiles 
        to make sure that the dirty region is applied to existing tiles. 

        No tests needed, change is unobservable.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::invalidate):

2013-04-10  Laszlo Gombos  <l.gombos@samsung.com>

        Remove ENABLE_3D_PLUGIN
        https://bugs.webkit.org/show_bug.cgi?id=108002

        Remove ENABLE_3D_PLUGIN, it was only used by Chromium.

        Reviewed by Antti Koivisto.

        No new tests, removing dead code.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):

2013-04-10  Noam Rosenthal  <noam@webkit.org>

        [Texmap] Hierarchy of layers with opacity may result in wrong blending.
        https://bugs.webkit.org/show_bug.cgi?id=113732

        Reviewed by Allan Sandfeld Jensen.

        This is a combination of three issues with nested intermediate surfaces:
        - glScissor inside an intermediate surface should not be mirrored.
        - The current surface should be passed to the next surface in paintOptions.
        - When clipping for the non-overlap region, the containing surface offset 
        should be applied.

        Though the changes are separate, they cannot be tested separately as neither
        fixes a testable case on its own. 

        Tests: compositing/overlap-blending/nested-non-overlap-clipping.html
               compositing/overlap-blending/nested-overlap.html

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::ClipStack::reset):
        (WebCore::TextureMapperGL::ClipStack::apply):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::BitmapTextureGL::clearIfNeeded):
        * platform/graphics/texmap/TextureMapperGL.h:
        (ClipStack):
            Do not mirror the scissor clip when painting to an FBO.
            Also a minor refactor to avoid reading the viewport values from the driver.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintUsingOverlapRegions):
            Apply the offset when clipping for a non-overlap region.
        (WebCore::TextureMapperLayer::paintIntoSurface):
            Make sure the current surface is passed to the next one.

2013-04-10  Antti Koivisto  <antti@apple.com>

        Create fewer tiles when page is loading
        https://bugs.webkit.org/show_bug.cgi?id=114294

        Reviewed by Anders Carlsson.

        We currently create speculative tiles immediately. Page is often changing rapidly during loading and
        keeping the speculative tiles up to date creates extra work.
        
        Tests: platform/mac-wk2/tiled-drawing/tile-coverage-after-scroll-speculative.html
               platform/mac-wk2/tiled-drawing/tile-coverage-speculative.html
        
       * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadProgressingStatusChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustTiledBackingCoverage):
        (WebCore::FrameView::setWasScrolledByUser):
        
            User scrolling enables speculative tiling no matter what the load status.

        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        (WebCore::RenderLayerBacking::adjustTiledBackingCoverage):
        
            Cover only the viewport during loading.

2013-04-10  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] RenderThemeBlackBerry: get rid of all the SKIA code
        https://bugs.webkit.org/show_bug.cgi?id=114339

        Reviewed by Carlos Garcia Campos.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintMediaSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintMediaSliderThumb):
        (WebCore::RenderThemeBlackBerry::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintMediaVolumeSliderThumb):

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

        REGRESSION (r147719): Failures in two a11y tests on GTK
        https://bugs.webkit.org/show_bug.cgi?id=114259

        Reviewed by Ryosuke Niwa.

        No new tests - covered by existing tests.

        Partially revert r147719, restoring the possible creation of the AXObject cache 
        and the subsequent call to its handleFocusedUIElementChanged method. Removing this
        code caused regressions in accessibility tests on the GTK port, so the comment about
        the AXObject cache is adjusted accordingly.

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

2013-04-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] playbin uri getter is invalid
        https://bugs.webkit.org/show_bug.cgi?id=113884

        Reviewed by Martin Robinson.

        When loading a new media location use the url stored as a member
        variable instead of the one stored as a playbin property. The uri
        property semantic changed in playbin since 0.10.36+. One should
        now use current-uri but to avoid ifdefs depending on GStreamer
        version we simply use the url already known as member variable.

        Test: http/tests/media/video-redirect.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

2013-04-09  Geoffrey Garen  <ggaren@apple.com>

        [JSC] Script run from an isolated world should bypass a page's CSP
        https://bugs.webkit.org/show_bug.cgi?id=100815

        Reviewed by Oliver Hunt.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::shouldBypassMainWorldContentSecurityPolicy):
        * bindings/js/ScriptController.h: Test the current caller's DOM wrapper
        world to decide whether CSP should be enforced.

        Like most of CSP, this is a stupid policy because it doesn't address
        second-order effects like <script> parsing or event handler execution,
        which might be triggered indirectly by privileged scripts. These indirect
        effects are still broken. Oh well.

2013-04-09  Benjamin Poulain  <bpoulain@apple.com>

        Remove chromium exceptions from WebCore's gitattributes
        https://bugs.webkit.org/show_bug.cgi?id=114327

        Reviewed by Darin Adler.

        * .gitattributes:

2013-04-09  Adam Klein  <adamk@chromium.org>

        Update Document's event listener type bitfield when adopting a Node
        https://bugs.webkit.org/show_bug.cgi?id=114322

        Reviewed by Darin Adler.

        Without this, moving a Node between documents can silently deactivate
        an event listener, if it's one of the types that whose creation is
        optimized away by Document::hasListenerType.

        An alternate approach would be to simply copy the old document's
        bitfield over. It's a tradeoff between making adoption fast and making
        the operation of any operation depending on these event types fast.
        The latter seems like the right optimization given that adoption
        doesn't happen very often.

        Test: fast/events/event-listener-moving-documents.html

        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument): For each event listener type on the adopted node, update the new document's list of listener types.

2013-04-09  Dean Jackson  <dino@apple.com>

        Add logging channel for animations
        https://bugs.webkit.org/show_bug.cgi?id=114325

        Reviewed by Simon Fraser.

        * platform/Logging.cpp: Add LogAnimations.
        (WebCore::getChannelFromName): Return LogAnimations for "Animations".
        * platform/Logging.h: Add LogAnimations.
        * platform/mac/LoggingMac.mm:
        (WebCore::initializeLoggingChannelsIfNecessary): Copy preference.
        * platform/win/LoggingWin.cpp:
        (WebCore::initializeLoggingChannelsIfNecessary): Copy preference.

2013-04-09  Dongwoo Joshua Im  <dw.im@samsung.com>

        [CSS3] Parsing the property, text-justify.
        https://bugs.webkit.org/show_bug.cgi?id=100058

        Reviewed by Andreas Kling.

        This patch implements the parsing side of the "text-justify" property specified
        in CSS3 working draft, with "-webkit-" prefix, under ENABLE_CSS3_TEXT flag.
        Specification link : http://www.w3.org/TR/css3-text/#text-justify

        Tests: fast/css3-text/css3-text-justify/getComputedStyle/getComputedStyle-text-justify-inherited.html
               fast/css3-text/css3-text-justify/getComputedStyle/getComputedStyle-text-justify.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextJustify):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StylePropertySet.cpp:
        (WebCore):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData):

2013-04-09  Joone Hur  <joone.hur@intel.com>

        [GTK][AC] Adding contentsLayer for image and video
        https://bugs.webkit.org/show_bug.cgi?id=113912

        Reviewed by Gustavo Noronha Silva.

        contentsLayer is a ClutterActor, which is added to the main layer 
        as a child when GraphicsLayer needs to render an image or video. 

        No new tests, already covered by existing AC tests.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorUpdateTexture):
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::GraphicsLayerClutter):
        (WebCore::GraphicsLayerClutter::~GraphicsLayerClutter):
        (WebCore):
        (WebCore::GraphicsLayerClutter::setContentsToImage): Pass a Cairo surface to GraphicsLayer.
        (WebCore::GraphicsLayerClutter::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerClutter::setContentsRect):
        (WebCore::GraphicsLayerClutter::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerClutter::setupContentsLayer):
        (WebCore::GraphicsLayerClutter::updateContentsImage): Set the Cairo surface for contentsLayer 
        to upload it as a texture.
        (WebCore::GraphicsLayerClutter::updateContentsNeedsDisplay):
        (WebCore::GraphicsLayerClutter::updateContentsRect):
        (WebCore::GraphicsLayerClutter::updateSublayerList):
        * platform/graphics/clutter/GraphicsLayerClutter.h:
        (WebCore::GraphicsLayerClutter::hasContentsLayer):
        (GraphicsLayerClutter):
        (WebCore::GraphicsLayerClutter::contentsLayer):

2013-04-09  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: Blob URLs broken with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=114320

        Reviewed by Brady Eidson.

        Update BlobResourceHandle to use modern resource client calls.

        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::readSync): Don't call notifyReceiveData if there is
        no data (it's especially egregious when length is -1, signaling an error).
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess): Use didReceiveResponseAsync
        when a client wants async callbacks. This is not very clean, as we don't wait
        for response, but should be workable for blobs.
        (WebCore::BlobResourceHandle::notifyResponseOnError): Ditto.
        (WebCore::BlobResourceHandle::notifyReceiveData): Use didReceiveBuffer (clients
        that only implement didReceiveData will have it automatically unwrapped).

2013-04-09  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r123837): Full screen transition is broken at apple.com
        https://bugs.webkit.org/show_bug.cgi?id=95650

        Reviewed by Simon Fraser.

        Cancel any outstanding animations on <video> elements as they enter full screen, so as to
        not confuse the WebKit/WebKit2 full screen window animation about the starting and destination
        screen rects.

        * css/fullscreen.css:
        (video:-webkit-full-screen, audio:-webkit-full-screen):

2013-04-09  Jer Noble  <jer.noble@apple.com>

        hang in mediaSelectionGroupForMediaCharacteristic
        https://bugs.webkit.org/show_bug.cgi?id=114054

        Reviewed by Eric Carlson.

        No new tests; Fixes sporadic hangs in media/ tests.

        -[AVURLAsset mediaSelectionGroupForMediaCharacteristic:] can deadlock in certain situations: When AVURLAsset
        posts a synchronous AVAssetResourceLoader notification to the main thread, calling -mediaSelectionGroupForMediaCharacteristic:
        on the main thread requires IO to occur if the media characteristics are not yet loaded. Instead of blocking,
        bail out early if the media characteristics are not yet known.
        
        Add a new method, safeMediaSelectionGroupForLegibleMedia(), which first checks selection group availability
        before calling mediaSelectionGroupForMediaCharacteristic:.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (MediaPlayerPrivateAVFoundationObjC):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForLegibleMedia): Added.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Use new safe method.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processTextTracks): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Ditto.

2013-04-09  Chris Fleizach  <cfleizach@apple.com>

        AX: Bounding paths should be made available through accessibility
        https://bugs.webkit.org/show_bug.cgi?id=113817

        Unreviewed build fix for iOS.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityPath]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:

2013-04-09  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed correctness fix: use lroundf instead of lround for a float to int conversion.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):

2013-04-06  Roger Fong  <roger_fong@apple.com>

        Change requisite hardware checks for enabling antialiasing.
        https://bugs.webkit.org/show_bug.cgi?id=114101
        <rdar://problem/12342776>.

        m_maySupportMultisampling should be true by default for all platforms/hardware now except older versions of AMD.

        Reviewed by Dean Jackson.

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):

2013-04-09  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148010.
        http://trac.webkit.org/changeset/148010
        https://bugs.webkit.org/show_bug.cgi?id=114310

        Causes problems with focus rings (Requested by anttik on
        #webkit).

        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyComputeLength::createHandler):
        (WebCore::StyleBuilder::StyleBuilder):

2013-04-09  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, another fix for the Windows build after r148050.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::setFontSize): Use lround().

2013-04-09  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] Properly position multiple stacked floats with non rectangular shape outside
        https://bugs.webkit.org/show_bug.cgi?id=110372

        Reviewed by Dean Jackson.

        Stacked floats get positioned based on the bounding box of the shape,
        not on the shape contours itself. This patch causes that to happen.

        Test: fast/exclusions/shape-outside-floats/shape-outside-floats-stacked.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeLogicalLocationForFloat): Use the
            "BoundingBoxOffset" mode so that we compute offsets based on the shape
            bounding boxes of previous floats, not the shape contour.
        (WebCore::RenderBlock::logicalLeftOffsetForLine): Check the
            ShapeOutsideFloatOffsetMode to determine if the offset should be
            adjusted for the shape contour or not.
        (WebCore::RenderBlock::logicalRightOffsetForLine): Ditto.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalRightOffsetForLine): Add parameter for offset mode.
        (WebCore::RenderBlock::logicalLeftOffsetForLine): Ditto.
        (RenderBlock):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded): If the
            new float is being added on top of a previous float on the same line,
            undo the offset for the previous float's shape contour so that we
            position the new float based on the bounding box.

2013-04-09  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, fix the Windows build after r148050.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired): Use lround().

2013-04-09  Tim Horton  <timothy_horton@apple.com>

        [wk2] IconDatabase images should be decoded in the WebProcess
        ​https://bugs.webkit.org/show_bug.cgi?id=112524
        <rdar://problem/10133914>

        Reviewed by Simon Fraser.

        Move an ASSERT that dereferenced a pointer inside the null-check for that pointer.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconBitmapForIconURL):

2013-04-09  Eric Carlson  <eric.carlson@apple.com>

        [Mac] user caption styles not applied to correct element
        https://bugs.webkit.org/show_bug.cgi?id=114230

        Reviewed by Jer Noble.

        Test: media/track/track-css-user-override.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Drive by clean-up so we don't log excessively.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement): Initialize
            new member variables.
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Set cue font size when it is
            inserted into the tree.
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired): Update the font size of 
            all active cues.
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Set size-relative CSS properties
            after a time because this can be called during layout.
        * html/shadow/MediaControlElements.h:

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::textTrackPreferencesChanged): Call closedCaptionTracksChanged before updateSizes.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::setFontSize): New, set the cue's font size.
        * html/track/TextTrackCue.h:

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties): Set cue properties on the cue element
            instead of on the cue box to match what we do for the "cue" pseudo element.
        (WebCore::TextTrackCueGeneric::setFontSize): New, set the cue's font size.
        * html/track/TextTrackCueGeneric.h:

        * html/track/TextTrackList.cpp:
        (TextTrackList::remove): Drive-by cleanup, don't ASSERT when the media element is NULL.

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::setCaptionsStyleSheetOverride): New, allow user CSS overrides
            to be tested in DRT.
        (WebCore::CaptionUserPreferences::updateCaptionStyleSheetOveride): New, generate a user style
            sheet override. Moved here from CaptionUserPreferencesMac.
        * page/CaptionUserPreferences.h:

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::captionsBackgroundCSS): Don't ignore background color importance.
        (WebCore::CaptionUserPreferencesMac::captionsStyleSheetOverride): Implement even when we don't 
            have the media accessibility framework so this can be tested in DRT. Apply all cue properties
            to the element used for the "cue" pseudo element.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::didLoadingProgress): Drive-by cleanup, remove logging
            because this method is called so frequently and the logging is not especially useful.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Only log when the ready/network
            state changes because this method is called so frequently.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformLayer): Drive-by cleanup, remove logging
            because this method is called so frequently and the logging is not especially useful.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Make the logging more useful.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Reset captions style sheet override.
        (WebCore::Internals::captionsStyleSheetOverride): New, return the captions style sheet override.
        (WebCore::Internals::setCaptionsStyleSheetOverride): New, override the captions style sheet override.
        * testing/Internals.h:
        * testing/Internals.idl:

2013-04-08  Simon Fraser  <simon.fraser@apple.com>

        Repaint rect too small on elements with shadows
        https://bugs.webkit.org/show_bug.cgi?id=114225

        Reviewed by Dain Adler.
        
        We assumed that shadows (box-shadow, text-shadow, svg shadows)
        only required inflating the repaint rect by the blur radius of
        the shadow. However, this is incorrect; the shadow can extend
        further, which resulted in clipped or incorrectly invalidated
        shadows.
        
        Fix by disambiguating the blur radius (which is 2x the standard
        deviation of the Gaussian distribution used to generate the blur),
        from the painting extent, which is how far the shadow visually
        projects. Using a 1.4 multiplier of the blur radius is a good
        approximation for the painting extent.
        
        Renamed ShadowData::blur() to ShadowData::radius(), and added
        ShadowData::paintingExtent(). Use the latter in all places
        which relate to invalidation.

        Test: fast/box-shadow/shadow-repaint.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontAttributesForSelectionStart):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::applyShadowToGraphicsContext):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::applyBoxShadowForBackground):
        (WebCore::areaCastingShadowInHole):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getShadowExtent):
        (WebCore::RenderStyle::getShadowInsetExtent):
        (WebCore::RenderStyle::getShadowHorizontalExtent):
        (WebCore::RenderStyle::getShadowVerticalExtent):
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::operator==):
        (WebCore::calculateShadowExtent):
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::radius):
        (WebCore::ShadowData::paintingExtent):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):

2013-04-08  Simon Fraser  <simon.fraser@apple.com>

        window.internals.repaintRectsAsText() is hard to use because it doesn't force layout
        https://bugs.webkit.org/show_bug.cgi?id=114219

        Reviewed by Beth Dakin.

        Force layout when setTracksRepaints() is set to true, to flush out any pending
        repaints from a layout that hasn't happened yet. Also force layout in
        trackedRepaintRectsAsText(), so that any pending layout happpens and thus
        repaints.

        * page/FrameView.cpp:
        (WebCore::FrameView::setTracksRepaints):
        (WebCore::FrameView::trackedRepaintRectsAsText):

2013-04-09  Chris Fleizach  <cfleizach@apple.com>

        AX: Bounding paths should be made available through accessibility
        https://bugs.webkit.org/show_bug.cgi?id=113817

        Unreviewed build fix (again).

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):

2013-04-09  Chris Fleizach  <cfleizach@apple.com>

        AX: Bounding paths should be made available through accessibility
        https://bugs.webkit.org/show_bug.cgi?id=113817

        Unreviewed build fix.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (WebTransformCGPathToNSBezierPath):

2013-04-09  Chris Fleizach  <cfleizach@apple.com>

        AX: Bounding paths should be made available through accessibility
        https://bugs.webkit.org/show_bug.cgi?id=113817

        Reviewed by Tim Horton.

        Minor fix from review feedback.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):

2013-04-09  Tim Horton  <timothy_horton@apple.com>

        [wk2] IconDatabase images should be decoded in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=112524
        <rdar://problem/10133914>

        Reviewed by Oliver Hunt.

        No testable behavior change.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::updateIconRecord):
        Added updateIconRecord, which factors most of setIconDataForIconURL out so it can
        be shared with setIconBitmapForIconURL. This function will set either a bitmap or
        raw image data for the given icon URL.

        (WebCore::IconDatabase::setIconBitmapForIconURL):
        Added; make a copy of the bitmap for thread-safety purposes, and call updateIconRecord.

        (WebCore::IconDatabase::setIconDataForIconURL):
        Factored out of what is now updateIconRecord.

        * loader/icon/IconDatabase.h:
        (IconDatabase): Add setIconBitmapForIconURL and updateIconRecord.

        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::setIconBitmapForIconURL): Added.
        * loader/icon/IconRecord.cpp:
        (WebCore::IconRecord::setImage): Set the image for an icon record directly (as opposed
        to setting the image data, which causes the image to be decoded in the WebProcess).
        * loader/icon/IconRecord.h:
        (IconRecord): Add setImage.

2013-04-09  Chris Fleizach  <cfleizach@apple.com>

        AX: The bounding paths should be made available through accessibility
        https://bugs.webkit.org/show_bug.cgi?id=113817

        Reviewed by David Kilzer.

        This allows bounding paths to be returned for some web elements (image map areas and SVG shapes).
        This provides more accuracy when assistive technologies highlight elements.
        The Mac and iOS platforms share some code to help transform paths to their screen coordinates.

        Tests: platform/iphone-simulator/accessibility/element-paths.html
               platform/mac/accessibility/element-paths.html

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::imageMapLinkRenderer):
        (WebCore):
        (WebCore::AccessibilityImageMapLink::elementPath):
        (WebCore::AccessibilityImageMapLink::elementRect):
        * accessibility/AccessibilityImageMapLink.h:
        (AccessibilityImageMapLink):
        (WebCore::AccessibilityImageMapLink::supportsPath):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::elementPath):
        (WebCore::AccessibilityObject::supportsPath):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore):
        (WebCore::AccessibilityRenderObject::supportsPath):
        (WebCore::AccessibilityRenderObject::elementPath):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityPath]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper convertRectToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper accessibilityActivationPoint]):
        (-[WebAccessibilityObjectWrapper accessibilityFrame]):
        (-[WebAccessibilityObjectWrapper frameForTextMarkers:]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        (WebCore):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (PathConversionInfo):
        (ConvertPathToScreenSpaceFunction):
        (-[WebAccessibilityObjectWrapperBase convertPathToScreenSpace:]):
        (-[WebAccessibilityObjectWrapperBase convertPointToScreenSpace:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (WebTransformCGPathToNSBezierPath):
        (-[WebAccessibilityObjectWrapper bezierPathFromPath:]):
        (-[WebAccessibilityObjectWrapper path]):
        (-[WebAccessibilityObjectWrapper position]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-04-09  Benjamin Poulain  <bpoulain@apple.com>

        Remove the WebKit copy of GLU and the file using it
        https://bugs.webkit.org/show_bug.cgi?id=114249

        Reviewed by Darin Adler.

        * platform/graphics/gpu/LoopBlinnPathProcessor.cpp: Removed.

2013-04-09  Andreas Kling  <akling@apple.com>

        Throttle resize events during live window resize.
        <http://webkit.org/b/114292>
        <rdar://problem/13411454>

        Reviewed by Geoffrey Garen.

        Limit resize events to one at max every 0.2 seconds during live window resize.
        This mitigates heavy CPU usage during resize on pages with complex onresize handlers.
        If there's a pending resize event when the live resize ends, it fires immediately.

        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEvent):

            Factored out dispatch of the resize event after layout so we can call it on a timer
            instead of immediately while live window resize is active.

        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::delayedResizeEventTimerFired):
        (WebCore::FrameView::willEndLiveResize):
        (WebCore::FrameView::scheduleResizeEvent):
        * page/FrameView.h:
        * platform/ScrollableArea.h:

            Made willStartLiveResize() and willEndLiveResize() virtual so we can override
            them on FrameView.

2013-04-09  Jeff Rogers  <jrogers@rim.com>

        Add webp to supported image mime types if WEBP feature is enabled/used
        https://bugs.webkit.org/show_bug.cgi?id=112819

        Reviewed by Darin Adler.

        Add WebP to list of supported image types in MIMETypeRegistry if enabled.

        No new tests: WebP image decoding already covered by exisiting tests.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):

2013-04-09  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        Whitespace in particular source code changes rendering; does not in Firefox
        https://bugs.webkit.org/show_bug.cgi?id=100943

        Reviewed by Darin Adler.

        A render inline which requires a line box is considered a possible
        trailing object. So, ensureLineBoxInsideIgnoredSpaces will be called
        for it, even if it is placed after a text render ending with a single
        space.

        Tests: fast/text/whitespace/trailing-space-before-empty-span-1.html
               fast/text/whitespace/trailing-space-before-empty-span-2.html

        * rendering/RenderBlockLineLayout.cpp:
        (TrailingObjects):
        (WebCore::TrailingObjects::appendBoxIfNeeded):
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):

2013-04-09  Andrei Bucur  <abucur@adobe.com>

        Use DOM ordering for list counts
        https://bugs.webkit.org/show_bug.cgi?id=110352

        Reviewed by Elliott Sprehn.

        Currently the list items ordering is made by traversing the render tree. This gives bad results for:
        - list items flown inside regions because they are not rendered as descendants of their DOM list ancestors.
        - list items matched to insertion points inside a shadow tree. The insertion point may be a child of a
        list so the numbering gets broken.

        To implement correct DOM ordering I've taken into account the fact that pseudo-elements can have display: list-item
        so they should be included when traversing the DOM tree. I've added helper methods on the NodeTraversal
        namespace that should allow easily traversing the tree including the pseudo-elements (e.g. firstChildWithPseudo
        for an element with pseudo-before will return the before PseudoElement). Using these helper methods I've implemented
        pre-order traversal methods aware of the pseudo-elements.
        An effect of this change is how the list items inside shadow tree update their counting. With the patch, if there's
        no <ol> or <ul> element on the ancestor chain of a <li> element to the shadow root, the list node will be considered the
        first parent of the <li> or the shadow root if there is no ancestor.
        The RenderListItem class now makes use of this new method of traversal, replacing the one based on the render tree.
        To simplify the CSS counters implementation, I've changed the traversal functions inside RenderCounter to also make use
        of this method. The CSS counters and the list items now have the same traversal algorithm.

        In later patches I'll add tests that should cover the regions and shadow DOM use cases.
        Tests bug for shadow DOM: https://bugs.webkit.org/show_bug.cgi?id=113193
        Tests bug for regions: https://bugs.webkit.org/show_bug.cgi?id=103975

        Tests: no new tests is this patch; added the correct expectations for fast/lists/positioned-count-crash.html
        and fast/dom/shadow/shadow-and-list-elements.html

        * dom/Node.cpp:
        (WebCore::Node::pseudoAwarePreviousSibling):
        (WebCore):
        (WebCore::Node::pseudoAwareNextSibling):
        (WebCore::Node::pseudoAwareFirstChild):
        (WebCore::Node::pseudoAwareLastChild):
        * dom/Node.h:
        (Node):
        * dom/NodeTraversal.cpp:
        (WebCore):
        (WebCore::NodeTraversal::previousIncludingPseudo):
        (NodeTraversal):
        (WebCore::NodeTraversal::nextIncludingPseudo):
        (WebCore::NodeTraversal::nextIncludingPseudoSkippingChildren):
        * dom/NodeTraversal.h:
        (ElementTraversal):
        (NodeTraversal):
        (WebCore::ElementTraversal::previousIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudoSkippingChildren):
        (WebCore::ElementTraversal::pseudoAwarePreviousSibling):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::attach):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::updateItemValues):
        (WebCore::HTMLOListElement::recalculateItemCount):
        * rendering/RenderCounter.cpp:
        (WebCore::previousInPreOrder):
        (WebCore::previousSiblingOrParent):
        (WebCore::parentElement):
        (WebCore::nextInPreOrder):
        * rendering/RenderListItem.cpp:
        (WebCore):
        (WebCore::enclosingList):
        (WebCore::RenderListItem::nextListItem):
        (WebCore::previousListItem):
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::explicitValueChanged):
        (WebCore::previousOrNextItem):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderListItem.h:
        (RenderListItem):

2013-04-09  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [Texmap] TextureMapperLayer refactor for readiblity
        https://bugs.webkit.org/show_bug.cgi?id=114278

        Reviewed by Noam Rosenthal.

        Removes non-needed return values, function parameters and changes
        boolean values with enums for readibility.

        No behavioral changes, thus no tests.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeTransformsRecursive):
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::sortByZOrder):
        (WebCore::TextureMapperLayer::computeOverlapRegions):
        (WebCore::TextureMapperLayer::paintUsingOverlapRegions):
        (WebCore::commitSurface):
        (WebCore::TextureMapperLayer::paintWithIntermediateSurface):
        (WebCore::TextureMapperLayer::paintRecursive):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):

2013-04-09  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        [WebSocket] Ignore incoming message in CLOSING state
        https://bugs.webkit.org/show_bug.cgi?id=85934

        Reviewed by Kent Tamura.

        Change WebSocket implementation to suit the new WebSocket API, which
        states that we should ignore messages in CLOSING state.

        No new tests, updating existing tests.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveMessage):

2013-04-09  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Add Localized strings after r144154 and r135127
        https://bugs.webkit.org/show_bug.cgi?id=114269

        Reviewed by Timothy Hatcher.

        No new tests, no behavior change.

        * English.lproj/localizedStrings.js:

2013-04-09  Antti Koivisto  <antti@apple.com>

        Throttle compositing layer flushes in subframes
        https://bugs.webkit.org/show_bug.cgi?id=114267

        Reviewed by Andreas Kling.

        Throttle compositing layer flushes in all frames, not just the main one.
        
        This especially reduces flushes/repaints generated by ads in iframes.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadProgressingStatusChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayerFlushThrottlingInAllFrames):
        * page/FrameView.h:

2013-04-09  Suchit Agrawal  <a.suchit@samsung.com>

        Table border doesn't show up
        https://bugs.webkit.org/show_bug.cgi?id=13709

        Reviewed by Antti Koivisto.

        Border issue is fixed when border width is less than 0.8pt

        Border width is stored as unsigned. Border width (specified by
        author) is converted into pixels and some times this pixel value
        goes less than 1px. In this case, border width becomes 0px when
        pixel value (double type) assigned to unsigned type.
        Border width should not fall to 0px unless it is specified by
        author.

        Test: fast/borders/border-width-less-then-a-unit-of-pt.html

        * css/StyleBuilder.cpp:
        ApplyPropetyComputeLength class is replaced with 3 classes :
        ApplyPropertyComputeBorderWidth, ApplyPropertyComputeTextSpacing
        and ApplyPropertyComputeTransformOriginZ.

        (WebCore::ApplyPropertyComputeBorderWidth::applyValue):
        (WebCore::ApplyPropertyComputeBorderWidth::createHandler):
        This class handles all width properties like border, outline,
        etc. These all properties stores value in integer types.
        Pixel value rounded of to 1px if value less than 1px and greater
        than 0px.

        (WebCore):
        (ApplyPropertyComputeTextSpacing):
        (WebCore::ApplyPropertyComputeTextSpacing::setValue):
        (WebCore::ApplyPropertyComputeTextSpacing::applyValue):
        (WebCore::ApplyPropertyComputeTextSpacing::createHandler):
        This class handles all spacing properties like word-spacing,
        letter-spacing etc.

        (ApplyPropertyComputeTransformOriginZ):
        (WebCore::ApplyPropertyComputeTransformOriginZ::setValue):
        (WebCore::ApplyPropertyComputeTransformOriginZ::applyValue):
        (WebCore::ApplyPropertyComputeTransformOriginZ::createHandler):
        This class handles TransformOriginZ Property.

        (WebCore::StyleBuilder::StyleBuilder):
        ApplyProprtyComputeLength class usage changed with defined new
        classes as per class definition.

2013-04-09  Gabor Loki  <loki@webkit.org>

        Initialization skipped error on WinCario after r147643
        https://bugs.webkit.org/show_bug.cgi?id=114258

        Reviewed by Csaba Osztrogonác.

        Build fix. Adding extra block statement to avoid error C2362 on WinCario

        * platform/win/DragImageCairoWin.cpp:
        (WebCore::createDragImageFromImage):

2013-04-09  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2] Remove build warnings for unused parameters
        https://bugs.webkit.org/show_bug.cgi?id=114234

        Reviewed by Andreas Kling.

        Fix build warnings -Wunused-parameter.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::openInMemory):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):
        (WebCore::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::decodeBool):
        (WebCore::IDBLevelDBCoding::KeyPrefix::KeyPrefix):
        * Modules/indexeddb/IDBLevelDBCoding.h:
        (WebCore::IDBLevelDBCoding::encodeIntSafely):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::canSet):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::ComparatorAdapter::FindShortestSeparator):
        (WebCore::ComparatorAdapter::FindShortSuccessor):

2013-04-09  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WK2] Drop WebProcess capabilities on Linux using seccomp filters
        https://bugs.webkit.org/show_bug.cgi?id=89875

        Reviewed by Maciej Stachowiak.

        Make the DATA_DIR global since it is now needed for WebCore and WebKit2.
        It is now used to set a sandbox policy for the EFL port.

        * PlatformEfl.cmake:

2013-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        Remove WebCore.gyp/gypi
        https://bugs.webkit.org/show_bug.cgi?id=114239

        Reviewed by Benjamin Poulain.

        * WebCore.gyp: Removed.
        * WebCore.gyp/.gitignore: Removed.
        * WebCore.gyp/ConvertFileToHeaderWithCharacterArray.gypi: Removed.
        * WebCore.gyp/MakeNames.gypi: Removed.
        * WebCore.gyp/WebCore.gyp: Removed.
        * WebCore.gyp/mac: Removed.
        * WebCore.gyp/mac/adjust_visibility.sh: Removed.
        * WebCore.gyp/mac/check_objc_rename.sh: Removed.
        * WebCore.gyp/scripts: Removed.
        * WebCore.gyp/scripts/action_csspropertynames.py: Removed.
        * WebCore.gyp/scripts/action_cssvaluekeywords.py: Removed.
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py: Removed.
        * WebCore.gyp/scripts/action_makenames.py: Removed.
        * WebCore.gyp/scripts/action_useragentstylesheets.py: Removed.
        * WebCore.gyp/scripts/rule_bison.py: Removed.
        * WebCore.gyp/scripts/supplemental_idl_files.py: Removed.
        * WebCore.gypi: Removed.

2013-04-08  Mihai Maerean  <mmaerean@adobe.com>

        Rollout r147756: performance regression
        https://bugs.webkit.org/show_bug.cgi?id=114176

        Reviewed by Alexis Menard.

        Rolling out the patch for https://bugs.webkit.org/show_bug.cgi?id=74144 "[CSS Regions] Elements in a region
        should be assignable to a named flow" because of the performance regression in Parser/html5-full-render.html .

        No new tests (because this is a rollout patch).

        * dom/Element.cpp:
        * dom/Element.h:
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::parentRenderer):
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        * dom/NodeRenderingContext.h:
        * dom/PseudoElement.h:
        * dom/Text.cpp:
        (WebCore::Text::textRendererIsNeeded):
        (WebCore::Text::updateTextRenderer):
        * dom/Text.h:
        * rendering/FlowThreadController.cpp:
        * rendering/FlowThreadController.h:
        * rendering/RenderObject.h:
        * rendering/RenderRegion.h:
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        
2013-04-08  Benjamin Poulain  <benjamin@webkit.org>

        Remove HTML Notification
        https://bugs.webkit.org/show_bug.cgi?id=114231

        Reviewed by Ryosuke Niwa.

        The feature is dead. It was only kept in the tree because of chromium.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/notifications/Notification.cpp:
        (WebCore):
        (WebCore::Notification::Notification):
        * Modules/notifications/Notification.h:
        (Notification):
        * Modules/notifications/NotificationCenter.h:
        (NotificationCenter):
        * Modules/notifications/NotificationCenter.idl:
        * page/FeatureObserver.h:

2013-04-08  Dean Jackson  <dino@apple.com>

        Don't try to remove a non-existent snapshot
        https://bugs.webkit.org/show_bug.cgi?id=114226
        <rdar://problem/13604480>

        Reviewed by Darin Adler.

        We don't need to trigger the timer to remove a snapshot
        if there was never a snapshot displayed.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::setDisplayState): Detect if we're moving from the DisplayingSnapshot state.
        (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired): Guard against a missing renderer.

2013-04-08  Patrick Gansterer  <paroga@webkit.org>

        Do not define CAN_THEME_URL_ICON for PLATFORM(WIN_CAIRO)
        https://bugs.webkit.org/show_bug.cgi?id=108444

        Reviewed by Darin Adler.

        Image::loadPlatformResource("urlIcon") returns nothing
        since r30961 on Windows which makes the code useless.

        * loader/icon/IconDatabase.cpp:

2013-04-05  Roger Fong  <roger_fong@apple.com>

        Build fix.

        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageIconForCachedImageFilename):

2013-04-08  Geoffrey Garen  <ggaren@apple.com>

        Stop #include-ing all of JavaScriptCore in every DOM-related file
        https://bugs.webkit.org/show_bug.cgi?id=114220

        Reviewed by Sam Weinig.

        I separated ScriptWrappableInlines.h from ScriptWrappable.h so
        WebCore data types that inherit from ScriptWrappable don't
        have to #include all of the infrastructure for accessing that data member.

        * ForwardingHeaders/heap/PassWeak.h: Added.
        * ForwardingHeaders/heap/WeakInlines.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.h:
        (JSC):
        * bindings/js/JSEventListener.h:
        * bindings/js/JSMutationCallback.cpp:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/ScriptWrappable.h:
        (JSC):
        (WebCore):
        (ScriptWrappable):
        * bindings/js/ScriptWrappableInlines.h: Added.
        (WebCore):
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_root.cpp:
        * bridge/runtime_root.h:
        * css/StylePropertySet.cpp:
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeListBase::reportMemoryUsage):
        * dom/Node.cpp:
        (WebCore::Node::reportMemoryUsage):
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/NetworkResourcesData.cpp:
        * loader/cache/CachedSVGDocument.cpp:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::reportMemoryUsage):

2013-04-08  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Clean up render theme code. 
        https://bugs.webkit.org/show_bug.cgi?id=114216

        Reviewed by Rob Buis.

        BlackBerry PR 323062

        Clean up redundant code.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):
        (WebCore::RenderThemeBlackBerry::paintSliderTrack):
        * platform/blackberry/RenderThemeBlackBerry.h:
        (RenderThemeBlackBerry):

2013-04-08  Arunprasad Rajkumar  <arunprasadr@nds.com>

        Call Netscape Plugin's toString() and valueOf() instead of providing default implementation
        https://bugs.webkit.org/show_bug.cgi?id=113139

        Reviewed by Anders Carlsson.

        Tests: plugins/npruntime/tostring.html
               plugins/npruntime/valueof.html

        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::~CInstance):
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (Bindings):
        (JSC::Bindings::CInstance::invokeConstruct):
        (JSC::Bindings::CInstance::stringValue):
        (JSC::Bindings::CInstance::booleanValue):
        (JSC::Bindings::CInstance::valueOf):
        (JSC::Bindings::CInstance::toJSPrimitive):
        * bridge/c/c_instance.h:
        (CInstance):

2013-04-08  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r138858): Crash in WebCore::FrameLoader::~FrameLoader() when opening page in a background tab
        https://bugs.webkit.org/show_bug.cgi?id=109935
        <rdar://problem/13225963>

        Reviewed by Brady Eidson.

        Previously, we were deciding if a Page could go into
        the PageCache by blacklisting certain load types. Instead,
        whitelist the load types that we know can go into the cache,
        so that newly-added load types are not cached unless
        that is explicitly desired.

        The crash occurs when a page which is actively loading
        is put into the page cache while doing a redirect with
        FrameLoadTypeRedirectWithLockedBackForwardList (note that
        this is a redirect that was not covered in the blacklist),
        and then promptly removed from the page cache, resulting
        in resources from the redirect target (the now-active page)
        being incorrectly destroyed.

        No new tests, only known crash repro case is extremely
        timing dependent (and only happens in WebKit2, with tiled
        drawing, in background tabs).

        * history/PageCache.cpp:
        (WebCore::PageCache::canCache):

2013-04-08  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::continueDidReceiveResponse):

2013-04-08  Anders Carlsson  <andersca@apple.com>

        Add an async version of ResourceHandle::didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=114215

        Reviewed by Sam Weinig.

        In order to support converting NSURLConnections to NSURLDownloads when using the network process
        we need an async version of didReceiveResponse.

        * WebCore.exp.in:
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::didReceiveResponseAsync):
        Just call continueDidReceiveResponse().

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::continueWillSendRequest):
        Split up a single condition in two, making it easier to see which assertion fails.

        (WebCore::ResourceHandle::continueDidReceiveResponse):
        Call -[WebCoreResourceHandleAsOperationQueueDelegate continueDidReceiveResponse].

        (WebCore::ResourceHandle::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillCacheResponse):
        Split up a single condition in two, making it easier to see which assertion fails.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueDidReceiveResponse]):
        Signal the semaphore.

        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        Call didReceiveResponseAsync on the main thread and wait on the semaphore.

2013-04-08  Beth Dakin  <bdakin@apple.com>

        Crash in ScrollingCoordinator::mainThreadScrollingReasons() when going back
        https://bugs.webkit.org/show_bug.cgi?id=114214
        -and corresponding-
        <rdar://problem/13208616>

        Reviewed by Anders Carlsson.

        When a page is restoring from the page cache, the mainFrame can have a null 
        Document. So we should null-check the Document here. 

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::mainThreadScrollingReasons):

2013-04-08  Andrei Bucur  <abucur@adobe.com>

        Simplify ContainerNode::removeChildren
        https://bugs.webkit.org/show_bug.cgi?id=113517

        Reviewed by Darin Adler.

        The patch is based on the work made by Elliott Sprehn. He kindly agreed
        for me to finalize the last bits and pieces of the fix.

        Simplify ContainerNode::removeChildren by merging the loops and removing
        willRemoveChildren. This removes two traversals of the children, avoids
        refing and derefing all the children once, avoids allocating a second
        NodeVector of children, and means we detach() in the same order as
        normal removal.

        This does mean you can get into an infinite loop with DOMNodeRemoved
        listeners by continously adding nodes but this is true in all other browsers
        and the current behavior is bad because it means you don't get notified
        of nodes added during removal (which other browsers do notify of). This
        patch removes the containerNode.html test that originally tested for this
        infinite loop and adds a new one that tests that all nodes get notified.

        This makes PerformanceTests/Parser/innerHTML-setter.html 2-6% faster.

        There's also a new test verifying ranges remain consistent if modified
        inside an mutation event handler. Without the patch it's possible to create
        a range with boundaries outside of the DOM tree.

        Tests: fast/dom/Range/range-remove-children-event.html
               fast/events/mutation-during-innerHTML.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):
        * dom/Document.cpp:
        * dom/Document.h: nodeChildrenWillBeRemoved is not needed any more.
        * dom/Range.cpp:
        * dom/Range.h: nodeChildrenWillBeRemoved is not needed any more.

2013-04-06  Simon Fraser  <simon.fraser@apple.com>

        Remove some #includes in headers in rendering code
        https://bugs.webkit.org/show_bug.cgi?id=114079

        Reviewed by Sam Weinig.

        Clean up #includes in RenderObject, RenderLayer etc.
        Moved makeMatrixRenderable() into RenderLayer.app, allowing
        the removal of a TransformationMatrix.h include.
        
        Make some RenderLayer functions that deal with filters not inline,
        to avoid including RenderLayerFilterInfo.h.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ImageOrientation.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/transforms/AffineTransform.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayer.cpp:
        (WebCore::makeMatrixRenderable):
        (WebCore::RenderLayer::filterRenderer):
        (WebCore::RenderLayer::filterInfo):
        (WebCore::RenderLayer::ensureFilterInfo):
        (WebCore::RenderLayer::removeFilterInfoIfNeeded):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLineBoxList.h:
        * rendering/RenderObject.h:

2013-04-08  Robert Hogan  <robert@webkit.org>

        Unreviewed, rolling out r147850.
        http://trac.webkit.org/changeset/147850
        https://bugs.webkit.org/show_bug.cgi?id=113706

        Changeset crossed paths with 147505, which is the same fix.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::inlineLogicalWidth):

2013-04-08  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12834449> Crashes in WebSocketChannel::processFrame when processing a ping
        https://bugs.webkit.org/show_bug.cgi?id=114178

        Reviewed by Brady Eidson.

        No test, I could never reproduce even manually.

        Calling enqueueRawFrame() could change incoming buffer, so a subsequent skipBuffer()
        would operate on wrong assumptions. This happened because enqueueRawFrame() actually
        tried to process the queue, and send failure sometimed clears m_buffer.

        Fixing this by decoupling enqueuing from sending, and making sure that skipBuffer()
        in ping frame processing case is performed at a safe time.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::startClosingHandshake):
        (WebCore::WebSocketChannel::processFrame):
        (WebCore::WebSocketChannel::enqueueTextFrame):
        (WebCore::WebSocketChannel::enqueueRawFrame):
        (WebCore::WebSocketChannel::enqueueBlobFrame):

2013-04-08  Max Vujovic  <mvujovic@adobe.com>

        REGRESSION (r147502): Animations of CA filters broken
        https://bugs.webkit.org/show_bug.cgi?id=114067

        Reviewed by Dean Jackson.

        Revert r147502 [1] because it broke CA filter animations.
        
        [1]: http://trac.webkit.org/changeset/147502

        * platform/graphics/IntRectExtent.h:
        (WebCore::IntRectExtent::isZero):
        (IntRectExtent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::needsCompositingLayersRebuiltForOverflow):
        (WebCore):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateFilters):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):

2013-04-08  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Avoid "QFont::setPixelSize: Pixel size <= 0 (0)"
        https://bugs.webkit.org/show_bug.cgi?id=114175

        Reviewed by Allan Sandfeld Jensen.

        QFont doesn't support a 0-size but WebCore does.
        Leave our QFont in its default state in this case to avoid the warning.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2013-04-08  Yi Shen  <max.hong.shen@gmail.com>

        Counter still gets incremented when counter-increment is set to none
        https://bugs.webkit.org/show_bug.cgi?id=84985

        Reviewed by Darin Adler.

        When the counter-increment is set to none, no counters are incremented.

        Tests: New test cases added in fast/css/counters/counter-increment-tests.htm

        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyCounter::applyValue):

2013-04-08  Douglas Stockwell  <dstockwell@chromium.org>

        Crash in WebCore::ElementRuleCollector::collectMatchingRulesForList
        https://bugs.webkit.org/show_bug.cgi?id=113458

        Reviewed by Darin Adler.

        A stylesheet which has been invalidated (type changed from "" or
        "text/css") was not correctly removed from the list of active
        style sheets when its children are changed.

        This change releases StyleElement::m_sheet in advance of calling
        DocumentStyleSheetCollection::updateActiveStyleSheets.

        (StyleElement::clearSheet calls CSSStyleSheet::clearOwnerNode calls
        CSSStyleSheet::didMutate calls Document::styleResolverChanged calls
        DocumentStyleSheetCollection::updateActiveStyleSheets)

        Test: fast/css/style-element-invalidation-crash.html

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::clearSheet): Release m_sheet before we
          trigger an update of the active style sheets.

2013-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] DOM objects created wrapping a base class have incorrect GObject type
        https://bugs.webkit.org/show_bug.cgi?id=113132

        Reviewed by Gustavo Noronha Silva.

        Some of the DOM methods can create a concrete instance of another
        object, but return a base class. GObject bindings provide custom
        kit implementations for Node, Element, Event and EvenTarget, so
        any concrete HTMLElement wrapped as an HTMLElement ends up
        wrapping the right WebCore object but in the wrong GObject type.
        This affects not only HTMLElements, but any polymorphic object
        wrapped using a base class.
        This patch changes the way objects are created, so that all
        classes have their own kit implementation, but for polymorphic
        objects the kit implementation of the base class is always
        used. The kit method of polymorphic base classes use a generic
        wrap method instead of the wrapFoo method like all other
        classes. In the static code we provide the implementation of the
        generic wrap method for every polimorphic base class, falling back
        to their wrapFoo method if the concrete object can't be used to
        wrap the object.
        Both WebKitDOMBinding and WebKitHTMLElementWrapperFactory now provide
        implementations of wrap and have been renamed to WebKitDOMPrivate
        and WebKitDOMHTMLPrivate.

        * bindings/gobject/GNUmakefile.am:
        * bindings/gobject/WebKitDOMBinding.cpp: Removed.
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        (WebKit::kit): Moved kit implementation from WebKitDOMBinding for
        consistency with all other objects that have their own kit.
        (WebKit::core): Updated to match the core implementation fo all
        other objects.
        * bindings/gobject/WebKitDOMEventTargetPrivate.h:
        (WebCore):
        (WebKit):
        * bindings/gobject/WebKitDOMHTMLPrivate.cpp: Added.
        (WebKit): Use preprocessor macros to define and set the wrap
        functions of all HTML elements, removing a lot of boilerplate code
        and making it easier to add new wrap functions in the future.
        (WebKit::wrap):
        * bindings/gobject/WebKitDOMHTMLPrivate.h: Renamed from Source/WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.h.
        (WebCore):
        (WebKit):
        * bindings/gobject/WebKitDOMObject.cpp:
        * bindings/gobject/WebKitDOMPrivate.cpp: Added.
        (WebKit):
        (WebKit::wrap):
        * bindings/gobject/WebKitDOMPrivate.h: Renamed from Source/WebCore/bindings/gobject/WebKitDOMBinding.h.
        (WebCore):
        (WebKit):
        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp: Removed.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (IsBaseType): Helper function to check if a type is a base class.
        (GetBaseClass): Helper function to get the base class for a given
        parent type.
        (GenerateFunction): Remove special case for EventTarget since the
        kit prototype of EventTarget is in its private header like all
        other objects.
        (GenerateCFile): Add a kit implementation for all objects.
        (IsPolymorphic): Helper function to check if the given type is the
        base class of a polymorphic object.
        (Generate): Include the private header of the base class for
        polymorphic objects.
        (WriteData): Remove the special case for WebKitDOMNode since now
        all objects has a kit method.
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMFloat64ArrayPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObjectPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetterPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructorPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTargetPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestExceptionPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestInterfacePrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListenerPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestNodePrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObjPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructorsPrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterfacePrivate.h:
        (WebKit):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefsPrivate.h:
        (WebKit):

2013-04-08  Andras Becsi  <andras.becsi@digia.com>

        Fix the build with strict GCC 4.8

        Unreviewed build fix.

        Initialize dragImage to suppress GCC's warning about it being possibly used uninitialized,
        which results is a build failure with GCC 4.8 that sets -Werror=maybe-uninitialized.

        No new tests needed.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):

2013-04-08  Zan Dobersek  <zdobersek@igalia.com>

        Remove the unused LayoutTestSupport class
        https://bugs.webkit.org/show_bug.cgi?id=114170

        Reviewed by Alexey Proskuryakov.

        The LayoutTestSupport class is not used by any port anywhere in the code and should be removed.

        No new tests - no changes in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/LayoutTestSupport.cpp: Removed.
        * platform/LayoutTestSupport.h: Removed.

2013-04-08  Zan Dobersek  <zdobersek@igalia.com>

        Remove WebCore::(enable|disable)SecureTextInput methods
        https://bugs.webkit.org/show_bug.cgi?id=114126

        Reviewed by Alexey Proskuryakov.

        Remove the enableSecureTextInput and disableSecureTextInput methods and all the codepaths leading to them.
        These were used only by the Chromium port and are as such not required anymore.

        No new tests - no changes in functionality.

        * GNUmakefile.list.am:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (Document):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        * editing/FrameSelection.h:
        (FrameSelection):
        * html/PasswordInputType.cpp:
        * html/PasswordInputType.h:
        (PasswordInputType):
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * platform/SecureTextInput.h: Removed.

2013-04-08  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; r147892 moved an export definition out of
        a protective #ifdef, causing a link error on platforms which do
        not define that method.

        * WebCore.exp.in:

2013-04-08  Brendan Long  <b.long@cablelabs.com>

        [Qt] Enable text tracks from track elements
        https://bugs.webkit.org/show_bug.cgi?id=113522

        Reviewed by Jocelyn Turcotte.

        No new tests because they're already there. This just enables the feature.

        * Target.pri:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * platform/qt/LocalizedStringsQt.cpp:
        (WebCore):
        (WebCore::textTrackSubtitlesText):
        (WebCore::textTrackOffText):
        (WebCore::textTrackNoLabelText):

2013-04-08  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Toggle OverWrite mode when pressing the Insert key
        https://bugs.webkit.org/show_bug.cgi?id=113384

        Reviewed by Martin Robinson.

        Perform an OverWrite command as a response to the emission of the
        toggle-overwrite signal. Due to the nature of the command it will
        only do that when being on a richly editable web content.

        * platform/gtk/KeyBindingTranslator.cpp:
        (WebCore::toggleOverwriteCallback):

2013-04-08  Seokju Kwon  <seokju.kwon@gmail.com>

        [BlackBerry] Provide more specific error description for SocketStreamError
        https://bugs.webkit.org/show_bug.cgi?id=114134

        Reviewed by Rob Buis.

        Pass the reason of a failure to SocketStreamError instance
        and notify it via SocketStreamHandleClient::didFailSocketStream().

        * platform/network/blackberry/SocketStreamError.h:
        (WebCore::SocketStreamError::SocketStreamError):
        * platform/network/blackberry/SocketStreamHandleBlackBerry.cpp:
        (WebCore::SocketStreamHandle::notifyStatusReceived):

2013-04-08  Youenn Fablet  <youennf@gmail.com>

        [GTK][EFL] HEAD requests changed to GET after 303 redirection
        https://bugs.webkit.org/show_bug.cgi?id=110127

        Reviewed by Martin Robinson.

        Made shouldRedirectAsGET always return false for HEAD requests.

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

2013-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        DragImage should not depend on Frame and CachedImage
        https://bugs.webkit.org/show_bug.cgi?id=21357

        Reviewed by Sam Weinig.

        Remove Frame and CachedImage dependencies from DragImage.

        * dom/Clipboard.h:
        (WebCore): Add forward delcaration for CacheImage since it's not
        included anymore in DragImage.h.
        * page/DragController.cpp:
        (WebCore::DragController::startDrag): Use
        Frame::dragImageForSelection() and call
        dissolveDragImageToFraction() for the returned DragImage. Pass the
        font rendering mode to createDragImageForLink, instead of a Frame
        that is only used to get the font rendering mode.
        (WebCore::DragController::doImageDrag): Get the suggested filename
        for the cached image and pass it to
        createDragImageIconForCachedImageFilename().
        * platform/DragImage.cpp:
        (WebCore::createDragImageForLink): Receive a FontRenderingMode
        instead of a Frame.
        * platform/DragImage.h:
        (WebCore): Remove createDragImageForSelection, change
        createDragImageForLink to receive a FontRenderingMode instead of a
        frame, and rename createDragImageIconForCachedImage as
        createDragImageIconForCachedImageFilename since it nows received
        the suggested filename of the cached image.
        * platform/blackberry/DragImageBlackBerry.cpp:
        (WebCore::createDragImageIconForCachedImageFilename): Adapt to API
        changes.
        * platform/efl/DragImageEfl.cpp:
        (WebCore::createDragImageIconForCachedImageFilename): Ditto.
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::createDragImageIconForCachedImageFilename): Ditto.
        * platform/mac/DragImageMac.mm:
        (WebCore::dissolveDragImageToFraction): Return early if the passed
        image is NULL.
        (WebCore::createDragImageIconForCachedImageFilename): Adapt to API
        changes.
        (WebCore::createDragImageForLink): Ditto.
        * platform/qt/DragImageQt.cpp:
        (WebCore::createDragImageIconForCachedImageFilename): Ditto.
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageIconForCachedImageFilename): Ditto.
        (WebCore::createDragImageForLink): Ditto.
        * platform/wx/DragImageWx.cpp:
        (WebCore::createDragImageIconForCachedImageFilename): Ditto.

2013-04-08  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] REGRESSION(r147743): Use the correct `operator new' override in RenderThemeEfl.
        https://bugs.webkit.org/show_bug.cgi?id=114166

        Reviewed by Alexis Menard.

        r147743 disabled GLOBAL_FAST_MALLOC_NEW on the EFL port, but this has
        caused some pixel tests in WK1 to crash.

        The problem stems from RenderThemeEfl::applyEdjeRTLState() directly
        calling `operator new(size_t)' for some allocations.
        RefCounted<RenderTheme>, on its turn, has a WTF_MAKE_FAST_ALLOCATED
        call which adds some `operator new' overrides to the class. Our direct
        calls in applyEdjeRTLState() made the scope resolution rules choose the
        WTF_MAKE_FAST_ALLOCATED version (which uses FastMalloc's allocator),
        while WTF::deleteOwnedPtr() calls the global `operator delete' (which
        uses the system's free() implementation).

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::applyEdjeRTLState): Explicitly choose the
        global `operator new' when calling it.

2013-04-07  Benjamin Poulain  <benjamin@webkit.org>

        Remove the android code from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=114136

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * dom/ViewportArguments.cpp:
        (WebCore):
        (WebCore::setViewportFeature):
        (WebCore::viewportErrorMessageTemplate):
        (WebCore::viewportErrorMessageLevel):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::ViewportArguments):
        (ViewportArguments):
        (WebCore::ViewportArguments::operator==):
        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldMoveCaretToHorizontalBoundaryWhenPastTopOrBottom):
        (WebCore::EditingBehavior::shouldAllowSpellingSuggestionsWithoutSelection):
        (WebCore::EditingBehavior::shouldNavigateBackOnBackspace):
        * editing/EditingBehaviorTypes.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureLongTap):
        (WebCore::EventHandler::handleGestureForTextSelectionOrContextMenu):
        * page/Settings.cpp:
        (WebCore):
        (WebCore::editingBehaviorTypeForPlatform):
        * platform/graphics/FontCache.h:
        (FontCache):
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:
        (WebCore::FontPlatformData::getRenderStyleForStrike):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setEditingBehavior):

2013-04-07  Oliver Hunt  <oliver@apple.com>

        Add bounds checking for WTF::Vector::operator[]
        https://bugs.webkit.org/show_bug.cgi?id=89600

        Reviewed by Filip Pizlo.

        Fix exports

        * WebCore.exp.in:

2013-04-07  Benjamin Poulain  <benjamin@webkit.org>

        Do not allocate static AtomicStrings when searching for alternate font names
        https://bugs.webkit.org/show_bug.cgi?id=114110

        Reviewed by Geoffrey Garen.

        FontCache's alternateFamilyName does some font name substitutions
        when a font is not found for a given name.

        In the vast majority of cases, no substitutions are made and
        alternateFamilyName returns the null atom.
        Given the usage the function had a couple of problems:
        -It created 6 static AtomicString.
        -It did a case insensitive comparison with 6 differents strings
         before failing.

        This patch aims at solving both issues.

        Instead of creating all AtomicString statically, the alternate name
        are simply created on the fly as needed. Because the operation is so
        unfrequent, and it uses the fast constructor, doing so should not slow
        down the function.

        To avoid comparing the input to every string, every time, the length of
        the input is first evaluated, and we only do the necessary string comparisons.

        On x86_64, this reduces the binary size by 2128 bytes.

        * platform/graphics/FontCache.cpp:
        (WebCore::familyNameEqualIgnoringCase):
        When comparing strings, we know:
        -The family name is non null.
        -The length of both strings is equal.
        -The length is not null.
        Make the comparison accordingly.

        (WebCore::alternateFamilyName):
        (WebCore::FontCache::getCachedFontPlatformData):

2013-04-07  Zan Dobersek  <zdobersek@igalia.com>

        Remove remaining PLATFORM(CHROMIUM)-guarded code in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=114081

        Remove the remaining PLATFORM(CHROMIUM) build guards. There are still a couple of guards
        that most likely apply only to Chromium, like OS(ANDROID) or USE(SKIA_ON_MAC_CHROMIUM),
        but removal of these should go into separate patches.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * config.h:
        * history/PageCache.cpp:
        (WebCore):
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::shouldAccelerate):
        * html/HTMLCanvasElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::createFileURLForApplicationCacheResource):
        (WebCore::HTMLMediaElement::loadResource):
        * html/HTMLSelectElement.cpp:
        (WebCore):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):
        * html/canvas/EXTDrawBuffers.cpp:
        (WebCore::EXTDrawBuffers::satisfiesWebGLRequirements):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContext::platformLayer):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didBeginFrame):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::notifyFinished):
        * page/FeatureObserver.cpp:
        (WebCore::FeatureObserver::~FeatureObserver):
        * platform/AsyncFileSystem.cpp:
        (WebCore):
        * platform/ContextMenu.h:
        (ContextMenu):
        * platform/ContextMenuItem.h:
        * platform/Cursor.h:
        * platform/DragData.cpp:
        (WebCore):
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/LocalizedStrings.h:
        (WebCore):
        * platform/Pasteboard.h:
        (Pasteboard):
        * platform/PlatformExportMacros.h:
        * platform/PlatformInstrumentation.h:
        (WebCore::PlatformInstrumentation::willDecodeImage):
        (WebCore::PlatformInstrumentation::didDecodeImage):
        (WebCore::PlatformInstrumentation::willResizeImage):
        (WebCore::PlatformInstrumentation::didResizeImage):
        * platform/PlatformMenuDescription.h:
        (WebCore):
        * platform/PlatformSpeechSynthesizer.h:
        (PlatformSpeechSynthesizer):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        (PlatformWheelEvent):
        * platform/ScrollAnimator.cpp:
        (WebCore):
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollAnimator.h:
        (ScrollAnimator):
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::scroll):
        (WebCore::ScrollAnimatorNone::animationTimerFired):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateOverhangAreas):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollPositionChanged):
        * platform/Scrollbar.cpp:
        * platform/SecureTextInput.cpp: Removed.
        * platform/SecureTextInput.h:
        (WebCore):
        * platform/SuddenTermination.h:
        (WebCore):
        * platform/Widget.h:
        (Widget):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/FloatPoint.h:
        (FloatPoint):
        * platform/graphics/FloatRect.h:
        (FloatRect):
        * platform/graphics/FloatSize.h:
        (FloatSize):
        * platform/graphics/Font.cpp:
        (WebCore):
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        (Font):
        * platform/graphics/FontCache.cpp:
        (WebCore):
        * platform/graphics/FontCache.h:
        (FontCache):
        * platform/graphics/FontDescription.h:
        * platform/graphics/FontPlatformData.cpp:
        * platform/graphics/GlyphBuffer.h:
        (WebCore):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        * platform/graphics/GraphicsContext3D.h:
        (GraphicsContext3D):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::supportsBackgroundColorContent):
        * platform/graphics/Icon.h:
        (Icon):
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/ImageSource.h:
        (WebCore):
        * platform/graphics/IntRect.h:
        (IntRect):
        (WebCore):
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        (DerivedFontData):
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::resizeContext):
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore):
        (DrawingBuffer):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        * platform/image-decoders/ImageDecoder.h:
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::open):
        * platform/network/BlobRegistry.cpp:
        (WebCore::blobRegistry):
        * platform/network/BlobRegistryImpl.cpp:
        * platform/network/NetworkStateNotifier.cpp:
        * platform/network/NetworkStateNotifier.h:
        (NetworkStateNotifier):
        * platform/network/NetworkingContext.h:
        (NetworkingContext):
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore):
        * platform/text/cf/HyphenationCF.cpp:
        * plugins/PluginViewNone.cpp:
        (WebCore):
        * testing/Internals.cpp:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2013-04-07  Ed Bartosh  <bartosh@gmail.com>

        [EFL] --minimal build fails because of incorrect usage of GENERATE_THEME in CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=113902

        Unreviewed.

        * platform/efl/DefaultTheme/CMakeLists.txt:
        Put possibly empty variable after non-empty to avoid space
        at the beginning of string parameter

2013-04-07  Patrick Gansterer  <paroga@webkit.org>

        Add default implementation for KURL::fileSystemPath()
        https://bugs.webkit.org/show_bug.cgi?id=108326

        Reviewed by Benjamin Poulain.

        The code for KURL::fileSystemPath() has been duplicated in different ports.
        Add an implementation of this function to KURL.cpp for this ports and
        get rid of the very similar port specific implementation files.

        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformWinCE.cmake:
        * platform/KURL.cpp:
        (WebCore):
        (WebCore::KURL::fileSystemPath):
        * platform/blackberry/KURLBlackBerry.cpp: Removed.
        * platform/efl/KURLEfl.cpp: Removed.
        * platform/wince/KURLWinCE.cpp: Removed.
        * platform/wx/KURLWx.cpp: Removed.

2013-04-07  Patrick Gansterer  <paroga@webkit.org>

        Remove references to Skia and V8 from CMake files
        https://bugs.webkit.org/show_bug.cgi?id=114130

        Reviewed by Geoffrey Garen.

        * PlatformBlackBerry.cmake:

2013-04-07  David Kilzer  <ddkilzer@apple.com>

        Remove the rest of SVG_DOM_OBJC_BINDINGS
        <http://webkit.org/b/114112>

        Reviewed by Geoffrey Garen.

        * Configurations/WebCore.xcconfig:
        - Remove EXCLUDED_SOURCE_FILE_NAMES_SVG_DOM_OBJC_BINDINGS.  Note
          that DOMHTMLIFrameElementPrivate.h should not have been in
          this list because the class contained methods other than just
          -getSVGDocument.

        * WebCore.xcodeproj/project.pbxproj:
        - Remove DOMHTMLFrameElementPrivate.h since the only method it
          contained was -[DOMHTMLFrameElement getSVGDocument], which was
          part of the SVG DOM Objective-C bindings.

        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/objc/DOMEvents.mm:
        (kitClass):
        * bindings/objc/ExceptionHandlers.mm:
        (WebCore::raiseDOMException):
        - Remove code in ENABLE(SVG_DOM_OBJC_BINDINGS).

2013-04-07  Oliver Hunt  <oliver@apple.com>

        Inspector should display information about non-object exceptions
        https://bugs.webkit.org/show_bug.cgi?id=114123

        Reviewed by Adele Peterson.

        Make use of the stack trace for line information when we're reporting
        an exception

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):

2013-04-07  Robert Hogan  <robert@webkit.org>

        table element may get larger when its contents are recreated
        https://bugs.webkit.org/show_bug.cgi?id=111342

        Reviewed by Darin Adler.

        Remove anonymous table section wrappers when destroying their children.

        Test: fast/table/anonymous-table-section-removed.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers):

2013-04-07  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Fix build without precompiled header after r145827.

        * platform/ContextMenuItem.h:
        * platform/PlatformMenuDescription.h:

2013-04-07  Patrick Gansterer  <paroga@webkit.org>

        Fix compilation of LocaleWin with !ENABLE(CALENDAR_PICKER) && !ENABLE(DATE_AND_TIME_INPUT_TYPES)

        * platform/text/win/LocaleWin.cpp:
        (WebCore::LocaleWin::ensureShortMonthLabels):
        (WebCore):
        (WebCore::LocaleWin::ensureMonthLabels):

2013-04-07  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Fix build without precompiled header after r144216.

        * platform/network/cf/FormDataStreamCFNet.h:
        * platform/network/mac/FormDataStreamMac.h:

2013-04-07  Ed Bartosh  <bartosh@gmail.com>

        [EFL] --minimal build fails with error: WebCore::FrameSelection::notifyAccessibilityForSelectionChange()
        https://bugs.webkit.org/show_bug.cgi?id=114089

        Reviewed by Chris Fleizach.

        Wrapped accessibility related code in #if HAVE(ACCESSIBILITY)
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        * editing/FrameSelection.h:
        (WebCore):

2013-04-06  Benjamin Poulain  <benjamin@webkit.org>

        Get rid of skia
        https://bugs.webkit.org/show_bug.cgi?id=114108

        Reviewed by Anders Carlsson.

        * platform/graphics/filters/skia/*: Removed.
        * platform/graphics/skia/*: Removed.
        * platform/image-decoders/skia/*: Removed.
        * platform/image-encoders/skia/*: Removed.

2013-04-06  Benjamin Poulain  <benjamin@webkit.org>

        Remove the chromium code from platform/graphics/mac
        https://bugs.webkit.org/show_bug.cgi?id=114107

        Reviewed by Anders Carlsson.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::hasBrokenCTFontGetVerticalTranslationsForGlyphs):

2013-04-06  Benjamin Poulain  <benjamin@webkit.org>

        Clean platform/graphics/cg of the chromium bits
        https://bugs.webkit.org/show_bug.cgi?id=114106

        Reviewed by Anders Carlsson.

        * platform/graphics/cg/BitmapImageCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (GraphicsContextPlatformPrivate):
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageCG.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:

2013-04-06  Timothy Hatcher  <timothy@apple.com>

        Remove InjectedScriptHost.evaluateReturnsEvalFunction.

        https://webkit.org/b/114099

        * inspector/InjectedScriptHost.h:
        (InjectedScriptHost):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._evaluateOn):

2013-04-06  Benjamin Poulain  <bpoulain@apple.com>

        Remove the chromium code from WebCore/platform/mac
        https://bugs.webkit.org/show_bug.cgi?id=114104

        Reviewed by Sam Weinig.

        * platform/mac/NSScrollerImpDetails.h:
        (WebCore::isScrollbarOverlayAPIAvailable):
        * platform/mac/NSScrollerImpDetails.mm:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate layer]):
        (WebCore::scrollAnimationEnabledForSystem):
        * platform/mac/ScrollElasticityController.mm:
        (WebCore):
        * platform/mac/ScrollbarThemeMac.h:
        (ScrollbarThemeMac):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeMac::paint):
        (WebCore):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::ensuredView):
        * platform/mac/WebCoreNSCellExtras.h:

2013-04-06  Benjamin Poulain  <benjamin@webkit.org>

        Remove the Chromium code from Mac's FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=114103

        Reviewed by Sam Weinig.

        * platform/graphics/FontPlatformData.h:
        (WebCore):
        (FontPlatformData):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::ctFont):

2013-04-06  Oliver Hunt  <oliver@apple.com>

        Unify the many and varied stack trace mechanisms, and make the result sane.
        https://bugs.webkit.org/show_bug.cgi?id=114072

        Reviewed by Filip Pizlo.

        Now that we've fleshed out the StackFrames from Interpreter::getStackTrace
        WebCore can just ask us for a stack trace rather than implementing its own
        stack walking.

        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::isEqual):
        * inspector/ScriptCallFrame.h:
        (ScriptCallFrame):
        (WebCore::ScriptCallFrame::columnNumber):

2013-04-06  Geoffrey Garen  <ggaren@apple.com>

        Removed v8 bindings hooks from IDL files
        https://bugs.webkit.org/show_bug.cgi?id=114091

        Reviewed by Anders Carlsson and Sam Weinig.

        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/gamepad/NavigatorGamepad.idl:
        * Modules/geolocation/NavigatorGeolocation.idl:
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * Modules/indexeddb/WorkerContextIndexedDatabase.idl:
        * Modules/mediastream/DOMWindowMediaStream.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/notifications/DOMWindowNotifications.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/notifications/WorkerContextNotifications.idl:
        * Modules/quota/DOMWindowQuota.idl:
        * Modules/speech/DOMWindowSpeech.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * Modules/websockets/DOMWindowWebSocket.idl:
        * Modules/websockets/WorkerContextWebSocket.idl:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/ScriptController.h:
        (ScriptController):
        * bindings/scripts/test/TestNode.idl:
        * bindings/scripts/test/TestObj.idl:
        * css/CSSFontFaceLoadEvent.idl:
        * css/CSSHostRule.idl:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSValue.idl:
        * css/FontLoader.idl:
        * css/StyleSheet.idl:
        * css/WebKitCSSRegionRule.idl:
        * dom/Clipboard.idl:
        * dom/CustomElementConstructor.idl:
        * dom/CustomEvent.idl:
        * dom/DOMNamedFlowCollection.idl:
        * dom/DOMStringMap.idl:
        * dom/DataTransferItemList.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventTarget.idl:
        * dom/MessageChannel.idl:
        * dom/MouseEvent.idl:
        * dom/MutationRecord.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeList.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        (WebCore::HistoryItem::decodeBackForwardTree):
        * html/DOMSettableTokenList.idl:
        * html/DOMTokenList.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDialogElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLSpanElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTemplateElement.idl:
        * html/HTMLTrackElement.idl:
        * html/HTMLUnknownElement.idl:
        * html/MediaKeyError.idl:
        * html/MediaKeyEvent.idl:
        * html/MicroDataItemValue.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl:
        * html/shadow/HTMLContentElement.idl:
        * html/shadow/HTMLShadowElement.idl:
        * html/track/TextTrack.idl:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):
        (WebCore::InspectorIndexedDBAgent::clearObjectStore):
        (WebCore):
        * loader/EmptyClients.h:
        (EmptyFrameLoaderClient):
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        * page/Console.idl:
        * page/DOMWindow.idl:
        * page/DOMWindowPagePopup.idl:
        * page/History.idl:
        * page/Location.idl:
        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformDestroy):
        (WebCore::Pattern::platformPattern):
        * testing/Internals.cpp:
        (WebCore::Internals::serializeObject):
        (WebCore::Internals::deserializeBuffer):

2013-04-06  Zan Dobersek  <zdobersek@igalia.com>

        Remove the USE(SKIA_ON_MAC_CHROMIUM) guards
        https://bugs.webkit.org/show_bug.cgi?id=114084

        Reviewed by Ryosuke Niwa.

        Remove the USE(SKIA_ON_MAC_CHROMIUM) guards. The guards were enabled only
        for the Chromium port via the features.gypi file that was removed in r147714.

        * platform/graphics/FloatPoint.h:
        (FloatPoint):
        * platform/graphics/FloatRect.h:
        (FloatRect):
        * platform/graphics/FloatSize.h:
        (FloatSize):
        * platform/graphics/FontPlatformData.cpp:
        (WebCore):
        * platform/graphics/FontPlatformData.h:
        (FontPlatformData):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/IntPoint.h:
        (IntPoint):
        * platform/graphics/IntRect.h:
        (IntRect):
        (WebCore):
        * platform/graphics/IntSize.h:
        (IntSize):
        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        (WebCore::SimpleFontData::widthForGlyph):
        * platform/graphics/cg/FloatPointCG.cpp:
        * platform/graphics/cg/FloatRectCG.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/IntPointCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/cg/IntSizeCG.cpp:
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (FontCustomPlatformData):

2013-04-06  Robert Hogan  <robert@webkit.org>

        REGRESSION(r142152): Text wraps in menu
        https://bugs.webkit.org/show_bug.cgi?id=113706

        Reviewed by David Hyatt.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::inlineLogicalWidth): Empty inline elements add their inline border/padding/margin to the width of the
        line when we iterate through them in nextLineBreak(), so no need to add them again here when climbing back up
        from their first child looking for border/padding/margin to add. (An empty inline element can have floating children.)

2013-04-06  Geoffrey Garen  <ggaren@apple.com>

        Rolled out 147820 and 147818 because they caused plugins tests to ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=114094

        Reviewed by Anders Carlsson.

        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::isEqual):
        * inspector/ScriptCallFrame.h:
        (ScriptCallFrame):
        (WebCore::ScriptCallFrame::lineNumber):

2013-04-06  Anders Carlsson  <andersca@apple.com>

        Remove VisitedLinks.{cpp|h}
        https://bugs.webkit.org/show_bug.cgi?id=114095

        Reviewed by Geoffrey Garen.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/VisitedLinks.cpp: Removed.
        * platform/VisitedLinks.h: Removed.

2013-04-06  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        Actually remove the right files from WebCore.vcxproj.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-04-06  Anders Carlsson  <andersca@apple.com>

        Fix build.

        ThreadableLoaderClientWrapper was still calling didReceiveCachedMetadata; I didn't notice it
        because the file was not in the Xcode project so I went ahead and added it.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ThreadableLoaderClientWrapper.h:

2013-04-06  Anders Carlsson  <andersca@apple.com>

        Remove dead CachedMetadata code
        https://bugs.webkit.org/show_bug.cgi?id=114093

        Reviewed by Geoffrey Garen.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedMetadata.cpp: Removed.
        * loader/CachedMetadata.h: Removed.
        * loader/ResourceLoader.h:
        (ResourceLoader):
        * loader/SubresourceLoader.cpp:
        * loader/SubresourceLoader.h:
        (SubresourceLoader):
        * loader/ThreadableLoaderClient.h:
        * loader/WorkerThreadableLoader.cpp:
        * loader/WorkerThreadableLoader.h:
        (MainThreadBridge):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::reportMemoryUsage):
        * loader/cache/CachedResource.h:
        (WebCore):
        (CachedResource):
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        (ResourceHandle):
        * platform/network/ResourceHandleClient.h:
        (ResourceHandleClient):

2013-04-06  Anders Carlsson  <andersca@apple.com>

        Remove more dead Chromium code
        https://bugs.webkit.org/show_bug.cgi?id=114090

        Reviewed by Alp Toker.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/StatsCounter.cpp: Removed.
        * platform/StatsCounter.h: Removed.

2013-04-06  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r143046.

        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::Image::drawPattern):

2013-04-06  Mark Salisbury  <mark.salisbury@hp.com>

        [WinCE] Do not call missing method createDragImageFromImage()
        https://bugs.webkit.org/show_bug.cgi?id=110421

        * platform/win/ClipboardWin.cpp:

2013-04-05  Mark Salisbury  <mark.salisbury@hp.com>

        [WinCE] Compile missing NetworkStorageSession methods
        https://bugs.webkit.org/show_bug.cgi?id=110419

        * PlatformWinCE.cmake:

2013-04-05  Kangil Han  <kangil.han@samsung.com>

        Prefer prefix ++/-- operators for non-primitive types
        https://bugs.webkit.org/show_bug.cgi?id=114033

        Reviewed by Alexey Proskuryakov.

        Post ++/-- creates a copy of current value and it is not necessary, so use prefix instead.

        * bindings/js/Dictionary.cpp:
        (WebCore::Dictionary::getOwnPropertiesAsStringHashMap):
        (WebCore::Dictionary::getOwnPropertyNames):
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChildren):
        * dom/Range.cpp:
        (WebCore::Range::processAncestorsAndTheirSiblings):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachChildren):
        * platform/graphics/gpu/LoopBlinnPathProcessor.cpp:
        (WebCore):
        (WebCore::LoopBlinnPathProcessor::subdivideCurvesSlow):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::Function::setArguments):

2013-04-05  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Add support for the simple case of shape-margin polygonal shape-outside
        https://bugs.webkit.org/show_bug.cgi?id=113726

        Reviewed by Dirk Schulze.

        Add support for computing the shape-outside shape-margin boundary for a polygon.
        This change is similar to the one added for padding polygons, see bug 112592.
        The algorithm used for computing the margin boundary is is provisional. It works
        correctly for convex polygons and will work correctly for non self-intersecting
        polygons whose margin boundary is the same shape as the original polygon.

        Tests: fast/exclusions/shape-outside-floats/shape-outside-floats-diamond-margin-polygon.html
               fast/exclusions/shape-outside-floats/shape-outside-floats-left-margin-polygon.html
               fast/exclusions/shape-outside-floats/shape-outside-floats-right-margin-polygon.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::appendArc): Generalized this method a little, to deal with margin and padding connecting arcs.
        (WebCore::computeShapePaddingBounds): Pass the new appendArc() parameter.
        (WebCore::computeShapeMarginBounds): Compute the margin boundary for a polygon, per the constraints summarized above.
        (WebCore::ExclusionPolygon::getExcludedIntervals): Use the margin polygon for this computation.

2013-04-05  Andy Estes  <aestes@apple.com>

        Returning NULL from willSendRequest should cancel a load from the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=114075

        Reviewed by Darin Adler.

        When a resource is loaded from the memory cache and the client does not
        implement the didLoadResourceFromMemoryCache delegate method, WebKit
        synthesizes the typical sequence of resource load callbacks. One of
        these is willSendRequest, which gives the client the opportunity to
        modify the request. We should respect these modifications.

        Handling any arbitrary modification is difficult given where in the
        loading process we check the memory cache (see <http://webkit.org/b/113251>),
        but we can handle the common case where the client cancels the load by
        returning a NULL request.

        Test: fast/loader/willsendrequest-returns-null-for-memory-cache-load.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL): Passed request to sendRemainingDelegateMessages.
        (WebCore::FrameLoader::commitProvisionalLoad): Ditto.
        (WebCore::FrameLoader::loadResourceSynchronously): Ditto.
        (WebCore::FrameLoader::loadedResourceFromMemoryCache): Added an out
        parameter to pass back a request potentially modified by
        requestFromDelegate, which is also passed to sendRemainingDelegateMessages.
        * loader/FrameLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchDidFailLoading): Added a
        function to dispatch didFailLoading and to call the correct InspectorInstrumentation.
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages): If the
        request is NULL, call dispatchDidFailLoading and return. This matches
        the delegate callback sequence of a non memory cache load that is
        cancelled by willSendRequest.
        * loader/ResourceLoadNotifier.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldContinueAfterNotifyingLoadedFromMemoryCache):
        Return false if the memory cache load is cancelled by the client.
        (WebCore::CachedResourceLoader::requestResource): Return early if
        shouldContinueAfterNotifyingLoadedFromMemoryCache is false.

2013-04-05  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver can't press on items
        https://bugs.webkit.org/show_bug.cgi?id=114071

        Reviewed by Tim Horton.

        The AXScrollToVisibleAction should not be used on earlier Mac versions because
        it confuses VoiceOver.

        Updated existing tests.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityActionNames]):

2013-04-05  Anders Carlsson  <andersca@apple.com>

        Stop building Objective-C bindings for the SVG DOM
        https://bugs.webkit.org/show_bug.cgi?id=114076

        Reviewed by Geoffrey Garen.

        The DOM SVG Objective-C bindings have never been exposed as API, and not building them cuts WebCore build by 10%.

        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebCore.xcconfig:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        (kitClass):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * bindings/objc/DOMEvents.mm:
        * bindings/objc/DOMSVG.h: Removed.
        * bindings/objc/DOMSVGException.h: Removed.
        * bindings/objc/DOMSVGPathSegInternal.mm: Removed.
        * bindings/objc/ExceptionHandlers.mm:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLObjectElement.idl:

2013-04-05  Oliver Hunt  <oliver@apple.com>

        Unify the many and varied stack trace mechanisms, and make the result sane.
        https://bugs.webkit.org/show_bug.cgi?id=114072

        Reviewed by Filip Pizlo.

        Now that we've fleshed out the StackFrames from Interpreter::getStackTrace
        WebCore can just ask us for a stack trace rather than implementing its own
        stack walking.

        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::isEqual):
        * inspector/ScriptCallFrame.h:
        (ScriptCallFrame):
        (WebCore::ScriptCallFrame::columnNumber):

2013-04-05  Beth Dakin  <bdakin@apple.com>

        Setting a header or footer should cause a relayout
        https://bugs.webkit.org/show_bug.cgi?id=114070

        Reviewed by Sam Weinig.

        Mark the RenderView as needing layout in order to adjust everything for the new 
        header/footer.

        * page/FrameView.cpp:
        (WebCore::FrameView::setHeaderHeight):
        (WebCore::FrameView::setFooterHeight):

2013-04-05  Chris Fleizach  <cfleizach@apple.com>

        AX: Make SVG Group containers accessible elements
        https://bugs.webkit.org/show_bug.cgi?id=113939

        Reviewed by Simon Fraser.

        SVG group containers are currently not exposed in the AX tree. 
        When an SVG element has a <title> child, that is not being used for the AX label.
        When hit-testing, from Accessibility, SVG groups are never returned.

        All these issues are fixed for Mac and iOS.
        There are two tests because right now iOS skips all the top-level accessibility tests
        due to fundamental architectural differences.

        Tests: accessibility/svg-group-element-with-title.html
               platform/iphone-simulator/accessibility/svg-group-element-with-title.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper isSVGGroupElement]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper accessibilityClickPoint]):
        * rendering/HitTestRequest.h:
            Add a new option, AccessibilityHitTest, that will allow us to override normal behavior.
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
           Allow a SVG group to be the node at a point, for accessibility hit tests.

2013-04-05  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: event.elapsedTime is always 1364484608
        https://bugs.webkit.org/show_bug.cgi?id=114045

        Reviewed by Tim Horton.

        We were calculating elapsed time incorrectly.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-elapsed-time.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::fireEvent):

2013-04-05  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: crash at WebCore::SpeechSynthesis::speak
        https://bugs.webkit.org/show_bug.cgi?id=113937

        Reviewed by Tim Horton.

        Protect against the case when invalid data is passed in.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-crash-on-bad-utterance.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::speak):
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::setVoice):

2013-04-05  Antti Koivisto  <antti@apple.com>

        Throttle compositing layer flushes during page loading
        https://bugs.webkit.org/show_bug.cgi?id=113786

        Reviewed by Simon Fraser.
        
        Page content can change rapidly during page loading triggering excessive layer flushes and repainting. We should avoid this unnecessary work.
        
        This patch reduces layer flushes (and painting) during loading by 50-70% on many popular pages.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadProgressingStatusChanged):        
        * loader/FrameLoader.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::reset):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::isLoadProgressing):
        (WebCore::ProgressTracker::progressHeartbeatTimerFired):
        * loader/ProgressTracker.h:
        
            Track if the document load is progressing. This is done with a heartbeat timer that checks every 100ms if we have received more than 1k of data.
            If four heartbeats pass without progress then we consider the load stalled.

        * page/FrameView.cpp:
        (WebCore::FrameView::resetDeferredRepaintDelay):
        
            Disable throttling temporary on user interaction so the page stays as responsive as possible even during loading.

        (WebCore::FrameView::updateLayerFlushThrottling):
        
            Enable throttling when the load is progressing, disable otherwise.

        * page/FrameView.h:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::canThrottleLayerFlush):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerDidCreateTiles):
        (WebCore::GraphicsLayerCA::canThrottleLayerFlush):
        
            Don't throttle if new tiles have been added by the tile controller. They may have stale content and need to be flushed immediately.

        (WebCore::GraphicsLayerCA::noteLayerPropertyChanged):
        
            Set the new TilesAdded change flag.

        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::notifyFlushRequired):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::notifyFlushRequired):
        (WebCore::RenderLayerCompositor::scheduleLayerFlushNow):
        
            Factor the actual flush scheduling to private function.

        (WebCore::RenderLayerCompositor::scheduleLayerFlush):
        
            Mark the compositor for flush and return without flushing if the flushes are currently being throttled.

        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        
            After a flush, start the throtting timer (currently 0.5s) coalescing the subsequent flushes.

        (WebCore::RenderLayerCompositor::didChangeVisibleRect):
        
            Do immediately flush if needed.

        (WebCore::RenderLayerCompositor::setLayerFlushThrottlingEnabled):
        
            Flush immediately if disabled.

        (WebCore::RenderLayerCompositor::disableLayerFlushThrottlingTemporarilyForInteraction):
        (WebCore::RenderLayerCompositor::isThrottlingLayerFlushes):
        (WebCore::RenderLayerCompositor::startLayerFlushTimerIfNeeded):
        (WebCore::RenderLayerCompositor::layerFlushTimerFired):
        
            Flush when the timer fires timer.

        * rendering/RenderLayerCompositor.h:

2013-04-05  Benjamin Poulain  <benjamin@webkit.org>

        Clean the chromium bits of WebCore's WebDatabase
        https://bugs.webkit.org/show_bug.cgi?id=114010

        Reviewed by Ryosuke Niwa.

        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::performPreflight):
        (WebCore::ChangeVersionWrapper::performPostflight):
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/Database.h:
        (Database):
        * Modules/webdatabase/DatabaseBackend.cpp:
        (WebCore::DatabaseBackend::openAndVerifyVersion):
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DoneCreatingDatabaseOnExitCaller::~DoneCreatingDatabaseOnExitCaller):
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::getActualVersionForTransaction):
        (WebCore::DatabaseBackendBase::incrementalVacuumIfNeeded):
        * Modules/webdatabase/DatabaseBackendBase.h:
        (DatabaseBackendBase):
        * Modules/webdatabase/DatabaseBackendSync.cpp:
        (WebCore::DatabaseBackendSync::openAndVerifyVersion):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::databaseExceededQuota):
        * Modules/webdatabase/DatabaseManager.cpp:
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::initialize):
        (WebCore::DatabaseServer::setClient):
        (WebCore::DatabaseServer::databaseDirectoryPath):
        (WebCore::DatabaseServer::setDatabaseDirectoryPath):
        (WebCore::DatabaseServer::openDatabase):
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::DatabaseSync::changeVersion):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        * Modules/webdatabase/DatabaseTracker.h:
        (WebCore):
        (DatabaseTracker):
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::execute):
        (WebCore::SQLStatementBackend::setDatabaseDeletedError):
        (WebCore::SQLStatementBackend::setVersionMismatchedError):
        (WebCore::SQLStatementBackend::setFailureDueToQuota):
        * Modules/webdatabase/SQLStatementBackend.h:
        (SQLStatementBackend):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::deliverStatementCallback):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::executeSQL):
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        (WebCore::SQLTransactionBackend::runCurrentStatementAndGetNextState):
        (WebCore::SQLTransactionBackend::nextStateForCurrentStatementError):
        (WebCore::SQLTransactionBackend::postflightAndCommit):
        (WebCore::SQLTransactionBackend::acquireOriginLock):
        (WebCore::SQLTransactionBackend::releaseOriginLockIfNeeded):
        * Modules/webdatabase/SQLTransactionBackend.h:
        (SQLTransactionBackend):
        * Modules/webdatabase/SQLTransactionBackendSync.cpp:
        (WebCore::SQLTransactionBackendSync::begin):
        (WebCore::SQLTransactionBackendSync::commit):

2013-04-05  Geoffrey Garen  <ggaren@apple.com>

        Made USE(JSC) unconditional
        https://bugs.webkit.org/show_bug.cgi?id=114058

        Reviewed by Anders Carlsson.

        * Modules/webdatabase/Database.cpp:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/JavaScriptCallFrame.cpp:
        * bindings/js/JavaScriptCallFrame.h:
        * bindings/scripts/InFilesCompiler.pm:
        (generateHeadersHeader):
        * css/MediaQueryListListener.cpp:
        (WebCore::MediaQueryListListener::queryChanged):
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildRemovalEvents):
        * dom/EventListener.h:
        (EventListener):
        (WebCore::EventListener::visitJSFunction):
        * dom/EventTarget.h:
        (EventTarget):
        (WebCore):
        (WebCore::EventTarget::visitJSEventListeners):
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore):
        (WebCore::ScriptExecutionContext::globalData):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * inspector/InjectedScriptHost.h:
        (InjectedScriptHost):
        (WebCore::InjectedScriptHost::evaluateReturnsEvalFunction):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * page/Frame.cpp:
        * page/Settings.cpp:
        (WebCore):
        (WebCore::Settings::shouldRespectPriorityInCSSAttributeSetters):
        * page/Settings.h:
        (Settings):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::npObject):
        (WebCore):
        (WebCore::PluginView::bindingInstance):
        (WebCore::PluginView::privateBrowsingStateChanged):
        * plugins/PluginView.h:
        (PluginView):
        * plugins/PluginViewBase.h:
        (PluginViewBase):
        (WebCore::PluginViewBase::scriptObject):
        * plugins/PluginViewNone.cpp:
        (WebCore):
        (WebCore::PluginView::bindingInstance):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::setNPWindowIfNeeded):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):

2013-04-05  Roger Fong  <roger_fong@apple.com>

        More VS2010 solution makefile fixes.
        <rdar://problem/13588964>

        * WebCore.vcxproj/WebCore.make:

2013-04-05  Ed Bartosh  <bartosh@gmail.com>

        [EFL] --no-tiled-backing-store build fails because of not used #if USE(ACCELERATED_COMPOSITING)
        https://bugs.webkit.org/show_bug.cgi?id=113627

        Reviewed by Simon Fraser.

       Wrapped code with #if USE(ACCELERATED_COMPOSITING) to make it compilable
       with --no-tiled-backing-store build option:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * platform/graphics/TextTrackRepresentation.cpp:
        (NullTextTrackRepresentation):
        * platform/graphics/TextTrackRepresentation.h:
        (TextTrackRepresentation):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setFooterHeight):

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

        Remove the remaining Chromium files from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=114055

        Reviewed by Benjamin Poulain.

        Removed.

        * Resources/pagepopups/chromium: Removed.
        * Resources/pagepopups/chromium/calendarPickerChromium.css: Removed.
        * Resources/pagepopups/chromium/pickerCommonChromium.css: Removed.
        * html/shadow/MediaControlsChromium.cpp: Removed.
        * html/shadow/MediaControlsChromium.h: Removed.
        * html/shadow/MediaControlsChromiumAndroid.cpp: Removed.
        * html/shadow/MediaControlsChromiumAndroid.h: Removed.

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

        Remove Chromium code from WebCore/css
        https://bugs.webkit.org/show_bug.cgi?id=114052

        Reviewed by Benjamin Poulain.

        Removed.

        * css/mediaControlsChromium.css: Removed.
        * css/mediaControlsChromiumAndroid.css: Removed.
        * css/themeChromium.css: Removed.
        * css/themeChromiumAndroid.css: Removed.
        * css/themeChromiumLinux.css: Removed.
        * css/themeChromiumSkia.css: Removed.

2013-04-05  Brendan Long  <self@brendanlong.com>

        [GStreamer] Segfault when attempting to install missing plugins
        https://bugs.webkit.org/show_bug.cgi?id=114046
        
        gst_install_plugins_async expects a null terminated list, but we weren't
        adding a null terminator.

        Reviewed by Philippe Normand.

        No new tests since this just fixes a segfault.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):

2013-04-05  Benjamin Poulain  <benjamin@webkit.org>

        Remove the chromium code for WebCore's indexeddb module
        https://bugs.webkit.org/show_bug.cgi?id=114004

        Reviewed by Ryosuke Niwa.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::close):
        * Modules/indexeddb/IDBFactoryBackendInterface.cpp:
        * Modules/indexeddb/IDBTracing.h:

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

        Cleanup after git svn left empty directories.

        * loader/chromium: Removed.
        * page/chromium: Removed.
        * page/scrolling/chromium: Removed.
        * plugins/chromium: Removed.

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

        Actually delete platform/chromium.

        * platform/chromium: Removed.

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

        Remove Chromium code from WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=114014

        Reviewed by Anders Carlsson.

        Removed.

        * platform/audio/chromium: Removed.
        * platform/audio/chromium/AudioBusChromium.cpp: Removed.
        * platform/audio/chromium/AudioDestinationChromium.cpp: Removed.
        * platform/audio/chromium/AudioDestinationChromium.h: Removed.
        * platform/audio/chromium/FFTFrameOpenMAXDLAndroid.cpp: Removed.
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/chromium: Removed.
        * platform/graphics/chromium/AnimationTranslationUtil.cpp: Removed.
        * platform/graphics/chromium/AnimationTranslationUtil.h: Removed.
        * platform/graphics/chromium/Canvas2DLayerBridge.cpp: Removed.
        * platform/graphics/chromium/Canvas2DLayerBridge.h: Removed.
        * platform/graphics/chromium/Canvas2DLayerManager.cpp: Removed.
        * platform/graphics/chromium/Canvas2DLayerManager.h: Removed.
        * platform/graphics/chromium/CrossProcessFontLoading.h: Removed.
        * platform/graphics/chromium/CrossProcessFontLoading.mm: Removed.
        * platform/graphics/chromium/DeferredImageDecoder.cpp: Removed.
        * platform/graphics/chromium/DeferredImageDecoder.h: Removed.
        * platform/graphics/chromium/DiscardablePixelRef.cpp: Removed.
        * platform/graphics/chromium/DiscardablePixelRef.h: Removed.
        * platform/graphics/chromium/DrawingBufferChromium.cpp: Removed.
        * platform/graphics/chromium/Extensions3DChromium.h: Removed.
        * platform/graphics/chromium/FontCacheAndroid.cpp: Removed.
        * platform/graphics/chromium/FontCacheChromiumLinux.cpp: Removed.
        * platform/graphics/chromium/FontCacheChromiumWin.cpp: Removed.
        * platform/graphics/chromium/FontChromiumWin.cpp: Removed.
        * platform/graphics/chromium/FontPlatformData.h: Removed.
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp: Removed.
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h: Removed.
        * platform/graphics/chromium/FontRenderStyle.h: Removed.
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp: Removed.
        * platform/graphics/chromium/FontUtilsChromiumWin.h: Removed.
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp: Removed.
        * platform/graphics/chromium/GraphicsLayerChromium.cpp: Removed.
        * platform/graphics/chromium/GraphicsLayerChromium.h: Removed.
        * platform/graphics/chromium/IconChromium.cpp: Removed.
        * platform/graphics/chromium/IconChromiumAndroid.cpp: Removed.
        * platform/graphics/chromium/ImageBufferDataSkia.h: Removed.
        * platform/graphics/chromium/ImageChromium.cpp: Removed.
        * platform/graphics/chromium/ImageDecodingStore.cpp: Removed.
        * platform/graphics/chromium/ImageDecodingStore.h: Removed.
        * platform/graphics/chromium/ImageFrameGenerator.cpp: Removed.
        * platform/graphics/chromium/ImageFrameGenerator.h: Removed.
        * platform/graphics/chromium/LayerPainterChromium.h: Removed.
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp: Removed.
        * platform/graphics/chromium/LazyDecodingPixelRef.h: Removed.
        * platform/graphics/chromium/MediaPlayerPrivateChromium.cpp: Removed.
        * platform/graphics/chromium/MediaPlayerPrivateChromium.h: Removed.
        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp: Removed.
        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h: Removed.
        * platform/graphics/chromium/PlatformIcon.h: Removed.
        * platform/graphics/chromium/ScaledImageFragment.cpp: Removed.
        * platform/graphics/chromium/ScaledImageFragment.h: Removed.
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp: Removed.
        * platform/graphics/chromium/SkSizeHash.h: Removed.
        * platform/graphics/chromium/TextureUploader.h: Removed.
        * platform/graphics/chromium/ThreadSafeDataTransport.cpp: Removed.
        * platform/graphics/chromium/ThreadSafeDataTransport.h: Removed.
        * platform/graphics/chromium/TransformSkMatrix44Conversions.cpp: Removed.
        * platform/graphics/chromium/TransformSkMatrix44Conversions.h: Removed.
        * platform/graphics/chromium/TransparencyWin.cpp: Removed.
        * platform/graphics/chromium/TransparencyWin.h: Removed.
        * platform/graphics/chromium/UniscribeHelper.cpp: Removed.
        * platform/graphics/chromium/UniscribeHelper.h: Removed.
        * platform/graphics/chromium/UniscribeHelperTextRun.cpp: Removed.
        * platform/graphics/chromium/UniscribeHelperTextRun.h: Removed.
        * platform/graphics/chromium/VDMXParser.cpp: Removed.
        * platform/graphics/chromium/VDMXParser.h: Removed.
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3DImpl::getOrCreateContext):
        * platform/mediastream/chromium: Removed.
        * platform/mediastream/chromium/MediaStreamCenterChromium.cpp: Removed.
        * platform/mediastream/chromium/MediaStreamCenterChromium.h: Removed.
        * platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.cpp: Removed.
        * platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.h: Removed.
        * platform/mediastream/chromium/RTCDataChannelHandlerChromium.cpp: Removed.
        * platform/mediastream/chromium/RTCDataChannelHandlerChromium.h: Removed.
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp: Removed.
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h: Removed.
        * platform/network/chromium: Removed.
        * platform/network/chromium/AuthenticationChallenge.h: Removed.
        * platform/network/chromium/AuthenticationChallengeChromium.cpp: Removed.
        * platform/network/chromium/BlobRegistryProxy.cpp: Removed.
        * platform/network/chromium/BlobRegistryProxy.h: Removed.
        * platform/network/chromium/CookieJarChromium.cpp: Removed.
        * platform/network/chromium/DNSChromium.cpp: Removed.
        * platform/network/chromium/ResourceError.h: Removed.
        * platform/network/chromium/ResourceHandle.cpp: Removed.
        * platform/network/chromium/ResourceHandleInternal.h: Removed.
        * platform/network/chromium/ResourceRequest.cpp: Removed.
        * platform/network/chromium/ResourceRequest.h: Removed.
        * platform/network/chromium/ResourceResponse.cpp: Removed.
        * platform/network/chromium/ResourceResponse.h: Removed.
        * platform/network/chromium/SocketStreamError.h: Removed.
        * platform/network/chromium/SocketStreamHandle.cpp: Removed.
        * platform/network/chromium/SocketStreamHandle.h: Removed.
        * platform/network/chromium/SocketStreamHandleInternal.h: Removed.
        * platform/sql/chromium: Removed.
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp: Removed.
        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp: Removed.
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp: Removed.
        * platform/text/chromium: Removed.
        * platform/text/chromium/Hyphenation.cpp: Removed.
        * platform/text/chromium/TextBreakIteratorInternalICUChromium.cpp: Removed.

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

        Remove Chromium code from WebCore/workers
        https://bugs.webkit.org/show_bug.cgi?id=114050

        Reviewed by Anders Carlsson.

        Removed.

        * workers/WorkerLoaderProxy.h:
        (WorkerLoaderProxy):
        * workers/chromium: Removed.

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

        Remove Chromium code from WebCore/storage
        https://bugs.webkit.org/show_bug.cgi?id=114049

        Reviewed by Anders Carlsson.

        Removed.

        * storage/StorageNamespace.cpp:
        * storage/chromium: Removed.

2013-04-05  Seokju Kwon  <seokju.kwon@gmail.com>

        [SOUP] Remove unnecessary explicit keyword in SocketStreamError.h
        https://bugs.webkit.org/show_bug.cgi?id=113913

        Reviewed by Martin Robinson.

        No new tests, just removing an unnecessary code.

        * platform/network/soup/SocketStreamError.h:
        (WebCore::SocketStreamError::SocketStreamError):

2013-04-05  Zan Dobersek  <zdobersek@igalia.com>

        Remove WTF_USE_GOOGLEURL-guarded code
        https://bugs.webkit.org/show_bug.cgi?id=114028

        Reviewed by Ryosuke Niwa.

        The only remaining usage of the USE(GOOGLEURL) guards is in LinkHashChromium.cpp that will
        get removed when purging the Source/WebCore/platform/chromium directory.

        * config.h: Remove the define that was Chromium-specific.
        * platform/KURL.cpp:
        (WebCore):
        (WebCore::KURL::reportMemoryUsage):
        (WebCore::KURL::isSafeToSendToAnotherThread):
        * platform/KURL.h:
        (KURL):
        * platform/KURLGoogle.cpp: Removed.
        * platform/KURLGooglePrivate.h: Removed.

2013-04-05  Bem Jones-Bey  <bjonesbe@adobe.com>

        [regression] Security: Heap-use-after-free in WebCore::RenderBlock::logicalRightOffsetForLine
        https://bugs.webkit.org/show_bug.cgi?id=111594

        Reviewed by David Hyatt.

        Swapping the bases was causing any floats in the right base to be
        lost, so change the code so that it no longer swaps the bases.

        Test: fast/ruby/float-object-doesnt-crash.html

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild): Don't swap the bases anymore.

2013-04-05  Anders Carlsson  <andersca@apple.com>

        Remove dead code
        https://bugs.webkit.org/show_bug.cgi?id=114043

        Reviewed by Beth Dakin.

        * platform/PublicSuffix.h:

2013-04-05  Anders Carlsson  <andersca@apple.com>

        Remove dead Chromium code from WebCore/workers
        https://bugs.webkit.org/show_bug.cgi?id=114039

        Reviewed by Antti Koivisto.

        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerContextProxy::create):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::WorkerScriptLoader):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        * workers/chromium/WorkerContextProxyChromium.cpp: Removed.
        * workers/chromium/WorkerContextProxyChromium.h: Removed.

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

        Remove Chromium code from WebCore/plugins
        https://bugs.webkit.org/show_bug.cgi?id=114015

        Reviewed by Andreas Kling.

        Removed.

        * plugins/chromium: Removed.
        * plugins/chromium/PluginDataChromium.cpp: Removed.
        * plugins/chromium/PluginDataChromium.h: Removed.
        * plugins/chromium/PluginListBuilder.cpp: Removed.
        * plugins/chromium/PluginListBuilder.h: Removed.

2013-04-05  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 Allan Sandfeld Jensen.
        
        Remove optimization added in r99752 that attempted to avoid clip rect
        updates for table cells. As the assertions show, this optimization
        is not always correct, so remove it. Bug 108272 tracks adding it back in.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll): Remove m_canSkipRepaintRectsUpdateOnScroll
        check when updating clip rects.
        * rendering/RenderLayer.h: Remove the m_canSkipRepaintRectsUpdateOnScroll bit.

2013-04-05  Bear Travis  <betravis@adobe.com>

        [css exclusions] Dynamically removing shape-inside should cause relayout of child blocks' inline content
        https://bugs.webkit.org/show_bug.cgi?id=111029

        Reviewed by David Hyatt.

        Preserve a removed ExclusionShapeInsideInfo for one additional layout pass
        so that it can notify descendant inline content to relayout. This patch adds
        a new 'needsRemoval' boolean to ExclusionShapeInsideInfo, which is set when
        a style change removes but does not replace a shape-inside. When determining
        whether a block needs to relayout inline children, ExclusionShapeInsideInfos with
        the needsRemoval boolean set are included, but at other times (such as during
        inline layout), they are ignored.

        Added tests to the existing dynamic shape testfile
        fast/exclusions/shape-inside/shape-inside-dynamic-nested.html

        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::setNeedsRemoval): Get/Set the
        needsRemoval boolean.
        (WebCore::ExclusionShapeInsideInfo::needsRemoval): Ditto.
        (ExclusionShapeInsideInfo):
        (WebCore::ExclusionShapeInsideInfo::ExclusionShapeInsideInfo):
        Initialize the needsRemoval boolean.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState): Propagate removed shape insides
        for layout correctly. You only need to track one at a time, and a
        removed shape inside should not take precedence over a set shape-inside.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateExclusionShapeInsideInfoAfterStyleChange):
        Set the ExclusionShapeInsideInfo needsRemoval boolean, rather than immediately
        removing the info.
        (WebCore::exclusionInfoRequiresRelayout): Account for the needsRemoval
        boolean as another way of requiring relayout.
        (WebCore::RenderBlock::updateRegionsAndExclusionsBeforeChildLayout):
        Look up whether an ExclusionShapeInsideInfo has been removed.
        (WebCore::RenderBlock::updateRegionsAndExclusionsAfterChildLayout):
        Remove any ExclusionShapeInsides marked for removal after a layout pass.
        (WebCore):
        (WebCore::RenderBlock::layoutBlock): Call the new updateRegionsAndExclusions
        Before/After methods.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::exclusionShapeInsideInfo): Filter the result based
        on whether it should include removed infos.
        (RenderBlock):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutExclusionShapeInsideInfo): Ditto.
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock): 
        Same as RenderBlock::layoutBlock.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Ditto.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock): Ditto.

2013-04-05  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Elements in a region should be assignable to a named flow
        https://bugs.webkit.org/show_bug.cgi?id=74144

        Reviewed by David Hyatt.

        DOM children of a region must not be rendered as children of the region, but can be collected in flow threads.

        NodeRenderingContext::parentRenderer now creates the parent render flow thread if it doesn't exist.

        Element::moveToFlowThreadIsNeeded is a virtual method that is overriden in PseudoElement to return false and
        in SVGElement so only svg root elements can directly be collected by a render flow thread.

        RenderObject::canDOMChildrenHaveRenderParent exists to optimize the code so nodes inside regions (and maybe
        other types of renderers in the future) can still have renderers if they need to be in a flow thread while the
        rest of renderers that can't have children skip the new instructions.

        Tests: fast/regions/flow-body-in-html.html . To test the duplicate bug #103685.
               fast/regions/region-content-flown-into-region.html
               fast/regions/universal-selector-children-to-the-same-region.html . To test the duplicate bug #103685.

        * dom/Element.cpp:
        (WebCore::Element::moveToFlowThreadIsNeeded):
        * dom/Element.h:
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::parentRenderer): the renderer that will be the parent for this node's renderer.
        In the case of RenderFlowThreads, it may need to create it.
        (WebCore::NodeRenderingContext::shouldCreateRenderer): In a region, only the children that need to be in a flow
        thread should have a renderer.
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        (WebCore::NodeRenderingContext::moveToFlowThread):
        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        * dom/PseudoElement.h: pseudo-elements cannot be directly collected into a named flow.
        * dom/Text.cpp:
        (WebCore::Text::textRendererIsNeeded):
        (WebCore::Text::updateTextRenderer): Because calling textRendererIsNeeded(NodeRenderingContext(...)) on a
        non-const l-value NodeRenderingContext cannot be done on a temporary object on the stack.
        * dom/Text.h:
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::isContentNodeRegisteredWithAnyNamedFlow):
        * rendering/FlowThreadController.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::canDOMChildrenHaveRenderParent): Even if this render object can't have render children,
        the children in the DOM tree may have a render parent (that is different from this render object).
        * rendering/RenderRegion.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::moveToFlowThreadIsNeeded): Allow only svg root elements to be directly collected by a
        render flow thread.
        * svg/SVGElement.h:
        (SVGElement):

2013-04-05  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Fix GCC with C++11 build
        https://bugs.webkit.org/show_bug.cgi?id=111579

        Reviewed by Anders Carlsson.

        If the destructor is private, MemoryInstrumentation can not create an inherited class.

        * css/PropertySetCSSStyleDeclaration.h:
        (StyleRuleCSSStyleDeclaration):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * loader/SubresourceLoader.h:
        (SubresourceLoader):
        * platform/Timer.h:

2013-03-28  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Create ShadowBlur on demand.
        https://bugs.webkit.org/show_bug.cgi?id=113506

        Reviewed by Noam Rosenthal.

        This patch creates ShadowBlur objects on demand instead of keeping a single one alive for
        each GraphicsContext. This matches what other platforms does and fixes the problem with 
        an active shadowblur being affected by changing shadow settings on the GraphicsContext.

        The method mustUseShadowBlur is moved from ShadowBlur to GraphcisContext, so that it can
        be used to determine if a ShadowBlur object should even be generated.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::hasBlurredShadow):
        (WebCore::GraphicsContext::mustUseShadowBlur):
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::ShadowBlur):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::drawGlyphsShadow):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawQtGlyphRun):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):

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

        Remove Chromium code from WebCore/page
        https://bugs.webkit.org/show_bug.cgi?id=114013

        Reviewed by Anders Carlsson.

        Removed.

        * page/Console.cpp:
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):
        * page/EventHandler.cpp:
        (WebCore::shouldGesturesTriggerActive):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore):
        (WebCore::EventHandler::sendScrollEventToView):
        * page/FeatureObserver.cpp:
        (WebCore::FeatureObserver::updateMeasurements):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::useSlowRepaints):
        * page/PageConsole.cpp:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::isLinkVisited):
        (WebCore::PageGroup::addVisitedLink):
        * page/Settings.cpp:
        (WebCore):
        * page/android: Removed.
        * page/chromium: Removed.
        * page/chromium/ChromeClientChromium.h: Removed.
        * page/chromium/DragControllerChromium.cpp: Removed.
        * page/chromium/EventHandlerChromium.cpp: Removed.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        (WebCore):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore):
        * page/scrolling/ScrollingTree.h:
        (ScrollingTree):
        * page/scrolling/chromium: Removed.
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp: Removed.
        * page/scrolling/chromium/ScrollingCoordinatorChromium.h: Removed.

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

        Remove Chromium code from WebCore/rendering
        https://bugs.webkit.org/show_bug.cgi?id=114017

        Reviewed by Simon Fraser.

        Removed.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::requiresHorizontalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresVerticalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresScrollCornerLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents):
        (WebCore::shouldCompositeOverflowControls):
        (WebCore::RenderLayerCompositor::requiresOverhangAreasLayer):
        * rendering/RenderMediaControlsChromium.cpp: Removed.
        * rendering/RenderMediaControlsChromium.h: Removed.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):
        * rendering/RenderText.cpp:
        (WebCore):
        (WebCore::RenderText::previousOffsetForBackwardDeletion):
        * rendering/RenderThemeChromiumAndroid.cpp: Removed.
        * rendering/RenderThemeChromiumAndroid.h: Removed.
        * rendering/RenderThemeChromiumCommon.cpp: Removed.
        * rendering/RenderThemeChromiumCommon.h: Removed.
        * rendering/RenderThemeChromiumDefault.cpp: Removed.
        * rendering/RenderThemeChromiumDefault.h: Removed.
        * rendering/RenderThemeChromiumFontProvider.cpp: Removed.
        * rendering/RenderThemeChromiumFontProvider.h: Removed.
        * rendering/RenderThemeChromiumFontProviderLinux.cpp: Removed.
        * rendering/RenderThemeChromiumFontProviderWin.cpp: Removed.
        * rendering/RenderThemeChromiumMac.h: Removed.
        * rendering/RenderThemeChromiumMac.mm: Removed.
        * rendering/RenderThemeChromiumSkia.cpp: Removed.
        * rendering/RenderThemeChromiumSkia.h: Removed.
        * rendering/RenderThemeChromiumWin.cpp: Removed.
        * rendering/RenderThemeChromiumWin.h: Removed.
        * rendering/RenderThemeMacShared.mm:
        (WebCore::RenderThemeMacShared::paintSliderThumb):

2013-04-05  Noam Rosenthal  <noam@webkit.org>

        [Texmap] css3/filters/filter-animation-from-none-hw.html does not animate
        https://bugs.webkit.org/show_bug.cgi?id=114026

        Reviewed by Allan Sandfeld Jensen.

        Allow the filter's blending function to take place when animating from/to none.

        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore::applyFilterAnimation):

2013-04-05  Noam Rosenthal  <noam@webkit.org>

        [CoordGfx] Enable filter animations
        https://bugs.webkit.org/show_bug.cgi?id=114027

        Reviewed by Allan Sandfeld Jensen.

        Allow CoordinatedGraphicsLayer to serialize filter animations to the UI process.

        Covered by animation tests in css3/filters.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addAnimation):

2013-04-05  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Avoid double hash table lookups in TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=114030

        Reviewed by Noam Rosenthal.

        Use Vector::add() and leverage its returned AddResult value instead of
        calling Vector::find() then Vector::set() if the key does not already
        exist in the map. This results in a single hash lookup instead of two
        in this case.

        No new tests, no behavior change.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::SharedGLData::getShaderProgram):
        (WebCore::TextureMapperGLData::getStaticVBO):
        (WebCore::TextureMapperGL::drawUsingCustomFilter):

2013-04-05  Aivo Paas  <aivopaas@gmail.com>

        Updating mouse cursor on style changes without emitting fake mousemove event
        https://bugs.webkit.org/show_bug.cgi?id=101857

        Reviewed by Allan Sandfeld Jensen.

        Mouse cursor changes in styles used to be reflected in UI through dispatching a fake
        mousemove event. The old approach has some flaws: it emits a mousemove event in
        javascript when there is no mouse movement involved (bug 85343); the fake mousemove
        event is cancelled while there is a mouse button held down - cursor won't change
        until mouse is moved or the button released (bug 53341).

        The new approach does not use the fake mousemove event. Instead, it uses only the logic
        needed for the actual cursor change to happen.

        EventHandler::selectCursor was refactored to not take a whole mouse event but instead work with
        HitTestResult so that EventHandler::updateCursor must not create a useless PlatformEvent.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=85343 (mousemove event on cursor change)
               https://bugs.webkit.org/show_bug.cgi?id=53341 (no cursor change when mouse button down)

        Tests: fast/events/mouse-cursor-change.html
               fast/events/mouse-cursor-no-mousemove.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::cursorUpdateTimerFired):
        (WebCore::EventHandler::updateCursor):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::scheduleCursorUpdate):
        * page/EventHandler.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldSetCursor):
        * page/FrameView.h:
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::isOverLink):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isOverLink):
        * rendering/HitTestResult.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleDidChange):

2013-04-05  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] PluginsX11: exposedRect offset is applied twice when painting windowless
        https://bugs.webkit.org/show_bug.cgi?id=114020

        Reviewed by Simon Hausmann.

        Both XGetImage and QPainter::drawImage would apply the offset.
        Since the XImage will only contain the exposed rect, no need to specify
        the source rect to drawImage.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paintUsingXPixmap):

2013-04-05  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: crash in InspectorDOMAgent::innerHighlightQuad after r147566
        https://bugs.webkit.org/show_bug.cgi?id=113991

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::innerHighlightQuad):

2013-04-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r145279): Build fails while linking when MEDIA_STREAM is enabled
        https://bugs.webkit.org/show_bug.cgi?id=113294

        Reviewed by Xan Lopez.

        In r145279 NamedGetter extended attribute is added to
        RTCStatsResponse.idl which makes the code generator to add
        prototypes for JSRTCStatsResponse::nameGetter and
        JSRTCStatsResponse::canGetItemsForName to the generated
        JSRTCStatsResponse header, but they are not implemented
        anywhere. We need to provide a JSRTCStatsResponseCustom file with
        the implementation of both functions.

        * GNUmakefile.list.am: Add JSRTCStatsResponseCustom.cpp to
        compilation.
        * Target.pri: Ditto.
        * UseJSC.cmake: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * bindings/js/JSRTCStatsResponseCustom.cpp: Added.
        (WebCore):
        (WebCore::JSRTCStatsResponse::canGetItemsForName):
        (WebCore::JSRTCStatsResponse::nameGetter):

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

        Remove Chromium code from WebCore/loader
        https://bugs.webkit.org/show_bug.cgi?id=114011

        Reviewed by Benjamin Poulain.

        Removed.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::defaultObjectContentType):
        (WebCore):
        * loader/FrameLoader.h:
        (FrameLoader):
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        * loader/ResourceLoadScheduler.cpp:
        (WebCore):
        (WebCore::ResourceLoadScheduler::ResourceLoadScheduler):
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/ThreadableLoaderClient.h:
        (ThreadableLoaderClient):
        * loader/ThreadableLoaderClientWrapper.h:
        (ThreadableLoaderClientWrapper):
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore):
        (ApplicationCacheHost):
        * loader/cache/CachedRawResource.h:
        (CachedRawResource):
        (WebCore::CachedRawResourceClient::redirectReceived):
        * loader/cache/CachedResource.cpp:
        (WebCore):
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::didSendData):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::preload):
        * loader/chromium: Removed.
        * loader/chromium/CachedRawResourceChromium.cpp: Removed.
        * loader/chromium/DocumentThreadableLoaderChromium.cpp: Removed.
        * loader/chromium/ResourceLoaderChromium.cpp: Removed.
        * loader/chromium/SubresourceLoaderChromium.cpp: Removed.

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

        Remove Chromium code from WebCore/editing
        https://bugs.webkit.org/show_bug.cgi?id=114008

        Reviewed by Benjamin Poulain.

        Removed.

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldAllowSpellingSuggestionsWithoutSelection):
        * editing/FrameSelection.h:
        (WebCore):
        * editing/chromium: Removed.
        * editing/chromium/EditorChromium.cpp: Removed.
        * editing/chromium/FrameSelectionChromium.cpp: Removed.

2013-04-05  Benjamin Poulain  <benjamin@webkit.org>

        Remove the chromium code from the filesystem module
        https://bugs.webkit.org/show_bug.cgi?id=114002

        Reviewed by Ryosuke Niwa.

        * Modules/filesystem/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::createFileSystemURL):
        * Modules/filesystem/FileSystemType.h:
        * Modules/filesystem/LocalFileSystem.cpp:
        * Modules/filesystem/LocalFileSystem.h:
        (LocalFileSystem):

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

        Remove Chromium code from Source/WebCore/dom
        https://bugs.webkit.org/show_bug.cgi?id=114007

        Reviewed by Benjamin Poulain.

        Removed.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::implicitClose):
        (WebCore::Document::setFocusedNode):
        * dom/MessagePortChannel.h:
        (MessagePortChannel):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/default/chromium: Removed.
        * dom/default/chromium/PlatformMessagePortChannelChromium.cpp: Removed.
        * dom/default/chromium/PlatformMessagePortChannelChromium.h: Removed.

2013-04-05  Benjamin Poulain  <benjamin@webkit.org>

        Remove the chromium directories from WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=114000

        Reviewed by Ryosuke Niwa.

        First step in cleaning the code: remove the chromium-specific files.

        * Modules/filesystem/chromium/DOMFileSystemChromium.cpp: Removed.
        * Modules/filesystem/chromium/DataTransferItemFileSystemChromium.cpp: Removed.
        * Modules/filesystem/chromium/DraggedIsolatedFileSystem.cpp: Removed.
        * Modules/filesystem/chromium/DraggedIsolatedFileSystem.h: Removed.
        * Modules/indexeddb/chromium/IDBFactoryBackendInterfaceChromium.cpp: Removed.
        * Modules/indexeddb/chromium/IDBFactoryBackendInterfaceChromium.h: Removed.
        * Modules/speech/chromium/SpeechSynthesisChromium.cpp: Removed.
        * Modules/webdatabase/chromium/DatabaseObserver.h: Removed.
        * Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp: Removed.
        * Modules/webdatabase/chromium/QuotaTracker.cpp: Removed.
        * Modules/webdatabase/chromium/QuotaTracker.h: Removed.
        * Modules/webdatabase/chromium/SQLTransactionClientChromium.cpp: Removed.

2013-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Chromium code from WebCore/accessibility
        https://bugs.webkit.org/show_bug.cgi?id=114001

        Reviewed by Benjamin Poulain.

        Removed.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::detach):
        (WebCore::AccessibilityObject::isDetached):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        * accessibility/chromium: Removed.
        * accessibility/chromium/AXObjectCacheChromium.cpp: Removed.
        * accessibility/chromium/AccessibilityObjectChromium.cpp: Removed.

2013-04-05  Benjamin Poulain  <bpoulain@apple.com>

        Remove WTFURL from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=113994

        Reviewed by Ryosuke Niwa.

        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/KURL.cpp:
        (WebCore):
        (WebCore::KURL::reportMemoryUsage):
        (WebCore::KURL::isSafeToSendToAnotherThread):
        * platform/KURL.h:
        (KURL):
        (WebCore):
        * platform/KURLWTFURL.cpp: Removed.
        * platform/KURLWTFURLImpl.h: Removed.
        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::KURL):
        (WebCore::KURL::createCFURL):
        (WebCore):
        * platform/mac/KURLMac.mm:
        (WebCore::KURL::KURL):
        (WebCore::KURL::createCFURL):

2013-04-04  peavo@outlook.com  <peavo@outlook.com>

        WinCairo build fails to link.
        https://bugs.webkit.org/show_bug.cgi?id=113873

        Reviewed by Brent Fulgham.

        Removed double guards for USE(ACCELERATED_COMPOSITING),
        and moved methods out of USE(ACCELERATED_COMPOSITING) guard to fix linker errors. 

        * page/FrameView.cpp:
        (WebCore::FrameView::setWantsLayerForTopOverHangArea):
        (WebCore::FrameView::setWantsLayerForBottomOverHangArea):
        (WebCore::FrameView::setWantsLayerForHeader):
        (WebCore::FrameView::setWantsLayerForFooter):
        (WebCore::FrameView::setHeaderHeight):
        (WebCore::FrameView::setFooterHeight):

2013-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        Remove code for 10.5 and earlier from Source/WebCore
        https://bugs.webkit.org/show_bug.cgi?id=113754

        Reviewed by Benjamin Poulain.

        Removed the code for 10.5 and removed if-def for 10.6.

        * WebCore.xcodeproj/project.pbxproj:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * platform/LocalizedStrings.cpp:
        (WebCore::imageTitle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setAllowsFontSmoothing):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::clear):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::boundingRect):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore):
        (WebCore::FontPlatformData::ctFont):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsFullscreen):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore):
        (WebCore::fontCacheRegisteredFontsChangedNotificationCallback):
        (WebCore::FontCache::platformInit):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
        (WebCore::MediaPlayerPrivateQTKit::supportsFullscreen):
        (WebCore::MediaPlayerPrivateQTKit::setClosedCaptionsVisible):
        (WebCore::MediaPlayerPrivateQTKit::cacheMovieScale):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/mac/WebLayer.h:
        * platform/mac/CursorMac.mm:
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/mac/DisplaySleepDisabler.cpp:
        (WebCore::DisplaySleepDisabler::DisplaySleepDisabler):
        (WebCore):
        * platform/mac/DisplaySleepDisabler.h:
        (DisplaySleepDisabler):
        * platform/mac/EmptyProtocolDefinitions.h:
        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm:
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenuMac::populate):
        * platform/mac/ScrollElasticityController.mm:
        (systemUptime):
        * platform/mac/SharedTimerMac.mm:
        (PowerObserver):
        (WebCore::PowerObserver::PowerObserver):
        (WebCore::PowerObserver::~PowerObserver):
        (WebCore::PowerObserver::didReceiveSystemPowerNotification):
        * platform/mac/SuddenTermination.mm:
        * platform/mac/WebCoreFullScreenWindow.mm:
        (-[WebCoreFullScreenWindow initWithContentRect:styleMask:backing:defer:]):
        * platform/mac/WebFontCache.mm:
        (+[WebFontCache getTraits:inFamily:]):
        (+[WebFontCache internalFontWithFamily:traits:weight:size:]):
        * platform/mac/WebVideoFullscreenController.mm:
        (SOFT_LINK_POINTER):
        (-[WebVideoFullscreenController updateMenuAndDockForFullscreen]):
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (createControlWithMediaUIControlType):
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]):
        * platform/network/Credential.h:
        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences):
        * platform/network/cf/ProxyServerCFNet.cpp:
        (WebCore):
        (WebCore::proxyServersForURL):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::chooseProxy):
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore):
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary):
        * platform/text/TextChecking.h:
        (WebCore):

2013-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        Qt build fix attempt after r147684.

        * html/canvas/CanvasRenderingContext.cpp:

2013-04-04  Benjamin Poulain  <bpoulain@apple.com>

        alternateFamilyName should return a null, not an empty value
        https://bugs.webkit.org/show_bug.cgi?id=113987

        Reviewed by Anders Carlsson.

        The string object corresponding semantically to "no-value" is
        a null string, not an empty string.

        Fix alternateFamilyName() accordingly.

        * platform/graphics/FontCache.cpp:
        (WebCore::alternateFamilyName):
        (WebCore::FontCache::getCachedFontPlatformData):

2013-04-04  Anders Carlsson  <andersca@apple.com>

        Work around a bug in the bindings generation script.

        * WebCore.xcodeproj/project.pbxproj:

2013-04-04  Dean Jackson  <dino@apple.com>

        Don't dispatch delayed click if snapshotted plugin was triggered by a click on the label
        https://bugs.webkit.org/show_bug.cgi?id=113982

        Reviewed by Tim Horton.

        We regressed the way clicks were sent on to restarted plugins when we moved to a
        Shadow Root - we were always sending the click. We should only send the click
        on if the user clicked on the main plugin content, and not send it when you
        click directly on the label.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Keep a reference to the container and label.
        (WebCore::HTMLPlugInImageElement::partOfSnapshotLabel): New method that detects if a Node was part
            of the snapshot label.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Only record the event if you should forward it on.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): New parameter to userDidClickSnapshot and member variables for shadow content.
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::handleEvent): Ask the plugin if the clicked target was the snapshot label.

2013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed EFL build fix.

        Add missing include for FloatRect.h.

        * platform/efl/PlatformScreenEfl.cpp:

2013-04-04  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix.

        * platform/graphics/GlyphPageTreeNode.cpp:

2013-04-04  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        * platform/graphics/FontCache.cpp:
        * platform/graphics/SimpleFontData.cpp:

2013-04-04  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebCore.xcodeproj/project.pbxproj:

2013-04-04  Geoffrey Garen  <ggaren@apple.com>

        Removed empty files from the build
        https://bugs.webkit.org/show_bug.cgi?id=113978

        Reviewed by Anders Carlsson.

        Anders made a list of all the empty files that are slowing down the Mac
        build, and I grepped them away.

        * WebCore.xcodeproj/project.pbxproj:

2013-04-04  Anders Carlsson  <andersca@apple.com>

        Prune unneeded header #includes
        https://bugs.webkit.org/show_bug.cgi?id=113973

        Reviewed by Geoffrey Garen.

        Reduce the amount of headers included by other headers by:
        - Moving implicit and explicit constructors and destructors into .cpp files so member variable constructors/destructors
          don't have to be declared.
        - Move CachedResourceClient subclasses out into separate headers so that their respective CachedResource subclasses don't
          have to be included by the classes that derive from those subclasses.
        - Remove headers that were never needed in the first place.

        * Modules/webaudio/AudioContext.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * css/CSSFontFaceSource.h:
        * html/canvas/CanvasPattern.cpp:
        (WebCore::CanvasPattern::create):
        (WebCore::CanvasPattern::CanvasPattern):
        (WebCore::CanvasPattern::~CanvasPattern):
        * html/canvas/CanvasPattern.h:
        (WebCore::CanvasPattern::pattern):
        (WebCore::CanvasPattern::originClean):
        * html/parser/HTMLScriptRunner.h:
        * loader/ImageLoader.h:
        * loader/LinkLoader.h:
        * loader/TextTrackLoader.h:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedFontClient.h: Added.
        (WebCore::CachedFontClient::~CachedFontClient):
        (WebCore::CachedFontClient::expectedType):
        (WebCore::CachedFontClient::resourceClientType):
        (WebCore::CachedFontClient::fontLoaded):
        * loader/cache/CachedResourceHandle.cpp:
        (WebCore::CachedResourceHandleBase::CachedResourceHandleBase):
        (WebCore::CachedResourceHandleBase::~CachedResourceHandleBase):
        (WebCore::CachedResourceHandleBase::setResource):
        * loader/cache/CachedResourceHandle.h:
        (WebCore::CachedResourceHandleBase::get):
        (WebCore::CachedResourceHandleBase::operator!):
        (WebCore::CachedResourceHandleBase::operator UnspecifiedBoolType):
        (WebCore::CachedResourceHandleBase::operator=):
        (WebCore::CachedResourceHandle::CachedResourceHandle):
        (WebCore::CachedResourceHandle::get):
        (WebCore::CachedResourceHandle::operator->):
        (WebCore::CachedResourceHandle::operator=):
        (WebCore::CachedResourceHandle::operator==):
        (WebCore::CachedResourceHandle::operator!=):
        (WebCore::operator==):
        (WebCore::operator!=):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentReference.h:
        * loader/cache/CachedSVGDocumentClient.h: Added.
        (WebCore::CachedSVGDocumentClient::~CachedSVGDocumentClient):
        (WebCore::CachedSVGDocumentClient::expectedType):
        (WebCore::CachedSVGDocumentClient::resourceClientType):
        * loader/cache/CachedStyleSheetClient.h:
        * platform/PlatformScreen.h:
        * platform/audio/HRTFElevation.cpp:
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::fftSize):
        * platform/audio/HRTFKernel.h:
        * platform/audio/ReverbConvolverStage.cpp:
        (WebCore::ReverbConvolverStage::~ReverbConvolverStage):
        * platform/audio/ReverbConvolverStage.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/Path.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.cpp:
        * platform/graphics/Pattern.h:
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::ReferenceFilterOperation):
        (WebCore::ReferenceFilterOperation::~ReferenceFilterOperation):
        (WebCore::ReferenceFilterOperation::setCachedSVGDocumentReference):
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/transforms/AffineTransform.h:
        * plugins/DOMMimeType.h:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/style/StyleCachedShader.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGUseElement.h:
        * xml/parser/XMLDocumentParser.h:

2013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Cairo] Stop passing raw pointers to BitmapImage::create()
        https://bugs.webkit.org/show_bug.cgi?id=113945

        Reviewed by Martin Robinson.

        BitmapImage::create() was updated in r147643 to take a PassRefPtr<cairo_surface_t>
        in argument instead of a cairo_surface_t*. This patch updates several call sites
        so that they now pass in a smart pointer instead of a raw one to avoid silent
        converting from cairo_surface_t* to PassRefPtr<cairo_surface_t>.

        No new tests, no behavior change.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::ImageBufferData): Use RefPtr to m_surface to avoid manual
        memory handling.
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::getImageData):
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        (ImageBufferData):
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (ImageGStreamer::ImageGStreamer):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):

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

        Page content missing when flipping from an empty layer to a tiled layer
        https://bugs.webkit.org/show_bug.cgi?id=113977
        <rdar://problem/13444219>

        Reviewed by Tim Horton.
        
        Some articles on USA Today were missing content on load, when a large GraphicsLayer
        which did not draw content needed to draw content (and become tiled in the process).
        
        The bug was an ordering dependency in GraphicsLayerCA::commitLayerChangesBeforeSublayers().
        swapFromOrToTiledLayer() sets some dirty flags, but for some properties which have
        already been committed in the current flush cycle.
        
        Fix by moving the swapFromOrToTiledLayer() to the top of the commit, which is
        safe since it only consults GraphicsLayer properties, not CALayer properties.

        Test: compositing/tiling/empty-to-tiled.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent):
        (WebCore::GraphicsLayerCA::updateContentsScale):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):

2013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Regression(r147639) Causes assertion hit in HashTable
        https://bugs.webkit.org/show_bug.cgi?id=113954

        Reviewed by Benjamin Poulain.

        Lookup the key in the hash table again after the recursive call to
        getCachedFontPlatformData() as it may have altered the hash map and
        invalidated the previous iterator we had.

        No new tests, covered by existing tests.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontPlatformData):

2013-04-04  Eric Carlson  <eric.carlson@apple.com>

        [Mac] add "automatic" text track menu item
        https://bugs.webkit.org/show_bug.cgi?id=113822

        Reviewed by Jer Noble.

        No new tests, existing tests updated.

        * English.lproj/Localizable.strings: Add new track menu item.

        * html/HTMLMediaElement.cpp: 
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_captionDisplayMode.
        (WebCore::HTMLMediaElement::finishParsingChildren): LoadTextTrackResource -> ConfigureTextTracks.
        (WebCore::HTMLMediaElement::scheduleDelayedAction): Ditto.
        (WebCore::HTMLMediaElement::loadTimerFired): Ditto.
        (WebCore::HTMLMediaElement::loadInternal): Ditto. Flag the caption menu as invalid so it will
            be rebuilt again.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTrack): LoadTextTrackResource -> ConfigureTextTracks.
        (WebCore::HTMLMediaElement::didAddTrack): Ditto.
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Deal with new track display modes.
        (WebCore::HTMLMediaElement::HTMLMediaElement::hasClosedCaptions): Minor cleanup.
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Add some logging.
        (WebCore::HTMLMediaElement::configureTextTracks): Call updateActiveTextTrackCues so cue display
            is updated.
        (WebCore::HTMLMediaElement::captionPreferencesChanged): Deal with new track display modes.
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured): Add some logging.
        * html/HTMLMediaElement.h: Ditto.

        * html/shadow/MediaControlElementTypes.cpp: Remove trackIndexAttributeName and trackListIndexForElement.
        * html/shadow/MediaControlElementTypes.h: Ditto.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler): Don't use track index,
            everything we need is in the track<->element map now.
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay): Ditto. Always rebuild the 
            track list because clear the map each time the menu goes away because it refs every track.
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu): Don't set the track
            index attribute on the menu items, just use the map.
        * html/shadow/MediaControlElements.h:

        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::changedClosedCaptionsVisibility): resetTrackListMenu is gone.
        (WebCore::MediaControlsApple::reset): Ditto.
        (WebCore::MediaControlsApple::closedCaptionTracksChanged): Ditto.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::captionMenuOffItem): New, static TextTrack used for the menu "Off" item.
        (WebCore::TextTrack::captionMenuAutomaticItem): New, static TextTrack used for the menu "Automatic" item.
        * html/track/TextTrack.h:

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::shouldShowCaptions): Removed, we use captionDisplayMode instead.
        (WebCore::CaptionUserPreferences::captionDisplayMode): New.
        (WebCore::CaptionUserPreferences::setCaptionDisplayMode): New.
        (WebCore::CaptionUserPreferences::setPreferredLanguage): Make the parameter a const reference.
        (WebCore::CaptionUserPreferences::textTrackSelectionScore): Return 0 if the user doesn't want
            captions or subtitles.
        (WebCore::CaptionUserPreferences::textTrackLanguageSelectionScore): Take language as a parameter
            instead of assuming that it is always the entire language list.
        * page/CaptionUserPreferences.h:

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::shouldShowCaptions): Removed, we use captionDisplayMode instead.
        (WebCore::CaptionUserPreferencesMac::captionDisplayMode): New.
        (WebCore::CaptionUserPreferencesMac::setCaptionDisplayMode): New.
        (WebCore::CaptionUserPreferencesMac::setPreferredLanguage): Make the parameter a const reference.
        (WebCore::CaptionUserPreferencesMac::textTrackSelectionScore): Deal with "Automatic" mode.
            captions or subtitles.
        (WebCore::CaptionUserPreferences::textTrackLanguageSelectionScore): Take language as a parameter
            instead of assuming that it is always the entire language list.
        (WebCore::CaptionUserPreferencesMac::sortedTrackListForMenu): Insert "Off" and "Automatic" items.

        * platform/LocalizedStrings.cpp:
        (WebCore::textTrackAutomaticMenuItemText): New.
        * platform/LocalizedStrings.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::languageOfPrimaryAudioTrack): New.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack): Return the language
            of the main audio track.

2013-04-04  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r146580): Assertion using SecurityOrigin::create, URL string is not valid
        https://bugs.webkit.org/show_bug.cgi?id=113961

        Reviewed by Geoff Garen.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):
        (WebCore::SecurityOrigin::create):
        Don't use ParsedURLString, because http://host:80/ is normalized to http://host/,
        so it's not a parsed URL string.

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

        Unreviewed, rolling out r147662.
        http://trac.webkit.org/changeset/147662
        https://bugs.webkit.org/show_bug.cgi?id=113955

        The change r147662  breaks fast/regions/fixed-pos-elem-in-
        region.html (Requested by benjaminp on #webkit).

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::inlineLogicalWidth):

2013-04-04  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r147373): Auto-sizing doesn't always respect minimum width changes
        https://bugs.webkit.org/show_bug.cgi?id=113947
        <rdar://problem/13579024>

        Reviewed by Anders Carlsson.

        Reset the FrameView size to the minimum auto-sizing size
        before performing auto-sizing. We were already resetting the height,
        but not the width, instead using the FrameView's current width.

        This means that changing the minimum width without also manually
        resizing the FrameView will never see the width change.

        Auto-sizing tests are not working on Mac yet.

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):

2013-04-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the gyp build
        https://bugs.webkit.org/show_bug.cgi?id=113942

        Reviewed by Gustavo Noronha Silva.

        * WebCore.gyp/WebCoreGTK.gyp: Removed.

2013-04-04  Robert Hogan  <robert@webkit.org>

        REGRESSION(r142152): Text wraps in menu
        https://bugs.webkit.org/show_bug.cgi?id=113706

        Reviewed by David Hyatt.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::inlineLogicalWidth): Empty inline elements add their inline border/padding/margin to the width of the
        line when we iterate through them in nextLineBreak(), so no need to add them again here when climbing back up
        from their first child looking for border/padding/margin to add. (An empty inline element can have floating children.)

2013-04-04  Ryosuke Niwa  <rniwa@webkit.org>

        Changing typing style with font size delta overrides the previous font size delta
        https://bugs.webkit.org/show_bug.cgi?id=113923

        Reviewed by Andreas Kling.

        The bug was caused by a new font size delta value overriding the old one as
        opposed to being added to the old value. Fixed that in overrideWithStyle.

        Also made overrideWithStyle share code with mergeStyle since there is already
        code to merge text-decorations there.

        Unfortunately, adding a test for this fix proved to be hard because we don't
        expose any API to directly set typing style.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::overrideWithStyle): Use mergeStyle.
        (WebCore::EditingStyle::mergeStyle): Add font size deltas as opposed to simply
        using the new value.

2013-04-04  Chris Fleizach  <cfleizach@apple.com>

        AX:File upload button has wrong label
        https://bugs.webkit.org/show_bug.cgi?id=113924

        Reviewed by David Kilzer.

        Allow the label and value to be returned for file upload controls on iOS.
        Due to the different AX APIs, we can expose a bit more information on iOS.

        Test: platform/iphone-simulator/accessibility/file-upload-button.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper stringValueShouldBeUsedInLabel]):
        (-[WebAccessibilityObjectWrapper fileUploadButtonReturnsValueInTitle]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase fileUploadButtonReturnsValueInTitle]):
        (-[WebAccessibilityObjectWrapperBase accessibilityTitle]):

2013-04-03  Dean Jackson  <dino@apple.com>

        Expose settings to disable plugin snapshotting autostart and primary detection
        https://bugs.webkit.org/show_bug.cgi?id=113918

        Reviewed by Tim Horton.

        Three new settings:
        - snapshotAllPlugIns: Do not apply any heuristics - immediately snapshot a plugin.
        - primaryPlugInSnapshotDetectionEnabled: Toggle snapshotting the "main" plugin in the page.
        - autostartOriginPlugInSnapshottingEnabled: Toggle snapshotting based on URL origins.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Don't tell the host that we've started
            if the autostartOriginPlugInSnapshottingEnabled is false.
        (WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn): Don't restart a primary
            plugin if primaryPlugInSnapshotDetectionEnabled is false.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Snapshot immediately if
            snapshotAllPlugIns is true. Also, don't test for autostart if
            autostartOriginPlugInSnapshottingEnabled is false.
        * page/Settings.in: Three new settings values.

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

        [BlackBerry] Remove skia code from PluginViewBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=113936

        Reviewed by Rob Buis.

        Skia is not used anymore by the BlackBerry port.

        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::paint):

2013-04-04  Emil A Eklund  <eae@chromium.org>

        Change RenderFrameSet::computeEdgeInfo to use m-rows/m_cols directly
        https://bugs.webkit.org/show_bug.cgi?id=113825

        Reviewed by Eric Seidel.

        Tests: fast/frames/invalid-frameset-compute-edge.html

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::computeEdgeInfo):

2013-04-04  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Invalid clear ClutterContent of ClutterActor
        https://bugs.webkit.org/show_bug.cgi?id=113758

        Reviewed by Gustavo Noronha Silva.

        Using clutter_actor_set_content(actor, 0) is better to clear ClutterContent of ClutterActor.
        Actually the ClutterContent referece is cleared in the API if we set 0.

        No new tests since no functionality changed.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorUpdateTexture):

2013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Cairo] Fix canvas drawing of SVG-based patterns and remove NativeImageCairo
        https://bugs.webkit.org/show_bug.cgi?id=113929

        Reviewed by Martin Robinson.

        Make (Pass)NativeImagePtr typedefs to (Pass)RefPtr<cairo_surface_t> instead
        of NativeImageCairo*. Now that we switch to using smart pointers,
        NativeImageCairo is removed as it made no sense to make it ref counted when
        it merely held a single ref counted member.

        Now that Cairo is using smart pointers for (Pass)NativeImagePtr, this patch
        also enables the implementation of SVGImage::nativeImageForCurrentFrame()
        for USE(CAIRO) as well. This effectively fixes canvas drawing of SVG-based
        patterns for Cairo-based ports.

        No new tests, covered by svg/canvas/canvas-pattern-svg.html.

        * GNUmakefile.list.am: Remove NativeImageCairo.* for GTK.

        * PlatformEfl.cmake: Remove NativeImageCairo.* for EFL.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Remove NativeImageCairo.* for Win.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::FrameData::reportMemoryUsage):
        Update MemoryClassInfo::addRawBuffer() call now that m_frame is a RefPtr
        for USE(CAIRO).

        * platform/graphics/BitmapImage.h:
        (BitmapImage):
        Remove factory method taking a cairo_surface_t* in argument. This is useless
        now that PassNativeImagePtr is a typedef to PassRefPtr<cairo_surface_t> and
        there is already a factory method taking a PassNativeImagePtr in argument.

        * platform/graphics/NativeImagePtr.h:
        (WebCore):
        Make PassNativeImagePtr a typedef to PassRefPtr<cairo_surface_t> and
        NativeImagePtr a typedef to RefPtr<cairo_surface_t>, instead of
        NativeImageCairo*. Moving to smart pointers is needed to enable implementation
        of SVGImage::nativeImageForCurrentFrame() for Cairo.

        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::FrameData::clear):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        Update Cairo graphics code to reflect the (Pass)NativeImagePtr type changes.

        * platform/graphics/cairo/NativeImageCairo.cpp: Removed.
        * platform/graphics/cairo/NativeImageCairo.h: Removed.

        * platform/graphics/cairo/PatternCairo.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/efl/ImageEfl.cpp:
        (WebCore::BitmapImage::getEvasObject):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::BitmapImage::getGdkPixbuf):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::create):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::createDragImageFromImage):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        * platform/win/DragImageCairoWin.cpp:
        (WebCore::createDragImageFromImage):
        Update code to reflect the (Pass)NativeImagePtr type changes.

        * svg/graphics/SVGImage.cpp:
        (WebCore):
        * svg/graphics/SVGImage.h:
        Enable SVGImage::nativeImageForCurrentFrame() for USE(CAIRO).

2013-04-04  Ed Bartosh  <bartosh@gmail.com>

        [EFL] --minimal build fails with 'error: unused variable'
        https://bugs.webkit.org/show_bug.cgi?id=113903

        Reviewed by Gustavo Noronha Silva.

        Moved variable definition under #if where it's used
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2013-04-04  Andreas Kling  <akling@apple.com>

        Global FontPlatformData cache should use OwnPtr.
        <http://webkit.org/b/111939>

        Reviewed by Anders Carlsson.

        Let the global FontPlatformData use OwnPtr instead of raw pointers + deleteAllValues().

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::invalidate):

            Tweaked code for OwnPtr. Also made getCachedFontPlatformData() do one hash lookup
            instead of two.

        * platform/graphics/FontCache.h:
        * platform/graphics/blackberry/FontCacheBlackBerry.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/FontCacheAndroid.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/skia/FontCacheSkia.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/wince/FontCacheWinCE.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/wx/FontCacheWx.cpp:
        (WebCore::FontCache::createFontPlatformData):

            FontCache::createFontPlatformData() now returns a PassOwnPtr.

2013-04-04  Andreas Kling  <akling@apple.com>

        Render images with low-quality scaling while FrameView is being resized.
        <http://webkit.org/b/113764>
        <rdar://problem/13555154>

        Reviewed by Antti Koivisto.

        Have ImageQualityController ask the renderer's containing FrameView if it's currently in live
        resize, and if so, paint all images with low-quality scaling. A high-quality repaint will happen
        ~0.5 sec after live resizing ends, piggybacking on the same mechanism we use to do JS-animated
        resizing with low-quality scaling.

        This reduces CPU time spent generating new tiles during live window resize, especially on Retina
        systems where a lot of upscaling happens on legacy web content.

        * rendering/RenderBoxModelObject.cpp:
        (ImageQualityController):

            Added an m_liveResizeOptimizationIsActive flag that tracks whether the ImageQualityController
            is painting everything in low quality due to live window resize. It gets unset when the HQ
            repaint timer fires and everything has been repainted properly.

        (WebCore::ImageQualityController::highQualityRepaintTimerFired):

            When the HQ repaint timer fires, check if the renderer's containing FrameView is still in
            live resize, and if so, abort HQ repaint for now and reschedule the timer.

        (WebCore::ImageQualityController::ImageQualityController):
        (WebCore::ImageQualityController::objectDestroyed):
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):

2013-04-04  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: fix closure compiler warnings in IndexedDBModel.js
        https://bugs.webkit.org/show_bug.cgi?id=113926

        Reviewed by Alexander Pavlov.

        No new tests: no change in behaviour.

        * inspector/front-end/IndexedDBModel.js:

2013-04-04  Xidorn Quan  <quanxunzhen@gmail.com>

        REGRESSION (r145870): Can't get insertion point to appear in some input and textareas on wordpress
        https://bugs.webkit.org/show_bug.cgi?id=113591

        Reviewed by Simon Fraser.

        Since a child node could overflow its ancestor, it is not wise to check
        one's radii boundary before checking whether the given point intersects
        its children. This patch moves the related code down to fix the bug.

        Test: fast/borders/border-radius-child.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):

2013-04-04  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Virtual modifier for MediaPlayer::simulateAudioInterruption must go
        https://bugs.webkit.org/show_bug.cgi?id=113851

        Reviewed by Eric Carlson.

        * platform/graphics/MediaPlayer.h:
        (MediaPlayer): Removed virtual modifier to
        simulateAudioInterruption.

2013-04-04  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Support -webkit-font-smoothing
        https://bugs.webkit.org/show_bug.cgi?id=106009

        Reviewed by Jocelyn Turcotte.

        Remove false dependency on Qt 5.1 for the -webkit-font-smoothing property.
        For now we are still keeping the dependency on Font::shouldUseSmoothing().

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Regression(r142765) Broke Custom SVG cursors and SVG canvas drawing for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=113420

        Reviewed by Stephen White.

        Introduce a PassNativeImagePtr typedef that is used in place of NativeImagePtr
        for method arguments and return values. This is needed as Skia now maps
        NativeImagePtr to RefPtr<NativeImageSkia> and PassNativeImagePtr to
        PassRefPtr<NativeImageSkia>. We move towards ref counted smart pointers so that
        SVGImage::nativeImageForCurrentFrame() can transfer ownership of the native
        image to the caller if needed (e.g. for SVGImage).

        Provide nativeImageForCurrentFrame() implementation for SVGImage. SVGImage no
        longer holds the native image internally, to save memory. It is therefore created
        when nativeImageForCurrentFrame() is called and ownership is passed to the
        caller. For now, this implementation is only enabled for Skia as others are using
        raw pointers for PassNativeImagePtr.

        Test: svg/canvas/canvas-pattern-svg.html

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousNativeIconForPageURL):
        Return a PassNativeImagePtr instead of NativeImagePtr.

        * loader/icon/IconDatabase.h:
        (IconDatabase):
        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::synchronousNativeIconForPageURL):
        Return a PassNativeImagePtr instead of NativeImagePtr.

        * platform/chromium/DragImageChromiumSkia.cpp:
        (WebCore::createDragImageFromImage):
        Store return value of nativeImageForCurrentFrame() in a RefPtr instead of a raw
        one.

        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):
        Store return value of nativeImageForCurrentFrame() in a RefPtr<NativeImageSkia>
        instead of a NativeImagePtr. While these are equivalent, the former is more
        readable in Skia-specific code.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::frameAtIndex):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        (WebCore::BitmapImage::nativeImageForCurrentFrame):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::create):
        Take a PassNativeImagePtr in argument instead of a NativeImagePtr.

        (BitmapImage): Ditto.

        * platform/graphics/GraphicsContext.h:
        (GraphicsContext): Ditto.

        * platform/graphics/GraphicsContext3D.h:
        (ImageExtractor):
        Keep NativeImageSkia in a RefPtr instead of OwnPtr, now that it is refcounted.

        * platform/graphics/Image.h:
        (WebCore::Image::nativeImageForCurrentFrame):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        * platform/graphics/ImageBuffer.h:
        (ImageBuffer):
        Have copyNativeImage() return a PassNativeImagePtr instead of a NativeImagePtr.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        * platform/graphics/ImageSource.h:
        Have createFrameAtIndex() return a PassNativeImagePtr instead of a NativeImagePtr.

        * platform/graphics/NativeImagePtr.h:
        Map NativeImagePtr to a RefPtr<NativeImageSkia> instead of NativeImageSkia* for Skia.
        Introduce new PassNativeImagePtr that maps to PassRefPtr<NativeImageSkia> for Skia
        and is equivalent to NativeImagePtr for other ports. We now use smart pointers for
        the native image so that SVGImage::nativeImageForCurrentFrame() can pass ownership
        of the native image to the caller, unlike BitmapImage::nativeImageForCurrentFrame().

        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        (WebCore::BitmapImage::BitmapImage):
        Take a PassNativeImagePtr instead of a NativeImagePtr in argument.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage): Ditto.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyNativeImage):
        Take a PassNativeImagePtr instead of a NativeImagePtr in argument.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        Store return value of nativeImageForCurrentFrame() in a RefPtr instead of a raw one.

        * platform/graphics/filters/skia/FEBlendSkia.cpp:
        (WebCore::FEBlend::platformApplySkia): Ditto.

        * platform/graphics/filters/skia/FEColorMatrixSkia.cpp:
        (WebCore::FEColorMatrix::platformApplySkia): Ditto.

        * platform/graphics/filters/skia/FEComponentTransferSkia.cpp:
        (WebCore::FEComponentTransfer::platformApplySkia): Ditto.

        * platform/graphics/filters/skia/FEDisplacementMapSkia.cpp:
        (WebCore::FEDisplacementMap::platformApplySkia): Ditto.

        * platform/graphics/filters/skia/FELightingSkia.cpp:
        (WebCore::FELighting::platformApplySkia): Ditto.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::nativeImageForCurrentFrame):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        * platform/graphics/qt/StillImageQt.h:
        (StillImage): Ditto.

        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        No longer need to adopt the return value of asNewNativeImage() now
        that it returns a PassRefPtr instead of a raw one.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        Call NativeImageSkia::create() factory method now that the constructor
        is private.

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::FrameData::clear):
        Just call clear() on m_frame instead of explicitely deleting it now
        that it is a RefPtr.

        (WebCore::Image::drawPattern):
        Store return value of nativeImageForCurrentFrame() in a RefPtr instead
        of a raw one.

        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        Store return value of frameAtIndex() in a RefPtr instead of a raw one.

        (WebCore::BitmapImage::draw):
        Store return value of nativeImageForCurrentFrame() in a RefPtr instead
        of a raw one.

        * platform/graphics/skia/NativeImageSkia.cpp:
        Add new constructor taking all members in argument. This is used for
        cloning a NativeImageSkia object.

        (WebCore::NativeImageSkia::NativeImageSkia):
        (WebCore::NativeImageSkia::deepSkBitmapCopy):
        Add convenience function to make a deep copy of a SkBitmap.

        * platform/graphics/skia/NativeImageSkia.h:
        (WebCore):
        (WebCore::NativeImageSkia::create):
        (NativeImageSkia):
        Make NativeImageSkia subclass RefCounted. Make the constructor private
        and add a factory method instead that returns a PassRefPtr.

        (WebCore::NativeImageSkia::clone):
        Add a clone() method now that NativeImageSkia is refcounted and is no
        longer copyable.

        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformPattern):
        Store return value of nativeImageForCurrentFrame() in a RefPtr instead
        of a raw one.

        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        * platform/image-decoders/ImageDecoder.h:
        (ImageFrame):
        Have asNewNativeImage() return a PassNativeImagePtr instead of a
        NativeImagePtr.

        (WebCore::ImageFrame::getAddr):
        (WebCore::ImageFrame::setSkBitmap):
        (WebCore::ImageFrame::getSkBitmap):
        (WebCore::ImageFrame::width):
        (WebCore::ImageFrame::height):
        Update use of m_bitmap now that it is a pointer type and call
        NativeImageSkia::create() to construct a NativeImageSkia object now
        that the constructor is private.

        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        * platform/image-decoders/openvg/ImageDecoderOpenVG.cpp:
        (WebCore::ImageFrame::asNewNativeImage): Ditto.

        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::ImageFrame):
        Initialize m_bitmap in the constructor now that it is a pointer
        type and we need NativeImageSkia's default constructor to be
        called.

        (WebCore::ImageFrame::operator=):
        Call NativeImageSkia's new clone() method to copy m_bitmap as
        NativeImageSkia is now RefCounted and no longer copyable.

        (WebCore::ImageFrame::clearPixelData):
        (WebCore::ImageFrame::zeroFillPixelData):
        (WebCore::ImageFrame::copyBitmapData):
        (WebCore::ImageFrame::setSize):
        Update use of m_bitmap now that it is a pointer type.

        (WebCore::ImageFrame::asNewNativeImage):
        Return a PassNativeImagePtr instead of a NativeImagePtr.
        Call NativeImageSkia's clone method now that it is no longer
        copyable.

        (WebCore::ImageFrame::setHasAlpha):
        (WebCore::ImageFrame::setStatus):
        Update use of m_bitmap now that it is a pointer type.

        * platform/image-decoders/wx/ImageDecoderWx.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        Return a PassNativeImagePtr instead of a NativeImagePtr.

        * svg/graphics/SVGImage.cpp:
        (WebCore):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        Add implementation of nativeImageForCurrentFrame() for SVGImage as
        it is needed for SVG custom cursor support and Canvas drawing of
        patterns containing SVG images. As SVGImage no longer keep the
        native image internally to save memory, the implementation creates
        the native image when nativeImageForCurrentFrame() and passes
        its ownership to the caller.

        * svg/graphics/SVGImage.h:
        Override Image::nativeImageForCurrentFrame() and remove dummy
        implementation of frameAtIndex() as it is not needed / used.

        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::nativeImageForCurrentFrame):
        Add implementation of nativeImageForCurrentFrame() which merely
        forwards the call to the Image being contained.

        * svg/graphics/SVGImageForContainer.h:
        Override Image::nativeImageForCurrentFrame().

2013-04-04  Andrei Bucur  <abucur@adobe.com>

        [CSSRegions] RenderFlowThread::renderRegionForLine should use a faster search method
        https://bugs.webkit.org/show_bug.cgi?id=66921

        Reviewed by David Hyatt.

        The RenderFlowThread::regionAtBlockOffset() function is a hot path for the code using
        flow threads because it translates from block coordinates to regions.
        Currently the method is O(n), using a linear search through the regions chain to find the
        region where a block offset lands.
        The patch improves this search by using an interval tree (PODIntervalTree). Before a flow
        thread is laid out, each region is updated to hold the size of the portion of the flow it
        will receive. This information is gathered inside the interval tree and used to speedup the
        search in RenderFlowThread::regionAtBlockOffset(). The algorithm uses a custom adapter
        simplified for looking up offsets inside the interval tree.
        For now, the interval tree is cleared every time the flow thread portions list is updated.
        The implementation can be improved but induces some cmplexity as we'd have to manually manage
        the life cycle of the tree's nodes. The performance gains are good enough as is to make this
        only optional.
        Another important change is now the flow thread portion rectangles will not overflow when
        using auto-height regions (or very large regions). The maximum size of the flow is set to
        LayoutUnit::max()/2. Any region forcing a greater size will be capped so the thread
        won't overflow.

        Performance test results:
        /Layout/RegionsAuto:Time            ms 699.95   181.20  74.11% Better
        /Layout/RegionsAutoMaxHeight:Time   ms 2083.00  308.55  85.19% Better
        /Layout/RegionsFixed:Time           ms 726.10   223.65  69.20% Better
        /Layout/RegionsFixedShort:Time      ms 869.60   288.25  66.85% Better

        Tests: See PerformanceTests/Layout/Regions*

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionAtBlockOffset):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::RegionSearchAdapter::collectIfNeeded):
        (WebCore):
        * rendering/RenderFlowThread.h:
        (WebCore):

2013-04-04  Seokju Kwon  <seokju.kwon@gmail.com>

        [Qt] WebSocket errors should be logged to console
        https://bugs.webkit.org/show_bug.cgi?id=113842

        Reviewed by Jocelyn Turcotte.

        Pass the reason of a failure to SocketStreamError instance
        and notify it via SocketStreamHandleClient::didFailSocketStream().

        Test : http/tests/inspector/console-websocket-error.html

        * platform/network/qt/SocketStreamError.h:
        (WebCore::SocketStreamError::SocketStreamError):
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::socketErrorCallback):

2013-04-04  Ed Bartosh  <bartosh@gmail.com>

        [ATK] build fails when accessibility is turned off
        https://bugs.webkit.org/show_bug.cgi?id=113699

        Reviewed by Gyuyoung Kim.

        * editing/atk/FrameSelectionAtk.cpp: Wrapped accessibility code in #if HAVE(ACCESSIBILITY)

2013-04-04  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: fix closure compiler warnings in the profiler code HeapSnapshotDataGrids.js
        https://bugs.webkit.org/show_bug.cgi?id=113922

        Reviewed by Yury Semikhatsky.

        No new tests: no change in behaviour.

        * inspector/front-end/HeapSnapshotDataGrids.js:

2013-04-03  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Add a decoration image to search input field
        https://bugs.webkit.org/show_bug.cgi?id=113552

        Reviewed by Laszlo Gombos.

        Though EFL port has a decoration image for search input field, we didn't use it.
        Start to show it.

        Tests: fast/forms/search-cancel-button-style-sharing.html
               fast/forms/search-rtl.html
               fast/css/input-search-padding.html
               fast/css/text-input-with-webkit-border-radius.html
               fast/css/text-overflow-input.html
               fast/forms/box-shadow-override.html
               fast/forms/control-restrict-line-height.html
               fast/forms/input-appearance-height.html
               fast/forms/placeholder-position.html
               fast/forms/placeholder-pseudo-style.html
               fast/forms/search-styled.html
               fast/forms/search-vertical-alignment.html
               fast/forms/searchfield-heights.html
               fast/repaint/search-field-cancel.html 
               fast/replaced/width100percent-searchfield.html

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore):
        (WebCore::RenderThemeEfl::supportsDataListUI):
        (WebCore::RenderThemeEfl::adjustSearchFieldDecorationStyle):

2013-04-03  Kent Tamura  <tkent@chromium.org>

        Input value/placeholder is not redrawn when the input height grows
        https://bugs.webkit.org/show_bug.cgi?id=113845

        Reviewed by Ojan Vafai.

        Test: fast/forms/text/text-height-grow.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        We need relayout of the inner text element.

2013-04-03  Shawn Singh  <shawnsingh@chromium.org>

        Add comment to clarify isStackingContext() in RenderLayer.h
        https://bugs.webkit.org/show_bug.cgi?id=113909

        Reviewed by Simon Fraser.

        It was not obvious how the implementation of isStackingContext()
        was correct, a comment is appropriate here for anyone who reads
        this code in the future.

        Just a change in comment, no test needed.

        * rendering/RenderLayer.h:

2013-04-03  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Removed ExclusionShape dead code
        https://bugs.webkit.org/show_bug.cgi?id=113904

        Reviewed by Dirk Schulze.

        No new tests, just removing dead code.

        * rendering/ExclusionShape.cpp:
        (WebCore::ExclusionShape::createExclusionShape):
        * rendering/ExclusionShape.h:
        (ExclusionShape):

2013-04-03  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Switch MediaPlayerPrivateBlackBerry.cpp's timer to use CLOCK_MONOTONIC
        https://bugs.webkit.org/show_bug.cgi?id=113900

        Reviewed by Rob Buis.
        Internally Reviewed by Jeff Rogers.

        Timers should use CLOCK_MONOTONIC to avoid undesirable effects when
        the user switches the system time.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::drawBufferingAnimation):

2013-04-03  Dave Michael  <dmichael@chromium.org>

        Unable to focus on embedded plugins such as Flash via javascript focus()
        https://bugs.webkit.org/show_bug.cgi?id=32292

        Reviewed by Ryosuke Niwa.

        Make embed, object, and applet elements support focus() when
        appropriate. Prior to this patch, javascript focus() had no effect on
        embed, object, or applet elements unless tabindex or contenteditable is
        set. With this patch, focus() will focus the element unless the plugin
        content has failed to load (i.e., we are showing either fallback content
        or an unavailable plugin indicator).

        Test: plugins/focus.html
              java/focus.html

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::supportsFocus):
        Overridden to return true except when the plugin content has failed to load.
        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::useFallbackContent):
        Moved up from HTMLPlugInImageElement.
        (WebCore::HTMLPlugInElement::supportsFocus):
        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInImageElement::useFallbackContent):
        Removed. Now the implementation is inherited from HTMLPlugInElement.

2013-04-03  Glenn Adams  <glenn@skynav.com>

        Element boundaries prevent Japanese line break opportunities
        https://bugs.webkit.org/show_bug.cgi?id=105692

        Reviewed by Darin Adler.

        Introduce use of prior context when using text break iterators
        in non-ASCII path through nextBreakablePosition(). This enables
        the use of line break context across an element boundary for
        the non-ASCII path. Use of this context with the ASCII path was
        enabled by https://bugs.webkit.org/show_bug.cgi?id=17427.

        Performance tests of line layout and html5 parsing show that this
        patch provides an approximately 4% improvement with Japanese and
        no statistically significant regression with ASCII path. Parsing
        (html5-full-render) performance is not significantly affected.

        Tests: fast/text/line-break-between-text-nodes-cjk.html
               fast/text/line-break-between-text-nodes-latin1.html

        Expect rebaselines will be needed due to different line breaks:
               fast/text/international/003.html
               fast/text/international/text-combine-image-test-expected.html
               fast/text/writing-mode/Kusa-Makura-background-canvas.html

        * platform/text/TextBreakIterator.cpp:
        (WebCore::acquireLineBreakIterator): Pass prior context to non-ICU path.
        * platform/text/TextBreakIterator.h:
        (WebCore::LazyLineBreakIterator::priorContextLength): Added.
        (WebCore::LazyLineBreakIterator::get): Pass prior context to ICU path.
        (WebCore::LazyLineBreakIterator::resetStringAndReleaseIterator): Editorial.
        * platform/text/TextBreakIteratorICU.cpp:
        Use prior context from line break iterators. Requires
        adding new UTF16 (UChar*) text provider and reimplementing
        Latin1 (LChar*) text provider. Implementation is optimized
        by using generic functionality that applies to both string
        sources.
        (WebCore::textPinIndex): Added.
        (WebCore::textNativeLength): Added.
        (WebCore::textFixPointer): Added.
        (WebCore::textClone): Added.
        (WebCore::textExtract): Added.
        (WebCore::textClose): Added.
        (WebCore::textGetContext): Added.
        (WebCore::textLatin1GetCurrentContext): Added.
        (WebCore::textLatin1MoveInPrimaryContext): Added.
        (WebCore::textLatin1SwitchToPrimaryContext): Added.
        (WebCore::textLatin1MoveInPriorContext): Added.
        (WebCore::textLatin1SwitchToPriorContext): Added.
        (WebCore::textInChunkOrOutOfRange): Added.
        (WebCore::textLatin1Access): Added.
        (WebCore::textInit): Added.
        (WebCore::textOpenLatin1): Added.
        (WebCore::textUTF16GetCurrentContext): Added.
        (WebCore::textUTF16MoveInPrimaryContext): Added.
        (WebCore::textUTF16SwitchToPrimaryContext): Added.
        (WebCore::textUTF16MoveInPriorContext): Added.
        (WebCore::textUTF16SwitchToPriorContext): Added.
        (WebCore::textUTF16Access): Added.
        (WebCore::textOpenUTF16): Added.
        (WebCore::acquireLineBreakIterator): Use new text providers with prior context.
        * platform/text/wchar/TextBreakIteratorWchar.cpp:
        (WebCore::acquireLineBreakIterator): Pass prior context to non-ICU path.
        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition): Use prior context in ICU path.

2013-04-03  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Chromium] Bad cast from BitmapImageSingleFrameSkia to BitmapImage
        https://bugs.webkit.org/show_bug.cgi?id=113492

        Reviewed by Stephen White.

        Remove BitmapImageSingleFrameSkia and have ImageBufferSkia construct
        BitmapImage objects instead via an intermediate NativeImageSkia.

        No new tests, covered by existing tests.

        * WebCore.gypi:
        * platform/graphics/filters/skia/FEGaussianBlurSkia.cpp: Remove
        include for BitmapImageSingleFrameSkia.h header.
        * platform/graphics/skia/BitmapImageSingleFrameSkia.cpp: Removed.
        * platform/graphics/skia/BitmapImageSingleFrameSkia.h: Removed.
        * platform/graphics/skia/ImageBufferSkia.cpp: Construct BitmapImage
        objects instead of BitmapImageSingleFrameSkia ones.
        (WebCore::ImageBuffer::copyImage):
        (WebCore::drawNeedsCopy):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::BitmapImage): Implement BitmapImage constructor
        that takes an NativeImageSkia* in argument.
        (WebCore):
        (WebCore::BitmapImage::draw): Remove m_source.initialized() check as
        this will return false for BitmapImage objects constructed from a
        NativeImageSkia, due to the lack of decoder.
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::NativeImageSkia): Add parameter to the
        NativeImageSkia constructor so that the caller can request a deep copy
        instead of a shallow one. This is needed by the ImageBuffer.
        * platform/graphics/skia/NativeImageSkia.h:
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::setSkBitmap):

2013-04-03  David Vest  <davve@opera.com>

        ASSERTION FAILED: resultAnimationElement->m_animatedType
        https://bugs.webkit.org/show_bug.cgi?id=93528

        Reviewed by Philip Rogers.

        When the order of animation elements change within an animation
        group, we can't assume that the resultElement is the same as it
        was when the animation was frozen. Make sure to reset the
        animation type for the resultElement before updating the
        animation.

        Test: svg/animations/animation-dependency-crash.html

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::progress):

2013-04-03  Timothy Hatcher  <timothy@apple.com>

        Stop unconditionally enabling JavaScript execution when closing the Web Inspector.

        https://webkit.org/b/113889
        rdar://problem/12281794

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent): Initialize m_originalScriptExecutionDisabled.
        (WebCore::InspectorPageAgent::enable): Populate m_originalScriptExecutionDisabled based on current setting.
        (WebCore::InspectorPageAgent::disable): Restore previous setting.
        * inspector/InspectorPageAgent.h:
        (InspectorPageAgent): Added m_originalScriptExecutionDisabled.

2013-04-03  Dean Jackson  <dino@apple.com>

        Cross fade into restarted plugin
        https://bugs.webkit.org/show_bug.cgi?id=113868

        Reviewed by Tim Horton.

        Allow a restarted plugin to fade in over its snapshot, avoiding the abrupt
        flash of empty content. The WebCore part of this patch marks the plugin
        element as restarted, and draws the snapshot for a short amount of time
        as the plugin is restarting. After the plugin has reappeared, we stop drawing
        the snapshot.

        There is a little bit of drive-by whitespace removal in HTMLPlugInImageElement.

        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::restartedPlugin): New method indicating if the plugin has been restarted.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Initialise new timer and member variable.
        (WebCore::HTMLPlugInImageElement::setDisplayState): If we are moving into a restarting state, make sure
            to remember this and also start a timer so that we show the snapshot for while.
        (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired): No need to draw the snapshot from here on.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): Member variable to remember if we've restarted.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintContents): Only exit early from the paint if we're not a restarting
            plugin, otherwise we do want to draw the snapshot if there is one.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::isRestartedPlugin): Detects a restarted plugin.
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): Don't become a simple container
            compositing layer if you're a restarted plugin.

2013-04-03  John Griggs  <jgriggs@blackberry.com>

        [BlackBerry] Adjustments to media controls appearance.
        https://bugs.webkit.org/show_bug.cgi?id=113816
        https://przilla.ott.qnx.com/bugzilla/show_bug.cgi?id=316398
        https://przilla.ott.qnx.com/bugzilla/show_bug.cgi?id=316438

        Updates to the BlackBerry media controls:
         - extend the timeline slider.
         - move the volume slider for audio elements up so it does not overlap the main panel.
         - upstream some other cosmetic changes to media controls that were not previously upstreamed.

        Reviewed by Rob Buis.

        BlackBerry-specific, cosmetic change; No new tests required.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::adjustMediaControlStyle):
        (WebCore::RenderThemeBlackBerry::paintMediaPlayButton):
        (WebCore::RenderThemeBlackBerry::paintMediaMuteButton):
        (WebCore::RenderThemeBlackBerry::paintMediaSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintMediaVolumeSliderThumb):

2013-04-03  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Gstreamer] Use gst_buffer_extract() in copyGstreamerBuffersToAudioChannel()
        https://bugs.webkit.org/show_bug.cgi?id=113880

        Reviewed by Philippe Normand.

        copyGstreamerBuffersToAudioChannel() was mapping the GstBuffer content to memcpy
        it to the AudioChannel buffer. This patch leverages gst_buffer_extract() to
        simplify the code as it does exactly what we need: gst_buffer_map, memcpy,
        gst_buffer_unmap and error handling.

        Also replace GstBuffer NULL check by an assertion as we already make sure they
        are not NULL before adding them to the list. Additionally, we now call
        audioChannel->mutableData() only once instead of once per iteration. It is
        a bit better as the getter does some work internally.

        No new tests, no behavior change.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::copyGstreamerBuffersToAudioChannel):

2013-04-03  Antoine Quint  <graouts@apple.com>

        Web Inspector: DOM.highlightRect() and DOM.highlightQuad() should allow for page coordinates
        https://bugs.webkit.org/show_bug.cgi?id=113869

        Add a new "usePageCoordinates" parameter to DOM.highlightRect() and DOM.highlightQuad()
        allowing to specify that the rect or quad to highlight should be converted to page
        coordinates instead of using the default viewport coordinates.

        Reviewed by Timothy Hatcher.

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightRect):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::innerHighlightQuad):
        Store the "usePageCoordinates" parameter obtained from the protocol calls onto the
        highlight configuration object so that it may be used within the InspectorOverlay.

        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::highlightQuad):
        Check the highlight configuration for the "usePageCoordinates" parameter and
        apply the inverse of the page's scroll offset to the quad if it's true.

        * inspector/InspectorOverlay.h:
        (HighlightConfig):
        (WebCore::Highlight::setDataFromConfig):
        (Highlight):

2013-04-03  Kangil Han  <kangil.han@samsung.com>

        Add omitted reference operator of VisiblePosition in AccessibilityObject
        https://bugs.webkit.org/show_bug.cgi?id=113879

        Reviewed by Darin Adler.

        Seems reference operator has been omitted in startOfStyleRange function, so add it.

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

2013-04-03  Jessie Berlin  <jberlin@apple.com>

        Update the localizable strings file.

        Rubber-stamped by Michael Saboff.

        * English.lproj/Localizable.strings:

2013-04-03  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r147493): Fix number of arguments to AudioDestinationIOS constructor

        Fixes the following build failures:

            Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:84:25: error: no matching constructor for initialization of 'WebCore::AudioDestinationIOS'
                return adoptPtr(new AudioDestinationIOS(callback, sampleRate));
                                    ^                   ~~~~~~~~~~~~~~~~~~~~
            In file included from Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:36:
            Source/WebCore/platform/audio/ios/AudioDestinationIOS.h:44:5: note: candidate constructor not viable: requires 3 arguments, but 2 were provided
                AudioDestinationIOS(AudioIOCallback&, unsigned numberOfOutputChannels, double sampleRate);
                ^
            Source/WebCore/platform/audio/ios/AudioDestinationIOS.h:42:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
            class AudioDestinationIOS : public AudioDestination, public AudioSessionListener {
                  ^
            Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:101:22: error: out-of-line definition of 'AudioDestinationIOS' does not match any declaration in 'WebCore::AudioDestinationIOS'
            AudioDestinationIOS::AudioDestinationIOS(AudioIOCallback& callback, double sampleRate)
                                 ^~~~~~~~~~~~~~~~~~~
            2 errors generated.

        * platform/audio/ios/AudioDestinationIOS.h:
        (AudioDestinationIOS): Remove numberOfOutputChannels argument.

2013-04-03  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r147494): -[AVAudioSession setCategory:error:] takes NSError**

        Fixes the following build failure:

            Source/WebCore/platform/audio/ios/AudioSessionIOS.mm:151:71: error: cannot initialize a parameter of type 'NSError **' with an lvalue of type 'NSError *'
                [[AVAudioSession sharedInstance] setCategory:categoryString error:error];
                                                                                  ^~~~~

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory): Add '&' operator.

2013-04-03  Felipe Zimmerle  <felipe@zimmerle.org>

        CSP blocks inline style when cloning a node
        https://bugs.webkit.org/show_bug.cgi?id=112270

        Reviewed by Adam Barth.

        Checks if the Element is being cloned, if so, the application of the
        style is allowed otherwise it relies on default permission mechanism.

        Test: http/tests/security/contentSecurityPolicy/inline-style-allowed-while-cloning-objects.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged): Added parameter
        AttributeModificationReason to the method signature.
        (WebCore::Element::cloneAttributesFromElement): It is now calling 
        attributeChanged with AttributeModificationReason parameter. In this scope
        it is always set to ModifiedByCloning.
        (WebCode::Element::attributeChangedFromParserOrByCloning):
        Added parameter AttributeModificationReason.
        * dom/Element.h: Added AttributeModificationReason enum. Used to specify
        whenever an attribute was set by a cloned oject or directly.
        AttributeModificationReason added to attributeChanged with the default
        value set to ModifiedDirectly. 
        * dom/StyledElement.cpp: 
        (WebCore::StyledElement::attributeChanged): Added
        AttributeModificationReason to the method signature.
        (WebCore::StyledElement::styleAttributeChanged): Now it is checking the
        reason of the update, if the reason is ModifiedDirectly check CSP
        before set. If ModifiedByCloning set the attribute ignoring the CSP
        policy.
        * dom/StyledElement.h:
        (StyledElement): Added AttributeModificationReason parameter to the methods:
        attributeChanged and styleAttributeChanged, attributeChanged has
        ModifiedDirectly as default value.
        * svg/SVGElement.cpp: 
        (WebCore::SVGElement::attributeChanged): Added AttributeModificationReason
        parameter to the method signature.
        * svg/SVGElement.h: 
        (SVGElement): Added AttributeModificationReason parameter to the
        attributeChanged signature with the default value set to:
        ModifiedDirectly.

2013-04-03  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed 32bit buildfix after r147542.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveBinaryData):

2013-04-03  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Gstreamer] Avoid calls to g_slist_nth_data in webKitWebAudioSrcLoop()
        https://bugs.webkit.org/show_bug.cgi?id=113875

        Reviewed by Philippe Normand.

        webKitWebAudioSrcLoop() was iterating over 2 GSLists by using a counter and then
        calling g_slist_nth_data() to get the element of each GSList. This is inefficient
        because calling g_slist_nth_data() will iterate the GSList up until index 'n'.

        This patch improves this by keeping pointers to the current element of each list
        while iterating, so that we can simply use g_slist_next() to iterate instead
        of g_slist_nth_data().

        No new tests, no behavior change.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop):

2013-04-03  Keishi Hattori  <keishi@webkit.org>

        Actions that require user gesture don't work in window.showModalDialog in Chromium
        https://bugs.webkit.org/show_bug.cgi?id=113777

        Reviewed by Jochen Eisinger.

        In Chromium the window for showModalDialog is not modal which causes the
        UserGestureIndicator to block actions in the sub window. We introduce a
        RAII that saves the UserGestureIndicator and state, then resets it before
        runModalDialog, and restore it when it's done.

        No new tests. Can't cause user gesture inside modal dialog.

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicatorDisabler::UserGestureIndicatorDisabler): Saves and resets the topmost indicator and state.
        (WebCore):
        (WebCore::UserGestureIndicatorDisabler::~UserGestureIndicatorDisabler): Restores topmost indicator and state.
        * dom/UserGestureIndicator.h:
        (WebCore):
        (UserGestureIndicatorDisabler): RAII to temporarily disable UserGestureIndicator.
        (UserGestureIndicator): Allow access to UserGestureIndicatorDisabler.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::showModalDialog): Disable UserGestureIndicator while runModalDialog.

2013-04-03  Zeno Albisser  <zeno@webkit.org>

        [Qt] Fail gracefully if an OpenGL context could not be created.
        https://bugs.webkit.org/show_bug.cgi?id=113784

        In case we fail to create or adopt a valid platform OpenGL context
        we do not want to provide a GraphicsContext3D instance.
        Otherwise we would crash as soon as the instance is being used.

        Reviewed by Jocelyn Turcotte.

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

2013-04-03  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Implement matrix keyframe animations with clutter ac backend
        https://bugs.webkit.org/show_bug.cgi?id=110314

        Reviewed by Gustavo Noronha Silva.

        Clutter 1.12 doesn't support additive transform animations yet, So clutter ac backend
        uses matrix animations for the case. This patch follows changeset 143369, 143343
        to support matrix keyframe animations. I believe this change is easy if you understand
        above two changesets.

        Covered by existing animation tests.

        * platform/graphics/clutter/PlatformClutterAnimation.cpp:
        (WebCore::PlatformClutterAnimation::setValues):
        (WebCore::PlatformClutterAnimation::addClutterKeyframeTransitionForProperty):
        (WebCore):
        (WebCore::PlatformClutterAnimation::addTransformTransition):
        * platform/graphics/clutter/PlatformClutterAnimation.h:
        (PlatformClutterAnimation):

2013-04-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Should close select popup when the element loses focus
        https://bugs.webkit.org/show_bug.cgi?id=113220

        Reviewed by Kent Tamura.

        Test: fast/forms/select-popup-closes-on-blur.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): handle the blur event, closing
        the popup menu if any.
        * testing/Internals.cpp:
        (WebCore::Internals::isSelectPopupVisible): utility to query the select node renderer to
        find out whether the popup is open or closed.
        (WebCore):
        * testing/Internals.h: add the new method definition.
        * testing/Internals.idl: ditto.

2013-03-28  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [Qt] Switch ContextMenu implementation to CROSS_PLATFORM_CONTEXT_MENU
        https://bugs.webkit.org/show_bug.cgi?id=113535

        Reviewed by Simon Hausmann.

        Now Qt uses the CROSS_PLATFORM_CONTEXT_MENUS
        USE flag. This flag provides a full cross-platform
        representation of a ContextMenu and a ContextMenuItem.
        The embedder can then decide how to show this, so neither
        WebCore nor WebCore/platform need to know any platform
        specifics about menus.

        No new tests, no behavior changes.

        * Target.pri:
        * platform/ContextMenu.h:
        (ContextMenu):
        * platform/ContextMenuItem.h:
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::platformContextMenuItem):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::getContextMenuItems):
        (WebCore::ContextMenu::createPlatformContextMenuFromItems):
        (WebCore::ContextMenu::platformContextMenu):

2013-04-03  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Monospace font does not render in proper sizes
        https://bugs.webkit.org/show_bug.cgi?id=93263

        Reviewed by Jocelyn Turcotte.

        Remove this patch's artificial dependency on Qt 5.1.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2013-04-03  Takeshi Yoshino  <tyoshino@chromium.org>

        Refine LOG messages in WebSocket related components
        https://bugs.webkit.org/show_bug.cgi?id=113852

        Reviewed by Kent Tamura.

        Refine LOG messages by
        - Make them contain method names to ease identifying where the event occurred.
        - For consistency, make all messages print the pointer of the origin instance.
        - Quote UTF8 data in LOG messages.
        - For overloaded methods, add the type to clarify which one is run

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::contextDestroyed):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didReceiveBinaryData):
        (WebCore::WebSocket::didReceiveMessageError):
        (WebCore::WebSocket::didUpdateBufferedAmount):
        (WebCore::WebSocket::didStartClosingHandshake):
        (WebCore::WebSocket::didClose):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::subprotocol):
        (WebCore::WebSocketChannel::extensions):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::bufferedAmount):
        (WebCore::WebSocketChannel::close):
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::willOpenSocketStream):
        (WebCore::WebSocketChannel::didOpenSocketStream):
        (WebCore::WebSocketChannel::didCloseSocketStream):
        (WebCore::WebSocketChannel::didReceiveSocketStreamData):
        (WebCore::WebSocketChannel::didFailSocketStream):
        (WebCore::WebSocketChannel::didStartLoading):
        (WebCore::WebSocketChannel::didReceiveData):
        (WebCore::WebSocketChannel::didFinishLoading):
        (WebCore::WebSocketChannel::didFail):
        (WebCore::WebSocketChannel::appendToBuffer):
        (WebCore::WebSocketChannel::processBuffer):
        (WebCore::WebSocketChannel::startClosingHandshake):
        (WebCore::WebSocketChannel::closingTimerFired):
        * Modules/websockets/WebSocketDeflater.cpp:
        (WebCore::WebSocketDeflater::~WebSocketDeflater):
        (WebCore::WebSocketInflater::~WebSocketInflater):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):
        * platform/network/chromium/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandleInternal::connect):
        (WebCore::SocketStreamHandleInternal::send):
        (WebCore::SocketStreamHandleInternal::close):
        (WebCore::SocketStreamHandleInternal::didOpenStream):
        (WebCore::SocketStreamHandleInternal::didSendData):
        (WebCore::SocketStreamHandleInternal::didReceiveData):
        (WebCore::SocketStreamHandleInternal::didClose):
        (WebCore::SocketStreamHandleInternal::didFail):

2013-04-03  Tor Arne Vestbø  <tor.arne.vestbo@digia.com>

        [Qt] Update QMAKE_MAC_SDK check for Qt 5.1

        Relies on QMAKE_MAC_SDK_VERSION set in features.prf

        Reviewed by Simon Hausmann.

        * WebCore.pri:

2013-04-03  Kristof Provost  <kristof@codepro.be>

        [Qt] assignToHTMLImageElement no longer exists in Qt5
        https://bugs.webkit.org/show_bug.cgi?id=113639

        Reviewed by Simon Hausmann.

        No new tests: covered by ./Source/WebKit/qt/tests/hybridPixmap/test.html

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapRuntime::getClassRef):

2013-04-03  Antoine Quint  <graouts@apple.com>

        Web Inspector: crash in WebCore::InspectorLayerTreeAgent::buildObjectForLayer if a layer is created for an anonymous RenderObject (:first-letter)
        https://bugs.webkit.org/show_bug.cgi?id=113768

        The InspectorLayerTreeAgent now knows how to deal with anonymous RenderObjects
        for the :first-letter and :first-line pseudo-elements.

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/layers/layers-anonymous.html

        * inspector/Inspector.json:
        Change the Layer type in the LayerTree domain to have more accurate terminology
        (pseudo-element vs. pseudo-class) and a new optional isAnonymous flag for layers
        associated to anonymous RenderObjects.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        Check for anonymous RenderObjects and set the parent renderer's node as the node
        for this layer since anonymous renderers have the Document as their node and this
        would not be satisfactory to show in a front-end. We also check for anonymous
        RenderObjects for the :first-letter and :first-line pseudo-elements and set them
        in the pseudoElement property of the Layer object created such that a front-end
        could correctly identify what type of pseudo-element for the associated node
        yielded this layer.

        (WebCore::InspectorLayerTreeAgent::idForNode):
        Here we fix the actual crash by first checking if the node provided is null and
        returning 0 if there's no such node. This ensures that any scenario where there
        is no node associated with the RenderObject simply informs of the front-end that
        no such node exists and we do not crash.

2013-04-03  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION(r147117)][Elements] Copy/paste keyboard shortcuts broken in "Edit as HTML"
        https://bugs.webkit.org/show_bug.cgi?id=113798

        Reviewed by Yury Semikhatsky.

        Stop propagation of "copy" event from the multiline editor's
        CodeMirror host element so that it is not handled by
        WebInspector.documentCopy().

        * inspector/front-end/UIUtils.js:
        (.consumeCopy):
        (.cleanUpAfterEditing):
        * inspector/front-end/inspector.js:
        (WebInspector.addMainEventListeners):

2013-04-03  Takashi Sakamoto  <tasak@google.com>

        With borders of differing alpha, the corners become squared off
        https://bugs.webkit.org/show_bug.cgi?id=113744

        Reviewed by Simon Fraser.

        paintTranslucentBorderSides should pick up borders with common color
        in order: top, bottom, left and right (not top, right, bottom and
        left), because willBeOverdrawn depends on the assumption, borders are
        drawn in order: top, bottom, left and right.

        Test: fast/borders/border-left-right-same-bottom-different-color.html

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

2013-04-03  Mihnea Ovidenie  <mihnea@adobe.com>

        [New Multicolumn]Remove assert in RenderMultiColumnFlowThread::createAnonymous
        https://bugs.webkit.org/show_bug.cgi?id=113855

        Reviewed by Antti Koivisto.

        Remove CSSRegions specific assert from new multicolumn implementation.
        No change in functionality, no new tests.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::createAnonymous):

2013-04-03  Mike West  <mkwst@chromium.org>

        X-Frame-Options: Blocked frames should not inherit their parent's SecurityOrigin.
        https://bugs.webkit.org/show_bug.cgi?id=112903

        Reviewed by Adam Barth.

        This change brings WebKit in line with IE and Gecko's behavior, both of
        which treat the blocked frame as being cross-origin for the purposes of
        access checks ('[frame].contentWindow.location.href' is inaccessible,
        for example).

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
            Rather than redirecting to 'about:blank', redirect to a URL which
            does not inherit the SecurityOrigin of the parent.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
            Before calling cancelMainResourceLoad, ensure that the frame's
            document is sandboxed into a unique origin so that it doesn't inherit
            the parent's SecurityOrigin.

2013-04-03  Mikhail Naganov  <mnaganov@chromium.org>

        [Chromium] Implement target-densityDpi viewport property emulation
        https://bugs.webkit.org/show_bug.cgi?id=110835

        The value is only used in the Chromium port, when the corresponding
        setting is enabled.

        This is needed for supporting existing WebView-based applications
        that rely on this property.

        Reviewed by Adam Barth.

        * dom/ViewportArguments.cpp:
        (WebCore::findTargetDensityDPIValue):
        (WebCore):
        (WebCore::setViewportFeature):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::ViewportArguments):
        (ViewportArguments):
        (WebCore::ViewportArguments::operator==):

2013-04-03  Mike West  <mkwst@chromium.org>

        Extract URL that doesn't inherit a parent's SecurityOrigin out into a constant.
        https://bugs.webkit.org/show_bug.cgi?id=113780

        Reviewed by Jochen Eisinger.

        We're scheduling navigations to 'data:text/html,' in XSSAuditor in
        order to end up on a page that doesn't inherit its parent's
        SecurityOrigin. We'll be reusing this mechainsm to solve
        http://wkbug.com/112903

        This patch makes us more explicit about what we're doing and why.
        It doesn't change any behavior: XSSAuditor tests should still pass.

        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
            Use SecurityOrigin::urlWithUniqueSecurityOrigin rather than a
            literal string to make our intentions clear.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::urlWithUniqueSecurityOrigin):
        * page/SecurityOrigin.h:
            Add the new static method.

2013-04-02  Chris Fleizach  <cfleizach@apple.com>

        clean up static casts in WebAccessibilityObjectWrapperMac.mm to methods like toAccessibilityList()
        https://bugs.webkit.org/show_bug.cgi?id=113828

        Reviewed by Tim Horton.

        static_cast changed to toAccessibilityList().

        * accessibility/AccessibilityList.h:
        (WebCore::toAccessibilityList):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):

2013-04-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r147370.
        http://trac.webkit.org/changeset/147370
        https://bugs.webkit.org/show_bug.cgi?id=113850

        This patch is causing crashes in video tests on all Mac bots.
        (Requested by jernoble_ on #webkit).

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

2013-04-02  James Craig  <james@cookiecrook.com>

        AXRoleDescripton for DL is "list"; should be "description list"
        https://bugs.webkit.org/show_bug.cgi?id=111665

        Reviewed by Chris Fleizach.

        Defining the role and description strings, and accessors for DL.
        This previously relied on getting the role and description from the platform API.

        Updated existing test coverage.

        * English.lproj/Localizable.strings:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXDescriptionListText):
        (WebCore):
        * platform/LocalizedStrings.h:
        (WebCore):
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        (WebCore::AXDescriptionListText):
        (WebCore):
        * platform/chromium/LocalizedStringsChromium.cpp:
        (WebCore::AXDescriptionListText):
        (WebCore):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXDescriptionListText):
        (WebCore):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXDescriptionListText):
        (WebCore):
        * platform/qt/LocalizedStringsQt.cpp:
        (WebCore::AXDescriptionListText):
        (WebCore):

2013-04-02  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Split business logic and presentation for initiator column.
        https://bugs.webkit.org/show_bug.cgi?id=113486

        Reviewed by Pavel Feldman.

        Currently business logic and presentation are mixed.
        This prevents making cell renderer static and applying
        viewport rendering, because initiator sorting function
        depends on data written when cell is rendered.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshInitiatorCell):
        Removed business logic. Use "initiatorInfo".
        (WebInspector.NetworkDataGridNode.InitiatorComparator):
        Use "initiatorInfo".
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.initiatorInfo):
        Extracted business logic from "refreshInitiatorCell".

2013-04-02  Ryosuke Niwa  <rniwa@webkit.org>

        needsLeopardMailQuirks should be removed
        https://bugs.webkit.org/show_bug.cgi?id=113749

        Reviewed by Benjamin Poulain.

        Removed needsLeopardMailQuirks from settings.in after r147447.

        * page/Settings.in:

2013-04-02  Jaehun Lim  <ljaehun.lim@samsung.com>

        [css3-text] Rendering -webkit-each-line value for text-indent from css3-text
        https://bugs.webkit.org/show_bug.cgi?id=113259

        Reviewed by Levi Weintraub.

        CSS3 TEXT introduces new value, "each-line" for text-indent.
        Indentation affects the first line of the block container as well as each line
        after a forced line break, but does not affect lines after a soft wrap break.

        This patch is the rendering part to support each-line value for text-indent.
        It's prefixed and guarded by CSS3_TEXT flag.

        Test: fast/css3-text/css3-text-indent/text-indent-each-line.html

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::startOffsetForLine):
        (WebCore::RenderBlock::endOffsetForLine):
        (WebCore::RenderBlock::pixelSnappedLogicalLeftOffsetForLine):
        (WebCore::RenderBlock::pixelSnappedLogicalRightOffsetForLine):
            Rename a parameter from firstLine to shouldIndentText.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::shouldIndentText): Return boolean according to m_shouldIndentText.
        (WebCore::LineWidth::updateAvailableWidth):
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        (WebCore::LineWidth::fitBelowFloats):
            Add enum IndentTextOrNot and m_shouldIndentText.
            Use m_shouldIndentText instead of m_isFirstLine.

        (WebCore::requiresIndent): Decide whether text indentation is required.
        (WebCore::updateLogicalInlinePositions):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):

2013-04-02  Glenn Adams  <glenn@skynav.com>

        Generalize prior line break context state and names.
        https://bugs.webkit.org/show_bug.cgi?id=113823

        Reviewed by Darin Adler.

        No new tests required due to no behavioral change.

        * platform/text/TextBreakIterator.h:
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::lastCharacter):
        (WebCore::LazyLineBreakIterator::secondToLastCharacter):
        (WebCore::LazyLineBreakIterator::setPriorContext):
        (WebCore::LazyLineBreakIterator::updatePriorContext):
        (WebCore::LazyLineBreakIterator::resetPriorContext):
        (WebCore::LazyLineBreakIterator::resetStringAndReleaseIterator):
        Store previous characters as prior context buffer used directly
        by line break iterator implementation. Rename members to reflect
        somewhat more general usage. Also fix bad indentations.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):
        Use renamed line break iterator methods.

2013-04-02  Emil A Eklund  <eae@chromium.org>

        Padding applied twice for empty generated RenderInlines
        https://bugs.webkit.org/show_bug.cgi?id=113800

        Reviewed by Levi Weintraub.
        
        The padding for empty generated content render objects is
        incorrectly applied twice. Regression from r140693.

        Test: fast/css-generated-content/margin-empty-content.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::inlineLogicalWidth):

2013-04-02  Levi Weintraub  <leviw@chromium.org>

        InlineIterator needs to be updated when RenderCombineText shrinks at a line break
        https://bugs.webkit.org/show_bug.cgi?id=113733

        Reviewed by Emil A Eklund.

        Update stale InlineIterators that point beyond the end of a RenderCombineText that's
        shrunk when RenderCombineText::combineText() is called.

        Test: fast/text/international/combine-at-line-break-crash.html

        * rendering/BidiRun.h:
        (WebCore::BidiRun::BidiRun): Adding an assertion that runs are created within
        the bounds of their associated RenderText.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::iteratorIsBeyondEndOfRenderCombineText): Added.
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak): Update stale iterators.

2013-04-02  Max Vujovic  <mvujovic@adobe.com>

        [CSS Filters] Filter outsets clipped on composited layers when filter is applied after first layout
        https://bugs.webkit.org/show_bug.cgi?id=109098

        Reviewed by Dean Jackson.

        This patch addresses the following issues:
        (1) Compositors who can compute their own filter outsets don't need WebKit to inflate the
            composited layer bounds. Eventually, all platforms' compositors should be able to
            compute their own filter outsets.
        (2) When filter outsets change, we need to update composited layer bounds if the filters are
            painted in software.
        (3) When filter outsets change, we need to recompute the overlap map to promote the correct
            layers to composited layers on all platforms.

        Tests: css3/filters/composited-layer-bounds-after-sw-blur-animation.html
               css3/filters/composited-layer-bounds-with-composited-blur.html
               css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change.html
               css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow.html
               css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow.html

        * platform/graphics/IntRectExtent.h:
        (WebCore::IntRectExtent::isZero):
        (IntRectExtent):

            Make isZero public on IntRectExtent.

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

            Helper function used to exit early from filters related code.

        (WebCore::RenderLayer::updateFilters):

            Move filter updating code from RenderLayer::styleChanged into this new method.

            This method calls RenderLayerBacking::updateFilters instead of
            RenderLayerBacking::updateGraphicsLayerGeometry. RenderLayerBacking::updateFilters lets
            us know whether there was a filter paint mode change (i.e. the filters were painted in
            software and are now painted in the compositor, or vice-versa). We need to know this
            earlier, in RenderLayer::styleChanged, because we may need to rebuild the compositing
            layers due to a filter paint mode change.

        (WebCore::RenderLayer::styleChanged):

            Add a condition for filters for setCompositingLayersNeedRebuild. If the filter outsets
            on a layer changed, we need to rebuild the compositing layers because there could be new
            overlap. Likewise, if there are or were filter outsets and the filter paint mode changed
            the layer bounds (and child positions) may have changed. In either case, we don't
            rebuild the compositing layers if there is an accelerated filter animation running.

            Remove old code to detect a filter paint mode change from the end of
            RenderLayer::styleChanged because it could never be executed. The old code counted on
            RenderLayerBacking::canCompositeFilters to change on its own, but it doesn't change
            unless updateFilters gets called. Thus, we could never enter the if statement that
            calls setBackingNeedsRepaint.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateFilters):

            Now return true if there was a filter paint mode change, so RenderLayer::styleChanged
            can decide if it should rebuild the compositing layers.

            Call updateOrRemoveFilterEffectRenderer and setContentsNeedDisplay if there was a
            render mode change. We need to either destroy or create the software renderer and we
            need to repaint the layer contents if there was a render mode change.

        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

            Don't call updateFilters here. Call it earlier in RenderLayer::styleChanged, for reasons
            explained above.

        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

            Make updateFilters public so RenderLayer::styleChanged can call it.

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

            If the platform's compositor computes filter outsets for its layers internally, do not
            inflate WebKit's composited bounds for filter outsets. This results in smaller layers
            on Safari. Note that we still need to include filter outsets in layer bounds for other
            situations like overlap testing in WebKit and when we're painting filters in software.

2013-04-02  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Make libsecret optional
        https://bugs.webkit.org/show_bug.cgi?id=113821

        Reviewed by Gustavo Noronha Silva.

        Don't try to use libsecret if credential storage is disabled.

        * platform/gtk/GRefPtrGtk.cpp: Protect libsecret sections.
        * platform/gtk/GRefPtrGtk.h: Ditto.
        * platform/network/gtk/CredentialBackingStore.cpp: Ditto.

2013-04-02  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] refactor shape-outside code to use isFloatingWithShapeOutside() helper method
        https://bugs.webkit.org/show_bug.cgi?id=113799

        Reviewed by Dirk Schulze.

        When reviewing my patch for bug 110349, Julien mentioned that the
        common test for floating with shape outside should be factored out.
        This patch does that.

        No new functionality, so no new tests.

        * rendering/ExclusionShapeOutsideInfo.cpp:
        (WebCore::ExclusionShapeOutsideInfo::isEnabledFor): Use helper method.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::exclusionShapeOutsideInfo): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly): Ditto.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasPaintOffset):  Ditto.
        (WebCore::RenderObject::isFloatingWithShapeOutside): Add method to
            encapsulate the common test.

2013-04-02  Jer Noble  <jer.noble@apple.com>

        Add platform AudioSession and iOS platform-specific code.
        https://bugs.webkit.org/show_bug.cgi?id=113813
        <rdar://problem/11701792>

        Reviewed by Eric Carlson.

        Replace the deprecated AudioToolbox AudioSession APIs with the new AVAudioSession API.
        To protect against exposing platform specific intrinsics to cross-platform code, add a
        platform generic class AudioSession, with port-specific implementations. A default
        implementation is provided.

        Add a new listener interface to receive interruption notifications:
        * platform/audio/AudioSessionListener.h: Added.
        (WebCore::AudioSessionListener::AudioSessionListener):
        (WebCore::AudioSessionListener::~AudioSessionListener):

        Add a platform generic AudioSession class:
        * platform/audio/AudioSession.cpp: Added.
        (AudioSession::sharedSession): AudioSession is a singleton object, and this is its accessor.
        (AudioSession::addListener): Add the parameter to the listeners set.
        (AudioSession::removeListener): Remove the parameter from the listers set.
        (AudioSession::beganAudioInterruption): Iterate over the parameters.
        (AudioSession::endedAudioInterruption): Ditto.
        (AudioSession::AudioSession): Empty stub.
        (AudioSession::~AudioSession): Ditto.
        (AudioSession::setCategory): Ditto.
        (AudioSession::category): Ditto.
        (AudioSession::sampleRate): Ditto.
        (AudioSession::numberOfOutputChannels): Ditto.
        (AudioSession::setActive): Ditto.
        (AudioSession::preferredBufferDuration): Ditto.
        (AudioSession::setPreferredBufferDuration): Ditto.
        * platform/audio/AudioSession.h: Added.

        Add IOS-specific AudioSession implementation:
        * platform/audio/ios/AudioSessionIOS.mm: Added.
        (-[WebAudioSessionHelper initWithCallback:WebCore::]): Register for interruption notifications.
        (-[WebAudioSessionHelper dealloc]): Unregister for interruption notifications.
        (-[WebAudioSessionHelper interruption:]): Pass to AudioSession.
        (WebCore::AudioSessionPrivate::AudioSessionPrivate): Private storage for AudioSessionIOS.
        (WebCore::AudioSession::AudioSession): Create AudioSessionPrivate and WebAudioSessionHelper.
        (WebCore::AudioSession::~AudioSession): Simple destructor.
        (WebCore::AudioSession::setCategory): Check the current categoryOverride, and refuse to overwrite
            "MediaPlayback" with "AmbientSound".
        (WebCore::AudioSession::setCategoryOverride): Simple setter.
        (WebCore::AudioSession::categoryOverride): Simple getter.
        (WebCore::AudioSession::category): Pass to AVAudioSession.
        (WebCore::AudioSession::sampleRate): Ditto.
        (WebCore::AudioSession::numberOfOutputChannels): Ditto.
        (WebCore::AudioSession::setActive): Ditto.
        (WebCore::AudioSession::preferredBufferDuration): Ditto.
        (WebCore::AudioSession::setPreferredBufferDuration): Ditto.

        Use the new AudioSession class in place of explicit AudioToolbox or AVAudioSession calls:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestination::hardwareSampleRate): Pass to AudioSession.
        (WebCore::AudioDestination::maxChannelCount): Ditto.
        (WebCore::AudioDestinationIOS::AudioDestinationIOS): Register for listeners and activate.
        (WebCore::AudioDestinationIOS::~AudioDestinationIOS): Unregister and deactivate.
        (WebCore::AudioDestinationIOS::configure): Use AudioSession to set the buffer length.
        * platform/audio/ios/AudioDestinationIOS.h:

        Add the new files to the project:
        * WebCore.xcodeproj/project.pbxproj:

2013-04-02  Jer Noble  <jer.noble@apple.com>

        Upstream AudioDestinationIOS.
        https://bugs.webkit.org/show_bug.cgi?id=113806

        Reviewed by Eric Carlson.

        Upstream AudioDestinationIOS from the iOS repository.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/ios/AudioDestinationIOS.cpp: Added.
        (WebCore::audioDestinations):
        (WebCore::AudioDestination::create):
        (WebCore::AudioDestination::hardwareSampleRate):
        (WebCore::AudioDestination::maxChannelCount):
        (WebCore::AudioDestinationIOS::AudioDestinationIOS):
        (WebCore::AudioDestinationIOS::~AudioDestinationIOS):
        (WebCore::AudioDestinationIOS::configure):
        (WebCore::AudioDestinationIOS::audioDestinationInterruptionListener):
        (WebCore::AudioDestinationIOS::initializeAudioSession):
        (WebCore::AudioDestinationIOS::start):
        (WebCore::AudioDestinationIOS::stop):
        (WebCore::AudioDestinationIOS::beganAudioInterruption):
        (WebCore::AudioDestinationIOS::endedAudioInterruption):
        (WebCore::AudioDestinationIOS::render):
        (WebCore::AudioDestinationIOS::inputProc):
        (WebCore::AudioDestinationIOS::frameSizeChangedProc):
        * platform/audio/ios/AudioDestinationIOS.h: Added.
        (AudioDestinationIOS):
        (WebCore::AudioDestinationIOS::isPlaying):
        (WebCore::AudioDestinationIOS::sampleRate):

2013-04-02  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        fast/dom/HTMLImageElement/image-alt-text.html and fast/dom/HTMLInputElement/input-image-alt-text.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=94198

        Reviewed by Darin Adler.

        Fix alt text not being displayed for img elements or input of type
        "image" due to insufficient size. imageSizeForError() was adding
        padding for the alt text but setImageSizeForAltText() was not. The
        issue was occurring in paintReplaced() because the contentWidth() /
        contentHeight() would be exactly the same size as the alt text.
        However, paintReplaced() first draws an outline rect where the
        image should be and then reduces the usable width / height for the
        alt text by 2 so that the text does not get printed over the rect
        borders. However, after decreasing the usable width / height, there
        is no longer enough space to draw the text.

        No new tests, already covered by existing tests.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText): Add padding to the text size
        so that the alt text can still be drawn, despite the outline rect
        borders. Such padding was already used in imageSizeForError(). Also use
        ceilf() for the value returned by Font::width() instead of truncating it.
        This is needed because we need to fit the whole text in the image and this
        may not be the case if we truncate.
        (WebCore::RenderImage::paintReplaced):

2013-04-02  Raymond Toy  <rtoy@google.com>

        Add support for using ARM FFT in WebAudio
        https://bugs.webkit.org/show_bug.cgi?id=109755

        Reviewed by Chris Rogers.

        No new tests.

        * WebCore.gyp/WebCore.gyp: Add dependency on openmax_dl when use_openmax_dl_fft is enabled.
        * WebCore.gypi: Add source FFTFrameOpenMAXDLAndroid.cpp
        * platform/audio/AudioArray.h:
        (WebCore::AudioArray::allocate): Need 32-byte aligntment with the
        OpenMAX DL FFT.
        * platform/audio/FFTFrame.h:
        (FFTFrame): Support OpenMAX DL FFT
        * platform/audio/FFTFrameStub.cpp: Support OpenMAX DL FFT
        * platform/audio/chromium/FFTFrameOpenMAXDLAndroid.cpp: Added.  Implements the
        necessary interface using the OpenMAX DL FFT routines.
        (WebCore):
        (WebCore::FFTFrame::FFTFrame):
        (WebCore::FFTFrame::initialize):
        (WebCore::FFTFrame::cleanup):
        (WebCore::FFTFrame::~FFTFrame):
        (WebCore::FFTFrame::multiply):
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::realData):
        (WebCore::FFTFrame::imagData):
        (WebCore::FFTFrame::contextForSize):

2013-04-02  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [GStreamer] Memory leaks in MediaPlayerPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=113762

        Reviewed by Philippe Normand.

        Don't leak strings returned by gst_element_get_name() and
        gst_missing_plugin_message_get_installer_detail().

        No new tests. No change in behavior.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):

2013-04-02  Min Qin  <qinmin@chromium.org>

        Fix css style for CC button on android
        https://bugs.webkit.org/show_bug.cgi?id=113815

        Reviewed by Adam Barth.

        The default CC button size is 16px as defined in mediaControls.css. Android should use 35px.
        This change fixed that problem.
        Also fixed a problem that r142947 does not change the display of fullscreen button to -webkit-flex
        Android does not run media layout tests currently. Will fix the test expectations when layout tests are run in content shell.

        * css/mediaControlsChromiumAndroid.css:
        (video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):

2013-04-02  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Remove WKCreateNSURLConnectionDelegateProxy
        https://bugs.webkit.org/show_bug.cgi?id=113810

        Reviewed by Anders Carlsson.

        This WKSI function is not used any more.

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-04-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r147464.
        http://trac.webkit.org/changeset/147464
        https://bugs.webkit.org/show_bug.cgi?id=113812

        JSSQLResultSet.cpp:131:24: error: implicit conversion loses
        integer precision: 'int64_t' (aka 'long long') to 'int'
        [-Werror,-Wshorten-64-to-32] (Requested by xenon on #webkit).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjNullableDoubleAttribute):
        (WebCore::jsTestObjNullableLongAttribute):
        (WebCore::jsTestObjNullableBooleanAttribute):
        (WebCore::jsTestObjNullableStringAttribute):
        (WebCore::jsTestObjNullableLongSettableAttribute):
        (WebCore::jsTestObjNullableStringValue):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):

2013-04-02  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: Make Source Frame & status bar a layout boundary
        https://bugs.webkit.org/show_bug.cgi?id=112353

        Reviewed by Pavel Feldman.

        No new tests: no change in behaviour.

        - Add View.markAsLayoutBoundary method to mark a view as a layout
        boundary. This will force this view to autoupdate its height to actual
        pixel value.
        - Mark both CodeMirrorTextEditor and DefaultTextEditor as a layout
        boundary.
        - Mark main-status-bar element with a layout-boundary class.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        * inspector/front-end/DefaultTextEditor.js:
        * inspector/front-end/View.js:
        (WebInspector.View.prototype.markAsLayoutBoundary):
        (WebInspector.View.prototype._processWillShow):
        (WebInspector.View.prototype._processWasShown):
        (WebInspector.View.prototype._processOnResize):
        * inspector/front-end/inspector.css:
        (.layout-boundary):
        * inspector/front-end/inspector.html:

2013-04-02  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13551119> [WK2] Crashes in NetworkProcess when canceling loads
        https://bugs.webkit.org/show_bug.cgi?id=113803

        Reviewed by Darin Adler.

        Stop using a delegate proxy. It hasn't been needed in years, and the extra layer
        just adds bugs.

        This specific issue gets fixed because connection retains its delegate is retained,
        but a proxy does not.

        * WebCore.exp.in:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::releaseDelegate):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Removed code that was dealing with delegate proxy.

2013-04-02  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: Encapsulate SetEmbedderData/GetEmbedderData
        https://bugs.webkit.org/show_bug.cgi?id=113331

        Reviewed by Pavel Feldman.

        Refactor to encapsulate uses of V8 Set/GetEmbedderData together
        with uses of V8 Set/GetAlignedPointerInEmbedderData since these
        functions operate on the same underyling array in V8.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setContextDebugId):
        (WebCore::ScriptController::contextDebugId):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::setInjectedScriptContextDebugId):
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextDebugData::setContextDebugData):
        (WebCore):
        (WebCore::V8PerContextDebugData::contextDebugId):
        (WebCore::V8PerContextDebugData::createDebugData):
        (WebCore::V8PerContextDebugData::getDebugData):
        (WebCore::V8PerContextDebugData::setDebugData):
        * bindings/v8/V8PerContextData.h:
        (V8PerContextDebugData):
        (WebCore):

2013-04-02  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Adjust toolbar labels position
        https://bugs.webkit.org/show_bug.cgi?id=113805

        Reviewed by Pavel Feldman.

        Move the labels 1px up to make them centered.
        Also fix font centering in native memory distribution snapshot.

        * inspector/front-end/inspector.css:
        (.toolbar-label):
        * inspector/front-end/nativeMemoryProfiler.css:
        (.native-snapshot-view .data-grid td):

2013-04-02  Beth Dakin  <bdakin@apple.com>

        Viewport constrained elements should work properly with headers and footers
        https://bugs.webkit.org/show_bug.cgi?id=113743

        Reviewed by Simon Fraser.

        ScrollableArea::constrainScrollPositionForOverhang() needs to take headerHeight 
        and footerHeight into account. It also needs to use totalContentsSize() instead of 
        contentsSize().

        Send totalContentsSize() instead of contentsSize() and also send headerHeight() 
        and footerHeight().
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollOffsetForFixedPosition):
        * page/FrameView.h:
        (FrameView):

        The scrolling tree will also need to know about header and footer heights since it 
        will need these values to call 
        ScrollableArea::constrainScrollPositionForOverhang().
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setHeaderHeight):
        (WebCore::ScrollingStateScrollingNode::setFooterHeight):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::headerHeight):
        (ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::footerHeight):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::headerHeight):
        (WebCore::ScrollingTreeScrollingNode::footerHeight):
        (ScrollingTreeScrollingNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollParameters):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinatorMac::setScrollParametersForNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

        Use footerHeight when calculating the maxValue and use headerHeight in determining 
        what the minimum value is. 
        * platform/ScrollableArea.cpp:
        (WebCore::constrainedScrollPosition):
        (WebCore::ScrollableArea::constrainScrollPositionForOverhang):
        * platform/ScrollableArea.h:
        (ScrollableArea):

2013-04-02  Stephen White  <senorblanco@chromium.org>

        [Skia] Enable GPU-accelerated Skia path for FEComposite filter.
        https://bugs.webkit.org/show_bug.cgi?id=113797

        Reviewed by Adrienne Walker.

        Tests: css3/filters/effect-reference-composite-hw.html
               css3/filters/effect-reference-composite.html

        * WebCore.gypi:
        * platform/graphics/filters/FEComposite.h:
        Enable Skia DAG hook for FEComposite.
        * platform/graphics/filters/skia/FECompositeSkia.cpp: Added.
        (WebCore::FEComposite::createImageFilter):
        Implement skia DAG builder for FEComposite, and implement generic
        skia version of composite filter.

2013-04-02  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: Avoid using style.display="inline-block"
        https://bugs.webkit.org/show_bug.cgi?id=113802

        Reviewed by Pavel Feldman.

        No new tests.

        - Create class "inline-block" which will set "display: inline-block"
        style.
        - Use this class with DIV elements to get "inline-block" element.

        * inspector/front-end/ObjectPopoverHelper.js:
        (WebInspector.ObjectPopoverHelper.prototype.):
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/inspector.css:
        (.inline-block):

2013-04-02  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Timeline] warning markers are not propagated to coalesced records
        https://bugs.webkit.org/show_bug.cgi?id=113789

        Reviewed by Pavel Feldman.

        Test: inspector/timeline/timeline-coalescing.html

        * inspector/front-end/TimelinePresentationModel.js: set childHasWarning on coalescing record if the record it replaces had warnings.
        (WebInspector.TimelinePresentationModel.prototype._replaceWithCoalescedRecord):

2013-04-02  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: memory instrumentation for external strings is broken
        https://bugs.webkit.org/show_bug.cgi?id=113788

        Reviewed by Pavel Feldman.

        Native memory snapshot now provides information about JS external strings.

        Test: inspector/profiler/memory-instrumentation-external-string.html

        * inspector/InspectorMemoryAgent.cpp:

2013-04-02  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: memory instrumentation for external arrays is broken
        https://bugs.webkit.org/show_bug.cgi?id=113790

        Report pointers to external arrays as retaining ones to make sure their
        size is counted correctly.

        Reviewed by Pavel Feldman.

        Test: inspector/profiler/memory-instrumentation-external-array.html

        * inspector/InspectorMemoryAgent.cpp:

2013-04-02  Peter Beverloo  <peter@chromium.org>

        [JSC] Don't create a JSValue if it's not going to be used for nullable attributes
        https://bugs.webkit.org/show_bug.cgi?id=112711

        Reviewed by Sam Weinig.

        When nullable attributes are used, it's possible that we disregard the JSValue
        when null should be returned instead. This is a waste, and we should cast the
        native type to a JSValue as late as possible.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (NativeValueToLocal):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjNullableDoubleAttribute):
        (WebCore::jsTestObjNullableLongAttribute):
        (WebCore::jsTestObjNullableBooleanAttribute):
        (WebCore::jsTestObjNullableStringAttribute):
        (WebCore::jsTestObjNullableLongSettableAttribute):
        (WebCore::jsTestObjNullableStringValue):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):

2013-04-02  Bem Jones-Bey  <bjonesbe@adobe.com>

        [css exclusions] overflow:hidden undoes shape-outside offsets
        https://bugs.webkit.org/show_bug.cgi?id=110349

        Reviewed by Julien Chaffraix.

        When overflow: hidden was set on a float with shape-outside, the
        offset from the shape-outside was being ignored. This was because the
        float was being placed in the normal flow, causing the offsets to be
        calculated differently. Since floats with shape outside behave like
        positioned objects in many places, I have caused them to take the same
        behavior as positioned objects in this case as well: the floats with
        shape-outside do not get placed in the normal flow when overflow:
        hidden is set.

        Test: fast/exclusions/shape-outside-floats/shape-outside-floats-overflow-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly): Floats that have
            shape-outside should not be in the normal flow.

2013-04-02  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: resource preview of html/js/css types should be on a grey background
        https://bugs.webkit.org/show_bug.cgi?id=113791

        Reviewed by Pavel Feldman.

        No new tests.

        - Add a css rule to set grey background for SourceFrame in resource view.
        - Add "fill" style to SourceFrame element to setup its height.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        * inspector/front-end/resourceView.css:
        (.resource-view .script-view):

2013-04-02  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] Editor doesn't have yellow background in DivergedFromVM state
        https://bugs.webkit.org/show_bug.cgi?id=113783

        Reviewed by Pavel Feldman.

        No new tests.

        Force CodeMirrorTextEditor to have transparent background to inherit
        background color from source frame.

        * inspector/front-end/cm/cmdevtools.css:
        (.CodeMirror):

2013-04-02  Jochen Eisinger  <jochen@chromium.org>

        Check whether popups are allowed before creating a new window
        https://bugs.webkit.org/show_bug.cgi?id=113782

        Reviewed by Adam Barth.

        Otherwise, firing a generated mouse event at an anchor is enough to
        work around the popup blocker.

        Test: fast/loader/url-selected-user-gesture.html

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy):

2013-04-02  Jochen Eisinger  <jochen@chromium.org>

        When computing the percentage of the logical height, use the logical top and bottom
        https://bugs.webkit.org/show_bug.cgi?id=113761

        Reviewed by Ojan Vafai.

        Test: fast/writing-mode/percentage-height-orthogonal-writing-modes.html

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

2013-04-02  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] do not show cursor in read-only mode
        https://bugs.webkit.org/show_bug.cgi?id=113793

        Reviewed by Alexander Pavlov.

        No new tests.

        Pass "nocursor" option to CodeMirror's "readonly" setting.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor.prototype.setReadOnly):

2013-04-02  Nate Chapin  <japhet@chromium.org>

        Unreviewed, rolling out r147402.
        http://trac.webkit.org/changeset/147402
        https://bugs.webkit.org/show_bug.cgi?id=112903

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):

2013-04-02  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Support preserves3D css property for clutter ac backend.
        https://bugs.webkit.org/show_bug.cgi?id=113318

        Reviewed by Gustavo Noronha Silva.

        This patch brings preserve-3D css property support to WebKitGtk+ with clutter ac backed.
        Most of the code is based on Mac port's implementation. The core concept is that
        if a layer has preserve-3d property false, we mark itself and its immediate children
        to make them flatten. And then we remove 3D factor in a modelView matrix
        when applying it to each actor.

        No new tests as this is covered with existing AC tests.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (_GraphicsLayerActorPrivate):
        (graphics_layer_actor_init):
        (graphicsLayerActorApplyTransform):
        (graphicsLayerActorNew):
        (graphicsLayerActorRemoveFromSuperLayer):
        (graphicsLayerActorSetDrawsContent):
        (graphicsLayerActorSetFlatten):
        * platform/graphics/clutter/GraphicsLayerActor.h:
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::~GraphicsLayerClutter):
        (WebCore::GraphicsLayerClutter::platformLayer):
        (WebCore::GraphicsLayerClutter::moveOrCopyAnimations):
        (WebCore):
        (WebCore::GraphicsLayerClutter::setPreserves3D):
        (WebCore::GraphicsLayerClutter::flushCompositingState):
        (WebCore::GraphicsLayerClutter::recursiveCommitChanges):
        (WebCore::GraphicsLayerClutter::commitLayerChangesAfterSublayers):
        (WebCore::GraphicsLayerClutter::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerClutter::updateGeometry):
        (WebCore::GraphicsLayerClutter::updateSublayerList):
        (WebCore::GraphicsLayerClutter::updateStructuralLayer):
        (WebCore::GraphicsLayerClutter::ensureStructuralLayer):
        (WebCore::GraphicsLayerClutter::structuralLayerPurpose):
        (WebCore::GraphicsLayerClutter::layerForSuperlayer):
        * platform/graphics/clutter/GraphicsLayerClutter.h:
        (CommitState):
        (WebCore::GraphicsLayerClutter::CommitState::CommitState):
        (GraphicsLayerClutter):
        (WebCore::GraphicsLayerClutter::primaryLayer):

2013-04-02  Adam Klein  <adamk@chromium.org>

        HTML parser should consistently inspect the namespace of elements on the stack of open elements
        https://bugs.webkit.org/show_bug.cgi?id=113723

        Reviewed by Adam Barth.

        Added HTMLStackItem::matchesHTMLTag method and use that nearly
        everywhere instead of HTMLStackItem::hasLocalName. The most important
        of these changes is in HTMLElementStack's inScopeCommon() function,
        where the use of matchesHTMLTag means that any of the inXXXScope()
        calls now only match HTML tags.

        Tests: html5lib/generated/run-namespace-sensitivity-data.html
               html5lib/generated/run-namespace-sensitivity-write.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::popUntil):
        (WebCore::HTMLElementStack::topmost):
        (WebCore::inScopeCommon):
        (WebCore::HTMLElementStack::inScope):
        (WebCore::HTMLElementStack::inListItemScope):
        (WebCore::HTMLElementStack::inTableScope):
        (WebCore::HTMLElementStack::inButtonScope):
        (WebCore::HTMLElementStack::inSelectScope):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::popUntilPopped):
        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::closestElementInScopeWithName):
        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::matchesHTMLTag):
        (HTMLStackItem):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):

2013-04-02  Hayato Ito  <hayato@chromium.org>

        Report memory usage for ShadowDistributedRules.
        https://bugs.webkit.org/show_bug.cgi?id=109882

        Reviewed by Dimitri Glazkov.

        This is a follow-up patch for r142855.

        No new tests, no behavior change for layout tests.

        * css/DocumentRuleSets.cpp:
        (WebCore):
        (WebCore::ShadowDistributedRules::reportMemoryUsage):
        (WebCore::DocumentRuleSets::reportMemoryUsage):
        * css/DocumentRuleSets.h:
        (ShadowDistributedRules):

2013-04-02  Chris Fleizach  <cfleizach@apple.com>

        AX: Need to get line thickness from fraction on web
        https://bugs.webkit.org/show_bug.cgi?id=113720

        Reviewed by David Kilzer.

        Expose the line thickness property for fractions, which is needed to
        help determine the type of equation.

        Test: platform/mac/accessibility/mathml-line-fraction.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::mathLineThickness):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mathLineThickness):
        (WebCore):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityMathLineThickness]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-04-02  Alexandre Elias  <aelias@chromium.org>

        Unreviewed, rolling out r147389.
        http://trac.webkit.org/changeset/147389
        https://bugs.webkit.org/show_bug.cgi?id=113738

        r147389 was temporary patch for Chromium branch management, needs
        revert.

        * platform/ScrollView.cpp:
        (WebCore::positionScrollbarLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):

2013-04-02  David Vest  <davve@opera.com>

        Hang when calling setCurrentTime on SVG with cyclic animation dependency chain
        https://bugs.webkit.org/show_bug.cgi?id=113485

        Reviewed by Stephen Chenney.

        If no exact match can be found, approximateBinarySearch may return
        either adjacent value to the key. Selecting the lesser value when
        there is a greater one may cause interval creation to fail in a
        way that causes infinite loops during seeking. Detect and amend
        this condition by selecting the greater value when possible.

        Test: svg/animations/animation-dependency-hang.html

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::findInstanceTime):

2013-04-02  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: source location gets frozen after inspector reload
        https://bugs.webkit.org/show_bug.cgi?id=113776

        Reviewed by Pavel Feldman.

        Put statusBarText item in its own container and update its contents in
        ScriptsPanel._updateScriptViewStatusBarItems in similar way it's done
        for statusBarItems.

        No new tests.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.statusBarText):
        (WebInspector.ScriptsPanel.prototype._updateScriptViewStatusBarItems):

2013-04-02  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Remove unneeded cpp file from CMake build. Rubber-stamp by Alexis Menard.

        * CMakeLists.txt: Remove FFTFrameStub.cpp, since adding this file or not
        to your build is a platform decision.

2013-04-01  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Timeline] unify logic for 3 overview modes in Timeline
        https://bugs.webkit.org/show_bug.cgi?id=113708

        Reviewed by Yury Semikhatsky.

        - make TimelineOverviewPane logic independent on overview mode;
        - show only one of 3 controls at one time;
        - attach overview controls to the same parent.

        * inspector/front-end/OverviewGrid.js: remove gridElement() and itemsGraphsElement(), no longer needed.
        (WebInspector.OverviewGrid):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.setMode):
        (WebInspector.TimelineOverviewPane.prototype._innerSetMode):
        (WebInspector.TimelineOverviewPane.prototype._createOverviewControl): 
        (WebInspector.TimelineOverviewPane.prototype._onCategoryVisibilityChanged):
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype.addFrame):
        (WebInspector.TimelineOverviewPane.prototype.zoomToFrame):
        (WebInspector.TimelineOverviewPane.prototype._reset):
        (WebInspector.TimelineOverviewPane.prototype._onWindowChanged):
        (WebInspector.TimelineOverviewBase.prototype.update):
        (WebInspector.TimelineOverviewBase.prototype.reset):
        (WebInspector.TimelineOverviewBase.prototype.categoryVisibilityChanged):
        (WebInspector.TimelineOverviewBase.prototype.addFrame):
        (WebInspector.TimelineOverviewBase.prototype.getWindowTimes):
        (WebInspector.TimelineEventOverview):
        (WebInspector.TimelineEventOverview.prototype.categoryVisibilityChanged):
        * inspector/front-end/timelinePanel.css:

2013-04-02  Julien Chaffraix  <jchaffraix@webkit.org>

        webkit fails IETC grid-column-002
        https://bugs.webkit.org/show_bug.cgi?id=83907

        Reviewed by Ojan Vafai.

        Tests: fast/css-grid-layout/grid-item-column-row-get-set.html
               ietestcenter/css3/grid/grid-column-002.htm

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        Don't accept 0 as a valid <integer> position.

2013-04-02  Dmitry Gozman  <dgozman@chromium.org>

        Web Inspector: allow referencing of nodes that have not been pushed to the front-end
        https://bugs.webkit.org/show_bug.cgi?id=110921

        Reviewed by Pavel Feldman.

        Nodes not yet pushed to front-end are referenced by BackendNodeId and retained.
        One can group nodes when generating BackendNodeIds to release them all together later.

        To resolve node references by BackendNodeId, frontend should use new pushNodeByBackendIdToFrontend method.
        This will invalidate the generated BackendNodeId.

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::backendNodeIdForNode):
        (WebCore::InspectorDOMAgent::releaseBackendNodeIds):
        (WebCore::InspectorDOMAgent::pushNodeByBackendIdToFrontend):
        * inspector/InspectorDOMAgent.h:
        (WebCore):
        (InspectorDOMAgent):

2013-04-02  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Nested auto-height regions don't layout correctly
        https://bugs.webkit.org/show_bug.cgi?id=111969

        Reviewed by David Hyatt.

        The patch fixes the auto-height regions processing model to work with nested named flows. Currently
        this use case doesn't work correctly because the order in which the computed height value is propagated
        to the regions is incorrect. For example, in the case of two flows (f1 and f2) and two auto-height
        regions (r1 and r2) with r2 a member of f1:
        1. the normal layout phase starts
        2. r1 is laid out with height = 0
        3. f1 is laid out including r2 with height = 0; overrideLogicalHeight for r1 is computed
        4. f2 is laid out; overrideLogicalHeight for r2 is computed
        5. the constrained layout phase starts
        6. r1 is laid out using the overrideLogicalHeight computed in the normal phase
        7. f1 is laid out including r2 with its overrideLogicalHeight
        8. f2 is laid out

        The problem appears at step 6 because the overrideLogicalheight computed during step 3 assumes r2
        has a height of 0. The patch changes the algorithm to update the auto-height regions in the reverse
        order of their flow threads dependecies. Here is a high level overview of the new algorithm,
        considering the named flows are sorted in the order of their dependencies:
        1. The flows are laid out from the outer flow to the inner flow. This successfully computes the outer
        non-auto-height regions size so the inner flows have the necessary information to correctly fragment
        the content.
        2. The flows are laid out from the inner flow to the outer flow. After an inner flow is laid out it
        goes into the constrained layout phase and marks the auto-height regions they need layout. This
        means the outer flows will relayout if they depend on regions with auto-height regions belonging to
        inner flows. This step will correctly compute the overrideLogicalHeights for the auto-height regions.
        It's possible for non-auto-height regions to relayout if they depend on auto-height regions. This
        will invalidate the inner flow threads and mark them as needing layout.
        3. The last step is to do one last layout if there are pahtological dependencies between non-auto-height
        regions and auto-height regions as detected in the previous step.

        The patch also removes the layout phase flag from RenderView and moves it to the flow threads. This
        happens because a flow needs to update its auto-height regions overrideLogicalHeight while updating
        the logical height of the regions belonging to the inner flows that are laid out by the flow (i.e. the
        outer flow is in the normal phase while the inner flows are in the constrained layout phase).

        There's also a new flag on the RenderFlowThread that is set when the flow needs the constrained layout
        phase. This could have been placed on the flow thread controller but I think it will be useful when doing
        content balancing for the new multi-column implementation.

        Another change is the moment we clear the overrideLogicalHeight value on empty auto-height regions because
        we don't have to relayout a flow thread once it's in the constrained phase. We need to have the correct
        flow thread portions correctly computed after the artificial forced break is applied at the end of the content.

        Tests: fast/regions/autoheight-mixed-nested-complex-regions.html
               fast/regions/autoheight-mixed-nested-regions.html
               fast/regions/autoheight-mixed-parallel-regions.html
               fast/regions/autoheight-nested-regions.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::FlowThreadController):
        (WebCore::FlowThreadController::layoutRenderNamedFlowThreads):
        (WebCore):
        (WebCore::FlowThreadController::registerNamedFlowContentNode):
        (WebCore::FlowThreadController::unregisterNamedFlowContentNode):
        (WebCore::FlowThreadController::updateFlowThreadsChainIfNecessary):
        (WebCore::FlowThreadController::updateFlowThreadsNeedingLayout):
        (WebCore::FlowThreadController::updateFlowThreadsNeedingTwoStepLayout):
        (WebCore::FlowThreadController::resetFlowThreadsWithAutoHeightRegions):
        (WebCore::FlowThreadController::updateFlowThreadsIntoConstrainedPhase):
        * rendering/FlowThreadController.h:
        (FlowThreadController):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::regionAtBlockOffset):
        (WebCore::RenderFlowThread::applyBreakAfterContent): Apply an artificial break at the end of the content.
        This way we can detect when the content ends and clear the overrideLogicalHeight on the empty auto-height regions.
        (WebCore::RenderFlowThread::computeOverflowStateForRegions):
        (WebCore):
        (WebCore::RenderFlowThread::initializeRegionsOverrideLogicalContentHeight):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::pageLogicalWidth):
        (WebCore::RenderRegion::pageLogicalHeight):
        (WebCore::RenderRegion::maxPageLogicalHeight):
        (WebCore::RenderRegion::logicalHeightOfAllFlowThreadContent):
        (WebCore::RenderRegion::layoutBlock):
        (WebCore::RenderRegion::updateLogicalHeight):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore):
        (WebCore::RenderView::layoutContentInAutoLogicalHeightRegions):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        (WebCore):
        (RenderView):

2013-04-02  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: ignore minimum record duration filter in Timeline overview
        https://bugs.webkit.org/show_bug.cgi?id=113705

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelineOverviewPane.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._durationFilterChanged):

2013-03-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: display the number of dirty render objects in Layout timeline event
        https://bugs.webkit.org/show_bug.cgi?id=95331

        Reviewed by Pavel Feldman.

        Count the render objects that need layout in InspectorTimelineAgent::willLayout()
        and display the number in popover over Layout record in Timeline panel.

        * English.lproj/localizedStrings.js:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore):
        (WebCore::TimelineRecordFactory::createLayoutData):
        (WebCore::TimelineRecordFactory::appendLayoutRoot):
        * inspector/TimelineRecordFactory.h:
        (TimelineRecordFactory):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record.prototype._generatePopupContentWithImagePreview):

2013-04-02  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] Popover for codemirror
        https://bugs.webkit.org/show_bug.cgi?id=113771

        Reviewed by Pavel Feldman.

        Implement methods TextEditor.cursorPositionToCoordinates, TextEditor.coordinatesToCursorPosition and
        TextEditor.tokenAtTextPosition in CodeMirrorTextEditor to support popover
        functionality. Add css classes to highlight popover anchoring text.

        No new tests.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor.prototype.cursorPositionToCoordinates):
        (WebInspector.CodeMirrorTextEditor.prototype.coordinatesToCursorPosition):
        (WebInspector.CodeMirrorTextEditor.prototype.tokenAtTextPosition):
        * inspector/front-end/cm/cmdevtools.css:
        (.CodeMirror .source-frame-eval-expression):
        (.CodeMirror .source-frame-eval-expression-end):
        (.CodeMirror .source-frame-eval-expression-start):

2013-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [BlackBerry] Implement ScrollingCoordinator::frameViewLayoutUpdated()
        https://bugs.webkit.org/show_bug.cgi?id=113763

        Reviewed by Rob Buis.

        PR 318945
        Internally reviewed by Jakob Petsovits.

        And remove the BlackBerry specific methods
        frameViewFrameRectDidChange and frameViewContentsSizeDidChange.

        * page/scrolling/blackberry/ScrollingCoordinatorBlackBerry.cpp:
        (WebCore::ScrollingCoordinatorBlackBerry::frameViewLayoutUpdated):
        Called when the frame view has been laid out. Update the contents
        rectangle and visible area of the scroll layer for the given frame
        view.
        * page/scrolling/blackberry/ScrollingCoordinatorBlackBerry.h:
        (ScrollingCoordinatorBlackBerry):
        * platform/graphics/blackberry/LayerWebKitThread.h:
        (WebCore::LayerWebKitThread::setFrameVisibleRect): Return early if
        value hasn't changed.
        (WebCore::LayerWebKitThread::setFrameContentsSize): Ditto.

2013-04-02  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: Separate JavaScriptSourceFrame popover from knowledge of editor's DOM
        https://bugs.webkit.org/show_bug.cgi?id=113412

        Reviewed by Pavel Feldman.

        - Use TextEditor.coordinatesToCursorPosition,
        TextEditor.cursorPositionToCoordinates and TextEditor.tokenAtTextPosition to figure out
        hovering area and create popover anchor.
        - Use TextEditor.highlightRange/TextEditor.removeHighlight methods to
        highlight hovering text in editor.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.willHide):
        (WebInspector.JavaScriptSourceFrame.prototype._getPopoverAnchor):
        (WebInspector.JavaScriptSourceFrame.prototype.):
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover):
        (WebInspector.JavaScriptSourceFrame.prototype._onHidePopover):
        * inspector/front-end/inspector.css:
        (.popover-anchor):
        (.source-frame-eval-expression):

2013-04-02  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] RenderFlowThread should not be created as a Document renderer
        https://bugs.webkit.org/show_bug.cgi?id=113658

        Reviewed by Julien Chaffraix.

        After https://bugs.webkit.org/show_bug.cgi?id=107138, RenderFlowThread should not be constructed as a renderer for Document.
        Since it does not have an element associated, it will be constructed using the pattern for anonymous blocks.
        However, since I do not want the flow thread to be collapsed as anonymous blocks are, i changed RenderObject::isAnonymousBlock
        to return false for a RenderFlowThread (the alternative would have been to patch more call sites to prevent RenderFlowThread
        collapsing as anonymous block).

        Covered by existing tests.

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::ensureRenderFlowThreadWithName):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::addChild):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        (WebCore::RenderMultiColumnFlowThread::createAnonymous):
        * rendering/RenderMultiColumnFlowThread.h:
        (RenderMultiColumnFlowThread):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::createAnonymous):
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        * rendering/RenderNamedFlowThread.h:
        (RenderNamedFlowThread):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock):

2013-04-02  Shinya Kawanaka  <shinyak@chromium.org>

        Unreviewed, rolling out r147383.
        http://trac.webkit.org/changeset/147383
        https://bugs.webkit.org/show_bug.cgi?id=112369

        Speculative rollout because of lots of layout test failure

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::~HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):
        (WebCore::HTMLDocumentParser::insert):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::PumpSession::PumpSession):
        * html/parser/HTMLParserScheduler.h:

2013-04-02  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [HeapProfiler] Table rows do not appear when resizing.
        https://bugs.webkit.org/show_bug.cgi?id=113760

        Reviewed by Yury Semikhatsky.

        Analysis: custom-made split-view doesn't notify content panes about
        resizing.

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._updateRetainmentViewHeight):
        Notify content pane about resize.

2013-04-02  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Clean-up RenderFlowThread::updateRegionsFlowThreadPortionRect
        https://bugs.webkit.org/show_bug.cgi?id=113659

        Reviewed by Julien Chaffraix.

        RenderRegion::logicalHeightOfAllFlowThreadContent already contains the
        override logical content height for auto-height regions in normal layout phase.
        Therefore, there is no need to explicitly override region's rect height with
        the region's overrideLogicalContentHeight as the region rect already contains
        the right value.

        No change in functionality, covered by existing tests.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::pageLogicalHeight):
        (WebCore::RenderRegion::logicalHeightOfAllFlowThreadContent):

2013-04-02  Mike West  <mkwst@chromium.org>

        X-Frame-Options: Blocked frames should not inherit their parent's SecurityOrigin.
        https://bugs.webkit.org/show_bug.cgi?id=112903

        Reviewed by Adam Barth.

        This change brings WebKit in line with IE and Gecko's behavior, both of
        which treat the blocked frame as being cross-origin for the purposes of
        access checks ('[frame].contentWindow.location.href' is inaccessible,
        for example).

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
            Rather than redirecting to 'about:blank', redirect to
            'data:text/html,<p></p>' which does not inherit the SecurityOrigin
            of the parent.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
            Before calling cancelMainResourceLoad, ensure that the frame's
            document is sandboxed into a unique origin so that it doesn't
            inherit the parent's SecurityOrigin.

2013-04-01  Elliott Sprehn  <esprehn@chromium.org>

        RenderObject::offsetParent should return Element*
        https://bugs.webkit.org/show_bug.cgi?id=113739

        Reviewed by Abhishek Arya.

        The offsetParent of a node should always be an Element, ensure this
        by fixing RenderObject::offsetParent to return an Element* and clean up
        the method to match the algorithm in the spec which lets us remove the
        comments that were trying to explain what was going on.

        This also hardens against badness where RenderObject::offsetParent
        could have returned a renderer with a non-Element node which would result
        in a bad cast in Element::offsetParent. We fixed all cases of this, but
        this patch makes sure such things never happen again.

        No new tests, no change in behavior.

        * dom/Element.cpp:
        (WebCore::Element::offsetParent):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent): Now returns Element*.
        * rendering/RenderObject.h:
        (RenderObject):

2013-04-01  Alpha Lam  <hclam@chromium.org>

        Simply GIFImageReader error handling
        https://bugs.webkit.org/show_bug.cgi?id=113718

        Reviewed by Adam Barth.

        When GIFImageReader encounters a parsing error it should just return
        without doing any more work. Current code saves a boolean before return,
        this is not necessary.

        Tested with existing unit tests.
        Tested locally with ASAN build with 60k GIF images.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::repetitionCount):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::decode):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFImageReader::GIFImageReader):
        (GIFImageReader):

2013-04-01  Elliott Sprehn  <esprehn@chromium.org>

        Make all v8 weak callbacks type safe
        https://bugs.webkit.org/show_bug.cgi?id=111802

        Reviewed by Adam Barth.

        Make all v8 handle weak callbacks typesafe by adding a new class WeakHandleListner
        that uses templates to generate the callback proxies that have the correct type
        arguments. Now getting the arguments wrong will fail compilation.

        No new tests, no change in behavior.

        * bindings/v8/DOMDataStore.h:
        (WebCore::::callback):
        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperMap::DOMWrapperMap):
        (WebCore::DOMWrapperMap::set):
        (WebCore::DOMWrapperMap::reportMemoryUsage):
        (DOMWrapperMap):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::::callback):
        (WebCore::DOMWrapperWorld::makeContextWeak):
        * bindings/v8/ScriptState.cpp:
        (WebCore::::callback):
        (WebCore::ScriptState::ScriptState):
        * bindings/v8/ScriptState.h:
        (ScriptState):
        * bindings/v8/ScriptWrappable.h:
        (ScriptWrappable):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::::callback):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::::callback):
        (WebCore::V8AbstractEventListener::setListenerObject):
        * bindings/v8/V8AbstractEventListener.h:
        (V8AbstractEventListener):
        * bindings/v8/V8MutationCallback.cpp:
        (WebCore::::callback):
        (WebCore::V8MutationCallback::V8MutationCallback):
        * bindings/v8/V8MutationCallback.h:
        (V8MutationCallback):
        * bindings/v8/V8NPObject.cpp:
        (V8NPTemplateMap):
        (WebCore::V8NPTemplateMap::set):
        (WebCore::::callback):
        (WebCore::staticNPObjectMap):
        * bindings/v8/V8Utilities.h:
        (WeakHandleListener):
        (WebCore::WeakHandleListener::makeWeak):
        (WebCore::WeakHandleListener::WeakHandleListener):
        (WebCore::WeakHandleListener::invokeWeakCallback):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::::callback):
        (WebCore::StringCache::v8ExternalStringSlow):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::::callback):
        (WebCore::createInjectedScriptHostV8Wrapper):

2013-04-01  Tien-Ren Chen  <trchen@chromium.org>

        Hide non-coordinated scrollbars for Android M26
        https://bugs.webkit.org/show_bug.cgi?id=113738

        Reviewed by Simon Fraser.

        This patch will hide any non-coordinated scrollbars on Android.
        Coordinated scrollbars won't be affected.

        Currently all scrollbars are coordinated on Android. The sole purpose
        of this patch is to be cherry-picked to the M26 branch.

        No new tests. Please revert immediately after landed.

        * platform/ScrollView.cpp:
        (WebCore::positionScrollbarLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):

2013-04-01  Chris Evans  <cevans@google.com>

        Crash in Node::enclosingBlockFlowElement()
        https://bugs.webkit.org/show_bug.cgi?id=113712

        Reviewed by Abhishek Arya.

        Fix a bad Node assumption if we walk up to the document root.

        Test: editing/execCommand/format-block-at-root.html

        * dom/Node.cpp:
        (WebCore::Node::isBlockFlowElement): Check we found an Element Node and rename from isBlockFlow().
        (WebCore::Node::enclosingBlockFlowElement): Use the new toElement().
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange): Check for NULL.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApplyForSingleParagraph):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::enclosingInline): Impact from method rename.

2013-04-01  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] Expose timing information for iframes
        https://bugs.webkit.org/show_bug.cgi?id=103927

        Reviewed by Nate Chapin.

        The only catch with main documents is that we only want to record the load that was initiated by
        adding the <iframe> to a document. We don't want any subsequent navigations within the iframe to
        be reported.

        Test: http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_iframe_self_navigation.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):
        (WebCore::CachedResourceLoader::loadDone): Make sure iframes are reported in the parent.

2013-04-01  Konrad Piascik  <kpiascik@blackberry.com>

        [BlackBerry] Move Path into it's own header
        https://bugs.webkit.org/show_bug.cgi?id=113724

        Reviewed by Rob Buis.

        No behavioural change.

        * platform/graphics/blackberry/PathBlackBerry.cpp:

2013-04-01  Konrad Piascik  <kpiascik@blackberry.com>

        [BlackBerry] canvas is not rendering correctly for www.html5-benchmark.com
        https://bugs.webkit.org/show_bug.cgi?id=113716

        Reviewed by Rob Buis.

        PR 317205
        Internally reivewed by: Mike Lattanzio, Jacky Jiang

        This is a site issue where they detect physical pixels by multiplying
        availWidth * devicePixelRatio.  This gives us an invalid result since
        we don't round the CSS pixels that are reported to availWidth and availHeight.

        * platform/blackberry/PlatformScreenBlackBerry.cpp:
        (WebCore::toUserSpace):

2013-04-01  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] shape-outside on floats fails to respect shape-margin's vertical extent
        https://bugs.webkit.org/show_bug.cgi?id=113600

        Reviewed by Dirk Schulze.

        ExclusionShapeInsideInfo classes need to depend on the ExclusionShape's padded boundary and
        ExclusionShapeOutsideInfo classes should depend on the ExclusionShape's margin boundary. Added
        a virtual method to the ExclusionShapeInfo that returns the ExclusionShape's logical bounding box -
        computedShapeLogicalBoundingBox() - and overrode that method in the subclasses to return the
        value of the appropriate ExclusionShape method. Added shapeMarginLogicalBoundingBox() and
        shapePaddingLogicalBoundingBox() methods to ExclusionShape and removed the shapeLogicalBoundingBox()
        method, which did not take shape-margin or shape-padding into account.

        Test: fast/exclusions/shape-outside-floats/shape-outside-floats-ellipse-margin-bottom.html

        * rendering/ExclusionPolygon.h: Defined the padding and margin bounding box virtual methods.
        * rendering/ExclusionRectangle.h: Defined the padding and margin bounding box virtual methods.
        * rendering/ExclusionShape.h: Added the padding and margin bounding box virtual abstract methods. Removed shapeLogicalBoundingBox().
        (ExclusionShape):
        * rendering/ExclusionShapeInfo.h:
        (WebCore::ExclusionShapeInfo::shapeLogicalTop): Now calls computedShapeLogicalBoundingBox().
        (WebCore::ExclusionShapeInfo::shapeLogicalBottom): Ditto.
        (WebCore::ExclusionShapeInfo::shapeLogicalLeft): Ditto.
        (WebCore::ExclusionShapeInfo::shapeLogicalRight): Ditto.
        (WebCore::ExclusionShapeInfo::shapeLogicalWidth): Ditto.
        (WebCore::ExclusionShapeInfo::shapeLogicalHeight): Ditto.
        (ExclusionShapeInfo): Added computedShapeLogicalBoundingBox().
        * rendering/ExclusionShapeInsideInfo.h:
        (ExclusionShapeInsideInfo):
        (WebCore::ExclusionShapeInsideInfo::computedShapeLogicalBoundingBox): Gets the padded shape's bounding box.
        * rendering/ExclusionShapeOutsideInfo.h:
        (ExclusionShapeOutsideInfo):
        (WebCore::ExclusionShapeOutsideInfo::computedShapeLogicalBoundingBox): Gets the margin shape's bounding box.

2013-04-01  Adam Barth  <abarth@webkit.org>

        Assertion failure !m_lastChunkBeforeScript in HTMLDocumentParser during inspector/debugger/pause-in-inline-script.html
        https://bugs.webkit.org/show_bug.cgi?id=112369

        Reviewed by Eric Seidel.

        The threaded HTML parser wasn't correctly handling the nested event
        loops that can arise from the JavaScript debugger and from
        showModalDialog. When the parser received a chunk from the background
        parser, it was always processing it immediately, which lead to
        re-entrancy. Now, we'll queue the chunk in the speculation buffer and
        process it once the stack unwinds.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::~HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):
        (WebCore::HTMLDocumentParser::insert):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::PumpSession::PumpSession):
        * html/parser/HTMLParserScheduler.h:

2013-04-01  Michael Pruett  <michael@68k.org>

        [JSC] IndexedDB: Exceptions not thrown for non-cloneable values
        https://bugs.webkit.org/show_bug.cgi?id=113689

        Reviewed by Kentaro Hara.

        ScriptValue::serialize() should not clear exceptions thrown during
        serialization. This change is needed to match behavior in V8.

        Tests: storage/indexeddb/clone-exception.html
               storage/indexeddb/exceptions.html
               storage/indexeddb/structured-clone.html

        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):

2013-04-01  Joshua Bell  <jsbell@chromium.org>

        [Chromium] IndexedDB: Turn "should only be true in unit tests" comments into ASSERTs
        https://bugs.webkit.org/show_bug.cgi?id=113597

        Reviewed by Adam Barth.

        In the vein of wkbug.com/111233 and wkbug.com/110820 don't just comment that
        some condition is true only in unit tests - ASSERT that Chromium's unitTestSupport()
        is non-null to catch errors during development.

        Exercised by Chromium's webkit_unit_tests.

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::close):

2013-04-01  Roger Fong  <roger_fong@apple.com>

        VS2010 WebCoreGenerated build scripts should use new feature-defines script.
        https://bugs.webkit.org/show_bug.cgi?id=113737.

        Reviewed by Timothy Horton.

        * WebCore.vcxproj/build-generated-files.sh:

2013-04-01  Tim Horton  <timothy_horton@apple.com>

        Autosize should use documentRect height instead of scrollHeight
        https://bugs.webkit.org/show_bug.cgi?id=112770

        Reviewed by David Levin.

        Autosizing fails to compute the correct height if the root element is very
        small but the document has significant overflow.

        Also, unconditionally start laying out from the minimum height, so that the
        documentRect can shrink below its previous height if needed.

        No new tests; autosizing is not currently exposed in a testable way on Mac.

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):

2013-04-01  Hayato Ito  <hayato@chromium.org>

        [Shadow DOM] Change the order of event dispatching at AT_TARGET phase.
        https://bugs.webkit.org/show_bug.cgi?id=113676

        Reviewed by Dimitri Glazkov.

        Change the order of event dispatching at AT_TARGET phase so that it mimics bubbling events.

        The spec side bug is:
        https://www.w3.org/Bugs/Public/show_bug.cgi?id=21404

        Example:

        Given the event path, from Node A (top-most) to Node G (target,
        inner-most), where C and D are shadow hosts and G is the target,
        the event dispatching order in the current WebKit implementation is:
        (T: AT_TARGET, C: CAPTURING, B: BUBBLING)

        For bubbling events:

          A          1 (C)  11 (B)
          B          2 (C)  10 (B)
          C (SH)     3 (T)
          D          4 (C)   9 (B)
          E (SH)     5 (T)
          F          6 (C)   8 (B)
          G (Target) 7 (T)

        For non-bubbling events:

          A          1 (C)
          B          2 (C)
          C (SH)     3 (T)
          D          4 (C)
          E (SH)     5 (T)
          F          6 (C)
          G (Target) 7 (T)

        This patch has changed the order of event dispatching as follows:

        For bubbling events:

          A          1 (C)  11 (B)
          B          2 (C)  10 (B)
          C (SH)             9 (T)
          D          3 (C)   8 (B)
          E (SH)             7 (T)
          F          4 (C)   6 (B)
          G (Target)         5 (T)

        For non-bubbling events:

          A          1 (C)
          B          2 (C)
          C (SH)            7 (T)
          D          3 (C)
          E (SH)            6 (T)
          F          4 (C)
          G (Target)        5 (T)

        No new tests, updating existing layouts.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEventAtCapturing):
        (WebCore::EventDispatcher::dispatchEventAtBubbling):
        * dom/EventDispatcher.h:
        (EventDispatcher):

2013-04-01  Nate Chapin  <japhet@chromium.org>

        Crash in WebCore::HTMLMediaElement::~HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=113531

        Reviewed by Adam Barth.

        No new tests, though this is intermittently reproducible with
        http/tests/misc/delete-frame-during-readystatechange.html under ASAN.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Clear the media player manually
            before the destructor exits. Clearing the media player may cancel a resource load,
            which can trigger a readystatechange event. It's possible for the HTMLMediaElement
            to attempt to fire an abort event within the readystatechange event, even though it is
            now in an inconsistent state. Clearling the media player before finishing the destructor
            ensures that the HTMLMediaElement will at least still be alive if this case is triggered.
            Set m_completelyLoaded to true to ensure that if userCancelledLoad() is called, it doesn't
            attempt to fire events while destructing.

2013-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146373.
        http://trac.webkit.org/changeset/146373
        https://bugs.webkit.org/show_bug.cgi?id=113731

        broke autosizing shrinking past previous size (Requested by
        thorton on #webkit).

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):

2013-04-01  Timothy Hatcher  <timothy@apple.com>

        Allow changing Web Inspector dock sides without undocking first.

        https://webkit.org/b/113661
        rdar://problem/13543127

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal): Initialize m_dockSide.

        (WebCore::InspectorFrontendClientLocal::canAttachWindow): If we are already attached, allow
        attaching again to allow switching sides.

        (WebCore::InspectorFrontendClientLocal::setAttachedWindow): Set m_dockSide.

        * inspector/InspectorFrontendClientLocal.h:
        (InspectorFrontendClientLocal): Added m_dockSide.

2013-04-01  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=113721
        <rdar://problem/13549181> REGRESSION (r146929): HTTP auth credentials not reused during session

        Reviewed by Brady Eidson.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        Added FIXMEs.

2013-04-01  Timothy Hatcher  <timothy@apple.com>

        Make 'this' evaluate to the correct object when paused in the Debugger.

        https://webkit.org/b/113607
        rdar://problem/13538351

        Reviewed by Joseph Pecoraro.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._evaluateOn): Bind 'this' to the expression function.

2013-04-01  Victor Carbune  <vcarbune@chromium.org>

        TextTrackCue Extension for WebVTT Regions
        https://bugs.webkit.org/show_bug.cgi?id=109821

        Reviewed by Eric Carlson.

        The TextTrackCue gets a new attribute and setting, regionId, which specifies
        to which region the cue belongs to. The attribute is guarded by WEBVTT_REGIONS
        and is by default disabled in ports.

        Test: media/track/regions-webvtt/text-track-cue-region-attribute.html

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::TextTrackCue): Added member variable for the regionId attribute.
        (WebCore):
        (WebCore::TextTrackCue::setRegionId): Setter for the regionId attribute.
        (WebCore::TextTrackCue::settingName): Added RegionId setting name.
        (WebCore::TextTrackCue::setCueSettings): Parsed the "region:" cue setting.
        * html/track/TextTrackCue.h:
        (TextTrackCue):
        (WebCore::TextTrackCue::regionId): Getter for the regionId attribute.
        * html/track/TextTrackCue.idl: Updated to match the WebVTT Regions Extension.

2013-03-05  Anders Carlsson  <andersca@apple.com>

        Apply changes from storage events locally
        https://bugs.webkit.org/show_bug.cgi?id=111502

        Reviewed by Sam Weinig.

        Add and export a helper function for setting an item without taking
        into account the quota for the map. Also, reindent StorageMap.h

        * WebCore.exp.in:
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setItemIgnoringQuota):
        (WebCore):
        * storage/StorageMap.h:
        (StorageMap):
        (WebCore::StorageMap::quota):

2013-04-01  Benjamin Poulain  <benjamin@webkit.org>

        Remove a couple of malloc from ExceptionBase construction
        https://bugs.webkit.org/show_bug.cgi?id=113681

        Reviewed by Darin Adler.

        * dom/ExceptionBase.cpp:
        (WebCore::ExceptionBase::ExceptionBase):
        When the condition is true, we were creating a new String for
        description.name. The constructor had already allocated a string for
        that: m_name. Use that string instead of creating a new one.

        When the condition is false, we were creating a String for typeName
        just to use the string operators. This is a waste of time, we can use
        makeString() to invoke the string concatenation functions directly.

2013-04-01  Emil A Eklund  <eae@chromium.org>

        Move remaining marquee applying code to StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=113298

        Reviewed by Allan Sandfeld Jensen.

        Move applying logic for CSSPropertyWebkitMarqueeIncrement,
        CSSPropertyWebkitMarqueeRepetition and CSSPropertyWebkitMarqueeSpeed
        from StyleResolver::applyProperty.

        No new tests, no change in functionality.

        * css/StyleBuilder.cpp:
        (ApplyPropertyMarqueeIncrement):
        (WebCore::ApplyPropertyMarqueeIncrement::applyValue):
        (WebCore::ApplyPropertyMarqueeIncrement::createHandler):
        (WebCore):
        (ApplyPropertyMarqueeRepetition):
        (WebCore::ApplyPropertyMarqueeRepetition::applyValue):
        (WebCore::ApplyPropertyMarqueeRepetition::createHandler):
        (ApplyPropertyMarqueeSpeed):
        (WebCore::ApplyPropertyMarqueeSpeed::applyValue):
        (WebCore::ApplyPropertyMarqueeSpeed::createHandler):
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Move marquee applying logic from StyleResolver to StyleBuilder.
        
        * rendering/style/RenderStyle.h:
        Change setMarqueeIncrement to pass Length by value instead of const
        reference. This is consistent with other length setters and works with
        the ApplyPropertyLength template.

2013-04-01  Philip Rogers  <pdr@google.com>

        [SVG2] Add support for the buffered-rendering hint
        https://bugs.webkit.org/show_bug.cgi?id=104207

        Reviewed by Stephen Chenney.

        This patch adds the SVG2 buffered-rendering property and implements it for the image
        element. For reference, the spec can be found at:
            https://svgwg.org/svg2-draft/single-page.html#painting-BufferedRendering

        The buffered-rendering hint causes our implementation to create a temporary image buffer
        for caching an element's foreground rendering. This behavior has been designed to support
        other graphical and container elements in followup patches (such as the use and g elements).
        This patch should not affect rendering, and a test has been added showing the image
        results are unchanged. 

        The performance aspects of this patch can be tested using the following test:
            http://philbit.com/bouncingTigers.html
        Without the patch, rendering is below 1fps. With the patch, rendering is fluid.

        Tests: svg/css/buffered-rendering.html
               svg/repaint/buffered-rendering-dynamic-image.html
               svg/repaint/buffered-rendering-static-image.html

        Other than the changes to RenderSVGImage and SVGRenderingContext, the changes below are to
        support the new buffered-rendering property:

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore):
        (WebCore::CSSPrimitiveValue::operator EBufferedRendering):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/SVGCSSValueKeywords.in:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialBufferedRendering):
        (WebCore::SVGRenderStyle::setBufferedRendering):
        (WebCore::SVGRenderStyle::bufferedRendering):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):

            The foreground painting has been extracted out into a separate function. This has also
            been changed so that if the buffered-rendering hint is present, bufferForeground
            is used.

        (WebCore::RenderSVGImage::paintForeground):
        (WebCore):
        (WebCore::RenderSVGImage::invalidateBufferedForeground):

            This function could be replaced with "m_bufferedForeground.clear()" but other renderers
            (such as container elements) will require more complex invalidation logic. To
            maintain consistency with this future code, invalidateBufferedForeground has been used.

        (WebCore::RenderSVGImage::imageChanged):
        * rendering/svg/RenderSVGImage.h:
        (RenderSVGImage):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::bufferForeground):
        (WebCore):
        * rendering/svg/SVGRenderingContext.h:
        (SVGRenderingContext):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):
        (WebCore::cssPropertyToTypeMap):
        * svg/svgattrs.in:

2013-04-01  Mike West  <mkwst@chromium.org>

        CSP 1.1: Remove 'type' parameter from CSPDirectiveList::checkSourceAndReportViolation.
        https://bugs.webkit.org/show_bug.cgi?id=113502

        Reviewed by Adam Barth.

        Now that we're passing in 'effectiveDirective', we don't need the 'type'
        parameter to generate the proper error message prefix when reporting
        violations.

        While I'm here, I'll slightly tweak the grammar for the error messages.
        Changes are covered via rebaselines of existing tests.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::checkSourceAndReportViolation):
            Drop the 'type' parameter. We don't need to pass in a type since
            we're now passing in the 'effectiveDirective'; we can use the latter
            to generate the correct error message prefix.
        (WebCore::CSPDirectiveList::allowScriptFromSource):
        (WebCore::CSPDirectiveList::allowObjectFromSource):
        (WebCore::CSPDirectiveList::allowChildFrameFromSource):
        (WebCore::CSPDirectiveList::allowImageFromSource):
        (WebCore::CSPDirectiveList::allowStyleFromSource):
        (WebCore::CSPDirectiveList::allowFontFromSource):
        (WebCore::CSPDirectiveList::allowMediaFromSource):
        (WebCore::CSPDirectiveList::allowConnectToSource):
        (WebCore::CSPDirectiveList::allowFormAction):
        (WebCore::CSPDirectiveList::allowBaseURI):
            Drop the 'type' parameter from the callsites, which has the lovely
            property of allowing us to throw away a bunch of statically allocated
            strings that we don't need anymore.

2013-04-01  James Craig  <james@cookiecrook.com>

        AX: "video element controller" is an overly verbose default description for the playback controls; how about just "playback"
        https://bugs.webkit.org/show_bug.cgi?id=113549

        Reviewed by Chris Fleizach.

        Existing test coverage. 

        Updating the video/audio element's default accessibility labels to be less verbose.
        Also cleaned up some erroneous comments related to the sub-level controls on these elements.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::localizedMediaControlElementString):

2013-04-01  Nate Chapin  <japhet@chromium.org>

        Make a bunch of DocumentLoader functions private
        https://bugs.webkit.org/show_bug.cgi?id=113601

        Reviewed by Alexey Proskuryakov.

        No new tests, cleanup only.

        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:

2013-04-01  Kangil Han  <kangil.han@samsung.com>

        Minor code cleanup by removing duplicated null checks
        https://bugs.webkit.org/show_bug.cgi?id=113701

        Reviewed by Darin Adler.

        Duplicated null check is code redundancy, so delete those.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setFocusedNodeIfNeeded):
        * platform/Arena.cpp:
        (WebCore::FreeArenaList):

2013-04-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: follow up to r147323, popover is empty on network panel.
        Not reviewed.

        * inspector/front-end/DOMExtension.js:
        (Element.prototype.measurePreferredSize):
        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype._innerShow):

2013-04-01  Dmitry Zvorygin  <zvorygin@chromium.org>

        Web Inspector: Exception in console on attempt to filter javascript messages.
        https://bugs.webkit.org/show_bug.cgi?id=113327

        Fixed non-css filtration if console message groups are present. Message groups elements are always shown and are
        never filtered out.

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.updateRepeatCount):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.get this):
        (WebInspector.ConsoleView.prototype._consoleMessageAdded):
        (WebInspector.ConsoleView.prototype._appendConsoleMessage):
        (WebInspector.ConsoleView.prototype._consoleCleared):
        (WebInspector.ConsoleView.prototype._shouldBeVisible):
        (WebInspector.ConsoleView.prototype._updateMessageList):
        (WebInspector.ConsoleView.prototype._printResult):

2013-04-01  Victor Carbune  <vcarbune@chromium.org>

        Parsing WebVTT Region Header Metadata
        https://bugs.webkit.org/show_bug.cgi?id=109818

        Reviewed by Eric Carlson.

        This patch enables reading regions from the metadata section of
        a WebVTT file. The work for defining generic metadata within the
        WebVTT file header is still work in progress in the TextTrack CG.

        As previous patches, everything is guarded by WEBVTT_REGIONS and
        is by default disabled in all ports.

        Test: media/track/regions-webvtt/text-track-region-parser.html

        * html/track/LoadableTextTrack.cpp:
        (WebCore):
        (WebCore::LoadableTextTrack::newRegionsAvailable): Added method
        to be called as soon as regions have finished parsing.
        * html/track/LoadableTextTrack.h:
        (LoadableTextTrack):
        * html/track/TextTrack.h: Changed the access modifiers.
        (TextTrack):
        * html/track/TextTrackRegion.cpp:
        (WebCore::TextTrackRegion::setRegionSettings): Entry point for
        parsing the region settings from a string.
        (WebCore):
        (WebCore::TextTrackRegion::getSettingFromString): Maps a string
        to a RegionSetting value.
        (WebCore::TextTrackRegion::parseSettingValue): Parses the value
        of a specific setting.
        (WebCore::TextTrackRegion::parseSetting): Parses a setting string.
        * html/track/TextTrackRegion.h:
        * html/track/WebVTTParser.cpp:
        (WebCore):
        (WebCore::WebVTTParser::parseFloatPercentageValue): Helper method
        to parse a float percentage value (e.g. "50.1%")
        (WebCore::WebVTTParser::parseFloatPercentageValuePair): Helper method
        to parse a float percentage value pair (e.g. "50.1%, 30.5%")
        (WebCore::WebVTTParser::getNewRegions): Retrieves the new regions
        available for processing.
        (WebCore::WebVTTParser::parseBytes):
        (WebCore::WebVTTParser::collectHeader): Generic function to collect
        header in the metadata region.
        (WebCore::WebVTTParser::createNewRegion): Creates new region using
        the existing metadata header name and value.
        * html/track/WebVTTParser.h:
        (WebVTTParserClient):
        (WebVTTParser):
        * loader/TextTrackLoader.cpp:
        (WebCore):
        (WebCore::TextTrackLoader::newRegionsParsed): Called when the
        regions have been succesfully parsed.
        (WebCore::TextTrackLoader::getNewRegions): Gets the new regions.
        * loader/TextTrackLoader.h:
        (TextTrackLoaderClient): Added methods that need to be implemented.
        (TextTrackLoader):

2013-04-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Go to line dialog has 0 height, viewport dialogs have empty gaps.
        https://bugs.webkit.org/show_bug.cgi?id=113702

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/DOMExtension.js:
        (Element.prototype.measurePreferredSize):
        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype._innerShow):
        * inspector/front-end/ViewportControl.js:
        (WebInspector.ViewportControl.prototype.refresh):
        * inspector/front-end/dialog.css:
        (.dialog-contents):

2013-04-01  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [DTE] Convertion between text and coordinates
        https://bugs.webkit.org/show_bug.cgi?id=113389

        Reviewed by Pavel Feldman.

        Test: inspector/editor/text-editor-char-to-coordinates.html

        Implement cursorPositionToCoordinates and coordinatesToCursorPosition
        methods pair in DefaultTextEditor.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.cursorPositionToCoordinates):
        (WebInspector.DefaultTextEditor.prototype.coordinatesToCursorPosition):
        (WebInspector.TextEditorMainPanel.prototype.cursorPositionToCoordinates):
        (WebInspector.TextEditorMainPanel.prototype.coordinatesToCursorPosition):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.cursorPositionToCoordinates):
        (WebInspector.TextEditor.prototype.coordinatesToCursorPosition):

2013-04-01  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: Rename "Copy to Curl" menu item command to "Copy to cURL"
        https://bugs.webkit.org/show_bug.cgi?id=113575

        Reviewed by Pavel Feldman.

        Fix the name to the offical way of capitalization.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._contextMenu):

2013-04-01  Koji Ishii  <kojiishi@gmail.com>

        ASSERTION FAILED: m_purgePreventCount when clicking text with emphasis marks
        https://bugs.webkit.org/show_bug.cgi?id=85266

        Reviewed by Darin Adler.

        Font::glyphDataAndPageForCharacter may call FontCache::getFontDataForCharacters
        if system fallback occurs, which may return SimpleFontData with DoNotRetain,
        so callers must prevent possible font cache purging.

        Test: fast/text/emphasis-height-crash.html

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::emphasisMarkAscent): Add FontCachePurgePreventer.
        (WebCore::Font::emphasisMarkDescent): ditto.
        (WebCore::Font::emphasisMarkHeight): ditto.
        (WebCore::Font::drawEmphasisMarks): ditto.

2013-04-01  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Fixed DOM Breakpoint pane styles.
        https://bugs.webkit.org/show_bug.cgi?id=113688

        Reviewed by Pavel Feldman.

        The required stylesheet (breakpointsList.css) was not loaded because of
        the peculiar way DOMBreakpointsSidebarPane is included in two panels
        (Sources and Elements) via a proxy pane. Since DOMBreakpointsSidebarPane
        was never shown directly the registerRequiredCSS call in its base class
        NativeBreakpointsSidebarPane constructor had no effect.
        Addin a registerRequiredCSS call to the proxy pane constructor fixes the
        problem.


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

2013-04-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Extract item to coordinates conversion into a separate function.
        https://bugs.webkit.org/show_bug.cgi?id=113682

        Reviewed by Yury Semikhatsky.

        The calculation was extracted into entryToAnchorBox.

        Drive by fixes: unnecessary members were removed.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.Entry):
        (WebInspector.FlameChart.prototype._calculateTimelineData):
        (WebInspector.FlameChart.prototype._calculateTimelineDataForSamples):
        (WebInspector.FlameChart.prototype._getPopoverAnchor):
        (WebInspector.FlameChart.prototype._entryToAnchorBox):
        (WebInspector.FlameChart.prototype.draw):

2013-03-31  Zalan Bujtas  <zalan@apple.com>

        Gradient background does not get repainted when child box is expanded.
        https://bugs.webkit.org/show_bug.cgi?id=113644

        Reviewed by Antti Koivisto.
        
        The initial value for background-size is SizeNone and remains, unless it is
        set explicitly. However, when the background shorthand is used,
        the size property defaults to SizeLength. The repaint
        logic in mustRepaintFillLayers expects to have this value set correctly.

        Test: fast/repaint/background-shorthand-with-gradient-and-height-changes.html

        * rendering/RenderObject.cpp:
        (WebCore::mustRepaintFillLayers): code cleanup. no functionality change.
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        * rendering/style/FillLayer.h:    use SizeNone as initial value.
        (WebCore::FillLayer::initialFillSizeType):
        (WebCore::FillLayer::initialFillSize):

2013-03-31  Hayato Ito  <hayato@chromium.org>

        Text representation of pseudo elements, '::-webkit-distributed', is wrong in CSSSelector::selectorText().
        https://bugs.webkit.org/show_bug.cgi?id=113560

        Reviewed by Dimitri Glazkov.

        Fix the text representation of distributed functional pseudo elements in CSSSelector::selectorText().

        Test: fast/dom/shadow/distributed-pseudo-element-css-text.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (CSSSelector):

2013-03-31  Adam Barth  <abarth@webkit.org>

        [Chromium] Yarr should build using a separate GYP file from JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=113652

        Reviewed by Nico Weber.

        * WebCore.gyp/WebCore.gyp:
            - Update references to yarr.gyp.

2013-03-31  Kangil Han  <kangil.han@samsung.com>

        [EFL] Remove unused stdio.h includes
        https://bugs.webkit.org/show_bug.cgi?id=113655

        Reviewed by Andreas Kling.

        We do not have to include unused header file.

        * platform/efl/CursorEfl.cpp:
        * platform/efl/FileSystemEfl.cpp:
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        * platform/efl/ScrollbarThemeEfl.cpp:

2013-03-31  Rafael Weinstein  <rafaelw@chromium.org>

        HTMLLinkElement should resolve resource URLs when resources will be fetched
        https://bugs.webkit.org/show_bug.cgi?id=113630

        HTMLLinkElement was resolving its URL when the href attribute was processed and caching it without ever
        invalidating the cached URL. This patch removes the cached URL and adds getURL() which resolve the
        URL dynamically.

        Reviewed by Eric Seidel.

        Test: fast/dom/HTMLLinkElement/resolve-url-on-insertion.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::getURL):
        (WebCore):
        (WebCore::HTMLLinkElement::parseAttribute):
        (WebCore::HTMLLinkElement::shouldLoadLink):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.h:
        (HTMLLinkElement):

2013-03-31  Brady Eidson  <beidson@apple.com>

        NetworkProcess crashes in WebCoreResourceHandleAsOperationQueueDelegate callbacks.
        <rdar://problem/13541868> and https://bugs.webkit.org/show_bug.cgi?id=113664

        Reviewed by Dan Bernstein.

        In the "two-part" callbacks that involve waiting on a semaphore for the async block to finish,
        the delegate might have been destroyed by the time the wait completes.

        A RetainPtr<> protector will fix that up nicely.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionShouldUseCredentialStorage:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):

2013-03-30  Adam Barth  <abarth@webkit.org>

        Remove unused include of RegularExpression.h
        https://bugs.webkit.org/show_bug.cgi?id=113649

        Reviewed by Dimitri Glazkov.

        * Modules/filesystem/DOMFilePath.cpp:
            - This include isn't used.

2013-03-30  Tom Sepez  <tsepez@chromium.org>

        Cross-Origin copy&paste / drag&drop allowing XSS via srcdoc attribute.
        https://bugs.webkit.org/show_bug.cgi?id=113443

        Reviewed by Adam Barth.

        Tested by LayoutTests/editing/pasteboard/paste-noscript.html

        * dom/Element.h:
        (Element):
        (WebCore::Element::isHTMLContentAttribute):
        Adds an isHTMLContentAttribute() method to determine whether an attribute can contain
        (potentially unsafe) HTML content. Currently, the iframe's srcdoc attribute is the only
        such attribute, but clever folks might add more in the future.
        Rename stripJavaScriptAttributes() method to stripScriptingAttributes(), to better reflect
        the reality that scripting content may appear as above.
        Adds missing consts and consolidate isJavaScriptAttribute() method.

        * dom/Element.cpp:
        (WebCore::Element::isJavaScriptURLAttribute):
        (WebCore::Element::stripScriptingAttributes):
        Consolidated methods.
        
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isHTMLContentAttribute):
        (WebCore):
        * html/HTMLFrameElementBase.h:
        (HTMLFrameElementBase):
        Indicate that for frames, the srcdoc attribute contains HTML content.
        
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::setAttributes):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::setAttributes):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::setAttributes):
        Rename stripJavaScriptAttribute calls to match Element.h

2013-03-30  Tom Sepez  <tsepez@chromium.org>

        View-source iframes are dangerous (and not very useful).
        https://bugs.webkit.org/show_bug.cgi?id=113345

        Reviewed by Adam Barth.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):
        Conditionalize viewsource attribute on ENABLE(VIEWSOURCE_ATTRIBUTE).

2013-03-30  Philippe Normand  <pnormand@igalia.com>

        [GTK] Should use GStreamer codec installation infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=34085

        Reviewed by Martin Robinson.

        Initial support for the GStreamer codec installer. The player will
        handle missing-plugins messages and use the pbutils codec
        installer facilities to install the missing GStreamer
        plugins. Once the plugins are installed reset the pipeline state.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivatePluginInstallerResultFunction): This
        method is used to notify the player that the missing plugins were installed.
        (WebCore):
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Ignore
        errors while installing plugins and handle the missing-plugin message.
        (WebCore::MediaPlayerPrivateGStreamer::handlePluginInstallerResult):
        This method is invoked after the installer finished its task.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2013-03-30  Praveen R Jadhav  <praveen.j@samsung.com>

        g_slist_reverse() may not be required in webKitWebAudioSrcLoop
        https://bugs.webkit.org/show_bug.cgi?id=113568

        Reviewed by Philippe Normand.

        Decremental 'for' loop logic implemented to avoid using g_slist_reverse().

        Original code            - 2.025230 micro seconds per loop
        Original code + patch    - 1.964759 micro seconds per loop

        This patch is covered by existing webaudio tests.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop):

2013-03-30  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Fonts refactoring
        https://bugs.webkit.org/show_bug.cgi?id=113047

        Reviewed by Pavel Feldman.

        Unify fonts usage across inspector.
        Make inspector default font depend on platform.

        * inspector/front-end/breakpointsList.css:
        * inspector/front-end/dataGrid.css:
        (.data-grid):
        (.data-grid table):
        (.data-grid td):
        (.data-grid th.sort-ascending > div::after):
        (.data-grid th.sort-descending > div::after):
        (.data-grid button):
        * inspector/front-end/heapProfiler.css:
        (.heap-snapshot-view .class-view-toolbar input.class-name-filter):
        (.heap-snapshot-view .retainers-view-header):
        * inspector/front-end/inspector.css:
        (.toolbar-item):
        (.toolbar-label):
        (.console-message .bubble):
        (.outline-disclosure > ol):
        (.source-code):
        (.scope-bar li):
        (.sidebar-tree, .sidebar-tree .children):
        (.sidebar-tree-section):
        (li .status .bubble):
        (.sidebar-tree-item.selected):
        (.sidebar-tree-item .titles):
        (.sidebar-tree-item .subtitle):
        (.sidebar-tree-item.selected .subtitle):
        (.source-frame-breakpoint-message):
        (.soft-context-menu):
        * inspector/front-end/inspectorCommon.css:
        (body):
        (.resources-divider-label):
        * inspector/front-end/navigatorView.css:
        (.navigator li):
        (.navigator li.selected .selection):
        (.navigator .base-navigator-tree-element-title):
        * inspector/front-end/networkLogView.css:
        (.network-log-grid.data-grid td):
        (.network-log-grid.data-grid.small td):
        (.network-log-grid.data-grid th):
        (.network-log-grid.data-grid select):
        (.network-graph-label):
        (.network-timeline-grid .resources-divider-label):
        (.network-log-grid.data-grid .network-summary-bar td):
        * inspector/front-end/resourcesPanel.css:
        (.resources.panel .sidebar li):
        (.resources.panel .sidebar li.selected):
        (.resources.panel .sidebar li.selected .selection):
        * inspector/front-end/sidebarPane.css:
        (.sidebar-pane > .body .info):
        (.sidebar-pane-title):
        (.sidebar-pane-toolbar):
        (.sidebar-pane-subtitle):
        * inspector/front-end/tabbedPane.css:
        (.tabbed-pane-header-tab):
        (.tabbed-pane-header-tab-close-button):
        (select.tabbed-pane-header-tabs-drop-down-select):
        * inspector/front-end/timelinePanel.css:
        (.memory-counter-value):

2013-03-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r147263.
        http://trac.webkit.org/changeset/147263
        https://bugs.webkit.org/show_bug.cgi?id=113632

        Breaks test fast/loader/display-image-unset-allows-cached-
        image-load.html (Requested by mlam on #webkit).

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::freshnessLifetime):

2013-03-29  Roger Fong  <roger_fong@apple.com>

        Unreviewed. AppleWin VS2010 build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-03-29  Yongjun Zhang  <yongjun_zhang@apple.com>

        When releasing a CGImage, we should also remove it from the subimage cache.
        https://bugs.webkit.org/show_bug.cgi?id=102453

        Reviewed by Simon Fraser.

        When we release an image(CGImageRef) from BitmapImage's cachedFrames, if the image was already
        cached in subimage cache, it's ref count won't drop to 0 and the image won't be deleted.  Usually,
        the subimage cache will clear the whole cache in a timer with 1 sec delay.  However, if WebCore has
        to paint another subimage (not necessarily from the same CGImageRef) before this timer fires, we
        will restart the timer and images inside the cache will stay longer than they should.

        This patch does two things:
            - move SubimageCacheWithTimer and related helper struct into a separate file.
            - remove the image from subimage cache when we releasing the CGImageRef, this prevent subimage
        cache holding the image after we released it.

        No new tests, manually verified the CGImageRef is also removed from subimage cache
        when we releasing the image from FrameData::clear.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::FrameData::clear): remove the image from subimage cache before we releasing it.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore):
        (WebCore::GraphicsContext::drawNativeImage):
        * platform/graphics/cg/SubimageCacheWithTimer.cpp: Added.
        (WebCore):
        (SubimageRequest):
        (WebCore::SubimageRequest::SubimageRequest):
        (WebCore::SubimageCacheAdder::hash):
        (SubimageCacheAdder):
        (WebCore::SubimageCacheAdder::equal):
        (WebCore::SubimageCacheAdder::translate):
        (WebCore::SubimageCacheWithTimer::SubimageCacheWithTimer):
        (WebCore::SubimageCacheWithTimer::invalidateCacheTimerFired):
        (WebCore::SubimageCacheWithTimer::getSubimage):
        (WebCore::SubimageCacheWithTimer::clearImage):
        (WebCore::subimageCache):
        * platform/graphics/cg/SubimageCacheWithTimer.h: Added.
        (WebCore):
        (SubimageCacheWithTimer): Added a data member m_images to record which image and its subimages are cached.
        (SubimageCacheEntry):
        (SubimageCacheEntryTraits):
        (WebCore::SubimageCacheWithTimer::SubimageCacheEntryTraits::isEmptyValue):
        (WebCore::SubimageCacheWithTimer::SubimageCacheEntryTraits::constructDeletedValue):
        (WebCore::SubimageCacheWithTimer::SubimageCacheEntryTraits::isDeletedValue):
        (WebCore::SubimageCacheWithTimer::SubimageCacheHash::hash):
        (WebCore::SubimageCacheWithTimer::SubimageCacheHash::equal):
        (SubimageCacheHash):

2013-03-29  Andy Estes  <aestes@apple.com>

        Let cached resources from file: schemes expire immediately
        https://bugs.webkit.org/show_bug.cgi?id=113626

        Reviewed by Brady Eidson

        When a CachedResource was loaded from a file: URL, we would give it an
        indefinite freshness lifetime. This means that we would continue to
        serve a stale resource from the memory cache even if the file was
        changed on disk. With the introduction of main resource caching, this
        behavior broke at least one third-party WebKit app (see <rdar://problem/13313769>).

        We should instead let file resources expire immediately. Modern
        filesystems implement their own caching, so we should get good
        performance for multiple reads of unmodified files without doing our
        own caching.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::freshnessLifetime): file: URLs should have a
        0 freshness lifetime.

2013-03-29  Ojan Vafai  <ojan@chromium.org>

        Flexitems no longer default min-width to min-content
        https://bugs.webkit.org/show_bug.cgi?id=111790

        Reviewed by Tony Chang.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        Disallow auto as a valid min-size value.

        * css/html.css:
        (input::-webkit-datetime-edit):
        (input[type="range"]::-webkit-slider-container, input[type="range"]::-webkit-media-slider-container):
        (input[type="range"]::-webkit-slider-runnable-track):
        Remove now unnecessary min-width: 0's.

        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-enclosure, video::-webkit-media-controls-enclosure):
        (video::-webkit-media-controls-enclosure):
        Set a flex-shrink: 0 to avoid shrinking these items below the designated height.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalHeightByMinMax):
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computeContentLogicalHeight):
        (WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing):
        (WebCore::RenderBox::computeReplacedLogicalWidth):
        (WebCore::RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth):
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        Remove all the unneeded SizeType arguments now that we don't need to
        specially handle MinSize in all these functions.

        * rendering/RenderBox.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleWillChange):
        (WebCore::RenderButton::setupInnerStyle):
        No longer need to explicitly set min-width:0.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
        Remove the code for specially handling auto.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::maxPageLogicalHeight):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        Remove all the now unneeded SizeType arguments.

        * rendering/style/RenderStyle.h:
        Change the default min-size back to 0.

2013-03-29  Alexey Proskuryakov  <ap@apple.com>

        Expose FeatureObserver data to WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=113613

        Reviewed by Sam Weinig.

        FeatureObserver used to depend on chromium-only HistogramSupport, which is not
        really usable on Mac at least.

        Instead of adding parallel feature reporting machinery, I'm adding a way to
        generically relay the data from FeatureObserver to port code.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::reportMemoryUsage):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::previousURL):
        Exposed m_previousURL, renaming it to follow WebKit style.

        * page/FeatureObserver.cpp:
        (WebCore::FeatureObserver::~FeatureObserver):
        (WebCore::FeatureObserver::updateMeasurements):
        * page/FeatureObserver.h:
        (WebCore::FeatureObserver::accumulatedFeatureBits):
        Exposed the data to clients, and made reporting through HistogramSupport
        chromium only for clarity.

2013-03-29  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] shape outside segments not properly calculated for ellipses
        https://bugs.webkit.org/show_bug.cgi?id=112587

        Reviewed by Julien Chaffraix.

        When converting the line top coordinates from the parent's coordinate
        space to the coordinate space of the float, the offset given by the
        shape was not being accounted for. This patch accounts for that
        offset.

        Test: fast/exclusions/shape-outside-floats/shape-outside-floats-non-zero-y.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftOffsetForLine): Fix the coordinate conversion.
        (WebCore::RenderBlock::logicalRightOffsetForLine): Ditto.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded): Ditto.

2013-03-29  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Incorrect margin corner radii formula
        https://bugs.webkit.org/show_bug.cgi?id=111186

        Reviewed by Dirk Schulze.

        Corrected an error in the forumla for the margin ellipse's radii.

        Tests: fast/exclusions/shape-outside-floats/shape-outside-floats-ellipse-margin-left.html
               fast/exclusions/shape-outside-floats/shape-outside-floats-ellipse-margin-right.html

        * rendering/ExclusionRectangle.cpp:
        (WebCore::FloatRoundedRect::marginBounds):

2013-03-19  Ojan Vafai  <ojan@chromium.org>

        min-width/max-width of min-content/max-content don't work correctly if width is specified
        https://bugs.webkit.org/show_bug.cgi?id=106143

        Reviewed by Tony Chang.

        Test: fast/css-intrinsic-dimensions/intrinsic-sized-blocks.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeIntrinsicLogicalWidths):
        Expose this so that we don't use the preferred widths when calculating intrinsic width
        values since the preferred width will be the regular width value if it is set.
        Also, simplified the logic around table cells and scrollbar widths. The old code was
        wrong and unnecessarily complicated.

        (WebCore::RenderBlock::computePreferredLogicalWidths):
        Use the new computeIntrinsicLogicalWidths method.

        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        Pass in the min/max values as out params so they can be called from computeIntrinsicLogicalWidths.
        Also, make computeBlockPreferredLogicalWidths const.

        * rendering/RenderBlock.h:

2013-03-29  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Use WTF::TemporaryChange rather than manually resetting a flag
        https://bugs.webkit.org/show_bug.cgi?id=113594

        Reviewed by Tony Chang.

        Split out from another patch: rather than m_foo = true; ... m_foo = false; use
        the handy WTF::TemporaryChange scoped variable change doohickey.

        Test: http/tests/inspector/indexeddb/database-structure.html

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::close):

2013-03-29  Joshua Bell  <jsbell@chromium.org>

        [V8] IndexedDB: Exceptions thrown inconsistently for non-cloneable values
        https://bugs.webkit.org/show_bug.cgi?id=113091

        Reviewed by Kentaro Hara.

        The exception thrown by SerializedScriptValue into the JS engine is not
        observable by ScriptState. (We should fix that, but it appears non-trivial.)
        Ask the SerializedScriptValue directly if it failed to clone. If so, don't
        set an exception - one was already set so let that be processed normally.

        Test: storage/indexeddb/clone-exception.html

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):

2013-03-29  Dean Jackson  <dino@apple.com>

        Snapshotted plugins must be able to restart on appropriate mouseup events
        https://bugs.webkit.org/show_bug.cgi?id=113577

        Reviewed by Tim Horton.

        If the page content prevents the default behaviour of a mousedown event, then a snapshotted
        plugin would never receive a click event, and thus be unable to restart. We have to also
        look for a mouseup that happens with an associated mousedown, and trigger restart. This
        won't call any page code - it's just behind the scenes.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn): Initialize new member variable.
        (WebCore::RenderSnapshottedPlugIn::handleEvent): Track the state of mousedown and up pairs, and restart
            if you see an appropriate mouseup.
        * rendering/RenderSnapshottedPlugIn.h: New member variable to track mouse state.

2013-03-29  Simon Fraser  <simon.fraser@apple.com>

        removeViewportConstrainedLayer() should remove the layer from m_viewportConstrainedLayersNeedingUpdate too
        https://bugs.webkit.org/show_bug.cgi?id=113596

        Reviewed by Tim Horton.
        
        It's possible, with some combination of position:fixed and opacity transitions
        in iframes, to end up with a RenderLayer in m_viewportConstrainedLayersNeedingUpdate
        that has been removed from m_viewportConstrainedLayers, which leads to later assertions
        and/or crashes.
        
        Fix by removing a layer from m_viewportConstrainedLayersNeedingUpdate when we
        remove it from m_viewportConstrainedLayers.

        I was not able to come up with a testcase that reliably reproduces this.

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

2013-03-29  Greg Hughes  <ghughes@apple.com>

        Allow multiple searchKeys to be passed to AXUIElementCopyParameterizedAttributeValue
        https://bugs.webkit.org/show_bug.cgi?id=112276

        Reviewed by Chris Fleizach.

        Added support for accessibility search predicates to accept multiple search keys. The search will return the first item that matches any one of the provided search keys.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatch):
        (WebCore):
        * accessibility/AccessibilityObject.h:
        (AccessibilitySearchCriteria):
        (WebCore::AccessibilitySearchCriteria::AccessibilitySearchCriteria):
        (AccessibilityObject):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2013-03-29  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Bind lifetime of in-memory backing stores to IDBFactory backend
        https://bugs.webkit.org/show_bug.cgi?id=110820

        Reviewed by Tony Chang.

        Backing stores are dropped as soon as all connections are closed. That makes sense for
        disk-backed stores to free up memory (although there's a performance trade-off...). But
        for memory-backed stores, the expected lifetime should match the lifetime of the factory
        so that an open/write/close/re-open/read yields the written data.

        Test: Chromium's webkit_unit_tests, IDBFactoryBackendTest.MemoryBackingStoreLifetime

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore): Pass comparator into constructor since it was always
        assigned immediately afterwards anyway.
        (WebCore::IDBBackingStore::open): Split into three parts - open() which is disk-backed...
        (WebCore::IDBBackingStore::openInMemory): ...explit in-memory creation (previously: specified by empty path)
        (WebCore::IDBBackingStore::create): ... and the common logic which calls the constructor.
        * Modules/indexeddb/IDBBackingStore.h: Headers for the above.
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::openBackingStore): Add in-memory backing stores to dependent set.
        * Modules/indexeddb/IDBFactoryBackendImpl.h: Add member to track dependent backing stores.

2013-03-29  Nate Chapin  <japhet@chromium.org>

        ASSERT d->m_defersLoading != defers on detik.com and drive.google.com
        https://bugs.webkit.org/show_bug.cgi?id=111902

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/navigation/same-url-iframes-defer-crash.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setDefersLoading): If multiple DocumentLoaders are
           using loading the same main resource, ensure only one of them can call
           ResourceLoader::setDefersLoading.

2013-03-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Content should not be lost when uiSourceCode's file was removed externally on file system.
        https://bugs.webkit.org/show_bug.cgi?id=113581

        Reviewed by Pavel Feldman.

        * inspector/front-end/IsolatedFileSystem.js:
        (WebInspector.IsolatedFileSystem.prototype.errorHandler):
        (WebInspector.IsolatedFileSystem.prototype.requestFileContent):
        (WebInspector.IsolatedFileSystem.prototype.fileSystemLoaded):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.checkContentUpdated.contentLoaded):
        (WebInspector.UISourceCode.prototype.checkContentUpdated):
        (WebInspector.UISourceCode.prototype._commitContent):

2013-03-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Prompt before closing dirty tab.
        https://bugs.webkit.org/show_bug.cgi?id=113576

        Reviewed by Pavel Feldman.

        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        (WebInspector.TabbedEditorContainer.prototype._maybeCloseTab):
        (WebInspector.TabbedEditorContainer.prototype._closeTabs):
        (WebInspector.EditorContainerTabDelegate):
        (WebInspector.EditorContainerTabDelegate.prototype.closeTabs):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.setTabDelegate):
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.allTabs):
        (WebInspector.TabbedPane.prototype.otherTabs):
        (WebInspector.TabbedPaneTab.prototype.setDelegate):
        (WebInspector.TabbedPaneTab.prototype._tabClicked):
        (WebInspector.TabbedPaneTab.prototype._closeTabs):
        (WebInspector.TabbedPaneTab.prototype._tabContextMenu):
        (WebInspector.TabbedPaneTab.prototype._tabContextMenu.closeOthers):
        (WebInspector.TabbedPaneTab.prototype._tabContextMenu.closeAll):
        (WebInspector.TabbedPaneTabDelegate):
        (WebInspector.TabbedPaneTabDelegate.prototype.closeTabs):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.resetWorkingCopy):

2013-03-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Remove hopping ancorElement and use anchorBox instead.
        https://bugs.webkit.org/show_bug.cgi?id=113579

        Reviewed by Pavel Feldman.

        Initially I made a fake anchor element and moved it according to the highlighted element position.
        It was a hack and after http://trac.webkit.org/changeset/147209 I'm able to remove it.

        Drive by fix: the code was moved from onMouseMove to getPopoverAnchor.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype._getPopoverAnchor):
        -(WebInspector.FlameChart.prototype._onMouseMove)
        * inspector/front-end/flameChart.css:

2013-03-29  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][EGL] Add support for creating offscreen surface.
        https://bugs.webkit.org/show_bug.cgi?id=113359

        Reviewed by Noam Rosenthal.

        This is in preparation for enabling EGL and GLES2
        support for EFL port. This patch adds support for using
        EGLPixmapSurface as an offscreensurface.

        * PlatformEfl.cmake:
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createOffScreenSurface):
        * platform/graphics/surfaces/efl/GLTransportSurface.cpp:
        (WebCore::GLTransportSurface::createTransportSurface):
        * platform/graphics/surfaces/egl/EGLConfigSelector.cpp:
        (WebCore::EGLConfigSelector::EGLConfigSelector):
        (WebCore::EGLConfigSelector::pixmapContextConfig):
        (WebCore::EGLConfigSelector::surfaceContextConfig):
        (WebCore::EGLConfigSelector::nativeVisualId):
        (WebCore::EGLConfigSelector::reset):
        (WebCore::EGLConfigSelector::createConfig):
        * platform/graphics/surfaces/egl/EGLConfigSelector.h:
        (EGLConfigSelector):

         Added logic to select EGLConfig supporting alpha and
         opaque as needed. Moved Code related to display to
         EGLHelper class.

        * platform/graphics/surfaces/egl/EGLHelper.cpp: Added.
        (WebCore):
        (EGLDisplayConnection):
        (WebCore::EGLDisplayConnection::EGLDisplayConnection):
        (WebCore::EGLDisplayConnection::~EGLDisplayConnection):
        (WebCore::EGLDisplayConnection::display):
        (WebCore::EGLDisplayConnection::terminate):
        (WebCore::EGLHelper::eglDisplay):
        * platform/graphics/surfaces/egl/EGLHelper.h: Copied from Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.h.
        (WebCore):
        (EGLHelper):
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLTransportSurface::createTransportSurface):
        (WebCore::EGLTransportSurface::EGLTransportSurface):
        (WebCore::EGLTransportSurface::attributes):
        (WebCore::EGLTransportSurface::~EGLTransportSurface):
        (WebCore::EGLTransportSurface::destroy):
        (WebCore::EGLTransportSurface::configuration):
        (WebCore::EGLOffScreenSurface::createOffScreenSurface):
        (WebCore::EGLOffScreenSurface::EGLOffScreenSurface):
        (WebCore::EGLOffScreenSurface::~EGLOffScreenSurface):
        (WebCore::EGLOffScreenSurface::attributes):
        (WebCore::EGLOffScreenSurface::configuration):
        (WebCore::EGLOffScreenSurface::destroy):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        (WebCore):
        (EGLTransportSurface):
        (EGLOffScreenSurface):
        * platform/graphics/surfaces/egl/EGLXSurface.cpp: Copied from Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp.
        (WebCore):
        (WebCore::EGLWindowTransportSurface::EGLWindowTransportSurface):
        (WebCore::EGLWindowTransportSurface::~EGLWindowTransportSurface):
        (WebCore::EGLWindowTransportSurface::swapBuffers):
        (WebCore::EGLWindowTransportSurface::destroy):
        (WebCore::EGLPixmapSurface::EGLPixmapSurface):
        (WebCore::EGLPixmapSurface::~EGLPixmapSurface):
        (WebCore::EGLPixmapSurface::destroy):
        * platform/graphics/surfaces/egl/EGLXSurface.h: Copied from Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.h.
        (WebCore):
        (EGLWindowTransportSurface):
        (EGLPixmapSurface):

        EGLPixmapSurface implementation.

2013-03-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r147218.
        http://trac.webkit.org/changeset/147218
        https://bugs.webkit.org/show_bug.cgi?id=113585

        We should rethink UI of this feature. (Requested by vsevik on
        #webkit).

        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.populateWithProperties):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.set else):
        (WebInspector.RemoteObjectProperty):
        * inspector/front-end/inspector.css:

2013-03-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: extract common base for 3 timeline overview controls (Events/Frames/Memory)
        https://bugs.webkit.org/show_bug.cgi?id=113572

        Reviewed by Yury Semikhatsky.

        Refactoring, covered by existing tests.

        - introduce TimelineOverviewBase as a common base for 3 overview controls;
        - make every overview control a view.

        This does not yet take advantage of common base (subject of the next patch).

        * inspector/front-end/OverviewGrid.js:
        (WebInspector.OverviewGrid.prototype.gridElement):
        (WebInspector.OverviewGrid.prototype.itemsGraphsElement):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.setMode):
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewBase):
        (WebInspector.TimelineOverviewBase.prototype.update):
        (WebInspector.TimelineMemoryOverview):
        (WebInspector.TimelineEventOverview):
        (WebInspector.TimelineEventOverview.prototype._renderBar):
        (WebInspector.TimelineFrameOverview):
        (WebInspector.TimelineFrameOverview.prototype.update):
        (WebInspector.TimelineFrameOverview.prototype._renderBars):
        (WebInspector.TimelineFrameOverview.prototype._drawFPSMarks):
        (WebInspector.TimelineFrameOverview.prototype._renderBar):

2013-03-29  Peter Rybin  <prybin@chromium.org>

        Web Inspector: gather accessor property getter and setter under a single tree node
        https://bugs.webkit.org/show_bug.cgi?id=113357

        Reviewed by Yury Semikhatsky.

        A new tree element class AccessorPropertyTreeElemenet is added.
        RemoteObjectProperty can now represent accessor property (if value is null).
        New tree element is supported in CSS stylesheet.

        Testing code is slightly modified for exploring new tree elements.

        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.populateWithProperties):
        (WebInspector.AccessorPropertyTreeElement):
        (WebInspector.AccessorPropertyTreeElement.prototype.onattach):
        (WebInspector.AccessorPropertyTreeElement.prototype.update):
        (WebInspector.AccessorPropertyTreeElement.prototype.onpopulate):
        * inspector/front-end/RemoteObject.js:
        * inspector/front-end/inspector.css:
        (.accessor-property-name):

2013-03-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Developers will have more clue
        if two different profiles will have same colors for same functions.
        https://bugs.webkit.org/show_bug.cgi?id=113410

        Reviewed by Pavel Feldman.

        The code related to color generator was extracted into a separate class.
        The instance of the class was stored as static private member of the FlameChart class,
        so all the profiles will share the same instance and will use same colors.
        The colors itself were slightly adjusted.

        Drive by fix: coordinatesToNodeIndex was fixed. The error was introduced in the patch about left padding.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.ColorGenerator):
        (WebInspector.FlameChart.ColorGenerator.prototype._colorPairForID):
        (WebInspector.FlameChart.prototype._calculateTimelineData):
        (WebInspector.FlameChart.prototype._calculateTimelineDataForSamples):
        (WebInspector.FlameChart.prototype._coordinatesToNodeIndex):

2013-03-29  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Cleanup the CONTEXT_MENUS in BlackBerry porting
        https://bugs.webkit.org/show_bug.cgi?id=113562

        Reviewed by George Staikos.
        Internally reviewed by Mike Fenton and Gen Mak.

        No new tests, just disable CONTEXT_MENUS for blackberry porting. 

        * platform/blackberry/ContextMenuBlackBerry.cpp:
        * platform/blackberry/ContextMenuItemBlackBerry.cpp:

2013-03-29  KwangYong Choi  <ky0.choi@samsung.com>

        Fix build warning after r147022
        https://bugs.webkit.org/show_bug.cgi?id=113567

        Reviewed by Kentaro Hara.

        Use UNUSED_PARAM macro to fix -Wunused-parameter build warning.
        No new tests, no change on behavior.

        * page/EventHandler.cpp:
        (WebCore::expandSelectionToRespectUserSelectAll):

2013-03-29  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: ability to use AnchorBox as an anchor for Popover
        https://bugs.webkit.org/show_bug.cgi?id=113563

        Reviewed by Pavel Feldman.

        No new test: no change in behaviour.

        - Ability to pass AnchorBox instead of Element for popover anchor.

        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype._positionElement):
        (WebInspector.PopoverHelper.prototype._eventInHoverElement):

2013-03-29  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: assign Scroll events to rendering category (was painting)
        https://bugs.webkit.org/show_bug.cgi?id=113564

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePresentationModel.js: /ScrollLayer.*category/s/painting/rendering/
        (WebInspector.TimelinePresentationModel._initRecordStyles):

2013-03-28  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] playback gets bumpy sometimes when on-disk buffering is slow
        https://bugs.webkit.org/show_bug.cgi?id=113512

        Reviewed by Martin Robinson.

        When the HTTP source element is slow downloading data for on-disk
        buffering the playback position might reach an unbuffered region
        and have bad consequences, pausing the pipeline beforehand
        prevents this case to happen.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::processBufferingStats):

2013-03-29  Keishi Hattori  <keishi@webkit.org>

        Add the event handler content attributes that are defined in the spec to HTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=86363

        Reviewed by Ryosuke Niwa.

        Test: fast/events/event-attribute.html

        We are missing some event handler content attributes from HTMLElement that are defined in the spec.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#event-handlers-on-elements,-document-objects,-and-window-objects

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::eventNameForAttributeName): Returns event name for a given attribute name by looking it up on a HashMap.
        (WebCore::HTMLElement::parseAttribute): Sets up event listeners for content attributes.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseAttribute): Removed event listener content attributes that was added to HTMLElement.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute): Ditto.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute): Ditto.
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute): Ditto.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute): Ditto.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseAttribute): Ditto.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute): Ditto.
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute): Ditto.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::parseAttribute): Ditto.
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::parseAttribute): Ditto.

2013-03-22  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: timeline paint rectangles are off for transformed layers
        https://bugs.webkit.org/show_bug.cgi?id=112919

        Reviewed by Pavel Feldman.

        - pass RenderObject instead of Frame to InspectorInstrumentation::didPaint;
        - take transforms into account and convert paint clip rect into quad;
        - emit quads, not rects as Paint and Layout record data;
        - adjust client to using quads, compute width/height from quad coords.

        * inspector/InspectorInstrumentation.cpp: Pass RenderObject, not frame to {will,did}Paint.
        (WebCore):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::didPaintImpl):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForRenderer): Added.
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::didPaint):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::localToPageQuad): Convert local clip rect to transformed quad.
        (WebCore):
        * inspector/InspectorTimelineAgent.h:
        (WebCore):
        (InspectorTimelineAgent):
        * inspector/TimelineRecordFactory.cpp: Emit quads as Paint and Layout records data.
        (WebCore::createQuad):
        (WebCore):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::TimelineRecordFactory::createLayoutData):
        * inspector/TimelineRecordFactory.h:
        (WebCore):
        (TimelineRecordFactory):
        * inspector/front-end/TimelinePanel.js: Highlight a quad iff formatted record has highlightQuad field.
        (WebInspector.TimelinePanel.prototype._mouseOut):
        (WebInspector.TimelinePanel.prototype._mouseMove):
        (WebInspector.TimelinePanel.prototype._highlightQuad):
        (WebInspector.TimelinePanel.prototype._hideQuadHighlight):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record): Set highlightQuad for Paint and Layout
        (WebInspector.TimelinePresentationModel.Record.prototype._generatePopupContentWithImagePreview):
        (WebInspector.TimelinePresentationModel.Record.prototype._getRecordDetails):
        (WebInspector.TimelinePresentationModel.quadWidth):
        (WebInspector.TimelinePresentationModel.quadHeight):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):

2013-03-21  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: generalize InspectorDOMAgent::highlightRect() to highlightQuad()
        https://bugs.webkit.org/show_bug.cgi?id=112911

        Reviewed by Pavel Feldman.

        - added Quad type and DOMAgent.highlightQuad() to protocol;
        - retained DOMAgent.highlightRect(), but implement it via highlightQuad.

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::parseQuad):
        (WebCore):
        (WebCore::InspectorDOMAgent::highlightRect):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::innerHighlightQuad):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorOverlay.cpp: Mostly just renames of rect to quad.
        (WebCore::InspectorOverlay::paint):
        (WebCore::InspectorOverlay::getHighlight):
        (WebCore::InspectorOverlay::hideHighlight):
        (WebCore::InspectorOverlay::highlightQuad):
        (WebCore::InspectorOverlay::update):
        (WebCore::InspectorOverlay::drawQuadHighlight):
        (WebCore::InspectorOverlay::reportMemoryUsage):
        * inspector/InspectorOverlay.h:
        (InspectorOverlay):
        * inspector/InspectorOverlayPage.html: Ditto.

2013-03-29  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r143102): Ignore table cell's height attribute when checking if containing block has auto height.
        https://bugs.webkit.org/show_bug.cgi?id=113526

        It matches shipping Safari and Firefox behaviour.
        
        Reviewed by Antti Koivisto.

        Test: fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height.html

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

2013-03-28  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Cookies] CookiesTable should integrate with DataGrid context menu.
        https://bugs.webkit.org/show_bug.cgi?id=113496

        Reviewed by Pavel Feldman.

        Integrate CookiesTable with DataGrid context menu
        instead of overriding it.

        * inspector/front-end/CookiesTable.js:
        Pass context menu callback to DataGrid constructor.
        * inspector/front-end/DataGrid.js:
        Added context menu callback constructor parameter. Fixed JSDoc.

2013-03-28  Philip Rogers  <pdr@google.com>

        Fix compiler warning in IDBTransaction::modeToString
        https://bugs.webkit.org/show_bug.cgi?id=113547

        Reviewed by Darin Adler.

        Not all compilers are smart enough to handle this switch. This patch refactors
        modeToString to not return from the default case.

        No new tests as this is just a compiler fix.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::modeToString):

2013-03-28  Simon Fraser  <simon.fraser@apple.com>

        GraphicsLayerCA::recomputeVisibleRects() shouldn't actually set the visible rect
        https://bugs.webkit.org/show_bug.cgi?id=113544

        Reviewed by Tim Horton.
        
        The functions added in r147058 to update the visible rects of GraphicsLayerCAs
        should not have actually set the m_visibleRect on the layer, because this
        caused a later call to adjustTiledLayerVisibleRect() to think that the visible
        rect had not changed, so it did no expansion.
        
        Clarify the logic to ask the GraphicsLayer whether, given a new visible
        rect, it would need to make new tiles (which happens later during a flush).
        
        Add a function to RenderLayerCompositor to call this code (but which has
        no callers yet).

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::visibleRectChangeRequiresFlush): Make private.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush):
        (WebCore::GraphicsLayerCA::visibleRectChangeRequiresFlush):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::noteVisibleRectChanged):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-03-28  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] <template> should be able to be a foster parent
        https://bugs.webkit.org/show_bug.cgi?id=113541

        Reviewed by Eric Seidel

        This adds to the check in findFosterSite to include whether the parent is a DocumentFragment which is a template contents.

        Tests added to html5lib suite.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::findFosterSite):

2013-03-28  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Don't create SolidColorLayer for full transparent background
        https://bugs.webkit.org/show_bug.cgi?id=113524

        Reviewed by James Robinson.

        Test: GraphicsLayerChromiumTest.setContentsToSolidColor

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

2013-03-28  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        use XMLHttpRequestResponseType enumeration in XMLHttpRequest.idl
        https://bugs.webkit.org/show_bug.cgi?id=113518

        Reviewed by Kentaro Hara.

        Use enum XMLHttpRequestResponseType type instead of DOMString for
        XMLHttpRequest responseType.

        Argument validation now happens in the bindings. 
        XMLHttpRequest::setResponseType should then never receive invalid
        arguments. So, replace console message with ASSERT_NOT_REACHED();

        Test: fast/xmlhttprequest/xmlhttprequest-set-responsetype.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setResponseType):
        * xml/XMLHttpRequest.idl:

2013-03-28  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        [css3-text] Add platform support for "wavy" text decoration style
        https://bugs.webkit.org/show_bug.cgi?id=92868

        Reviewed by Benjamin Poulain.

        This patch uses GraphicsContext::strokePath() to implement
        wavy decoration for the CSS3 property "text-decoration-style".

        No new tests as this is covered with existing tests.

        * rendering/InlineTextBox.cpp:
        (WebCore::textDecorationStyleToStrokeStyle): Remove obsolete comment.
        (WebCore::adjustStepToDecorationLength): Add function to adjust
        variables used to calculate the lenght of Bezier curves.
        (WebCore::strokeWavyTextDecoration): Add function to stroke wavy
        decoration based on cubic Bezier curve.
        (WebCore::InlineTextBox::paintDecoration): Call
        strokeWavyTextDecoration when necessary.

2013-03-28  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        REGRESSION(r147149): breaks binding test on Mac. (Requested by mlam_ on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=113538

        Reviewed by Simon Fraser.

        Run run-bindings-tests --reset-results to fix broken tests after
        r147149.

        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrSetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::shortAttrAttrSetter):
        (WebCore::TestObjV8Internal::unsignedShortAttrAttrSetter):
        (WebCore::TestObjV8Internal::longAttrAttrSetter):
        (WebCore::TestObjV8Internal::longLongAttrAttrSetter):
        (WebCore::TestObjV8Internal::unsignedLongLongAttrAttrSetter):
        (WebCore::TestObjV8Internal::testObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::createAttrSetter):
        (WebCore::TestObjV8Internal::reflectedIntegralAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedUnsignedIntegralAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedBooleanAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedCustomIntegralAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedCustomBooleanAttrAttrSetter):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrSetter):
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::attrWithSetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrSetter):
        (WebCore::TestObjV8Internal::conditionalAttr1AttrSetter):
        (WebCore::TestObjV8Internal::conditionalAttr2AttrSetter):
        (WebCore::TestObjV8Internal::conditionalAttr3AttrSetter):
        (WebCore::TestObjV8Internal::anyAttributeAttrSetter):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr1AttrSetter):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr2AttrSetter):
        (WebCore::TestObjV8Internal::enabledPerContextAttr1AttrSetter):
        (WebCore::TestObjV8Internal::enabledPerContextAttr2AttrSetter):
        (WebCore::TestObjV8Internal::floatArrayAttrSetter):
        (WebCore::TestObjV8Internal::doubleArrayAttrSetter):
        (WebCore::TestObjV8Internal::mutablePointAttrSetter):
        (WebCore::TestObjV8Internal::immutablePointAttrSetter):
        (WebCore::TestObjV8Internal::strawberryAttrSetter):
        (WebCore::TestObjV8Internal::strictFloatAttrSetter):
        (WebCore::TestObjV8Internal::idAttrSetter):
        (WebCore::TestObjV8Internal::nullableLongSettableAttributeAttrSetter):
        (WebCore::TestObjV8Internal::nullableStringValueAttrSetter):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrSetter):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrSetterForMainWorld):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::valueAttrSetter):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrSetter):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::unsignedLongLongAttrAttrSetter):
        (WebCore::TestTypedefsV8Internal::immutableSerializedScriptValueAttrSetter):
        (WebCore::TestTypedefsV8Internal::attrWithGetterExceptionAttrSetter):
        (WebCore::TestTypedefsV8Internal::attrWithSetterExceptionAttrSetter):

2013-03-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r147130.
        http://trac.webkit.org/changeset/147130
        https://bugs.webkit.org/show_bug.cgi?id=113539

        Not needed now that we do not sleep in preprocessor.pm
        (Requested by jamesr on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * bindings/scripts/CodeGenerator.pm:
        (ParseInterface):
        * bindings/scripts/IDLParser.pm:
        (Parse):
        * bindings/scripts/generate-bindings.pl:
        * bindings/scripts/generate-preprocessed-idls.pl: Removed.
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2013-03-28  Nate Chapin  <japhet@chromium.org>

        Don't grant local content permissions for appcache loads.
        https://bugs.webkit.org/show_bug.cgi?id=112542

        Reviewed by Antti Koivisto.

        No new tests, fixing http/tests/appcache/local-content.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::commitData): Don't grant local load permissions
            to all SubstituteData loads, only give them to loads that were SubstituteData
            loads at the time of DocumentLoader construction. This constitutes all
            SubstituteData loads except those triggered by appcache.
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument): Move granting local load
            permissions for SubstituteData loads to DocumentLoader::commitData().

2013-03-28  Mike West  <mkwst@chromium.org>

        X-Frame-Options: Blocked resources should fire load events.
        https://bugs.webkit.org/show_bug.cgi?id=113192

        Reviewed by Nate Chapin.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
            Fire a load event on the frame's owner element when denying access
            due to X-Frame-Options header content. This brings us in-line with
            Gecko and IE, which both trigger load events currently.

2013-03-28  Tien-Ren Chen  <trchen@chromium.org>

        Support bottom-right anchored fixed-position elements during a pinch gesture
        https://bugs.webkit.org/show_bug.cgi?id=111670

        Reviewed by James Robinson.

        This patch adds support to bottom-right fixed-position elements by
        introducing WebLayerPositionConstraint to WebLayer.

        No new tests. Can't test until chromium patch landed.

        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateLayerPositionConstraint):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::clearPositionConstraintExceptForLayer):
        (WebCore):
        (WebCore::computePositionConstraint):
        (WebCore::ScrollingCoordinatorChromium::updateLayerPositionConstraint):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.h:
        (ScrollingCoordinatorChromium):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::registerScrollingLayers):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::contentsContainmentLayer):
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderLayerCompositor.h:

2013-03-28  James Robinson  <jamesr@chromium.org>

        Remove unnecessary 1 second sleep on windows from preprocessor.pm
        https://bugs.webkit.org/show_bug.cgi?id=113536

        Unreviewed, partial rollout of r146661.

        This rolls out one line of 146661 that slows down the windows build significantly.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2013-03-28  Levi Weintraub  <leviw@chromium.org>

        Enable font measurement optimization for Chromium-mac when there are no font-feature-settings.

        Enable measure-once optimization on Chromium-Mac
        https://bugs.webkit.org/show_bug.cgi?id=113243

        Reviewed by Eric Seidel.

        Bugs in Chromium-mac's -webkit-font-feature-settings support prevented us from enabling the
        optimization when it was enabled for all other platforms. This was believed to be related to
        kerning, but the bug shows up when there are any font-feature-settings specified. For now,
        optimizing the common case and only turning off the optimization when there are font-feature-
        settings in play.

        Updated test fast/text/shaping/shaping-selection-rect.html to avoid breaking due to
        https://bugs.webkit.org/show_bug.cgi?id=113418

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):

2013-03-28  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Exclusions][CSS Regions] Block children do not layout inline content correctly in a region with shape-inside set
        https://bugs.webkit.org/show_bug.cgi?id=112177

        Reviewed by David Hyatt.

        When we had two multiple regions and a shape-inside was applied on the second region, but not on the first region and the content contained
        paragraphs, the content was pushed down almost to the bottom in the second region. In a flow thread this behavior caused by the lack of the 
        proper updating of absoluteLogicalTop in RenderBlock::layoutRunsAndFloatsInRange function.

        Tests: fast/regions/shape-inside/shape-inside-on-additional-regions.html
               fast/regions/shape-inside/shape-inside-on-regions.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Update the value of absoluteLogicalTop in every run when we are in a flow thread.

2013-03-28  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        exceptions are not checked after toInt32 calls in bindings.
        https://bugs.webkit.org/show_bug.cgi?id=113218

        Reviewed by Kentaro Hara.

        In attribute setter, wrap JSValue to native value conversion in a try
        catch block.

        Define a new macro binding: V8TRYCATCH_VOID

        No new tests: covered by fast/dom/exception-in-binding.html

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter):
        * bindings/v8/V8BindingMacros.h:
        (WebCore):

2013-03-28  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Use transform property of ClutterActor
        https://bugs.webkit.org/show_bug.cgi?id=113317

        Reviewed by Gustavo Noronha Silva.

        ClutterActor has a transform property to set transformation matrix directly
        since version 1.12. So we don't need to keep and use the matrix property of GraphicsLayerActor.

        No new tests because of no functionality change.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (_GraphicsLayerActorPrivate):
        (graphicsLayerActorDispose):
        (graphicsLayerActorApplyTransform):
        * platform/graphics/clutter/GraphicsLayerActor.h:
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::updateTransform):
        * platform/graphics/clutter/PlatformClutterAnimation.cpp:
        (WebCore::PlatformClutterAnimation::addTransformTransition):

2013-03-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143834.
        http://trac.webkit.org/changeset/143834
        https://bugs.webkit.org/show_bug.cgi?id=113530

        Multiple use-after-free regressions on ClusterFuzz (Requested
        by inferno-sec on #webkit).

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/Attr.h:
        (Attr):
        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):
        * dom/Element.h:
        (Element):

2013-03-28  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Before / start paddings and borders are not accounted for when placing the grid items
        https://bugs.webkit.org/show_bug.cgi?id=113351

        Reviewed by Tony Chang.

        Tests: fast/css-grid-layout/grid-element-border-grid-item.html
               fast/css-grid-layout/grid-element-border-padding-grid-item.html
               fast/css-grid-layout/grid-element-padding-grid-item.html

        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderAndPaddingBefore):
        Added this helper function (we do have borderAndPaddingStart but didn't have this
        one for some reason).

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::findChildLogicalPosition):
        Shifted |offset| by the paddings and borders before / start.

2013-03-28  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Build GTK-specific, non-layer-violating source code into WebCore-independent libPlatformGtk.la
        https://bugs.webkit.org/show_bug.cgi?id=112546

        Reviewed by Martin Robinson.

        No new tests - no new functionality.

        * GNUmakefile.am: Passing the DATA_DIR value through the cppflags is not required anymore as the affected source is now
        built into libPlatformGtk.la.
        * GNUmakefile.list.am: Build the GTK-specific source files that are already independent of WebCore into the
        libPlatformGtk.la by assigning the build targets listing to the platformgtk_sources variable.
        * platform/gtk/GtkVersioning.c: Renamed from Source/Platform/gtk/GtkVersioning.c.
        * platform/gtk/GtkVersioning.h: Renamed from Source/Platform/gtk/GtkVersioning.h.

2013-03-28  Matt Falkenhagen  <falken@chromium.org>

        Refactoring: Replace Element::disabled and isEnabledFormControl with isDisabledFormControl
        https://bugs.webkit.org/show_bug.cgi?id=113273

        Reviewed by Kent Tamura.

        Element::disabled is about form controls and Element::isEnabledFormControl
        is redundant with it, so replace them with a single function
        Element::isDisabledFormControl.

        No new tests, there should be no behavior change.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::canSetSelectedChildrenAttribute):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::canSetSelectedAttribute):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::canSetFocusAttribute):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::isEnabled):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isEnabled):
        (WebCore::AccessibilityNodeObject::actionElement):
        (WebCore::AccessibilityNodeObject::canSetFocusAttribute):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithControl):
        * dom/Element.cpp:
        (WebCore::Element::isDisabledFormControl):
        * dom/Element.h:
        (Element):
        (WebCore::isDisabledFormControl): Add helper function for convenience.
        (WebCore):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        * dom/GestureEvent.cpp:
        (WebCore::GestureEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/Node.cpp:
        (WebCore::Node::handleLocalEvents):
        (WebCore::Node::willRespondToMouseMoveEvents):
        (WebCore::Node::willRespondToMouseClickEvents):
        (WebCore::Node::willRespondToTouchEvents):
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isEditControlOwnerDisabled):
        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::DOMFormData):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        (WebCore::FileInputType::disabledAttributeChanged):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler):
        (WebCore::HTMLButtonElement::willRespondToMouseClickEvents):
        (WebCore::HTMLButtonElement::isSuccessfulSubmitButton):
        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::updateAncestorDisabledState):
        (WebCore::HTMLFormControlElement::isDisabledFormControl):
        (WebCore::HTMLFormControlElement::supportsFocus):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::isDisabledOrReadOnly):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isSuccessfulSubmitButton):
        (WebCore::HTMLInputElement::willRespondToMouseClickEvents):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::isDisabledFormControl):
        * html/HTMLOptGroupElement.h:
        (HTMLOptGroupElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLOptionElement.h:
        (HTMLOptionElement):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::willRespondToMouseClickEvents):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::nextValidIndex):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::recalcListItems):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::updateSelectedState):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        (WebCore::HTMLSelectElement::optionAtIndex):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::handleDOMActivateEvent):
        * html/ResetInputType.cpp:
        (WebCore::ResetInputType::handleDOMActivateEvent):
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::handleDOMActivateEvent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::isDisabledFormControl):
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::SliderThumbElement::willRespondToMouseMoveEvents):
        (WebCore::SliderThumbElement::willRespondToMouseClickEvents):
        * html/shadow/SliderThumbElement.h:
        (SliderThumbElement):
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::updateImage):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemIsEnabled):
        * rendering/RenderTextControl.cpp:
        (WebCore::updateUserModifyProperty):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isEnabled):
        * rendering/RenderThemeMac.mm:
        (WebCore::getMediaUIPartStateFlags):
        * rendering/RenderThemeMacShared.mm:
        (WebCore::RenderThemeMacShared::adjustMenuListStyle):
        (WebCore::RenderThemeMacShared::paintSearchFieldCancelButton):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::adjustMenuListStyle):

2013-03-28  Brady Eidson  <beidson@apple.com>

        Remove workaround for <rdar://problem/5321972>.
        <rdar://problem/12022862> and https://bugs.webkit.org/show_bug.cgi?id=113516

        Reviewed by Sam Weinig.

        No new tests (No point in testing the removal of bizarre behavior).

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary): This workaround isn't needed on Lion+

2013-03-28  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        use CanvasWindingRule enumeration in CanvasRenderingContext2D.idl
        https://bugs.webkit.org/show_bug.cgi?id=113456

        Reviewed by Kentaro Hara.

        Use enum CanvasWindingRule type instead of DOMString for winding
        arguments when needed. Changed methods are: fill, stroke and isPointInPath.

        Test: fast/canvas/winding-enumeration.html

        * html/canvas/CanvasRenderingContext2D.idl:

2013-03-28  Scott Graham  <scottmg@chromium.org>

        Move preprocessing of idl to pre-pass for gyp
        https://bugs.webkit.org/show_bug.cgi?id=113448

        Reviewed by Tony Chang.

        Moves the preprocessor invocations when parsing IDL files to a
        pre-pass to avoid reinvocations when IDLs are referenced from others.
        This reduces the number of invocations of the preprocessor from 20071
        to 633, which reduces the runtime from 12m30 to 1m (on a Windows box).

        No new tests, this is a build time improvement, and shouldn't have any
        visible effect.

        * WebCore.gyp/WebCore.gyp:
        * bindings/scripts/CodeGenerator.pm:
        (ParseInterface):
        * bindings/scripts/IDLParser.pm:
        (Parse):
        * bindings/scripts/generate-bindings.pl:
        * bindings/scripts/generate-preprocessed-idls.pl: Added.
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2013-03-28  Alok Priyadarshi  <alokp@chromium.org>

        RenderBox::backgroundIsKnownToBeOpaqueInRect may be wrong for theme-painted elements
        https://bugs.webkit.org/show_bug.cgi?id=113419

        Reviewed by Simon Fraser.

        Do not consider control elements as opaque. They are typically theme painted, and we cannot assume opaqueness on the behalf of theme. It can be improved by asking the theme if it paints opaque.

        Test: compositing/contents-opaque/control-layer.html

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

2013-03-28  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Animating layer disappears while running with clutter backend
        https://bugs.webkit.org/show_bug.cgi?id=110470

        Reviewed by Gustavo Noronha Silva.

        The reason of this issue is that clutter_actor_remove_child leads to stopping animations
        of child actor. ClutterActor's animation could be defined only when it has a parent actor.
        So we should avoid the case calling the api as much as we can. At least we don't
        need to reset a actor's parent at all if the current parent is same with new one.
        If we can't avoid invoking clutter_actor_remove_child for an animating actor, we may apply
        a more complicated way to keep the animation. But I haven't faced such a case yet.

        Covered by existing animation tests.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorSetSublayers):
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::recursiveCommitChanges):
        (WebCore::GraphicsLayerClutter::updateSublayerList):

2013-03-28  Xianzhu Wang  <wangxianzhu@chromium.org>

        Non-painting fixed elements should not cause repaints on scroll
        https://bugs.webkit.org/show_bug.cgi?id=110430

        Reviewed by Simon Fraser.

        Test: compositing/repaint/scroll-fixed-layer-no-content.html
        Test: compositing/repaint/scroll-fixed-layer-out-of-view.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsFastPath): Check for no-content and out-of-view flag set by RLC.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition): Moved the check for no-content above out-of-view because it's faster.

2013-03-28  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, revert accidentally added line committed in r147117.

        * inspector/front-end/ElementsTreeOutline.js:

2013-03-28  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Elements] Syntax-highlight the "Edit as HTML" editor
        https://bugs.webkit.org/show_bug.cgi?id=113306

        Reviewed by Vsevolod Vlasov.

        Use CodeMirror as the raw HTML editor for the "Edit as HTML" menu item
        (and all multiline editors for WebInspector.startEditing()).
        Drive-by fix for handling the editing when the editor has been invoked on the closing tag.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.commit):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML):
        * inspector/front-end/UIUtils.js:
        (WebInspector.EditingConfig.prototype.setMultiline):
        (WebInspector.startEditing):
        (WebInspector.CodeMirrorCSSLoadView): A bogus view to load-unload CodeMirror-related CSS on demand.
        * inspector/front-end/elementsPanel.css:
        (#elements-content .CodeMirror):
        (#elements-content .CodeMirror pre):
        (#elements-content .CodeMirror-lines):
        * inspector/front-end/elementsPanel.css: CodeMirror styles for the "Edit as HTML" editor.
        * inspector/front-end/externs.js: Declare CodeMirror type with some members, as it is third-party code.
        * inspector/front-end/inspector.html: Fix script order (UIUtils.js requires View.js).

2013-03-28  Hajime Morrita  <morrita@google.com>

        Custom Elements: should support non-HTML namespaces.
        https://bugs.webkit.org/show_bug.cgi?id=111693

        Reviewed by Dimitri Glazkov.

        Some existing code assumes that the element extends HTMLElements.
        This change allow it to extend from Element. Note that the
        namespace URI of a custom element is determined by given element
        prototype: An element will have XHTML namespace if its prototype
        chain includes HTMLElements, SVGElement leads SVG namespace and
        null otherwise, respectively.

        Test: fast/dom/custom/document-register-namespace.html

        * bindings/v8/CustomElementHelpers.cpp:
        (WebCore::hasValidPrototypeChainFor): Factored out from isValidPrototypeParameter()
        (WebCore::CustomElementHelpers::isValidPrototypeParameter): Extend to support non HTMLElement prototype
        (WebCore::CustomElementHelpers::findLocalName): Support non-HTML element names.
        * bindings/v8/CustomElementHelpers.h:
        (CustomElementHelpers):
        * dom/CustomElementConstructor.cpp:
        (WebCore::CustomElementConstructor::createElementInternal):
        * dom/CustomElementRegistry.cpp:
        (WebCore::CustomElementRegistry::registerElement): No longer hard-codes namespace and picks one based on the prototype value.
        * dom/CustomElementRegistry.h:
        (CustomElementRegistry):

2013-03-28  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Add support for the simple case of padding a polygonal shape-inside
        https://bugs.webkit.org/show_bug.cgi?id=112592

        Reviewed by Dirk Schulze.

        First pass at computing the padded or inset boundary of a polygon.  This version does not handle
        self-intersecting polygons, or values of shape-padding large enough to change the shape of the
        original polygon. The implementation computes an offset edge for each polgon edge, where the offset
        edge is parallel to the original edge and separated by shape-padding. The padded polygon's vertices
        are the intersections of each pair of adjacent offset edges. When adjacent offset edges do not intersect,
        because they share a reflex vertex in the original polygon, an approximation to a circular arc
        connects the offset edges.

        Tests: fast/exclusions/shape-inside/shape-inside-polygon-padding-001.html
               fast/exclusions/shape-inside/shape-inside-polygon-padding-002.html
               fast/exclusions/shape-inside/shape-inside-polygon-padding-003.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::isReflexVertex): Just moved this function earlier in the file.
        (WebCore::inwardEdgeNormal): Unit vector that's perpindicular to the edge and that points inwards.
        (WebCore::outwardEdgeNormal): Unit vector that's perpindicular to the edge and that points outwards.
        (WebCore::appendArc): Append a linear approximation to a circular arc to a vector of vertices.
        (WebCore::computeShapePaddingBounds): Return a polygon whose edges are all inset by shape-padding from m_polygon.
        (WebCore::computeShapeMarginBounds): Just a stub, see bug 112917.
        (WebCore::ExclusionPolygon::shapePaddingBounds): Lazily use computeShapePaddingBounds() to initialize m_paddingBounds.
        (WebCore::ExclusionPolygon::shapeMarginBounds): Lazily use computeShapeMarginBounds() to initialize m_marginBounds.
        (WebCore::ExclusionPolygon::getIncludedIntervals): Now based on the value of shapePaddingBounds().
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop): Now based on the value of shapePaddingBounds().
        * rendering/ExclusionPolygon.h:
        (WebCore::ExclusionPolygon::ExclusionPolygon):

2013-03-28  Chris Hutten-Czapski  <chutten@blackberry.com>

        [BlackBerry] Handle EXIF orientation for ImageDocuments
        https://bugs.webkit.org/show_bug.cgi?id=113423

        Internal Bug: PR 293648
        Informally Reviewed by Jeff Rogers
        Reviewed by Rob Buis.

        Support image orientation in our image draw calls, and advertise
        the capability to the calling code. This allows us to respect EXIF
        orientation data.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):

2013-03-28  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: name timeline overview controls consistently
        https://bugs.webkit.org/show_bug.cgi?id=113503

        Reviewed by Yury Semikhatsky.

        Refactoring, covered by existing tests.

        - rename HeapGraph to TimelineMemoryOverview;
        - rename TimelineCategoryStrips to TimelineEventOvrview.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.setMode):
        (WebInspector.TimelineOverviewPane.prototype._setFrameMode):
        (WebInspector.TimelineOverviewPane.prototype._onCategoryVisibilityChanged):
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype.setMinimumRecordDuration):
        (WebInspector.TimelineMemoryOverview):
        (WebInspector.TimelineEventOverview):
        (WebInspector.TimelineEventOverview.prototype._renderBar):

2013-03-28  Eli Fidler  <efidler@blackberry.com>

        [BlackBerry] Correct glyph contour winding direction when fake-bolding
        https://bugs.webkit.org/show_bug.cgi?id=113411

        Reviewed by Rob Buis.

        * platform/graphics/blackberry/FontPlatformDataBlackBerry.cpp:
        (WebCore::FontPlatformData::applyState):

2013-03-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Make JavaScriptSourceFrame work correctly with breakpoints when uiSourceCode does not have a scriptFile.
        https://bugs.webkit.org/show_bug.cgi?id=113500

        Reviewed by Pavel Feldman.

        JavaScriptSourceFrame now listens for uiSourceCode working copy related events and supports muting breakpoints without script file.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype._workingCopyChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._workingCopyCommitted):
        (WebInspector.JavaScriptSourceFrame.prototype._updateScriptFile):
        (WebInspector.JavaScriptSourceFrame.prototype.dispose):

2013-03-22  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: factor out node search controller from inspector.js
        https://bugs.webkit.org/show_bug.cgi?id=112689

        Reviewed by Pavel Feldman.

        This just extracts the existing logic of toggling node search
        from inspector.js into a class of its own, InspectElementModeController.
        Drive-by: add CtrlOrMeta+Shift+C to help screen.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * inspector/compile-front-end.py:
        * inspector/front-end/InspectElementModeController.js: Added.
        (WebInspector.InspectElementModeController):
        (WebInspector.InspectElementModeController.createShortcut):
        (WebInspector.InspectElementModeController.prototype.enabled):
        (WebInspector.InspectElementModeController.prototype.disable):
        (WebInspector.InspectElementModeController.prototype.toggleSearch.callback):
        (WebInspector.InspectElementModeController.prototype.toggleSearch):
        (WebInspector.InspectElementModeController.prototype.handleShortcut):
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.enterInspectElementMode):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createGlobalStatusBarItems):
        (WebInspector._registerShortcuts):
        (WebInspector.documentKeyDown):
        (WebInspector._updateFocusedNode):

2013-03-28  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Settings] "previouslyViewedFiles" exceeds local storage quota.
        https://bugs.webkit.org/show_bug.cgi?id=113375

        Reviewed by Pavel Feldman.

        Serialized "previouslyViewedFiles" may make local storage overflow.
        Two fixed applied:
        - limit number of history log items
        - limit length of URIs that get serialized;
          this would affect only data-url URIs.

        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.HistoryItem.prototype.serializeToObject):
        Added length check.
        (WebInspector.TabbedEditorContainer.History.prototype.set _serializeToObject):
        Added output array length limit.

2013-03-28  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Heap snapshots retained size falls out of the grid if column is too narrow
        https://bugs.webkit.org/show_bug.cgi?id=113497

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._createValueCell):
        * inspector/front-end/heapProfiler.css:
        (.heap-snapshot-view .data-grid div.heap-snapshot-multiple-values):

2013-03-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: ResourceScriptFile should check if resource content really matches VM script when determining hasDiverged state.
        https://bugs.webkit.org/show_bug.cgi?id=113488

        Reviewed by Pavel Feldman.

        Enabled support for checking that file content matches VM script in ResourceScriptFile (For script resources only).
        This check is never done before content is loaded in corresponding editor to avoid regressing performance.
        File - script content matching is done bearing in mind sourceURLs. 
        Live edit keeps sourceURL in script content now even if it is not present in file's content.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._updateScriptFile):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextEditorContentLoaded):
        * inspector/front-end/LiveEditSupport.js:
        (WebInspector.LiveEditScriptFile.prototype.checkMapping):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._bindUISourceCodeToScripts):
        (WebInspector.ScriptFile.prototype.checkMapping):
        (WebInspector.ResourceScriptFile):
        (WebInspector.ResourceScriptFile.prototype._workingCopyCommitted):
        (WebInspector.ResourceScriptFile.prototype._isDiverged):
        (WebInspector.ResourceScriptFile.prototype._sourceMatchesScriptSource):
        (WebInspector.ResourceScriptFile.prototype._sourceEndsWithSourceURL):
        (WebInspector.ResourceScriptFile.prototype.checkMapping.callback):
        (WebInspector.ResourceScriptFile.prototype.checkMapping):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.SnippetScriptFile.prototype.checkMapping):

2013-03-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Simplify ResourceScriptFile so that it stores hasDiverged state in it.
        https://bugs.webkit.org/show_bug.cgi?id=113489

        Reviewed by Pavel Feldman.

        ResourceScriptFile._hasDiverged is the one flag that shows whether we have diverged from VM.
        It's values is based both on dirty flag on uiSourceCode and information about live edit failures stored in _lastLiveEditFailed field.
        Removed willMerge/Diverge events from ScriptFile.
        JavaScriptSourceFrame now uses isMergingToVM/DivergingFromVM methods on ScriptFile.
        to determine whether breakpointAdded/Removed events should be ignored.
        Introduced muted state on JavaScriptSourceFrame to determine whether it should ignore user attempts to set/remove breakpoints.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype._didMergeToVM):
        (WebInspector.JavaScriptSourceFrame.prototype._didDivergeFromVM):
        (WebInspector.JavaScriptSourceFrame.prototype._muteBreakpointsWhileEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._restoreBreakpointsAfterEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._addBreakpointDecoration):
        (WebInspector.JavaScriptSourceFrame.prototype._removeBreakpointDecoration):
        (WebInspector.JavaScriptSourceFrame.prototype._shouldIgnoreExternalBreakpointEvents):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointRemoved):
        (WebInspector.JavaScriptSourceFrame.prototype._updateScriptFile):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextEditorContentLoaded):
        * inspector/front-end/LiveEditSupport.js:
        (WebInspector.LiveEditScriptFile.prototype.isMergingToVM):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.ScriptFile.prototype.isMergingToVM):
        (WebInspector.ResourceScriptFile):
        (WebInspector.ResourceScriptFile.prototype._workingCopyCommitted):
        (WebInspector.ResourceScriptFile.prototype._isDiverged):
        (WebInspector.ResourceScriptFile.prototype._workingCopyChanged):
        (WebInspector.ResourceScriptFile.prototype._update):
        (WebInspector.ResourceScriptFile.prototype._divergeFromVM):
        (WebInspector.ResourceScriptFile.prototype._mergeToVM):
        (WebInspector.ResourceScriptFile.prototype.hasDivergedFromVM):
        (WebInspector.ResourceScriptFile.prototype.isMergingToVM):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.SnippetScriptFile.prototype.isMergingToVM):

2013-03-25  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: DOMContentLoaded event divider is not shown on Timeline's main view
        https://bugs.webkit.org/show_bug.cgi?id=113196

        Reviewed by Pavel Feldman.

        - keep event divider records in TimelinePresentationModel, not in TimelinePanel;
        - process event divider records on every level, not just on top.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._updateEventDividers):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline.checkVisible):
        (WebInspector.TimelinePanel.prototype._resetPanel):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.reset):
        (WebInspector.TimelinePresentationModel.prototype._innerAddRecord):
        (WebInspector.TimelinePresentationModel.prototype.eventDividerRecords):

2013-03-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed inspector front-end closure compilation fix.

        * inspector/front-end/CookiesTable.js:

2013-03-28  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [DTE] Paint overlay highlight over line background color
        https://bugs.webkit.org/show_bug.cgi?id=113346

        Reviewed by Pavel Feldman.

        No new tests: no change in behaviour.

        - Append spans instead of text nodes to lineRows.
        - Set positioning of all spans inside of webkit-line-content as
        relative
        - Set z-index property so that overlay highlight is above line
        background but under text.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._measureHighlightDescriptor):
        (WebInspector.TextEditorMainPanel.prototype._measureSpans):
        (WebInspector.TextEditorMainPanel.prototype._renderRanges):
        (WebInspector.TextEditorMainPanel.prototype._insertSpanBefore):
        * inspector/front-end/textEditor.css:
        (.webkit-line-content > .text-editor-overlay-highlight):
        (.webkit-line-content > *):

2013-03-28  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] [Styles] Pasting a property in the "name" field is broken
        https://bugs.webkit.org/show_bug.cgi?id=113491

        Reviewed by Pavel Feldman.

        Update the CSSProperty name and value upon pasting properties into the Styles pane.
        Drive-by: start editing the next/new property name after pasting.

        Test: inspector/styles/paste-property.html

        * inspector/front-end/StylesSidebarPane.js:
        (.selectElement):
        (.moveDirection.alreadyNew):

2013-03-28  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Auto expand retaining path until there are more than one retainer.
        https://bugs.webkit.org/show_bug.cgi?id=112596

        Reviewed by Yury Semikhatsky.

        When retainers view gets opened automatically expand retaining path
        for objects having just a single retainer.

        Test: inspector/profiler/heap-snapshot-summary-retainers.html

        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype.populateComplete):
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype.setDataSource):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype._populateChildren):

2013-03-28  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Fixed property text indentation in Styles sidebar.
        https://bugs.webkit.org/show_bug.cgi?id=113409

        Reviewed by Alexander Pavlov.

        When the sidebar is too narrow and the property text wraps around it breaks the indentation.
        This was introduced in r143207 which spuriously modified DOM elements order.

        * inspector/front-end/StylesSidebarPane.js:

2013-03-28  Arpita Bahuguna  <a.bah@samsung.com>

        Regression: Crash when selecting Hebrew and numbers in a list
        https://bugs.webkit.org/show_bug.cgi?id=111894

        Reviewed by Ryosuke Niwa.

        There is a crash when trying to click/select an anonymous
        renderer.

        This is a regression due to r143313 which tries to add border/padding
        to the computed caret rect in RenderBox::localCaretRect().
        The patch calls on the node() method for the corresponding
        renderer. For an anonymous renderer though, node() returns
        null. Since no check had been added for this, a crash occurs when
        caret rect for an anonymous renderer is being computed.

        Test: editing/selection/click-on-anonymous-content-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):
        Added a check for validating the return from the node() call.

2013-03-28  Mike West  <mkwst@chromium.org>

        X-Frame-Options: Multiple headers are ignored completely.
        https://bugs.webkit.org/show_bug.cgi?id=113387

        Reviewed by Nate Chapin.

        If a server sends multiple 'X-Frame-Options' headers, we end up with a
        value like 'SAMEORIGIN, SAMEORIGIN'. Currently, we're treating that as
        invalid, and ignoring the header. It would be safer to follow Gecko's
        lead[1] by:

        - Folding duplicated entries into their common value (that is:
          'sameorigin, sameorigin' -> 'sameorigin').

        - Failing closed in the case of conflicts (that is:
          'sameorigin, allowall' -> 'deny').

        [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=761655

        Tests: http/tests/security/XFrameOptions/x-frame-options-multiple-headers-conflict.html
               http/tests/security/XFrameOptions/x-frame-options-multiple-headers-sameorigin-allow.html
               http/tests/security/XFrameOptions/x-frame-options-multiple-headers-sameorigin-deny.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
            Call out to parseXFrameOptionsHeader to get the header's disposition
            and deal with each case in a switch statement for clarity. Add a new
            console warning for the conflict case described above.
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseXFrameOptionsHeader):
        * platform/network/HTTPParsers.h:
            Move X-Frame-Options parsing out into HTTPParsers, as it's getting
            more and more complicated. To do this, the patch defines a new enum
            to pass around the header's disposition.

2013-03-28  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Consolidate use of RenderRegion::isValid
        https://bugs.webkit.org/show_bug.cgi?id=113154

        Reviewed by David Hyatt.

        After https://bugs.webkit.org/show_bug.cgi?id=98752, the list of invalid regions is kept separately than the list of valid regions.
        A valid region has always a valid flow thread attached. We can use isValid() throughout the RenderRegion code
        instead of testing for both isValid() and m_flowThread.

        No new tests since there is no change is functionality, just code refactoring.

        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::addRegionToNamedFlowThread): Added a new function to keep the code
        used in addRegionToThread and checkInvalidRegions.
        (WebCore::RenderNamedFlowThread::addRegionToThread):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::RenderRegion::isFirstRegion):
        (WebCore::RenderRegion::isLastRegion):
        (WebCore::RenderRegion::paintObject):
        (WebCore::RenderRegion::nodeAtPoint):
        (WebCore::RenderRegion::incrementAutoLogicalHeightCount):
        (WebCore::RenderRegion::decrementAutoLogicalHeightCount):
        (WebCore::RenderRegion::layoutBlock):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::attachRegion):
        (WebCore::RenderRegion::renderBoxRegionInfo):
        (WebCore::RenderRegion::setRenderBoxRegionInfo):
        (WebCore::RenderRegion::logicalTopOfFlowThreadContentRect):
        (WebCore::RenderRegion::logicalBottomOfFlowThreadContentRect):
        (WebCore::RenderRegion::computePreferredLogicalWidths):

2013-03-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Timeline. Refresh is slow when user drags the overview window.
        https://bugs.webkit.org/show_bug.cgi?id=113371

        Reviewed by Pavel Feldman.

        The root of problem is the 300ms delay in scheduleRefresh method.
        It was introduced for the case when we add a huge number of records per second.
        The scheduleRefresh was written such a way that refresh happened immediately
        only for the scrolling operations. Actually we would like to see fast
        refresh every time when it is forced by an user action.

        In this patch additional flag newRecordWasAdded was added to the
        _invalidateAndScheduleRefresh. I made it mandatory because the function
        is also used as a callback for an event and it is easy to make a mistake and
        interpret the event as the flag.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._onCategoryCheckboxClicked):
        (WebInspector.TimelinePanel.prototype._durationFilterChanged):
        (WebInspector.TimelinePanel.prototype._repopulateRecords):
        (WebInspector.TimelinePanel.prototype._onTimelineEventRecorded):
        (WebInspector.TimelinePanel.prototype._onRecordsCleared):
        (WebInspector.TimelinePanel.prototype._invalidateAndScheduleRefresh):
        (WebInspector.TimelinePanel.prototype._scheduleRefresh):
        (WebInspector.TimelinePanel.prototype._revealRecord):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype.performFilter):

2013-03-27  Keishi Hattori  <keishi@webkit.org>

        Dragging to edge should always snap to min/max.
        https://bugs.webkit.org/show_bug.cgi?id=113477

        Reviewed by Kent Tamura.

        Dragging to the edge of a slider should always snap to the min/max.

        Test: fast/forms/range/range-slow-drag-to-edge.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):

2013-03-27  Simon Fraser  <simon.fraser@apple.com>

        Add a way to update GraphicsLayerCA visibleRects without having to do a flush
        https://bugs.webkit.org/show_bug.cgi?id=113459

        Reviewed by Tim Horton.
        
        Some platforms need to update TiledBacking visible rects from
        outside of WebKit, for example if they use delegated scrolling.
        They want to avoid forcing layout to be up-to-date when doing this.
        
        Currently, updating the visibleRect happens when the GraphicsLayerCA
        layer are being flushed, but that makes some assumptions about
        layout being up-to-date.
        
        To fix this, add a light-weight pass over the layer tree that
        uses TransformState to compute the visibleRect for each
        layer, and only if the visibleRect would cause a change in the
        tiles in a TiledBacking trigger a layer flush.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::recomputeVisibleRects):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveComputeVisibleRect):
        (WebCore::GraphicsLayerCA::recomputeVisibleRects):
        (WebCore::GraphicsLayerCA::computeVisibleRect):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):

2013-03-27  Philip Rogers  <pdr@google.com>

        Rename toScriptElement -> toScriptElementIfPossible
        https://bugs.webkit.org/show_bug.cgi?id=113473

        Reviewed by Ryosuke Niwa.

        Rename ScriptElement::toScriptElement to ScriptElement::toScriptElementIfPossible to
        differentiate this function from other to*Element functions, and to better describe the
        function's behavior. Other to*Element functions do not return null if the cast fails,
        whereas toScriptElementIfPossible does.

        No new tests as this is just a refactoring.

        * dom/ScriptElement.cpp:
        (WebCore::toScriptElementIfPossible):
        * dom/ScriptElement.h:
        (WebCore):
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::timerFired):

            This is the only unchecked return value but there isn't a security issue here.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::collectOptionInnerText):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attachLater):
        (WebCore::HTMLConstructionSite::insertForeignElement):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::requestPendingScript):
        (WebCore::HTMLScriptRunner::runScript):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::notifyFinished):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement):

2013-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Debug test fix after r147018.

        toElement() asserts. What we want here is isElementNode().

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attachLater):

2013-03-27  Noel Gordon  <noel.gordon@gmail.com>

        Add webp image color profile support
        https://bugs.webkit.org/show_bug.cgi?id=113184

        Reviewed by Eric Seidel.

        Requires libwebp version 0.3.0 (decoder ABI version 0x201). For images
        with an ICC color profile chunk, poll the incremental decoder for the
        current decoded height with the WebPIDecGetRGB() API and color correct
        any newly decoded rows in-situ in the frame buffer.

        Note: the ICC chunk appears before the encoded image frame in the webp
        encoding (RIFF container) format. When the incremental decoder outputs
        decoded pixels, enough encoded data has arrived to read the entire ICC
        color profile data chunk.

        Tests: fast/images/webp-color-profile-lossless.html
               fast/images/webp-color-profile-lossy-alpha.html
               fast/images/webp-color-profile-lossy.html

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::WEBPImageDecoder):
        (WebCore::WEBPImageDecoder::~WEBPImageDecoder): Call clear().
        (WebCore):
        (WebCore::WEBPImageDecoder::clear):
        Added. Helper to clean up the webp decoder and color transform members.
        (WebCore::WEBPImageDecoder::createColorTransform):
        Create m_transform using the supplied profile memory data. Note that
        the |deviceProfile| is not owned, but the |inputProfile| temporary is
        so release it here with qcms_release_profile().
        (WebCore::WEBPImageDecoder::readColorProfile):
        Called once only when the decoder begins to output decoded rows of an
        image containing an ICC chunk, to read the ICC color profile data from
        the encoded data stream, verify it, and use it to create m_transform.
        (WebCore::WEBPImageDecoder::applyColorProfile):
        Since there is no row callback in libwebp, poll for the decoded height
        of the image so far. If new rows are decoded, color correct the pixels
        of those new rows and re-write them back into the frame buffer using
        buffer.setRGBA() to 1) alpha pre-multiply the pixels if needed, and 2)
        shuffle the pixel bytes into the platform's RGBA pixel endian-ness.
        (WebCore::WEBPImageDecoder::decode):
        If the container format indicates the image has an ICC color profile,
        decode the image to RGBA format for subsequent input to the QCMS color
        correction library in applyColorProfile().
        * platform/image-decoders/webp/WEBPImageDecoder.h:
        (WEBPImageDecoder):
        (WebCore::WEBPImageDecoder::colorTransform): m_transform getter.

2013-03-27  Jun Jiang  <jun.a.jiang@intel.com>

        Refactor validation checks for texture uploads
        https://bugs.webkit.org/show_bug.cgi?id=111012

        Reviewed by Kenneth Russell.

        Move the validation checks to the entry level of tex{Sub}Image2D, return early for invalid parameters and avoid duplicated checks.
        Moreover, turn all the validation checks at the bottom level - tex{Sub}Image2DBase into assertions.

        Already covered by current tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::texImage2DBase):
        (WebCore::WebGLRenderingContext::texImage2DImpl):
        (WebCore::WebGLRenderingContext::validateTexFunc): A helper function for tex{Sub}Image2D to check input parameters.
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2DBase):
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::validateHTMLImageElement):
        (WebCore::WebGLRenderingContext::validateHTMLCanvasElement):
        (WebCore::WebGLRenderingContext::validateHTMLVideoElement):
        * html/canvas/WebGLRenderingContext.h:

2013-03-27  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        remove parentsOnly variable in codeGenerator.pm
        https://bugs.webkit.org/show_bug.cgi?id=113457

        Reviewed by Kentaro Hara.

        Remove unused variable parentsOnly.

        No new tests: no change in behaviour.

        * bindings/scripts/CodeGenerator.pm:
        (ForAllParents):
        (AddMethodsConstantsAndAttributesFromParentInterfaces):
        (ParseInterface):
        (InheritsInterface):
        (InheritsExtendedAttribute):
        * bindings/scripts/CodeGeneratorV8.pm:
        (BaseInterfaceName):

2013-03-27  Beth Dakin  <bdakin@apple.com>

        Need WK2 API to give a WebView a header and footer
        https://bugs.webkit.org/show_bug.cgi?id=113352
        -and corresponding-
        <rdar://problem/13383835>

        Reviewed by Simon Fraser.

        This API will require RenderLayerCompositor to keep layers for the header and 
        footer when the exist. It also requires the scrolling machinery to know that the 
        size of the scrollable area will differ from the contentsSize when there is a 
        header or footer.

        setWantsLayerForHeader() and setWantsLayerForFooter() return GraphicsLayers to 
        WK2. setHeaderHeight() and setFooterHeight() set the header and footer heights
        respectively.
        * WebCore.exp.in:
        * page/FrameView.h:
        (FrameView):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::setWantsLayerForHeader):
        (WebCore::FrameView::setWantsLayerForFooter):
        (WebCore::FrameView::setHeaderHeight):
        (WebCore::FrameView::setFooterHeight):

        Should use totalContentsSize() instead of contentsSize().
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::isScrollable):
        * page/SpatialNavigation.cpp:
        (WebCore::canScrollInDirection):

        This should also use totalContentsSize() instead of contentsSize(), and while 
        we're at it, re-name the variable and function names in the scrolling tree code 
        from contentsSize to totalContentsSize.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::totalContentsSize):
        (ScrollingStateScrollingNode):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::totalContentsSize):
        (ScrollingTreeScrollingNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollParameters):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinatorMac::setScrollParametersForNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::maximumScrollPosition):

        Use totalContentsSize() instead of contentsSize().
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::maximumScrollPosition):
        (WebCore::ScrollView::setScrollOffset):
        (WebCore::ScrollView::overhangAmount):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::calculateOverhangAreasForPainting):

        scrollOffset() represents the offset within the totalContentsSize, but that is 
        not what we need here. So subtract out the headerHeight() for the appropriate 
        value.
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):

        Use totalContentsSize() instead of contentsSize().
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::maximumScrollPosition):
        (WebCore):
        (WebCore::ScrollableArea::totalContentsSize):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::headerHeight):
        (WebCore::ScrollableArea::footerHeight):
        (ScrollableArea):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary):
        (WebCore::ScrollAnimatorMac::pinnedInDirection):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::ensuredView):

        The rootContentLayer needs to be offset by the headerHeight().
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):

        New member variables m_layerForHeader and m_layerForFooter. This code properly 
        creates and manages them.
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        (WebCore::RenderLayerCompositor::reportMemoryUsage):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

        Test infrastructure. 
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setHeaderHeight):
        (WebCore):
        (WebCore::Internals::setFooterHeight):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-03-27  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        javascriptcore bindings do not check exception after calling valueToStringWithNullCheck
        https://bugs.webkit.org/show_bug.cgi?id=113219

        Reviewed by Kentaro Hara.

        When converting JSValue to native value in attribute setter, store the
        native value in a temporary variable. After this variable assignment,
        always check if an exception has been raised.

        Update binding tests.

        Test: fast/dom/exception-in-binding.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GetNativeType):
        (JSValueToNative):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjConstructorStaticStringAttr):
        (WebCore::setJSTestObjEnumAttr):
        (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::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjAnyAttribute):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjStrictFloat):
        (WebCore::setJSTestObjId):
        (WebCore::setJSTestObjNullableLongSettableAttribute):
        (WebCore::setJSTestObjNullableStringValue):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):

2013-03-27  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        cache parsed interfaces in CodeGenerator.pm
        https://bugs.webkit.org/show_bug.cgi?id=113446

        Reviewed by Kentaro Hara.

        When generating binding for an interface, informations about parent
        interfaces are sometimes needed several times. This patch caches
        those the parsed interface. When generating all WebCore bindings, this
        results in a speedup of about 40% for JavaScriptCore and about 80% for
        V8.

        No new tests: no change in behaviour.

        * bindings/scripts/CodeGenerator.pm:
        (ParseInterface):

2013-03-27  KyungTae Kim <ktf.kim@samsung.com> and Yongjun Zhang  <yongjun_zhang@apple.com>

        Add a settings to disallow initializing background-size if background shorthand doesn't include it.
        https://bugs.webkit.org/show_bug.cgi?id=113363

        Reviewed by David Kilzer.

        This is based on KyungTae Kim's patch in https://bugs.webkit.org/show_bug.cgi?id=97761.  Many legacy sites set
        background-size first and then set background for setting background-image.  For backward-compatibility
        in some WebKit based clients, if 'background' shorthand have no 'background-size' attribute, we could add
        a settings to let the css parser not initialize 'background-size'.

        Test: fast/backgrounds/background-shorthand-after-set-backgroundSize.html

        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext): initialize useLegacyBackgroundSizeShorthandBehavior.
        (WebCore::operator==):
        (WebCore::CSSParser::useLegacyBackgroundSizeShorthandBehavior): add a method to return if we want background-size
            to be initialized by background shorthand.
        (WebCore):
        (WebCore::CSSParser::parseFillShorthand): don't initialize background-size in background shorthand if we have
            useLegacyBackgroundSizeShorthandBehavior set to true.
        * css/CSSParser.h:
        (CSSParser):
        * css/CSSParserMode.h: add member useLegacyBackgroundSizeShorthandBehavior to CSSParserContext.
        (CSSParserContext):
        * page/Settings.in: initialize useLegacyBackgroundSizeShorthandBehavior to false.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): add the new settings useLegacyBackgroundSizeShorthandBehavior to Backup.
        (WebCore::InternalSettings::Backup::restoreTo): restore useLegacyBackgroundSizeShorthandBehavior from Backup.
        (WebCore::InternalSettings::setUseLegacyBackgroundSizeShorthandBehavior):
        (WebCore):
        * testing/InternalSettings.h:
        (Backup):
        (InternalSettings):
        * testing/InternalSettings.idl: add a JS testing API setUseLegacyBackgroundSizeShorthandBehavior to turn on/off
            the new settings.

2013-03-27  Florin Malita  <fmalita@chromium.org>

        Remove unused RenderLayer::renderBox{X,Y} methods
        https://bugs.webkit.org/show_bug.cgi?id=113408

        Reviewed by Simon Fraser.

        Minor cleanup - renderBoxX() and renderBox() are no longer used.

        No new tests: no functional changes.

        * rendering/RenderLayer.h:

2013-03-27  PhistucK  <phistuck@chromium.org>

        Web Inspector: Plumb and expose cookie clearing options throughout the Resources Cookies tree and views
        https://bugs.webkit.org/show_bug.cgi?id=87140

        Reviewed by Vsevolod Vlasov.

        Added cookie clearing buttons and context menu options
        throughout the tree and views.
        Drive by -
        - Made sure the delete button is only visible
        when a cookie is selected.
        - Fixed a wrong JSDoc comment.

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.statusBarItems):
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        (WebInspector.CookieItemsView.prototype.clear):
        Added. Clears the entire cookie view.
        (WebInspector.CookieItemsView.prototype._clearButtonClicked):
        Added. Ditto (when clicking on the button).
        (WebInspector.CookieItemsView.prototype._showDeleteButton):
        Added. Shows the delete button when selecting a cookie row.
        * inspector/CookiesTable.js:
        (WebInspector.CookiesTable):
        (WebInspector.CookiesTable.prototype._clearAndRefresh):
        Added. Clears the cookies of the current table and updates it.
        (WebInspector.CookiesTable.prototype._handleContextMenuEvent):
        Added. Manages the context menu within the table.
        (WebInspector.CookiesTable.prototype.clear):
        Added. Clears the cookies of the current table.
        (WebInspector.CookiesTable.prototype.setCookies):
         Fixed a wrong JSDoc comment structure.
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.clearCookies):
        Added. Clears the cookies of the given domain view.
        (WebInspector.CookieTreeElement.prototype.onattach):
        Added. Adds a contextmenu handler.
        (WebInspector.CookieTreeElement.prototype._handleContextMenuEvent):
        Added. Manages the context menu within cookie tree.
        (WebInspector.CookieTreeElement.prototype._clearCookies):
        Added. Clears the cookies of the view of the tree item.
        * inspector/front-end/treeoutline.js:
        (TreeOutline): Fixed a wrong JSDoc comment.

        * English.lproj/localizedStrings.js:
        Added strings for the context menu options.

2013-03-27  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [DTE] implement "tokenAtTextPosition" method
        https://bugs.webkit.org/show_bug.cgi?id=113390

        Reviewed by Pavel Feldman.

        Test: inspector/editor/text-editor-token-at-position.html

        - Add TextEditor.tokenAtTextPosition method
        - Implement tokenAtTextPosition method in DefaultTextEditor

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.tokenAtTextPosition):
        (WebInspector.TextEditorMainPanel.prototype.compare):
        (WebInspector.TextEditorMainPanel.prototype.tokenAtTextPosition):
        (WebInspector.TextEditorMainPanel.prototype._tokenAtUnhighlightedLine):
        (WebInspector.TextEditorMainPanel.prototype.set mimeType):
        (WebInspector.TextEditorMainPanel.prototype.get mimeType):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.tokenAtTextPosition):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.get mimeType):
        (WebInspector.TextEditorHighlighter.prototype.set mimeType):

2013-03-27  Charles Wei  <charles.wei@torchmobile.com.cn>

        Remove build warning for unused function parameters in indexeddb.
        https://bugs.webkit.org/show_bug.cgi?id=113043

        Reviewed by Tony Chang.

        No new tests, just remove build warning.

        * Modules/indexeddb/IDBCallbacks.h:
        (WebCore::IDBCallbacks::onBlocked):
        (WebCore::IDBCallbacks::onUpgradeNeeded):
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::stringToDirection):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::prefetchReset):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setIndexesReady):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (IDBLevelDBCoding):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore):
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::stringToMode):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):

2013-03-27  Sergey Ryazanov  <serya@chromium.org>

        REGRESSION (r146588): Cannot correctly display Chinese SNS Renren
        https://bugs.webkit.org/show_bug.cgi?id=113142

        Reviewed by Pavel Feldman.

        Changed CSS grammar to be equivalent to pre-r146588.
        CSS error reporting disabled to prevent message overflow.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::isLoggingErrors):

2013-03-27  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: enhance Popover.js to rely on hover element coordinates
        https://bugs.webkit.org/show_bug.cgi?id=113340

        Reviewed by Pavel Feldman.

        No new tests: no change in behaviour.

        Introduce a coordinates-based method that checks if mouse is inside hover
        element and use it in PopoverHelper instead of DOM hierarchy.

        * inspector/front-end/Popover.js:
        (WebInspector.PopoverHelper.prototype._eventInHoverElement): Added.
        (WebInspector.PopoverHelper.prototype._mouseDown):
        (WebInspector.PopoverHelper.prototype._mouseMove):
        (WebInspector.PopoverHelper.prototype._mouseOut):

2013-03-27  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] fix webinspector-css theme for CodeMirror
        https://bugs.webkit.org/show_bug.cgi?id=113399

        Reviewed by Alexander Pavlov.

        Add style rule to highlight css properties for CodeMirror
        webinspector-css theme.

        No new tests: no change in behaviour.

        * inspector/front-end/cm/cmdevtools.css:
        (.cm-s-web-inspector-css span.cm-property):

2013-03-27  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [DTE] paint overlay highlight for unhighlighted lines
        https://bugs.webkit.org/show_bug.cgi?id=113344

        Reviewed by Pavel Feldman.

        No new tests.

        Remove fast-return condition from paintLine method that checked for
        highlight existence.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._paintLine):

2013-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Shift clicking on an element with -webkit-user-select: all doesn't extend selection
        https://bugs.webkit.org/show_bug.cgi?id=113270

        Reviewed by Enrica Casucci.

        The bug was caused by updateSelectionForMouseDownDispatchingSelectStart always replacing selection whenever
        the target node was inside an element with -webkit-suer-select even when we were attemping to extend selection
        in handleMousePressEventSingleClick.

        Fixed the bug by extracting this logic as a separate function (expandSelectionToRespectUserSelectAll) and deploying
        it in handleMousePressEventSingleClick to extend selection as needed.

        Test: editing/selection/user-select-all-with-shift.html

        * page/EventHandler.cpp:
        (WebCore::expandSelectionToRespectUserSelectAll): Extracted from updateSelectionForMouseDownDispatchingSelectStart.
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart):
        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick): Adjust "pos" as needed when extending selection.
        Also use shouldConsiderSelectionAsDirectional() instead of manually peeking editingBehaviorType while we're at it.

2013-03-27  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r143102): iframe with percentage height within table with anonymous cell fails.
        https://bugs.webkit.org/show_bug.cgi?id=113077

        Reviewed by Antti Koivisto.
        
        http://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level
        "Anonymous block boxes are ignored when resolving percentage values that would refer to it:
        the closest non-anonymous ancestor box is used instead."
        When figuring out whether auto height needs to be applied on the current box, ignore anonymous
        ancestors until the first non-anonymous containing block is found. This matches both
        Firefox and Opera behaviour.
        
        Test: fast/replaced/iframe-with-percentage-height-within-table-with-anonymous-table-cell.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasAutoHeightOrContainingBlockWithAutoHeight): Switch from
        isAnonymousBlock() to isAnonymous() to make sure all anonymous boxes are ignored.
        Remove isTableCell() check which is a noop as table cell isn't an anonymous block.
        
2013-03-27  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Add WOFF support when using zlib
        https://bugs.webkit.org/show_bug.cgi?id=112805

        Reviewed by Allan Sandfeld Jensen.

        Covered by existing test:
        fast/css/font-face-woff.html

        * Target.pri: Conditional inclusion of WOFFFileFormat
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
        (WebCore::createFontCustomPlatformData): Try to unpack WOFF data, otherwise spit out a warning and bail.
        (WebCore::FontCustomPlatformData::supportsFormat): accept WOFF webfonts if USE(ZLIB).

2013-03-27  Robert Hogan  <robert@webkit.org>

        Growing a position:absolute element in a position:relative one in a table does not update scrollHeight
        https://bugs.webkit.org/show_bug.cgi?id=111977

        Reviewed by David Hyatt.

        During simplified layout tables still need to know about overflow from positioned objects in any of
        their cells.

        Test: fast/table/cell-overflow-simplified-layout.html

        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::simplifiedNormalFlowLayout):
        (WebCore):
        * rendering/RenderTable.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        (WebCore):
        (WebCore::RenderTableSection::computeOverflowFromCells):
        * rendering/RenderTableSection.h:
        (RenderTableSection):

2013-03-22  Geoffrey Garen  <ggaren@apple.com>

        Honor the setting for whether JavaScript markup is enabled
        https://bugs.webkit.org/show_bug.cgi?id=113122

        Reviewed by Ryosuke Niwa.

        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser): Applied the
        setting here, so all document parsing would be covered. This is similar
        to what we do for plug-in stripping.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertForeignElement): Fixed a bug where
        we would insert an SVG script element into the document even in script
        markup disabled mode.

        (This bug has existed for copy/paste for a long time, but other bugs and
        quirks in SVG copy/paste papered over it. It's a serious issue now
        that non-paste clients will rely on this mode.)

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent): Fixed the same
        bug -- this time in the part of the parser that executes scripts as they
        parse.

        I adopted the toScriptElement() convention for testing for a script
        element to match the XML parser.

2013-03-27  Dean Jackson  <dino@apple.com>

        Chromium Mac fails to build after r146995 because the new NSFont category
        may conflict with the system. Add the WebCoreTheme category to the whitelist.

        Unreviewed.

        * WebCore.gyp/WebCore.gyp:

2013-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Selection code spends a lot of time in InlineTextBox::localSelectionRect
        https://bugs.webkit.org/show_bug.cgi?id=113364

        Reviewed by Enrica Casucci.

        Avoid computing the font width when we're selecting the entire line box.

        This appears to be 25-26% improvement on Interactive/SelectAll:Time.

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

2013-03-26  Timothy Hatcher  <timothy@apple.com>

        Add support for dock-to-right of the Web Inspector in the Mac port.

        Unfortunately this requires Safari changes, so it is disabled in the nightly builds.

        https://webkit.org/b/113341
        rdar://problem/10368152

        Reviewed by Joseph Pecoraro.

        * WebCore.exp.in:
        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore):
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        (WebCore::InspectorFrontendClientLocal::requestSetDockSide):
        (WebCore::InspectorFrontendClientLocal::canAttachWindow):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowWidth):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        (WebCore::InspectorFrontendClientLocal::constrainedAttachedWindowWidth):
        * inspector/InspectorFrontendClientLocal.h:
        (InspectorFrontendClientLocal):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setAttachedWindowWidth):
        (WebCore):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.setAttachedWindowWidth):
        * inspector/front-end/externs.js:
        (InspectorFrontendHostAPI.prototype.setAttachedWindowWidth):
        * testing/Internals.cpp:

2013-03-27  Eric Carlson  <eric.carlson@apple.com>

        [Mac] webkitClosedCaptionsVisible doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=113417

        Reviewed by Jer Noble.

        Test: media/track/track-in-band-legacy-api.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Delete m_disableCaptions, it is no longer used.
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Pass this to textTrackSelectionScore.
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible):  Delete m_disableCaptions, it is no longer used.
        * html/HTMLMediaElement.h: Ditto.

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::textTrackSelectionScore): Add an HTMLMediaElement parameter.
        * page/CaptionUserPreferences.h:

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::textTrackSelectionScore): Return a score if the media element
            is showing captions, even if the preference says captions are disabled.

2013-03-27  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Text track menu items sometimes labeled incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=113406

        Reviewed by Jer Noble.

        media/video-controls-captions-trackmenu-localized.html was updated to test this.

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::trackDisplayName): Use the 'label' attribute for the menu text when necessary.

2013-03-27  Sergio Villar Senin  <svillar@igalia.com>

        Inserting a blank (" ") at the end of a line does not insert anything in Overtype mode
        https://bugs.webkit.org/show_bug.cgi?id=113413

        Reviewed by Ryosuke Niwa.

        Perform a "normal" insert instead of a replace when there is
        nothing to replace (like at the end of a line) as this case is not
        supported by the replacing code path. This will allow us to
        properly rebalance whitespaces in those cases.

        Updated the editing/execCommand/overtype.html test to check also
        this use case.

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::setEndingSelectionWithoutValidation):
        (WebCore::InsertTextCommand::performTrivialReplace):
        (WebCore::InsertTextCommand::performOverwrite):
        (WebCore::InsertTextCommand::doApply): use the recently added
        setEndingSelectionWithoutValidation() to avoid code duplication.
        * editing/InsertTextCommand.h:
        (InsertTextCommand):

2013-03-27  Dean Jackson  <dino@apple.com>

        [Mac] Use fontName rather than familyName for internal fonts
        https://bugs.webkit.org/show_bug.cgi?id=113392
        <rdar://problem/13474743>

        Reviewed by Enrica Casucci.

        Some internal fonts on OS X have a family name that
        isn't listed in availableFontFamilies. In this case
        we should use the font name rather than the family
        name when looking for a match.

        * platform/mac/ThemeMac.h: NSFont category to provide a web-friendly family name.
        * platform/mac/ThemeMac.mm:
        (-[NSFont webCoreFamilyName]): Returns the font name for internal fonts, otherwise the family name.
        (WebCore::ThemeMac::controlFont):
        * rendering/RenderThemeMacShared.mm: Use the webCoreFamilyName.
        (WebCore::RenderThemeMacShared::systemFont): Ditto.
        (WebCore::RenderThemeMacShared::setFontFromControlSize): Ditto.

2013-03-26  Jer Noble  <jer.noble@apple.com>

        Mac: Media Controls always hide time display elements
        https://bugs.webkit.org/show_bug.cgi?id=113355

        Reviewed by Eric Carlson.

        No new tests; rebaselined existing tests against correct behavior.

        A prior commit set the "min-width:0" property on the time display elements, which, combined
        with the "-webkit-flex-box:0 0" setting, caused the flex-box container to collapse the width
        of the elements to zero. To achieve the desired effect of hiding the time display elements,
        first set the elements' min-width to the desired width, as the new flex-box spec treats the
        default value of "min-width:auto" as the intrinsic width, and will collapse the text display
        elements to the intrinsic width of its contained text node.

        The above allows the timeline container to collapse beyond the sum of its childrens'
        intrinsic width. Create a custom renderer that detects when this happens, and hide the time
        display controls.

        * css/mediaControls.css:
        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
            Set the "min-width:" property to equal the "width:" property.
        (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display):
            Ditto.
        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display):
            Chromium assumes the time display controls are flex-boxes, so make that explicit.
        * html/shadow/MediaControlElementTypes.cpp: Removed MediaControlTimeDisplayElement::createRenderer().
        * html/shadow/MediaControlElementTypes.h:
        (MediaControlTimeDisplayElement): Ditto.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineContainerElement::setTimeDisplaysHidden): Added, walks through the 
            container's children and shows or hides time display elements.
        (WebCore::MediaControlTimelineContainerElement::createRenderer): Added, creates a RenderMediaControlTimelineContainer.
        (WebCore::getMediaControlTimeRemainingDisplayElementShadowPseudoId): Added, allow setTimeDisplaysHidden to
            query against children's shadowPseudoId().
        (WebCore::MediaControlTimeRemainingDisplayElement::shadowPseudoId): Moved contents to getMediaControlTimeRemainingDisplayElementShadowPseudoId.
        (WebCore::getMediaControlCurrentTimeDisplayElementShadowPseudoId): Added, allow setTimeDisplaysHidden to
            query against children's shadowPseudoId().
        (WebCore::MediaControlCurrentTimeDisplayElement::shadowPseudoId): Moved contents to getMediaControlCurrentTimeDisplayElementShadowPseudoId.
        * html/shadow/MediaControlElements.h:
        (MediaControlTimelineContainerElement):
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaControlTimelineContainer::RenderMediaControlTimelineContainer): Added, simple constructor.
        (WebCore::RenderMediaControlTimelineContainer::layout): Detect when the controller's width is greater than
            a certain value, and show or hide the time display elements in response.
        * rendering/RenderMediaControlElements.h:
        (RenderMediaControlTimelineContainer):

2013-03-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: CPU profiler. Swap FlameChart with Data Grid.
        https://bugs.webkit.org/show_bug.cgi?id=113395

        Reviewed by Pavel Feldman.

        Looks like FlameChart is more powerful and flexible instrument
        than plain old ProfileTree in DataGrid. The same action like
        'look for the most expensive function in a frame' could be easily
        done with FlameChart and need number of clicks in DataGrid.
        So in an offline discussion we decided to place FlameChart on top of DataGrid.

        * inspector/front-end/CPUProfileView.js:

2013-03-27  Chris Fleizach  <cfleizach@apple.com>

        Regression in tests due to https://bugs.webkit.org/show_bug.cgi?id=113339
        https://bugs.webkit.org/show_bug.cgi?id=113361

        Fix the red bots. No review.

        Ensure only pop-up buttons get the AXRequired attribute instead of all buttons.        

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):

2013-03-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Breakpoint manager should restore breakpoints when uiSourceCode is added.
        https://bugs.webkit.org/show_bug.cgi?id=113381

        Reviewed by Pavel Feldman.

        Breakpoint manager now restores breakpoints on UISourceCodeAdded event.
        Breakpoint manager now only resets breakpoints in debugger when source mapping is changed to/from non identity one.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._uiSourceCodeAdded):
        (WebInspector.BreakpointManager.prototype._resetBreakpoints):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeMappingChanged):
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.get isIdentity):
        * inspector/front-end/DefaultScriptMapping.js:
        (WebInspector.DefaultScriptMapping.prototype.isIdentity):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.isIdentity):
        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping.prototype.isIdentity):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.SnippetScriptMapping.prototype.isIdentity):
        * inspector/front-end/SourceMapping.js:
        (WebInspector.SourceMapping.prototype.isIdentity):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping.prototype.isIdentity):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.setSourceMapping):

2013-03-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: update Timeline.TimelineEvent definition to include DOM counters and native memory stats
        https://bugs.webkit.org/show_bug.cgi?id=113376

        Reviewed by Vsevolod Vlasov.

        Fixed assertion failure in debug mode after r146975.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):

2013-03-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: FlameChart. Provide 15px padding left for the chart so developers will see the first divider with '0' title.
        https://bugs.webkit.org/show_bug.cgi?id=113404

        Reviewed by Pavel Feldman.

        15px paddingLeft was added to the code for the chart.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.Calculator.prototype._updateBoundaries):
        (WebInspector.FlameChart.Calculator.prototype.computePosition):
        (WebInspector.FlameChart.prototype.draw):

2013-03-27  Kent Tamura  <tkent@chromium.org>

        Rename HTMLFormControlElement::readOnly to isReadOnly
        https://bugs.webkit.org/show_bug.cgi?id=113297

        Reviewed by Alexey Proskuryakov.

        HTMLFormControlElement::readOnly is not an implementation of
        'readOnly' IDL attribute. It's confusing and we don't need to
        violate our naming convention.

        No new tests. Just a refactoring.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isReadOnly):
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isEditControlOwnerReadOnly):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::parseAttribute):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isReadOnly):
        (WebCore::HTMLFormControlElement::isDisabledOrReadOnly):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::matchesReadOnlyPseudoClass):
        (WebCore::HTMLInputElement::matchesReadWritePseudoClass):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::matchesReadOnlyPseudoClass):
        (WebCore::HTMLTextAreaElement::matchesReadWritePseudoClass):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::SliderThumbElement::willRespondToMouseMoveEvents):
        (WebCore::SliderThumbElement::willRespondToMouseClickEvents):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::willRespondToMouseClickEvents):
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult):
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::updateImage):
        * rendering/RenderTextControl.cpp:
        (WebCore::updateUserModifyProperty):
        * rendering/RenderThemeMacShared.mm:
        (WebCore::RenderThemeMacShared::paintSearchFieldCancelButton):

2013-03-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: update Timeline.TimelineEvent definition to include DOM counters and native memory stats
        https://bugs.webkit.org/show_bug.cgi?id=113376

        Reviewed by Vsevolod Vlasov.

        Added missing fields to Timeline.TimelineEvent type definition in Inspector.json

        * inspector/Inspector.json:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setDOMCounters):
        Switched InspectorTimelineAgent to the new typed event builders.
        (WebCore::InspectorTimelineAgent::setNativeHeapStatistics):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):

2013-03-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Follow-up to r146898: test that uiSourceCodes are not leaking in breakpoint manager.
        https://bugs.webkit.org/show_bug.cgi?id=113368

        Reviewed by Pavel Feldman.

        Added a missed line and a test.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._projectWillReset):

2013-03-27  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] CodeMirrorTextEditor.highlightRange has bugs
        https://bugs.webkit.org/show_bug.cgi?id=113348

        Reviewed by Vsevolod Vlasov.

        No new tests.

        - Append additional "<class>-start" class to the first highlighted span
        and "<class>-end" class to the last highlighted span to provide a way
        to set up a css classes with borders.
        - Increment end column of the markup range to simulate inclusive range.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor.prototype.highlightRange):

2013-03-27  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: Add isClean/markClean method pair to textEditor.js
        https://bugs.webkit.org/show_bug.cgi?id=112815

        Reviewed by Vsevolod Vlasov.

        No new tests: no change in behaviour.

        - Add TextEditor.isClean and TextEditor.markClean methods
        - Implement these methods in DefaultTextEditor
        - Implement these methods in CodeMirrorTextEditor

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor.prototype.isClean):
        (WebInspector.CodeMirrorTextEditor.prototype.markClean):
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.isClean):
        (WebInspector.DefaultTextEditor.prototype.markClean):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.isClean):
        (WebInspector.TextEditor.prototype.markClean):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.endsWithBracketRegex.):

2013-03-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Web Inspector. rename method Timeline.Calculator.grandMinimumBoundary to Timeline.Calculator.zeroTime

        No changes in behaviour.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart.Calculator.prototype.zeroTime):
        (WebInspector.FlameChart.OverviewCalculator.prototype.zeroTime):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkBaseCalculator.prototype.zeroTime):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        (WebInspector.TimelineGrid.Calculator.prototype.zeroTime):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewCalculator.prototype.zeroTime):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelineCalculator.prototype.zeroTime):

2013-03-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Timeline. Scroll dividers with the underlying events.
        https://bugs.webkit.org/show_bug.cgi?id=113315

        Reviewed by Pavel Feldman.

        Now when TimelineGrid is able to draw dividers with any offset
        we could cut away paddingLeft member of Timeline.Calculator
        and clear the code of TimelineGrid.

        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelineCalculator.prototype.computePosition):
        (WebInspector.TimelineCalculator.prototype.setDisplayWindow):
        (WebInspector.TimelineCalculator.prototype.grandMinimumBoundary):
        * inspector/front-end/inspectorCommon.css:
        (.resources-dividers-label-bar):

2013-03-27  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [CoordGfx] Support to share GraphicsSurface flags with client.
        https://bugs.webkit.org/show_bug.cgi?id=112982

        Reviewed by Noam Rosenthal.

        Covered by existing WebGL tests.

        This patch adds support to pass GraphicsSurface flags during it's client creation.
        This would be helpful to determine cases when blending can be disabled on client
        side i.e When AlphaSupport is disabled during Graphics Surface creation.
        With GLX, we rely on Window to provide us with necessary information on client side.
        This might not be the case on other platforms or when not using Window on X.
        This patch doesn't change original behaviour of creating GraphicsSurface client
        with default flags GraphicsSurface::SupportsTextureTarget and GraphicsSurface::SupportsSharing.

        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (WebCore::TextureMapperPlatformLayer::graphicsSurfaceFlags):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createCanvasIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::createCanvasIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (CoordinatedGraphicsLayerState):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::graphicsSurfaceFlags):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/surfaces/efl/GraphicsSurfaceCommon.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::initializeClient):

2013-03-26  Takashi Sakamoto  <tasak@google.com>

        [shadow] styleForText should consider the case where parent node has no style
        https://bugs.webkit.org/show_bug.cgi?id=113275

        If a text node is distributed, its parent node for rendering and
        styling might have no style. In the case, styleForText should return
        default style.

        Reviewed by Hajime Morrita.

        Test: fast/dom/shadow/text-node-distributed-crash.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForText):
        Check whether a parent node has any style or not. If not, return
        default style. This is the same behavior as styleForElement.

2013-03-26  Takeshi Yoshino  <tyoshino@chromium.org>

        Make SocketStreamHandle (Chromium port) fully use IPC window in send()
        https://bugs.webkit.org/show_bug.cgi?id=113304

        Reviewed by Kent Tamura.

        socket_stream of Chromium buffers send data up to 32KiB (exact) bytes.

        However, SocketStreamHandleInternal::send() method now keeps in-flight
        send data not greater than m_maxPendingSendAllowed - 1 that is
        32KiB - 1. This means that SocketStreamHandleInternal consumes the
        buffered data in SocketStreamHandleBase by 32KiB - 1. It makes memory
        copy operations unaligned unnecessarily. It should just use the
        allowed size fully.

        * platform/network/chromium/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandleInternal::send):
        (WebCore):

2013-03-26  Hayato Ito  <hayato@chromium.org>

        Allow ShadowContents in HitTests by default.
        https://bugs.webkit.org/show_bug.cgi?id=113171

        Reviewed by Dimitri Glazkov.

        HitTestRequest is widely used in WebCore, but AllowShadowContents
        flag is not turned on by default.  In most places, we can set the
        flag on.

        This change makes HitTests allow shadow contents by default.

        To track all existing HitTests which do not allow shadow contents,
        and discourage such a HitTest in the future, I've introduced
        disallowShadowContenet flag so that callers must turn on this flag
        explicitly if they want to disallow shadow contents in their HitTests.

        This change should be refactoring and should not include any
        behavior changes.  After this change, we'll investigate each place
        where disallowShadowContents is used step by step and get rid of
        the flag if it is okay to remove.

        No new tests, no behavior change.

        * dom/Document.h:
        (Document):
        * dom/TreeScope.cpp:
        (WebCore::nodeFromPoint):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::contains):
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::isInsideScrollbar):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureLongPress):
        (WebCore::EventHandler::handleGestureScrollBegin):
        (WebCore::EventHandler::bestClickableNodeForTouchPoint):
        (WebCore::EventHandler::bestContextMenuNodeForTouchPoint):
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::hoverTimerFired):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::handleTouchEvent):
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):
        * page/EventHandler.h:
        (EventHandler):
        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded):
        * page/Frame.cpp:
        (WebCore::Frame::visiblePositionForPoint):
        * page/TouchDisambiguation.cpp:
        (WebCore::findGoodTouchTargets):
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::disallowsShadowContent):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::hitTestFlowThreadPortionInRegion):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):

2013-03-26  Tim Horton  <timothy_horton@apple.com>

        [ca] Tell CA to clean up unused resources if a given WebProcess won't be drawing
        https://bugs.webkit.org/show_bug.cgi?id=107539
        <rdar://problem/13032692>

        Reviewed by Simon Fraser.

        Update WebCoreSystemInterface.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-03-26  Antti Koivisto  <antti@apple.com>

        Test if non-immediate descendants obscure background
        https://bugs.webkit.org/show_bug.cgi?id=113137

        Reviewed by Simon Fraser.

        The current obscuration test only covers immediate children. We can find more cases by looking deeper into descendants.
        
        The patch makes the test sufficiently smart to stop a heavy fully obscured gif animation on micrsoft.com.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::animationAdvanced):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        
            Invalidate parents to max test depth.

        (WebCore::RenderBox::backgroundPaintedExtent):
        
            Background painting is pixel snapped.

        (WebCore::isCandidateForOpaquenessTest):
        (WebCore::RenderBox::foregroundIsKnownToBeOpaqueInRect):
        
            Separate foreground testing and make it recursive.
            Add fast bailout for common static positioned case.
            Remove maximum child count, the fast bailouts should prevent long tests.
            Add maximum depth so we know how deep we need to invalidate in styleDidChange.

        (WebCore::RenderBox::computeBackgroundIsKnownToBeObscured):
        (WebCore):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::foregroundIsKnownToBeOpaqueInRect):
        (WebCore):
        (WebCore::RenderImage::computeBackgroundIsKnownToBeObscured):
        
        * rendering/RenderImage.h:
        (RenderImage):

2013-03-26  Benjamin Poulain  <bpoulain@apple.com>

        Regression (r145601): out-of-bounds read in line breaking / new width cache
        https://bugs.webkit.org/show_bug.cgi?id=113347

        Reviewed by Geoffrey Garen.

        The values zero and 0xffff have special values with the default HashTraits. Those values
        are also valid values for UChar.

        To avoid any table inconsitency, switch from UChar to uint32_t as the key type for
        the WidthCache's single char map. The traits is also changed to allow zero as a normal
        value.

        This makes no space or time change over the previous code because:
        -The struct KeyValuePair was already 64bits due to the ABI alignment restrictions on floats.
        -The two hashes take the same number of instructions.

        * platform/graphics/WidthCache.h:
        (WidthCache):

2013-03-26  Kent Tamura  <tkent@chromium.org>

        Make HTMLProgressElement::isDeterminate private
        https://bugs.webkit.org/show_bug.cgi?id=113299

        Reviewed by Kentaro Hara.

        The only callsite of isDeterminate outside of HTMLProgressElement
        is in StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes,
        and we can replace it with Element::shouldAppearIndeterminate.

        No new tests. Just a refactoring.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):
        Use Element::shouldAppearIndeterminate.
        * html/HTMLProgressElement.h:
        (HTMLProgressElement): Make isDeterminate private.

2013-03-26  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Histogram cause of LevelDB write errors
        https://bugs.webkit.org/show_bug.cgi?id=113350

        Reviewed by Tony Chang.

        Add histogram for source of LevelDB errors on Write in addition to
        Open.

        No new tests - no good way to test histogram code.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::histogramLevelDBError):
        (WebCore):
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::write):

2013-03-26  Chris Fleizach  <cfleizach@apple.com>

        WebKit does not expose @required or @aria-required as AXRequired on select elements
        https://bugs.webkit.org/show_bug.cgi?id=113339

        Reviewed by Tim Horton.

        Make sure button types can return the AXRequired attribute.

        Tests: platform/mac/accessibility/aria-required-popup-button.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):

2013-03-26  Dean Jackson  <dino@apple.com>

        When a primary plugin is restarted, also start similar plugins
        https://bugs.webkit.org/show_bug.cgi?id=113265

        Reviewed by Tim Horton.

        If we detect a primary plugin that is snapshotted, we immediately restart it.
        When this happens, we should also restart any other plugins that
        match the same origin and type. This allows sites with a lot of
        (geometrically) nearby plugins to behave as if they are a single big plugin.

        Tests: plugins/snapshotting/autoplay-similar-to-dominant-after-delay.html
               plugins/snapshotting/autoplay-similar-to-dominant.html

        * WebCore.exp.in: Export mimeTypeFromURL.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::addPlugInsFromNodeListMatchingPlugInOrigin): Use loadedMimeType helper.
        (WebCore::HTMLPlugInImageElement::restartSimilarPlugIns): New method, which copied the
            existing code from userDidClickSnapshot.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Move the similar plugin detection
            out into another function and call it.
        (WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn): Call restartSimilarPlugIns.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Use loadedMimeType helper.
        * html/HTMLPlugInImageElement.h: Declaration of restartSimilarPlugIns.
        (WebCore::HTMLPlugInImageElement::loadedMimeType): New helper method since this
            code was being often duplicated.

2013-03-26  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Scroll offset being applied to plugins during print operations.
        https://bugs.webkit.org/show_bug.cgi?id=39889

        Reviewed by Anders Carlsson.

        This must be tested manually. See the issue for details.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        Revise the Windows implementation of the PluginView class
        paintWindowedPluginIntoContext to use the containing window
        position when computing the plugin's position for printing.

2013-03-26  Xianzhu Wang  <wangxianzhu@chromium.org>

        Non-paintsContent fixed position layer should not cause slow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=113238

        Reviewed by James Robinson.

        Added NotCompositedForNoVisibleContent in ViewportConstrainedNotCompositedReason and set it in RLC.

        Test: compositing/layer-creation/fixed-position-no-content-scroll-reason.html

        * rendering/RenderLayer.h: Add NotCompositedForNoVisibleContent.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition): Set NotCompositedForNoVisibleContent reason when the fixed position layer has no visible content.

2013-03-26  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Exclusions] The radius of a circle should be computed based on the shorter available dimension
        https://bugs.webkit.org/show_bug.cgi?id=113255

        Reviewed by Julien Chaffraix.

        When we decide what should be the radius of a circle, we should choose the smallest available space. For instance when the
        width or height is not resolvable for the circle we should not have a radius for it. This change modifies the behavior to
        use the smaller available space, so we won't render unnecessary circle shapes.

        Test: fast/exclusions/shape-inside/shape-inside-on-nested-container-with-unresolved-height.html

        * rendering/ExclusionShape.cpp:
        (WebCore::ExclusionShape::createExclusionShape):

2013-03-26  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector console work in strict mode with JavaScriptCore.

        https://webkit.org/b/65829
        rdar://problem/11271238

        Reviewed by Joseph Pecoraro.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._evaluateOn): Don't use 'eval' parameter (it isn't
        allowed in strict mode). Swap window.eval with our known eval instead.

2013-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        Heap-use-after-free regression
        https://bugs.webkit.org/show_bug.cgi?id=113337

        Reviewed by Abhishek Arya and Alexey Proskuryakov.

        Use RefPtr instead of raw pointer in m_associatedFormControls.

        * dom/Document.cpp:
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * dom/Document.h:
        (Document):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::didAssociateFormControls):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didAssociateFormControls):

2013-03-26  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13194263> Crashes in NetworkProcess due to threading issues
        https://bugs.webkit.org/show_bug.cgi?id=113256

        Reviewed by Brady Eidson.

        Added a new code path in ResourceHandle/ResourceHandleClient that doesn't need
        blocking calls. Implemented it for NSURLConnection by changing NSOperationQueue
        version to forward calls to main thread.

        * WebCore.exp.in: Export new methods.
        * WebCore.xcodeproj/project.pbxproj: Added WebCoreResourceHandleAsOperationQueueDelegate.

        * platform/network/CredentialStorage.cpp: Assert that unprotected global map operations
        happen on main thread.

        * platform/network/ResourceHandle.cpp: Added default implementations of functions
        that handle async responses.

        * platform/network/chromium/ResourceHandle.cpp: Ditto.

        * platform/network/ResourceHandle.h: Added functions that are called in response
        to new async functions in ResourceHandleClient. Changed Mac delegate type to id,
        ast can now be either WebCoreResourceHandleAsDelegate or WebCoreResourceHandleAsOperationQueueDelegate.

        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::willSendRequestAsync):
        (WebCore::ResourceHandleClient::shouldUseCredentialStorageAsync):
        (WebCore::ResourceHandleClient::canAuthenticateAgainstProtectionSpaceAsync):
        (WebCore::ResourceHandleClient::willCacheResponseAsync):
        Default implementations of async client functions. These match default behavior of
        sync versions.

        * platform/network/ResourceHandleClient.h: Added async functions. A ResourceHandle
        should use these when the client returns true from usesAsyncCallbacks().

        * platform/network/ResourceHandleInternal.h: Changed to use id for delegate type
        here, too.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::delegate): Create an appropriate delegate for the client.
        (WebCore::ResourceHandle::willSendRequest): Since this function has a lot of common
        behavior in sync and async cases, implement the new code path as a branch inside
        it, not as a new function.
        (WebCore::ResourceHandle::continueWillSendRequest): Unblock the connection when
        response is known.
        (WebCore::ResourceHandle::shouldUseCredentialStorage): Branched here too, for consistency.
        Perhaps we'll want to break this into separate functions though.
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage): Unblock the connection.
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace): Same change as above.
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace): Ditto.
        (WebCore::ResourceHandle::continueWillCacheResponse): Ditto. Currently, delegate
        calls the client directly, so we only have a "continue" function, and no "willCacheResponse".

        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]): Removed some
        nonsense code.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h: Copied from Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.h.
        This delegate is responsible for forwarding calls to main thread. Unfortunately,
        this adds some code duplication, which I tried to rectify somewhat in previous patches
        by moving more logic to ResourceHandle.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm: Copied from Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm.
        (-[WebCoreResourceHandleAsOperationQueueDelegate detachHandle]): Unblock waiting
        threads if we don't expect a response any more.
        (-[WebCoreResourceHandleAsOperationQueueDelegate dealloc]): Release the semaphore.
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueWillSendRequest:]): Unblock
        a waiting thread with a response.
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueShouldUseCredentialStorage:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueCanAuthenticateAgainstProtectionSpace:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueWillCacheResponse:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        Run code that uses WebCore objects on main thread.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionShouldUseCredentialStorage:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveAuthenticationChallenge:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didCancelAuthenticationChallenge:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveDataArray:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willStopBufferingData:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionDidFinishLoading:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didFailWithError:]): Ditto.
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]): Ditto.

2013-03-26  Tony Chang  <tony@chromium.org>

        Autogenerate the scrollAnimatorEnabled setting in Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=113253

        Reviewed by James Robinson.

        Convert scrollAnimatorEnabled into an autogenerated setting. This involves renaming
        the setter from setEnableScrollAnimator(bool) to setScrollAnimatorEnabled(bool) and
        updating the callers. I didn't change any WebKit API methods.

        Also remove the code in InternalSettings since it's never used and will now be
        autogenerated with proper resetting code.

        No new tests, this is a refactor and should compile.

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Remove code that is now autogenerated.
        * page/Settings.h:
        (Settings): Remove code that is now autogenerated.
        * page/Settings.in: Add entry for scrollAnimatorEnabled.
        * testing/InternalSettings.cpp: Remove unused code.
        * testing/InternalSettings.h: Remove unused code.
        * testing/InternalSettings.idl: Remove unused code.

2013-03-26  Joe Mason  <jmason@blackberry.com>

        [BlackBerry] In RSSFilterStream, don't swallow headers when there's no body
        https://bugs.webkit.org/show_bug.cgi?id=113334

        Reviewed by Rob Buis.

        RIM PR 316345

        When receiving an HTTP response that has a Content-Type header such as text/xml, but no
        body, RSSFilterStream::notifyHeadersReceived reads the Content-Type as "potential RSS", and
        calls saveHeaders. It expects to sniff the body in notifyDataReceived to see if it's RSS,
        and then call sendSavedHeaders to pass on the headers. But since there is no body,
        notifyDataReceived is never called. So call sendSavedHeaders in notifyClose too (it will not
        send them again if they were already sent.)

        * platform/network/blackberry/rss/RSSFilterStream.cpp:
        (WebCore::RSSFilterStream::notifyClose):

2013-03-26  Dmitry Zvorygin  <zvorygin@chromium.org>

        Web Inspector: Faster drawer animation.
        https://bugs.webkit.org/show_bug.cgi?id=113330

        250ms -> 100ms

        Reviewed by Pavel Feldman.

        * inspector/front-end/inspector.css:
        (.animate #main):
        (.animate #floating-status-bar-container):
        (.animate #drawer):
        (.animate #bottom-status-bar-container > *):

2013-03-26  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed Build fix.

        * platform/graphics/win/FontCustomPlatformDataCairo.h:
        (FontCustomPlatformData): Correct signature in header to match
        required implementation.

2013-03-26  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Scrolling up and down can cause the screen to flash black
        https://bugs.webkit.org/show_bug.cgi?id=113269

        Reviewed by Rob Buis.

        PR 296106

        The LayerRenderer should never clear before drawing the layers, from
        now on that's the responsibility of the caller.

        Only manually testable.

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::setViewport):
        * platform/graphics/blackberry/LayerRendererClient.h:
        (LayerRendererClient):

2013-03-26  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] editing/pasteboard/can-read-in-dragstart-event.html and /can-read-in-copy-and-cut-events.html are crashing
        https://bugs.webkit.org/show_bug.cgi?id=113126

        Reviewed by Jocelyn Turcotte.

        Make it possible to read from a writable Clipboard.

        Test: editing/pasteboard/can-read-in-copy-and-cut-events.html

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::types):
        (WebCore::ClipboardQt::files):
        (WebCore::ClipboardQt::readClipboardData):
        (WebCore::ClipboardQt::hasData):
        (WebCore::ClipboardQt::items):
        * platform/qt/ClipboardQt.h:
        (ClipboardQt):

2013-03-26  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build correction.

        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Update
        method signature to match CG variant.

2013-03-26  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Code duplication between HTTPParsers and HTTPValidation
        https://bugs.webkit.org/show_bug.cgi?id=113283

        Reviewed by Alexey Proskuryakov.

        Merged isValidHTTPToken() from HTTPValidation.h and isRFC2616Token() from
        HTTPParsers.h. They were doing exactly the same thing and their
        implementation was almost the same.

        Removed HTTPValidation.* and moved remaining code to HTTPParsers.* as this
        seems like the proper place and it seems odd to keep HTTPValidation for
        just one function.

        No new tests, no behavior change for layout tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/HTTPParsers.cpp:
        (WebCore::isValidHTTPHeaderValue):
        (WebCore):
        (WebCore::isValidHTTPToken): Implementation is slightly simplified based on
        isValidHTTPToken() from HTTPValidation.cpp. (c >= 0x80 || c == 0x7F) is
        replaced by (c >= 0x7F). (c <= 0x1F ||  c == ' ' || c == '\t') is replaced
        by (c <= 0x20). Those expressions are shorter but equivalent.
        (WebCore::contentDispositionType):
        * platform/network/HTTPParsers.h:
        * platform/network/HTTPValidation.cpp: Removed.
        * platform/network/HTTPValidation.h: Removed.
        * xml/XMLHttpRequest.cpp: Stop including HTTPValidation.h.

2013-03-26  Sergio Villar Senin  <svillar@igalia.com>

        Implement overtype mode for editable content
        https://bugs.webkit.org/show_bug.cgi?id=112126

        Reviewed by Ryosuke Niwa.

        Tests: editing/execCommand/overtype-support.html
               editing/execCommand/overtype.html

        Add a new Overwrite command to the editor. This command will
        perform overtype operations when enabled instead of "normal" text
        insertions. As IE does, we maintain a single toggle state in the
        editor (enabled/disabled) for all the editable content in the
        page.

        This new command will be only available for richly editable
        content via keybindings or the context menu. For testing purposes
        it is also accessible via internals.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNode): Use RefPtr for
        local variables.
        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        * editing/Editor.h:
        (WebCore::Editor::isOverwriteModeEnabled):
        (WebCore::Editor::toggleOverwriteModeEnabled):
        (Editor): Added two new functions and a new attribute.
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleOverwrite): Enables/disables overwrite mode.
        (WebCore):
        (WebCore::createCommandMap): New OverWrite command.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::setEndingSelectionWithoutValidation):
        Refactored from performTrivialReplace(), shared by
        performOverwrite().
        (WebCore):
        (WebCore::InsertTextCommand::performTrivialReplace):
        (WebCore::InsertTextCommand::performOverwrite):
        (WebCore::InsertTextCommand::doApply): Perform overwrite if enabled.
        * editing/InsertTextCommand.h:
        (InsertTextCommand):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Reset OverWrite mode
        to false.
        (WebCore::Internals::isOverwriteModeEnabled):
        (WebCore):
        (WebCore::Internals::toggleOverwriteModeEnabled): Provide access
        to overwrite functionality in Editor for testing purposes.
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-03-26  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] WebOverlay::pixelViewportRect() should return pixel viewport coordinates
        https://bugs.webkit.org/show_bug.cgi?id=113263

        Reviewed by Rob Buis.

        PR 312404

        Fix WebOverlay::pixelViewportRect() to return the pixel viewport rect
        instead of the window rect. These are different if the web page is
        rendered starting at a window coordinate other than 0,0. The clip rect
        encodes the position we're rendered at, and can be used to translate
        the rect expressed in window coordinates to the pixel viewport
        coordinate system.

        Also perform some cleanup of related code.

        Only manually testable.

        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        (WebCore::LayerCompositingThread::getTransformedHolePunchRect):
        (WebCore::LayerCompositingThread::drawTextures):
        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::toPixelCoordinates):
        (WebCore):
        (WebCore::LayerRenderer::toWindowCoordinates):
        (WebCore::LayerRenderer::toPixelViewportCoordinates):
        (WebCore::LayerRenderer::toDocumentViewportCoordinates):
        (WebCore::LayerRenderer::updateLayersRecursive):
        * platform/graphics/blackberry/LayerRenderer.h:
        (LayerRenderer):

2013-03-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146901.
        http://trac.webkit.org/changeset/146901
        https://bugs.webkit.org/show_bug.cgi?id=113321

        Was landed to soon (Requested by pfeldman on #webkit).

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.):
        (WebInspector.ConsoleView.prototype.filter):
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView.scrollIntoView):
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView):
        (WebInspector.ConsoleView.prototype._consoleMessageAdded):
        (WebInspector.ConsoleView.prototype._appendConsoleMessage):
        (WebInspector.ConsoleView.prototype._consoleCleared):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent.monitoringXHRItemAction):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent.get preserveLogItemAction):
        (WebInspector.ConsoleView.prototype._shouldBeVisible):
        (WebInspector.ConsoleView.prototype._updateMessageList):
        (WebInspector.ConsoleView.prototype._promptKeyDown):
        (WebInspector.ConsoleView.prototype._printResult):
        (WebInspector.ConsoleCommand.prototype.highlightSearchResults):
        * inspector/front-end/inspector.css:
        (.console-warning-level, .console-error-level, .console-log-level, .console-debug-level):
        (.filter-all .console-debug-level, .filter-debug .console-debug-level):
        (.filter-all .console-debug-level.repeated-message, .filter-debug .console-debug-level.repeated-message):

2013-03-26  Rafael Weinstein  <rafaelw@chromium.org>

        HTMLStackItem should include <template> as a special tag
        https://bugs.webkit.org/show_bug.cgi?id=113016

        Reviewed by Eric Seidel.

        New test added to html5lib suite.

        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::isSpecialNode):

2013-03-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Distinguish breakpoints and breakpoint locations in BreakpointManager API
        https://bugs.webkit.org/show_bug.cgi?id=113311

        Reviewed by Pavel Feldman.

        Made independent handling of breakpoints and breakpoint location in breakpoint manager consistent.
        JavaScriptSourceFrame now removes breakpoints originally set in it based on primary UI location.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.breakpointsForUISourceCode):
        (WebInspector.BreakpointManager.prototype.allBreakpoints):
        (WebInspector.BreakpointManager.prototype.breakpointLocationsForUISourceCode):
        (WebInspector.BreakpointManager.prototype.allBreakpointLocations):
        (WebInspector.BreakpointManager.prototype._projectWillReset.get for):
        (WebInspector.BreakpointManager.prototype._projectWillReset):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.onUISourceCodeContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._restoreBreakpointsAfterEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._removeAllBreakpoints):

2013-03-26  Dmitry Zvorygin  <zvorygin@chromium.org>

        Web Inspector: Remove remainings of CSS-based console message filtering.
        https://bugs.webkit.org/show_bug.cgi?id=112710

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.get this):
        (WebInspector.ConsoleView.prototype.):
        (WebInspector.ConsoleView.prototype.filter):
        (WebInspector.ConsoleView.prototype._consoleMessageAdded):
        (WebInspector.ConsoleView.prototype._appendConsoleMessage):
        (WebInspector.ConsoleView.prototype._consoleCleared):
        (WebInspector.ConsoleView.prototype._shouldBeVisible):
        (WebInspector.ConsoleView.prototype._updateMessageList):
        (WebInspector.ConsoleView.prototype._promptKeyDown):
        (WebInspector.ConsoleView.prototype._printResult):
        (WebInspector.ConsoleCommand.prototype.highlightSearchResults):
        * inspector/front-end/inspector.css:
        (.console-debug-level.repeated-message):

2013-03-26  Peter Rybin  <prybin@chromium.org>

        Web Inspector: refactor code duplication: WebInspector.ObjectPropertyTreeElement.wrapPropertyAsElements
        https://bugs.webkit.org/show_bug.cgi?id=113211

        Reviewed by Yury Semikhatsky.

        A new method WebInspector.ObjectPropertyTreeElement.wrapPropertyAsElements is added and used
        from 2 sites.

        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update.callback):
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        (.callback):
        (WebInspector.ObjectPropertyTreeElement.populate):
        (WebInspector.ObjectPropertyTreeElement.wrapPropertyAsElements):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update.appendResult):
        (WebInspector.WatchExpressionsSection.prototype.update):

2013-03-26  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        HTTPHeaderMap::copyData() could call uncheckedAppend()
        https://bugs.webkit.org/show_bug.cgi?id=113279

        Reviewed by Alexey Proskuryakov.

        HTTPHeaderMap::copyData() calls reserveInitialCapacity() on the Vector
        but then appends items using append() function. Since we already know
        the capacity is sufficient, it is more efficient to call uncheckedAppend()
        instead to bypass capacity checks.

        No new tests, no behavior change for layout tests.

        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):

2013-03-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: UISourceCodes are leaking on reload sometimes.
        https://bugs.webkit.org/show_bug.cgi?id=113310

        Reviewed by Pavel Feldman.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._projectWillReset.get for):
        (WebInspector.BreakpointManager.prototype._projectWillReset):
        * inspector/front-end/ConsoleModel.js:
        (WebInspector.ConsoleModel.prototype.clearMessages):

2013-03-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Elements] Unable to "Edit as HTML" XHTML/SVG documents.
        https://bugs.webkit.org/show_bug.cgi?id=113290

        Reviewed by Pavel Feldman.

        DOMPatchSupport has been slightly augmented to handle XML (XHTML and SVG) documents.

        Test: inspector/elements/set-outer-html-for-xhtml.xhtml

        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        (WebCore::DOMPatchSupport::patchNode):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setOuterHTML): Let HTML, XHTML, and SVG documents through.

2013-03-26  Hajime Morrita  <morrita@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=113164
        Custom Elements: readyCallback should be called for outerHTML and insertAdjecentHTML

        These APIs also create new elements thus should have V8DeliverCustomElementCallbacks attribute.

        Reviewed by Dimitri Glazkov.

        Test: Updated lifecycle-ready-creation-api.html.

        * html/HTMLElement.idl:

2013-03-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. WebInspector: remove unnecessary method.

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

2013-03-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Scroll dividers together with underlying chart.
        http://bugs.webkit.org/show_bug.cgi?id=113080

        Reviewed by Pavel Feldman.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart.Calculator.prototype.grandMinimumBoundary):
        (WebInspector.FlameChart.prototype._canvasDragging):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):

2013-03-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Scroll dividers together with underlying chart.
        http://bugs.webkit.org/show_bug.cgi?id=113080

        Reviewed by Pavel Feldman.

        The only thing we need to do for this feature is to automatically adjust
        the initial offset for the dividers. I measured the speed of scrolling and found
        no difference. The speed is about 16ms so we have 60fps on dragging.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart.Calculator.prototype.grandMinimumBoundary):
        (WebInspector.FlameChart.OverviewCalculator.prototype.grandMinimumBoundary):
        (WebInspector.FlameChart.prototype._canvasDragging):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkBaseCalculator.prototype.grandMinimumBoundary):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        (WebInspector.TimelineGrid.Calculator.prototype.grandMinimumBoundary):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewCalculator.prototype.grandMinimumBoundary):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelineCalculator.prototype.grandMinimumBoundary):

2013-03-26  Mike West  <mkwst@chromium.org>

        CSP 1.1: Experiment with 'base-uri' directive.
        https://bugs.webkit.org/show_bug.cgi?id=113307

        Reviewed by Jochen Eisinger.

        The 'base-uri' directive was introduced[1] as an experimental directive
        in CSP 1.1 after a bit of discussion[2][3]. The exact semantics will
        likely change, but it would be good for us to get some implementation
        experience with the API as currently specified, and to allow folks to
        play with the implementation to determine whether it meets the
        requirements the way we think it might.

        This patch is a first pass at that implementation: it will have no
        effect on ports that haven't enabled the CSP_NEXT flag.

        [1]: https://dvcs.w3.org/hg/content-security-policy/rev/4b89c246ea16
        [2]: http://lists.w3.org/Archives/Public/public-webappsec/2012Oct/0022.html
        [3]: http://lists.w3.org/Archives/Public/public-webappsec/2013Feb/0074.html

        Tests: http/tests/security/contentSecurityPolicy/1.1/base-uri-allow.html
               http/tests/security/contentSecurityPolicy/1.1/base-uri-deny.html

        * dom/Document.cpp:
        (WebCore::Document::processBaseElement):
            Check that the new base URI is allowed by CSP before using it as
            the document's base URI.
        * page/ContentSecurityPolicy.cpp:
            Add a constant for the new directive name (and, as a drive-by, split
            the list into CSP 1.0 and CSP 1.1 for clarity).
        (CSPDirectiveList):
            Add a property to hold the base URI policy directive value.
        (WebCore::CSPDirectiveList::checkSourceAndReportViolation):
            Customize the error message iff we're dealing with 'base-uri'.
        (WebCore::CSPDirectiveList::allowBaseURI):
            Check the given URI against the 'base-uri' directive's value,
            exactly as we do for every other source-list type of directive.
        (WebCore::CSPDirectiveList::addDirective):
            Accept 'base-uri' as a valid directive iff CSP_NEXT is set, and
            the embedder has opted-in via the runtime flag.
        (WebCore::ContentSecurityPolicy::allowBaseURI):
            Expose an API method on ContentSecurityPolicy to check URIs against
            the 'base-uri' directive's value.

2013-03-26  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Main frame fixed divs not positioned correctly
        https://bugs.webkit.org/show_bug.cgi?id=112889

        Reviewed by Carlos Garcia Campos.

        PR 283363

        This was a regression from bug #112806. It caused main frame fixed
        handling to enter the iframe/scrollable div code path in LayerRenderer.

        Fixed by not setting the container for fixed flag on the main frame,
        the LayerRenderer expects this flag to be set only on non-mainframe
        containers.

        Only manually testable.

        * page/scrolling/blackberry/ScrollingCoordinatorBlackBerry.cpp:
        (WebCore::scrollLayerForFrame):
        (WebCore):
        (WebCore::ScrollingCoordinatorBlackBerry::setLayerIsContainerForFixedPositionLayers):
        (WebCore::ScrollingCoordinatorBlackBerry::setLayerIsFixedToContainerLayer):

2013-03-26  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        FormData::deepCopy() could use Vector::uncheckedAppend()
        https://bugs.webkit.org/show_bug.cgi?id=113309

        Reviewed by Kenneth Rohde Christiansen.

        FormData::deepCopy() calls reserveInitialCapacity() on the Vector but then uses the
        regular append() method. This patch switches to using uncheckedAppend() method
        instead to bypass capacity checks as we already know it is sufficient.

        No new tests, no behavior change.

        * platform/network/FormData.cpp:
        (WebCore::FormData::deepCopy):

2013-03-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146879.
        http://trac.webkit.org/changeset/146879
        https://bugs.webkit.org/show_bug.cgi?id=113312

        Multiple layout test crashes in
        WebCore::RenderListItem::updateListMarkerNumbers (Requested by
        yurys on #webkit).

        * dom/Node.cpp:
        * dom/Node.h:
        (Node):
        * dom/NodeTraversal.cpp:
        * dom/NodeTraversal.h:
        (ElementTraversal):
        (NodeTraversal):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::attach):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::updateItemValues):
        (WebCore::HTMLOListElement::recalculateItemCount):
        * rendering/RenderCounter.cpp:
        (WebCore::previousInPreOrder):
        (WebCore::previousSiblingOrParent):
        (WebCore::parentElement):
        (WebCore::nextInPreOrder):
        * rendering/RenderListItem.cpp:
        (WebCore::enclosingList):
        (WebCore::RenderListItem::nextListItem):
        (WebCore::previousListItem):
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::explicitValueChanged):
        (WebCore::previousOrNextItem):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderListItem.h:
        (RenderListItem):

2013-03-26  Hajime Morrita  <morrita@google.com>

        remoeveAllEventListeners() should be called to shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=113037

        Reviewed by Dimitri Glazkov.

        Document::removeAllEventListeners() doesn't traverse shadow tree, but we should.
        This change override Element::removeAllEventListeners() so that it cleans its shadow trees up.

        Test: fast/dom/shadow/shadow-tree-listener-clearance.html

        * dom/Element.cpp:
        (WebCore::Element::removeAllEventListeners):
        (WebCore):
        * dom/Element.h:
        (Element):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::removeAllEventListeners): Added.
        (WebCore):
        * dom/ElementShadow.h:
        (ElementShadow):

2013-03-26  Andrei Bucur  <abucur@adobe.com>

        Use DOM ordering for list counts
        https://bugs.webkit.org/show_bug.cgi?id=110352

        Reviewed by Elliott Sprehn.

        Currently the list items ordering is made by traversing the render tree. This gives bad results for:
        - list items flown inside regions because they are not rendered as descendants of their DOM list ancestors.
        - list items matched to insertion points inside a shadow tree. The insertion point may be a child of a
        list so the numbering gets broken.

        To implement correct DOM ordering I've taken into account the fact that pseudo-elements can have display: list-item
        so they should be included when traversing the DOM tree. I've added helper methods on the NodeTraversal
        namespace that should allow easily traversing the tree including the pseudo-elements (e.g. firstChildWithPseudo
        for an element with pseudo-before will return the before PseudoElement). Using these helper methods I've implemented
        pre-order traversal methods aware of the pseudo-elements.
        An effect of this change is how the list items inside shadow tree update their counting. With the patch, if there's
        no <ol> or <ul> element on the ancestor chain of a <li> element to the shadow root, the list node will be considered the
        first parent of the <li> or the shadow root if there is no ancestor.
        The RenderListItem class now makes use of this new method of traversal, replacing the one based on the render tree.
        To simplify the CSS counters implementation, I've changed the traversal functions inside RenderCounter to also make use
        of this method. The CSS counters and the list items now have the same traversal algorithm.

        In later patches I'll add tests that should cover the regions and shadow DOM use cases.
        Tests bug for shadow DOM: https://bugs.webkit.org/show_bug.cgi?id=113193
        Tests bug for regions: https://bugs.webkit.org/show_bug.cgi?id=103975

        Tests: no new tests is this patch; added the correct expectations for fast/lists/positioned-count-crash.html
        and fast/dom/shadow/shadow-and-list-elements.html

        * dom/Node.cpp:
        (WebCore::Node::pseudoAwarePreviousSibling):
        (WebCore):
        (WebCore::Node::pseudoAwareNextSibling):
        (WebCore::Node::pseudoAwareFirstChild):
        (WebCore::Node::pseudoAwareLastChild):
        * dom/Node.h:
        (Node):
        * dom/NodeTraversal.cpp:
        (WebCore):
        (WebCore::NodeTraversal::previousIncludingPseudo):
        (NodeTraversal):
        (WebCore::NodeTraversal::nextIncludingPseudo):
        (WebCore::NodeTraversal::nextIncludingPseudoSkippingChildren):
        * dom/NodeTraversal.h:
        (ElementTraversal):
        (NodeTraversal):
        (WebCore::ElementTraversal::previousIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudo):
        (WebCore::ElementTraversal::nextIncludingPseudoSkippingChildren):
        (WebCore::ElementTraversal::pseudoAwarePreviousSibling):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::attach):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::updateItemValues):
        (WebCore::HTMLOListElement::recalculateItemCount):
        * rendering/RenderCounter.cpp:
        (WebCore::previousInPreOrder):
        (WebCore::previousSiblingOrParent):
        (WebCore::parentElement):
        (WebCore::nextInPreOrder):
        * rendering/RenderListItem.cpp:
        (WebCore):
        (WebCore::enclosingList):
        (WebCore::RenderListItem::nextListItem):
        (WebCore::previousListItem):
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::explicitValueChanged):
        (WebCore::previousOrNextItem):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderListItem.h:
        (RenderListItem):

2013-03-26  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Poor rounding in GraphicsContext::drawLineForText
        https://bugs.webkit.org/show_bug.cgi?id=113301

        Reviewed by Jocelyn Turcotte.

        Round the position of the line decoration, so lines on subpixel
        coordinates are not always rounded up.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForText):

2013-03-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Decorations in several consecutive lines are not moved correctly in DTE.
        https://bugs.webkit.org/show_bug.cgi?id=113296

        Reviewed by Pavel Feldman.

        Separated removing and adding decorations so that moved decorations are not removed when next line is processed.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):

2013-03-26  Yury Semikhatsky  <yurys@chromium.org>

        Remove references to non-chromium entries from WebCore.gypi (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=103124

        Reviewed by Pavel Feldman.

        * WebCore.gypi: removed unused references to gtk, cf, win and mac

2013-03-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146767.
        http://trac.webkit.org/changeset/146767
        https://bugs.webkit.org/show_bug.cgi?id=113295

        Rolling out until nicer fonts / sizes are chosen (Requested by
        pfeldman on #webkit).

        * inspector/front-end/dataGrid.css:
        (.data-grid table):
        (.data-grid td):
        * inspector/front-end/inspector.css:
        (.toolbar-label):
        (body.show-toolbar-icons .toolbar-label):
        (.console-message .bubble):
        (li .status .bubble):
        (.source-frame-breakpoint-message):
        (.soft-context-menu):
        (.drawer-header-close-button):
        * inspector/front-end/inspectorCommon.css:
        (body):
        * inspector/front-end/networkLogView.css:
        (.network-log-grid.data-grid td):
        (.network-log-grid.data-grid.small td):
        * inspector/front-end/tabbedPane.css:
        (.tabbed-pane-header-tab):
        (.tabbed-pane-header-tab-close-button):
        * inspector/front-end/timelinePanel.css:
        (.timeline-tree-item .count):
        (.timeline-records-stats, .storage-application-cache-status, .storage-application-cache-connectivity):
        (.memory-counter-sidebar-info):
        (.memory-counter-value):

2013-03-26  Arpita Bahuguna  <a.bah@samsung.com>

        Unable to insert a paragraph in between some text whose previous sibling is a non-editable block.
        https://bugs.webkit.org/show_bug.cgi?id=113007

        Reviewed by Ryosuke Niwa.

        Unable to insert a line break in between a text that follows a
        non-editable block but is itself contained within an editable
        block.

        While comparing the positions from the start block till the
        insertion position, we should ignore the nodes that do not
        generate a visiblePosition for the position before the node.
        This ultimately results in an assert within comparePositions().

        For this case, the firstChild of the start block is a text
        node with no renderer which would thus not generate a candidate
        position for itself.
        There is also no candidate previous to it, and since
        the position after it lies within a different editable element (root),
        no candidate after it as well.
        Such a point will thus return a null visiblePosition.

        Test: editing/inserting/insert-paragraph-between-text.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        Added a check to verify the generated visiblePosition (for the
        position before the node) prior to carrying out a comparison with
        the insertion point.

2013-03-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: OverviewGrid. Dragged window may change its width due to accumulating rounding error.
        https://bugs.webkit.org/show_bug.cgi?id=113138

        Reviewed by Pavel Feldman.

        The old version had problem with rounding because it recalculates the window size on each event.
        The new version just calculates the dragging delta and moves the window
        to the new position based on the initial values and the delta.

        * inspector/front-end/OverviewGrid.js:
        (WebInspector.OverviewGrid.Window.prototype._startWindowDragging):
        (WebInspector.OverviewGrid.Window.prototype._windowDragging):
        (WebInspector.OverviewGrid.Window.prototype._onMouseWheel):

2013-03-26  Kent Tamura  <tkent@chromium.org>

        Rename HTMLInputElement::isIndeterminate to Element::shouldAppearIndeterminate
        https://bugs.webkit.org/show_bug.cgi?id=113264

        Reviewed by Kentaro Hara.

        HTMLInputElement had indeterminate() and isIndeterminate(). It's very
        confusing.

        Because indeterminate is a public DOM function and isIndeterminate is
        for CSS and rendering, we rename isIndetermiante to
        shouldAppearIndeterminate. Also, HTMLProgressElement, which support
        :indeterminate pseudo class, should follow it. We add
        shouldAppearIndeterminate to Element.

        No new tests. Just a refactoring.

        * dom/Element.cpp:
        (WebCore::Element::shouldAppearIndeterminate): Added. Returns false.
        * dom/Element.h:
        (Element): Declare shouldAppearIndeterminate.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::shouldAppearIndeterminate):
        Renamed from isIndeterminate.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Rename isIndeterminate to shouldAppearIndeterminate,
        and overrides Element::shouldAppearIndeterminate.
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::shouldAppearIndeterminate): Added.
        * html/HTMLProgressElement.h: Add shouldAppearIndeterminate.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isIndeterminate):
        Use shouldAppearIndeterminate.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne): Ditto.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithControl): Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isIndeterminate): Ditto.

2013-03-26  Pan Deng  <pan.deng@intel.com>

        Web Inspector: [FlameChart] Make function bar highlighted consistent with cursor.
        https://bugs.webkit.org/show_bug.cgi?id=113266.

        Reviewed by Vsevolod Vlasov.

        In Flamechart, the highlighted function bar is not consistent with cursor sometimes, 
        reason is that time range that converted from cursor position is truncated by floor. 
        Actually float value is expected to compare with function startTime and duration.

        No new tests.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart.prototype._coordinatesToNodeIndex): Remove floor

2013-03-26  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]: Crash accessing offsetParent for contentNodes inside a flow thread
        https://bugs.webkit.org/show_bug.cgi?id=112730

        Reviewed by Levi Weintraub.

        When computing the offsetParent for an element inside a flow thread, do not
        let the algorithm process past the flow thread boundaries, until we figure out
        the proper behavior. When reaching the flow thread, offsetParent will return 0,
        thus preventing the assert while calling toElement inside Element::offsetParent.

        The attached test sets the ground work and will be changed to match the right behavior.
        For now, it makes sure we do not crash or return HTMLDocument as offsetParent for
        elements inside the flow thread.

        Test: fast/regions/offsetParent-in-flow-thread.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent):

2013-03-26  Dominik Röttsches  <dominik.rottsches@intel.com>

        Remove HarfBuzzShaperBase
        https://bugs.webkit.org/show_bug.cgi?id=112087

        Reviewed by Martin Robinson.

        Folding HarfBuzzShaperBase into HarfBuzzShaper since
        there is no harfbuzz-old vs. harfbuzz-ng distinction anymore.

        No new tests, no change in behavior.

        * GNUmakefile.list.am: Removing HarfBuzzShaperBase.*
        * PlatformEfl.cmake: Removing HarfBuzzShaperBase.*
        * WebCore.gypi: Removing HarfBuzzShaperBase.*
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp: Folding base class members and methods into HarfBuzzShaper.
        (WebCore::HarfBuzzShaper::HarfBuzzShaper):
        (WebCore::normalizeSpacesAndMirrorChars):
        (WebCore):
        (WebCore::HarfBuzzShaper::setNormalizedBuffer):
        (WebCore::HarfBuzzShaper::isWordEnd):
        (WebCore::HarfBuzzShaper::determineWordBreakSpacing):
        (WebCore::HarfBuzzShaper::setPadding):
        * platform/graphics/harfbuzz/HarfBuzzShaper.h: Folding base class members and methods into HarfBuzzShaper.
        (HarfBuzzShaper):
        (WebCore::HarfBuzzShaper::isCodepointSpace):
        * platform/graphics/harfbuzz/HarfBuzzShaperBase.cpp: Removed.
        * platform/graphics/harfbuzz/HarfBuzzShaperBase.h: Removed.

2013-03-22  Hajime Morrita  <morrita@google.com>

        Listening touch events on ShadowRoot can crash.
        https://bugs.webkit.org/show_bug.cgi?id=113035

        Reviewed by Kentaro Hara.

        TreeScope destructor clears a document reference on ShadowRoot but
        destructors of ContainerNode and Node assumed it being available
        and tried to access it for some cleanup purposes.

        This change extracts such cleanup to Node::willBeDeletedFrom() and
        calls it from ShadowRoot dtor before the document reference gets cleared.

        Test: fast/dom/shadow/shadow-root-touch-listener-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::~ContainerNode): Adopted willBeDeletedFrom()
        * dom/Node.cpp:
        (WebCore::Node::~Node): Adopted willBeDeletedFrom()
        (WebCore::Node::willBeDeletedFrom): Extracted from Node and ContainerNode
        (WebCore):
        * dom/Node.h:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::~ShadowRoot): Adopted willBeDeletedFrom()

2013-03-25  Hajime Morrita  <morrita@google.com>

        Custom Elements Refactoring: The name V8CustomElement is confusing.
        https://bugs.webkit.org/show_bug.cgi?id=113165

        Reviewed by Kent Tamura.

        This change moves functions from V8CustomElement to CustomElementHelpers and
        removes V8CustomElement. V8CustomElement is just a heritage of old design
        and no longer makes sense.

        No new tests. No behavior change.

        * WebCore.gypi:
        * bindings/v8/CustomElementHelpers.cpp:
        (WebCore::CustomElementHelpers::createWrapper):
        (WebCore):
        * bindings/v8/CustomElementHelpers.h:
        (CustomElementHelpers):
        (WebCore::CustomElementHelpers::wrap):
        (WebCore):
        (WebCore::CustomElementHelpers::constructorOf):
        * bindings/v8/V8CustomElement.cpp: Removed.
        * bindings/v8/V8CustomElement.h: Removed.
        * bindings/v8/custom/V8CustomElementConstructorCustom.cpp:
        (WebCore::V8CustomElementConstructor::callAsFunctionCallback):
        * dom/make_names.pl:
        (printWrapperFactoryCppFile):

2013-03-25  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Timeline] Records sidebar is clipped.
        https://bugs.webkit.org/show_bug.cgi?id=113177

        Reviewed by Pavel Feldman.

        Analysis: depending on CSS injection order sidebar rule that overwrites
        "bottom" property may win.

        Fix: make timeline-specific rule "important".

        * inspector/front-end/timelinePanel.css:
        (.timeline .sidebar): Make "bottom" value "important".

2013-03-25  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_INPUT_TYPE_DATETIME
        https://bugs.webkit.org/show_bug.cgi?id=113254

        Reviewed by Kentaro Hara.

        Rename ENABLE_INPUT_TYPE_DATETIME to ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE.
        Actually I'd like to remove the code, but we shouldn't remove it yet
        because we shipped products with it on some platforms.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        * css/html.css:
        * html/DateTimeInputType.cpp:
        * html/DateTimeInputType.h:
        * html/InputType.cpp:
        (WebCore::createInputTypeFactoryMap):

2013-03-25  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector console work in strict mode with JavaScriptCore.

        https://webkit.org/b/65829
        rdar://problem/11271238

        Reviewed by Oliver Hunt.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::evaluate):
        Return the evalFunction directly.

        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::evaluateReturnsEvalFunction):
        Added. Return true on JSC and false on V8.

        * inspector/InjectedScriptHost.idl:
        Added evaluateReturnsEvalFunction and change evaluate to an attribute on JSC.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._evaluateOn): Change from using 'with' statements to creating
        a closure that evaluates the expression. The command line APIs are passed as parameters
        to the closure so they are in scope but not injected. This allows the code evaluated in
        the console to stay in strict mode (if is was already set), or to get strict mode by
        prefixing expressions with 'use strict';.

2013-03-25  Tony Chang  <tony@chromium.org>

        Image alt text not included in plain-text version when copying
        https://bugs.webkit.org/show_bug.cgi?id=11200

        Reviewed by Ryosuke Niwa.

        Add a setting to enable copying image alt text to the clipboard and drag and drop pasteboard.
        This setting is disabled by default, so each port can enable if they want to match IE10 and
        Firefox's behavior.

        Test: editing/pasteboard/copy-image-with-alt-text.html

        * editing/Editor.cpp:
        (WebCore::Editor::cut): Explicitly ask that the selection on the pasteboard as being for the clipboard.
        (WebCore::Editor::copy): Explicitly ask that the selection on the pasteboard as being for the clipboard.
        (WebCore::Editor::selectedText): Add a private version of selectedText() that can choose between having image alt text or not.
        (WebCore::Editor::selectedTextForClipboard): Ask for image alt text if the setting is enabled.
        * editing/Editor.h:
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Add a bool to keep track of whether or not to emit image alt text.
        (WebCore::TextIterator::handleReplacedElement): If there's alt text, point the iterator to it.
        * editing/TextIterator.h:
        (TextIterator):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::takeFindStringFromSelection): Use the same text as on the clipboard.
        (WebCore::Editor::writeSelectionToPasteboard): Don't include image alt text since this is
        used by Services.
        (WebCore::Editor::stringSelectionForPasteboard): Don't include image alt text since this is
        used by Services.
        * page/DragController.cpp:
        (WebCore::DragController::startDrag): Use image alt text (matches Firefox).
        * page/Settings.in: Add a setting that disables image alt text by default.
        * platform/Pasteboard.h:
        * platform/blackberry/PasteboardBlackBerry.cpp:
        (WebCore::Pasteboard::writeSelection): Add ShouldSerializeSelectedTextForClipboard parameter.
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writeRange): Use clipboard text when writing ranges (used by d&d).
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection): Add ShouldSerializeSelectedTextForClipboard parameter.
        * platform/efl/PasteboardEfl.cpp:
        (WebCore::Pasteboard::writeSelection): Update function param.
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::writeRange): Use clipboard text when writing ranges (used by d&d).
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeSelection): Add ShouldSerializeSelectedTextForClipboard parameter.
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::writeRange): Use clipboard text when writing ranges (used by d&d).
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::getStringSelection): Use ShouldSerializeSelectedTextForClipboard to determine whether the selected
        text is for the clipboard or not.
        (WebCore::Pasteboard::writeSelectionForTypes): Pass ShouldSerializeSelectedTextForClipboard through.
        (WebCore::Pasteboard::writeSelection): Add ShouldSerializeSelectedTextForClipboard parameter.
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writeRange): Use clipboard text when writing ranges (used by d&d).
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection): Add ShouldSerializeSelectedTextForClipboard parameter.
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writeRange): Use clipboard text when writing ranges (used by d&d).
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection): Add ShouldSerializeSelectedTextForClipboard parameter.
        * platform/wince/PasteboardWinCE.cpp:
        (WebCore::Pasteboard::writeSelection): Add ShouldSerializeSelectedTextForClipboard parameter.
        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::writeSelection): Add ShouldSerializeSelectedTextForClipboard parameter.
        * rendering/RenderImage.h:
        (WebCore::RenderImage::altText): Add a getter for the alt text.

2013-03-25  Dean Jackson  <dino@apple.com>

        Remove autostart hashing code from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=113242

        Reviewed by Tim Horton.

        Remove PlugInOriginHash and all the related build entries.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLPlugInImageElement.cpp:
        * plugins/PlugInOriginHash.cpp: Removed.
        * plugins/PlugInOriginHash.h: Removed.

2013-03-25  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Wrong place to enable RuntimeEnabledFeature for Windows.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):

2013-03-25  James Robinson  <jamesr@chromium.org>

        [chromium] Support GraphicsLayer::setContentsToSolidColor
        https://bugs.webkit.org/show_bug.cgi?id=104396

        Reviewed by Adrienne Walker.

        This enables and implements the GraphicsLayer::setContentsToSolidColor
        path for Chromium.

        Tested by reftests in compositing/background-color/ and several other
        compositing/ tests.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::supportsBackgroundColorContent):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToSolidColor):
        (WebCore):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebKit):
        (GraphicsLayerChromium):

2013-03-25  Victor Carbune  <vcarbune@chromium.org>

        TextTrack Extension for WebVTT Regions
        https://bugs.webkit.org/show_bug.cgi?id=109820

        Reviewed by Eric Carlson.

        Implemented the TextTrackRegionList and extended TextTrack with
        methods required for proper interaction with TextTrackRegion objects.

        Test: media/track/regions-webvtt/text-track-region-list.html

        * WebCore.gypi: Added files for proper building of TextTrackRegionList.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        (WebCore):
        (WebCore::TextTrack::ensureTextTrackRegionList): Method for creating a
        TextTrackRegionList associated with the current track, if it does exist
        already.
        (WebCore::TextTrack::regions): Getter for the regions object.
        (WebCore::TextTrack::addRegion): Method for adding a region.
        (WebCore::TextTrack::removeRegion): Method for removing a region.
        * html/track/TextTrack.h:
        (WebCore):
        (TextTrack):
        * html/track/TextTrack.idl: Added methods specific for region handling.
        * html/track/TextTrackRegion.cpp:
        (WebCore::TextTrackRegion::TextTrackRegion): Initialized the track member variable.
        (WebCore::TextTrackRegion::setTrack): Added internal setter for the track attribute.
        (WebCore):
        (WebCore::TextTrackRegion::updateParametersFromRegion): Method to copy the parameters
        from a different region object.
        * html/track/TextTrackRegion.h: Added track member variable and copy method.
        (WebCore::TextTrackRegion::track): Getter retrieves now the member variable.
        (TextTrackRegion):
        * html/track/TextTrackRegionList.cpp: Implemented methods required by the IDL.
        (WebCore):
        (WebCore::TextTrackRegionList::TextTrackRegionList):
        (WebCore::TextTrackRegionList::length):
        (WebCore::TextTrackRegionList::item):
        (WebCore::TextTrackRegionList::getRegionById):
        (WebCore::TextTrackRegionList::add):
        (WebCore::TextTrackRegionList::remove):
        (WebCore::TextTrackRegionList::clear):
        * html/track/TextTrackRegionList.h:
        (WebCore):
        (TextTrackRegionList):
        (WebCore::TextTrackRegionList::create):
        (WebCore::TextTrackRegionList::~TextTrackRegionList):
        * html/track/TextTrackRegionList.idl: IDL defined by the specification.

2013-03-25  Dean Jackson  <dino@apple.com>

        Cleanup plugin snapshotting autostart decision making
        https://bugs.webkit.org/show_bug.cgi?id=113231

        Reviewed by Tim Horton.

        Move the code that creates a hash of plugin origin info
        out of WebCore. All WebCore needs to do now is simply ask its
        host layer whether or not a tuple of (pluginOrigin, pageOrigin, mimeType)
        should autostart or not.

        As a drive-by, the code in subframeLoaderWillCreatePlugIn was not quite
        restarting properly when the displayState was Restarting or
        RestartingWithPendingMouseClick. It still worked most of the time, but usually
        because the code ran soon after a mouse click. Now it should be explicit and
        also allowed us to be more clear about snapshotting at the end of the method.

        * html/HTMLPlugInElement.h: No more pluginOriginHash().
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::addPlugInsFromNodeListMatchingPlugInOrigin): Change signature to accept the tuple
            described above, and compare strings rather than hashes.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Tell host layer the origin
            info rather than hash info.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Remember the url that
            the plugin was loaded from. Make some of the logging messages more clear. Test for
            plugin and page origin rather than hash.
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::loadedUrl): New loadedURL member function.
        * page/PlugInClient.h:
        (PlugInClient): Change signature of virtual class to accept origin and mimeType info
            rather than hash.

2013-03-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146793.
        http://trac.webkit.org/changeset/146793
        https://bugs.webkit.org/show_bug.cgi?id=113248

        Fix did not work (Requested by rfong on #webkit).

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2013-03-25  Brandon Jones  <bajones@google.com>

        WEBGL_compressed_texture_pvrtc needs implementation
        https://bugs.webkit.org/show_bug.cgi?id=110497

        Reviewed by Kenneth Russell.

        Test: webgl/conformance/extensions/webgl-compressed-texture-pvrtc.html

        Exposes the WEBGL_compressed_texture_pvrtc extension, but is unverified since no desktop hardware supports
        the format that I am aware of. Should enable mobile ports to expose the format, however.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLCompressedTexturePVRTC.cpp: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (WebCore::WebGLCompressedTexturePVRTC::WebGLCompressedTexturePVRTC):
        (WebCore::WebGLCompressedTexturePVRTC::~WebGLCompressedTexturePVRTC):
        (WebCore::WebGLCompressedTexturePVRTC::getName):
        (WebCore::WebGLCompressedTexturePVRTC::create):
        (WebCore::WebGLCompressedTexturePVRTC::supported):
        * html/canvas/WebGLCompressedTexturePVRTC.h: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (WebGLCompressedTexturePVRTC):
        * html/canvas/WebGLCompressedTexturePVRTC.idl: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore):
        (WebGLRenderingContext):

2013-03-25  Roger Fong  <roger_fong@apple.com>

        Enable CSS_REGIONS and CSS_EXCLUSIONS.
        https://bugs.webkit.org/show_bug.cgi?id=87519

        Reviewed by Timothy Horton.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):

2013-03-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Remove unused code from Frame class destructor
        https://bugs.webkit.org/show_bug.cgi?id=113181

        Reviewed by Alexey Proskuryakov.

        No new tests. No new functionality.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame):

            Removed the code which could never have been executed
            as m_view had been set to '0'.

2013-03-25  Eric Seidel  <eric@webkit.org>

        Incorrect parsing due to hash collision
        https://bugs.webkit.org/show_bug.cgi?id=113235

        Reviewed by Adam Barth.

        Test: fast/parser/tag-hash-collision.html

        * html/parser/HTMLIdentifier.cpp:
        (WebCore::HTMLIdentifier::findIndex):

2013-03-25  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Compile without SVG will fail
        https://bugs.webkit.org/show_bug.cgi?id=113234

        Reviewed by Timothy Hatcher.

        Only make the cast to SVGStyleElement if we have SVG support built.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):

2013-03-25  Patrick Gansterer  <paroga@webkit.org>

        Enable STORE_FONT_CUSTOM_PLATFORM_DATA for all platforms
        https://bugs.webkit.org/show_bug.cgi?id=108438

        Reviewed by Andreas Kling.

        Remove the conditional code so it is turned on for all platforms.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allClientsRemoved):
        (WebCore::CachedFont::reportMemoryUsage):

2013-03-25  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION(r146380): media/track/track-user-preferences.html
        https://bugs.webkit.org/show_bug.cgi?id=113083

        Reviewed by Jer Noble.

        Ignore track change notifications triggered by automatic track selection so the 
        configuration is not changed.

        No new tests, this fixes an existing test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Clear m_processingPreferenceChange after all
            track configuration is finished.
        (WebCore::HTMLMediaElement::configureTextTrackDisplay): Do nothing if m_processingPreferenceChange
            is true.

2013-03-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [gyp] Build the final piece of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=113216

        Reviewed by Nico Weber.

        * WebCore.gyp/WebCoreGTK.gyp: Add the rest of the WebCore source files to the WebCore build target.

2013-03-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [gyp] Adding support for building WebCore rendering
        https://bugs.webkit.org/show_bug.cgi?id=113213

        Reviewed by Gustavo Noronha Silva.

        * WebCore.gyp/WebCoreGTK.gyp: Build the rendering directory into a shared library.

2013-03-25  Tony Chang  <tony@chromium.org>

        Remove TextIterator argumentless constructor
        https://bugs.webkit.org/show_bug.cgi?id=113226

        Reviewed by Ryosuke Niwa.

        The TextIterator argumentless constructors are never used and wouldn't be useful
        since you can't specify a range.

        No new tests, removing dead code. There should be no behavior change.

        * editing/TextIterator.cpp: Remove constructors.
        * editing/TextIterator.h:
        (TextIterator):
        (SimplifiedBackwardsTextIterator):
        (CharacterIterator):
        (BackwardsCharacterIterator):
        (WordAwareIterator):

2013-03-25  Brandon Jones  <bajones@chromium.org>

        Enabled canvas.getContext("webgl") on Desktop Chrome
        https://bugs.webkit.org/show_bug.cgi?id=113079

        Reviewed by Dean Jackson.

        Test: fast/canvas/webgl/webgl-unprefixed-context-id.html

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextMethodCustom):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2013-03-25  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Remove some suspicious looking code in an attempt to fix EWS bots.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2013-03-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [gyp] Add support for building the platform directory
        https://bugs.webkit.org/show_bug.cgi?id=113212

        Reviewed by Nico Weber.

        * WebCore.gyp/WebCoreGTK.gyp: Add support for building the platform directory including
        two libraries, one for platform and one for geometry files. This follows the approach
        of Chromium.

2013-03-25  Jochen Eisinger  <jochen@chromium.org>

        Swap both the error and change event queue before processing fullscreen events
        https://bugs.webkit.org/show_bug.cgi?id=113194

        Reviewed by Jer Noble.

        While processing the change events, not only new change events but
        also new error events might get generated. However, for the timer, we
        should only process preexisting events.

        This is covered by fullscreen/full-screen-restrictions.html which times
        out depending on the delay between requesting fullscreen and granting
        fullscreen.

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

2013-03-25  Marja Hölttä  <marja@chromium.org>

        [V8] Generate specialized callbacks for the main world
        https://bugs.webkit.org/show_bug.cgi?id=112430

        Reviewed by Kentaro Hara.

        The new specialized bindings will be faster, because they don't need to
        do the "main world, isolated world or a worker" check, but can right
        away assume that we're in the main world.

        This patch generates main world bindings for getters and setters for a
        small amount of frequently used functions / functions used by Dromaeo.

        Added tests to TestObj.idl and updated bindings tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOverloadedFunction):
        (GenerateFunctionCallback):
        (GenerateFunction):
        (GenerateParametersCheck):
        (GenerateSingleConstructorCallback):
        (GenerateNonStandardFunction):
        (GenerateImplementation):
        (GenerateFunctionCallString):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::perWorldReadOnlyAttributeAttrGetter):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::perWorldReadOnlyAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::perWorldReadOnlyAttributeAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::perWorldReadOnlyAttributeAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrGetter):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrSetter):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrSetterCallback):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::perWorldAttributeAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::perWorldMethodMethod):
        (WebCore::TestObjV8Internal::perWorldMethodMethodForMainWorld):
        (WebCore::TestObjV8Internal::perWorldMethodMethodCallback):
        (WebCore::TestObjV8Internal::perWorldMethodMethodCallbackForMainWorld):
        (WebCore::TestObjV8Internal::overloadedPerWorldMethod1Method):
        (WebCore::TestObjV8Internal::overloadedPerWorldMethod1MethodForMainWorld):
        (WebCore::TestObjV8Internal::overloadedPerWorldMethod2Method):
        (WebCore::TestObjV8Internal::overloadedPerWorldMethod2MethodForMainWorld):
        (WebCore::TestObjV8Internal::overloadedPerWorldMethodMethod):
        (WebCore::TestObjV8Internal::overloadedPerWorldMethodMethodForMainWorld):
        (WebCore::TestObjV8Internal::overloadedPerWorldMethodMethodCallback):
        (WebCore::TestObjV8Internal::overloadedPerWorldMethodMethodCallbackForMainWorld):
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore):
        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::batchConfigureCallbacks):
        (WebCore::V8DOMConfiguration::configureTemplate):
        * bindings/v8/V8DOMConfiguration.h:
        (BatchedMethod):
        (V8DOMConfiguration):
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.idl:
        * page/DOMWindow.idl:

2013-03-25  Daniel Cheng  <dcheng@chromium.org>

        Don't allow drags to start after a mouse press that creates a context menu
        https://bugs.webkit.org/show_bug.cgi?id=112079

        Reviewed by Tony Chang.

        This appears to be the intent of the original code anyway (the comments in the corresponding
        context menu handlers indicate that they set m_mousePressed to false in order to suppress
        drags from starting). Since exact platform behavior differs quite a bit in this area, this
        will also make the behavior more consistent across different WebKit implementations.

        Manually testable using context-menu-during-drag-selection.html.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):

2013-03-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Provisional breakpoints are not shown on reload.
        https://bugs.webkit.org/show_bug.cgi?id=113210

        Reviewed by Pavel Feldman.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._restoreBreakpoints):
        (WebInspector.BreakpointManager.prototype._projectWillReset.get for):
        (WebInspector.BreakpointManager.prototype._projectWillReset):
        (WebInspector.BreakpointManager.prototype._breakpointResolved):
        * inspector/front-end/utilities.js:

2013-03-25  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: Remove console warnings for *_ prefixed CSS styles
        https://bugs.webkit.org/show_bug.cgi?id=113175

        Reviewed by Pavel Feldman.

        Added separate error message for syntax CSS error in declaration list when no property detected.
        Added filter for messages starting with '*'.

        * css/CSSGrammar.y.in:

2013-03-25  Alexis Hetu  <sugoi@chromium.org>

        Integration of the Skia displacement mapping into WebKit
        https://bugs.webkit.org/show_bug.cgi?id=112927

        Reviewed by Stephen White.

        Added displacement mapping to effect-reference.html and
        effect-reference-hw.html

        * WebCore.gypi:
        * platform/graphics/filters/FEDisplacementMap.h:
        (FEDisplacementMap):
        Adding Skia specific declarations
        * platform/graphics/filters/skia/FEDisplacementMapSkia.cpp: Added.
        (WebCore):
        (WebCore::toSkiaMode):
        Provides conversion between the WebKit displacement mapping mode and
        the Skia displacement mapping mode
        (WebCore::FEDisplacementMap::platformApplySkia):
        Displacement through the Skia API. (Accelerated only for now)
        (WebCore::FEDisplacementMap::createImageFilter):
        Displacement image filter creation through the Skia API.

2013-03-25  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Graduate some new Inspector APIs to public
        https://bugs.webkit.org/show_bug.cgi?id=113176

        Reviewed by Pavel Feldman.

        Summary of changes:
            DOM.highlightNode.nodeId: required parameter is now optional
            Input: domain has been added
            Runtime.enable: command has been added
            Runtime.executionContextCreated: event has been added
            Page.clearGeolocationOverride: command has been added
            Page.setGeolocationOverride: command has been added
            Page.captureScreenshot: command has been added
            Debugger.setBreakpointByUrl.locations: optional response parameter is now required


        * inspector/Inspector.json:

2013-03-25  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Timeline] set glue records mode off by default
        https://bugs.webkit.org/show_bug.cgi?id=113189

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePanel.js: /glueRecordsSetting/s/true/false/

2013-03-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Fix build break when media source is enabled
        https://bugs.webkit.org/show_bug.cgi?id=113143

        Unreviewed. Build error needs to be fixed in order to start to implement
        media source functionality.

        * CMakeLists.txt:
        * platform/efl/MIMETypeRegistryEfl.cpp:
        (WebCore):
        (WebCore::MIMETypeRegistry::isSupportedMediaSourceMIMEType):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2013-03-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Toggling breakpoint with shortcut should be freezed as well while editing.
        https://bugs.webkit.org/show_bug.cgi?id=113188

        Reviewed by Pavel Feldman.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.toggleBreakpointOnCurrentLine):

2013-03-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Remove unneeded code from JavaScriptSourceFrame.
        https://bugs.webkit.org/show_bug.cgi?id=113182

        Reviewed by Pavel Feldman.

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

2013-03-25  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Fonts refactoring
        https://bugs.webkit.org/show_bug.cgi?id=113047

        Reviewed by Pavel Feldman.

        Unify fonts usage across inspector.
        Make inspector default font depend on platform.

        * inspector/front-end/dataGrid.css:
        (.data-grid table):
        (.data-grid td):
        * inspector/front-end/inspector.css:
        (.toolbar-label):
        (body.show-toolbar-icons .toolbar-label):
        (.console-message .bubble):
        (li .status .bubble):
        (.source-frame-breakpoint-message):
        (.soft-context-menu):
        * inspector/front-end/inspectorCommon.css:
        (body):
        * inspector/front-end/networkLogView.css:
        (.network-log-grid.data-grid td):
        (.network-log-grid.data-grid.small td):
        * inspector/front-end/tabbedPane.css:
        (.tabbed-pane-header-tab):
        (select.tabbed-pane-header-tabs-drop-down-select):
        * inspector/front-end/timelinePanel.css:
        (.memory-counter-value):

2013-03-25  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Use generate-inspector-protocol-version to list valid public API changes
        https://bugs.webkit.org/show_bug.cgi?id=113148

        Added --show-changes command line option.
        Used existing compare_schemas method to do a reverse compare.
        Fixed a number of small problems (missing domain name in the message,
        incorrect error messages for command parameters).

        Reviewed by Pavel Feldman.

        * inspector/generate-inspector-protocol-version:
        (named_list_to_map):
        (removed):
        (required):
        (compare_schemas):
        (compare_domains):
        (compare_commands):
        (compare_events):
        (compare_params_list):
        (compare_types):
        (self_test):
        (self_test.create_test_schema_1):
        (self_test.create_test_schema_2):
        (self_test.is_subset):
        (self_test.errors_match):
        (main):

2013-03-25  Alec Flett  <alecflett@chromium.org>

        Support Quota API in Workers
        https://bugs.webkit.org/show_bug.cgi?id=112972

        Reviewed by Adam Barth.

        Tests: fast/workers/shared-worker-storagequota-query-usage.html
               fast/workers/worker-storagequota-query-usage.html

        * Modules/quota/WorkerNavigatorStorageQuota.cpp: Added.
        * Modules/quota/WorkerNavigatorStorageQuota.h: Added.
        * Modules/quota/WorkerNavigatorStorageQuota.idl: Added.
        * WebCore.gypi: Add entries for WorkerNavigatorStorageQuota.
        * page/WorkerNavigator.h: Add a Navigator supplement that extends the worker navigator.

2013-03-25  Mike West  <mkwst@chromium.org>

        CSP 1.1: Rename SecurityPolicyViolationEvent::sourceURL to ::sourceFile.
        https://bugs.webkit.org/show_bug.cgi?id=113033

        Reviewed by Jochen Eisinger.

        Bringing our experimental implementation into line with the spec, which
        has landed on the de facto standard name Gecko has been sending out for
        years and years.

        Spec: https://dvcs.w3.org/hg/content-security-policy/rev/e44f4003e158
        Thread: http://lists.w3.org/Archives/Public/public-webappsec/2013Mar/0087.html

        * dom/SecurityPolicyViolationEvent.h:
        (SecurityPolicyViolationEventInit):
        (WebCore::SecurityPolicyViolationEvent::sourceFile):
        (WebCore::SecurityPolicyViolationEvent::SecurityPolicyViolationEvent):
        (SecurityPolicyViolationEvent):
        * dom/SecurityPolicyViolationEvent.idl:
        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
            s/sourceURL/sourceFile/

2013-03-25  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Filters] Using negative drop-shadow radius values has slow performance
        https://bugs.webkit.org/show_bug.cgi?id=107848

        Setting negative blur radius values in drop-shadow() and box-shadow() led to
        significant rendering performance loss. The invalid value overflowed and the
        embedder became unresponsive for few seconds.
        This impacted SVG too (SVGFEDropShadow and SVGFEGaussianBlur).

        Reviewed by Dirk Schulze.

        Tests: css3/filters/effect-drop-shadow-negative-radius.html
               fast/box-shadow/box-shadow-parsing-invalid.html
               svg/filters/feDropShadow-negative-deviation-expected.svg
               svg/filters/feDropShadow-negative-deviation.svg
               svg/filters/feDropShadow-zero-deviation.svg
               svg/filters/feGaussianBlur-negative-deviation-expected.svg
               svg/filters/feGaussianBlur-negative-deviation.svg
               svg/filters/feGaussianBlur-zero-deviation.svg

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShadow): Negative values are skipped during parsing: as per
        CSS Background and Borders specs, negative values shall not be allowed.
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize): Added "non-negative" assertion for
        negative deviations.
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build): If a negative standard deviation is encountered, don't
        build the filter and returns earlier, this avoids unnecessary calls: FEGaussianBlur is not being
        created with wrong and potentially overflowing values.
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build): Ditto.

2013-03-25  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] REGRESSION(r146630): 8 text related test asserts on debug builds
        https://bugs.webkit.org/show_bug.cgi?id=113179

        Reviewed by Jocelyn Turcotte.

        Test if range.start is within the valid range before testing the value at that point.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::initFormatForTextLayout):

2013-03-25  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Properly handle the rule addition to an XML or SVG document.
        https://bugs.webkit.org/show_bug.cgi?id=113185

        Reviewed by Pavel Feldman.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):

2013-03-25  Peter Rybin  <prybin@chromium.org>

        Web Inspector: support changing local variables in frontend
        https://bugs.webkit.org/show_bug.cgi?id=112470

        Reviewed by Yury Semikhatsky.

        ScopeRef type is added to RemoteObject and setPropertyValue is patched accordingly.

        Test: inspector/debugger/debugger-change-variable.html

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.CallFrame.prototype.get id):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.FunctionScopeMainTreeElement.prototype.onpopulate.didGetDetails):
        (WebInspector.FunctionScopeMainTreeElement.prototype.onpopulate):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject):
        (WebInspector.RemoteObject.fromScopePayload):
        (WebInspector.RemoteObject.prototype.):
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.setVariableValueCallback):
        (WebInspector.RemoteObject.prototype._setDeclarativeVariableValue):
        (WebInspector.ScopeRef):
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):

2013-03-25  Mike West  <mkwst@chromium.org>

        CSP 1.1: Strip URLs in SecurityPolicyViolationEvents, just as we do for POSTed violation reports.
        https://bugs.webkit.org/show_bug.cgi?id=113039

        Reviewed by Jochen Eisinger.

        I'd originally assumed that we didn't need to be quite so careful when
        handing URLs to JavaScript via SecurityPolicyViolationEvents. This was
        a mistake. Cross-origin URLs aren't accessible to JavaScript currently
        and there's no reason that we should begin exposing them via an event.

        This patch extracts the stripping logic from the existing reports into
        stripURLForUseInReport(), and uses that new method when populating the
        event and report objects.

        Relatedly, we were doing the wrong thing with 'file:' URLs, which this
        patch made clear. Now they're treated the same as 'data:' et al.

        Spec: https://dvcs.w3.org/hg/content-security-policy/rev/45f6ccaba0ef

        Tests: http/tests/security/contentSecurityPolicy/1.1/securitypolicyviolation-block-cross-origin-image-from-script.html
               http/tests/security/contentSecurityPolicy/1.1/securitypolicyviolation-block-cross-origin-image.html
               http/tests/security/contentSecurityPolicy/1.1/securitypolicyviolation-block-image-from-script.html
               http/tests/security/contentSecurityPolicy/report-blocked-file-uri.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::stripURLForUseInReport):
            Extract the logic from blockedURI out into a reusable method:
            cross-origin URLs are stripped down to the ASCII serialization of
            their origin, and non-heirarchical (and 'file:') URLs are stripped
            down to the ASCII serialization of their protocol.
        (WebCore::gatherSecurityPolicyViolationEventData):
        (WebCore::ContentSecurityPolicy::reportViolation):
            Use ::stripURLForUseInReport for blockedURL and sourceFile
            attributes in these two methods.

2013-03-25  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Fix JSDocs.
        https://bugs.webkit.org/show_bug.cgi?id=113025

        Reviewed by Pavel Feldman.

        Next version of JS compiler finds more inconsistencies
        and ambiguous declarations.
        Some of them are resolved in this patch.

        * inspector/InjectedScriptSource.js: Fix JSDocs.
        * inspector/front-end/ConsoleModel.js: Ditto.
        * inspector/front-end/CookieParser.js: Ditto.
        * inspector/front-end/FileContentView.js: Ditto.
        * inspector/front-end/HeapSnapshotView.js: Ditto.
        * inspector/front-end/IndexedDBModel.js: Ditto.
        * inspector/front-end/ProfilesPanelDescriptor.js: Ditto.
        * inspector/front-end/utilities.js: Ditto.

2013-03-25  Mike West  <mkwst@chromium.org>

        Cleanup: Tiny nits in ContentSecurityPolicy::reportViolation.
        https://bugs.webkit.org/show_bug.cgi?id=112784

        Reviewed by Jochen Eisinger.

        Just cleanup of three tiny nits I ran across in
        ContentSecurityPolicy::reportViolation while doing other work.

        - 'directiveText' and 'effectiveDirective' can't be empty; we pass in
          values at every callsite. We can safely remove the 'isEmpty()' checks.
          Moreover, even if they could possibly somehow be empty, we should
          still include those empty strings in the report, rather than
          dropping the values entirely.

        - We don't need to hold 'document->referrer()' in a temp variable.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):

2013-03-25  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Overview] Make "drag-to-move" feature more discoverable.
        https://bugs.webkit.org/show_bug.cgi?id=113032

        Reviewed by Pavel Feldman.

        To move overview window user could drag-n-drop over
        time "ribbon" on OverviewGrid.

        This feature is hard to discover.

        Setting "move" cursor will make this feature more discoverable.

        * inspector/front-end/inspectorCommon.css:
        Set "move" cursor to draggable area.
        * inspector/front-end/OverviewGrid.js: Ditto.

2013-03-25  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Profiles] Remove unused private member.
        https://bugs.webkit.org/show_bug.cgi?id=113015

        Reviewed by Pavel Feldman.

        _profileGroupsForLinks is not used anymore.

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset): Removed unused member.

2013-03-25  PhistucK  <phistuck@chromium.org>

        Web Inspector: Exception when turning on pretty print without any displayed source in the editor
        https://bugs.webkit.org/show_bug.cgi?id=113136

        Reviewed by Vsevolod Vlasov.

        No new tests.
        Added a check for the existence of currently edited document.

        * inspector/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleFormatSource):

2013-03-25  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Remove RenderRegion::printRegionObjectsStyles
        https://bugs.webkit.org/show_bug.cgi?id=113081

        Reviewed by Tony Chang.

        No change in functionality, remove unused function..

        * rendering/RenderRegion.h:

2013-03-25  Hurnjoo Lee  <hurnjoo.lee@samsung.com>

        [Texmap] Memory leak when closing a tab
        https://bugs.webkit.org/show_bug.cgi?id=112127

        Reviewed by Noam Rosenthal.

        When closing a tab, if there are any updates pending in CoordinatedGraphicsScene's
        render queue, the scene is not freed because reference count of m_scene is not zero.

        No new tests.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::detach): When bind updates in CoordinatedGraphicsScene,
        the reference count of m_scene is increasing, if m_renderQueue is not empty
        before closing tab, then m_scene is never freed.
        Hence, when closing tab, need to clear m_renderQueue explicitly in order to
        destroy m_scene.

2013-03-25  Keishi Hattori  <keishi@webkit.org>

        Clear button visibility is not updated when restoring form state
        https://bugs.webkit.org/show_bug.cgi?id=113172

        Clear button wasn't showing up when restoring form state.

        Reviewed by Kent Tamura.

        Tests: fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-visibility-after-restore.html
               fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-visibility-after-restore.html
               fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-visibility-after-restore.html
               fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-visibility-after-restore.html
               fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-visibility-after-restore.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState):

2013-03-25  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Settings] Use registry to track settings objects.
        https://bugs.webkit.org/show_bug.cgi?id=113008

        Reviewed by Pavel Feldman.

        Currently .createSetting creates new instance any time it is invoked.
        When one instance saves value, the other instance do not know about it.

        To resolve this issue we can use registry to make .createSetting return
        same object for specific key.

        * inspector/front-end/Settings.js:
        (WebInspector.Settings.prototype.createSetting): Use registry.

2013-03-24  Matt Falkenhagen  <falken@chromium.org>

        Refactoring: Pull Node::disabled() and Node::isInert() down to Element.
        https://bugs.webkit.org/show_bug.cgi?id=112085

        Reviewed by Hajime Morrita.

        Node is too low a level for these methods. The plan is to rename
        Element::disabled to isDisabledFormControl and to remove
        Element::isEnabledFormControl.

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::disabled):
        (WebCore):
        (WebCore::Element::isInert):
        * dom/Element.h:
        (Element):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        * dom/GestureEvent.cpp:
        (WebCore::GestureEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/Node.cpp:
        (WebCore::Node::handleLocalEvents):
        (WebCore::Node::willRespondToMouseMoveEvents):
        (WebCore::Node::willRespondToMouseClickEvents):
        (WebCore::Node::willRespondToTouchEvents):
        * dom/Node.h:
        (Node):

2013-03-24  Alpha Lam  <hclam@chromium.org>

        GIFImageReader should reports parsing error to client
        https://bugs.webkit.org/show_bug.cgi?id=113141

        Reviewed by Stephen White.

        GIFImageReader nows reports parsing error to client (GIFImageDecoder) such that errors can be handled.
        In the case of corrupted GIF images GIFImageReader will be deleted and decoding will fail.

        Unit test is updated to reflect change in behavior.
        Tested with a local corpus which showed better handling of corrupted GIF images.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::decode):

2013-03-24  KondapallyKalyan  <kalyan.kondapally@intel.com>

        [EFL] Add support to check for current Drawable.
        https://bugs.webkit.org/show_bug.cgi?id=113103

        Reviewed by Kenneth Rohde Christiansen.

        Covered by existing WebGL tests.

        In MakeCurrent we do an early return if it is
        the current GL context but ignore Surface. This
        patch fixes the issue, we now check for both
        context and surface before doing an early return
        in MakeCurrent.

        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore::GLPlatformContext::makeCurrent):
        (WebCore::GLPlatformContext::releaseCurrent):
        (WebCore::GLPlatformContext::destroy):
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore):
        (WebCore::GLPlatformSurface::isCurrentDrawable):
        (WebCore::GLPlatformSurface::onMakeCurrent):
        * platform/graphics/opengl/GLPlatformSurface.h:

2013-03-24  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r146704): Settings::setHiddenPageDOMTimerThrottlingEnabled() isn't always built
        <http://webkit.org/b/112308>

        * WebCore.exp.in: Export
        Settings::setHiddenPageDOMTimerThrottlingEnabled()
        conditionally based on ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING).

2013-03-24  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] NetworkStateNotifier::updateState() is called too often
        https://bugs.webkit.org/show_bug.cgi?id=113152

        Reviewed by Kenneth Rohde Christiansen.

        Wait until we have read all the data on the Netlink socket before
        reporting a possible network interface change. This way, we make
        sure we don't call NetworkStateNotifier::updateState() several
        times in a row for no reason.

        We also call NetworkStateNotifier::updateState() only if we get a
        RTM_NEWADDR event and we are currently offline, or if we get a
        RTM_DELADDR and we are currently online. This avoids calling
        NetworkStateNotifier::updateState() uselessly as there is no way
        the online state can change otherwise.

        No new tests, no behavior change for layout tests.

        * platform/network/efl/NetworkStateNotifierEfl.cpp:
        (WebCore::NetworkStateNotifier::readSocketCallback):

2013-03-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash in WebCore::AccessibilitySpinButton::incrementButton()
        https://bugs.webkit.org/show_bug.cgi?id=111582

        Reviewed by Tim Horton.

        There are two ways to create a spin button: from a textfield counter or from ARIA.
        If an ARIA spin button is created, it was returning true for isSpinButton, so we were 
        casting to the other kind of spin button, leading to a crash.

        We need to be more specific about our class types.

        Test: platform/mac/accessibility/aria-spinbutton-crash.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isNativeSpinButton):
        * accessibility/AccessibilitySpinButton.h:
        (WebCore::AccessibilitySpinButton::isNativeSpinButton):
        (WebCore::toAccessibilitySpinButton):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-03-24  Chris Fleizach  <cfleizach@apple.com>

        AXObjectCache gets recreated during document tear-down.
        https://bugs.webkit.org/show_bug.cgi?id=112525

        Reviewed by Simon Fraser.

        In many cases, a document's AXObjectCache was being created after the
        document had detached, which is wasteful and could potentially lead to
        crashes because the AXObjectCache has a timer and relies on its document
        to exist.

        This patch provides a way to get the existing AX object cache, instead of
        always creating a new one.
        It moves the accessibilityEnabled() checks into the axObjectCache retrieval
        for easier readability.
        It adds a number of ASSERTs to vieryf that only the correct (top) document is used
        for cache manipulation.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::stopCachingComputedObjectAttributes):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::~ContainerNode):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::clearAXObjectCache):
        (WebCore::Document::existingAXObjectCache):
        (WebCore::Document::axObjectCache):
        (WebCore::Document::setFocusedNode):
        * dom/Document.h:
        (Document):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::isEditableToAccessibility):
        (WebCore::Node::attach):
        (WebCore::Node::rootEditableElement):
        (WebCore::Node::didMoveToNewDocument):
        * editing/AppendNodeCommand.cpp:
        (WebCore::sendAXTextChangedIgnoringLineBreaks):
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedContents):
        (WebCore::Editor::markAndReplaceFor):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        * editing/atk/FrameSelectionAtk.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/chromium/FrameSelectionChromium.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::optionElementChildrenChanged):
        (WebCore::HTMLSelectElement::setRecalcListItems):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        * html/InputType.cpp:
        (WebCore::InputType::applyStep):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForLoadStart):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * page/FocusController.cpp:
        (WebCore::FocusController::setInitialFocus):
        * page/Frame.cpp:
        (WebCore::Frame::disconnectOwnerElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::removeFromAXObjectCache):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scrollToAnchor):
        (WebCore::FrameView::axObjectCache):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::~Scrollbar):
        (WebCore):
        (WebCore::Scrollbar::existingAXObjectCache):
        * platform/Scrollbar.h:
        (Scrollbar):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLineBoxTree):
        (WebCore::RenderBlock::createRootInlineBox):
        (WebCore::RenderBlock::createAndAppendRootInlineBox):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::selectionChanged):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::addChild):
        (WebCore::RenderMenuList::didUpdateActiveOption):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::willBeDestroyed):

2013-03-23  Mike West  <mkwst@chromium.org>

        Drop full URLs from cross-origin access errors caused by sandboxing.
        https://bugs.webkit.org/show_bug.cgi?id=113029

        Reviewed by Timothy Hatcher.

        Following up on http://wkbug.com/112042, this patch brings cross-origin
        access error messages into line with the newly origin-only default
        message, and changes the error message text to explicitly refer to the
        missing 'allow-same-origin' sandbox flag that's the root cause of the
        error.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::crossDomainAccessErrorMessage):
            Note that we're using the origin of the frames' URLs rather than
            their actual origin in these messages. This seems like a reasonable
            thing to do, since we know that at least one of the two origins will
            be "null" in this scenario.

2013-03-23  Dominic Mazzoni  <dmazzoni@google.com>

        Implement Web Speech Synthesis for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=111695

        Reviewed by Adam Barth.

        Straightforward implementation of speech synthesis
        for Chromium by exposing interfaces for the platform
        to implement.

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::boundaryEventOccurred):
        (WebCore::SpeechSynthesis::didStartSpeaking):
        (WebCore::SpeechSynthesis::didPauseSpeaking):
        (WebCore::SpeechSynthesis::didResumeSpeaking):
        (WebCore::SpeechSynthesis::didFinishSpeaking):
        (WebCore::SpeechSynthesis::speakingErrorOccurred):
        (WebCore):
        * Modules/speech/SpeechSynthesis.h:
        (SpeechSynthesis):
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::SpeechSynthesisUtterance):
        (WebCore):
        (WebCore::SpeechSynthesisUtterance::~SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::setVoice):
        * Modules/speech/SpeechSynthesisUtterance.h:
        (SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::text):
        (WebCore::SpeechSynthesisUtterance::setText):
        (WebCore::SpeechSynthesisUtterance::lang):
        (WebCore::SpeechSynthesisUtterance::setLang):
        (WebCore::SpeechSynthesisUtterance::volume):
        (WebCore::SpeechSynthesisUtterance::setVolume):
        (WebCore::SpeechSynthesisUtterance::rate):
        (WebCore::SpeechSynthesisUtterance::setRate):
        (WebCore::SpeechSynthesisUtterance::pitch):
        (WebCore::SpeechSynthesisUtterance::setPitch):
        (WebCore::SpeechSynthesisUtterance::startTime):
        (WebCore::SpeechSynthesisUtterance::setStartTime):
        (WebCore::SpeechSynthesisUtterance::platformUtterance):
        * Modules/speech/SpeechSynthesisVoice.h:
        (WebCore::SpeechSynthesisVoice::~SpeechSynthesisVoice):
        * WebCore.exp.in:
        * WebCore.gypi:
        * platform/PlatformSpeechSynthesis.h:
        (PlatformSpeechSynthesis):
        * platform/PlatformSpeechSynthesisUtterance.cpp:
        (WebCore):
        (WebCore::PlatformSpeechSynthesisUtterance::create):
        * platform/PlatformSpeechSynthesisUtterance.h:
        (PlatformSpeechSynthesisUtterance):
        (WebCore::PlatformSpeechSynthesisUtterance::setClient):
        * platform/PlatformSpeechSynthesisVoice.cpp:
        (WebCore):
        (WebCore::PlatformSpeechSynthesisVoice::create):
        (WebCore::PlatformSpeechSynthesisVoice::PlatformSpeechSynthesisVoice):
        * platform/PlatformSpeechSynthesisVoice.h:
        (PlatformSpeechSynthesisVoice):
        (WebCore::PlatformSpeechSynthesisVoice::setVoiceURI):
        (WebCore::PlatformSpeechSynthesisVoice::setName):
        (WebCore::PlatformSpeechSynthesisVoice::setLang):
        (WebCore::PlatformSpeechSynthesisVoice::setLocalService):
        (WebCore::PlatformSpeechSynthesisVoice::setIsDefault):
        * platform/PlatformSpeechSynthesizer.cpp:
        (WebCore::PlatformSpeechSynthesizer::create):
        (WebCore::PlatformSpeechSynthesizer::setVoiceList):
        (WebCore):
        * platform/PlatformSpeechSynthesizer.h:
        (WebKit):
        (PlatformSpeechSynthesizerClient):
        (PlatformSpeechSynthesizer):
        * platform/chromium/PlatformSpeechSynthesizerChromium.cpp: Added.
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesizer::speak):
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore::PlatformSpeechSynthesizer::resume):
        (WebCore::PlatformSpeechSynthesizer::cancel):
        * platform/chromium/support/WebSpeechSynthesisUtterance.cpp: Added.
        (WebKit):
        (WebKit::WebSpeechSynthesisUtterance::WebSpeechSynthesisUtterance):
        (WebKit::WebSpeechSynthesisUtterance::operator=):
        (WebKit::WebSpeechSynthesisUtterance::assign):
        (WebKit::WebSpeechSynthesisUtterance::reset):
        (WebKit::WebSpeechSynthesisUtterance::operator PassRefPtr<PlatformSpeechSynthesisUtterance>):
        (WebKit::WebSpeechSynthesisUtterance::operator PlatformSpeechSynthesisUtterance*):
        (WebKit::WebSpeechSynthesisUtterance::text):
        (WebKit::WebSpeechSynthesisUtterance::lang):
        (WebKit::WebSpeechSynthesisUtterance::voice):
        (WebKit::WebSpeechSynthesisUtterance::volume):
        (WebKit::WebSpeechSynthesisUtterance::rate):
        (WebKit::WebSpeechSynthesisUtterance::pitch):
        (WebKit::WebSpeechSynthesisUtterance::startTime):
        * platform/chromium/support/WebSpeechSynthesisVoice.cpp: Added.
        (WebKit):
        (WebKit::WebSpeechSynthesisVoice::assign):
        (WebKit::WebSpeechSynthesisVoice::reset):
        (WebKit::WebSpeechSynthesisVoice::setVoiceURI):
        (WebKit::WebSpeechSynthesisVoice::setName):
        (WebKit::WebSpeechSynthesisVoice::setLanguage):
        (WebKit::WebSpeechSynthesisVoice::setIsLocalService):
        (WebKit::WebSpeechSynthesisVoice::setIsDefault):
        (WebKit::WebSpeechSynthesisVoice::operator PassRefPtr<WebCore::PlatformSpeechSynthesisVoice>):
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.cpp: Added.
        (WebCore):
        (WebCore::WebSpeechSynthesizerClientImpl::WebSpeechSynthesizerClientImpl):
        (WebCore::WebSpeechSynthesizerClientImpl::~WebSpeechSynthesizerClientImpl):
        (WebCore::WebSpeechSynthesizerClientImpl::setVoiceList):
        (WebCore::WebSpeechSynthesizerClientImpl::didStartSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::didFinishSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::didPauseSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::didResumeSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::speakingErrorOccurred):
        (WebCore::WebSpeechSynthesizerClientImpl::wordBoundaryEventOccurred):
        (WebCore::WebSpeechSynthesizerClientImpl::sentenceBoundaryEventOccurred):
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.h: Added.
        (WebCore):
        (WebSpeechSynthesizerClientImpl):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeaking:]):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::PlatformSpeechSynthesizerMock):
        (WebCore::PlatformSpeechSynthesizerMock::speakingFinished):
        (WebCore::PlatformSpeechSynthesizerMock::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        (PlatformSpeechSynthesizerMock):

2013-03-23  Daniel Cheng  <dcheng@chromium.org>

        [Qt] editing/pasteboard/can-read-in-dragstart-event.html and /can-read-in-copy-and-cut-events.html are crashing
        https://bugs.webkit.org/show_bug.cgi?id=113126

        Reviewed by Ryosuke Niwa.

        The ClipboardQt implementation only allows reading or writing, not both. Attempting to read
        when the clipboard is only writable will lead to a crash since the corresponding member will
        be null. To prevent crashes, change the asserts to early returns. In the long term, the
        correct fix is to unify the m_readableData and m_writableData members.

        No new tests since no functionality in Qt port should change.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::types):
        (WebCore::ClipboardQt::files):

2013-03-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Regression] webkit_dom_html_table_element_insert_row returns value that doesn't pass WEBKIT_DOM_IS_HTML_TABLE_ROW_ELEMENT macro
        https://bugs.webkit.org/show_bug.cgi?id=111714

        Reviewed by Martin Robinson.

        Add custom kit implementation for HTMLElements so that the HTML
        wrappers are used in that case instead of wrapHTMLElement.

        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::kit):
        (WebKit):
        * bindings/gobject/WebKitDOMBinding.h:
        (WebCore):
        (WebKit):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (UsesManualKitImplementation):

2013-03-23  David Kilzer  <ddkilzer@apple.com>

        Revert "BUILD FIX (r146667): ResourceRequest constructor in SynchronousLoaderClient.cpp is ambiguous on iOS"

        This is platform-agnositic code, so the previous solution won't work.

        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::willSendRequest):

2013-03-23  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r146667): ResourceRequest constructor in SynchronousLoaderClient.cpp is ambiguous on iOS

        Fixes the following build failure:

            Source/WebCore/platform/network/SynchronousLoaderClient.cpp:52:15: error: conversion from 'int' to 'const WebCore::ResourceRequest' is ambiguous
                request = 0;
                          ^
            In file included from Source/WebCore/platform/network/SynchronousLoaderClient.cpp:30:
            In file included from Source/WebCore/platform/network/ResourceHandle.h:37:
            In file included from Source/WebCore/platform/network/ios/QuickLook.h:13:
            Source/WebCore/platform/network/cf/ResourceRequest.h:79:9: note: candidate constructor
                    ResourceRequest(NSURLRequest *);
                    ^
            Source/WebCore/platform/network/cf/ResourceRequest.h:83:9: note: candidate constructor
                    ResourceRequest(CFURLRequestRef cfRequest)
                    ^
            1 error generated.

        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::willSendRequest): If
        USE(CFNETWORK) is defined, use static_cast<CFURLRequestRef>(0),
        otherwise use static_cast<NSURLRequest *>(0).

2013-03-23  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r146687): setDefaultMIMEType() is unused in ResourceHandleCFNet.cpp on iOS

        Fixes the following build failure:

            Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:98:13: error: unused function 'setDefaultMIMEType' [-Werror,-Wunused-function]
            static void setDefaultMIMEType(CFURLResponseRef response)
                        ^
            1 error generated.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::setDefaultMIMEType): Add #if !PLATFORM(MAC)/#endif
        guard.

2013-03-21  Kiran Muppala  <cmuppala@apple.com>

        Add runtime setting for hidden page DOM timer throttling and CSS animation suspension
        https://bugs.webkit.org/show_bug.cgi?id=112308

        Reviewed by Gavin Barraclough.

        No new tests.  Only adding settings to enable/disable existing features
        and hence existing tests suffice.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::setVisibilityState): Check if DOM timer throttling
        and CSS animation suspension are enabled before turning them on.
        (WebCore::Page::hiddenPageDOMTimerThrottlingStateChanged): Start or stop
        DOM timer throttling based on page visibility and the new setting state.
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged): Ditto
        for CSS animation suspension.
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize the flags for enabling hidden
        page DOM timer throttling and CSS animation suspension to false.
        (WebCore::Settings::setHiddenPageDOMTimerThrottlingEnabled): Update flag
        and notify page that the state of the setting has changed.
        (WebCore::Settings::setHiddenPageCSSAnimationSuspensionEnabled): Ditto.
        * page/Settings.h:
        (WebCore::Settings::hiddenPageDOMTimerThrottlingEnabled):
        (WebCore::Settings::hiddenPageCSSAnimationSuspensionEnabled):

2013-03-22  Benjamin Poulain  <bpoulain@apple.com>

        Remove 2 bad branches from StringHash::equal() and CaseFoldingHash::equal()
        https://bugs.webkit.org/show_bug.cgi?id=113003

        Reviewed by Eric Seidel.

        Fix two unfortunate use of StringHash and use the correct StringImpl function.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::threadSafeEqual):
        * html/parser/HTMLTreeBuilderSimulator.cpp:
        (WebCore::tokenExitsSVG):

2013-03-22  Andy Estes  <aestes@apple.com>

        Set the cache partition property on CFURLRequests
        https://bugs.webkit.org/show_bug.cgi?id=113116

        Patch by Jeffrey Pfau
        Reviewed by David Kilzer.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2013-03-22  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] content-sized row tracks with percentage logical height grid items don't resolve properly
        https://bugs.webkit.org/show_bug.cgi?id=113085

        Reviewed by Tony Chang.

        The core issue is that because overrideContainingBlockLogicalHeight() is unset in
        logicalContentHeightForChild, RenderBox::computePercentageLogicalHeight would try to
        resolve percentage logical height against the grid element (wrong containing block
        as a grid item's containing block is the grid area).

        Tests: fast/css-grid-layout/grid-item-multiple-minmax-content-resolution.html
               fast/css-grid-layout/grid-item-with-percent-height-in-auto-height-grid-resolution.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):
        Set our override logical height to -1, so that we don't try to constrain a grid item's logical height
        based on resolving (badly) its percentage.

2013-03-19  Zhenyao Mo  <zmo@google.com>

        Check WEBGL_draw_buffers requirements before exposing the extension
        https://bugs.webkit.org/show_bug.cgi?id=112359

        Reviewed by Kenneth Russell.

        * html/canvas/EXTDrawBuffers.cpp:
        (WebCore::EXTDrawBuffers::supported): call satisfies*().
        (WebCore::EXTDrawBuffers::drawBuffersEXT):
        (WebCore):
        (WebCore::EXTDrawBuffers::satisfiesWebGLRequirements): check WebGL requirements.
        * html/canvas/EXTDrawBuffers.h:
        (EXTDrawBuffers):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::getDrawBuffer):
        (WebCore):
        * html/canvas/WebGLFramebuffer.h:
        (WebGLFramebuffer):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::validateFramebufferFuncParameters):
        (WebCore::WebGLRenderingContext::getMaxDrawBuffers):
        (WebCore::WebGLRenderingContext::getMaxColorAttachments):
        (WebCore::WebGLRenderingContext::setBackDrawBuffer):
        (WebCore::WebGLRenderingContext::restoreCurrentFramebuffer):
        (WebCore::WebGLRenderingContext::restoreCurrentTexture2D):
        (WebCore::WebGLRenderingContext::supportsDrawBuffers): a cached version of EXTDrawBuffers::supports()
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):

2013-03-22  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix AppleWin port following https://bugs.webkit.org/show_bug.cgi?id=113100.
        Patch by Alexey Proskuryakov.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):

2013-03-22  Tony Chang  <tony@chromium.org>

        REGRESSION (r146272): layout issues for flex boxes that have -webkit-flex-wrap: wrap
        https://bugs.webkit.org/show_bug.cgi?id=113071

        Reviewed by Ojan Vafai.

        The refactor in r139535 introduced this bug, where a variable name wasn't updated properly.
        In combination with r146272, this bug became more visible when nesting multiline flexboxen.

        Test: css3/flexbox/multiline-min-preferred-width.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths): We want the width of the widest
        flexitem, the value in m_minPreferredWidth isn't relevant. Also update the comment for max
        preferred width.

2013-03-22  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Clamp css_MixColor before the blending and compositing steps
        https://bugs.webkit.org/show_bug.cgi?id=113088

        Reviewed by Dean Jackson.

        The blending and compositing operations from the spec [1] expect that they are operating on
        valid color inputs, in the range [0.0, 1.0]. Thus, we should clamp the css_MixColor input to
        this range to avoid implementation-dependent behavior for invalid color inputs.

        [1]: https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blending

        Tests: css3/filters/custom/custom-filter-clamp-css-mix-color-negative.html
               css3/filters/custom/custom-filter-clamp-css-mix-color.html

        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::rewriteMixFragmentShader):
            Clamp css_MixColor as clampedMixColor before using it in the blending and compositing
            steps.

2013-03-19  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add WebCoreDOM to the gyp build
        https://bugs.webkit.org/show_bug.cgi?id=112737

        Reviewed by Nico Weber.

        * WebCore.gyp/WebCoreGTK.gyp: Add WebCoreDOM to the gyp build.

2013-03-19  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add WebCoreHTML to the gyp build
        https://bugs.webkit.org/show_bug.cgi?id=112727

        Reviewed by Nico Weber.

        * WebCore.gyp/WebCoreGTK.gyp: Add support for building all files under
        the HTML directory. This includes splitting off common WebCore dependencies
        into an aggregate target and adding a top-level WebCore target.

2013-03-22  Tim Horton  <timothy_horton@apple.com>

        Plugin Snapshotting: Auto-start dominant plugins
        https://bugs.webkit.org/show_bug.cgi?id=113111
        <rdar://problem/13475726>

        Reviewed by Dean Jackson.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        Acknowledge the new "Restarting" DisplayState.
        * html/HTMLPlugInElement.h:
        Rename PlayingWithPendingMouseClick to RestartingWithPendingMouseClick for accuracy.
        Add "Restarting" DisplayState, so we can be aware that the plugin is intentionally restarting and not re-snapshot it.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Remove m_isPrimarySnapshottedPlugIn.
        (WebCore::classNameForShadowRoot): Remove m_isPrimarySnapshottedPlugIn.
        (WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn): Restart the plugin when it becomes primary.
        (WebCore::HTMLPlugInImageElement::updateSnapshotInfo): Remove m_isPrimarySnapshottedPlugIn.
        (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
        Move the plugin to Restarting unless it's already marked as PendingMouseClick.
        (WebCore::HTMLPlugInImageElement::simulatedMouseClickTimerFired): Match the PlayingWithPendingMouseClick rename.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Don't snapshot if we're restarting.
        * html/HTMLPlugInImageElement.h: Remove m_isPrimarySnapshottedPlugIn.
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paint): Acknowledge the new "Restarting" DisplayState.
        (WebCore::RenderSnapshottedPlugIn::getCursor): Acknowledge the new "Restarting" DisplayState.
        (WebCore::RenderSnapshottedPlugIn::handleEvent): Match the PlayingWithPendingMouseClick rename.

2013-03-19  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add support for building the WebCore bindings to the gyp build
        https://bugs.webkit.org/show_bug.cgi?id=112638

        Reviewed by Nico Weber.

        Add targets, actions, and rules for building the WebCore bindings. This is
        the first part of the WebCoreGTK build.

        * WebCore.gyp/ConvertFileToHeaderWithCharacterArray.gypi: Added.
        * WebCore.gyp/MakeNames.gypi: Added.
        * WebCore.gyp/WebCoreGTK.gyp: Added WebCore bindings build. This has been adapted
        from the Chromium build.
        * WebCore.gypi: Updated list of derived sources files and added a parameter
        for adjusting the location of the built files. We don't want to force the
        Mac build to change, but we'd still like to reuse the scripts that the
        Chromium build uses.

2013-03-22  Dane Wallinga  <dgwallinga@chromium.org>

        Add client callbacks to notify of changes of associated from controls
        https://bugs.webkit.org/show_bug.cgi?id=110375

        Reviewed by Ryosuke Niwa.

        Hook FormAssociatedElement, HTMLFormElement to notify EditorClient of form changes after a page has loaded.
        Will be used to add autofill support for ajax-y webpages. e.g if while filling out a form, new fields
        are dynamically created, autofill can know to re-query the autofill server and keep going.
        https://bugs.webkit.org/show_bug.cgi?id=110375

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::didAssociateFormControl):
        (WebCore):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * dom/Document.h:
        (Document):
        added method didAssociateFormControl, which batches form changes
        and calls out to ChromeClient on a timer.
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::resetFormOwner):
        (WebCore::FormAssociatedElement::formAttributeChanged):
        (WebCore):
        * html/FormAssociatedElement.h:
        (FormAssociatedElement):
        add calls to Document::didAssociateFormControl when form changes
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::insertedInto):
        (WebCore):
        * html/HTMLFormElement.h:
        add call to Document::didAssociateFormControl
        * loader/EmptyClients.h:
        (EmptyChromeClient):
        (WebCore::EmptyChromeClient::didAssociateFormControls):
        (WebCore::EmptyChromeClient::shouldNotifyOnFormChanges):
        * page/ChromeClient.h:
        (ChromeClient):
        add new method didAssociateFormControls

2013-03-22  Alexey Proskuryakov  <ap@apple.com>

        Split ResourceHandleMac into multiple files
        https://bugs.webkit.org/show_bug.cgi?id=113100

        Reviewed by Geoff Garen.

        It's grown too big to navigate, and I'm going to make WebCoreResourceHandleAsDelegate
        substantially more complicated yet.

        1. Mechanically moved WebCoreResourceHandleAsDelegate into separate files.
        2. Refactored WebCoreSynchronousLoaderClient to be cross-platform, and moved it into
        separate files.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/SynchronousLoaderClient.cpp: Added.
        * platform/network/SynchronousLoaderClient.h: Added.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/mac/SynchronousLoaderClient.mm: Added.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.h: Added.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm: Added.

2013-03-21  Geoffrey Garen  <ggaren@apple.com>

        Added a setting for whether JavaScript markup is enabled
        https://bugs.webkit.org/show_bug.cgi?id=112999

        Reviewed by Maciej Stachowiak.

        This setting is useful for clients that want protection from script
        injection attacks.

        * page/Settings.h:
        (Settings): Clarified which clients should call canExecuteScripts().

        * page/Settings.in: Added the new setting.

2013-03-22  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2013-03-22  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Force kill gcc-3.exe during bindings generation tests to avoid process hangs.

        This problem is occuring on the WinEWS bots where there are somehow multiple gcc-3 processes existing at the same time.
        This is a speculative fix. There should only be 1 gcc-3.exe process running at a time ever.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2013-03-22  Eric Carlson  <eric.carlson@apple.com>

        Cleanup text track selection logic
        https://bugs.webkit.org/show_bug.cgi?id=113062

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::userIsInterestedInThisTrackKind): Remove.
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Don't look at track attributes directly,
            use captionPreferences->textTrackSelectionScore to calculate track rank.
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible): Set m_processingPreferenceChange here
            instead of in captionPreferencesChanged.
        (WebCore::HTMLMediaElement::captionPreferencesChanged): Don't suppress calls to setClosedCaptionsVisible,
            existing code already makes sure we don't do unnecessary work.
        * html/HTMLMediaElement.h:

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Drive by cleanup, don't
            process inactive cues.

        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::changedClosedCaptionsVisibility): Call resetTrackListMenu instead
            of updateDisplay so we only mark the menu as needing a recalculation and do the work when
            it is displayed.

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::shouldShowCaptions): When in testing mode, return true if
            the caption or subtitle preference has been set.
        (WebCore::CaptionUserPreferences::setShouldShowCaptions): In testing mode, clear the caption
            and subtitle preference when passed false.
        (WebCore::CaptionUserPreferences::textTrackSelectionScore): Calculate the track score based on
            track type preference and preferred language.
        (WebCore::CaptionUserPreferences::textTrackLanguageSelectionScore): Score a track according to
            the language presence and position in the preferred languages list.
        * page/CaptionUserPreferences.h:

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::textTrackSelectionScore): Calculate track language score 
            according to user preferences.

        * platform/Language.cpp:
        (WebCore::indexOfBestMatchingLanguageInList): Repurposed the static bestMatchingLanguage
            function to return the location of a language in a Vector.
        (WebCore::preferredLanguageFromList): Removed.
        * platform/Language.h:

2013-03-22  ChangSeok Oh  <changseok.oh@collabora.com>

        Build fix for TransformationMatrix
        https://bugs.webkit.org/show_bug.cgi?id=113087

        Reviewed by Martin Robinson.

        This is a trivial build fix for clutter ac backend. Clutter AC backend doesn't use
        TextureMapper so there is nowhere including TransformationMatrix.h.
        For the reason, we include it explicitly.

        No new tests because of no functionality change.

        * platform/graphics/clutter/GraphicsContext3DPrivate.cpp:
        * platform/graphics/clutter/GraphicsContext3DPrivate.h:
        (WebCore):

2013-03-22  Steve Block  <steveblock@chromium.org>

        Coordinates.idl lacks Conditional=GEOLOCATION
        https://bugs.webkit.org/show_bug.cgi?id=112949

        Reviewed by Steve Block.

        No new tests, build optimization only.

        * page/Coordinates.idl: Added GEOLOCATION conditional guard.

2013-03-22  Daniel Cheng  <dcheng@chromium.org>

        Data store should be readable in dragstart/copy/cut events
        https://bugs.webkit.org/show_bug.cgi?id=23695

        Reviewed by Tony Chang.

        There were several events where data could be written but not read back due to the fact that
        different Clipboard method implementations checked permissions inconsistently. This patch
        adds helper methods to check if an operation is permitted on a Clipboard and refactors all
        direct comparisons against Clipboard::m_policy to use the new helpers instead. This fixes
        several bugs where Clipboard::types and Clipboard::getData are not usable inside the
        aforementioned events.

        Tests: editing/pasteboard/can-read-in-copy-and-cut-events.html
               editing/pasteboard/can-read-in-dragstart-event.html

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::canReadTypes): Formerly restricted to ClipboardReadable and
                                            ClipboardTypesReadable; now allows ClipboardWritable as
                                            well.
        (WebCore::Clipboard::canReadData): Formerly restricted to ClipboardReadable; now allows
                                           ClipboardWritable as well.
        (WebCore::Clipboard::canWriteData):
        (WebCore::Clipboard::canSetDragImage):
        (WebCore::Clipboard::hasFileOfType):
        (WebCore::Clipboard::hasStringOfType):
        (WebCore::Clipboard::setDropEffect):
        (WebCore::Clipboard::setEffectAllowed):
        * dom/Clipboard.h:
        (Clipboard):
        * platform/blackberry/ClipboardBlackBerry.cpp:
        (WebCore::ClipboardBlackBerry::clearData):
        (WebCore::ClipboardBlackBerry::clearAllData):
        (WebCore::ClipboardBlackBerry::getData):
        (WebCore::ClipboardBlackBerry::setData):
        (WebCore::ClipboardBlackBerry::types):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::DataTransferItemPolicyWrapper::kind):
        (WebCore::DataTransferItemPolicyWrapper::type):
        (WebCore::DataTransferItemPolicyWrapper::getAsString):
        (WebCore::DataTransferItemPolicyWrapper::getAsFile):
        (WebCore::ClipboardChromium::clearData):
        (WebCore::ClipboardChromium::clearAllData):
        (WebCore::ClipboardChromium::getData):
        (WebCore::ClipboardChromium::setData):
        (WebCore::ClipboardChromium::types):
        (WebCore::ClipboardChromium::files):
        (WebCore::ClipboardChromium::setDragImage):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::clearData):
        (WebCore::ClipboardGtk::clearAllData):
        (WebCore::ClipboardGtk::getData):
        (WebCore::ClipboardGtk::setData):
        (WebCore::ClipboardGtk::types):
        (WebCore::ClipboardGtk::files):
        (WebCore::ClipboardGtk::setDragImage):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::clearData):
        (WebCore::ClipboardMac::clearAllData):
        (WebCore::ClipboardMac::getData):
        (WebCore::ClipboardMac::setData):
        (WebCore::ClipboardMac::types):
        (WebCore::ClipboardMac::files):
        (WebCore::ClipboardMac::setDragImage):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::types):
        (WebCore::ClipboardQt::files):
        (WebCore::ClipboardQt::setDragImage):
        (WebCore::ClipboardQt::items):
        * platform/qt/DataTransferItemListQt.cpp:
        (WebCore::DataTransferItemListQt::length):
        (WebCore::DataTransferItemListQt::item):
        (WebCore::DataTransferItemListQt::deleteItem):
        (WebCore::DataTransferItemListQt::clear):
        (WebCore::DataTransferItemListQt::add):
        * platform/qt/DataTransferItemQt.cpp:
        (WebCore::DataTransferItemQt::getAsString):
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::clearData):
        (WebCore::ClipboardWin::clearAllData):
        (WebCore::ClipboardWin::getData):
        (WebCore::ClipboardWin::setData):
        (WebCore::ClipboardWin::types):
        (WebCore::ClipboardWin::files):
        (WebCore::ClipboardWin::setDragImage):

2013-03-22  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Remove pushLayoutState(RenderFlowThread*) from RenderView
        https://bugs.webkit.org/show_bug.cgi?id=113084

        Reviewed by Dirk Schulze.

        Remove void pushLayoutState(RenderFlowThread*, bool regionsChanged) from RenderView.h because it's not used.

        Tests: Code cleanup. No tests needed.

        * rendering/RenderView.h:
        (RenderView):

2013-03-22  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] Fix build issues to enable CSS Filter and Shaders support.
        https://bugs.webkit.org/show_bug.cgi?id=111274

        Reviewed by Noam Rosenthal.

        This is in preperation to enable CSS Filter and Shaders support.
        This patch fixes related build issues to enable the support.

        * platform/graphics/surfaces/efl/GLTransportSurface.cpp:
        * platform/graphics/texmap/TextureMapper.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:

2013-03-22  Matt Falkenhagen  <falken@chromium.org>

        Implement isEnabledFormControl() for SliderThumbElement and SpinButtonElement in terms of disabled()
        https://bugs.webkit.org/show_bug.cgi?id=112993

        Reviewed by Kent Tamura.

        This is an intermediate step for refactoring Node::disabled and
        Element::isEnabledFormControl. All classes that override
        isEnabledFormControl just return !disabled(), except for
        SliderThumbElement and SpinButtonElement. This patch changes those two
        classes to do so, which shows that the two functions are redundant and
        easy to refactor into a single function in a subsequent patch.

        No new tests, there should be no behavior change.

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::disabled):
        (WebCore):
        (WebCore::SliderThumbElement::isEnabledFormControl):
        * html/shadow/SliderThumbElement.h:
        (SliderThumbElement):
        * html/shadow/SpinButtonElement.h: The check of shadowHost() is
        necessary because it can be detached by JavaScript that runs during
        event handling (see r76566)

2013-03-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] New fast/text/word-space-with-kerning-3.html fails on Qt.
        https://bugs.webkit.org/show_bug.cgi?id=112668

        Reviewed by Jocelyn Turcotte.

        Qt adds word-spacing to leading spaces, but WebCore only expects
        us to add for trailing spaces. We only corrected for this in width
        calculation but do need to also do it for drawing.

        Instead of subtracting the extra word-spacing we now configure the
        FormatRange not to apply to leading spaces. This means this behavior
        will be applied everywhere reliably.

        * platform/graphics/Font.h:
        (Font):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::initFormatForTextLayout):

2013-03-22  Joshua Bell  <jsbell@chromium.org>

        REGRESSION (r146540?): Crashes in storage/indexeddb/factory-basics-workers.html, storage/indexeddb/transaction-error.html
        https://bugs.webkit.org/show_bug.cgi?id=113019

        Reviewed by Tony Chang.

        Also manifesting flakily under Chromium's content_shell. It's an ASSERT being hit in
        the IDBTransaction destructor. The cause was r146540 which allows a stopped context
        to reclaim script wrappers. This allows the IDBTransaction to be deref'd at times where
        it previously would have just leaked. Modulate the destructor assertions to account
        for this case.

        No new tests; failures already manifest as flaky crashes in some ports.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::~IDBTransaction): If context is stopped, expected state
        transitions/cleanup may not have occurred before destructor runs.

2013-03-22  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Histogram available disk space on attempt to open database
        https://bugs.webkit.org/show_bug.cgi?id=112862

        Reviewed by Tony Chang.

        ChromeOS suspects they might be hitting disk corruption when the disks
        are nearly full. This patch logs the available space to either the
        "success" or the "fail" histogram as appropriate so that the
        distributions can be compared.

        No new tests - I don't know of a good way to test histograms. Local
        printf testing didn't turn up any bugs.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::HistogramFreeSpace):
        (WebCore):
        (WebCore::LevelDBDatabase::open):

2013-03-22  Nate Chapin  <japhet@chromium.org>

        REGRESSION (r146239): Reproducible crash in WebCore::DocumentLoader::responseReceived.
        https://bugs.webkit.org/show_bug.cgi?id=112811

        Reviewed by Brady Eidson.

        Test: http/tests/cache/x-frame-options-304.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::switchClientsToRevalidatedResource):
        * loader/cache/CachedRawResource.h:

2013-03-22  Jer Noble  <jer.noble@apple.com>

        REGRESSION: -webkit-box-reflect does not show on video elements
        https://bugs.webkit.org/show_bug.cgi?id=112397

        Reviewed by Eric Carlson.

        Work around the ASSERTs generated when setting an AVPlayerLayer's player property
        during a CA flush by setting the player property during the next runloop, outside
        of a CA flush.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::clone):

2013-03-22  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Performance fix, avoid loading cookie file on every request.
        https://bugs.webkit.org/show_bug.cgi?id=113023

        Reviewed by Brent Fulgham.

        We currently load the cookie file on every request, and when setting cookies from JavaScript, by using the option CURLOPT_COOKIEFILE.
        This is very inefficient as the cookie file can get quite large, and file I/O is slow.
        It is sufficient to load the cookie file on startup, as we use a shared cookie database between the requests.

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::setCookiesFromDOM): Avoid loading cookie file when setting cookies from JavaScript.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle): Avoid loading cookie file on every request.
        (WebCore::ResourceHandleManager::initCookieSession): Load the cookie file to shared database on startup.

2013-03-22  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update Input field Background Color
        https://bugs.webkit.org/show_bug.cgi?id=113063

        Reviewed by George Staikos.

        RIM PR 307463.
        Internally reviewed by Ed Baker.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintTextFieldOrTextAreaOrSearchField):

2013-03-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: FlameChart. Draw function names over flame chart bar if they fit into the bar.
        https://bugs.webkit.org/show_bug.cgi?id=113052

        Reviewed by Vsevolod Vlasov.

        The draw function will draw the bar title if the text is less than bar width.
        Unfortunately almost all the projects which need to be profiled
        use long function names with dots. So if the function name has dots and
        doesn't fit into the space then prepareTitle will try to drop the prefix before dot.
        If the title has no dots then the function will strip the tail of the title.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype.draw):
        (WebInspector.FlameChart.prototype._prepareTitle):

2013-03-22  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Add "hidden" attribute to the recently added APIs in Inspector.json
        https://bugs.webkit.org/show_bug.cgi?id=113061

        Added "hidden": true to the APIs introduced since version 1.0.

        Reviewed by Pavel Feldman.

        * inspector/Inspector.json:

2013-03-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Correctly implement scrollToLine, revealLine and setSelection on CodeMirror  editor.
        https://bugs.webkit.org/show_bug.cgi?id=113028

        Reviewed by Pavel Feldman.

        Added focus event handler to CodeMirror editor view elememnt to support inspector's focus model.
        Added selection and scroll listeners to correctly save editor scroll and selection in history.
        Implemented revealLine, scrollToLine and setSelection.
        Note: CodeMirror's coordsChar method does not work correctly in "local" mode, implemented as binary search
        as a temporary workaround.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        (WebInspector.CodeMirrorTextEditor.prototype.defaultFocusedElement):
        (WebInspector.CodeMirrorTextEditor.prototype._handleElementFocus):
        (WebInspector.CodeMirrorTextEditor.prototype.revealLine):
        (WebInspector.CodeMirrorTextEditor.prototype._coordsChar):
        (WebInspector.CodeMirrorTextEditor.prototype._topScrolledLine):
        (WebInspector.CodeMirrorTextEditor.prototype._bottomScrolledLine):
        (WebInspector.CodeMirrorTextEditor.prototype._scroll):
        (WebInspector.CodeMirrorTextEditor.prototype._selectionChange):
        (WebInspector.CodeMirrorTextEditor.prototype.scrollToLine):
        (WebInspector.CodeMirrorTextEditor.prototype.setSelection):
        (WebInspector.CodeMirrorTextEditor.prototype.copyRange):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.copyRange):

2013-03-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Editor scroll is not restored after inspector reload.
        https://bugs.webkit.org/show_bug.cgi?id=113027

        Reviewed by Pavel Feldman.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.wasShown):
        (WebInspector.SourceFrame.prototype._isEditorShowing):
        (WebInspector.SourceFrame.prototype._innerHighlightLineIfNeeded):
        (WebInspector.SourceFrame.prototype._innerRevealLineIfNeeded):
        (WebInspector.SourceFrame.prototype._innerScrollToLineIfNeeded):
        (WebInspector.SourceFrame.prototype._innerSetSelectionIfNeeded):

2013-03-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Fix build with OPENCL 1.2
        https://bugs.webkit.org/show_bug.cgi?id=113056

        Reviewed by Kenneth Rohde Christiansen.

        Switch qmake checks to the modern style which means we can enable OpenCL with
        WEBKIT_CONFIG+=opencl. 

        Upgrade OpenCL 1.1 clCreateImage2D to OpenCL 1.2 clCreateImage calls.

        * Target.pri:
        * WebCore.pri:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::createOpenCLImageResult):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:
        (WebCore::FilterContextOpenCL::createOpenCLImage):

2013-03-22  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Opacity animation doesn't work with clutter backend
        https://bugs.webkit.org/show_bug.cgi?id=110347

        Reviewed by Gustavo Noronha Silva.

        The static casting in ternary operator doesn't change actual inputted argument type.
        So I replaced it with if-else statement.

        Covered by existing animation tests.

        * platform/graphics/clutter/PlatformClutterAnimation.cpp:
        (WebCore::PlatformClutterAnimation::addClutterTransitionForProperty):
        (WebCore::PlatformClutterAnimation::addClutterKeyframeTransitionForProperty):

2013-03-22  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Add removing animations procedure with clutter ac backend
        https://bugs.webkit.org/show_bug.cgi?id=110607

        Reviewed by Gustavo Noronha Silva.

        This changes is based on mac port implementation. The only different thing is
        that updateAnimations is called explicitly in destructor of GraphicsLayerClutter
        to remove uncommitted animations. Because even though we call notifyFlushRequired
        to remove existing animations in removeAnimation(), removeClutterAnimationFromLayer
        has been never reached since the root layer is destroyed before. It means
        that we haven't lost a change to remove actual animations from clutterActor.

        Covered by existing animation tests.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::~GraphicsLayerClutter):
        (WebCore::GraphicsLayerClutter::removeAnimation):
        (WebCore):
        (WebCore::GraphicsLayerClutter::removeClutterAnimationFromLayer):
        * platform/graphics/clutter/GraphicsLayerClutter.h:
        (WebCore::GraphicsLayerClutter::animationIsRunning):
        (GraphicsLayerClutter):

2013-03-22  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Optimize AlphaOp for HTMLVideoElement input.
        https://bugs.webkit.org/show_bug.cgi?id=113049

        Reviewed by Kenneth Rohde Christiansen.

        Covered by existing tests.

        Changeset 137397 implemented optimisation to avoid any
        unnecessary Unmultiply or Premultiply operation in unpack/pack
        provided the Image source is from HTMLVideoElement. This patch
        enables the same for EFL port.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

2013-03-22  Tommy Widenflycht  <tommyw@google.com>

        Clean up the speech recognintion API
        https://bugs.webkit.org/show_bug.cgi?id=112916

        Reviewed by Adam Barth.

        This patch cleans away deprecated parts, fixes so that stop() can be called more than once and adds
        the missing emma attribute on SpeechRecognitionEvent (which is always null).

        Patch covered by existing tests.

        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::stopFunction):
        (WebCore::SpeechRecognition::abort):
        (WebCore::SpeechRecognition::didEnd):
        (WebCore::SpeechRecognition::SpeechRecognition):
        * Modules/speech/SpeechRecognition.h:
        (SpeechRecognition):
        * Modules/speech/SpeechRecognitionEvent.cpp:
        (WebCore::SpeechRecognitionEvent::createResult):
        (WebCore::SpeechRecognitionEvent::createNoMatch):
        (WebCore::SpeechRecognitionEvent::SpeechRecognitionEvent):
        * Modules/speech/SpeechRecognitionEvent.h:
        (WebCore):
        (SpeechRecognitionEventInit):
        (SpeechRecognitionEvent):
        (WebCore::SpeechRecognitionEvent::emma):
        * Modules/speech/SpeechRecognitionEvent.idl:

2013-03-22  Emil A Eklund  <eae@chromium.org>

        Floor cell widths in AutoTableLayout::recalcColumn
        https://bugs.webkit.org/show_bug.cgi?id=112922

        Reviewed by Levi Weintraub.

        Table cells widths are floored to ensure even distribution of available
        space across columns. The code path that computes the width of the
        _table_ failed to take this into account and thus can over report the
        total width of the table.

        Test: fast/sub-pixel/table-with-subpixel-cell-size.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn): Floor width to match column sizing logic.

2013-03-22  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r146208): Export shouldPrintExceptions methods for iOS

        Fixes the following build failure:

            Undefined symbols for architecture i386:
              "__ZN7WebCore11PageConsole24setShouldPrintExceptionsEb", referenced from:
                    +[WebCoreStatistics setShouldPrintExceptions:] in WebCoreStatistics.o
              "__ZN7WebCore11PageConsole21shouldPrintExceptionsEv", referenced from:
                    +[WebCoreStatistics shouldPrintExceptions] in WebCoreStatistics.o
            ld: symbol(s) not found for architecture i386
            clang: error: linker command failed with exit code 1 (use -v to see invocation)

        * WebCore.exp.in: Move symbols so they're exported for iOS as
        well.

2013-03-22  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium Win compilation after r146583.

        * bindings/v8/CustomElementHelpers.cpp:
        (WebCore::CustomElementHelpers::invokeReadyCallbackIfNeeded):

2013-03-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Chart has to be zoomed around the mouse pointer.
        https://bugs.webkit.org/show_bug.cgi?id=113031

        Reviewed by Yury Semikhatsky.

        Overview grid is able to zoom around the mouse pointer.
        So the simplest way is to translate x coordinate of the mouse pointer hovered over the chart
        to x coordinate in term of overview window and pass it to the zoom function.

        Minor unrelated fix: draw small border at bottom of the overview grid.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart.prototype._onMouseWheel):
        * inspector/front-end/OverviewGrid.js:
        (WebInspector.OverviewGrid.prototype.zoom):
        * inspector/front-end/flameChart.css:
        (#flame-chart-overview-container):

2013-03-22  No'am Rosenthal  <noam@webkit.org>

        [Texmap] TextureMapperImageBuffer should not use rendering code for filters.
        https://bugs.webkit.org/show_bug.cgi?id=113040

        Reviewed by Kenneth Rohde Christiansen.

        Disable TextureMapperImageBuffer filters, until they can be done the right way.
        This should only disrupt accelerated filters in fallback mode, which is a very rare
        use case.

        No new testable functionality.

        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):

2013-03-22  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: Report more CSS errors
        https://bugs.webkit.org/show_bug.cgi?id=113022

        Reviewed by Pavel Feldman.

        Reporting next few CSS syntax errors in declaration_list.

        * css/CSSGrammar.y.in:

2013-03-18  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use individual samples to construct CPU profile flame chart
        https://bugs.webkit.org/show_bug.cgi?id=112569

        Reviewed by Pavel Feldman.

        Added an optional array of samples to the CPU profile returned over the
        protocol. Each sample is id of the profile node corresponding to the top frame
        of the sample's stack trace. The array of samples if present is used to draw
        the flame chart on the CPU profile panel, otherwise flame chart is drawn based
        on the aggregated profile data.

        * bindings/js/ScriptProfile.cpp:
        (WebCore::ScriptProfile::buildInspectorObjectForSamples):
        * bindings/js/ScriptProfile.h:
        (ScriptProfile):
        * bindings/v8/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        (WebCore):
        (WebCore::ScriptProfile::buildInspectorObjectForSamples):
        * bindings/v8/ScriptProfile.h:
        (ScriptProfile):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::start):
        * inspector/Inspector.json:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getCPUProfile):
        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileView.prototype._getCPUProfileCallback):
        (WebInspector.CPUProfileView.prototype._buildIdToNodeMap):
        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart.prototype._calculateTimelineData):

2013-03-22  Steve Block  <steveblock@chromium.org>

        Use generated bindings for the Coordinates type used by Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=112975

        Reviewed by Kentaro Hara.

        No new tests, refactoring only.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/geolocation/Coordinates.cpp: Renamed from Source/WebCore/bindings/js/JSCoordinatesCustom.cpp.
        (WebCore):
        (WebCore::Coordinates::altitude):
        (WebCore::Coordinates::altitudeAccuracy):
        (WebCore::Coordinates::heading):
        (WebCore::Coordinates::speed):
        * Modules/geolocation/Coordinates.h:
        (Coordinates):
        * Modules/geolocation/Coordinates.idl:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/v8/custom/V8CoordinatesCustom.cpp: Removed.

2013-03-22  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Incomplete datetime format should fallback to default
        https://bugs.webkit.org/show_bug.cgi?id=113005

        Reviewed by Kent Tamura.

        Use fallback format when datetime format from locale is not complete.

        Tests: fast/forms/date-multiple-fields/date-multiple-fields-fallback-format.html
               fast/forms/datetime-multiple-fields/datetime-multiple-fields-fallback-format.html
               fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-fallback-format.html
               fast/forms/month-multiple-fields/month-multiple-fields-fallback-format.html
               fast/forms/time-multiple-fields/time-multiple-fields-fallback-format.html
               fast/forms/week-multiple-fields/week-multiple-fields-fallback-format.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (DateTimeFormatValidator): A helper class that parses datetime format and tests existence of fields.
        (WebCore::DateTimeFormatValidator::DateTimeFormatValidator):
        (WebCore::DateTimeFormatValidator::visitField):
        (WebCore::DateTimeFormatValidator::validateFormat): Parses datetime format and validates by calling BaseMultipleFieldsDateAndTimeInputType::isValidFormat.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue): Checks if dateTimeFormat is valid, and uses fallback format if not.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Declare isValidFormat.
        * html/DateInputType.cpp:
        (WebCore::DateInputType::isValidFormat): Added.
        * html/DateInputType.h:
        (DateInputType):
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::isValidFormat): Added.
        * html/DateTimeInputType.h:
        (DateTimeInputType):
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::isValidFormat): Added.
        * html/DateTimeLocalInputType.h:
        (DateTimeLocalInputType):
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::isValidFormat): Added.
        * html/MonthInputType.h:
        (MonthInputType):
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::isValidFormat): Added.
        * html/TimeInputType.h:
        (TimeInputType):
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::isValidFormat): Added.
        * html/WeekInputType.h:
        (WeekInputType):

2013-03-22  Hajime Morrita  <morrita@google.com>

        Custom Elements: "readyCallback" lifecycle callback should be called.
        https://bugs.webkit.org/show_bug.cgi?id=112538

        Reviewed by Elliott Sprehn.

        This change allows each custom element definition to hook up its instantiation,
        namely "readyCallback" lifecycle callback.

        The change has two parts:
        - 1. Tracking which Element objects to be created.
        - 2. Invoking appropriate JavaScript functions, which are readyCallback(),
          before the Element object is visible from page script.

        For 1, CustomElementRegistry maintains list of "callback
        invocaions".  Each list item ("invocation") tracks the element
        which has a lifecycle callback to be invoked. Each invocation is
        registered when - Any custom element C++ object is instantiated.
        See changes on CustomElementConstructor.cpp.

        This also happens when @is attribute is set by the parser or node
        cloning routine, which can turn a non-custom element into a
        type-extended custom element. See changes on Element.cpp.

        For 2, CustomElementRegistry basically follows what
        MutationObserver is doing, and introduces a method called
        deliverLifecycleCallbacks(). This function flushes all pending
        callback invocations. You can think it as a dual of
        MutationObserver::deliverAllMutations().

        The delivery function is called places where MutationObserver's
        deliverAllMutations() is called. In addition, it is also called
        just before returning from a set of DOM APIs. For example, it is
        called just before createElement() returns, so that possibly
        created custom element becomes ready through its readyCallback().
        Such APIs get "V8DeliverCustomElementCallbacks" IDL attribute. In
        principle, APIs which can create new custom element instnaces are
        marked. See CustomElementRegistry::CallbackDeliveryScope and
        changes on CodeGeneratorV8.pm.

        We need this extra work because the readyCallback() needs to give
        an illusion so that JavaScript programmers feel like the
        readyCallback() callback being called just after it is created,
        instead of called on arbitrary late timing like MutationObserver
        notifications.

        Tests: fast/dom/custom/lifecycle-ready-createElement-recursion.html
               fast/dom/custom/lifecycle-ready-createElement-reentrancy.html
               fast/dom/custom/lifecycle-ready-creation-api.html
               fast/dom/custom/lifecycle-ready-innerHTML.html
               fast/dom/custom/lifecycle-ready-parser-only.html
               fast/dom/custom/lifecycle-ready-parser-script.html
               fast/dom/custom/lifecycle-ready-paste.html

        * bindings/scripts/CodeGeneratorV8.pm:
        - Hooked up CallbackDeliveryScope through V8DeliverCustomElementCallbacks attriute.
        (GenerateCustomElementInvocationScopeIfNeeded):
        (GenerateNormalAttrSetter):
        (GenerateFunction):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/v8/CustomElementHelpers.cpp:
        (WebCore::CustomElementHelpers::invokeReadyCallbackIfNeeded):
        (WebCore::CustomElementHelpers::invokeReadyCallbacksIfNeeded):
        * bindings/v8/CustomElementHelpers.h:
        (CustomElementHelpers):
        * bindings/v8/V8RecursionScope.cpp: Added deliverAllLifecycleCallbacks()
        (WebCore::V8RecursionScope::didLeaveScriptContext):
        * dom/CustomElementConstructor.cpp:
        (WebCore::CustomElementConstructor::createElement):
        (WebCore::CustomElementConstructor::createElementInternal):
        * dom/CustomElementConstructor.h:
        (WebCore::CustomElementConstructor::isExtended):
        (CustomElementConstructor):
        * dom/CustomElementRegistry.cpp: Adding element tracking and invocation execution.
        (WebCore::CustomElementInvocation::CustomElementInvocation):
        (WebCore::CustomElementInvocation::~CustomElementInvocation):
        (WebCore::activeCustomElementRegistries):
        (WebCore::CustomElementRegistry::~CustomElementRegistry):
        (WebCore::CustomElementRegistry::didGiveTypeExtension):
        (WebCore::CustomElementRegistry::didCreateElement):
        (WebCore::CustomElementRegistry::activate):
        (WebCore::CustomElementRegistry::deactivate):
        (WebCore::CustomElementRegistry::deliverLifecycleCallbacks):
        (WebCore::CustomElementRegistry::deliverAllLifecycleCallbacks):
        * dom/CustomElementRegistry.h:
        (CustomElementInvocation):
        (WebCore::CustomElementInvocation::element):
        (CallbackDeliveryScope):
        (WebCore::CustomElementRegistry::CallbackDeliveryScope::CallbackDeliveryScope):
        (WebCore::CustomElementRegistry::CallbackDeliveryScope::~CallbackDeliveryScope):
        (CustomElementRegistry):
        (WebCore::CustomElementRegistry::deliverAllLifecycleCallbacksIfNeeded):
        * dom/Document.cpp:
        (WebCore::Document::createElement):
        (WebCore::Document::didCreateCustomElement):
        * dom/Document.h:
        (Document):
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::attributeChangedFromParserOrByCloning): Added to catch @is attribute
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        * dom/Node.idl:
        * dom/ShadowRoot.idl:
        * html/HTMLElement.idl:
        * html/parser/HTMLScriptRunner.cpp: Added deliverAllLifecycleCallbacks()
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::runScript):

2013-03-22  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Finalize the RTCPeerConnection states
        https://bugs.webkit.org/show_bug.cgi?id=112792

        Reviewed by Adam Barth.

        This patch finalized the RTCPeerConnection state and events. These changes
        have not yet pushed out to the editors draft; but they are uncontroversial
        and agreed upon.

        readyState will be deleted; please use the replacement signalingState which is already available.
        onstatechange -> onsignalingstatechange
        onicechange -> oniceconnectionstatechange
        ongatheringchange will be deleted since oniceconnectionstatechange can be used for the same purpose.
        RTCIceConnectionState::"starting" -> RTCIceConnectionState::"new"

        Patch covered by modified tests.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::iceConnectionState):
        (WebCore::RTCPeerConnection::changeSignalingState):
        (WebCore::RTCPeerConnection::changeIceGatheringState):
        (WebCore::RTCPeerConnection::changeIceConnectionState):
        * Modules/mediastream/RTCPeerConnection.h:
        (RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.idl:
        * dom/EventNames.h:
        (WebCore):
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:

2013-03-22  Mike West  <mkwst@chromium.org>

        Prefer 'KURL(ParsedURLString, String)' when dealing with known-good data.
        https://bugs.webkit.org/show_bug.cgi?id=112965

        Reviewed by Alexey Proskuryakov.

        In https://bugs.webkit.org/show_bug.cgi?id=112783#c6, Adam noted that
        it would be possible to use 'KURL(ParsedURLString, [url])' rather than
        'KURL(KURL(), [url])', since we knew that the URL in question is a
        value and absolute URL. This patch fixes the obvious instances of this
        pattern; there are several more 'KURL(KURL(), String)' calls in
        WebCore but these were the only places I was reasonably sure that bad
        data couldn't creep in.

        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):
            'documentURI' is pulled from 'url()->string()'. It's safe.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
        (WebCore::ContentSecurityPolicy::reportViolation):
            'CallFrame::sourceURL()' is a known valid/absolute URL.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):
        (WebCore::SecurityOrigin::create):
            The strings constructed here are certainly valid.

2013-03-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. move overview window when user scrolls the chart.
        https://bugs.webkit.org/show_bug.cgi?id=113014

        Reviewed by Yury Semikhatsky.

        I found that I could use scaling mechanics in OverviewGrid for scaling the chart.
        But the dragging part was not so simple due to the different approaches in
        OverviewGrid and FlameChart. OverviewGrid used _windowLeft and _windowRight
        when FlameChart used _xOffset and _xScaleFactor and width.
        It was not practical and I rewrote the FlameChart mechanics
        and now it also uses _windowLeft _windowRight.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.Calculator.prototype._updateBoundaries):
        (WebInspector.FlameChart.Calculator.prototype.computePosition):
        (WebInspector.FlameChart.prototype._onWindowChanged):
        (WebInspector.FlameChart.prototype._startCanvasDragging):
        (WebInspector.FlameChart.prototype._canvasDragging):
        (WebInspector.FlameChart.prototype._onMouseMove):
        (WebInspector.FlameChart.prototype._onMouseWheel):
        (WebInspector.FlameChart.prototype._coordinatesToNodeIndex):
        (WebInspector.FlameChart.prototype._drawOverviewCanvas):
        (WebInspector.FlameChart.prototype.draw):
        (WebInspector.FlameChart.prototype._updateBoundaries):
        (WebInspector.FlameChart.prototype.update):
        * inspector/front-end/OverviewGrid.js:
        (WebInspector.OverviewGrid.prototype.setWindowPosition):
        (WebInspector.OverviewGrid.prototype.setWindow):
        (WebInspector.OverviewGrid.prototype.addEventListener):
        (WebInspector.OverviewGrid.prototype.zoom):
        (WebInspector.OverviewGrid.Window.prototype._zoom):
        * inspector/front-end/inspectorCommon.css:
        (.overview-grid-window-rulers):

2013-03-22  Steve Block  <steveblock@chromium.org>

        Move GeolocationClient.h to Modules/geolocation/
        https://bugs.webkit.org/show_bug.cgi?id=112997

        Reviewed by Kentaro Hara.

        No new tests, no functional change.

        * GNUmakefile.list.am:
        * Modules/geolocation/GeolocationClient.h: Renamed from Source/WebCore/page/GeolocationClient.h.
        (WebCore):
        (GeolocationClient):
        (WebCore::GeolocationClient::~GeolocationClient):
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-03-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146534 and r146565.
        http://trac.webkit.org/changeset/146534
        http://trac.webkit.org/changeset/146565
        https://bugs.webkit.org/show_bug.cgi?id=113017

        "r146534 caused perf regression on Chromium Linux x64"
        (Requested by yurys on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter):
        (GenerateOverloadedFunction):
        (GenerateFunctionCallback):
        (GenerateFunction):
        (GenerateParametersCheck):
        (GenerateSingleConstructorCallback):
        (GenerateNonStandardFunction):
        (GenerateImplementation):
        (GenerateFunctionCallString):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore):
        * bindings/v8/CustomElementHelpers.cpp:
        * bindings/v8/CustomElementHelpers.h:
        (WebCore):
        (CustomElementHelpers):
        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::batchConfigureCallbacks):
        (WebCore::V8DOMConfiguration::configureTemplate):
        * bindings/v8/V8DOMConfiguration.h:
        (BatchedMethod):
        (V8DOMConfiguration):
        * bindings/v8/V8RecursionScope.cpp:
        (WebCore::V8RecursionScope::didLeaveScriptContext):
        * dom/CustomElementConstructor.cpp:
        (WebCore::CustomElementConstructor::createElement):
        * dom/CustomElementConstructor.h:
        (CustomElementConstructor):
        * dom/CustomElementRegistry.cpp:
        (WebCore::CustomElementRegistry::~CustomElementRegistry):
        * dom/CustomElementRegistry.h:
        (WebCore):
        (CustomElementRegistry):
        * dom/Document.cpp:
        (WebCore::Document::createElement):
        (WebCore::Document::registerElement):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        * dom/Element.idl:
        * dom/Node.idl:
        * dom/ShadowRoot.idl:
        * html/HTMLElement.idl:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::runScript):

2013-03-22  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [GStreamer] Memory leak in AudioFileReader::createBus()
        https://bugs.webkit.org/show_bug.cgi?id=112925

        Reviewed by Martin Robinson.

        Adopt the reference returned by g_timeout_source_new()
        to fix a memory leak.

        No new tests. No change in behavior.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus):

2013-03-22  Steve Block  <steveblock@chromium.org>

        Move page/Coordinates.[h|idl] to Modules/geolocation/
        https://bugs.webkit.org/show_bug.cgi?id=112945

        Reviewed by Kentaro Hara.

        No new tests, no functional change.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/geolocation/Coordinates.h: Renamed from Source/WebCore/page/Coordinates.h.
        (WebCore):
        (Coordinates):
        (WebCore::Coordinates::create):
        (WebCore::Coordinates::isolatedCopy):
        (WebCore::Coordinates::latitude):
        (WebCore::Coordinates::longitude):
        (WebCore::Coordinates::altitude):
        (WebCore::Coordinates::accuracy):
        (WebCore::Coordinates::altitudeAccuracy):
        (WebCore::Coordinates::heading):
        (WebCore::Coordinates::speed):
        (WebCore::Coordinates::canProvideAltitude):
        (WebCore::Coordinates::canProvideAltitudeAccuracy):
        (WebCore::Coordinates::canProvideHeading):
        (WebCore::Coordinates::canProvideSpeed):
        (WebCore::Coordinates::Coordinates):
        * Modules/geolocation/Coordinates.idl: Renamed from Source/WebCore/page/Coordinates.idl.
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-03-21  Hajime Morrita  <morrita@google.com>

        Custom Elements: "readyCallback" lifecycle callback should be called.
        https://bugs.webkit.org/show_bug.cgi?id=112538

        Reviewed by Elliott Sprehn.

        This change allows each custom element definition to hook up its instantiation,
        namely "readyCallback" lifecycle callback.

        The change has two parts:
        - 1. Tracking which Element objects to be created.
        - 2. Invoking appropriate JavaScript functions, which are readyCallback(),
          before the Element object is visible from page script.

        For 1, CustomElementRegistry maintains list of "callback
        invocaions".  Each list item ("invocation") tracks the element
        which has a lifecycle callback to be invoked. Each invocation is
        registered when - Any custom element C++ object is instantiated.
        See changes on CustomElementConstructor.cpp.

        This also happens when @is attribute is set by the parser or node
        cloning routine, which can turn a non-custom element into a
        type-extended custom element. See changes on Element.cpp.

        For 2, CustomElementRegistry basically follows what
        MutationObserver is doing, and introduces a method called
        deliverLifecycleCallbacks(). This function flushes all pending
        callback invocations. You can think it as a dual of
        MutationObserver::deliverAllMutations().

        The delivery function is called places where MutationObserver's
        deliverAllMutations() is called. In addition, it is also called
        just before returning from a set of DOM APIs. For example, it is
        called just before createElement() returns, so that possibly
        created custom element becomes ready through its readyCallback().
        Such APIs get "V8DeliverCustomElementCallbacks" IDL attribute. In
        principle, APIs which can create new custom element instnaces are
        marked. See CustomElementRegistry::CallbackDeliveryScope and
        changes on CodeGeneratorV8.pm.

        We need this extra work because the readyCallback() needs to give
        an illusion so that JavaScript programmers feel like the
        readyCallback() callback being called just after it is created,
        instead of called on arbitrary late timing like MutationObserver
        notifications.

        Tests: fast/dom/custom/lifecycle-ready-createElement-recursion.html
               fast/dom/custom/lifecycle-ready-createElement-reentrancy.html
               fast/dom/custom/lifecycle-ready-creation-api.html
               fast/dom/custom/lifecycle-ready-innerHTML.html
               fast/dom/custom/lifecycle-ready-parser-only.html
               fast/dom/custom/lifecycle-ready-parser-script.html
               fast/dom/custom/lifecycle-ready-paste.html

        * bindings/scripts/CodeGeneratorV8.pm:
        - Hooked up CallbackDeliveryScope through V8DeliverCustomElementCallbacks attriute.
        (GenerateCustomElementInvocationScopeIfNeeded):
        (GenerateNormalAttrSetter):
        (GenerateFunction):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/v8/CustomElementHelpers.cpp:
        (WebCore::CustomElementHelpers::invokeReadyCallbackIfNeeded):
        (WebCore::CustomElementHelpers::invokeReadyCallbacksIfNeeded):
        * bindings/v8/CustomElementHelpers.h:
        (CustomElementHelpers):
        * bindings/v8/V8RecursionScope.cpp: Added deliverAllLifecycleCallbacks()
        (WebCore::V8RecursionScope::didLeaveScriptContext):
        * dom/CustomElementConstructor.cpp:
        (WebCore::CustomElementConstructor::createElement):
        (WebCore::CustomElementConstructor::createElementInternal):
        * dom/CustomElementConstructor.h:
        (WebCore::CustomElementConstructor::isExtended):
        (CustomElementConstructor):
        * dom/CustomElementRegistry.cpp: Adding element tracking and invocation execution.
        (WebCore::CustomElementInvocation::CustomElementInvocation):
        (WebCore::CustomElementInvocation::~CustomElementInvocation):
        (WebCore::activeCustomElementRegistries):
        (WebCore::CustomElementRegistry::~CustomElementRegistry):
        (WebCore::CustomElementRegistry::didGiveTypeExtension):
        (WebCore::CustomElementRegistry::didCreateElement):
        (WebCore::CustomElementRegistry::activate):
        (WebCore::CustomElementRegistry::deactivate):
        (WebCore::CustomElementRegistry::deliverLifecycleCallbacks):
        (WebCore::CustomElementRegistry::deliverAllLifecycleCallbacks):
        * dom/CustomElementRegistry.h:
        (CustomElementInvocation):
        (WebCore::CustomElementInvocation::element):
        (CallbackDeliveryScope):
        (WebCore::CustomElementRegistry::CallbackDeliveryScope::CallbackDeliveryScope):
        (WebCore::CustomElementRegistry::CallbackDeliveryScope::~CallbackDeliveryScope):
        (CustomElementRegistry):
        (WebCore::CustomElementRegistry::deliverAllLifecycleCallbacksIfNeeded):
        * dom/Document.cpp:
        (WebCore::Document::createElement):
        (WebCore::Document::didCreateCustomElement):
        * dom/Document.h:
        (Document):
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::attributeChangedFromParserOrByCloning): Added to catch @is attribute
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        * dom/Node.idl:
        * dom/ShadowRoot.idl:
        * html/HTMLElement.idl:
        * html/parser/HTMLScriptRunner.cpp: Added deliverAllLifecycleCallbacks()
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::runScript):

2013-03-21  Jer Noble  <jer.noble@apple.com>

        Crash in WebCore::MediaPlayer::cachedResourceLoader + 4
        https://bugs.webkit.org/show_bug.cgi?id=112977

        Reviewed by Geoffrey Garen.

        Speculative fix for a NULL-dereference crash. MediaPlayerPrivateAVFoundationObjC is the
        sole owner of a WebCoreAVFLoaderDelegate instance. It releases this instance in its destructor,
        but it is possible that, on another thread, the AVAssetResourceLoader has already begun
        using the delegate and in so doing has retained it. By the time the delegate method is fired
        on the main thread, the MediaPlayerPrivateAVFoundationObjC owner of the delegate has already
        been deleted, and the delegate's m_callback pointer is now pointing at freed memory.

        In addition to calling -[AVAssetResourceLoader setDelegate:queue:] to avoid any not-yet-started
        delegate callbacks, MediaPlayerPrivateAVFoundationObjC should clear the WebCoreAVFLoaderDelegate
        m_callback ivar, to avoid calling into freed memory for already queued delegate callbacks.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC): Clear the m_loaderDelegate's callback pointer.
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]): Check the value of m_callback before continuing.
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]): Ditto.
        (-[WebCoreAVFLoaderDelegate setCallback:]): Added simple setter.

2013-03-21  Takashi Sakamoto  <tasak@google.com>

        XMLDocumentParser doesn't parse <template> correctly.
        https://bugs.webkit.org/show_bug.cgi?id=112328

        Reviewed by Hajime Morrita.

        XMLDocumentParser should check whether a parent node is attached or not
        when a new element is appended.

        Test: fast/dom/HTMLTemplateElement/xhtml-with-titleElement-parsing-crash.xhtml

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        m_currentNode is a parent node of newElement, but it is updated by
        pushCurrentNode. So firstly stored copied m_curretNode's value into
        local currentNode and used the currentNode to check whether
        newElement's parent is attached or not.

2013-03-21  David Grogan  <dgrogan@chromium.org>

        Unreviewed, rolling out r146560.
        http://trac.webkit.org/changeset/146560
        https://bugs.webkit.org/show_bug.cgi?id=112862

        invalid parameter to histogram

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::open):

2013-03-21  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Histogram available disk space on attempt to open database
        https://bugs.webkit.org/show_bug.cgi?id=112862

        Reviewed by Adam Barth.

        ChromeOS suspects they might be hitting disk corruption when the disks
        are nearly full. This patch logs the available space to either the
        "success" or the "fail" histogram as appropriate so that the
        distributions can be compared.

        No new tests - I don't know of a good way to test histograms. Local
        printf testing didn't turn up any bugs.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::HistogramFreeSpace):
        (WebCore):
        (WebCore::LevelDBDatabase::open):

2013-03-21  Li Yin  <li.yin@intel.com>

        FileAPI: Remove deprecation warning when ArrayBuffer is in Blob constructor.
        https://bugs.webkit.org/show_bug.cgi?id=88389

        Reviewed by Kenneth Russell.

        Spec: http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob
        Both ArrayBuffer and ArrayBufferView should be supported for Blob constructor.

        Test: fast/files/blob-constructor.html.

        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCustom):
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append): Remove the deprecated warning.
        * fileapi/WebKitBlobBuilder.h:
        (WebCore):
        (BlobBuilder):

2013-03-21  Takashi Sakamoto  <tasak@google.com>

        [Shadow]: @host styles are not applied dynamically
        https://bugs.webkit.org/show_bug.cgi?id=112869

        Reviewed by Elliott Sprehn.

        Need to add features of @host @-rules to rule feature set.

        Test: fast/dom/shadow/athost-apply-dynamically.html

        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::collectFeaturesTo):

2013-03-21  Hayato Ito  <hayato@chromium.org>

        [Shadow] Provide an api of insertionParent().
        https://bugs.webkit.org/show_bug.cgi?id=112866

        Add insertinParent binding to Element and Text.
        It's prefixed (webkitInsertionParent) and guarded by SHADOW_DOM flag.

        The bug in the Shadow DOM spec is here:
        https://www.w3.org/Bugs/Public/show_bug.cgi?id=21067

        Reviewed by Dimitri Glazkov.

        Test: fast/dom/shadow/insertion-parent.html

        * dom/Element.idl:
        * dom/Node.cpp:
        (WebCore::Node::insertionParentForBinding):
        (WebCore):
        * dom/Node.h:
        (Node):
        * dom/Text.idl:

2013-03-21  Tom Sepez  <tsepez@chromium.org>

        Bypass XSSAuditor for asp.net servers.
        https://bugs.webkit.org/show_bug.cgi?id=112235

        Reviewed by Adam Barth.

        Similar to https://bugs.webkit.org/show_bug.cgi?id=81283, but the 
        fix to that bug failed to cover this particular comma-splicing case.
        
        Test: http/tests/security/xssAuditor/img-tag-with-comma.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::isTerminatingCharacter):
        Beware of comma-splicing tricks by stopping at commas.

2013-03-21  Brady Eidson  <beidson@apple.com>

        If a previously loaded resource is later stored to the disk cache, replace the buffer with MMAP'ed memory.
        <rdar://problem/13414154> and https://bugs.webkit.org/show_bug.cgi?id=112943

        Reviewed by Geoff Garen.

        No new tests (No change in behavior.)

        Give SharedBuffer the ability to replace its contents from another SharedBuffer:
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer:: tryReplaceContentsWithPlatformBuffer):

        Forward along SharedBuffer's new ability to ResourceBuffer:
        * loader/mac/ResourceBuffer.mm:
        (WebCore::ResourceBuffer:: tryReplaceSharedBufferContents):
        * loader/ResourceBuffer.h:

        Give CachedResource the ability to replace its encoded data buffer if appropriate:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource:: tryReplaceEncodedData):
        * loader/cache/CachedResource.h:

        * WebCore.exp.in:

2013-03-21  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Ensure script wrappers can be collected after context is stopped
        https://bugs.webkit.org/show_bug.cgi?id=112976

        Reviewed by Adam Barth.

        ActiveDOMObject::hasPendingActivity is called to see if script wrappers
        can be disposed of. Once the script execution context has stopped they
        should be free to go - include this in the checks.

        No new tests - suggestions welcome.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::hasPendingActivity): Return false if stopped.
        (WebCore::IDBDatabase::stop): Don't bother calling empty super impl.
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::hasPendingActivity): Return false if stopped.
        (WebCore::IDBRequest::stop): Don't bother calling empty super impl.
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::hasPendingActivity): Return false if stopped.
        (WebCore::IDBTransaction::stop): Don't bother calling empty super impl.

2013-03-21  Russell McClellan  <russell.mcclellan@gmail.com>

        Remove upcastPointer from ActiveDOMObject constructor
        https://bugs.webkit.org/show_bug.cgi?id=112858

        Reviewed by Alexey Proskuryakov.

        Removed pesky argument to ActiveDOMObject constructor that is no longer
        used.

        No new tests (no change in behavior).

        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::BatteryManager):
        * Modules/filesystem/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::DOMFileSystem):
        * Modules/filesystem/FileWriter.cpp:
        (WebCore::FileWriter::FileWriter):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::MediaSource):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::RTCDTMFSender):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.cpp:
        (WebCore::RTCSessionDescriptionRequestImpl::RTCSessionDescriptionRequestImpl):
        * Modules/mediastream/RTCStatsRequestImpl.cpp:
        (WebCore::RTCStatsRequestImpl::RTCStatsRequestImpl):
        * Modules/mediastream/RTCVoidRequestImpl.cpp:
        (WebCore::RTCVoidRequestImpl::RTCVoidRequestImpl):
        * Modules/networkinfo/NetworkInfoConnection.cpp:
        (WebCore::NetworkInfoConnection::NetworkInfoConnection):
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationCenter):
        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::SpeechRecognition):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        * css/FontLoader.cpp:
        (WebCore::FontLoader::FontLoader):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        * dom/ActiveDOMObject.h:
        (ActiveDOMObject):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::didCreateActiveDOMObject):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::activeDOMObjects):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::FileReader):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::HTMLMarqueeElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        * loader/Prerenderer.cpp:
        (WebCore::Prerenderer::Prerenderer):
        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::SuspendableTimer):
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::AbstractWorker):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::hasPendingActivity):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):

2013-03-21  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Move NSOperationQueue out of NetworkingContext
        https://bugs.webkit.org/show_bug.cgi?id=112970

        Reviewed by Brady Eidson.

        WebCore clients do not need explicit control over what queue ResourceHandle works on,
        they just want to avoid blocking main thread.

        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::usesAsyncCallbacks): Added. The name doesn't quite
        match what ResourceHandleMac currently does, but it will very soon.

        * platform/network/NetworkingContext.h:
        (WebCore::NetworkingContext::scheduledRunLoopPairs):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::operationQueueForAsyncClients):
        (WebCore::ResourceHandle::start):

2013-03-21  Marja Hölttä  <marja@chromium.org>

        [V8] Generate specialized callbacks for the main world
        https://bugs.webkit.org/show_bug.cgi?id=112430

        Reviewed by Jochen Eisinger.

        The new specialized bindings will be faster, because they don't need to
        do the "main world, isolated world or a worker" check, but can right
        away assume that we're in the main world.

        This patch generates main world bindings for getters and setters of Node,
        Element and Document.

        No new tests (updated existing binding tests).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOverloadedFunction):
        (GenerateFunctionCallback):
        (GenerateFunction):
        (GenerateParametersCheck):
        (GenerateSingleConstructorCallback):
        (GenerateNonStandardFunction):
        (GenerateImplementation):
        (GenerateFunctionCallString):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore):
        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::batchConfigureCallbacks):
        (WebCore::V8DOMConfiguration::configureTemplate):
        * bindings/v8/V8DOMConfiguration.h:
        (BatchedMethod):
        (V8DOMConfiguration):
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.idl:

2013-03-21  Elliott Sprehn  <esprehn@chromium.org>

        Remove RenderObject::canHaveRegionStyle since nothing uses it
        https://bugs.webkit.org/show_bug.cgi?id=112973

        Reviewed by Eric Seidel.

        Nothing uses canHaveRegionStyle so we can remove it.

        * rendering/RenderObject.h:

2013-03-21  Alok Priyadarshi  <alokp@chromium.org>

        Mark GraphicsLayers as opaque when possible
        https://bugs.webkit.org/show_bug.cgi?id=70634

        Reviewed by Simon Fraser.

        Mark layers as opaque in a very simple case - any child renderer has an opaque background and covers the entire composited bounds. It is important to note that since we only consider the background, the only layer that can be marked opaque is the primary GraphicsLayer of a RenderLayer.

        Tests: compositing/contents-opaque/background-clip.html
               compositing/contents-opaque/background-color.html
               compositing/contents-opaque/body-background-painted.html
               compositing/contents-opaque/body-background-skipped.html
               compositing/contents-opaque/layer-opacity.html
               compositing/contents-opaque/layer-transform.html

        * rendering/RenderBox.cpp:
        (WebCore::skipBodyBackground):
        (WebCore):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::backgroundIsKnownToBeOpaqueInRect):
        (WebCore):
        (WebCore::RenderLayer::listBackgroundIsKnownToBeOpaqueInRect):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerModelObject.h:
        (RenderLayerModelObject):
        (WebCore::RenderLayerModelObject::backgroundIsKnownToBeOpaqueInRect):

2013-03-21  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Implement a StyleCustomFilterProgram cache
        https://bugs.webkit.org/show_bug.cgi?id=112602

        Reviewed by Dean Jackson.

        When the style is recalculated, the new computed RenderStyle is saved as the m_style of the
        RenderObject, even if the style was not different.

        In the case of Custom Filters, a new StyleCustomFilterProgram was created at all times, but the
        actual equality check was done by comparing the pair of cached shaders from inside the StyleCustomFilterProgram.

        Because of that the RenderLayer::styleChanged was not called when the new StyleCustomFilterProgram was created, so it
        will end up still knowing only about the previous StyleCustomFilterProgram.

        The RenderLayer sets itself as a client of the StyleCustomFilterProgram, so that it can repaint itself
        when the program is loaded, but because RenderLayer::styleChanged is not called, it will not add itself as a client of the new
        StyleCustomFilterProgram.

        StyleCustomFilterProgram waits until the first client to load the programs, so in this case it will just remain unloaded.

        There was no crash, but just an assert in debug mode. Also, as a visible side-effect some frames were rendered using blank shaders, 
        resulting in a pass-through filter.

        The fix would be to actually make the RenderStyle::diff detect the change of the StyleCustomFilterProgram
        using the pointer value and not the values. However, that will always invalidate the "filter" property because
        of the StyleCustomFilterProgram that always gets created during the recalculation time.

        I've added StyleCustomFilterProgramCache to cache all the instances of the StyleCustomFilterPrograms that a
        StyleResolver allocates. This way, next time it will try to reuse previously allocated StyleCustomFilterPrograms. 
        The key of the cache is the CustomFilterProgramInfo, that combines the URLs to the shaders and a couple of other program settings.

        StyleCustomFilterProgramCache is owned by the StyleResovler and StyleCustomFilterPrograms are responsible with
        removing themselves from the cache when the last reference goes away.

        This change makes the previous "platform level" program cache obsolete and I will remove that in a future patch.
        https://bugs.webkit.org/show_bug.cgi?id=112844

        Test: css3/filters/custom/custom-filter-reload.html

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::lookupCustomFilterProgram): Lookup any similar programs in the cache. It will create a new pending 
        StyleCustomFilterProgram if there is no pre-cached version of the program.
        if no program is found. loadPendingShaders is responsible for adding the program in the cache if it is actually going to be used.
        (WebCore::StyleResolver::loadPendingShaders): At this point the program is final, so it's safe to add it to the cache.
        (WebCore::StyleResolver::createCustomFilterOperationWithInlineSyntax):
        * css/StyleResolver.h:
        (StyleResolver):
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::completeURL): Factored out the function to compute the complete URL of the resource.
        (WebCore::WebKitCSSShaderValue::cachedShader):
        * css/WebKitCSSShaderValue.h:
        (WebCore::toWebKitCSSShaderValue):
        (WebKitCSSShaderValue):
        * platform/graphics/filters/CustomFilterOperation.cpp:
        (WebCore::CustomFilterOperation::blend):
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::operator==): Removed. Programs should now compare by pointer. Kept it as
        private to catch any potential use of it.
        * rendering/style/StyleCustomFilterProgram.cpp: Copied from Source/WebCore/css/WebKitCSSShaderValue.h.
        (WebCore::StyleCustomFilterProgram::~StyleCustomFilterProgram): Destructor removes the program from the cache.
        * rendering/style/StyleCustomFilterProgram.h:
        (WebCore::StyleCustomFilterProgram::setVertexShader): Added an assert to check that the shader is not in the
        cache while the mutation happens. Otherwise the cache might have the wrong key.
        (WebCore::StyleCustomFilterProgram::setFragmentShader): Ditto.
        (WebCore::StyleCustomFilterProgram::isLoaded): Added more asserts to catch cases when the program is used with no clients.
        (StyleCustomFilterProgram):
        (WebCore::StyleCustomFilterProgram::hasPendingShaders):
        (WebCore::StyleCustomFilterProgram::inCache):
        (WebCore::StyleCustomFilterProgram::setCache): Function called when a program is added to / removed from the cache.
        (WebCore::StyleCustomFilterProgram::vertexShaderURL): Added methods to store the KURL that we used as keys in the cache.
        The same KURLs will be used to lookup and remove the filter at the end.
        (WebCore::StyleCustomFilterProgram::setVertexShaderURL):
        (WebCore::StyleCustomFilterProgram::fragmentShaderURL):
        (WebCore::StyleCustomFilterProgram::setFragmentShaderURL):
        (WebCore::StyleCustomFilterProgram::StyleCustomFilterProgram):
        * rendering/style/StyleCustomFilterProgramCache.cpp: Added.
        (WebCore::StyleCustomFilterProgramCache::programCacheKey):
        (WebCore::StyleCustomFilterProgramCache::StyleCustomFilterProgramCache):
        (WebCore::StyleCustomFilterProgramCache::~StyleCustomFilterProgramCache): Destructor removes itself from all the
        referenced StyleCustomFilterPrograms. This is to avoid issues with different destruction orders.
        (WebCore::StyleCustomFilterProgramCache::lookup):
        (WebCore::StyleCustomFilterProgramCache::add):
        (WebCore::StyleCustomFilterProgramCache::remove):
        * rendering/style/StyleCustomFilterProgramCache.h:
        (StyleCustomFilterProgramCache):
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h:
        (WebCore::CoordinatedCustomFilterProgram::operator==: Removed. Programs should now compare by pointer.

2013-03-21  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Ensure all API methods have IDB_TRACE macros
        https://bugs.webkit.org/show_bug.cgi?id=112963

        Reviewed by Tony Chang.

        Anntotate methods and callbacks that weren't already annotated
        with IDB_TRACE macros to assist in debugging, e.g. when using
        the chromium port's chrome://tracing visualization.

        No new tests - just harmless diagnostic sprinkles.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore): Added IDB_TRACE macro call here.
        (WebCore::IDBDatabase::deleteObjectStore): ...and here.
        (WebCore::IDBDatabase::transaction): ...etc.
        (WebCore::IDBDatabase::close):
        (WebCore::IDBDatabase::onVersionChange):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::getDatabaseNames):
        (WebCore::IDBFactory::open):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::getDatabaseNames):
        (WebCore::IDBFactoryBackendImpl::deleteDatabase):
        (WebCore::IDBFactoryBackendImpl::open):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onBlocked):

2013-03-21  Christian Biesinger  <cbiesinger@chromium.org>

        http://trac.webkit.org/changeset/146375 causing CrOS crashes
        https://bugs.webkit.org/show_bug.cgi?id=112958

        Reviewed by Adam Barth.

        Test: fast/flexbox/crash-anonymous-box.html

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
        Anonymous renderers don't have a node in their constructor, so
        don't get document() in there.

2013-03-21  Mike West  <mkwst@chromium.org>

        CSP 1.1: Fire a SecurityPolicyViolationEvent when violations occur.
        https://bugs.webkit.org/show_bug.cgi?id=112783

        Reviewed by Adam Barth.

        A new event type for Content Security Policy violations landed in
        http://wkrev.com/146305; this patch takes that stub, and wires it up to
        ContentSecurityPolicy::reportViolation such that violation events fire
        when resources are blocked.

        This should bring WebKit up to date with the current description of
        CSP's event model in sections 3.3[1] and 3.4.1.3[2] of the editor's
        draft.

        [1]: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#processing-model
        [2]: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#firing-events-using-the-securitypolicyviolationevent-interface

        Test: http/tests/security/contentSecurityPolicy/1.1/securitypolicyviolation-block-image.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::gatherSecurityPolicyViolationEventData):
            Populate a SecurityPolicyViolationEventInit object with the various
            bits of data that should be passed into the event constructor.

            This static method is strictly an implementation detail; it's not
            part of ContentSecurityPolicy's public API.
        (WebCore::ContentSecurityPolicy::reportViolation):
            Regardless of whether the policy has set a 'report-uri' directive
            or not, gather together all the data we'll need to fire an event,
            create the event, and queue it up for dispatching on the Document.

2013-03-21  Terry Anderson  <tdanderson@chromium.org>

        [chromium] Remove SK_SUPPORT_HINTING_SCALE_FACTOR flag and code
        https://bugs.webkit.org/show_bug.cgi?id=112928

        Reviewed by Stephen White.

        This flag was only for ChromeOS builds with HighDPI. It is no longer needed and can be removed. 
        See http://crbug.com/17550

        No new tests needed since this is just removing unused code.

        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp:
        (WebCore::OpaqueRectTrackingContentLayerDelegate::paintContents):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::setupPaintCommon):
        * platform/graphics/skia/PlatformContextSkia.h:

2013-03-21  Mike West  <mkwst@chromium.org>

        Drop full URLs from cross-origin access errors caused by protocol mismatches.
        https://bugs.webkit.org/show_bug.cgi?id=112894

        Reviewed by Timothy Hatcher.

        Following up on http://wkbug.com/112813, this patch brings protocol
        mismatch errors into line with the new origin-only hotness. The message
        is also changed to display the URL's protocol rather than the origin's
        protocol: it makes a big difference for 'data:' URLs, for instance.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::crossDomainAccessErrorMessage):

2013-03-21  Stephen Chenney  <schenney@chromium.org>

        SVG text path referencing parent text infinite loops
        https://bugs.webkit.org/show_bug.cgi?id=112078

        Reviewed by Philip Rogers.

        We do not check the target type when adding a resource reference for
        SVG Text Path's URI. This goes horribly wrong when the target is the
        text path's parent text element. In this patch we check that the target
        element of the text path is indeed a path element, as the spec
        requires. No other element type is allowed.

        Note that RenderSVGTextPath enforces this check in the renderer code
        also, so if we get past this check via pending resources, it doesn't
        matter. You can't get into this situation with a pending reference
        because, by definition, the parent must be defined before the text
        path child.

        Test: svg/text/textpath-referencing-text-crash.svg

        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):

2013-03-21  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove onVersionChange(string) plumbing
        https://bugs.webkit.org/show_bug.cgi?id=112712

        Reviewed by Adam Barth.

        Delete unused onVersionChange(string) overload.

        No new tests - just deleting dead code.

        * Modules/indexeddb/IDBDatabase.cpp: Delete onVersionChange(string) overload.
        * Modules/indexeddb/IDBDatabase.h: Ditto.
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: Ditto.
        * Modules/indexeddb/IDBDatabaseCallbacks.h: Ditto.
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp: Ditto.
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h: Ditto.

2013-03-21  Philip Rogers  <pdr@google.com>

        Correct bisector angle calculation for markers
        https://bugs.webkit.org/show_bug.cgi?id=112054

        Reviewed by Stephen Chenney.

        The SVG marker spec states that mid markers with orient=auto should be aligned with their
        x-axis along the bisector of the incoming (in) and outgoing (out) angles. Previously we
        calculated this bisector angle as:
            bisector = (in + out) / 2;
        Angles cannot be averaged this way! Consider in=90deg and out=-180deg: the bisector should
        be 135deg but a naive average gives -45deg. This patch corrects for the discontinuity in
        angle values with:
            bisector = (in + out + 360) / 2   // if |in - out| > 180
            bisector = (in + out) / 2         // otherwise
        This patch includes an exhaustive test of angle values.

        Test: svg/custom/marker-orient-auto.html

        * rendering/svg/SVGMarkerData.h:
        (WebCore::SVGMarkerData::currentAngle):

2013-03-21  Harald Alvestrand  <hta@google.com>

        Expose the Type field of an RTCStatsReport
        https://bugs.webkit.org/show_bug.cgi?id=112951

        Reviewed by Adam Barth.

        Covered by an extension of an existing test.

        * Modules/mediastream/RTCStatsReport.h:
        (WebCore::RTCStatsReport::type):
        * Modules/mediastream/RTCStatsReport.idl:

2013-03-21  Alexey Proskuryakov  <ap@apple.com>

        Move non-trivial virtual functions out of ResourceHandleClient.h
        https://bugs.webkit.org/show_bug.cgi?id=112950

        Reviewed by Brady Eidson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceHandleClient.cpp: Added.
        (WebCore::ResourceHandleClient::ResourceHandleClient):
        (WebCore::ResourceHandleClient::~ResourceHandleClient):
        (WebCore::ResourceHandleClient::didReceiveBuffer):
        (WebCore::ResourceHandleClient::getBuffer):
        * platform/network/ResourceHandleClient.h:

2013-03-21  Florin Malita  <fmalita@chromium.org>

        [SVG] Remove explicit LightSource dispatchers
        https://bugs.webkit.org/show_bug.cgi?id=112827

        Reviewed by Stephen Chenney.

        Convert LightSource setters to dynamic dispatch. This allows us to remove LightSource.cpp
        altogether.

        No new tests: refactoring only.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/DistantLightSource.h:
        (DistantLightSource):
        * platform/graphics/filters/LightSource.cpp: Removed.
        * platform/graphics/filters/LightSource.h:
        (WebCore::LightSource::setAzimuth):
        (WebCore::LightSource::setElevation):
        (WebCore::LightSource::setX):
        (WebCore::LightSource::setY):
        (WebCore::LightSource::setZ):
        (WebCore::LightSource::setPointsAtX):
        (WebCore::LightSource::setPointsAtY):
        (WebCore::LightSource::setPointsAtZ):
        (WebCore::LightSource::setSpecularExponent):
        (WebCore::LightSource::setLimitingConeAngle):
        * platform/graphics/filters/PointLightSource.h:
        (PointLightSource):
        * platform/graphics/filters/SpotLightSource.h:
        (SpotLightSource):

2013-03-21  Igor Oliveira  <igor.o@sisa.samsung.com>

        [Texmap] Implement support for OpenGLES EXT_unpack_subimage extension
        https://bugs.webkit.org/show_bug.cgi?id=108716

        If the extension GL_EXT_unpack_subimage is supported, it adds GL_UNPACK_ROW_LENGTH,
        GL_UNPACK_SKIP_ROWS and GL_UNPACK_SKIP_PIXELS as valid enums to PixelStore.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::driverSupportsSubImage):
        (WebCore::BitmapTextureGL::updateContentsNoSwizzle):
        (WebCore::BitmapTextureGL::updateContents):

2013-03-21  Dmitry Zvorygin  <zvorygin@chromium.org>

        Web Inspector: Regression: drawer resizes slowly with animation.
        https://bugs.webkit.org/show_bug.cgi?id=112920

        Drawer status bar opacity wasn't set to zero on inialization, so no transition event 
        was fired on first time drawer appeared,thus animation styles wasn't removed properly.

        Reviewed by Vsevolod Vlasov.

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

2013-03-21  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] GraphicsLayer: fix code that was accidentally reverted
        https://bugs.webkit.org/show_bug.cgi?id=112143

        Reviewed by Rob Buis.

        Several changes were accidentally reverted in r144465 due to the
        upstreaming of some new code:

        - clearBackgroundColor() and m_contentsLayerHasBackgroundColor had
          been removed in r137798.

        - showDebugBorders() had been renamed to isShowingDebugBorder() in
          r133517.

        - A new GraphicsLayer::create() overload had been introduced in
          r130185.

        This patch fixes them all.

        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore):
        (WebCore::GraphicsLayerBlackBerry::GraphicsLayerBlackBerry):
        (WebCore::GraphicsLayerBlackBerry::setBackgroundColor):
        (WebCore::GraphicsLayerBlackBerry::updateLayerBackgroundColor):
        (WebCore::GraphicsLayerBlackBerry::setupContentsLayer):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.h:
        (GraphicsLayerBlackBerry):

2013-03-21  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move libLevelDB.la setup into a separate GNUmakefile.am
        https://bugs.webkit.org/show_bug.cgi?id=112947

        Reviewed by Martin Robinson.

        No new tests - no new functionality.

        * GNUmakefile.am: Move the libLevelDD.la setup into the new GNUmakefile.am that's placed in
        the third-party leveldb source directory.
        * GNUmakefile.list.am: Move the LevelDB sources listing there as well.

2013-03-21  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] DrawingBuffer: add clearPlatformLayer() implementation
        https://bugs.webkit.org/show_bug.cgi?id=112696

        Reviewed by Rob Buis.

        DrawingBuffer::clearPlatformLayer() was added in r139142.

        This is not needed in the BlackBerry port, so this patch only
        contains a dummy implementation.

        * platform/graphics/blackberry/DrawingBufferBlackBerry.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::clearPlatformLayer):

2013-03-21  Florin Malita  <fmalita@chromium.org>

        [SVG] Suppress painting when an empty viewBox is specified
        https://bugs.webkit.org/show_bug.cgi?id=112623

        Reviewed by Philip Rogers.

        Per spec, elements with an empty viewBox should not be rendered:
        http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute.

        This patch adds the missing viewBox checks to RenderSVGRoot, RenderSVGViewPortContainer,
        RenderSVGResourceMarker and RenderSVGResourceMarker's paint methods.

        In order to detect the case of "viewBox present but invalid", the patch also introduces
        SVGAnimatedProperty plumbing for tracking property validity: the baseVal setter now takes
        an additional optional 'validValue' boolean parameter, which can later be queried via a
        macroed getter (LowerProperty##IsValid()).

        Test: svg/custom/viewBox-empty.html

        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::draw):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::paint):
        (WebCore):
        * rendering/svg/RenderSVGViewportContainer.h:
        (RenderSVGViewportContainer):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::hasEmptyViewBox):
        (SVGSVGElement):
        Suppress painting if a valid empty viewBox is found.

        * svg/SVGFitToViewBox.h:
        (WebCore::SVGFitToViewBox::parseAttribute):
        Mark the viewBox property as invalid if not successfully parsed.

        * svg/SVGExternalResourcesRequired.h:
        (SVGExternalResourcesRequired):
        * svg/SVGURIReference.h:
        (SVGURIReference):
        * svg/properties/SVGAnimatedPropertyMacros.h:
        (WebCore::SVGSynchronizableAnimatedProperty::SVGSynchronizableAnimatedProperty):
        (SVGSynchronizableAnimatedProperty):
        (WebCore):
        Plumbing for tracking property value validation.

2013-03-21  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Hide toolbar customization experimental setting
        https://bugs.webkit.org/show_bug.cgi?id=112942

        Reviewed by Pavel Feldman.

        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar):
        (WebInspector.Toolbar.prototype._isToolbarCustomizable):

2013-03-21  Anton Muhin  <antonm@chromium.org>

        Unreviewed, rolling out r146483.
        http://trac.webkit.org/changeset/146483
        https://bugs.webkit.org/show_bug.cgi?id=111695

        Breaks

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::boundaryEventOccurred):
        (WebCore::SpeechSynthesis::didStartSpeaking):
        (WebCore::SpeechSynthesis::didPauseSpeaking):
        (WebCore::SpeechSynthesis::didResumeSpeaking):
        (WebCore::SpeechSynthesis::didFinishSpeaking):
        (WebCore::SpeechSynthesis::speakingErrorOccurred):
        (WebCore):
        * Modules/speech/SpeechSynthesis.h:
        (SpeechSynthesis):
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::setVoice):
        * Modules/speech/SpeechSynthesisUtterance.h:
        (WebCore::SpeechSynthesisUtterance::text):
        (WebCore::SpeechSynthesisUtterance::setText):
        (WebCore::SpeechSynthesisUtterance::lang):
        (WebCore::SpeechSynthesisUtterance::setLang):
        (WebCore::SpeechSynthesisUtterance::volume):
        (WebCore::SpeechSynthesisUtterance::setVolume):
        (WebCore::SpeechSynthesisUtterance::rate):
        (WebCore::SpeechSynthesisUtterance::setRate):
        (WebCore::SpeechSynthesisUtterance::pitch):
        (WebCore::SpeechSynthesisUtterance::setPitch):
        (WebCore::SpeechSynthesisUtterance::startTime):
        (WebCore::SpeechSynthesisUtterance::setStartTime):
        (WebCore::SpeechSynthesisUtterance::platformUtterance):
        (SpeechSynthesisUtterance):
        * Modules/speech/SpeechSynthesisVoice.h:
        (SpeechSynthesisVoice):
        * WebCore.exp.in:
        * WebCore.gypi:
        * platform/PlatformSpeechSynthesis.h:
        (PlatformSpeechSynthesis):
        * platform/PlatformSpeechSynthesisUtterance.cpp:
        * platform/PlatformSpeechSynthesisUtterance.h:
        (PlatformSpeechSynthesisUtterance):
        (WebCore::PlatformSpeechSynthesisUtterance::client):
        * platform/PlatformSpeechSynthesisVoice.cpp:
        (WebCore::PlatformSpeechSynthesisVoice::create):
        (WebCore::PlatformSpeechSynthesisVoice::PlatformSpeechSynthesisVoice):
        * platform/PlatformSpeechSynthesisVoice.h:
        (PlatformSpeechSynthesisVoice):
        (WebCore::PlatformSpeechSynthesisVoice::voiceURI):
        (WebCore::PlatformSpeechSynthesisVoice::name):
        (WebCore::PlatformSpeechSynthesisVoice::lang):
        (WebCore::PlatformSpeechSynthesisVoice::localService):
        * platform/PlatformSpeechSynthesizer.cpp:
        (WebCore::PlatformSpeechSynthesizer::create):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore):
        * platform/PlatformSpeechSynthesizer.h:
        (PlatformSpeechSynthesizerClient):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (PlatformSpeechSynthesizer):
        * platform/chromium/PlatformSpeechSynthesizerChromium.cpp: Removed.
        * platform/chromium/support/WebSpeechSynthesisUtterance.cpp: Removed.
        * platform/chromium/support/WebSpeechSynthesisVoice.cpp: Removed.
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.cpp: Removed.
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.h: Removed.
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeaking:]):
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::create):
        (WebCore::PlatformSpeechSynthesizerMock::PlatformSpeechSynthesizerMock):
        (WebCore::PlatformSpeechSynthesizerMock::speakingFinished):
        (WebCore::PlatformSpeechSynthesizerMock::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        (PlatformSpeechSynthesizerMock):

2013-03-21  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Consolidate bits of willSendRequest implementation
        https://bugs.webkit.org/show_bug.cgi?id=112932

        Reviewed by Brady Eidson.

        Moved some logic from WebCoreResourceHandleAsDelegate to ResourceHandle for clarity.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):

2013-03-21  Praveen R Jadhav  <praveen.j@samsung.com>

        Remove AudioGain.idl from compilation.
        https://bugs.webkit.org/show_bug.cgi?id=112650

        Reviewed by Chris Rogers.

        Spec: https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#GainNode
              https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioBufferSourceNode

        AudioParam serves the same purpose as AudioGain. Infact, AudioGain inherits
        AudioParam class and doesn't have its own member functions/parameters. Also,
        AudioGain is not part of WebAudio W3C specifications.

        Test: webaudio/gain-basic.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        * Modules/webaudio/AudioBufferSourceNode.h:
        (AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::gain):
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioGain.h: Removed.
        * Modules/webaudio/AudioGain.idl: Removed.
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::GainNode):
        * Modules/webaudio/GainNode.h:
        (WebCore):
        (WebCore::GainNode::create):
        (GainNode):
        (WebCore::GainNode::gain):
        * Modules/webaudio/GainNode.idl:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        * Modules/webaudio/PannerNode.h:
        (WebCore::PannerNode::distanceGain):
        (WebCore::PannerNode::coneGain):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:

2013-03-21  Dominic Mazzoni  <dmazzoni@google.com>

        Implement Web Speech Synthesis for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=111695

        Reviewed by Adam Barth.

        Straightforward implementation of speech synthesis
        for Chromium by exposing interfaces for the platform
        to implement.

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::boundaryEventOccurred):
        (WebCore::SpeechSynthesis::didStartSpeaking):
        (WebCore::SpeechSynthesis::didPauseSpeaking):
        (WebCore::SpeechSynthesis::didResumeSpeaking):
        (WebCore::SpeechSynthesis::didFinishSpeaking):
        (WebCore::SpeechSynthesis::speakingErrorOccurred):
        (WebCore):
        * Modules/speech/SpeechSynthesis.h:
        (SpeechSynthesis):
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::SpeechSynthesisUtterance):
        (WebCore):
        (WebCore::SpeechSynthesisUtterance::~SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::setVoice):
        * Modules/speech/SpeechSynthesisUtterance.h:
        (SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::text):
        (WebCore::SpeechSynthesisUtterance::setText):
        (WebCore::SpeechSynthesisUtterance::lang):
        (WebCore::SpeechSynthesisUtterance::setLang):
        (WebCore::SpeechSynthesisUtterance::volume):
        (WebCore::SpeechSynthesisUtterance::setVolume):
        (WebCore::SpeechSynthesisUtterance::rate):
        (WebCore::SpeechSynthesisUtterance::setRate):
        (WebCore::SpeechSynthesisUtterance::pitch):
        (WebCore::SpeechSynthesisUtterance::setPitch):
        (WebCore::SpeechSynthesisUtterance::startTime):
        (WebCore::SpeechSynthesisUtterance::setStartTime):
        (WebCore::SpeechSynthesisUtterance::platformUtterance):
        * Modules/speech/SpeechSynthesisVoice.h:
        (WebCore::SpeechSynthesisVoice::~SpeechSynthesisVoice):
        * WebCore.exp.in:
        * WebCore.gypi:
        * platform/PlatformSpeechSynthesis.h:
        (PlatformSpeechSynthesis):
        * platform/PlatformSpeechSynthesisUtterance.cpp:
        (WebCore):
        (WebCore::PlatformSpeechSynthesisUtterance::create):
        * platform/PlatformSpeechSynthesisUtterance.h:
        (PlatformSpeechSynthesisUtterance):
        (WebCore::PlatformSpeechSynthesisUtterance::setClient):
        * platform/PlatformSpeechSynthesisVoice.cpp:
        (WebCore):
        (WebCore::PlatformSpeechSynthesisVoice::create):
        (WebCore::PlatformSpeechSynthesisVoice::PlatformSpeechSynthesisVoice):
        * platform/PlatformSpeechSynthesisVoice.h:
        (PlatformSpeechSynthesisVoice):
        (WebCore::PlatformSpeechSynthesisVoice::setVoiceURI):
        (WebCore::PlatformSpeechSynthesisVoice::setName):
        (WebCore::PlatformSpeechSynthesisVoice::setLang):
        (WebCore::PlatformSpeechSynthesisVoice::setLocalService):
        (WebCore::PlatformSpeechSynthesisVoice::setIsDefault):
        * platform/PlatformSpeechSynthesizer.cpp:
        (WebCore::PlatformSpeechSynthesizer::create):
        (WebCore::PlatformSpeechSynthesizer::setVoiceList):
        (WebCore):
        * platform/PlatformSpeechSynthesizer.h:
        (WebKit):
        (PlatformSpeechSynthesizerClient):
        (PlatformSpeechSynthesizer):
        * platform/chromium/PlatformSpeechSynthesizerChromium.cpp: Added.
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesizer::speak):
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore::PlatformSpeechSynthesizer::resume):
        (WebCore::PlatformSpeechSynthesizer::cancel):
        * platform/chromium/support/WebSpeechSynthesisUtterance.cpp: Added.
        (WebKit):
        (WebKit::WebSpeechSynthesisUtterance::WebSpeechSynthesisUtterance):
        (WebKit::WebSpeechSynthesisUtterance::operator=):
        (WebKit::WebSpeechSynthesisUtterance::assign):
        (WebKit::WebSpeechSynthesisUtterance::reset):
        (WebKit::WebSpeechSynthesisUtterance::operator PassRefPtr<PlatformSpeechSynthesisUtterance>):
        (WebKit::WebSpeechSynthesisUtterance::operator PlatformSpeechSynthesisUtterance*):
        (WebKit::WebSpeechSynthesisUtterance::text):
        (WebKit::WebSpeechSynthesisUtterance::lang):
        (WebKit::WebSpeechSynthesisUtterance::voice):
        (WebKit::WebSpeechSynthesisUtterance::volume):
        (WebKit::WebSpeechSynthesisUtterance::rate):
        (WebKit::WebSpeechSynthesisUtterance::pitch):
        (WebKit::WebSpeechSynthesisUtterance::startTime):
        * platform/chromium/support/WebSpeechSynthesisVoice.cpp: Added.
        (WebKit):
        (WebKit::WebSpeechSynthesisVoice::assign):
        (WebKit::WebSpeechSynthesisVoice::reset):
        (WebKit::WebSpeechSynthesisVoice::setVoiceURI):
        (WebKit::WebSpeechSynthesisVoice::setName):
        (WebKit::WebSpeechSynthesisVoice::setLanguage):
        (WebKit::WebSpeechSynthesisVoice::setIsLocalService):
        (WebKit::WebSpeechSynthesisVoice::setIsDefault):
        (WebKit::WebSpeechSynthesisVoice::operator PassRefPtr<WebCore::PlatformSpeechSynthesisVoice>):
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.cpp: Added.
        (WebCore):
        (WebCore::WebSpeechSynthesizerClientImpl::WebSpeechSynthesizerClientImpl):
        (WebCore::WebSpeechSynthesizerClientImpl::~WebSpeechSynthesizerClientImpl):
        (WebCore::WebSpeechSynthesizerClientImpl::setVoiceList):
        (WebCore::WebSpeechSynthesizerClientImpl::didStartSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::didFinishSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::didPauseSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::didResumeSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::speakingErrorOccurred):
        (WebCore::WebSpeechSynthesizerClientImpl::wordBoundaryEventOccurred):
        (WebCore::WebSpeechSynthesizerClientImpl::sentenceBoundaryEventOccurred):
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.h: Added.
        (WebCore):
        (WebSpeechSynthesizerClientImpl):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeaking:]):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::PlatformSpeechSynthesizerMock):
        (WebCore::PlatformSpeechSynthesizerMock::speakingFinished):
        (WebCore::PlatformSpeechSynthesizerMock::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        (PlatformSpeechSynthesizerMock):

2013-03-21  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Properly layout spanning grid items with minmax grid tracks
        https://bugs.webkit.org/show_bug.cgi?id=112389

        Reviewed by Tony Chang.

        This change updates our core minmax resolution function to be spanning grid
        items aware. The new implementation of the algorithm doesn't totally match
        the specification but it is fairly close that it's a good first pass. The
        extra complexity in the specification needs to be carefully examinated
        first (not to mention the probable change in the core layout algorithm).

        Tests: fast/css-grid-layout/minmax-spanning-resolution-columns.html
               fast/css-grid-layout/minmax-spanning-resolution-rows.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Updated this function to account for spanning grid items by:
        - iterating over all spanned grid tracks.
        - removing any used breadth from all spanned grid tracks.

2013-03-21  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [GStreamer] New reference returned by g_main_context_new() must be freed
        https://bugs.webkit.org/show_bug.cgi?id=112899

        Reviewed by Kenneth Rohde Christiansen.

        Fix a memory leak by adopting the new reference returned
        by g_main_context_new().

        No new tests. No change in behavior.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus):

2013-03-21  Carlos Garcia Campos  <cargarcia@rim.com>

        [BlackBerry] Add ScrollingCoordinatorBlackBerry implementation
        https://bugs.webkit.org/show_bug.cgi?id=112915

        Reviewed by Rob Buis.

        * PlatformBlackBerry.cmake: Add page/scrolling/blackberry to the
        indlude dir list.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create): Create a
        ScrollingCoordinatorBlackBerry for the BlackBerry platform.
        * page/scrolling/blackberry/ScrollingCoordinatorBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::ScrollingCoordinatorBlackBerry::ScrollingCoordinatorBlackBerry):
        (WebCore::ScrollingCoordinatorBlackBerry::setLayerIsContainerForFixedPositionLayers):
        (WebCore::ScrollingCoordinatorBlackBerry::setLayerIsFixedToContainerLayer):
        (WebCore::ScrollingCoordinatorBlackBerry::setLayerFixedToContainerLayerEdge):
        (WebCore::ScrollingCoordinatorBlackBerry::frameViewFrameRectDidChange):
        (WebCore::ScrollingCoordinatorBlackBerry::frameViewContentsSizeDidChange):
        * page/scrolling/blackberry/ScrollingCoordinatorBlackBerry.h: Added.
        (WebCore):
        (ScrollingCoordinatorBlackBerry):
        (WebCore::ScrollingCoordinatorBlackBerry::supportsFixedPositionLayers):
        * platform/graphics/PlatformLayer.h:
        (WebCore): Add PlatformLayer definition for BlackBerry.

2013-03-18  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: Paint rectangles shown on hover over Timeline's paint records occasionally have wrong offsets
        https://bugs.webkit.org/show_bug.cgi?id=112371

        Reviewed by Pavel Feldman.

        - pass frame to InspectorTimelineAgent::didPaint();
        - convert paint coordinates to root view.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::didPaintImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::didPaint):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didPaint):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):

2013-03-20  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: do not use inspector cookie in InspectorInstrumentation::{will,did}Paint
        https://bugs.webkit.org/show_bug.cgi?id=112787

        Reviewed by Pavel Feldman.

        - pass frame, not inspector cookie to InspectorInstrumentation::didPaint;
        - use frame to determine timeline agent in InspectorInstrumentation::didPaint.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::didPaintImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::didPaint):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):

2013-03-21  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] OOB access in RenderGrid with a grid item with negative position index
        https://bugs.webkit.org/show_bug.cgi?id=112853

        Reviewed by Tony Chang.

        This issue was caused by us casting a negative int to a size_t by mistake. This
        would make us not size the grid properly thus yielding to OOB access during the
        rest of the layout.

        Test: fast/css-grid-layout/grid-item-negative-indexes.html

        * rendering/RenderGrid.cpp:
        (WebCore::estimatedGridSizeForPosition):
        Added this helper function to do the proper estimation and checks that our
        position can be represented by a size_t.

        (WebCore::RenderGrid::maximumIndexInDirection):
        Updated to use estimatedGridSizeForPosition.

2013-03-21  Stephen White  <senorblanco@chromium.org>

        [skia] feConvolveMatrix should use accelerated path
        https://bugs.webkit.org/show_bug.cgi?id=112828

        Reviewed by James Robinson.

        Covered by layout tests css3/filters/effect-reference*.html.

        * WebCore.gypi:
        Add FEConvolveMatrixSkia.cpp to the build.
        * platform/graphics/filters/FEConvolveMatrix.h:
        Enable the skia accelerated path for feConvolveMatrix.
        * platform/graphics/filters/skia/FEConvolveMatrixSkia.cpp:
        (WebCore::FEConvolveMatrix::createImageFilter):
        Implement building/conversion from FEConvolveMatrix to
        SkMatrixConvolutionImageFilter.

2013-03-21  Martin Robinson  <mrobinson@igalia.com>

        Source/ThirdParty/leveldb/db/builder.cc does not build on systems without <endian.h>
        https://bugs.webkit.org/show_bug.cgi?id=111817

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Add the appropriate flags to the LevelDB build if we are on FreeBSD
        or OS X.

2013-03-21  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Support default grid items sizing
        https://bugs.webkit.org/show_bug.cgi?id=103333

        Reviewed by Tony Chang.

        Tests: fast/css-grid-layout/grid-auto-columns-rows-auto-flow-resolution.html
               fast/css-grid-layout/grid-auto-columns-rows-resolution.html
               fast/css-grid-layout/grid-auto-columns-rows-update.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridTrackSize):
        Core of the change: return the grid-auto-{rows|columns} instead of a pre-defined value.

        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        Fixed a latent bug: we need to iterate over the internal grid representation instead of the
        style's rows / columns as the latter doesn't account for implicit rows / columns.

2013-03-21  Adam Barth  <abarth@webkit.org>

        HTMLNames should construct strings at compile time
        https://bugs.webkit.org/show_bug.cgi?id=112831

        Reviewed by Darin Adler.

        This patch teaches make_names how to construct strings at compile time,
        eliminating a large number of startup mallocs.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_makenames.py:
            - Teach the Chromium build how to deal with Perl modules.
        * bindings/scripts/StaticString.pm: Added.
            - A Perl module for constructing static strings.
        (GenerateStrings):
        (GenerateValidateStrings):
        * dom/QualifiedName.cpp:
        (WebCore::createQualifiedName):
            - createQualifiedName now takes an already-constructed StringImpl
              object.
        * dom/QualifiedName.h:
        * dom/make_names.pl:
        (valueForName):
        (namesToStrings):
        (printNamesCppFile):
        (printDefinitions):
            - Teach make_names how to use StaticString.pm.

2013-03-21  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Implement a common GraphicsSurface Implementation.
        https://bugs.webkit.org/show_bug.cgi?id=111759

        Reviewed by Kenneth Rohde Christiansen.

        Covered by existing WebGL tests.

        This is in preparation to add transport surface support for GLES2.
        This patch makes it easy to share the core logic of using
        Transport Surface and client on GLX and GLES2 backends without
        any code duplication.

        * PlatformEfl.cmake:
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::initialize):
        (WebCore::GraphicsContext3DPrivate::releaseResources):
        (WebCore::GraphicsContext3DPrivate::prepareBuffer):
        (WebCore::GraphicsContext3DPrivate::createGraphicsSurface):
        (WebCore::GraphicsContext3DPrivate::didResizeCanvas):
        (WebCore::GraphicsContext3DPrivate::copyToGraphicsSurface):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):

        TransportSurface related code is moved to GraphicsSurfaceCommon.
        As GraphicsSurface is deleted on resize, added logic to ensure that
        current buffer is not deleted before having the shared buffer
        with correct size. This would avoid any flashing during resize.

        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createTransportSurface):
        * platform/graphics/opengl/GLPlatformSurface.h:
        * platform/graphics/surfaces/efl/GLTransportSurface.cpp: Renamed from Source/WebCore/platform/graphics/surfaces/GLTransportSurface.cpp.
        (WebCore):
        (WebCore::GLTransportSurface::GLTransportSurface):
        (WebCore::GLTransportSurface::~GLTransportSurface):
        (WebCore::GLTransportSurface::updateContents):
        (WebCore::GLTransportSurface::setGeometry):
        (WebCore::GLTransportSurface::destroy):
        (WebCore::GLTransportSurface::draw):
        (WebCore::GLTransportSurface::bindArrayBuffer):
        (WebCore::GLTransportSurface::updateTransformationMatrix):
        (WebCore::GLTransportSurface::initializeShaderProgram):
        (WebCore::GLTransportSurfaceClient::createTransportSurfaceClient):
        (WebCore::GLTransportSurfaceClient::GLTransportSurfaceClient):
        (WebCore::GLTransportSurfaceClient::~GLTransportSurfaceClient):
        (WebCore::GLTransportSurfaceClient::destroy):
        (WebCore::GLTransportSurfaceClient::prepareTexture):
        (WebCore::GLTransportSurfaceClient::createTexture):
        * platform/graphics/surfaces/efl/GLTransportSurface.h: Renamed from Source/WebCore/platform/graphics/surfaces/GLTransportSurface.h.
        (WebCore):
        (GLTransportSurface):
        (GLTransportSurfaceClient):
        (WebCore::GLTransportSurfaceClient::texture):
        (WebCore::GLTransportSurfaceClient::hasAlpha):

        Moved TransportSurface to EFL folder as this is being used by EFL port only.
        Added a base class for TransportSurfaceClient.

        * platform/graphics/surfaces/efl/GraphicsSurfaceCommon.cpp: Added.
        (WebCore):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::destroy):
        (WebCore::GraphicsSurfacePrivate::initializeTransportSurface):
        (WebCore::GraphicsSurfacePrivate::makeContextCurrent):
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
        (WebCore::GraphicsSurfacePrivate::handle):
        (WebCore::GraphicsSurfacePrivate::updateClientBuffer):
        (WebCore::GraphicsSurfacePrivate::flags):
        (WebCore::GraphicsSurfacePrivate::rect):
        (WebCore::GraphicsSurfacePrivate::size):
        (WebCore::GraphicsSurfacePrivate::textureId):
        (WebCore::GraphicsSurfacePrivate::initializeClient):
        (WebCore::GraphicsSurface::platformExport):
        (WebCore::GraphicsSurface::platformGetTextureID):
        (WebCore::GraphicsSurface::platformCopyToGLTexture):
        (WebCore::GraphicsSurface::platformCopyFromTexture):
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        (WebCore::GraphicsSurface::platformFrontBuffer):
        (WebCore::GraphicsSurface::platformSwapBuffers):
        (WebCore::GraphicsSurface::platformSize):
        (WebCore::GraphicsSurface::platformCreate):
        (WebCore::GraphicsSurface::platformImport):
        (WebCore::GraphicsSurface::platformLock):
        (WebCore::GraphicsSurface::platformUnlock):
        (WebCore::GraphicsSurface::platformDestroy):
        (WebCore::GraphicsSurface::platformBeginPaint):
        (WebCore::GraphicsSurface::createReadOnlyImage):

        GraphicsSurface implementation to be shared by both GLX and GLES2.

        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLWindowTransportSurface::EGLWindowTransportSurface):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        (EGLWindowTransportSurface):
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore):
        (WebCore::resolveGLMethods):
        (WebCore::isMesaGLX):
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXTransportSurfaceClient::GLXTransportSurfaceClient):
        (WebCore::GLXTransportSurfaceClient::~GLXTransportSurfaceClient):
        (WebCore::GLXTransportSurfaceClient::destroy):
        (WebCore::GLXTransportSurfaceClient::prepareTexture):
        * platform/graphics/surfaces/glx/GLXSurface.h:
        (GLXTransportSurface):
        (GLXTransportSurfaceClient):
        (WebCore):
        GLXTransportSurfaceClient implementation.

2013-03-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146454.
        http://trac.webkit.org/changeset/146454
        https://bugs.webkit.org/show_bug.cgi?id=112906

        compile failures (Requested by antonm on #webkit).

        * WebCore.gypi:
        * platform/graphics/filters/FEConvolveMatrix.h:
        (FEConvolveMatrix):
        * platform/graphics/filters/skia/FEConvolveMatrixSkia.cpp: Removed.

2013-03-21  Mike Reed  <reed@google.com>

        Remove obsolete conditionals around calling SkTypeface::getUnitsPerEm()
        https://bugs.webkit.org/show_bug.cgi?id=112846

        Reviewed by Stephen White.

        Existing complex-text layouttests exercise this code.

        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:
        (WebCore::FontPlatformData::emSizeInFontUnits):

2013-03-21  Stephen White  <senorblanco@chromium.org>

        [skia] feConvolveMatrix should use accelerated path
        https://bugs.webkit.org/show_bug.cgi?id=112828

        Reviewed by James Robinson.

        Covered by layout tests css3/filters/effect-reference*.html.

        * WebCore.gypi:
        Add FEConvolveMatrixSkia.cpp to the build.
        * platform/graphics/filters/FEConvolveMatrix.h:
        Enable the skia accelerated path for feConvolveMatrix.
        * platform/graphics/filters/skia/FEConvolveMatrixSkia.cpp:
        (WebCore::FEConvolveMatrix::createImageFilter):
        Implement building/conversion from FEConvolveMatrix to
        SkMatrixConvolutionImageFilter.

2013-03-21  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Refactoring: Reorganize datetime field element parameters
        https://bugs.webkit.org/show_bug.cgi?id=112877

        Reviewed by Kent Tamura.

        Before this patch, the field element constructors took minimum/maximum
        as a pair of integers, and step/stepbase as a DateTimeNumericFieldElement::Parameters.
        This patch makes these constructors to take a Range (for minimum/maximum)
        and a Step (for step/stepbase).

        No new tests. Just refactoring.

        * html/shadow/DateTimeEditElement.cpp:
        (DateTimeEditBuilder): Replaced min/max data members by Ranges.
        (WebCore::DateTimeEditBuilder::DateTimeEditBuilder):
        (WebCore::DateTimeEditBuilder::visitField):
        (WebCore::DateTimeEditBuilder::shouldAMPMFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldDayOfMonthFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldHourFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldMillisecondFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldMinuteFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldSecondFieldDisabled):
        (WebCore::DateTimeEditBuilder::createStep):
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeDayFieldElement::DateTimeDayFieldElement):
        (WebCore::DateTimeDayFieldElement::create):
        (WebCore::DateTimeHourFieldElementBase::DateTimeHourFieldElementBase):
        (WebCore::DateTimeHour11FieldElement::DateTimeHour11FieldElement):
        (WebCore::DateTimeHour11FieldElement::create):
        (WebCore::DateTimeHour12FieldElement::DateTimeHour12FieldElement):
        (WebCore::DateTimeHour12FieldElement::create):
        (WebCore::DateTimeHour23FieldElement::DateTimeHour23FieldElement):
        (WebCore::DateTimeHour23FieldElement::create):
        (WebCore::DateTimeHour24FieldElement::DateTimeHour24FieldElement):
        (WebCore::DateTimeHour24FieldElement::create):
        (WebCore::DateTimeMillisecondFieldElement::DateTimeMillisecondFieldElement):
        (WebCore::DateTimeMillisecondFieldElement::create):
        (WebCore::DateTimeMinuteFieldElement::DateTimeMinuteFieldElement):
        (WebCore::DateTimeMinuteFieldElement::create):
        (WebCore::DateTimeMonthFieldElement::DateTimeMonthFieldElement):
        (WebCore::DateTimeMonthFieldElement::create):
        (WebCore::DateTimeSecondFieldElement::DateTimeSecondFieldElement):
        (WebCore::DateTimeSecondFieldElement::create):
        (WebCore::DateTimeWeekFieldElement::DateTimeWeekFieldElement):
        (WebCore::DateTimeWeekFieldElement::create):
        * html/shadow/DateTimeFieldElements.h:
        (DateTimeDayFieldElement):
        (DateTimeHourFieldElementBase):
        (DateTimeHour11FieldElement):
        (DateTimeHour12FieldElement):
        (DateTimeHour23FieldElement):
        (DateTimeHour24FieldElement):
        (DateTimeMillisecondFieldElement):
        (DateTimeMinuteFieldElement):
        (DateTimeMonthFieldElement):
        (DateTimeSecondFieldElement):
        (DateTimeWeekFieldElement):
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore):
        (WebCore::DateTimeNumericFieldElement::DateTimeNumericFieldElement):
        (WebCore::DateTimeNumericFieldElement::roundDown):
        (WebCore::DateTimeNumericFieldElement::roundUp):
        * html/shadow/DateTimeNumericFieldElement.h:
        (WebCore::DateTimeNumericFieldElement::Step::Step): Renamed from Parameters.
        (WebCore::DateTimeNumericFieldElement::Range::Range):
        (WebCore::DateTimeNumericFieldElement::Range::isSingleton): Returns true if the range is a singleton range (i.e. contains exactly one value).
        (Range): Now it's parameter type, hence public.
        (DateTimeNumericFieldElement): Replaced two int members (m_step and m_stepBase) by a Range.

2013-03-21  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: Track CSS error location information.
        https://bugs.webkit.org/show_bug.cgi?id=111314

        Added CSS syntax error reporting to some (other rules will be covered later) error recovery grammar rules.
        Added code to CSSParser to allow track error location information.
        Added empty rule to declaration_list. Needed to not report error about declarations like "body {}".
        Added helper grammar rule "errors: error | errors error". Handles the same grammar as "error" but simplifies error location tracking.

        Reviewed by Pavel Feldman.

        Test: inspector/console/console-css-warnings.html

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::currentLocation):
        (WebCore):
        (WebCore::CSSParser::realLex):
        * css/CSSParser.h:
        (CSSParser):

2013-03-21  Sergey Ryazanov  <serya@chromium.org>

        Changing "#define YYDEBUG 0" to 1 causing compilation error
        https://bugs.webkit.org/show_bug.cgi?id=111178

        Reviewed by Pavel Feldman.

        Code that reference tokens can't be placed into CSSGrammar.yy.include because it's included before tokens defined.
        YYDEBUG can't be used in CSSGrammar.yy.in because the #define is only defined in CSSGrammar.yy.include. This
        change simplifies CSS debugging letting manipulate only #define YYDEBUG in CSSGrammar.yy.include and/or in CSSParser.cpp.

        * css/CSSGrammar.y.in:
        * css/CSSGrammar.y.includes:

2013-03-21  Nate Chapin  <japhet@chromium.org>

        Merge MainResourceLoader into DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=104969

        Reviewed by Adam Barth.

        No new tests, refactor only.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::mainResourceLoader):
        (WebCore::DocumentLoader::~DocumentLoader): Move main resource clearing from
            ~MainResourceLoader.
        (WebCore::DocumentLoader::mainResourceData):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::notifyFinished): Moved from MainResourceLoader::notifyFinished.
        (WebCore):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::continueAfterNavigationPolicy):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::reportMemoryUsage):
        (WebCore::DocumentLoader::dataReceived):
        (WebCore::DocumentLoader::clearMainResourceLoader):
        (WebCore::DocumentLoader::setDefersLoading):
        (WebCore::DocumentLoader::setMainResourceDataBufferingPolicy):
        (WebCore::DocumentLoader::addSubresourceLoader):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        (WebCore::DocumentLoader::startLoadingMainResource): Don't keep separate checks
             for normal and empty loads, just use a single boolean.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::isLoadingMainResource):
        * loader/MainResourceLoader.cpp: Removed.
        * loader/MainResourceLoader.h: Removed.
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule):
        (WebCore::DocumentLoader::unschedule):

2013-03-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. draw background for the FlameChart overview pane with the CPU aggregated data.
        https://bugs.webkit.org/show_bug.cgi?id=112823

        Reviewed by Yury Semikhatsky.

        The idea of the patch is to collect the data about stack depth for the each X
        and draw a line with help of this data.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype.onResize):
        (WebInspector.FlameChart.prototype._drawOverviewCanvas):
        (WebInspector.FlameChart.prototype.update):

2013-03-21  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Settings] Fix JS compiler warnings.
        https://bugs.webkit.org/show_bug.cgi?id=112879

        Reviewed by Pavel Feldman.

        Removed erroneous JSDoc.

        * inspector/front-end/Settings.js: Removed erroneous JSDoc.

2013-03-20  Simon Fraser  <simon.fraser@apple.com>

        Make GraphicsLayerCA::backingStoreMemoryEstimate() give a better estimate for tiled layers
        https://bugs.webkit.org/show_bug.cgi?id=112864

        Reviewed by Tim Horton.
        
        If a GraphicsLayerCA has TiledBacking, ask the TiledBacking how
        much memory it's using for tiles, rather than just using 
        height * width * 4.
        
        Implement retainedTileBackingStoreMemory() in the TileController,
        summing the memory used by parented tiles.

        The original code was incorrectly multiplying by contentsScale
        only once rather than twice (2x contents scale uses 4x as much memory).

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::backingStoreMemoryEstimate):
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::retainedTileBackingStoreMemory):

2013-03-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146419.
        http://trac.webkit.org/changeset/146419
        https://bugs.webkit.org/show_bug.cgi?id=112870

        Broke many tests on debug builds (Requested by rniwa_ on
        #webkit).

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_makenames.py:
        (main):
        * bindings/scripts/StaticString.pm: Removed.
        * dom/QualifiedName.cpp:
        (WebCore::createQualifiedName):
        * dom/QualifiedName.h:
        (WebCore):
        * dom/make_names.pl:
        (printNamesCppFile):
        (printDefinitions):

2013-03-20  Michael Pruett  <michael@68k.org>

        [JSC] Implement EnforceRange IDL attribute for integer conversions
        https://bugs.webkit.org/show_bug.cgi?id=112506

        Reviewed by Kentaro Hara.

        Implement the EnforceRange attribute for JSC bindings.

        The EnforceRange attribute requires a type error to be thrown when
        converting an ECMAScript number which is beyond the representable
        range of the IDL integer type.

        Tests: fast/js/webidl-type-mapping.html
               storage/indexeddb/cursor-advance-workers.html
               storage/indexeddb/cursor-advance.html
               storage/indexeddb/intversion-bad-parameters.html

        * WebCore.exp.in:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore):
        (WebCore::enforceRange):
        (WebCore::toInt32EnforceRange):
        (WebCore::toUInt32EnforceRange):
        (WebCore::toInt64):
        (WebCore::toUInt64):
        * bindings/js/JSDOMBinding.h:
        (WebCore::toInt32):
        (WebCore):
        (WebCore::toUInt32):
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjLongAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjId):
        (WebCore::setJSTestObjNullableLongSettableAttribute):
        (WebCore::setJSTestObjNullableStringValue):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod11):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):

2013-03-20  Hayato Ito  <hayato@chromium.org>

        Gesture events should include AllowShadowContent in hit testing
        https://bugs.webkit.org/show_bug.cgi?id=112073

        Reviewed by Dimitri Glazkov.

        Support gesture events for Shadow DOM.
        Now 'gesturetap' events can be correctly dispatched in shadow trees.

        Test: fast/dom/shadow/gesture-tap.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):

2013-03-20  Adam Barth  <abarth@webkit.org>

        HTMLNames should construct strings at compile time
        https://bugs.webkit.org/show_bug.cgi?id=112831

        Reviewed by Darin Adler.

        This patch teaches make_names how to construct strings at compile time,
        eliminating a large number of startup mallocs.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_makenames.py:
            - Teach the Chromium build how to deal with Perl modules.
        * bindings/scripts/StaticString.pm: Added.
            - A Perl module for constructing static strings.
        (GenerateStrings):
        (GenerateValidateStrings):
        * dom/QualifiedName.cpp:
        (WebCore::createQualifiedName):
            - createQualifiedName now takes an already-constructed StringImpl
              object.
        * dom/QualifiedName.h:
        * dom/make_names.pl:
        (valueForName):
        (namesToStrings):
        (printNamesCppFile):
        (printDefinitions):
            - Teach make_names how to use StaticString.pm.

2013-03-20  Matt Falkenhagen  <falken@chromium.org>

        Remove unnecessary calls to Node::disabled for <meter>, <progress>, and <output>
        https://bugs.webkit.org/show_bug.cgi?id=112767

        Reviewed by Kent Tamura.

        This is part of a refactoring to move Node::disabled to HTMLFormControlElement::disabled.
        The concept of disabled is just a form control element one.

        HTMLMeterElement, HTMLOutputElement, and HTMLProgressElement never
        have disabled() return true, so we can remove the call. In addition,
        HTMLMeterElement and HTMLProgressElement no longer inherit from
        HTMLFormControlElement, so we don't need to override supportsFocus.

        No new tests because no behavior change.

        * html/HTMLMeterElement.cpp:
        * html/HTMLMeterElement.h:
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::supportsFocus):
        * html/HTMLProgressElement.cpp:
        * html/HTMLProgressElement.h:

2013-03-20  Jaehun Lim  <ljaehun.lim@samsung.com>

        [css3-text] Parsing -webkit-each-line value for text-indent from css3-text
        https://bugs.webkit.org/show_bug.cgi?id=109021
 
        Reviewed by Julien Chaffraix.
 
        "each-line" is added for text-indent in CSS3.
        http://dev.w3.org/csswg/css3-text/#each-line
 
        This patch is the parsing part to support each-line value for text-indent.
 
        "each-line" means "Indentation affects the first line of the block
        container as well as each line after a forced line break, but does
        not affect lines after a soft wrap break."
 
        It's prefixed and guarded by CSS3_TEXT flag.
 
        Tests: fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited.html
               fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
            style.getPropertyCSSValue(text-indent) returns CSSPrimitiveValue when text-indent has only <length>
            or <percentage> value, but returns CSSValueList when text-indent also has -webkit-each-line.

        * css/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID): Removed CSSPropertyTextIndent case.
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTextIndent): Added.
        * css/CSSParser.h:
            Parsed <length> or <percentage> with -webkit-each-line for text-indent.

        * css/CSSValueKeywords.in: Added new -webkit-each-line keyword.
        * css/StyleBuilder.cpp:
        (ApplyPropertyTextIndent): Added.
        (WebCore::ApplyPropertyTextIndent::applyInheritValue):
        (WebCore::ApplyPropertyTextIndent::applyInitialValue):
        (WebCore::ApplyPropertyTextIndent::applyValue):
        (WebCore::ApplyPropertyTextIndent::createHandler):
        (WebCore::StyleBuilder::StyleBuilder):
            Added codes to handle applying text-indent offset and -webkit-each-line option to our style.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h: Added enum TextIndentLine.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h: Added m_textIndentLine.
        (StyleRareInheritedData):
            Added the usual getter / setter / initial methods for m_textIndentLine.

2013-03-20  Tien-Ren Chen  <trchen@chromium.org>

        Correct coordinated scrolling for RTL iframe and overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=112088

        Reviewed by James Robinson.

        This patch adds appropriate offset in ScrollingCoordinatorChromium to
        adjust impl-side scroll position to the range [0, maxPos - minPos].

        This also corrects RenderLayer to return correct scroll position for RTL,
        explained below:

        There are 2 commonly used scroll offset coordinate systems in WebCore.

        1. The scroll offset is the amount that needs to be translated when painting
           child elements in a RenderBox. The value can be negative when there is
           negative overflow (for RTL). The range will be within
           [overflow_top_left_corner, overflow_bottom_right_corner - client_size].
           This system is mainly used for painting and layer positioning.
           
        2. The scroll offset will be always non-negative, and the range will be within
           [0, content_size - client_size]. This system is mainly used for scrollbars.

        scrollOrigin is defined to convert between the two systems. scrollOrigin is always
        non-negative, and equivalent to -overflow_top_left_corner.

        The first system is used for ScrollableArea::scrollPosition/minimumScrollPosition/
        maximumScrollPosition function family. So is it implemented in ScrollView/Frameview.
        RenderLayer errorneously implemented scrollPosition in the second system,
        and worse, returned minimumScrollPosition/maximumScrollPosition were totally non-sense.
        This patch corrects RenderLayer to use the first coordinate system.

        Test: compositing/rtl/rtl-overflow-scrolling.html
              ScrollingCoordinatorChromiumTest.rtlIframe

        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinatorChromium::scrollableAreaScrollLayerDidChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollPosition):
        (WebCore::RenderLayer::minimumScrollPosition):
        (WebCore::RenderLayer::maximumScrollPosition):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2013-03-20  Jessie Berlin  <jberlin@apple.com>

        REGRESSION(r145592): AutodrainedPool.h. RunLoopTimer.h, SchedulePair.h are being copied into
        the wrong location
        https://bugs.webkit.org/show_bug.cgi?id=112833

        Reviewed by Darin Adler.

        Fix an incorrect include path.

        * loader/DocumentLoader.h:
        RunLoopTimer.h lives in wtf as of r145592.

2013-03-20  Kent Tamura  <tkent@chromium.org>

        Crash in Document::setFocusedNode if the frame of new focused node is detached in 'change' event handler
        https://bugs.webkit.org/show_bug.cgi?id=112653

        Reviewed by Dimitri Glazkov.

        Test: fast/frames/detach-frame-during-focus.html

        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedNode):
        A oldDocument->setFocusedNode call might dispatch a 'change' event for
        an old focused node, and an event handler code might detach the
        newFocusedFrame. So we should check it. Without the check, the following
        newDocument->setFocusedNode call would crash because of null
        Frame::page().

2013-03-20  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion in LegacyWebArchive::create() in editing tests
        https://bugs.webkit.org/show_bug.cgi?id=112642

        Reviewed by Simon Fraser.

        Address Simon's review comment. Don't convert String to MIMEType just to convert it back to String.

        * platform/mac/PasteboardMac.mm:
        (WebCore::fragmentFromWebArchive):

2013-03-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Build ANGLE sources into a separate library from libWebCore.la
        https://bugs.webkit.org/show_bug.cgi?id=112778

        Reviewed by Martin Robinson.

        No new tests - no change in functionality.

        * GNUmakefile.list.am: Remove the ANGLE sources listing, it's now placed in the ANGLE-specific GNUmakefile.am.

2011-03-20  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion in LegacyWebArchive::create() in editing tests
        https://bugs.webkit.org/show_bug.cgi?id=112642

        Reviewed by Enrica Casucci.

        It's possible for clipboard to be overriden between the time we retrieve clipboard types and the time
        we actually retrieve the Web archive buffer. Add a null check to take this into account.

        Also extracted fragmentFromWebArchive for clarity.

        * platform/mac/PasteboardMac.mm:
        (WebCore::fragmentFromWebArchive): Extracted.
        (WebCore::Pasteboard::documentFragment):

2013-03-20  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: Crash in WebCore::PlatformSpeechSynthesisUtterance::client / WebCore::SpeechSynthesis::didResumeSpeaking
        https://bugs.webkit.org/show_bug.cgi?id=112728

        Reviewed by Tim Horton.

        When cancel() is called, there was a delay in the platform returning and saying speech was finished, which caused
        the m_currentSpeechUtterance variable to get deallocated but not cleared. 

        This patch fixes up the management of the utterances in SpeechSynthesis and the Mac platform given that
        we can't rely on the platform to return immediately on a stop speaking job.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-cancel-crash.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::cancel):
        (WebCore::SpeechSynthesis::resume):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper cancel]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeaking:]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:willSpeakWord:ofString:]):

2013-03-20  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, fix Mac release build.

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::languageIdentifier):

2013-03-20  Eric Carlson  <eric.carlson@apple.com>

        Allow ports specific text track menu
        https://bugs.webkit.org/show_bug.cgi?id=112800

        Reviewed by Dean Jackson.

        No new tests, existing tests updated for changes.

        * English.lproj/Localizable.strings: Add localizable strings for text track names.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): userPrefersCaptions -> shouldShowCaptions.
        (WebCore::HTMLMediaElement::setSelectedTextTrack): toggleTrackAtIndex -> setSelectedTextTrack.
        (WebCore::HTMLMediaElement::userPrefersCaptions): userPrefersCaptions -> shouldShowCaptions.
        (WebCore::HTMLMediaElement::userIsInterestedInThisTrackKind): Get preferences from CaptionUserPreferences
            instead of from Settings.
        (WebCore::HTMLMediaElement::setSelectedTextTrack): Renamed from toggleTrackAtIndex. Now takes
            a TextTrack* instead of an int.
        (WebCore::HTMLMediaElement::captionPreferencesChanged): Don't force a recalculation unless 
            captions are enabled/disabled to avoid unnecessary thrash.
        * html/HTMLMediaElement.h:

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler): Use the menu to track
            map instead of just the track index.
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay): Build and configure the
            menu from the menu to track map.
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu): Start with a list
            of tracks already sorted according to platform specific rules. Build a menu to track map
            so tracks are retained while the menu is visible.
        * html/shadow/MediaControlElements.h:

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::textTrackPreferencesChanged): Call closedCaptionTracksChanged so the
            track menu will be rebuilt before it is shown again.

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::containsOnlyForcedSubtitles): New, passthrough to the private track.
        (WebCore::InbandTextTrack::isMainProgramContent): Ditto.
        (WebCore::InbandTextTrack::isEasyToRead): Ditto.
        * html/track/InbandTextTrack.h:
        * html/track/TextTrack.h:

        * html/track/TextTrackList.cpp:
        (WebCore::TextTrackList::contains): New.
        * html/track/TextTrackList.h:

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::CaptionUserPreferences): Pull in from .h ditto.
        (WebCore::CaptionUserPreferences::~CaptionUserPreferences): Ditto.
        (WebCore::CaptionUserPreferences::shouldShowCaptions): Renamed from userPrefersCaptions. 
        (WebCore::CaptionUserPreferences::setShouldShowCaptions): New.
        (WebCore::CaptionUserPreferences::userPrefersCaptions): Ditto.
        (WebCore::CaptionUserPreferences::setUserPrefersCaptions): Ditto.
        (WebCore::CaptionUserPreferences::userPrefersSubtitles): Ditto.
        (WebCore::CaptionUserPreferences::setUserPrefersSubtitles): Ditto.
        (WebCore::CaptionUserPreferences::userPrefersTextDescriptions): Ditto.
        (WebCore::CaptionUserPreferences::setUserPrefersTextDescriptions): Ditto.
        (WebCore::CaptionUserPreferences::displayNameForTrack): Ditto.
        (WebCore::CaptionUserPreferences::sortedTrackListForMenu): Ditto.
        * page/CaptionUserPreferences.h:

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::shouldShowCaptions): Renamed from userPrefersCaptions. 
        (WebCore::CaptionUserPreferencesMac::userPrefersCaptions): New.
        (WebCore::CaptionUserPreferences::userPrefersSubtitles): Ditto.
        (WebCore::trackDisplayName): Update logic used to build track title.
        (WebCore::CaptionUserPreferencesMac::displayNameForTrack): Call trackDisplayName.
        (WebCore::textTrackCompare): Text track title sort comparison function.
        (WebCore::CaptionUserPreferencesMac::sortedTrackListForMenu): New. Sort the list of tracks
            according to title, language, and user preferences.

        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale): Don't leak the CFLocale.
        
        * platform/LocalizedStrings.cpp:
        (WebCore::textTrackCountryAndLanguageMenuItemText): New.
        (WebCore::textTrackLanguageMenuItemText): Ditto.
        (WebCore::closedCaptionTrackMenuItemText): Ditto.
        (WebCore::sdhTrackMenuItemText): Ditto.
        (WebCore::easyReaderTrackMenuItemText): Ditto.
        * platform/LocalizedStrings.h:

        * platform/graphics/InbandTextTrackPrivate.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::containsOnlyForcedSubtitles): New, return AVFoundation property.
        (WebCore::InbandTextTrackPrivateAVFObjC::isMainProgramContent): Ditto.
        (WebCore::InbandTextTrackPrivateAVFObjC::isEasyToRead): Ditto.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setShouldDisplayTrackKind): Set setting via CaptionUserPreferences
            instead of from Settings.
        (WebCore::InternalSettings::shouldDisplayTrackKind): Get setting from CaptionUserPreferences
            instead of from Settings.

2013-03-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Clean up TemporaryLinkStubs.cpp
        https://bugs.webkit.org/show_bug.cgi?id=112820

        Reviewed by Philippe Normand.

        Clean up the TemporaryLinkStubs.cpp file, removing unnecessary includes and prettifying the code.

        No new tests - no new functionality.

        * platform/gtk/TemporaryLinkStubs.cpp:
        (WebCore):
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        (WebCore::userIdleTime):

2013-03-20  Yufeng Shen  <miletus@chromium.org>

        Remove PlatformEvent::GestureDoubleTap
        https://bugs.webkit.org/show_bug.cgi?id=93045

        Reviewed by Antonio Gomes.

        PlatformEvent::GestureDoubleTap is not currently
        used in WebCore and replaced by GestureTap with
        tap count 2, so remove it.

        Test: We are removing something that is not used, so
        no new test. All existing tests pass.

        * dom/GestureEvent.cpp:
        (WebCore::GestureEvent::create):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        * platform/PlatformEvent.h:
        * platform/chromium/PopupContainer.cpp:
        (WebCore::PopupContainer::handleGestureEvent):

2013-03-20  Ojan Vafai  <ojan@chromium.org>

        Move repaint methods from RenderObject to RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=112773

        Reviewed by Julien Chaffraix.

        repaintOverhangingFloats and repaintDuringLayoutIfMoved are only ever called
        on RenderBoxes, so don't need to be on RenderObject. This also lets us
        devirtualize repaintDuringLayoutIfMoved.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::repaintOverhangingFloats):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:

2013-03-20  Christian Biesinger  <cbiesinger@chromium.org>

        Add a feature observer for RenderDeprecatedFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=112740

        Reviewed by Tony Chang.

        No new tests - only adding measurements.

        * page/FeatureObserver.h:
        Add constants for RenderDeprecatedFlexibleBox, and add separate
        constants for its use in the UI and in extensions.
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
        Call FeatureObserver. Check the document()->url() to see which
        constant to use.

2013-03-20  Tim Horton  <timothy_horton@apple.com>

        Autosize should use documentRect height instead of scrollHeight
        https://bugs.webkit.org/show_bug.cgi?id=112770

        Reviewed by David Levin.

        Autosizing fails to compute the correct height if the root element is very
        small but the document has significant overflow.

        No new tests; autosizing is not currently exposed in a testable way on Mac.

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):

2013-03-20  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Improper repainting when grid item change their position
        https://bugs.webkit.org/show_bug.cgi?id=112749

        Reviewed by Ojan Vafai.

        Tests: fast/css-grid-layout/grid-element-change-columns-repaint.html
               fast/css-grid-layout/grid-element-change-rows-repaint.html
               fast/css-grid-layout/grid-item-change-column-repaint.html
               fast/css-grid-layout/grid-item-change-row-repaint.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):
        Added a call to repaintDuringLayoutIfMoved to repaint moving grid items.

2013-03-20  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] compositing/iframes/scroll-fixed-transformed-element.html fails in manual testing
        https://bugs.webkit.org/show_bug.cgi?id=112806

        Reviewed by Antonio Gomes.

        PR 283363

        When scrolling the iframe, the position: fixed element is correctly
        positioned, that is, as if it was fixed with respect to the iframe's
        viewport. When scrolling the main frame however, the fixed pos element
        was positioned as if it was fixed with respect to the main frame's
        viewport.

        Fixed by falling back to using the WebKit-thread scroll position for
        fixed positioning in LayerRenderer, if the override doesn't have a
        position currently set, i.e. if we are not currently scrolling the
        iframe.

        The effects of the bug are only visual, i.e. not detectable by DRT.

        Manually testable using compositing/iframes/scroll-fixed-transformed-element.html

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::updateLayersRecursive):

2013-03-20  Michael Pruett  <michael@68k.org>

        [V8] Simplify implementation of EnforceRange conversions
        https://bugs.webkit.org/show_bug.cgi?id=112758

        Reviewed by Kentaro Hara.

        Factor out EnforceRange conversion into a helper function.
        Simplify calculation for truncation.

        Tests: fast/js/webidl-type-mapping.html
               storage/indexeddb/cursor-advance.html
               storage/indexeddb/cursor-advance-workers.html
               storage/indexeddb/intversion-bad-parameters.html

        * bindings/v8/V8Binding.cpp:
        (WebCore::enforceRange):
        (WebCore):
        (WebCore::toInt32):
        (WebCore::toUInt32):
        (WebCore::toInt64):
        (WebCore::toUInt64):

2013-03-20  Harald Alvestrand  <hta@google.com>

        Remove Local/Remote and RTCStatsElement from WebRTCStats API
        https://bugs.webkit.org/show_bug.cgi?id=112678

        Reviewed by Adam Barth.

        Pure removal, remaining functionality covered by existing test.

        * Modules/mediastream/RTCStatsReport.cpp:
        * Modules/mediastream/RTCStatsReport.h:
        (RTCStatsReport):
        * Modules/mediastream/RTCStatsResponse.cpp:
        * Modules/mediastream/RTCStatsResponse.h:
        (RTCStatsResponse):
        * platform/chromium/support/WebRTCStatsResponse.cpp:
        * platform/mediastream/RTCStatsResponseBase.h:
        (RTCStatsResponseBase):

2013-03-20  Xingnan Wang  <xingnan.wang@intel.com>

        ASSERTION FAILED: !m_renderingAutomaticPullNodes.size()
        https://bugs.webkit.org/show_bug.cgi?id=112777

        Reviewed by Chris Rogers.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::~AudioContext):

2013-03-20  Rouslan Solomakhin  <rouslan@chromium.org>

        Copy-paste should not spellcheck when continuous spellcheck is turned off
        https://bugs.webkit.org/show_bug.cgi?id=112464

        Reviewed by Ryosuke Niwa.

        Test: editing/spelling/spellcheck-paste-continuous-disabled.html

        * WebCore.exp.in: Export WebCore::Editor::isContinuousSpellCheckingEnabled() and WebCore::Editor::toggleContinuousSpellChecking() for use by internals.
        * WebCore.order: Export WebCore::Editor::isContinuousSpellCheckingEnabled() and WebCore::Editor::toggleContinuousSpellChecking() for use by internals.
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment): Do not spellcheck if continuous spellcheck is turned off.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Leave continuous spellcheck turned on after a test.
        (WebCore::Internals::setContinuousSpellCheckingEnabled): Let tests enable and disable continuous spellcheck.
        (WebCore):
        * testing/Internals.h: Let tests enable and disable continuous spellcheck.
        (Internals):
        * testing/Internals.idl: Let tests enable and disable continuous spellcheck.

2013-03-20  Aaron Colwell  <acolwell@chromium.org>

        Add support for MediaSource::isTypeSupported()
        https://bugs.webkit.org/show_bug.cgi?id=112301

        Reviewed by Darin Fisher.

        Test: http/tests/media/media-source/video-media-source-is-type-supported.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer): Added isTypeSupported() call to verify parameters
                                                 pass into this method.
        (WebCore::MediaSource::isTypeSupported):
        (WebCore):
        * Modules/mediasource/MediaSource.h:
        (MediaSource):
        * Modules/mediasource/MediaSource.idl: Added isTypeSupported().
        * platform/MIMETypeRegistry.h:
        (MIMETypeRegistry): Added isSupportedMediaSourceMIMEType().
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore):
        (WebCore::MIMETypeRegistry::isSupportedMediaSourceMIMEType): Implemented in terms of WebMimeRegistry::isSupportedMediaSourceMIMEType.

2013-03-20  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed VS2010 build correction.

        * WebCore.vcxproj/WebCore.vcxproj: Enable build of NetworkStorageSessionStub.cpp
        for WinCairo port.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Correct build type of
        CookieJarCurl from 'custom' to 'C++ source file'

2013-03-20  Marja Hölttä  <marja@chromium.org>

        [V8] Rename DOMDataStore::isMainWorldObject
        https://bugs.webkit.org/show_bug.cgi?id=112817

        Reviewed by Jochen Eisinger.

        No new tests (no changes in functionality).

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::getWrapperFast):
        (WebCore::DOMDataStore::getWrapper):
        (WebCore::DOMDataStore::getWrapperForMainWorld):
        (WebCore::DOMDataStore::setWrapper):
        (WebCore::DOMDataStore::canExistInWorker):

2013-03-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Provide Overview pane for better user expirience.
        https://bugs.webkit.org/show_bug.cgi?id=112496

        Reviewed by Yury Semikhatsky.

        This patch implements basic part of Overview Pane in FlameChart.
        The idea of the patch is to move everything into chart-container element.
        And put OverviewGrid into new overview-container element.

        Drive by change: fix the layout of the flame chart elements.
        Drive by change: fix the drag window & drag resizer mechanics
        for the case when the parent element has zero offsetLeft.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.OverviewCalculator):
        (WebInspector.FlameChart.OverviewCalculator.prototype._updateBoundaries):
        (WebInspector.FlameChart.OverviewCalculator.prototype.computePosition):
        (WebInspector.FlameChart.OverviewCalculator.prototype.formatTime):
        (WebInspector.FlameChart.OverviewCalculator.prototype.maximumBoundary):
        (WebInspector.FlameChart.OverviewCalculator.prototype.minimumBoundary):
        (WebInspector.FlameChart.OverviewCalculator.prototype.boundarySpan):
        (WebInspector.FlameChart.prototype._onWindowChanged):
        (WebInspector.FlameChart.prototype._adjustXScale):
        (WebInspector.FlameChart.prototype.update):
        * inspector/front-end/OverviewGrid.js:
        (WebInspector.OverviewGrid.Window):
        (WebInspector.OverviewGrid.Window.prototype._resizerElementStartDragging):
        (WebInspector.OverviewGrid.Window.prototype._leftResizeElementDragging):
        (WebInspector.OverviewGrid.Window.prototype._rightResizeElementDragging):
        (WebInspector.OverviewGrid.Window.prototype._startWindowSelectorDragging):
        (WebInspector.OverviewGrid.Window.prototype._windowSelectorDragging):
        (WebInspector.OverviewGrid.Window.prototype._endWindowSelectorDragging):
        (WebInspector.OverviewGrid.Window.prototype._setWindowPosition):
        (WebInspector.OverviewGrid.Window.prototype._onMouseWheel):
        (WebInspector.OverviewGrid.WindowSelector):
        * inspector/front-end/TimelineOverviewPane.js:
        * inspector/front-end/flameChart.css:
        (.chart-container .item-anchor):
        (.overview-container):
        (.chart-container):
        (#flame-chart-overview-grid .resources-dividers-label-bar):
        * inspector/front-end/inspectorCommon.css:
        (.resources-divider-label):

2013-03-20  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: Plumbing CSS warnings
        https://bugs.webkit.org/show_bug.cgi?id=111334

        Reviewed by Pavel Feldman.

        Adding a framework for plumbing CSS warnings from CSSParser/grammar to the Inspector console.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::syntaxError):
        (WebCore):
        (WebCore::CSSParser::isLoggingErrors):
        (WebCore::CSSParser::logError):
        * css/CSSParser.h:
        (CSSParser):
        (CSSParser::Location):
        (WebCore):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        (WebCore::StyleSheetContents::parseString):
        (WebCore::StyleSheetContents::parseStringAtLine):
        * css/StyleSheetContents.h:
        (StyleSheetContents):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::addMessage):

2013-03-20  Justin Novosad  <junov@google.com>

        [Chromium] Code cleanup: removing support for non-deferred 2d canvas rendering
        https://bugs.webkit.org/show_bug.cgi?id=112605

        Reviewed by James Robinson.

        Deleting all the code that was used for propagating and supporting
        the Chromium setting for disabling deferred 2d canvas rendering.

        No new tests: Affected code paths covered by existing tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLCanvasElement.h:
        * page/Settings.in:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        (ImageBuffer):
        * platform/graphics/blackberry/ImageBufferBlackBerry.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/chromium/Canvas2DLayerBridge.cpp:
        (WebCore::Canvas2DLayerBridge::Canvas2DLayerBridge):
        (WebCore::Canvas2DLayerBridge::~Canvas2DLayerBridge):
        (WebCore::Canvas2DLayerBridge::prepareForDraw):
        (WebCore::Canvas2DLayerBridge::storageAllocatedForRecordingChanged):
        (WebCore::Canvas2DLayerBridge::storageAllocatedForRecording):
        (WebCore::Canvas2DLayerBridge::freeMemoryIfPossible):
        (WebCore::Canvas2DLayerBridge::flush):
        (WebCore::Canvas2DLayerBridge::skCanvas):
        (WebCore::Canvas2DLayerBridge::prepareTexture):
        (WebCore::Canvas2DLayerBridge::contextAcquired):
        * platform/graphics/chromium/Canvas2DLayerBridge.h:
        (WebCore::Canvas2DLayerBridge::create):
        (Canvas2DLayerBridge):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::createAcceleratedCanvas):
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2013-03-20  Mike West  <mkwst@chromium.org>

        Drop full URLs from cross-domain access errors caused by 'document.domain' mismatches.
        https://bugs.webkit.org/show_bug.cgi?id=112813

        Reviewed by Timothy Hatcher.

        Following up on http://wkbug.com/112042, this patch brings 'document.domain'
        mismatch error messages into line with the newly origin-only default
        message. There will probably be two or three more patches in this series
        just to keep the rebaselines down to something managably reviewable.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::crossDomainAccessErrorMessage):
            Move the default message redefinition up out of the final 'return' so
            that 'document.domain' mismatch errors grab the new text.

2013-03-20  Ken Kania  <kkania@chromium.org>

        Web Inspector: Add promptText param to Page.handleJavaScriptDialog
        https://bugs.webkit.org/show_bug.cgi?id=112706

        Reviewed by Pavel Feldman.

        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::handleJavaScriptDialog):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::handleJavaScriptDialog):
        * inspector/InspectorPageAgent.h:

2013-03-20  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix SourceFrame.js compilation warning
        https://bugs.webkit.org/show_bug.cgi?id=112804

        Reviewed by Yury Semikhatsky.

        No new tests: no change in behavior.

        - Explicitly parse lineNumber from object property name.
        - Add type annotations to ensure addMessageToSource is monomorphic.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.clearMessages):

2013-03-20  Dan Carney  <dcarney@google.com>

        [v8] unsafe persistent access in V8LazyEventListener
        https://bugs.webkit.org/show_bug.cgi?id=112807

        Reviewed by Kentaro Hara.

        No new tests.

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::toObjectWrapper):

2013-03-20  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Enable appropriate vertex attribute arrays in LayerRenderer::useProgram()
        https://bugs.webkit.org/show_bug.cgi?id=112757

        Reviewed by Rob Buis.

        PR 306465

        Make the LayerRenderer and associated code more bullet-proof when it
        comes to enabling vertex attribute arrays, by enabling them already
        when LayerRenderer::useProgram() is called. This fixes a bug where the
        video hole punch rectangle wasn't punched when preceding rendering
        caused the vertex attribute array at index 0 to be disabled, such as
        when rendering the text selection overlay immediately before video.

        A number of places where the position attribute index was hard-coded
        to 0 were also fixed. This causes no change in behavior, the position
        attribute was really at 0, but nonetheless that shouldn't be hardcoded.

        The effects of this patch are only manually testable.

        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        (WebCore::LayerCompositingThread::drawTextures):
        (WebCore::LayerCompositingThread::drawSurface):
        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::compositeBuffer):
        (WebCore::LayerRenderer::drawColor):
        (WebCore::LayerRenderer::drawDebugBorder):
        (WebCore::LayerRenderer::drawHolePunchRect):
        (WebCore::LayerRenderer::compositeLayersRecursive):
        (WebCore::LayerRenderer::useProgram):

2013-03-20  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] implement highlightRange method
        https://bugs.webkit.org/show_bug.cgi?id=112802

        Reviewed by Vsevolod Vlasov.

        - Implement highlightRange/removeHighlight methods in
        CodeMirrorTextEditor.
        - Update TextEditor interface closure annotations.

        No new tests.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor.prototype.removeHighlight):
        (WebInspector.CodeMirrorTextEditor.prototype.highlightRange):
        * inspector/front-end/DefaultTextEditor.js:
        * inspector/front-end/TextEditor.js:

2013-03-20  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] show source location for codemirror text editor
        https://bugs.webkit.org/show_bug.cgi?id=112798

        Reviewed by Vsevolod Vlasov.

        No new tests.

        - Implement CodeMirrorTextEditor.copyRange method
        - Fire "selectionChange" event for text editor delegate from
        CodeMirrorTextEditor.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        (WebInspector.CodeMirrorTextEditor.prototype.copyRange):
        (WebInspector.CodeMirrorTextEditor.prototype._cursorActivity):

2013-03-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146331.
        http://trac.webkit.org/changeset/146331
        https://bugs.webkit.org/show_bug.cgi?id=112795

        Does not work as expected (Requested by carewolf on #webkit).

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::initFormatForTextLayout):

2013-03-20  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Resources] Local Storage: "Add item" row height doesn't match underlying grid.
        https://bugs.webkit.org/show_bug.cgi?id=112433

        Reviewed by Pavel Feldman.

        Fixed cell height to correspond grid step.

        * inspector/front-end/dataGrid.css:
        (.data-grid td): Fixed cell height to correspond grid step.

2013-03-20  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] New fast/text/word-space-with-kerning-3.html fails on Qt
        https://bugs.webkit.org/show_bug.cgi?id=112668

        Reviewed by Jocelyn Turcotte.

        Kerning is on by default in Qt. This means we need to disable it
        when WebCore does not request it.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::initFormatForTextLayout):

2013-03-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: OverviewGrid rename classes according to names of js classes.
        https://bugs.webkit.org/show_bug.cgi?id=112786

        Reviewed by Yury Semikhatsky.

        It is a part of meta bug 'extract OverviewGrid from TimelineOverviewPane'.
        As the last step it renames timeline-...... classes to overview-grid-...... classes
        and moves them to inspectorCommon.css

        * inspector/front-end/OverviewGrid.js:
        (WebInspector.OverviewGrid):
        (WebInspector.OverviewGrid.Window):
        (WebInspector.OverviewGrid.Window.prototype._startWindowSelectorDragging):
        (WebInspector.OverviewGrid.WindowSelector):
        (WebInspector.OverviewGrid.WindowSelector.prototype._createSelectorElement):
        * inspector/front-end/inspectorCommon.css:
        (.overview-grid-window-selector):
        (.overview-grid-window):
        (.overview-grid-dividers-background):
        (.overview-grid-window-rulers):
        (.overview-grid-window-resizer):
        * inspector/front-end/timelinePanel.css:
        (.timeline-frame-overview .overview-grid-window):
        (.timeline-frame-overview .overview-grid-dividers-background):

2013-03-20  Dmitry Zvorygin  <zvorygin@chromium.org>

        Web Inspector: Switch Drawer animation from JavaScript to CSS transitions.
        https://bugs.webkit.org/show_bug.cgi?id=112586

        This is prerequisite to make Drawer work in overlay mode.

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer):
        (WebInspector.Drawer.prototype.show):
        (WebInspector.Drawer.prototype.hide.this.animationFinished):
        (WebInspector.Drawer.prototype.hide):
        (WebInspector.Drawer.prototype.immediatelyFinishAnimation):
        (WebInspector.Drawer.prototype._getAnimationStyles):
        * inspector/front-end/UIUtils.js:
        * inspector/front-end/inspector.css:
        (.animate-slow *):
        (.animate #main):
        (.animate #floating-status-bar-container):
        (.animate #drawer):
        (.animate #bottom-status-bar-container > *):

2013-03-19  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [DataGrid] Refactorings.
        https://bugs.webkit.org/show_bug.cgi?id=112690

        Reviewed by Pavel Feldman.

        1. Avoid using string literals;
        2. Remove unused notifications; turn "populate" to method invocation;
        3. Replace some getters with regular functions.

        * inspector/front-end/DataGrid.js: Applied refactorings.
        * inspector/front-end/ApplicationCacheItemsView.js: Adopted changes.
        * inspector/front-end/BottomUpProfileDataGridTree.js: Ditto.
        * inspector/front-end/CPUProfileView.js: Ditto.
        * inspector/front-end/CSSSelectorProfileView.js: Ditto.
        * inspector/front-end/CookiesTable.js: Ditto.
        * inspector/front-end/DirectoryContentView.js: Ditto.
        * inspector/front-end/HeapSnapshotDataGrids.js: Ditto.
        * inspector/front-end/HeapSnapshotGridNodes.js: Ditto.
        * inspector/front-end/NativeMemorySnapshotView.js: Ditto.
        * inspector/front-end/NetworkPanel.js: Ditto.
        * inspector/front-end/ProfileDataGridTree.js: Ditto.
        * inspector/front-end/ResourceWebSocketFrameView.js: Ditto.
        * inspector/front-end/TopDownProfileDataGridTree.js: Ditto.
        * inspector/front-end/dataGrid.css: Ditto.

2013-03-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Support -webkit-font-smoothing
        https://bugs.webkit.org/show_bug.cgi?id=106009

        Reviewed by Jocelyn Turcotte.

        Set QFont antialiasing settings based on the font smoothing settings in FontDescription.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2013-03-20  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Allow toolbar customization
        https://bugs.webkit.org/show_bug.cgi?id=112440

        Adds a tools menu item that allows the user to show/hide
        inspector panels on the toolbar.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/InspectorView.js:
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar):
        (WebInspector.Toolbar.prototype.addPanel):
        (WebInspector.Toolbar.prototype._isPanelVisibleByDefault):
        (WebInspector.Toolbar.prototype.set _hidePanel):
        (WebInspector.Toolbar.prototype._showPanel):
        (WebInspector.Toolbar.prototype._togglePanelsMenu):
        * inspector/front-end/inspector.css:
        (#toolbar-panels-menu):
        (#toolbar-panels-menu:hover):
        (#toolbar-panels-menu:active):
        * inspector/front-end/inspector.html:

2013-03-20  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Settings] Add "storage" parameter to WebInspector.Setting
        https://bugs.webkit.org/show_bug.cgi?id=112667

        Reviewed by Pavel Feldman.

        New parameter will allow more options on how long setting will persist.
        Possible options are: localStorage, sessionStorage and no-storage.

        Additional change: use delete instead of .removeItem to make it possible
        use any object as storage.

        * inspector/front-end/Settings.js:
        Added "storage" parameter and used is instead of "window.localStorage".

2013-03-20  Pan Deng  <pan.deng@intel.com>

        Web Inspector: [Network] Fix the bug of WebSocketFrameView crash.
        https://bugs.webkit.org/show_bug.cgi?id=112771.

        Reviewed by Pavel Feldman.

        WebSocketFrameView crashes when websocket receives an error message, this
        patch fixes this problem, and error message will be shown in dataGrid as expected.

        No new tests.

        * inspector/front-end/ResourceWebSocketFrameView.js:
        (WebInspector.ResourceWebSocketFrameView): Handle the errorMessage case.

2013-03-20  Dmitry Zvorygin  <zvorygin@chromium.org>

        Remove remainings of obsolete LogLevels and MessageSources from inspector JS part.
        https://bugs.webkit.org/show_bug.cgi?id=112709

        By the way tuned messagesources in ApplicationCacheGroup.

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.toMessageElement):
        (WebInspector.ConsoleMessageImpl.prototype.toString):
        * inspector/front-end/ConsoleModel.js:
        * inspector/front-end/ExtensionAPI.js:
        (defineCommonExtensionSymbols):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onAddConsoleMessage):
        (WebInspector.ExtensionServer.prototype._makeConsoleMessage):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):

2013-03-20  Krzysztof Czech  <k.czech@samsung.com>

        [GTK] accessibility/aria-scrollbar-role.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98358

        Reviewed by Martin Robinson.

        Adds support for checking an orientation attribute of accessibility object.
        AccessibilityObject that represents ScrollBar element should be ATK_VALUE type.
        ScrollBar element can be considered as a Range Widget that is able to expose some
        range values.

        Test: accessibility/aria-scrollbar-role.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):
        (getInterfaceMaskFromObject):

2013-03-20  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing a typo in libLevelDB_la_CFLAGS assignment - cxflags -> cflags.

        * GNUmakefile.am:

2013-03-20  Robert Hogan  <robert@webkit.org>

        Absolute position div without width specified does not reflow its text when it is moved (and computed width changes)
        https://bugs.webkit.org/show_bug.cgi?id=112052

        Reviewed by Emil A Eklund.
        
        If a positioned block has auto width then any movement means the block needs to be resized.

        Test: fast/block/positioned-block-auto-width-movement.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::positionedObjectMoved):
        (WebCore::RenderStyle::diff):

2013-03-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146301.
        http://trac.webkit.org/changeset/146301
        https://bugs.webkit.org/show_bug.cgi?id=112776

        Caused hundreds of tests to hit assertions on Windows debug
        bots (Requested by rniwa on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::mainResourceLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::mainResourceData):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):
        (WebCore::DocumentLoader::continueAfterNavigationPolicy):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::reportMemoryUsage):
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::clearMainResourceLoader):
        (WebCore::DocumentLoader::setDefersLoading):
        (WebCore::DocumentLoader::setMainResourceDataBufferingPolicy):
        (WebCore::DocumentLoader::addSubresourceLoader):
        (WebCore::DocumentLoader::isLoadingMainResource):
        (WebCore):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        (WebCore):
        (DocumentLoader):
        * loader/MainResourceLoader.cpp: Added.
        (WebCore):
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::~MainResourceLoader):
        (WebCore::MainResourceLoader::create):
        (WebCore::MainResourceLoader::clearResource):
        (WebCore::MainResourceLoader::frameLoader):
        (WebCore::MainResourceLoader::request):
        (WebCore::MainResourceLoader::resourceData):
        (WebCore::MainResourceLoader::redirectReceived):
        (WebCore::MainResourceLoader::responseReceived):
        (WebCore::MainResourceLoader::dataReceived):
        (WebCore::MainResourceLoader::notifyFinished):
        (WebCore::MainResourceLoader::reportMemoryUsage):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::setDefersLoading):
        (WebCore::MainResourceLoader::defersLoading):
        (WebCore::MainResourceLoader::setDataBufferingPolicy):
        (WebCore::MainResourceLoader::loader):
        (WebCore::MainResourceLoader::identifier):
        * loader/MainResourceLoader.h: Added.
        (WebCore):
        (MainResourceLoader):
        (WebCore::MainResourceLoader::cachedMainResource):
        (WebCore::MainResourceLoader::documentLoader):
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule):
        (WebCore::DocumentLoader::unschedule):

2013-03-19  Mike West  <mkwst@chromium.org>

        CSP 1.1: Stub out SecurityPolicyViolationEvent interface.
        https://bugs.webkit.org/show_bug.cgi?id=112681

        Reviewed by Adam Barth.

        A first pass at a SecurityPolicyViolationEvent interface is defined in
        CSP 1.1's editor's draft[1]. This patch puts the big components into
        place so that we can start getting some implementation experience with
        the new event interface as it's defined, and feed that back into the
        working group.

        Here, we're only defining the interface, and creating a listener on the
        Document. Events aren't yet being fired when Content Security Policy
        violations occur. I'll tackle that in a future patch; adding files is
        a big enough annoyance to do it separately.

        This patch has only two web-visible impacts:

        - Document objects now have an 'onsecuritypolicyviolation' attribute.
        - A SecurityPolicyViolationEvent constructor is accessible on the Window object.

        Ports that have not enabled the CSP_NEXT flag should experience no change.

        [1]: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#securitypolicyviolationevent-events

        Test: http/tests/security/contentSecurityPolicy/1.1/securitypolicyviolation-basics.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Wow! A new file! This is so exciting! I'm going to tell ALL my build
            systems about this!
        * dom/Document.h:
        * dom/Document.idl:
            Define an 'onsecuritypolicyviolation' event handler on Document objects.
        * dom/EventNames.h:
        * dom/EventNames.in:
            Define a 'securitypolicyviolation' event type.
        * dom/SecurityPolicyViolationEvent.h: Added.
        (WebCore::SecurityPolicyViolationEventInit::SecurityPolicyViolationEventInit):
        (SecurityPolicyViolationEventInit):
        (SecurityPolicyViolationEvent):
        (WebCore::SecurityPolicyViolationEvent::create):
        (WebCore::SecurityPolicyViolationEvent::documentURI):
        (WebCore::SecurityPolicyViolationEvent::referrer):
        (WebCore::SecurityPolicyViolationEvent::blockedURI):
        (WebCore::SecurityPolicyViolationEvent::violatedDirective):
        (WebCore::SecurityPolicyViolationEvent::effectiveDirective):
        (WebCore::SecurityPolicyViolationEvent::originalPolicy):
        (WebCore::SecurityPolicyViolationEvent::sourceURL):
        (WebCore::SecurityPolicyViolationEvent::lineNumber):
        (WebCore::SecurityPolicyViolationEvent::interfaceName):
        (WebCore::SecurityPolicyViolationEvent::SecurityPolicyViolationEvent):
        * dom/SecurityPolicyViolationEvent.idl: Added.
            Define the SecurityPolicyViolationEvent's IDL, and then create all the
            boilerplate necessary to properly initialize a SecurityPolicyViolationEvent
            object with the relevant properties.
        * page/DOMWindow.idl:
            Add the new SecurityPolicyViolationEvent constructor to the Window object
            so it's available on a page.

2013-03-19  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Timeline] Tune status bar UI for limited-width window.
        https://bugs.webkit.org/show_bug.cgi?id=112702

        Reviewed by Pavel Feldman.

        Reduce filter titles when there is not enough space.

        * inspector/front-end/TimelinePanel.js: Add classnames to elements.
        * inspector/front-end/timelinePanel.css: Specify "flex" behaviour.

2013-03-19  Nate Chapin  <japhet@chromium.org>

        Merge MainResourceLoader into DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=104969

        Reviewed by Adam Barth.

        No new tests, refactor only.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::mainResourceLoader):
        (WebCore::DocumentLoader::~DocumentLoader): Move main resource clearing from
            ~MainResourceLoader.
        (WebCore::DocumentLoader::mainResourceData):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::notifyFinished): Moved from MainResourceLoader::notifyFinished.
        (WebCore):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::continueAfterNavigationPolicy):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::reportMemoryUsage):
        (WebCore::DocumentLoader::dataReceived):
        (WebCore::DocumentLoader::clearMainResourceLoader):
        (WebCore::DocumentLoader::setDefersLoading):
        (WebCore::DocumentLoader::setMainResourceDataBufferingPolicy):
        (WebCore::DocumentLoader::addSubresourceLoader):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        (WebCore::DocumentLoader::startLoadingMainResource): Don't keep separate checks
             for normal and empty loads, just use a single boolean.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::isLoadingMainResource):
        * loader/MainResourceLoader.cpp: Removed.
        * loader/MainResourceLoader.h: Removed.
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule):
        (WebCore::DocumentLoader::unschedule):

2013-03-19  Ankur Taly  <ataly@google.com>

        Cache a pointer to V8DOMActivityLogger in PerContextData.
        https://bugs.webkit.org/show_bug.cgi?id=112719

        Reviewed by Kentaro Hara.

        Adds a data member (and getter, setter methods) to V8PerContextData
        that holds a pointer to a V8DOMActivityLogger. This member is set while
        initializing the context for a V8DOMWindowShell. Ownership of the pointer
        is still retained by the HashMap in DOMWrapperWorld.
        As a result of this patch, subsequent patches that will implement logging
        for DOM API access (See bug 107207) will be able to obtain a reference to
        the logger directly from PerContextData. This will benefit performance as it
        will be faster than looking up the logger in the DOMActivityLoggerMap in
        DOMWrapperWorld.

        There are no new tests as there is no change in behavior.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8PerContextData.h:
        (WebCore::V8PerContextData::activityLogger):
        (V8PerContextData):
        (WebCore::V8PerContextData::setActivityLogger):

2013-03-19  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        do not use string reference for enum support in CodeGeneratorJS.pm
        https://bugs.webkit.org/show_bug.cgi?id=112760

        Reviewed by Kentaro Hara.

        Do use string references in generated JS bindings for enum values.

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjEnumAttr):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArg):

2013-03-19  Simon Fraser  <simon.fraser@apple.com>

        Make RLC::haveNonMainLayersWithTiledBacking() public and fix the name
        https://bugs.webkit.org/show_bug.cgi?id=112763

        Reviewed by Tim Horton.

        Downstream code needs to call hasNonMainLayersWithTiledBacking().

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

2013-03-19  David Levin  <levin@chromium.org>

        FrameLoader::didChangeIcons isn't called when the favicon is changed.
        https://bugs.webkit.org/show_bug.cgi?id=112080

        Reviewed by Dmitry Titov.

        Test: fast/dom/icon-url-property.html

        * dom/Document.cpp:
        (WebCore::Document::addIconURL): Made the callback for didChangeIcons
        happen whenever there are favicon changes instead of filtering it
        and have to be in sync about what hosts care about. As far as I could
        tell no hosts rely on this callback except for Chromium, so in general
        doing less work here may potentially help a small amount for other
        ports.

2013-03-19  Michael Pruett  <michael@68k.org>

        Don't throw on infinity or NaN index in HTMLOptionsCollection.add()
        https://bugs.webkit.org/show_bug.cgi?id=112612

        Reviewed by Kentaro Hara.

        HTMLOptionsCollection.add() should not throw a type error when
        its optional index argument is infinity or NaN. Such values
        should instead be converted to 0 with no error.

        Tests: fast/dom/non-numeric-values-numeric-parameters.html
               fast/js/select-options-add.html

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::add):

2013-03-19  Dominic Mazzoni  <dmazzoni@google.com>

        Security: Heap-use-after-free in WebCore::AXObjectCache::getOrCreate
        https://bugs.webkit.org/show_bug.cgi?id=112044

        Reviewed by Chris Fleizach.

        Always call recalcSectionsIfNeeded before accessing
        table sections.

        Test: accessibility/table-remove-cell-crash.html

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

2013-03-19  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [v8] add IDL 'enum' in DOM methods
        https://bugs.webkit.org/show_bug.cgi?id=112644

        Reviewed by Kentaro Hara.

        This adds V8 support for enumerations in method parameters.

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::methodWithEnumArgMethod):

2013-03-19  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r146277.
        http://trac.webkit.org/changeset/146277
        https://bugs.webkit.org/show_bug.cgi?id=111695

        Broke Chromium Android build

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::boundaryEventOccurred):
        (WebCore::SpeechSynthesis::didStartSpeaking):
        (WebCore::SpeechSynthesis::didPauseSpeaking):
        (WebCore::SpeechSynthesis::didResumeSpeaking):
        (WebCore::SpeechSynthesis::didFinishSpeaking):
        (WebCore::SpeechSynthesis::speakingErrorOccurred):
        (WebCore):
        * Modules/speech/SpeechSynthesis.h:
        (SpeechSynthesis):
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::setVoice):
        * Modules/speech/SpeechSynthesisUtterance.h:
        (WebCore::SpeechSynthesisUtterance::text):
        (WebCore::SpeechSynthesisUtterance::setText):
        (WebCore::SpeechSynthesisUtterance::lang):
        (WebCore::SpeechSynthesisUtterance::setLang):
        (WebCore::SpeechSynthesisUtterance::volume):
        (WebCore::SpeechSynthesisUtterance::setVolume):
        (WebCore::SpeechSynthesisUtterance::rate):
        (WebCore::SpeechSynthesisUtterance::setRate):
        (WebCore::SpeechSynthesisUtterance::pitch):
        (WebCore::SpeechSynthesisUtterance::setPitch):
        (WebCore::SpeechSynthesisUtterance::startTime):
        (WebCore::SpeechSynthesisUtterance::setStartTime):
        (WebCore::SpeechSynthesisUtterance::platformUtterance):
        (SpeechSynthesisUtterance):
        * Modules/speech/SpeechSynthesisVoice.h:
        * WebCore.exp.in:
        * WebCore.gypi:
        * platform/PlatformSpeechSynthesis.h:
        (PlatformSpeechSynthesis):
        * platform/PlatformSpeechSynthesisUtterance.cpp:
        * platform/PlatformSpeechSynthesisUtterance.h:
        (PlatformSpeechSynthesisUtterance):
        * platform/PlatformSpeechSynthesisVoice.cpp:
        (WebCore::PlatformSpeechSynthesisVoice::create):
        * platform/PlatformSpeechSynthesisVoice.h:
        (PlatformSpeechSynthesisVoice):
        * platform/PlatformSpeechSynthesizer.cpp:
        (WebCore::PlatformSpeechSynthesizer::create):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore):
        * platform/PlatformSpeechSynthesizer.h:
        (PlatformSpeechSynthesizerClient):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (PlatformSpeechSynthesizer):
        * platform/chromium/PlatformSpeechSynthesizerChromium.cpp: Removed.
        * platform/chromium/support/WebSpeechSynthesisUtterance.cpp: Removed.
        * platform/chromium/support/WebSpeechSynthesisVoice.cpp: Removed.
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.cpp: Removed.
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.h: Removed.
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeaking:]):
        (WebCore::PlatformSpeechSynthesizer::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::create):
        (WebCore::PlatformSpeechSynthesizerMock::PlatformSpeechSynthesizerMock):
        (WebCore::PlatformSpeechSynthesizerMock::speakingFinished):
        (WebCore::PlatformSpeechSynthesizerMock::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        (PlatformSpeechSynthesizerMock):

2013-03-19  Antti Koivisto  <antti@apple.com>

        Don't compute background obscuration on every repaint
        https://bugs.webkit.org/show_bug.cgi?id=112457

        Reviewed by Simon Fraser.

        Test: fast/backgrounds/obscured-background-child-style-change.html
        
        It is generally enough to compute background obscuration status once per layout rather than doing it on every repaint.
        Since there are fewer layouts than repaints this will allow more expensive checks in the future.
        
        With this patch adds caching and invalidation of the obscuration status.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layout):
        
            Invalidate the obscuration status on layout.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        
            Invalidate the parent obscuration status if there is repaint-only style change (often background related). 
            Tested by the new fast/css/obscured-background-child-style-change.html.

        (WebCore::RenderBox::layout):
        (WebCore::RenderBox::computeBackgroundIsKnownToBeObscured):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::notifyFinished):
        (WebCore::RenderImage::boxShadowShouldBeAppliedToBackground):
        (WebCore::RenderImage::computeBackgroundIsKnownToBeObscured):
        
            Use CachedImage::currentFrameKnownToBeOpaque which ensures that the frame is decoded and we get the real status.
            Tested by an additional case in fast/css/obscured-background-child-style-change.html.

        * rendering/RenderImage.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasBoxDecorations):
        (WebCore::RenderObject::computeBackgroundIsKnownToBeObscured):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (RenderObjectBitfields):
        (WebCore::RenderObject::RenderObjectBitfields::boxDecorationState):
        (WebCore::RenderObject::RenderObjectBitfields::setBoxDecorationState):
        
            Combine box decoration bit and the obscuration status so we only need one extra bit.

        (WebCore::RenderObject::setNeedsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::setHasBoxDecorations):
        (WebCore::RenderObject::invalidateBackgroundObscurationStatus):
        (WebCore::RenderObject::backgroundIsKnownToBeObscured):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):

2013-03-19  Dominic Mazzoni  <dmazzoni@google.com>

        Implement Web Speech Synthesis for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=111695

        Reviewed by Adam Barth.

        Straightforward implementation of speech synthesis
        for Chromium by exposing interfaces for the platform
        to implement.

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::boundaryEventOccurred):
        (WebCore::SpeechSynthesis::didStartSpeaking):
        (WebCore::SpeechSynthesis::didPauseSpeaking):
        (WebCore::SpeechSynthesis::didResumeSpeaking):
        (WebCore::SpeechSynthesis::didFinishSpeaking):
        (WebCore::SpeechSynthesis::speakingErrorOccurred):
        (WebCore):
        * Modules/speech/SpeechSynthesis.h:
        (SpeechSynthesis):
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::SpeechSynthesisUtterance):
        (WebCore):
        (WebCore::SpeechSynthesisUtterance::~SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::setVoice):
        * Modules/speech/SpeechSynthesisUtterance.h:
        (SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::text):
        (WebCore::SpeechSynthesisUtterance::setText):
        (WebCore::SpeechSynthesisUtterance::lang):
        (WebCore::SpeechSynthesisUtterance::setLang):
        (WebCore::SpeechSynthesisUtterance::volume):
        (WebCore::SpeechSynthesisUtterance::setVolume):
        (WebCore::SpeechSynthesisUtterance::rate):
        (WebCore::SpeechSynthesisUtterance::setRate):
        (WebCore::SpeechSynthesisUtterance::pitch):
        (WebCore::SpeechSynthesisUtterance::setPitch):
        (WebCore::SpeechSynthesisUtterance::startTime):
        (WebCore::SpeechSynthesisUtterance::setStartTime):
        (WebCore::SpeechSynthesisUtterance::platformUtterance):
        * Modules/speech/SpeechSynthesisVoice.h:
        (WebCore::SpeechSynthesisVoice::~SpeechSynthesisVoice):
        * WebCore.exp.in:
        * WebCore.gypi:
        * platform/PlatformSpeechSynthesis.h:
        (PlatformSpeechSynthesis):
        * platform/PlatformSpeechSynthesisUtterance.cpp:
        (WebCore):
        (WebCore::PlatformSpeechSynthesisUtterance::create):
        * platform/PlatformSpeechSynthesisUtterance.h:
        (PlatformSpeechSynthesisUtterance):
        (WebCore::PlatformSpeechSynthesisUtterance::setClient):
        * platform/PlatformSpeechSynthesisVoice.cpp:
        (WebCore):
        (WebCore::PlatformSpeechSynthesisVoice::create):
        (WebCore::PlatformSpeechSynthesisVoice::PlatformSpeechSynthesisVoice):
        * platform/PlatformSpeechSynthesisVoice.h:
        (PlatformSpeechSynthesisVoice):
        (WebCore::PlatformSpeechSynthesisVoice::setVoiceURI):
        (WebCore::PlatformSpeechSynthesisVoice::setName):
        (WebCore::PlatformSpeechSynthesisVoice::setLang):
        (WebCore::PlatformSpeechSynthesisVoice::setLocalService):
        (WebCore::PlatformSpeechSynthesisVoice::setIsDefault):
        * platform/PlatformSpeechSynthesizer.cpp:
        (WebCore::PlatformSpeechSynthesizer::create):
        (WebCore::PlatformSpeechSynthesizer::setVoiceList):
        (WebCore):
        * platform/PlatformSpeechSynthesizer.h:
        (WebKit):
        (PlatformSpeechSynthesizerClient):
        (PlatformSpeechSynthesizer):
        * platform/chromium/PlatformSpeechSynthesizerChromium.cpp: Added.
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesizer::speak):
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore::PlatformSpeechSynthesizer::resume):
        (WebCore::PlatformSpeechSynthesizer::cancel):
        * platform/chromium/support/WebSpeechSynthesisUtterance.cpp: Added.
        (WebKit):
        (WebKit::WebSpeechSynthesisUtterance::WebSpeechSynthesisUtterance):
        (WebKit::WebSpeechSynthesisUtterance::operator=):
        (WebKit::WebSpeechSynthesisUtterance::assign):
        (WebKit::WebSpeechSynthesisUtterance::reset):
        (WebKit::WebSpeechSynthesisUtterance::operator PassRefPtr<PlatformSpeechSynthesisUtterance>):
        (WebKit::WebSpeechSynthesisUtterance::operator PlatformSpeechSynthesisUtterance*):
        (WebKit::WebSpeechSynthesisUtterance::text):
        (WebKit::WebSpeechSynthesisUtterance::lang):
        (WebKit::WebSpeechSynthesisUtterance::voice):
        (WebKit::WebSpeechSynthesisUtterance::volume):
        (WebKit::WebSpeechSynthesisUtterance::rate):
        (WebKit::WebSpeechSynthesisUtterance::pitch):
        (WebKit::WebSpeechSynthesisUtterance::startTime):
        * platform/chromium/support/WebSpeechSynthesisVoice.cpp: Added.
        (WebKit):
        (WebKit::WebSpeechSynthesisVoice::assign):
        (WebKit::WebSpeechSynthesisVoice::reset):
        (WebKit::WebSpeechSynthesisVoice::setVoiceURI):
        (WebKit::WebSpeechSynthesisVoice::setName):
        (WebKit::WebSpeechSynthesisVoice::setLanguage):
        (WebKit::WebSpeechSynthesisVoice::setIsLocalService):
        (WebKit::WebSpeechSynthesisVoice::setIsDefault):
        (WebKit::WebSpeechSynthesisVoice::operator PassRefPtr<WebCore::PlatformSpeechSynthesisVoice>):
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.cpp: Added.
        (WebCore):
        (WebCore::WebSpeechSynthesizerClientImpl::WebSpeechSynthesizerClientImpl):
        (WebCore::WebSpeechSynthesizerClientImpl::~WebSpeechSynthesizerClientImpl):
        (WebCore::WebSpeechSynthesizerClientImpl::setVoiceList):
        (WebCore::WebSpeechSynthesizerClientImpl::didStartSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::didFinishSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::didPauseSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::didResumeSpeaking):
        (WebCore::WebSpeechSynthesizerClientImpl::speakingErrorOccurred):
        (WebCore::WebSpeechSynthesizerClientImpl::wordBoundaryEventOccurred):
        (WebCore::WebSpeechSynthesizerClientImpl::sentenceBoundaryEventOccurred):
        * platform/chromium/support/WebSpeechSynthesizerClientImpl.h: Added.
        (WebCore):
        (WebSpeechSynthesizerClientImpl):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeaking:]):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::PlatformSpeechSynthesizerMock):
        (WebCore::PlatformSpeechSynthesizerMock::speakingFinished):
        (WebCore::PlatformSpeechSynthesizerMock::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        (PlatformSpeechSynthesizerMock):

2013-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r146220.

        * English.lproj/localizedStrings.js:

2013-03-19  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Add parsing for grid-auto-{row|column}
        https://bugs.webkit.org/show_bug.cgi?id=112724

        Reviewed by Tony Chang.

        This change is a first step towards handling grid-auto-{row|column}.
        For now, only the parsing, storing and getComputedStyle bits are implemented.
        In order to do so without duplicating code, the functions handling <track-size>
        (named <track-minmax> in the code based on a previous version of the grammar)
        have been tweaked to be called in a standalone fashion. The code was also
        updated to match the grammar more closely:
        - <track-minmax> is now <track-size>.
        - <track-group> was renmoved, folded into <track-list>.

        Test: fast/css-grid-layout/grid-auto-columns-rows-get-set.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackSize):
        Renamed from valueForGridTrackMinMax.

        (WebCore::valueForGridTrackList):
        Folded valueForGridTrackGroup here.

        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        Added the parsing for grid-auto-{rows|columns}.

        (WebCore::CSSParser::parseGridTrackSize):
        Renamed from parseGridTrackMinMax. Changed to return the parsed value (or 0 in case of
        error). This enables us to reuse it in parseValue. Note that this function now moves
        the parser value list instead of the caller.

        (WebCore::CSSParser::parseGridTrackList):
        Updated after parseGridTrackSize changes and parseGridTrackGroup removal.

        * css/CSSParser.h: Updated the names.
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        Added the 2 new non-inherited properties.

        * css/StyleResolver.cpp:
        (WebCore::createGridTrackSize):
        Renamed from createGridTrackMinMax. Also simplified to ensure code reuse (applyProperty hands
        down a CSSValue) and consistency (the state wasn't consistently the last argument).

        (WebCore::createGridTrackList):
        Folded createGridTrackGroup into this function.

        (WebCore::StyleResolver::applyProperty):
        Added the code for the new properties.

        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::StyleGridData):
        * rendering/style/StyleGridData.h:
        (WebCore::StyleGridData::operator==):
        Added the storage and boiler-plate code for the new properties.

2013-03-19  Geoffrey Garen  <ggaren@apple.com>

        Removed a using declaration to avoid name conflicts
        https://bugs.webkit.org/show_bug.cgi?id=112752

        Reviewed by Ryosuke Niwa.

        * html/ClassList.cpp: Put the using declaration here instead.

        * html/ClassList.h: Don't put a using declaration in this header because
        it can cause name conflicts with SVGNames.

2013-03-18  Ojan Vafai  <ojan@chromium.org>

        Make intrinsic size keywords on flexboxes work
        https://bugs.webkit.org/show_bug.cgi?id=112652

        Reviewed by Tony Chang.

        Tests: fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items.html
               fast/css-intrinsic-dimensions/intrinsic-sized-flex-items.html

        * platform/Length.h:
        (WebCore::Length::isSpecifiedOrIntrinsic):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalWidthInRegionByMinMax):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        Pass in the Length so that RenderFlexibleBox can call this method and avoid
        doing a bunch of code duplication.

        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        Instead of just calling valueForLength, call computeLogicalWidthInRegionUsing so that
        we properly resolve intrinsic Length types. Incidentally, this should also make viewport
        percentage units work.

        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
        Resolve intrinsic min/max Lengths. Also, instead of calling minPreferredLogicalWidth for the
        min-width: auto case, call computeMainAxisExtentForChild to correctly compute the min intrinsic size.

2013-03-19  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Windows build.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType): Qualify the
        namespace to avoid conflicts.

2013-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix after r146264.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType):

2013-03-19  Nate Chapin  <japhet@chromium.org>

        REGRESSION(r146223): chromium asserts/crashes in DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=112745

        Reviewed by Kenneth Russell.

        Fixes layout tests on chromium debug

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainReceivedError): Frame might be detached, get
            defersLoading() from mainResourceLoader().
        (WebCore::DocumentLoader::responseReceived): RefPtr got dropped, it's really needed.
        (WebCore::DocumentLoader::receivedData): Frame might be detached, get
            defersLoading() from mainResourceLoader().
        (WebCore::DocumentLoader::cancelMainResourceLoad): The ResourceError parameter
            can be null if coming from the WebKit layer, we should have a default just in case.

2013-03-19  Geoffrey Garen  <ggaren@apple.com>

        Refactored script content removal in the fragment parser for clarity and speed
        https://bugs.webkit.org/show_bug.cgi?id=112734

        Reviewed by Enrica Casucci.

        * WebCore.exp.in: Export!

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::parseHTML):
        (WebCore::DocumentFragment::parseXML):
        * dom/DocumentFragment.h:
        (DocumentFragment): Updated for rename of FragmentScriptingPermission to
        ParserContentPolicy.

        * dom/Element.cpp:
        (WebCore::isEventHandlerAttribute):
        (WebCore::Element::isJavaScriptURLAttribute):
        (WebCore::Element::isJavaScriptAttribute): Fixed a FIXME by factoring
        out some helper functions that reuse isURLAttribute(). This makes our
        attribute removal slightly more precise, as reflected in test changes.

        (WebCore::Element::stripJavaScriptAttributes): Factored this function out
        of parserSetAttributes to clarify that the parser is responsible for
        fully removing scripts before inserting anything into the DOM.

        Now that this is a helper function, we can avoid doing any work in the
        common case, where script content is allowed. Also, when we do have to
        strip attributes, we use "two finger compaction" to avoid copying the
        vector, and to avoid O(N) vector removal operations when there is
        something to remove.

        (WebCore::Element::parserSetAttributes):
        * dom/Element.h:

        * dom/FragmentScriptingPermission.h:
        (WebCore::scriptingContentIsAllowed):
        (WebCore::disallowScriptingContent):
        (WebCore::pluginContentIsAllowed):
        (WebCore::allowPluginContent): Renamed for clarity, and added some helper
        functions for reading values out of this enum.

        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser): Moved
        a settings check into the parser constructor so we're sure that all
        clients get the right behavior.

        * dom/ScriptableDocumentParser.h:
        (WebCore::ScriptableDocumentParser::parserContentPolicy):
        (ScriptableDocumentParser):
        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup):
        (WebCore::createFragmentFromMarkupWithContext):
        (WebCore::createFragmentForInnerOuterHTML):
        (WebCore::createContextualFragment):
        * editing/markup.h: Updated for renames.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isURLAttribute): Fixed a bug where
        isURLAttribute would ignore href attributes in other namespaces, like
        xlink:href.

        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::isURLAttribute): Same bug.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isURLAttribute): Fixed a logic error where HTMLElement
        wouldn't call through to its base class.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::isURLAttribute): Same isURLAttribute namespace
        bug as above.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::setAttributes): Helper function for optionally stripping
        disallowed attributes before setting them on an element. This helps all
        clients get the right behavior without sprinkling checks everywhere.

        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):

        (WebCore::HTMLConstructionSite::insertScriptElement): Don't schedule the
        element for insertion into the document if the element is forbidden. This
        is slightly clearer than leaving an empty forbidden element in the document.

        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        * html/parser/HTMLConstructionSite.h:
        (HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::parserContentPolicy):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):
        (WebCore::HTMLDocumentParser::parseDocumentFragment):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::create):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
        Updated for renames and interface changes above.

        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag): Removed isParsingFragment()
        checks to make it possible to use ParserContentPolicy in more places.

        Removed call to removeChildren() because, if an element is forbidden,
        we fully remove the element now. This brings behavior for <script>
        elements in line with behavior for plug-in elements. It also brings
        behavior of the HTML parser in line with behavior of the XML parser.

        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::create):
        (FragmentParsingContext):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::contextElement):
        * platform/blackberry/PasteboardBlackBerry.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asFragment):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::documentFragment):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asFragment):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::fragmentFromCFHTML):
        (WebCore::fragmentFromHTML):
        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::documentFragment): Updated for renames and interface
        changes.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::isURLAttribute): Fixed a bug where SVG anchor
        elements didn't identify their URL attributes.

        * svg/SVGAElement.h:
        (SVGAElement):

        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLErrors::insertErrorMessageBlock): No need to disallow
        scripting attributes here because we're creating the attributes 
        ourselves and we know they're not scripting attributes.

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::parseDocumentFragment):
        * xml/parser/XMLDocumentParser.h:
        (WebCore::XMLDocumentParser::create):
        (XMLDocumentParser): Updated for renames and interface changes above.

        Removed the 8 inline capacity in the attribute vector so we could share
        helper functions with the HTML parser, which didn't have it.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::setAttributes):
        (WebCore):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::handleNamespaceAttributes):
        (WebCore::handleElementAttributes):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::setAttributes):
        (WebCore):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::handleNamespaceAttributes):
        (WebCore::handleElementAttributes):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement): Same changes as for the
        HTML parser.

2013-03-19  Philip Rogers  <pdr@google.com>

        Clean up static_casts for SVG renderers
        https://bugs.webkit.org/show_bug.cgi?id=111651

        Reviewed by Abhishek Arya.

        toRenderSVGPath and toRenderSVGFilter are preferred over static_casts because bad casts can
        be caught on our testing infrastructure. This patch replaces all static_casts for
        RenderSVGPath and RenderSVGFilter with toRenderSVGPath and toRenderSVGFilter, respectively.

        This patch also adds FIXME to the remaining toRenderSVG* instances that are missing.

        No new tests as this is covered with existing tests.

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

            This call is currently safe due to the element->hasTagName(SVGNames::clipPathTag) check.

        * rendering/svg/RenderSVGPath.h:
        (WebCore):
        (WebCore::toRenderSVGPath):
        * rendering/svg/RenderSVGResourceFilter.h:
        (WebCore):
        (WebCore::toRenderSVGFilter):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::addResourceForClientInvalidation):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::repaintRectForRendererInLocalCoordinatesExcludingSVGShadow):
        (WebCore::SVGRenderSupport::rendererHasSVGShadow):
        (WebCore::SVGRenderSupport::setRendererHasSVGShadow):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::~SVGRenderingContext):

            This cast was not correct! Thankfully it was not required anyway.

        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):

            This cast was not correct!

        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):

            This cast was not correct!

        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::pathSegListChanged):
        (WebCore::SVGPathElement::getBBox):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):

2013-03-19  Beth Dakin  <bdakin@apple.com>

        RenderLayer::scrollTo() should call FrameLoaderClient::didChangeScrollOffset()
        https://bugs.webkit.org/show_bug.cgi?id=110673

        Reviewed by Simon Fraser.

        FrameLoaderClient::didChangeScrollOffset() should be called whenever something is 
        actually being scrolled. 

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

2013-03-19  Marja Hölttä  <marja@chromium.org>

        [V8] Add machinery for generating specialized bindings for the main world
        https://bugs.webkit.org/show_bug.cgi?id=111417

        Reviewed by Jochen Eisinger.

        The new specialized bindings will be faster, because they don't need to
        do the "main world, isolated world or a worker" check, but can right
        away assume that we're in the main world.

        Added an IDL attribute (V8PerWorldBindings) to define which
        attribute getters / setters to specialize.

        This patch generates main world bindings for getters and setters of Node
        and Element. (The possibility to generate bindings for callbacks will be
        added later.)

        No new tests (updated existing bindings tests).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetterCallback):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetterCallback):
        (GenerateNormalAttrSetter):
        (GenerateNamedConstructor):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        (GenerateCallbackImplementation):
        (GenerateFunctionCallString):
        (CreateCustomSignature):
        (NativeToJSValue):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::ConfigureV8TestCustomNamedGetterTemplate):
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestEventConstructorTemplate):
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestExceptionTemplate):
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        (WebCore::ConfigureV8TestNamedConstructorTemplate):
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::ConfigureV8TestNodeTemplate):
        (WebCore::V8TestNode::GetTemplate):
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::HasInstance):
        (WebCore::V8TestObj::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::ConfigureV8TestOverloadedConstructorsTemplate):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::getWrapperForMainWorld):
        (DOMDataStore):
        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::batchConfigureAttributes):
        (WebCore::V8DOMConfiguration::configureTemplate):
        * bindings/v8/V8DOMConfiguration.h:
        (BatchedAttribute):
        (V8DOMConfiguration):
        (WebCore::V8DOMConfiguration::configureAttribute):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        * bindings/v8/custom/V8EventTargetCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        * bindings/v8/custom/V8MicroDataItemValueCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        * dom/Element.idl:
        * dom/Node.idl:

2013-03-19  Mike West  <mkwst@chromium.org>

        FeatureObserver: Measure X-Frame-Options usage.
        https://bugs.webkit.org/show_bug.cgi?id=112670

        Reviewed by Adam Barth.

        This patch adds three FeatureObserver entries to gather information
        about 'X-Frame-Options' usage in general, and in particular usage
        and potential misunderstanding of the 'SAMEORIGIN' value.

        Three entries are added:

        - XFrameOptions measures the raw number of 'X-Frame-Options' headers.

        - XFrameOptionsSameOrigin measures the number of those headers that
          set the value to 'SAMEORIGIN'.

        - XFrameOptionsSameOriginWithBadAncestorChain measures the number of
          occasions in which the frame passed the "top-only" origin check we're
          currently performing, but would have failed a more strict check
          against poisoned ancestor chains (that is, an ancestor chain that
          looks like 'example.com' -> 'evil.com' -> 'example.com').

        Mozilla is considering changing 'SAMEORIGIN's behavior to block the
        latter loophole[1], and the UI Safety spec is considering dropping
        'top-only' entirely[2]. This data will inform those decisions.

        [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=725490
        [2]: http://lists.w3.org/Archives/Public/public-webappsec/2013Mar/0007.html

        This doesn't change web-visible behavior; it only adds histograms

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
            When processing an 'X-Frame-Options' header's value, call out to
            FeatureObserver when relevant to increment the correct histogram
            entries.
        * page/FeatureObserver.h:
            Added three entries to the FeatureObserver enum: XFrameOptions,
            XFrameOptionsSameOrigin, and XFrameOptionsSameOriginWithBadAncestorChain.
            Each is explained above.

2013-03-19  Adam Barth  <abarth@webkit.org>

        GenerateHashValue should be usable outside CodeGeneratorJS.pm
        https://bugs.webkit.org/show_bug.cgi?id=112736

        Reviewed by Benjamin Poulain.

        GenerateHashValue is not specific to CodeGeneratorJS.pm. Instead, the
        function matches the StringHash used in WTF. This patch moves the
        function into a separate Perl module so that it can be used by other
        Perl scripts. For example, I plan to use this function to compute the
        hash value for HTMLNames at compile time rather than at startup.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHashTable):
        * bindings/scripts/Hash.pm: Added.
        (leftShift):
        (GenerateHashValue):

2013-03-19  Dean Jackson  <dino@apple.com>

        Allow PlugIn Snapshotting to be tested
        https://bugs.webkit.org/show_bug.cgi?id=98696

        Reviewed by Tim Horton.

        Expose a new setting maximumPlugInSnapshotAttempts that can
        be set by testing scripts.

        Tests: plugins/snapshotting/restart.html
               plugins/snapshotting/simple.html

        * page/Settings.in:

2013-03-19  Dean Jackson  <dino@apple.com>

        Restarting a snapshotted plugin should restart all plugins from the same domain on the page
        https://bugs.webkit.org/show_bug.cgi?id=112725

        Reviewed by Tim Horton.

        If the user restarts a snapshotted plugin, then typically they will
        want to restart all similar plugins on the page, where similarity
        is defined by the domain of the content. Or in other words, since clients
        will typically add a restarted plugin to the list of autostarting
        domain hashes, we should start the other plugins that would autostart
        on reload.

        When a snapshotted plugin gets the user click telling it to restart, it iterates
        over every frame in the document looking for domain hashes similar to its own.
        It then manually restarts each of the paused plugins.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::addPlugInsFromNodeListMatchingOriginHash): Static helper function
            that builds a list of plugins to restart.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): After restarting itself,
            the plugin looks for all other similar snapshotted plugins in the page.
        (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn): Splits out the actual
            restart functionality, to make it separate from plugins that were manually
            restarted and thus probably want to forward a delayed click event.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): New method restartSnapshottedPlugIn.

2013-03-19  Nate Chapin  <japhet@chromium.org>

        Merge MainResourceLoader's SubstituteData loading + others into DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=112722

        Part of the ongoing effort to merge MainResourceLoader entirely
        into DocumentLoader.

        Reviewed by Antti Koivisto.

        No new tests, refactor only.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainReceivedError): Moved from MainResourceLoader::receivedError
            and the failure case in MainResourceLoader::notifyFinished.
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow): Moved from MainResourceLoader.
        (WebCore::DocumentLoader::startDataLoadTimer): Moved from MainResourceLoader.
        (WebCore::DocumentLoader::handleSubstituteDataLoadSoon): Moved from MainResourceLoader.
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::continueAfterNavigationPolicy):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::startLoadingMainResource): Most of MainResourceLoader::load
            moved here.
        (WebCore::DocumentLoader::cancelMainResourceLoad): MainResourceLoader::cancel
            moved here.
        * loader/DocumentLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::notifyFinished):
        (WebCore::MainResourceLoader::reportMemoryUsage):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::identifier):
        * loader/MainResourceLoader.h:

2013-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix after r146220. Add the missing ]'s.

        * English.lproj/localizedStrings.js:

2013-03-19  Alpha Lam  <hclam@chromium.org>

        GIFImageReader to count frames and decode in one pass
        https://bugs.webkit.org/show_bug.cgi?id=111144

        Reviewed by Stephen White.

        OBJECTIVE

        This change has the objective of improving performance reading GIF
        files. This implementation can parse the entire GIF file in one pass
        and saves information about each frame, such that decoding in a later
        pass does not need to parse the file again.

        This change fixes the performance problem of decoding GIF files when
        they are received very slowly. Existing implementation creates a new
        GIFImageReader for counting frames for every time it is notified that
        new data has been received, this has O(n^2) behavior when data is
        received very slowly.

        ALGORITHM

        This implementation divides the decoding process into two separate
        steps: parse and LZW decoding.

        In the parse step, the state machine is similar to the existing
        implementation. However this algorithm does not perform any decoding
        while scanning through the file. Intead it creates a new data structure
        for caching all frame information and the corresponding LZW blocks.

        If a full decode is requested then LZW decoding is performed. This
        implementation looks through all frame information saved and decodes
        each frame sequentially until the target frame is reached.

        Because of the separation of parse and decode, each frame can be
        decoded separately. This paves the way to support seeking in GIF files.

        TESTING

        Added a new unit test to cover progressively decoding a GIF image.
        There are already GIF unit tests for functional testing.
        Exhaustive testing was done locally with a corpus of 60k images.
        I mixed the corpus with some generated bad data and truncated files.
        The results was bit-identical when compared to the previous
        implementation.

        These was also no crashing when decoding the entire corpus.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        (GIFImageDecoder):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFLZWContext::outputRow):
        (GIFLZWContext::doLZW):
        (GIFFrameContext::decode):
        (GIFImageReader::decode):
        (GIFImageReader::parse):
        (GIFImageReader::addFrameIfNecessary):
        (GIFLZWContext::prepareToDecode):
        * platform/image-decoders/gif/GIFImageReader.h:
        There is a lot of reshuffling in GIFLZWContext and GIFFrameContext.
        These changes has the goal of having GIFLZWContext be a pure decoding
        state machine. GIFFrameContext is mostly a read-only container for
        frame information. With all these changes we can decode each
        GIFFrameContext independently.

        The ownership pattern is:
        GIFImageReader owns GIFFrameContext owns GIFLZWContext.

        (GIFLZWContext::GIFLZWContext):
        (GIFLZWContext):
        (GIFLZWContext::hasRemainingRows):
        GIFLZWContext is moved to the top of file.
        (GIFLZWBlock):
        (GIFLZWBlock::GIFLZWBlock):
        New data structure to save block position and size.
        (GIFFrameContext):
        (GIFFrameContext::GIFFrameContext):
        (GIFFrameContext::~GIFFrameContext):
        (GIFFrameContext::addLzwBlock):
        (GIFFrameContext::isComplete):
        (GIFFrameContext::isHeaderDefined):
        (GIFFrameContext::isDataSizeDefined):
        (GIFFrameContext::setComplete):
        (GIFFrameContext::setHeaderDefined):
        (GIFFrameContext::setDataSize):
        Now owns GIFLZWContext for decoding.
        (GIFImageReader::GIFImageReader):
        (GIFImageReader::~GIFImageReader):
        (GIFImageReader::imagesCount):
        (GIFImageReader::frameContext):
        (GIFImageReader):
        (GIFImageReader::parseFailed):
        (GIFImageReader::isFirstFrame):
        Owns a list of GIFFrameContxt.

2013-03-19  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build correction for WebCore library.

        * WebCore.vcxproj/WebCore.vcxproj: Exclude CG-specific frame source
        from WinCairo build.
        * WebCore.vcxproj/WebCoreGeneratedWinCairo.make: Pass correct
        parameter to build-generated-files.sh for WinCairo build.

2013-03-19  Leon Scroggins  <scroggo@chromium.org>

        Implement onRefEncodedData for lazy pixel refs.
        This allows printToSkPicture to write the original
        encoded data to the stream.
        Add a method to ImageFrameGenerator to copy its
        data, which is used by onRefEncodedData.
        https://bugs.webkit.org/show_bug.cgi?id=110759

        Reviewed by Stephen White.

        No new tests. New functionality is for testing purposes
        (creating SKP files).

        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::data):
        (WebCore):
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (ImageFrameGenerator):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::isClipped):
        (WebCore):
        (WebCore::LazyDecodingPixelRef::onRefEncodedData):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (LazyDecodingPixelRef):

2013-03-19  Philip Rogers  <pdr@google.com>

        Separate SVG image size and container size
        https://bugs.webkit.org/show_bug.cgi?id=112651

        Reviewed by Stephen Chenney.

        Previously, SVG images could retain their cached size between reloads due to a bug where an
        old container size would be re-used if the image's new container size was not available yet.

        This patch changes SVGImage::size() to return the intrinsic size of the image before a
        container size has been set. SVGImageCache::imageSizeForRenderer will now return the
        image's intrinsic size instead of a cached value if the container size cannot be looked up.
        In javascript, querying [SVGImage].width will now return either the image's intrinsic size
        or the size of 'imageForContainer'.

        Test: svg/as-image/svg-container-size-after-reload.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::containerSize):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::dataChanged):
        * svg/graphics/SVGImage.h:

            The member variable 'm_intrinsicSize' has been added to track the image's intrinsic
            size. This term can be found in: http://www.w3.org/TR/css3-images/#default-sizing

        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageSizeForRenderer):
        (WebCore::SVGImageCache::imageForRenderer):

            In both of these functions, image has been renamed to imageForContainer here to clarify
            that the cached container size is being returned, not the image's intrinsic size.

2013-03-19  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Use integer plumbing for deleteDatabase onVersionChange calls
        https://bugs.webkit.org/show_bug.cgi?id=112715

        Reviewed by Tony Chang.

        When deleteDatabase on the back-end needs to send the front-end an
        onVersionChange notification it does so using the string overload. That's
        the only remaining use of that overload and we'd like to delete it. Switch
        to using the integer overload, with an already defined special value.
        This will unblock http://wkbug.com/112712 to delete the dead code.

        No new tests - no functional change.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::onVersionChange): Map NoIntVersion to null.
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase): Call integer overload.

2013-03-19  Terry Anderson  <tdanderson@chromium.org>

        Hover effects from a GestureTapDown are dismissed by a GestureTap on the hover element
        https://bugs.webkit.org/show_bug.cgi?id=103283

        Reviewed by Antonio Gomes.

        On a GestureTap event over an element that was made visible as a hover effect, the
        GestureTap should be applied to that element and the hover effects should not be dismissed. 
        A GestureTap or a mouse move to a location outside of the element should still dismiss the
        hover effects.

        Tests: fast/events/touch/gesture/gesture-tap-hover-clear.html
               fast/events/touch/gesture/gesture-tap-on-hover-element.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):

2013-03-19  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Fix menu items capitalization.
        https://bugs.webkit.org/show_bug.cgi?id=112553

        The context menu items should be correctly capitalized.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._emptyElementContextMenu):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._emptyElementContextMenu):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.Placard.prototype._placardContextMenu):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent.get var):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent.set get contextMenu):
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane.prototype._contextMenu):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._contextMenuInDataTable):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._contextMenuEventFired.set get var):
        (WebInspector.ElementsPanel.prototype.appendApplicableItems):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.populateContextMenu):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.appendApplicableItems):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._handleContextMenuEvent):
        (WebInspector.ProfilesPanel.prototype.appendApplicableItems):
        (WebInspector.ProfileSidebarTreeElement.prototype.handleContextMenuEvent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FileSystemListTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._appendUISourceCodeMappingItems):
        (WebInspector.ScriptsPanel.prototype._appendUISourceCodeItems):
        (WebInspector.ScriptsPanel.prototype._appendFunctionItems):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPaneTab.prototype._tabContextMenu):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._contextMenu):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype._emptyElementContextMenu):
        (WebInspector.WatchExpressionTreeElement.prototype.populateContextMenu):

2013-03-19  Alec Flett  <alecflett@chromium.org>

        Inspector: IndexedDB clear button and menu item
        https://bugs.webkit.org/show_bug.cgi?id=112066

        Reviewed by Vsevolod Vlasov.

        Adds a button that can clear the contents of an objectStore from
        the IDBDataView, and a context menu from the ResourcesPanel that
        can do the same.

        This also disables the Refresh button from the IDBDataView, so there
        is at least some visual feedback that the refresh button is working.

        Tests: http/tests/inspector/indexeddb/database-data.html

        * inspector/Inspector.json: New API clearObjectStore.
        * inspector/InspectorIndexedDBAgent.cpp: Implementation of clearObjectStore
        (WebCore):
        (ClearObjectStoreListener): Calls the original closure after the objectStore is cleared.
        (ClearObjectStore): Initiates the clear operation after the DB opens.
        * inspector/front-end/IndexedDBModel.js: Exposes clearObjectStore to the Model API.
        (WebInspector.IDBDataView): Add clear button and enable/disable clear and refresh buttons appropriately.
        * inspector/front-end/ResourcesPanel.js: Add a menu item and refresh the displayed data after the clear.
        * inspector/front-end/inspector.css: Add a style to show the right button for clear.

2013-03-19  Nate Chapin  <japhet@chromium.org>

        Merge MainResourceLoader::responseReceived into DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=112593

        Part of the ongoing effort to merge MainResourceLoader entirely
        into DocumentLoader.

        Reviewed by Adam Barth.

        No new tests, refactor only.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::finishedLoading): The only thing left in
            MainResourceLoader related to this function was a RefPtr which indirectly
            protected DocumentLoader. Move the RefPtr here and protect DocumentLoader directly.
        (WebCore::DocumentLoader::responseReceived): Moved from MainResourceLoader.
        (WebCore::DocumentLoader::callContinueAfterContentPolicy): Moved from MainResourceLoader.
        (WebCore::DocumentLoader::continueAfterContentPolicy): Moved from MainResourceLoader.
        (WebCore::DocumentLoader::interruptedForPolicyChangeError): Moved from MainResourceLoader.
        (WebCore::DocumentLoader::stopLoadingForPolicyChange): Moved from MainResourceLoader.
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::cancelMainResourceLoad):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::isLoadingMultipartContent): Store multipart bit here.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::cancel):
        (WebCore::MainResourceLoader::responseReceived):
        (WebCore::MainResourceLoader::notifyFinished):
        * loader/MainResourceLoader.h:

2013-03-19  Tony Chang  <tony@chromium.org>

        Cleanup defaultUnifiedTextCheckerEnabled type
        https://bugs.webkit.org/show_bug.cgi?id=112640

        Reviewed by Adam Barth.

        It's a bool setting. I accidentally declared the default value as a double
        in r139202.

        No new tests, this is a refactor/code cleanup.

        * page/Settings.cpp:
        (WebCore): Switch from double to a bool.

2013-03-19  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Increase DataGrid default font size.
        https://bugs.webkit.org/show_bug.cgi?id=112692

        Reviewed by Pavel Feldman.

        The default font of 10px is too small. Most instances of DataGrid set
        font to 11px.

        * inspector/front-end/dataGrid.css:
        (.data-grid table):

2013-03-19  Max Vujovic  <mvujovic@adobe.com>

        Refactor conditions for setCompositingLayersNeedRebuild in RenderLayer::styleChanged
        https://bugs.webkit.org/show_bug.cgi?id=112606

        Reviewed by Simon Fraser.

        To fix bug 109098 [1], we will need to add more conditions for calling
        RenderLayerCompositor::setCompositingLayersNeedRebuild in RenderLayer::styleChanged.
        Adding more non-trivial conditions will make this block of code even harder to follow.
        This patch refactors the current conditions into functions:
            needsCompositingLayersRebuiltForClip
            needsCompositingLayersRebuiltForOverflow

        In bug 109098 [1], I'm planning to add:
            needsCompositingLayersRebuiltForFilters

        [1]: https://bugs.webkit.org/show_bug.cgi?id=109098

        No new tests. Just refactoring.

        * rendering/RenderLayer.cpp:
        (WebCore):
        (WebCore::RenderLayer::needsCompositingLayersRebuiltForClip):
        (WebCore::RenderLayer::needsCompositingLayersRebuiltForOverflow):
            This is a method and not a file static function because it needs to look at the
            RenderLayer's stackingContainer(), which is a private method.
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        (RenderLayer):

2013-03-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Support kerning in fast path font rendering
        https://bugs.webkit.org/show_bug.cgi?id=106013

        Reviewed by Jocelyn Turcotte.

        To support kerning in the fast font path we need to implement SimpleFontData::applyTransforms.

        This patch changes the types used by the fast path GlyphBuffer to match those used by Qt,
        and implements SimpleFontData::applyTransforms using QRawFont::advancesForGlyphIndexes.

        * platform/graphics/GlyphBuffer.h:
        (GlyphBufferAdvance):
        (WebCore::GlyphBufferAdvance::GlyphBufferAdvance):
        (WebCore::GlyphBufferAdvance::setWidth):
        (WebCore::GlyphBufferAdvance::width):
        (WebCore::GlyphBufferAdvance::height):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::applyTransforms):
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::supportsTypesettingFeatures):

2013-03-19  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: split Console into two entities, a web-facing bound object and page console.
        https://bugs.webkit.org/show_bug.cgi?id=111578

        Reviewed by Vsevolod Vlasov.

        Otherwise, a lot of logging in WebCore needs to go through the DOMWindow which is unnecessary.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * dom/Document.cpp:
        (WebCore::Document::addConsoleMessage):
        (WebCore::Document::addMessage):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::muteConsole):
        (WebCore::PageDebuggerAgent::unmuteConsole):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::muteConsole):
        (WebCore::PageRuntimeAgent::unmuteConsole):
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        * page/Console.h:
        (WebCore):
        (Console):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::pageConsole):
        (WebCore):
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck):
        (WebCore::DOMWindow::printErrorMessage):
        * page/DOMWindow.h:
        (WebCore):
        (DOMWindow):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore):
        (WebCore::Page::console):
        (Page):
        * page/PageConsole.cpp: Added.
        (WebCore::PageConsole::PageConsole):
        (WebCore):
        (WebCore::PageConsole::~PageConsole):
        (WebCore::PageConsole::printSourceURLAndLine):
        (WebCore::PageConsole::printMessageSourceAndLevelPrefix):
        (WebCore::PageConsole::addMessage):
        (WebCore::PageConsole::mute):
        (WebCore::PageConsole::unmute):
        (WebCore::PageConsole::shouldPrintExceptions):
        (WebCore::PageConsole::setShouldPrintExceptions):
        * page/PageConsole.h: Copied from Source/WebCore/page/Console.h.
        (WebCore):
        (PageConsole):
        (WebCore::PageConsole::create):
        (WebCore::PageConsole::page):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):
        (WebCore::docLoaderFunc):

2013-03-19  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: move OverviewGrid and OverviewWindow into separate file.
        https://bugs.webkit.org/show_bug.cgi?id=112693

        Reviewed by Yury Semikhatsky.

        It is the third patch for the meta bug "Web Inspector: meta bug: extract OverviewGrid from TimelineOverviewPane"
        It just moves the OverviewGrid and the related classes into its own file.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * inspector/compile-front-end.py:
        * inspector/front-end/OverviewGrid.js: Added.
        (WebInspector.OverviewGrid):
        (WebInspector.OverviewGrid.prototype.itemsGraphsElement):
        (WebInspector.OverviewGrid.prototype.insertBeforeItemsGraphsElement):
        (WebInspector.OverviewGrid.prototype.clientWidth):
        (WebInspector.OverviewGrid.prototype.showItemsGraphsElement):
        (WebInspector.OverviewGrid.prototype.hideItemsGraphsElement):
        (WebInspector.OverviewGrid.prototype.updateDividers):
        (WebInspector.OverviewGrid.prototype.addEventDividers):
        (WebInspector.OverviewGrid.prototype.removeEventDividers):
        (WebInspector.OverviewGrid.prototype.setWindowPosition):
        (WebInspector.OverviewGrid.prototype.reset):
        (WebInspector.OverviewGrid.prototype.windowLeft):
        (WebInspector.OverviewGrid.prototype.windowRight):
        (WebInspector.OverviewGrid.prototype.setWindow):
        (WebInspector.OverviewGrid.prototype.addEventListener):
        (WebInspector.OverviewGrid.Window):
        (WebInspector.OverviewGrid.Window.prototype.reset):
        (WebInspector.OverviewGrid.Window.prototype._leftResizeElementDragging):
        (WebInspector.OverviewGrid.Window.prototype._rightResizeElementDragging):
        (WebInspector.OverviewGrid.Window.prototype._startWindowSelectorDragging):
        (WebInspector.OverviewGrid.Window.prototype._windowSelectorDragging):
        (WebInspector.OverviewGrid.Window.prototype._endWindowSelectorDragging):
        (WebInspector.OverviewGrid.Window.prototype._startWindowDragging):
        (WebInspector.OverviewGrid.Window.prototype._windowDragging):
        (WebInspector.OverviewGrid.Window.prototype._endWindowDragging):
        (WebInspector.OverviewGrid.Window.prototype._moveWindow):
        (WebInspector.OverviewGrid.Window.prototype._resizeWindowLeft):
        (WebInspector.OverviewGrid.Window.prototype._resizeWindowRight):
        (WebInspector.OverviewGrid.Window.prototype._resizeWindowMaximum):
        (WebInspector.OverviewGrid.Window.prototype._setWindow):
        (WebInspector.OverviewGrid.Window.prototype._setWindowPosition):
        (WebInspector.OverviewGrid.Window.prototype._onMouseWheel):
        (WebInspector.OverviewGrid.Window.prototype._zoom):
        (WebInspector.OverviewGrid.WindowSelector):
        (WebInspector.OverviewGrid.WindowSelector.prototype._createSelectorElement):
        (WebInspector.OverviewGrid.WindowSelector.prototype._close):
        (WebInspector.OverviewGrid.WindowSelector.prototype._updatePosition):
        * inspector/front-end/TimelineOverviewPane.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2013-03-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Monospace font does not render in proper sizes
        https://bugs.webkit.org/show_bug.cgi?id=93263

        Reviewed by Jocelyn Turcotte.

        Do not force fonts to use integer metrics. This was necessary when the fast font path
        only worked in integer but is now hindering accurate metrics. This is also required to
        make kerning in the fast-path look acceptable

        Only enabled for Qt 5.1+ to avoid changing all the baselines for 5.0.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2013-03-19  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: Add iframe option to inspectedWindow.eval() extension API
        https://bugs.webkit.org/show_bug.cgi?id=106811

        Reviewed by Vsevolod Vlasov.

        Add a new case to the options processing in inspectedWindow.eval(), look
        for option.frameURL <string> and/or option.scriptExecutionContext: <string>, find the
        matching JS context in the runtimeModel, and call evaluate() in that
        context; or error if the context is not found. 

        Test: http/tests/inspector/extensions-iframe-eval.html

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        (WebInspector.ExtensionServer.prototype.):
        (WebInspector.ExtensionServer.prototype.evaluate):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.frames):
           Added read access to _frames
       * inspector/front-end/RuntimeModel.js:
        (WebInspector.RuntimeModel.prototype.contextListByFrame):
           Added access to a frame's contextList, removed contextByFrameAndSecurityOrigin()
        (WebInspector.FrameExecutionContextList.prototype.mainWorldContext):
           Added access to frame's mainWorldContext, rather than implicit first context.
           Now we can go from ResourceTreeModel -> frame -> contextList then either
           mainWorldContext() or contextBySecurityOrigin() to access contexts.

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.):
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        (WebInspector.ExtensionServer.prototype.evaluate):
        * inspector/front-end/ResourceTreeModel.js:
        * inspector/front-end/RuntimeModel.js:
        (WebInspector.RuntimeModel.prototype.contextListByFrame):
        (WebInspector.FrameExecutionContextList.prototype.mainWorldContext):

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):
        (WebInspector.ExtensionServer.prototype.resolveURLToFrame.hasMatchingURL):
        (WebInspector.ExtensionServer.prototype.):
        (WebInspector.ExtensionServer.prototype.evaluate):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.frames):
        * inspector/front-end/RuntimeModel.js:
        (WebInspector.RuntimeModel.prototype.contextListByFrame):
        (WebInspector.FrameExecutionContextList.prototype.mainWorldContext):

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.resolveURLToFrame.hasMatchingURL):
        (WebInspector.ExtensionServer.prototype.):
        (WebInspector.ExtensionServer.prototype.evaluate):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.frames):
        * inspector/front-end/RuntimeModel.js:
        (WebInspector.RuntimeModel.prototype.contextListByFrame):
        (WebInspector.FrameExecutionContextList.prototype.mainWorldContext):

2013-03-19  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: rename TimelineOverviewWindow to OverviewGrid.Window and fix names for constants.
        https://bugs.webkit.org/show_bug.cgi?id=112685

        Reviewed by Yury Semikhatsky.

        It is the second patch which extracts OverviewGrid from TimelineOverviewPane.
        It renames internal components of OverviewGrid.
        WebInspector.TimelineOverviewWindow -> WebInspector.OverviewGrid.Window
        WebInspector.TimelineOverviewWindow.WindowSelector -> WebInspector.OverviewGrid.WindowSelector

        and moves constants from WebInspector.TimelineOverviewWindow namespace to WebInspector.OverviewGrid namespace

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.OverviewGrid):
        (WebInspector.OverviewGrid.Window):
        (WebInspector.OverviewGrid.Window.prototype._startWindowSelectorDragging):
        (WebInspector.OverviewGrid.Window.prototype._endWindowSelectorDragging):
        (WebInspector.OverviewGrid.Window.prototype._startWindowDragging):
        (WebInspector.OverviewGrid.Window.prototype._windowDragging):
        (WebInspector.OverviewGrid.Window.prototype._moveWindow):
        (WebInspector.OverviewGrid.Window.prototype._resizeWindowRight):
        (WebInspector.OverviewGrid.Window.prototype._setWindowPosition):
        (WebInspector.OverviewGrid.Window.prototype._onMouseWheel):
        (WebInspector.OverviewGrid.Window.prototype._zoom):
        (WebInspector.OverviewGrid.WindowSelector):
        (WebInspector.OverviewGrid.WindowSelector.prototype._createSelectorElement):

2013-03-19  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: move _timelineGrid && _timelineOverviewWindow from TimelineOverviewPane into a new class OverviewGrid.
        https://bugs.webkit.org/show_bug.cgi?id=112584

        Reviewed by Pavel Feldman.

        It is the first path in the set.
        The end goal is to extract OverviewGrid with window selectors
        into a separate class in separate file and reuse it in CPU FlameChart.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.OverviewGrid):
        (WebInspector.OverviewGrid.prototype.get grid):
        (WebInspector.OverviewGrid.prototype.get clientWidth):
        (WebInspector.OverviewGrid.prototype.showItemsGraphsElement):
        (WebInspector.OverviewGrid.prototype.hideItemsGraphsElement):
        (WebInspector.OverviewGrid.prototype.updateDividers):
        (WebInspector.OverviewGrid.prototype.addEventDividers):
        (WebInspector.OverviewGrid.prototype.removeEventDividers):
        (WebInspector.OverviewGrid.prototype.setWindowPosition):
        (WebInspector.OverviewGrid.prototype.reset):
        (WebInspector.OverviewGrid.prototype.get windowLeft):
        (WebInspector.OverviewGrid.prototype.get windowRight):
        (WebInspector.OverviewGrid.prototype.setWindow):
        (WebInspector.OverviewGrid.prototype.addEventListener):
        (WebInspector.TimelineOverviewPane.prototype.setMode):
        (WebInspector.TimelineOverviewPane.prototype._setFrameMode):
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype.sidebarResized):
        (WebInspector.TimelineOverviewPane.prototype.zoomToFrame):
        (WebInspector.TimelineOverviewPane.prototype._reset):
        (WebInspector.TimelineOverviewPane.prototype.windowLeft):
        (WebInspector.TimelineOverviewPane.prototype.windowRight):
        (WebInspector.TimelineOverviewPane.prototype._updateWindow):

2013-03-19  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Add Inspector.targetCrashed event to Inspector protocol.
        https://bugs.webkit.org/show_bug.cgi?id=112669

        Added Inspector.targetCrashed event and handled it on the front end.
        Showing a modal dialog similar to the one displayed when the remote
        debugging target is disconnected.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreenUntilReload):
        (WebInspector.HelpScreenUntilReload.prototype.willHide):
        * inspector/front-end/inspector.js:
        (WebInspector.targetCrashed):

2013-03-19  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Wrong guard USE(GLX) in RedirectedXCompositeWindow
        https://bugs.webkit.org/show_bug.cgi?id=112600

        Reviewed by Martin Robinson.

        Replace USE(GLX) condition with USE(OPENGL) && PLATFORM(X11).

        * platform/gtk/RedirectedXCompositeWindow.cpp: Updated guard.
        * platform/gtk/RedirectedXCompositeWindow.h: Ditto.

2013-03-19  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Crash reflowing content in variable width regions
        https://bugs.webkit.org/show_bug.cgi?id=112515

        Reviewed by David Hyatt.

        When removing floats during relayout of a line in a paginated context,
        we have to make sure that the floats collection actually has elements before
        accessing the last float from the collection.
        This situation arises when a block had floats in a previous layout and after
        they were removed, m_floatingObjects is not destroyed, only emptied.

        Test: fast/regions/crash-reflow-inline-content-in-variable-width-regions.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):

2013-03-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Debugger scripts should visually differ from network/filesystem files in workspace.
        https://bugs.webkit.org/show_bug.cgi?id=112552

        Reviewed by Pavel Feldman.

        Extracted ContentProviderBasedProjectDelegate from SimpleProjectDelegate.
        Implemented DebuggerProjectDelegate for DefaultScriptMapping.
        Debugger scripts are now added to workspace with a name starting with [VM] and ending with scriptId.
        Added yellow background to debugger scripts editor.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/ContentProviderBasedProjectDelegate.js: Added.
        * inspector/front-end/DefaultScriptMapping.js:
        (WebInspector.DefaultScriptMapping):
        (WebInspector.DefaultScriptMapping.prototype.addScript):
        (WebInspector.DefaultScriptMapping.prototype._debuggerReset):
        (WebInspector.DebuggerProjectDelegate):
        (WebInspector.DebuggerProjectDelegate.prototype.id):
        (WebInspector.DebuggerProjectDelegate.prototype.type):
        (WebInspector.DebuggerProjectDelegate.prototype.displayName):
        (WebInspector.DebuggerProjectDelegate.prototype.addScript):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        * inspector/front-end/ParsedURL.js:
        (WebInspector.ParsedURL.splitURL):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleProjectDelegate):
        (WebInspector.SimpleProjectDelegate.prototype.addFile):
        (WebInspector.SimpleProjectDelegate.prototype._ensureUniquePath):
        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFileForURL):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/Workspace.js:
        (WebInspector.Workspace.prototype.uiSourceCodeForURL):
        * inspector/front-end/inspector.html:
        * inspector/front-end/javaScriptSourceFrame.css: Added.
        (.source-frame-debugger-script):

2013-03-19  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] add smart braces functionality
        https://bugs.webkit.org/show_bug.cgi?id=112138

        Reviewed by Vsevolod Vlasov.

        No new tests.

        Add closebrackets add-on to codemirror which implements smart braces
        functionality and guard this setting with the "Text Editor smart
        braces" experiment.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * inspector/front-end/CodeMirrorTextEditor.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/cm/closebrackets.js: Added.
        (.):

2013-03-19  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: Avoid forcing text editor resize
        https://bugs.webkit.org/show_bug.cgi?id=112581

        Reviewed by Vsevolod Vlasov.

        No new tests.

        Avoid unnecessary text editor resizing by removing line decoration
        via removeDecoration method instead of DOM remove operation.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.clearMessages):
        (WebInspector.SourceFrame.prototype._setTextEditorDecorations):

2013-03-19  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] fix cursor movements
        https://bugs.webkit.org/show_bug.cgi?id=112555

        Reviewed by Vsevolod Vlasov.

        No new tests.

        - Update CodeMirror to ToT to include its improved cursor movement
        - Add a small keymap to force cursor stop on both line endings and line
        starts.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        (WebInspector.CodeMirrorTextEditor.FixWordMovement):
        (WebInspector.CodeMirrorTextEditor.FixWordMovement.moveRight):
        * inspector/front-end/cm/codemirror.css:
        (.CodeMirror div.CodeMirror-cursor):
        (.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor):
        (.CodeMirror):
        * inspector/front-end/cm/codemirror.js:
        (window.CodeMirror):
        (window.CodeMirror.):

2013-03-19  Adam Barth  <abarth@webkit.org>

        [chromium] Regression(143825): select elements don't open when there is a marquee on the page
        https://bugs.webkit.org/show_bug.cgi?id=111278

        Unreviewed.

        This patch is a rollout of http://trac.webkit.org/changeset/143825. The
        original patch caused a regression in the Chromium port.

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

2013-03-19  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Matching @host rule children are not displayed
        https://bugs.webkit.org/show_bug.cgi?id=112664

        Reviewed by Vsevolod Vlasov.

        Process host rules' contents akin to media rules' when handling the CSS model and source data.

        Test: platform/chromium/inspector/styles/host-rules.html

        * inspector/InspectorStyleSheet.cpp:
        (flattenSourceData):
        (WebCore::asCSSRuleList):

2013-03-18  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] The "inherit" property value should be suggested for all properties
        https://bugs.webkit.org/show_bug.cgi?id=112662

        Reviewed by Vsevolod Vlasov.

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

2013-03-18  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r146088): ResourceRequest::cfURLRequest() is defined twice on iOS
        <http://webkit.org/b/112387>

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::cfURLRequest): Move method into
        !USE(CFNETWORK) section since it's also defined in
        cf/ResourceRequestCFNet.cpp on iOS.

2013-03-18  Alpha Lam  <hclam@chromium.org>

        [chromium] More tracing in deferred image decoding
        https://bugs.webkit.org/show_bug.cgi?id=112648

        Reviewed by James Robinson.

        Adding more trace events for a couple things in deferred image decoding path:
        - Time span for each lock pixels of SkPixelRef.
        - Time spent on decoding, scaling and pruning. Also the stack trace for these events.
        - Memory usage and number of cached entries.
        - Number of decode & scale operations done per image.

        No test as this just add tracing information and no behavior change.

        * platform/graphics/chromium/ImageDecodingStore.cpp:
        (WebCore::ImageDecodingStore::prune):
        (WebCore::ImageDecodingStore::insertCacheInternal):
        (WebCore::ImageDecodingStore::removeFromCacheInternal):
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::decodeAndScale):
        (WebCore::ImageFrameGenerator::tryToScale):
        (WebCore::ImageFrameGenerator::tryToResumeDecodeAndScale):
        (WebCore::ImageFrameGenerator::tryToDecodeAndScale):
        (WebCore::ImageFrameGenerator::decode):
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (ImageFrameGenerator):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::onLockPixels):
        (WebCore::LazyDecodingPixelRef::onUnlockPixels):
        (WebCore::LazyDecodingPixelRef::PrepareToDecode):

2013-03-18  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests after r146161.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjEnumAttr):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArg):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):

2013-03-18  Robert Flack  <flackr@chromium.org>

        [chromium] Small pixel differences in scroll bars after r145844
        https://bugs.webkit.org/show_bug.cgi?id=112384

        Reviewed by Kenneth Russell.

        Tests: fast/forms/basic-textareas-quirks.html
               fast/forms/basic-textareas.html
               fast/overflow/overflow-x-y.html
               fast/parser/open-comment-in-textarea.html
               fast/replaced/width100percent-textarea.html

        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::trackRect):

2013-03-18  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build correction.

        The "ImageDecoder.h" file was improperly tagged as a source file to
        build, causing a build failure on initial build attempts. Subsequent
        or incremental builds would work.

        * WebCore.vcxproj/WebCore.vcxproj: Exclude CG-specific font files.
        Switch 'ImageDecoder.h' to proper source file type.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2013-03-18  James Robinson  <jamesr@chromium.org>

        [chromium] Remove unused type WebTransformationMatrix
        https://bugs.webkit.org/show_bug.cgi?id=112634

        Reviewed by Adam Barth.

        * WebCore.gypi:
        * platform/chromium/support/WebTransformationMatrix.cpp: Removed.

2013-03-18  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        Add IDL 'enum' support to CodeGeneratorJS.pm
        https://bugs.webkit.org/show_bug.cgi?id=112475

        Reviewed by Kentaro Hara.

        This adds support for enumerations in JS, adding validation checking
        to setters.
        It also does validation checking to methods, and a new method
        methodWithEnumArg in TestObj.idl

        Test: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateParametersCheck):
        (NativeToJSValue):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::methodWithEnumArg):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_method_with_enum_arg):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjEnumAttr):
        (WebCore::setJSTestObjEnumAttr):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArg):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj methodWithEnumArg:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::methodWithEnumArgMethod):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::methodWithEnumArgMethodCallback):
        (WebCore::ConfigureV8TestObjTemplate):

2013-03-18  Sam Weinig  <sam@webkit.org>

        Need a bundle SPI to generate a snapshot of a specific DOM node (like [DOMNode renderedImage])
        <rdar://problem/13148631>
        https://bugs.webkit.org/show_bug.cgi?id=110034

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        Add some necessary exports.

2013-03-18  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Build WebCore under VS2010
        https://bugs.webkit.org/show_bug.cgi?id=112637

        Reviewed by Tim Horton.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj: Extend project
        with WinCairo-specific build targets.
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCairoDebug.props: Added.
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCairoRelease.props: Added.
        * WebCore.vcxproj/WebCore.vcxproj: Update to build WinCairo version
        of code.
        * WebCore.vcxproj/WebCoreCURL.props: Added.
        * WebCore.vcxproj/WebCoreCairo.props: Added.
        * WebCore.vcxproj/WebCoreDebugWinCairo.props: Added.
        * WebCore.vcxproj/WebCoreGenerated.vcxproj:
        * WebCore.vcxproj/WebCoreGeneratedDebugWinCairo.props: Added.
        * WebCore.vcxproj/WebCoreGeneratedReleaseWinCairo.props: Added.
        * WebCore.vcxproj/WebCoreGeneratedWinCairo.make: Added.
        * WebCore.vcxproj/WebCoreGeneratedWinCairoCommon.props: Added.
        * WebCore.vcxproj/WebCoreReleaseWinCairo.props: Added.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:
        * WebCorePrefix.h: Update header to not include Apple-specific
        headers during WinCairo build.

2013-03-18  Joshua Bell <jsbell@chromium.org>

        IDB Cursor continue moves one item at a time
        https://bugs.webkit.org/show_bug.cgi?id=109972

        Reviewed by Tony Chang.

        IndexedDB: Use seek on the underlying levelDB iterator to implement the continue operation
        on a cursor, instead of advancing one item at a time. On a simple test in Chrome - open a
        key cursor on an index w/ 100 items, then do continue(50), rinse and repeat - this cuts the
        time 50% (850c/s to 1700c/s). (Original patch c/o Pankaj Kakkar <pankaj@google.com>)

        Covered by existing storage/indexeddb cursor tests; just a performance optimization.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::Cursor::continueFunction): Special case first iteration w/ key
        to use leveldb seek (forward cursors only, since reverse seek isn't exposed).
        (WebCore::ObjectStoreKeyCursorImpl::encodeKey): Helper for encoding key to seek to.
        (WebCore::ObjectStoreCursorImpl::encodeKey): Ditto.
        (WebCore::IndexKeyCursorImpl::encodeKey): Ditto.
        (WebCore::IndexCursorImpl::encodeKey): Ditto.
        (WebCore::objectStoreCursorOptions): Store IDs for encodeKey() to use.
        (WebCore::indexCursorOptions): Ditto.
        * Modules/indexeddb/IDBBackingStore.h:
        (CursorOptions): Storage for IDs.
        (Cursor): Add encodeKey() to interface.

2013-03-18  Alexey Proskuryakov  <ap@apple.com>

        MessagePortChannel::EventData should not be exposed
        https://bugs.webkit.org/show_bug.cgi?id=112635

        Reviewed by Geoff Garen.

        MessagePortChannel::EventData is an implementation detail that's only needed to
        store events in MessageQueue. Other existing code already gets away without it,
        just passing message and ports separately.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::dispatchMessages):
        * dom/MessagePortChannel.cpp:
        * dom/MessagePortChannel.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::PlatformMessagePortChannel::EventData::create):
        (WebCore::PlatformMessagePortChannel::EventData::EventData):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::EventData::message):
        (WebCore::PlatformMessagePortChannel::EventData::channels):
        (PlatformMessagePortChannel):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::appendAndCheckEmpty):
        * dom/default/chromium/PlatformMessagePortChannelChromium.cpp:
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        (WebCore::PlatformMessagePortChannel::postMessageToRemote):
        (WebCore::PlatformMessagePortChannel::tryGetMessageFromRemote):
        * dom/default/chromium/PlatformMessagePortChannelChromium.h:

2013-03-18  Tom Sepez  <tsepez@chromium.org>

        [v8] Suppress binding integrity check of HTMLContentElement.
        https://bugs.webkit.org/show_bug.cgi?id=112613

        Reviewed by Adam Barth.

        Patch is correct so long as fast/dom/shadow/content-element-user-agent-shadow.html
        continues to pass.

        * html/shadow/HTMLContentElement.idl:

2013-03-18  Dominic Mazzoni  <dmazzoni@google.com>

        Support Windows HTMLSelectElement keystrokes on Chromium win
        https://bugs.webkit.org/show_bug.cgi?id=112460

        Reviewed by Kent Tamura.

        Compile in the windows-specific variant of
        HTMLSelectElement::platformHandleKeydownEvent
        on Chromium win, in addition to PLATFORM(WIN).

        * WebCore.gypi:
            Add html/HTMLSelectElementWin.cpp.
        * html/HTMLSelectElement.cpp:
            Don't compile generic platformHandleKeydownEvent on
            Chromium win.
        * html/HTMLSelectElementWin.cpp:
            Only compile platformHandleKeydownEvent on Windows.
            Fix compile error in assertion.
        (WebCore):

2013-03-18  Mike West  <mkwst@chromium.org>

        CSP 1.1: Schemeless source expressions match HTTPS resources on HTTP sites.
        https://bugs.webkit.org/show_bug.cgi?id=112573

        Reviewed by Adam Barth.

        Currently, the directive 'script-src example.com' would match only
        scripts served from 'http://example.com' when served on an HTTP site,
        and only scripts served from 'https://example.com' when served on an
        HTTPS site. This patch changes the matching behavior for ports that
        have enabled CSP_NEXT in order to encourage use of HTTPS resources by
        allow schemeless source expressions to match HTTPS origins when on
        HTTP sites.

        Thread: http://lists.w3.org/Archives/Public/public-webappsec/2013Mar/0013.html
        Spec change: https://dvcs.w3.org/hg/content-security-policy/rev/a7dc8820946e

        Test: http/tests/security/contentSecurityPolicy/source-list-parsing-10.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSource::CSPSource):
            Pass the current policy into CSPSource so that we can check the
            protected resource's scheme inside schemeMatches, rather than
            overwriting the source expression's scheme before creating the
            CSPSource.
        (WebCore::CSPSource::schemeMatches):
            If CSP_NEXT is enabled, ensure that HTTPS resources match the
            HTTP scheme when loaded on HTTP pages with schemaless source
            expressions.
        (WebCore::CSPSource::portMatches):
            Check the port against the URL's scheme: if m_scheme isn't
            empty, this will match it. If m_scheme is empty, we can't
            do a strict match against it, nor can we do a strict match
            against the protected resource's port. Checking the URL's
            port against the default port for its scheme solves this
            problem elegantly.
        (WebCore::CSPSourceList::parse):
        (WebCore::CSPSourceList::addSourceSelf):
            Pass in the policy when creating a CSPSource object.

2013-03-15  Jer Noble  <jer.noble@apple.com>

        Text track cues do not update sizes when entering or exiting full screen.
        https://bugs.webkit.org/show_bug.cgi?id=112472

        Reviewed by Eric Carlson.

        The style properties of the TextCueBoxes were not being updated after the size of the video bounds changed.
        Because getDisplayTree() will not do it when the cue itself has not changed, explicitly call videoSizeDidChange()
        from updateSizes().

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): call videoSizeDidChange() on every active cue.
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::hasDisplayTree): returns whether or not the cue has created a display tree without side effects.
        (WebCore::TextTrackCue::videoSizeDidChange): Overridable empty method.
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::videoSizeDidChange): Update the CSS height attribute of the cue box using the new video size.
        * html/track/TextTrackCueGeneric.h:

2013-03-18  Mike West  <mkwst@chromium.org>

        CSP 1.1: Add 'effective-directive' to violation reports.
        https://bugs.webkit.org/show_bug.cgi?id=112568

        Reviewed by Adam Barth.

        https://dvcs.w3.org/hg/content-security-policy/rev/bc2bb0e5072a
        introduced an 'effective-directive' field on CSP violation reports,
        which allows developers to distinguish between resource types when
        'default-src' is the violated directive.

        This patch implements the new field behind the CSP_NEXT flag.

        Test: http/tests/security/contentSecurityPolicy/1.1/report-uri-effective-directive.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::checkSourceAndReportViolation):
        (WebCore::CSPDirectiveList::reportViolation):
            These methods now accept an additional parameter to pipe the
            effective directive from the initial callsite down into
            ContentSecurityPolicy::reportViolation.
        (WebCore::CSPDirectiveList::checkEvalAndReportViolation):
        (WebCore::CSPDirectiveList::checkNonceAndReportViolation):
        (WebCore::CSPDirectiveList::checkMediaTypeAndReportViolation):
        (WebCore::CSPDirectiveList::checkInlineAndReportViolation):
        (WebCore::CSPDirectiveList::allowScriptFromSource):
        (WebCore::CSPDirectiveList::allowObjectFromSource):
        (WebCore::CSPDirectiveList::allowChildFrameFromSource):
        (WebCore::CSPDirectiveList::allowImageFromSource):
        (WebCore::CSPDirectiveList::allowStyleFromSource):
        (WebCore::CSPDirectiveList::allowFontFromSource):
        (WebCore::CSPDirectiveList::allowMediaFromSource):
        (WebCore::CSPDirectiveList::allowConnectToSource):
        (WebCore::CSPDirectiveList::allowFormAction):
            These methods now pass the effective directive name down
            into checkSourceAndReportViolation or reportViolation.
        (WebCore::ContentSecurityPolicy::reportViolation):
        * page/ContentSecurityPolicy.h:
            This method now accepts a new parameter that carries
            the effective directive name. If CSP_NEXT is enabled,
            the field is added to the violation report before it's
            sent out into the world.

2013-03-18  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Remove NCCH code that relies on boundsContainsPageScale().
        https://bugs.webkit.org/show_bug.cgi?id=112465

        Reviewed by James Robinson.

        The boundsContainsPageScale() API is going away, remove code that
        depends on it. Uses existing tests as no behaviour change.

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

2013-03-18  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Protect against key prefix overflows
        https://bugs.webkit.org/show_bug.cgi?id=111138

        Reviewed by Tony Chang.

        This reworks the boundary checking for all databaseId,
        objectStoreId, and indexId, including negative and
        zero-based ids. All entrypoints into IDBLevelDBCoding
        are protected with explicit checks and all internal
        uses of KeyPrefix are protected with ASSERTs in the
        various constructors.

        Tests: WebKit unit tests IDBBackingStoreTest.cpp in WebKit/chromium

        * Modules/indexeddb/IDBBackingStore.h: Make all public methods boolean-based for errors.
        * Modules/indexeddb/IDBLevelDBCoding.h: Add methods for checking databaseId, objectStoreId, and indexId.

2013-03-18  Roger Fong  <roger_fong@apple.com>

        AppleWin VS2010 Debug configuration build fix.

        * WebCore.vcxproj/WebCore.vcxproj:

2013-03-18  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=112627
        MessagePort::disentangle() takes an ExceptionCode argument without any need

        Reviewed by Geoffrey Garen.

        MessagePort::disentangle() is called in two places. One has ASSERT_NO_EXCEPTION,
        and another fails to check the exception, but clearly cannot get one.

        This function is also not exposed to bindings.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::disentangle):
        (WebCore::MessagePort::disentanglePorts):
        * dom/MessagePort.h:
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        Also removed some unhelpful comments.

2013-03-18  Xianzhu Wang  <wangxianzhu@chromium.org>

        Variant of non-primary fell-back SVGFont causes crash.
        https://bugs.webkit.org/show_bug.cgi?id=112367

        Reviewed by Stephen Chenney.

        Don't go to PlatformFontData path for SimpleFontData::createScaledFontData()
        for SVG fonts.

        Test: svg/css/font-face-variant-crash.html

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::~SimpleFontData):
        (WebCore::SimpleFontData::createScaledFontData): Don't go to PlatformFontData path for SVG fonts.
        (WebCore):
        * platform/graphics/SimpleFontData.h:
        (SimpleFontData): Added createScaledFontData and renamed the original createScaledFontData to platformCreateScaledFontData.
                          BTW, Removed unreferenced commonInit.
        * platform/graphics/blackberry/SimpleFontDataBlackBerry.cpp:
        (WebCore::SimpleFontData::platformCreateScaledFontData): Renamed from createScaledFontData.
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformCreateScaledFontData): Ditto.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformCreateScaledFontData): Ditto.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformCreateScaledFontData): Ditto.
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformCreateScaledFontData): Ditto.
        * platform/graphics/skia/SimpleFontDataSkia.cpp:
        (WebCore::SimpleFontData::platformCreateScaledFontData): Ditto.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::platformCreateScaledFontData): Ditto.
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        (WebCore::SimpleFontData::platformCreateScaledFontData): Ditto.
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformCreateScaledFontData): Ditto.

2013-03-18  Victor Carbune  <vcarbune@chromium.org>

        Determine text direction for rendering a TextTrackCue
        https://bugs.webkit.org/show_bug.cgi?id=79749

        Reviewed by Levi Weintraub.

        The rendering rules for WebVTT cues are slightly different
        depending on the directionality determined from the characters
        of the cue text. This patch implements the preliminary step
        to be able to take directionality into account.

        It iterates through the cue characters and setting the CSS
        directionality to the one of the first strong directional character.

        Test: media/track/track-cue-rendering-rtl.html

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::applyCSSProperties): Applies the determined
        direction.
        (WebCore::TextTrackCue::TextTrackCue): Sets the default value for the
        display direction.
        (WebCore::isCueParagraphSeparator): Tests for explicit unicode characters
        that are paragraph separators.
        (WebCore):
        (WebCore::TextTrackCue::determineTextDirection): Determined the direction
        by the first strong directional character found.
        (WebCore::TextTrackCue::calculateDisplayParameters): Updated.
        (WebCore::TextTrackCue::getCSSWritingDirection): Return the determined CSS
        writing direction.
        * html/track/TextTrackCue.h:
        (TextTrackCue):

2013-03-18  Hans Wennborg  <hans@chromium.org>

        Fix GridTrackSize::operator==
        https://bugs.webkit.org/show_bug.cgi?id=112501

        Reviewed by Eric Seidel.

        There was a missing "other." in the function.

        This was found by experimenting with a potential new Clang warning.

        Test: fast/css-grid-layout/grid-dynamic-updates-relayout.html

        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::operator==):

2013-03-18  Alec Flett  <alecflett@chromium.org>

        Inspector: [Chromium] http/tests/inspector/indexeddb/database-data.html ASSERT on Win7 following r133855
        https://bugs.webkit.org/show_bug.cgi?id=101618

        Deactivate transactions created by the inspector, before
        they are reactivated by IndexedDB. This puts transactions
        in an identical state as when they are created by scripts.

        Reviewed by Vsevolod Vlasov.

        Test: http/tests/inspector/indexeddb/database-data.html

        * inspector/InspectorIndexedDBAgent.cpp: Make transactions inactive upon leaving the inspector code.

2013-03-15  Jeffrey Pfau  <jpfau@apple.com>

        Allow blocking of application cache in third-party contexts
        https://bugs.webkit.org/show_bug.cgi?id=112288

        Reviewed by Adam Barth.

        Return early if we can't access the application cache due to security
        restrictions.

        Tests: http/tests/security/cross-origin-appcache-allowed.html
               http/tests/security/cross-origin-appcache.html
               http/tests/security/same-origin-appcache-blocked.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessApplicationCache):

2013-03-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Script should know nothing about disabled source mappings.
        https://bugs.webkit.org/show_bug.cgi?id=112580

        Reviewed by Pavel Feldman.

        ResourceScriptMapping handles diverged uiSourceCodes internally now.

        Tested in inspector/debugger/live-edit-breakpoints.html already.

        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.ResourceScriptMapping.prototype._hasMergedToVM):
        (WebInspector.ResourceScriptMapping.prototype._hasDivergedFromVM):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.rawLocationToUILocation):

2013-03-18  Alexey Proskuryakov  <ap@apple.com>

        Update MessagePort terminology to match HTML5
        https://bugs.webkit.org/show_bug.cgi?id=112611

        Reviewed by Anders Carlsson.

        Transferable objects are "neutered" when transfered. Cloning is a different operation.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::disentanglePorts):
        * dom/MessagePort.h:
        (WebCore::MessagePort::isEntangled):
        (WebCore::MessagePort::isNeutered):

2013-03-18  Roger Fong  <roger_fong@apple.com>

        AppleWin VS2010 build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-03-18  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        [css3-text] Add rendering support for -webkit-text-underline-position
        https://bugs.webkit.org/show_bug.cgi?id=102795

        Reviewed by Levi Weintraub.

        This patch implements rendering support for values [ auto | alphabetic | under ]
        of CSS3 property text-underline-position. We don't fully match the specification
        as we don't support [ left | right ] and this is left for another implementation
        as the rendering will need to be added.

        Tests: fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-all.html
               fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-alphabetic.html
               fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-auto.html
               fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under-out-of-flow.html
               fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-under.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeMaxLogicalTop): Added method to compute maximal logical top among all chidren of
        this InlineTextBox.
        * rendering/InlineFlowBox.h:
        (InlineFlowBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::computeUnderlineOffset): Added method to compute offset for text-underline-position property.
        (WebCore::InlineTextBox::paintDecoration): Paint decoration at position calculated using computeUnderlineOffset().
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::alignBoxesInBlockDirection): Call method to compute maximal logical top among all
        children of this RootInlineBox.
        * rendering/RootInlineBox.h:
        (RootInlineBox):
        (WebCore::RootInlineBox::maxLogicalTop): Added getter for m_maxLogicalTop class member.
        * rendering/style/RenderStyle.h: Added the usual getter / setter / initial methods for text-underline-position
        property

2013-03-18  Christian Biesinger  <cbiesinger@chromium.org>

        Convert old flexbox uses in html.css to new flexbox (non-<select>)
        https://bugs.webkit.org/show_bug.cgi?id=110837

        Reviewed by Ojan Vafai.

        No new tests (No change in behaviour)

        * css/html.css:
        (input::-webkit-clear-button):
        Missed this one in the original patch.

2013-03-18  Wei James  <james.wei@intel.com>

        AudioBasicProcessorNode need to check for deferred updating of output channels
        https://bugs.webkit.org/show_bug.cgi?id=112544

        There can in rare cases be a slight delay before the output
        bus is updated to the new number of channels because of tryLocks() in the
        context's updating system but the processor already updated to the new
        number of channels, so need to check the channel number before processing.

        Reviewed by Chris Rogers.

        * Modules/webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::process):
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::process):
        * platform/audio/AudioDSPKernelProcessor.cpp:
        (WebCore::AudioDSPKernelProcessor::AudioDSPKernelProcessor):
        * platform/audio/AudioDSPKernelProcessor.h:
        (WebCore::AudioDSPKernelProcessor::numberOfChannels):
        (AudioDSPKernelProcessor):
        * platform/audio/AudioProcessor.h:
        (WebCore::AudioProcessor::AudioProcessor):
        (AudioProcessor):

2013-03-18  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Fix StyleGridData::operator==
        https://bugs.webkit.org/show_bug.cgi?id=112574

        Reviewed by Ojan Vafai.

        Test: fast/css-grid-layout/grid-auto-flow-update.html

        * rendering/style/StyleGridData.h:
        (WebCore::StyleGridData::operator==):
        Fixed a bad comparison that would make us ignore grid-auto-flow changes.

2013-03-18  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] parseError check in processTemplateEndTag should use hasTagName, not hasLocalName
        https://bugs.webkit.org/show_bug.cgi?id=112591

        Reviewed by Adam Barth.

        No tests needed, change is unobservable.

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

2013-03-18  Brady Eidson  <beidson@apple.com>

        NetworkProcess should send vm_copied, mmap'ed memory to WebProcesses when a 
        resource is already in the disk cache.
        <rdar://problem/13414153> and https://bugs.webkit.org/show_bug.cgi?id=112387

        Reviewed by Geoff Garen.

        No new tests (No change in behavior).

        * WebCore.exp.in:

        Add a CFURLRequestRef accessor even in the mac NSURL-based loader:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::cfURLRequest):

2013-03-18  Dean Jackson  <dino@apple.com>

        Only add wordspacing when kerning to actual word ends
        https://bugs.webkit.org/show_bug.cgi?id=112507
        <rdar://problem/12945869>

        Reviewed by Enrica Casucci.

        When measuring text, we currently include any word spacing in
        the result (it's removed later). When kerning is active, we
        were adding the word spacing to every wordMeasurement instance
        whether or not it is a separate word. For example, a nested
        <span> element would get a wordMeasurement, even though it
        should not always get word spacing.

        Test: fast/text/word-space-with-kerning-3.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun): Test if the current character
        referenced by the wordMeasurement is a space character, and add word
        spacing only then.

2013-03-18  Tony Chang  <tony@chromium.org>

        [chromium] Default background color of listboxes should be white
        https://bugs.webkit.org/show_bug.cgi?id=112480

        Reviewed by Ojan Vafai.

        I think it was an accident that list boxes got the grey background color as a
        side effect of trying to get the button styling. In the default GTK+ theme on
        Ubuntu, list boxes get a white background. Win and OS X also use white as the
        default color.

        No new tests, covered by existing pixel tests.

        * css/themeChromiumLinux.css:
        Narrow the CSS rule that overrides the background color specified in html.css.
        We only want to use the button color when a select is using button styling.

2013-03-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146079.
        http://trac.webkit.org/changeset/146079
        https://bugs.webkit.org/show_bug.cgi?id=112594

        many timeline tests failed. (Requested by loislo on #webkit).

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.setMode):
        (WebInspector.TimelineOverviewPane.prototype._setFrameMode):
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype.sidebarResized):
        (WebInspector.TimelineOverviewPane.prototype.zoomToFrame):
        (WebInspector.TimelineOverviewPane.prototype._reset):
        (WebInspector.TimelineOverviewPane.prototype.windowLeft):
        (WebInspector.TimelineOverviewPane.prototype.windowRight):
        (WebInspector.TimelineOverviewPane.prototype._updateWindow):

2013-03-18  Peter Beverloo  <peter@chromium.org>

        [Chromium] The <select> element on Android should also switch to new-flexbox
        https://bugs.webkit.org/show_bug.cgi?id=112559

        Reviewed by Ojan Vafai.

        Following r145959, also update themeChromiumAndroid.css to use the new
        flexible box CSS properties. Covered by existing tests.

        * css/themeChromiumAndroid.css:
        (select[size][multiple]):

2013-03-18  Renata Hodovan  <reni@webkit.org>

        Assertion faulire in SVGAnimatedPath.
        https://bugs.webkit.org/show_bug.cgi?id=106428

        Reviewed by Allan Sandfeld Jensen.

        The asserts are too restricted. The size must be greater or equal to 1.

        Test: svg/animations/animated-path-via-use-debug-crash.svg

        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPathAnimator::resetAnimValToBaseVal):

2013-03-18  Simon Fraser  <simon.fraser@apple.com>

        [Mac] Some tests intermittently asserts in SharedBuffer::releasePurgeableBuffer()
        https://bugs.webkit.org/show_bug.cgi?id=105986

        Reviewed by Brady Eidson.
        
        A ResourceBuffer's SharedBuffer can be vended out to other clients,
        for example Images, so there's no guarantee that when the
        ResourceBuffer only has one ref its SharedBuffer will also have just one.
        When this assumption was broken, SharedBuffer::releasePurgeableBuffer()
        would assert.
        
        Ideally SharedBuffer would be entirely encapsulated by ResourceBuffer to
        avoid this problem, but ResourceBuffer can't be used by code in platform/.
        
        Fix by having ResourceBuffer::createPurgeableBuffer() refuse to make
        a purgeable buffer if the sharedBuffer has more than one ref.

        Tested by existing tests.

        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::createPurgeableBuffer):

2013-03-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: move _timelineGrid && _timelineOverviewWindow from TimelineOverviewPane into a new class OverviewGrid.
        https://bugs.webkit.org/show_bug.cgi?id=112584

        Reviewed by Pavel Feldman.

        It is the first path in the set.
        The end goal is to extract OverviewGrid with window selectors
        into a separate class in separate file and reuse it in CPU FlameChart.

        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.OverviewGrid):
        (WebInspector.OverviewGrid.prototype.get grid):
        (WebInspector.OverviewGrid.prototype.get clientWidth):
        (WebInspector.OverviewGrid.prototype.showItemsGraphsElement):
        (WebInspector.OverviewGrid.prototype.hideItemsGraphsElement):
        (WebInspector.OverviewGrid.prototype.updateDividers):
        (WebInspector.OverviewGrid.prototype.addEventDividers):
        (WebInspector.OverviewGrid.prototype.removeEventDividers):
        (WebInspector.OverviewGrid.prototype.setWindowPosition):
        (WebInspector.OverviewGrid.prototype.reset):
        (WebInspector.OverviewGrid.prototype.get windowLeft):
        (WebInspector.OverviewGrid.prototype.get windowRight):
        (WebInspector.OverviewGrid.prototype.setWindow):
        (WebInspector.OverviewGrid.prototype.addEventListener):
        (WebInspector.TimelineOverviewPane.prototype.setMode):
        (WebInspector.TimelineOverviewPane.prototype._setFrameMode):
        (WebInspector.TimelineOverviewPane.prototype._update):
        (WebInspector.TimelineOverviewPane.prototype.sidebarResized):
        (WebInspector.TimelineOverviewPane.prototype.zoomToFrame):
        (WebInspector.TimelineOverviewPane.prototype._reset):
        (WebInspector.TimelineOverviewPane.prototype.windowLeft):
        (WebInspector.TimelineOverviewPane.prototype.windowRight):
        (WebInspector.TimelineOverviewPane.prototype._updateWindow):

2013-03-18  Adam Barth  <abarth@webkit.org>

        [V8] Crash when accessing onclick attribute of document from XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=112585

        Reviewed by Eric Seidel.

        This ASSERT was bogus. The frame can be 0 for frameless documents, like
        those created by XMLHttpRequest. When there is no frame, we act as if
        JavaScript was disabled, which it is.

        Test: fast/events/xhr-onclick-crash.html

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):

2013-03-18  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Specifying polygonal -webkit-shape-inside value can crash browser (debug mode)
        https://bugs.webkit.org/show_bug.cgi?id=112157

        Reviewed by David Hyatt.

        Corrected the code which maps exclusion segments to pairs of InlineIterators. We now handle the
        cases where the end of the line occurs within an exclusion segment or when it occurs before
        the last exclusion segment has been reached. This can occur when a non-convex polygonal shape-inside
        breaks a line up into two segments, but the shape-inside element's content only fills (or partially
        fills) the first exclusion shape segment.

        Tests: fast/exclusions/shape-inside/shape-inside-partial-fill-001.html
               fast/exclusions/shape-inside/shape-inside-partial-fill-002.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):

2013-03-18  Emil A Eklund  <eae@chromium.org>

        Change RenderTableCell to use pixelSnappedSize when painting
        https://bugs.webkit.org/show_bug.cgi?id=112562

        Reviewed by Eric Seidel.

        Change the paining code in RenderTableCell to use the pixel snapped size
        to ensure consistent rounding given that the location was rounded during
        layout.

        It is currently constructing a paint rect by taking the rounded location
        and the precise size and then pixel snapping it. This causes the size to
        be rounded incorrectly. By instead using the pixel snapped size the
        rounding problem can be avoided.

        Test: fast/sub-pixel/table-cell-background.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintCollapsedBorders):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        (WebCore::RenderTableCell::paintMask):

2013-03-18  Tao Bai  <michaelbai@chromium.org>

        Need to use const String in HTMLVideoElement::posterImageURL
        https://bugs.webkit.org/show_bug.cgi?id=112317

        Reviewed by Andreas Kling.

        No behavioral changes.

        This is the followup of https://bugs.webkit.org/show_bug.cgi?id=110263
        Need to use String instead of const AtomicString& which means we will do an extra hash lookup

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::posterImageURL): Change to use String for url

2013-03-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Settings] Register "?" shortcut.
        https://bugs.webkit.org/show_bug.cgi?id=112545

        Reviewed by Vsevolod Vlasov.

        F1 and "?" (show shortcuts page) are not mentioned on shortcuts page.

        * English.lproj/localizedStrings.js: Added string.
        * inspector/front-end/inspector.js: Registered F1 / "?" shortcut.

2013-03-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add USE(PLATFORM_STRATEGIES) ifdefs to StorageNamespace.cpp
        https://bugs.webkit.org/show_bug.cgi?id=112004

        Reviewed by Rob Buis.

        Check if platform strategies is enabled before using it, falling
        back to StorageNamespaceImpl if it isn't.

        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::localStorageNamespace):
        (WebCore::StorageNamespace::sessionStorageNamespace):

2013-03-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TabbedEditorContainer does not restore last shown file on reload sometimes.
        https://bugs.webkit.org/show_bug.cgi?id=112561

        Reviewed by Alexander Pavlov.

        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype.addUISourceCode):

2013-03-18  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Detach overlays from page when compositor is detached
        https://bugs.webkit.org/show_bug.cgi?id=112424

        Reviewed by Rob Buis.

        PR 309160

        Expose a method to retrieve a compositing thread layer's client.

        No change in behavior, no new tests.

        * platform/graphics/blackberry/LayerCompositingThread.h:
        (WebCore::LayerCompositingThread::client):

2013-03-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Resources] Local Storage: duplicate keys are processed inappropriately.
        https://bugs.webkit.org/show_bug.cgi?id=112402

        Reviewed by Alexander Pavlov.

        When user creates new items or renames existing one some existing item
        may be overriden. If value is changed, then frontend will receive
        notification and update record appropriately.

        If item value hasn't been changed, then no notification comes.
        But UI still expect / rely on this notification.

        With this patch the "no notification" scenario is fixed:
        duplicate items are removed.

        Another scenario is when update notification comes when we started
        editing value (after entering / renaming key). In this case
        selected node should not be changed to leave user in editing mode.

        * inspector/front-end/DOMStorageItemsView.js:
        Added workarounds for "no notification" and "useless notification".

2013-03-18  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Clean up RenderFrameSet::nodeAtPoint
        https://bugs.webkit.org/show_bug.cgi?id=112450

        Reviewed by Eric Seidel.

        Remove handling of resizing framesets from RenderFrameSet::nodeAtPoint.
        The code has been incorrect since a mistake in r18333 (December 2006),
        but has been dead code since r17770 (November 2006) where the then new
        EventHandler started taking care of routing events to resizing FrameSets.

        Since this was the only special feature of RenderFrameSet::nodeAtPoint,
        the method has been removed.

        * rendering/RenderFrameSet.cpp:
        * rendering/RenderFrameSet.h:
        (RenderFrameSet):

2013-03-18  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        The 'formnovalidate' attribute doesn't work correctly on button elements with child elements
        https://bugs.webkit.org/show_bug.cgi?id=112541

        Reviewed by Kent Tamura.

        Fix a bug where formnovalidate attribute of <button> is not honored
        if the target of the click event is an element nested within the button.

        Test: fast/forms/interactive-validation-formnovalidate-child.html

        * html/HTMLFormElement.cpp:
        (WebCore::submitElementFromEvent): Looks for the nearest FormControlElement ancestor of the event target.

2013-03-18  Keishi Hattori  <keishi@webkit.org>

        Add touch support to the calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=112256

        Reviewed by Kent Tamura.

        This patch increases the hit target sizes for touch and adds touch event
        support to the scroll view, scroll bar and navigation button.

        Tests: platform/chromium/fast/forms/calendar-picker/calendar-picker-touch-operations.html
               platform/chromium/fast/forms/calendar-picker/month-picker-touch-operations.html
               platform/chromium/fast/forms/calendar-picker/week-picker-touch-operations.html

        * Resources/pagepopups/calendarPicker.js:
        (hasInaccuratePointingDevice):
        (Animator): Super class for TransitionAnimator and FlingGestureAnimator.
        (Animator.prototype.start):
        (Animator.prototype.stop):
        (Animator.prototype.onAnimationFrame):
        (TransitionAnimator): Same as the old Animator. Transition from one value to another.
        (TransitionAnimator.prototype.setFrom):
        (TransitionAnimator.prototype.start):
        (TransitionAnimator.prototype.stop):
        (TransitionAnimator.prototype.setTo):
        (TransitionAnimator.prototype.onAnimationFrame):
        (FlingGestureAnimator):Animates the fling scroll. 
        (FlingGestureAnimator.prototype._valueAtTime): Returns the value at the given time.
        (FlingGestureAnimator.prototype._velocityAtTime): Returns the value change velocity at the given time.
        (FlingGestureAnimator.prototype._timeAtVelocity): Returns the time when the value is changing at the given velocity.
        (FlingGestureAnimator.prototype.start):
        (FlingGestureAnimator.prototype.onAnimationFrame):
        (ScrollView): Added support for touch gesture scrolling.
        (ScrollView.prototype.onTouchStart):
        (ScrollView.prototype.onWindowTouchMove):
        (ScrollView.prototype.onWindowTouchEnd):
        (ScrollView.prototype.onFlingGestureAnimatorStep):
        (ScrollView.prototype.scrollTo):
        (ScrubbyScrollBar): Added support for touch.
        (ScrubbyScrollBar.prototype.onTouchStart):
        (ScrubbyScrollBar.prototype.onWindowTouchMove):
        (ScrubbyScrollBar.prototype.onWindowTouchEnd):
        (ScrubbyScrollBar.prototype._setThumbPositionFromEventPosition): Accept MouseEvent or Touch.
        (ScrubbyScrollBar.prototype.onMouseDown):
        (ScrubbyScrollBar.prototype.onWindowMouseMove):
        (ScrubbyScrollBar.prototype.onWindowMouseUp):
        (YearListCell):
        (YearListView):
        (YearListView.prototype.onTouchStart):
        (YearListView.prototype._animateRow):
        (CalendarNavigationButton): Add touch support for long press.
        (CalendarNavigationButton.prototype.onTouchStart):
        (CalendarNavigationButton.prototype.onWindowTouchEnd):
        (CalendarNavigationButton.prototype.onMouseDown):
        (CalendarNavigationButton.prototype.onWindowMouseUp):
        (CalendarTableView): Disable touch gesture scrolling in the calendar table.

2013-03-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Cancel mark on search field is not displayed
        https://bugs.webkit.org/show_bug.cgi?id=94880

        Reviewed by Kenneth Rohde Christiansen.

        adjustSearchFieldCancelButtonStyle() doesn't set style width and height for search cancel button.
        So, the button isn't showing up in search input field. Besides the button size should be scaled based
        on the font size as chromium, qt, and blackberry ports.

        Tests: fast/forms/search-cancel-button-style-sharing.html
               fast/forms/search-rtl.html

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore):
        (WebCore::RenderThemeEfl::adjustSearchFieldCancelButtonStyle):

2013-03-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: Native Memory Timeline affects the performace even if was switched off.
        https://bugs.webkit.org/show_bug.cgi?id=112428

        Reviewed by Pavel Feldman.

        Whether to include DOM counters and native memory statistics is now
        configured using Timeline.start parameters instead of sending separate
        commands Timeline.setIncludeDomCounters and Timeline.setIncludeNativeMemoryStatistics.

        * inspector/Inspector.json:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::restore):
        (WebCore::InspectorTimelineAgent::start):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        * inspector/front-end/DOMCountersGraph.js:
        (WebInspector.DOMCountersGraph):
        * inspector/front-end/NativeMemoryGraph.js:
        (WebInspector.NativeMemoryGraph):
        * inspector/front-end/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.start):
        * inspector/front-end/TimelineModel.js:
        (WebInspector.TimelineModel.prototype.startRecord):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get _toggleTimelineButtonClicked):

2013-03-18  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: Exception in timeline DOMCounters
        https://bugs.webkit.org/show_bug.cgi?id=112427

        Reviewed by Pavel Feldman.

        Do not update marker on DOM counters graph if the graphs haven't been
        drawn yet.

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype._refreshCurrentValues):

2013-03-18  Li Yin  <li.yin@intel.com>

        Mediastream.ended should return true when all tracks were removed.
        https://bugs.webkit.org/show_bug.cgi?id=112528

        Reviewed by Kentaro Hara.

        Spec: http://dev.w3.org/2011/webrtc/editor/getusermedia.html#widl-MediaStream-ended
        When all tracks have been removed, it should return true as well as all the tracks
        were ended.

        Test: fast/mediastream/MediaStream-add-remove-tracks.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::removeTrack):

2013-02-22  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: make number of stack frames to capture in Timeline a setting
        https://bugs.webkit.org/show_bug.cgi?id=110619

        Reviewed by Pavel Feldman.

        - factor out creation of input type="text" control for better reuse;
        - add timelineLimitStackFramesFlag & timelineStackFramesToCapture settings;

        * English.lproj/localizedStrings.js: add "Frames to capture" and "Limit number of captured JS stack frames"
        * inspector/front-end/Settings.js: add 2 settings;
        (WebInspector.Settings):
        * inspector/front-end/SettingsScreen.js: UI for the setting;
        (WebInspector.GenericSettingsTab):
        (WebInspector.GenericSettingsTab.prototype.get _createCSSAutoReloadControls.validateReloadTimeout):
        * inspector/front-end/TimelineModel.js: pass the setting value to back-end.

2013-03-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146035.
        http://trac.webkit.org/changeset/146035
        https://bugs.webkit.org/show_bug.cgi?id=112540

        fails to build on Windows: singned/unsigned mismatch at ln. 53
        of html\HTMLSelectElementWin.cpp (Requested by antonm on
        #webkit).

        * WebCore.gypi:
        * html/HTMLSelectElement.cpp:
        (WebCore):
        * html/HTMLSelectElementWin.cpp:

2013-03-18  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r146033.
        http://trac.webkit.org/changeset/146033
        https://bugs.webkit.org/show_bug.cgi?id=112521

        web audio tests are broken

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::AudioNode):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/ScriptProcessorNode.idl:

2013-03-18  Dominic Cooney  <dominicc@chromium.org>

        A placeholder renderer should not be taken to imply the existence of a text renderer in single line text controls
        https://bugs.webkit.org/show_bug.cgi?id=112410

        Reviewed by Tony Chang.

        The assumption that if a text control had a placeholder renderer
        then it also had a text renderer is not valid. If
        ::-webkit-textfield-decoration-controller is set to display: none;
        a single line text control's decoration container renderer and
        hence text renderer are not created. This change handles this
        corner case where a text control has a placeholder renderer but
        not a text renderer.

        Tests: fast/forms/search/search-hide-decoration-container-crash.html (Updated)

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::fixPlaceholderRenderer):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):

2013-03-18  Dominic Cooney  <dominicc@chromium.org>

        [Shadow] offsetParent should never return nodes in user agent Shadow DOM to script
        https://bugs.webkit.org/show_bug.cgi?id=112530

        Reviewed by Elliott Sprehn.

        Test: fast/dom/shadow/offset-parent-does-not-leak-ua-shadow.html

        * dom/Element.cpp:
        (WebCore::Element::bindingsOffsetParent): Filter nodes in UA shadows.
        * dom/Element.h:
        (Element): Add bindingsOffsetParent.
        * dom/Element.idl: bindingsOffsetParent is the implementation of offsetParent.

2013-03-17  Dominic Mazzoni  <dmazzoni@google.com>

        Support Windows HTMLSelectElement keystrokes on Chromium win
        https://bugs.webkit.org/show_bug.cgi?id=112460

        Reviewed by Kent Tamura.

        Compile in the windows-specific variant of
        HTMLSelectElement::platformHandleKeydownEvent
        on Chromium win, in addition to PLATFORM(WIN).

        * WebCore.gypi:
            Add html/HTMLSelectElementWin.cpp.
        * html/HTMLSelectElement.cpp:
            Don't compile generic platformHandleKeydownEvent on
            Chromium win.
        * html/HTMLSelectElementWin.cpp:
            Only compile platformHandleKeydownEvent on Windows.
        (WebCore):

2013-03-17  Russell McClellan  <russell.mcclellan@gmail.com>

        ScriptProcessorNode is garbage collected while still active if unreachable
        https://bugs.webkit.org/show_bug.cgi?id=112521

        Reviewed by Kentaro Hara.

        Fix for issue where ScriptProcessorNodes (and AudioNode js wrappers generally)
        would be garbage collected before their time.  Made AudioNode an ActiveDOMElement
        marked pending if there are any open audio connections.

        Test: webaudio/javascriptaudionode.html

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::AudioNode): 
        (WebCore::AudioNode::hasPendingActivity): it's pending (and thus not GCed)
        if it has open audio connections.
        * Modules/webaudio/AudioNode.h: AudioNode is now an ActiveDOMElement
        * Modules/webaudio/AudioScheduledSourceNode.h: added a using declaration
        to avoid function name hiding.
        * Modules/webaudio/ScriptProcessorNode.idl: AudioNode is an ActiveDOMElement

2013-03-17  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Step-up/-down of minute/second/millisecond fields should respect min/max attributes
        https://bugs.webkit.org/show_bug.cgi?id=112527

        Reviewed by Kent Tamura.

        Make step-up/-down of the minute, second, and millisecond field
        respect the min/max attributes of the element.
        Note that it still accepts any keyboard inputs (the element
        becomes 'invalid' state when out-of-range values entered).
        Also, disable these fields when there is only single possible value.

        Tests: fast/forms/time-multiple-fields/time-multiple-fields-readonly-subfield.html
               fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html

        * html/shadow/DateTimeEditElement.cpp:
        (DateTimeEditBuilder): Add fields for min/max of minute/second/millisecond.
        (WebCore::DateTimeEditBuilder::DateTimeEditBuilder): Set min/max for the fields.
        (WebCore::DateTimeEditBuilder::visitField): Pass min/max parameters to the field constructors.
        (WebCore::DateTimeEditBuilder::shouldHourFieldDisabled): Does not disable if minute, second, millisecond fields are all disabled, because we need at least one editable field.
        (WebCore::DateTimeEditBuilder::shouldMillisecondFieldDisabled): Disables if min, max, and value are equal.
        (WebCore::DateTimeEditBuilder::shouldMinuteFieldDisabled): Ditto.
        (WebCore::DateTimeEditBuilder::shouldSecondFieldDisabled): Ditto.
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeDayFieldElement::DateTimeDayFieldElement):
        (WebCore::DateTimeHourFieldElementBase::DateTimeHourFieldElementBase):
        (WebCore::DateTimeHour11FieldElement::DateTimeHour11FieldElement):
        (WebCore::DateTimeHour12FieldElement::DateTimeHour12FieldElement):
        (WebCore::DateTimeHour23FieldElement::DateTimeHour23FieldElement):
        (WebCore::DateTimeHour24FieldElement::DateTimeHour24FieldElement):
        (WebCore::DateTimeMillisecondFieldElement::DateTimeMillisecondFieldElement):
        (WebCore::DateTimeMillisecondFieldElement::create):
        (WebCore::DateTimeMinuteFieldElement::DateTimeMinuteFieldElement):
        (WebCore::DateTimeMinuteFieldElement::create):
        (WebCore::DateTimeMonthFieldElement::DateTimeMonthFieldElement):
        (WebCore::DateTimeSecondFieldElement::DateTimeSecondFieldElement):
        (WebCore::DateTimeSecondFieldElement::create):
        (WebCore::DateTimeWeekFieldElement::DateTimeWeekFieldElement):
        (WebCore::DateTimeYearFieldElement::DateTimeYearFieldElement):
        * html/shadow/DateTimeFieldElements.h:
        (DateTimeDayFieldElement):
        (DateTimeHourFieldElementBase):
        (DateTimeHour11FieldElement):
        (DateTimeHour12FieldElement):
        (DateTimeHour23FieldElement):
        (DateTimeHour24FieldElement):
        (DateTimeMillisecondFieldElement): Add minimum/maximum parameters.
        (DateTimeMinuteFieldElement): Add minimum/maximum parameters.
        (DateTimeMonthFieldElement):
        (DateTimeSecondFieldElement): Add minimum/maximum parameters.
        (DateTimeWeekFieldElement):
        (DateTimeYearFieldElement):
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::DateTimeNumericFieldElement):
        (WebCore::DateTimeNumericFieldElement::formatValue): Use hard-limit value instead of m_range.maximum, because millisecond field with max<100 will be displayed in two digits otherwise.
        (WebCore::DateTimeNumericFieldElement::setValueAsInteger):
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement): Changed to have hard limits as a data member.

2013-03-17  Alexey Proskuryakov  <ap@apple.com>

        Encapsulate PlatformMessagePortChannel a little better yet
        https://bugs.webkit.org/show_bug.cgi?id=112479

        Reviewed by Sam Weinig.

        * dom/MessagePortChannel.h: We no longer expose PlatformMessagePortChannel in
        public functions in cross-platform code.

        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::createChannel): Tweaked the factory method to avoid
        using the old create() function.
        (WebCore::MessagePortChannel::~MessagePortChannel): Removed an unhelpful comment.

2013-03-17  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Don't update shadow tree by updating any attribute
        https://bugs.webkit.org/show_bug.cgi?id=111990

        Reviewed by Hajime Morrita.

        Bug detail:
        Typing '1' then '1' into an hour field doesn't set the field to
        '11' if an attribute is updated during these two keyboard inputs
        because we always re-construct a shadow DOM tree by updating any
        attributes and a shadow node records keyboard input state.

        How to fix:
        We should not re-construct a shadow DOM tree by updating
        unaffected attributes. For example, we should re-construct it by
        updating 'min' attribute, but we should not by updating 'class'
        attribute.
        We have InputType::updateInnerTextValue call in parseAttribute for
        text field input types. The multiple fields input types
        re-construct shadow DOM tree in updateInnerTextValue. The
        updateInnerTextValue call is unnecessary for the multiple fields
        input types, and we should call it when it is necessary. So, we
        add InputType::attributeChange and text field input types call
        updateInnerTextValue in it, and other input types don't.
        Also, multiple fields input types need to call
        updateInnerTextValue by 'value' attribute change. We add
        InputType::valueAttributeChanged.

        Tests: Update
        fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events.html. The
        value attribute change behavior is covered by
        time-multiple-fields-change-layout-by-value.html and
        time-multiple-fields-spinbutton-change-and-input-events.html.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        - Add a valueAttributeChanged call.
        - Calls InputType::attributeChanged
        * html/InputType.cpp:
        (WebCore::InputType::attributeChanged): Added an empty implementation.
        (WebCore::InputType::valueAttributeChanged): Ditto.
        * html/InputType.h:
        (InputType): Declare attributeChanged and valueAttributeChanged.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::attributeChanged):
        Added. Always call updateInnerTextValue.
        * html/TextFieldInputType.h:
        (TextFieldInputType): Declare attributeChanged.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::valueAttributeChanged):
        Added. Re-construct shadow DOM tree if the input has no dirty value.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Declare valueAttributeChanged.

2013-03-17  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] prevent </template> from matching "template" in a non-HTML tags on the stack of open elements
        https://bugs.webkit.org/show_bug.cgi?id=112487

        Reviewed by Adam Barth.

        When processing an end template tag, the parser now pops until a "template" tag is parsed, but now ensures that
        the "template" it pops is in the HTML namespace.

        Tests added to the html5lib test suite.

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::popUntil):
        (WebCore):
        (WebCore::HTMLElementStack::popUntilPopped):
        * html/parser/HTMLElementStack.h:
        (HTMLElementStack):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processTemplateEndTag):

2013-03-17  Adam Barth  <abarth@webkit.org>

        Legacy CSS vendor prefixes should only work for Dashboard
        https://bugs.webkit.org/show_bug.cgi?id=111890

        Reviewed by Eric Seidel.

        Our experience with the Chromium port is that these legacy CSS vendor
        prefixes (-apple- and -khtml-) are not needed for web compatibility.
        There is reason to believe, however, that they are needed for
        compatibility with Mac OS X Dashboard widgets.

        This patch makes the code for these legacy CSS vendor prefixes
        enabled at runtime and only enables them when running in Dashboard
        compatibility mode. This is the first step towards the plan outlined in
        https://lists.webkit.org/pipermail/webkit-dev/2013-March/024085.html.

        This patch also removes support for ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
        from the V8 bindings because V8 is never used with Dashboard.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::setLegacyCSSVendorPrefixesEnabled):
        (WebCore::RuntimeEnabledFeatures::legacyCSSVendorPrefixesEnabled):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::getCSSPropertyNamePrefix):
        (WebCore::cssPropertyIDForJSCSSPropertyName):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyInfo):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::rewriteSpecifiers):

2013-03-17  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r145592): AutodrainedPool.h moved to WTF
        <http://webkit.org/b/112171>

        Fixes the following build failure:

            Source/WebCore/platform/audio/mac/AudioBusMac.mm:32:9: fatal error: 'AutodrainedPool.h' file not found
            #import "AutodrainedPool.h"
                    ^
            1 error generated.

        * platform/audio/mac/AudioBusMac.mm: Fix include.

2013-03-17  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Fix and improve dist hooks for translations
        https://bugs.webkit.org/show_bug.cgi?id=112519

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: move translation-related rules and lists to the po directory's
        GNUmakefile.am.

2013-03-17  Emil A Eklund  <eae@chromium.org>

        Move font-family applying code to StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=112441

        Reviewed by Allan Sandfeld Jensen.

        Many of the font related properties were moved to StyleBuilder in r87362
        two years ago. Move font-family as well so that all font properties are
        handled the same way.

        No new tests, no change in functionality.

        * css/StyleBuilder.cpp:
        (ApplyPropertyFontFamily):
        (WebCore::ApplyPropertyFontFamily::applyInheritValue):
        (WebCore::ApplyPropertyFontFamily::applyInitialValue):
        (WebCore::ApplyPropertyFontFamily::applyValue):
        (WebCore::ApplyPropertyFontFamily::createHandler):
        (WebCore::StyleBuilder::StyleBuilder):
        Add ApplyPropertyFontFamily for CSSPropertyFontFamily.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Remove CSSPropertyFontFamily from the giant switch statement.

2013-03-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ENCHANT] Invalid charset encoding used for spelling guess context menu items
        https://bugs.webkit.org/show_bug.cgi?id=112516

        Reviewed by Gustavo Noronha Silva.

        Convert spelling guesses returned by enchant to UTF-16 before
        passing them to WebCore.

        * platform/text/enchant/TextCheckerEnchant.cpp:
        (WebCore::TextCheckerEnchant::getGuessesForWord): Use
        String::fromUTF8().

2013-03-17  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Provide default cursor groups as cursor.edc
        https://bugs.webkit.org/show_bug.cgi?id=112403

        Reviewed by Gyuyoung Kim.

        This patch provides a cursor.edc to use the CSS cursor images files in the
        WebCore/Resources directory. cursor.edc is included in the default.edc
        so that views can use it by default.

        * platform/efl/DefaultTheme/CMakeLists.txt:
        * platform/efl/DefaultTheme/default.edc:
        * platform/efl/DefaultTheme/widget/cursor/cursor.edc: Added.

2013-03-16  Pratik Solanki  <psolanki@apple.com>

        Disable High DPI Canvas on iOS
        https://bugs.webkit.org/show_bug.cgi?id=112511

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:

2013-03-16  Simon Fraser  <simon.fraser@apple.com>

        Reflected video elements hit assertion
        https://bugs.webkit.org/show_bug.cgi?id=112490

        Disable reflections on video again, since there's some bad behavior
        caused by an underlying system framework.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::clone):

2013-03-16  Tom Sepez  <tsepez@chromium.org>

        [v8] Disable binding integrity check for WebCore::Text
        https://bugs.webkit.org/show_bug.cgi?id=112462

        Reviewed by Kentaro Hara.

        Test: fast/dom/split-cdata.xml

        * dom/Text.idl:

2013-03-16  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-hidden on container does not hide descendant popup buttons
        https://bugs.webkit.org/show_bug.cgi?id=112373

        Reviewed by Ryosuke Niwa.

        There are a number of subclass AX objects that implement accessibilityIsIgnored()
        to always return false. This means that even if their parent is aria-hidden=true
        they still show up in the tree.

        This re-organizes this base case of aria-hidden into AccessibilityObject so that
        it can be re-used by these special subclasses where appropriate.

        Test: accessibility/aria-hidden-hides-all-elements.html

        * accessibility/AccessibilityImageMapLink.h:
        (WebCore::AccessibilityImageMapLink::isImageMapLink):
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore):
        * accessibility/AccessibilityListBox.h:
        (AccessibilityListBox):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityMediaControlsContainer::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityMediaTimeDisplay::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityMediaControls.h:
        (AccessibilityMediaControlsContainer):
        * accessibility/AccessibilityMenuList.h:
        (WebCore::AccessibilityMenuList::roleValue):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityMockObject.cpp:
        (WebCore::AccessibilityMockObject::computeAccessibilityIsIgnored):
        (WebCore):
        * accessibility/AccessibilityMockObject.h:
        (AccessibilityMockObject):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibilityIsIgnoredDefaultForObject):
        (WebCore):
        (WebCore::AccessibilityObject::ariaIsHidden):
        (WebCore::AccessibilityObject::accessibilityIsIgnoredBase):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnoredBase):
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/AccessibilityScrollbar.h:
        (AccessibilityScrollbar):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore):
        (WebCore::AccessibilitySliderThumb::computeAccessibilityIsIgnored):
        * accessibility/AccessibilitySlider.h:
        (AccessibilitySlider):
        * accessibility/AccessibilitySpinButton.h:
        (WebCore::AccessibilitySpinButton::roleValue):
        (AccessibilitySpinButtonPart):

2013-03-15  Simon Fraser  <simon.fraser@apple.com>

        Reflected video elements hit assertion on Lion
        https://bugs.webkit.org/show_bug.cgi?id=112490

        Disable the new reflected video functionality added in r145915
        on Lion because of a nasty re-entrancy problem. Tracked by bug 112490.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::clone):

2013-03-15  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] shape-outside on floats for circle and ellipse shapes
        https://bugs.webkit.org/show_bug.cgi?id=98673

        Reviewed by Dirk Schulze.

        Enable circles and ellipses for shape-outside on floats. Most of the
        code already supports them, just needed to turn them on and add tests.

        Tests: fast/exclusions/shape-outside-floats/shape-outside-floats-simple-circle.html
               fast/exclusions/shape-outside-floats/shape-outside-floats-simple-ellipse.html

        * rendering/ExclusionShapeOutsideInfo.cpp:
        (WebCore::ExclusionShapeOutsideInfo::isEnabledFor): Enable circles and
            ellipses. Also add a check for if the RenderBox is floating, since
            that test should have been there all along, as shape outside is
            only supported on floats for now.

2013-03-15  Christian Biesinger  <cbiesinger@chromium.org>

        Convert old flexbox uses in html.css to new flexbox (non-<select>)
        https://bugs.webkit.org/show_bug.cgi?id=110837

        Reviewed by Ojan Vafai.

        Covered by existing tests.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        After we set our descendants' heights, we need to mark them for
        layout.
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle):
        Use new-flexbox style setters.

        * css/html.css:
        (input::-webkit-textfield-decoration-container):
        (input[type="search"]::-webkit-search-cancel-button):
        (input[type="search"]::-webkit-search-decoration):
        (input[type="search"]::-webkit-search-results-decoration):
        (input[type="search"]::-webkit-search-results-button):
        (input::-webkit-inner-spin-button):
        (input::-webkit-input-speech-button):
        (textarea):
        (input[type="file"]):
        (input[type="color"]::-webkit-color-swatch-wrapper):
        (input[type="color"]::-webkit-color-swatch):
        (::-webkit-validation-bubble-message):
        (::-webkit-validation-bubble-text-block):
        * css/themeWin.css:
        (input[type="search"]::-webkit-search-results-decoration):
        (input[type="search"]::-webkit-search-results-button):
        Convert -webkit-box to -webkit-flex and adjust related properties.
        Notably switch to auto margins for centering the speech button as well
        as the search result and cancel buttons to stay compatible with the
        previous centering behaviour. This does not produce visible
        differences but eliminates the render tree dump changes.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerContainer::TextControlInnerContainer):
        (WebCore):
        (WebCore::TextControlInnerContainer::create):
        (WebCore::TextControlInnerContainer::createRenderer):
        * html/shadow/TextControlInnerElements.h:
        (TextControlInnerContainer):
        (WebCore):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControlInnerContainer::RenderTextControlInnerContainer):
        (WebCore):
        (WebCore::RenderTextControlInnerContainer::~RenderTextControlInnerContainer):
        * rendering/RenderTextControl.h:
        (WebCore):
        (RenderTextControlInnerContainer):
        Create a new DOM element & renderer type for the textfield-decoration
        div (the direct child of the <input> in the shadow dom if we have a
        special input field). This is necessary because new-flexbox uses a
        different algorithm for calculating the baseline, which would
        otherwise cause an <input> and an <input type=search> to not be
        aligned with each other.
        The new renderer just calls back to RenderBlock for calculating the
        baseline.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        Make sure to mark renderers as needing layout when we change their
        style. This didn't use to be necessary because old-flexbox relayouts
        children even when they are not marked for needing layout.
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle):
        Use new-flexbox CSS properties.
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::decorate):
        Use new-flexbox CSS properties.

2013-03-15  Kenneth Russell  <kbr@google.com>

        Unreviewed attempted build fix for Chromium Windows after r145929.
        Verified this fix builds and works on Linux.
        https://bugs.webkit.org/show_bug.cgi?id=96798

        * bindings/v8/V8Binding.cpp:
        (WebCore):

2013-03-15  Nate Chapin  <japhet@chromium.org>

        Merge MainResourceLoader::willSendRequest into DocumentLoader 
        https://bugs.webkit.org/show_bug.cgi?id=109757

        This is one of the steps to merging MainResourceLoader entirely into
        DocumentLoader, given the lack of clear division of responsibility
        between the two.

        Reviewed by Antti Koivisto.

        No new tests, refactor only.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResourceData):
        (WebCore::DocumentLoader::isPostOrRedirectAfterPost):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::callContinueAfterNavigationPolicy):
        (WebCore::DocumentLoader::continueAfterNavigationPolicy):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::resourceData):
        (WebCore::MainResourceLoader::redirectReceived):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::reportMemoryUsage):
        (WebCore::MainResourceLoader::handleSubstituteDataLoadNow):
        (WebCore::MainResourceLoader::load):
        * loader/MainResourceLoader.h:
        (WebCore::MainResourceLoader::takeIdentifierFromResourceLoader): Temporarily
            exposed for moving from a normal load to SubstituteData load on redirect.

2013-03-15  Zhenyao Mo  <zmo@google.com>

        Disable EXT_draw_buffers WebGL extension on Mac
        https://bugs.webkit.org/show_bug.cgi?id=112486

        Reviewed by Kenneth Russell.

        * html/canvas/EXTDrawBuffers.cpp:
        (WebCore::EXTDrawBuffers::supported):

2013-03-15  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove the background filter blur layout tests
        https://bugs.webkit.org/show_bug.cgi?id=112372

        Reviewed by James Robinson.

        Remove the now-unused hacks to regression test the background
        filter blur compositor feature.

        * testing/Internals.cpp:
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-03-15  Alexey Proskuryakov  <ap@apple.com>

        Reduce amount of platform specific code in MessagePortChannel
        https://bugs.webkit.org/show_bug.cgi?id=112469

        Reviewed by Sam Weinig.

        * dom/MessagePortChannel.h: Ifdefed out an unused channel() function, except for
        Chromium, where it is used. We certainly don't want to expose this implementation
        detail as a public function.

        * dom/default/PlatformMessagePortChannel.h: Removed functions that are no longer
        delegated. Made class contents all public, as it's now basically a data storage
        for MessagePortChannel.

        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::createChannel):
        (WebCore::MessagePortChannel::~MessagePortChannel):
        (WebCore::MessagePortChannel::entangleIfOpen):
        (WebCore::MessagePortChannel::disentangle):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        (WebCore::MessagePortChannel::close):
        (WebCore::MessagePortChannel::isConnectedTo):
        (WebCore::MessagePortChannel::hasPendingActivity):
        (WebCore::MessagePortChannel::locallyEntangledPort):
        (WebCore::PlatformMessagePortChannel::PlatformMessagePortChannel):
        (WebCore::PlatformMessagePortChannel::entangledChannel):
        Moved code from PlatformMessagePortChannel to MessagePortChannel. Added some
        FIXMEs.

2013-03-15  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Expose the compositing thread layer's draw rectangle to aid hit testing
        https://bugs.webkit.org/show_bug.cgi?id=112255

        Reviewed by Rob Buis.

        PR 308284.
        Reviewed internally by Yongxin Dai.

        Add a getter for the layer renderer of a compositing thread layer.

        No change in behavior, no new tests.

        * platform/graphics/blackberry/LayerCompositingThread.h:
        (WebCore::LayerCompositingThread::layerRenderer):

2013-03-15  Christian Biesinger  <cbiesinger@chromium.org>

        Convert <select> to new-flexbox
        https://bugs.webkit.org/show_bug.cgi?id=112395

        Reviewed by Ojan Vafai.

        Covered by existing tests.

        * css/html.css:
        (select):
        (select[size][multiple]):
        (select[size="1"]):
        Use new-style flexbox properties.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList):
        (WebCore::RenderMenuList::createInnerBlock):
        (WebCore::RenderMenuList::adjustInnerStyle):
        (WebCore::RenderMenuList::removeChild):
        RenderDeprecatedFlexibleBox -> RenderFlexibleBox, and use the
        new-style flexbox properties. Use margin:auto for centering to get
        the old safe-centering behavior.
        * rendering/RenderMenuList.h:
        (RenderMenuList):
        Inherit from RenderFlexibleBox. Override baseline methods to call the
        RenderBlock methods

2013-03-15  Andy Estes  <aestes@apple.com>

        REGRESSION (r145820): Stop over-retaining CFDataRefs in SharedBuffer::maybeTransferPlatformData()
        https://bugs.webkit.org/show_bug.cgi?id=112474

        Reviewed by Simon Fraser.

        Transfer ownership of m_cfData to the local variable rather than leaking a reference.

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::maybeTransferPlatformData):

2013-03-15  Rajeev Sarvaria  <rsarvaria@blackberry.com>

        New context extensions restored improperly
        https://bugs.webkit.org/show_bug.cgi?id=112156

        Reviewed by Rob Buis.

        Sets up extensions after new context is created for restoration.
        Previous extensions set up is lost when context is initially lost.

        Cannot create a test as change is not visible from the web. When a context
        is lost, WebGLRenderingContext drops m_context. Upon restoration a new context
        object is created without available extensions initialized. Calling isEnabled
        within setupFlags leads to the eventual initialization of extensions for the
        new context.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):

2013-03-15  Aurimas Liutikas  <aurimas@chromium.org>

        TextIterator emits LF for a br element inside an empty input element
        https://bugs.webkit.org/show_bug.cgi?id=112275

        Reviewed by Ryosuke Niwa.

        Adding a check to avoid emiting LF for br elements inside a shadow tree
        of an input element.

        Test: editing/text-iterator/basic-iteration.html
              editing/text-iterator/basic-iteration-shadowdom.html

        * editing/TextIterator.cpp:
        (WebCore::shouldEmitNewlineForNode):
        (WebCore::TextIterator::handleNonTextNode):
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode):
        (WebCore::SimplifiedBackwardsTextIterator::exitNode):
        * editing/TextIterator.h:
        (SimplifiedBackwardsTextIterator):

2013-03-15  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Allow an embedder to position child windows using window coordinates
        https://bugs.webkit.org/show_bug.cgi?id=112236

        Reviewed by Rob Buis.

        PR 232752

        The LayerCompositingThread can now position the video window using
        either document or window coordinates.

        The LayerRenderer class gets a new client interface. This allows us to
        avoid state duplication by delegating decisions directly to the client,
        which can then be in charge of the (one and only) state.

        The context is moved over to the client, as well as delegation of the
        decision on whether to clear the surface every frame.

        Also, the decision on which coordinate system to use for positioning
        child windows is delegated to the client interface.

        No new tests, not testable using DRT.

        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        (WebCore::LayerCompositingThread::drawTextures):
        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::create):
        (WebCore::LayerRenderer::LayerRenderer):
        (WebCore::LayerRenderer::setViewport):
        (WebCore::LayerRenderer::compositeLayers):
        (WebCore::LayerRenderer::toWebKitWindowCoordinates):
        (WebCore::LayerRenderer::makeContextCurrent):
        * platform/graphics/blackberry/LayerRenderer.h:
        (WebCore):
        (LayerRenderer):
        (WebCore::LayerRenderer::client):
        * platform/graphics/blackberry/LayerRendererClient.h: Added.
        (Graphics):
        (WebCore):
        (LayerRendererClient):
        (WebCore::LayerRendererClient::~LayerRendererClient):

2013-03-15  Jochen Eisinger  <jochen@chromium.org>

        Expose whether a UserGestureToken still has gestures via WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=112342

        Reviewed by Adam Barth.

        * dom/UserGestureIndicator.cpp:
        * dom/UserGestureIndicator.h:
        (UserGestureToken):

2013-03-15  Christian Biesinger  <cbiesinger@chromium.org>

        Convert inspector to new-flexbox
        https://bugs.webkit.org/show_bug.cgi?id=112399

        Reviewed by Ojan Vafai.

        No new tests, refactoring.

        * inspector/front-end/auditsPanel.css:
        (.audit-launcher-view .audit-launcher-view-content):
        (.audit-launcher-view div.button-container):
        (.audit-launcher-view div.button-container > button):
        * inspector/front-end/dialog.css:
        (.dialog):
        * inspector/front-end/elementsPanel.css:
        (.sidebar-pane.composite .metrics):
        * inspector/front-end/helpScreen.css:
        (.help-window-main):
        (.help-content):
        * inspector/front-end/inspector.css:
        (#toolbar):
        (#toolbar-controls):
        (#toolbar-dropdown .scrollable-content):
        (#toolbar-dropdown .toolbar-item):
        (.toolbar-item.close-left, .toolbar-item.close-right):
        * inspector/front-end/nativeMemoryProfiler.css:
        (.memory-pie-chart-container):
        (.memory-pie-chart):
        * inspector/front-end/networkPanel.css:
        (.network-item-view.visible):
        * inspector/front-end/panelEnablerView.css:
        (.panel-enabler-view .flexible-space):
        * inspector/front-end/profilesPanel.css:
        (.profile-launcher-view-content):
        (.control-profiling):
        * inspector/front-end/splitView.css:
        (.sidebar-overlay):
        * inspector/front-end/tabbedPane.css:
        (.tabbed-pane):
        (.tabbed-pane-content):
        Replace -webkit-box with -webkit-flex, -webkit-box-orient with
        -webkit-flex-direction, etc.

2013-03-15  Rouslan Solomakhin  <rouslan@chromium.org>

        Remove unused unified textchecker variable
        https://bugs.webkit.org/show_bug.cgi?id=112362

        Reviewed by Tony Chang.

        The variable m_originalUnifiedSpellCheckerEnabled is never used. The generated
        code from Settings.in already backs up and restores unified textchecker setting.

        * testing/InternalSettings.h: Remove unusued m_originalUnifiedSpellCheckerEnabled variable.

2013-03-14  Ojan Vafai  <ojan@chromium.org>

        Auto height column flexboxes with border and padding are too short
        https://bugs.webkit.org/show_bug.cgi?id=112398

        Reviewed by Tony Chang.

        Test: css3/flexbox/auto-height-column-with-border-and-padding.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainAxisContentExtent):
        computeLogicalHeight expects that you pass in the border-box logicalHeight, not
        the contentLogicalHeight. Since we subtract the border, padding and scrollbar height from 
        the returned m_extent, if we pass in the contentLogicalHeight and the flexbox is auto-sized
        then we end up incorrectly subtracting border, padding and scrollbar height from the
        contentLogicalHeight.

2013-03-15  Tim Horton  <timothy_horton@apple.com>

        RenderSnapshottedPlugIn can't be a RenderBlock (what if it's display: inline?)
        https://bugs.webkit.org/show_bug.cgi?id=112432
        <rdar://problem/13187211>

        Reviewed by Simon Fraser and Dean Jackson.

        Re-use code from PLUGIN_PROXY_FOR_VIDEO to allow RenderEmbeddedObject to lay out its children,
        and make RenderSnapshottedPlugIn a RenderEmbeddedObject subclass once again. This will ensure that
        RenderSnapshottedPlugIn lays itself out in the page the same as the RenderEmbeddedObject it replaces did,
        preventing snapshotted plug-ins from breaking the layout when they are display: inline.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        RenderSnapshottedPlugIn is a RenderEmbeddedObject subclass again, so we need to check
        for it when we have a RenderEmbeddedObject, instead of when we don't.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateWidget):
        Ditto.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        (WebCore::RenderEmbeddedObject::canHaveChildren):
        Allow RenderEmbeddedObject to have and lay out children if it is a RenderSnapshottedPlugIn.
        Also, preserve the code that allows children if it is a media element and PLUGIN_PROXY_FOR_VIDEO is enabled.
        Don't call addWidgetToUpdate for instances which will never have a widget, like RenderSnapshottedPlugIn.

        * rendering/RenderEmbeddedObject.h:
        (RenderEmbeddedObject):
        We need canHaveChildren() and children() and m_children now.
        Add canHaveWidget(), which returns true. Subclasses can override if need be.

        * rendering/RenderSnapshottedPlugIn.h: Add canHaveWidget(), which is false for RenderSnapshottedPlugIn.
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        (WebCore::RenderSnapshottedPlugIn::layout):
        (WebCore::RenderSnapshottedPlugIn::getCursor):
        Make RenderSnapshottedPlugIn a RenderEmbeddedObject.

        (WebCore::RenderSnapshottedPlugIn::paint):
        Paint our children.

2013-03-15  Hajime Morrita  <morrita@google.com>

        [Custom Elements] Any HTMLElement subclass should become a superclass of custom element
        https://bugs.webkit.org/show_bug.cgi?id=110436

        Reviewed by Dimitri Glazkov.

        This change introduces "type extension" concept of custom elements.
        With the type extension, each custom elements are able to inherit
        from not only HTMLElement, but also any HTML element. To make it work,
        this change extends the plumbing.

        This change does following changes:

        = Data structure:

        - Let CustomElementConstructor objects being keyed by pair of (element
          name, local name) as the standard requries, instead of just using
          single name. See CustomElementRegistry::ConstructorMap and CustomElementRegistry::find().

        - Creates mapping from WrapperTypeInfo to element name.  This map
          can be looked-up by generated functions like
          findHTMLTagNameOfV8Type().  With this table, WebKit can determine
          the custom element local name of given prototype object. See  make_names.pl.
          Note that V8 prototype object knows associated WrapperTypeInfo. See r144865.

        = Hooking up element lifecyle:

        - Create appropriate C++ instance for each custom element.  Before
          this change, the C++ backend of custom elements were always
          HTMLUnknownElements or HTMLElement.  See
          CustomElementConstructor::createElement() and ElementFactories in
          make_names.pl.

        - Hooks up element construction and element wrapper creation for
          custom element "before" non-custom case instead of "after"
          that. We do this because custom element needs to
          override non-custom case when @is attribute is given for
          otherwise-non-custom elements like <div is=x-bar>.
          See make_names.pl.

        - Gives @is attributes to elements if needed. See setTypeExtension() call sites
          like Document::createElement(), Document::createElementtNS() and CustomElementConstructor::createElementt()

        Test: fast/dom/custom/document-register-type-extensions.html

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8Float64Array.h:
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        * bindings/scripts/test/V8/V8TestException.h:
        * bindings/scripts/test/V8/V8TestInterface.h:
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        * bindings/scripts/test/V8/V8TestNode.h:
        * bindings/scripts/test/V8/V8TestObj.h:
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        * bindings/v8/CustomElementHelpers.cpp:
        (WebCore::hasValidPrototypeChain):
        (WebCore::CustomElementHelpers::isValidPrototypeParameter):
        (WebCore::CustomElementHelpers::findLocalName):
        (WebCore):
        (WebCore::CustomElementHelpers::findWrapperType):
        * bindings/v8/CustomElementHelpers.h:
        (CustomElementHelpers):
        * bindings/v8/V8CustomElement.cpp:
        (WebCore::V8CustomElement::createWrapper):
        * bindings/v8/V8CustomElement.h:
        (V8CustomElement):
        (WebCore::V8CustomElement::wrap):
        (WebCore::V8CustomElement::constructorOf):
        * bindings/v8/WrapperTypeInfo.h:
        (WrapperTypeTraits): Added.
        * bindings/v8/custom/V8CustomElementConstructorCustom.cpp:
        (WebCore::V8CustomElementConstructor::callAsFunctionCallback):
        * dom/CustomElementConstructor.cpp:
        (WebCore::CustomElementConstructor::create):
        (WebCore::CustomElementConstructor::CustomElementConstructor):
        (WebCore::CustomElementConstructor::createElement):
        (WebCore::setTypeExtension):
        * dom/CustomElementConstructor.h:
        (CustomElementConstructor):
        (WebCore::CustomElementConstructor::document):
        (WebCore::CustomElementConstructor::typeName):
        (WebCore::CustomElementConstructor::localName):
        * dom/CustomElementRegistry.cpp:
        (WebCore::nameIncludesHyphen):
        (WebCore::CustomElementRegistry::isValidName):
        (WebCore::CustomElementRegistry::registerElement):
        (WebCore::CustomElementRegistry::findFor):
        (WebCore::CustomElementRegistry::find):
        (WebCore::CustomElementRegistry::createElement):
        * dom/CustomElementRegistry.h:
        (CustomElementRegistry):
        * dom/Document.cpp:
        (WebCore::Document::createElement):
        (WebCore::Document::createElementNS):
        (WebCore::Document::registerElement):
        * dom/Document.h:
        (Document):
        (WebCore::Document::registry): Moved from Document.cpp to be inlined.
        * dom/Document.idl:
        * dom/make_names.pl:
        (printFactoryCppFile):
        (printWrapperFactoryCppFile):
        (printWrapperFactoryHeaderFile):
        * html/HTMLAttributeNames.in: Added @is attribute

2013-03-15  Alexey Proskuryakov  <ap@apple.com>

        Minor cleanup in worker code
        https://bugs.webkit.org/show_bug.cgi?id=112455

        Reviewed by Anders Carlsson.

        - Added OVERRIDE keywords.
        - Toned down FIXMEs about single MessagePort versions of functions. It's not a given
        that we'll want to get rid of them even when implementing array versions.
        - Explicitly marked virtual destructors as virtual.

        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        * workers/Worker.cpp:
        * workers/Worker.h:
        Removed an unused version of postMessage() that took no MessagePorts. This makes
        it less confusing why MessagePortArray is passed by pointer, and not by reference.

        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::~DedicatedWorkerContext):
        * workers/DedicatedWorkerContext.h:
        Added a destructor instead of an implicit one.
        Removed an unused version of postMessage() that took no MessagePorts.

        * workers/SharedWorker.h: Removed an unused virtual function (thank you OVERRIDE!)

        * dom/MessagePort.cpp:
        * dom/MessagePort.h:
        * loader/WorkerThreadableLoader.h:
        * page/DOMWindow.h:
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerThread.h:
        * workers/SharedWorkerContext.h:
        * workers/SharedWorkerThread.h:
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:
        * workers/WorkerScriptLoader.h:

2013-03-15  Joshua Bell  <jsbell@chromium.org>

        [V8] Binding: Implement EnforceRange IDL Attribute for long long conversions
        https://bugs.webkit.org/show_bug.cgi?id=96798

        Reviewed by Kentaro Hara.

        Implement [EnforceRange] attribute for V8 bindings, which specifies throwing behavior
        on conversions outside int/uint 32/64 ranges and edge cases like NaNs and Infinities.
        Conversely, conversions without this attribute should *not* throw.

        Tests: fast/js/webidl-type-mapping.html:
               fast/dom/non-numeric-values-numeric-parameters.html
               fast/js/script-tests/select-options-add.html
               storage/indexeddb/intversion-bad-parameters.html

        * Modules/indexeddb/IDBCursor.cpp: Remove custom range enforcement for advance()
        * Modules/indexeddb/IDBCursor.h: Adjust type to match WebIDL.
        * Modules/indexeddb/IDBCursor.idl: Specify [EnforceRange] and type matches spec WebIDL.
        * Modules/indexeddb/IDBFactory.cpp: Remove custom range enforcement for open()
        * Modules/indexeddb/IDBFactory.h: Adjust type to match WebIDL.
        * Modules/indexeddb/IDBFactory.idl: Specify [EnforceRange] and type matches spec WebIDL.
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative): Add FIXME to support [EnforceRange]
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter): Handle [EnforceRange] in attribute setters
        (GenerateParametersCheck): Handle [EnforceRange] in parameters.
        (JSValueToNative): Pass EnforceRange to toInt() functions as appropriate.
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/TestObj.idl: Tests w/ [EnforceRange]
        * bindings/scripts/test/V8/V8TestObj.cpp: Updated expectations
        * bindings/scripts/test/V8/V8TestTypedefs.cpp: Updated expectations.
        * bindings/v8/V8Binding.cpp: Overloads for toInt() variants that handle constraints.
        (WebCore::toInt32):
        (WebCore::toUInt32):
        (WebCore::toInt64):
        (WebCore::toUInt64):
        * bindings/v8/V8Binding.h: Ditto, plus helpers for callers not expecting errors.
        (WebCore::toInt32):
        (WebCore::toUInt32):
        (WebCore::toInt64):
        (WebCore::toUInt64):
        * bindings/v8/V8BindingMacros.h: Helper macros for type conversions that may throw.
        * testing/TypeConversions.h: Added new members with EnforceRange constraint.
        * testing/TypeConversions.idl: Ditto.

2013-03-15  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Refine JSDocs in NetworkRequest.js
        https://bugs.webkit.org/show_bug.cgi?id=112412

        Reviewed by Vsevolod Vlasov.

        Return types for some members are confusing (Object).

        * inspector/front-end/NetworkManager.js: Fixed JSDocs.
        * inspector/front-end/NetworkRequest.js: Ditto. Plus minor refactorings.

2013-03-15  Andy Estes  <aestes@apple.com>

        REGRESSION (r127277): CSS URIs with multi-byte Unicode escape sequences fail to parse
        https://bugs.webkit.org/show_bug.cgi?id=112436

        Reviewed by Michael Saboff.

        r127277 modified the CSS parser to use 8-bit strings when possible.
        However, it failed to handle URIs that contain Unicode escape sequences
        that expand to multi-byte characters. Not only would the URI fail to
        parse, but so would the remainder of the input string.

        Fix this by producing a 16-bit result when we detect a URI with a
        multi-byte Unicode escape, like we do for identifiers and other strings.

        Test: fast/css/url-with-multi-byte-unicode-escape.html

        * css/CSSParser.cpp:
        (WebCore::checkAndSkipString): Changed to be a free function since it
        doesn't access CSSParser's internal state.
        (WebCore::CSSParser::findURI): Added a function that consolidates the
        logic of finding the start and end pointers of the URI and the quote
        character (if encountered), starting at the current character.
        (WebCore::CSSParser::parseURIInternal): Removed duplicated logic for
        finding the URI bounds (this now lives in findURI()) and logic for
        setting the token type and updating the current character (this now
        lives in parseURI()).
        (WebCore::CSSParser::parseURI): Find the URI and parse it. If a
        multi-byte Unicode escape is encountered, rewind to the beginning of
        the URI and re-parse with a 16-bit string as the destination.
        * css/CSSParser.h:

2013-03-15  Andreas Kling  <akling@apple.com>

        [JSC] Remove custom WebAudio mark functions that we can generate instead.
        <http://webkit.org/b/110976>

        Reviewed by Eric Carlson.

        Remove custom JSC mark functions for AudioContext and ScriptProcessorNode since they
        are trivial to generate.

        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/ScriptProcessorNode.idl:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioContextCustom.cpp:
        * bindings/js/JSScriptProcessorNodeCustom.cpp: Removed.

2013-03-15  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix. Rename local variable which was colliding with class method.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::clone):

2013-03-15  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Handle success events arriving after context stopped
        https://bugs.webkit.org/show_bug.cgi?id=112451

        Reviewed by Tony Chang.

        In multiprocess ports, events from the back-end can arrive in the form of
        onXXX() calls after the script execution context has stopped. These need to
        be ignored. This was already done in most cases, but missing for two overloads
        of IDBRequest::onSuccess() - void and int64_t.

        Test: webkit_unit_test IDBRequestTest.EventsAfterStopping

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): Early return if context has stopped.
        (WebCore::IDBRequest::onSuccessInternal): ASSERT() that callers have checked context.

2013-03-14  Jer Noble  <jer.noble@apple.com>

        REGRESSION: -webkit-box-reflect does not show on video elements
        https://bugs.webkit.org/show_bug.cgi?id=112397

        Reviewed by Simon Fraser.

        Test: compositing/video/video-reflection.html

        Support cloning specific CALayer subtypes in PlatformCALayer,
        which allows reflections to work correctly for those layer types.
        Specifically, add support for cloning AVPlayerLayer layers.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::cloneLayer): Moved most of the
            implementation to PlatformCALayer::clone().
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer): Set the layerType to 
            LayerTypeAVPlayerLayer if the PlatformLayer parameter is an
            AVPlayerLayer.
        (PlatformCALayer::clone): Moved from GraphicsLayerCA::cloneLayer().
            Copy the player value to the new layer, if the current layer is
            a LayerTypeAVPlayerLayer.
        (PlatformCALayer::playerLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::clone): Moved from GraphicsLayerCA::cloneLayer().
            May want to add support for AVCFPlayerLayers in the future.

2013-03-15  Nate Chapin  <japhet@chromium.org>

        Hide MainResourceLoader from the outside world
        https://bugs.webkit.org/show_bug.cgi?id=109971

        Reviewed by Adam Barth.

        No new tests, refactor only.

        * WebCore.exp.in:
        * dom/Document.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/MediaDocument.cpp:
        * html/PluginDocument.cpp:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResourceLoader):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::setMainResourceDataBufferingPolicy):
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheHost.cpp:

2013-03-15  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112401

        Reviewed by Stephen Chenney.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendAccessibilityObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::webAreaObject):
        (WebCore::AccessibilityScrollView::documentFrameView):
        (WebCore::AccessibilityScrollView::parentObject):
        (WebCore::AccessibilityScrollView::parentObjectIfExists):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObjectFromPluginViewBase):
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::appendFormData):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::subframeForTargetNode):
        (WebCore::EventHandler::passGestureEventToWidget):
        * page/Frame.cpp:
        (WebCore::Frame::frameForWidget):
        * page/FrameView.cpp:
        (WebCore::collectFrameViewChildren):
        (WebCore::FrameView::hasCustomScrollbars):
        (WebCore::FrameView::convertToContainingView):
        (WebCore::FrameView::convertFromContainingView):
        (WebCore::FrameView::removeChild):
        * page/FrameView.h:
        (WebCore::toFrameView):
        (WebCore):
        * page/Page.cpp:
        (WebCore::Page::collectPluginViews):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * platform/ScrollView.h:
        (WebCore::toScrollView):
        (WebCore):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::isScrollViewScrollbar):
        (WebCore::Scrollbar::mouseUp):
        (WebCore::Scrollbar::axObjectCache):
        * platform/Widget.h:
        (WebCore::Widget::isScrollView):
        * platform/blackberry/PlatformScreenBlackBerry.cpp:
        (WebCore::toUserSpace):
        * platform/efl/ScrollbarEfl.cpp:
        (ScrollbarEfl::setParent):
        * platform/qt/PlatformSupportQt.cpp:
        (WebCore::PlatformSupport::popupsAllowed):
        (WebCore::PlatformSupport::pluginScriptableObject):
        * plugins/IFrameShimSupport.cpp:
        (WebCore::getPluginOcclusions):
        * plugins/PluginView.h:
        (WebCore::toPluginView):
        (WebCore):
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::isPluginViewBase):
        (PluginViewBase):
        (WebCore::toPluginViewBase):
        (WebCore):
        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::updateBuffer):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleScrollEvent):
        (WebCore::PluginView::calculateClipRect):
        (WebCore::PluginView::handleFullScreenAllowedEvent):
        (WebCore::PluginView::handleFullScreenExitEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::platformGetValue):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):
        (WebCore::PluginView::setBackgroundPlay):
        * plugins/blackberry/PluginViewPrivateBlackBerry.cpp:
        (WebCore::PluginViewPrivate::setVisibleRects):
        (WebCore::PluginViewPrivate::showKeyboard):
        (WebCore::PluginViewPrivate::requestFullScreen):
        (WebCore::PluginViewPrivate::requestCenterFitZoom):
        (WebCore::PluginViewPrivate::lockOrientation):
        (WebCore::PluginViewPrivate::unlockOrientation):
        (WebCore::PluginViewPrivate::preventIdle):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/mac/PluginViewMac.mm:
        (WebCore::PluginView::platformStart):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintIntoTransformedContext):
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::snapshot):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addLayoutOverflow):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing):
        (WebCore::RenderEmbeddedObject::viewCleared):
        (WebCore::RenderEmbeddedObject::nodeAtPoint):
        (WebCore::RenderEmbeddedObject::scroll):
        * rendering/RenderFlexibleBox.h:
        (WebCore::toRenderFlexibleBox):
        (WebCore):
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::viewCleared):
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::contentRootRenderer):
        (WebCore::RenderIFrame::layoutSeamlessly):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::requiresAcceleratedCompositing):
        (WebCore::RenderPart::embeddedContentBox):
        (WebCore::RenderPart::nodeAtPoint):
        * rendering/RenderRuby.cpp:
        (WebCore::rubyBeforeBlock):
        (WebCore::rubyAfterBlock):
        (WebCore::lastRubyRun):
        (WebCore::findRubyRunParent):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):
        (WebCore::RenderWidget::setOverlapTestResult):
        (WebCore::RenderWidget::updateWidgetPosition):

2013-03-15  No'am Rosenthal  <noam@webkit.org>

        [Texmap] REGRESSION (r144190): Failure at style with preserve-3d and opacity
        https://bugs.webkit.org/show_bug.cgi?id=112370

        According to spec, we avoid masking and clipping when preserves-3d is enabled.
        However, opacity should still work.
        Allowing opacity when preserves-3d is on.

        Reviewed by Caio Marcelo de Oliveira Filho.

        Test: compositing/overlap-blending/preserves3d-opacity.html

        * platform/graphics/texmap/TextureMapperGL.cpp:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintRecursive):

2013-03-15  Konrad Piascik  <kpiascik@blackberry.com>

        Get rid of useless forward declaration.
        https://bugs.webkit.org/show_bug.cgi?id=112449

        Reviewed by Stephen Chenney.

        No behavioural change 

        * svg/SVGRectElement.cpp:

2013-03-15  Alexei Filippov  <alph@chromium.org>

        Web Inspector: make CPU profiler show timings using the same time unit [ms]
        https://bugs.webkit.org/show_bug.cgi?id=112356

        That makes it much easier to compare values when looking at the data.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.get data.formatMilliseconds):

2013-03-15  Peter Beverloo  <peter@chromium.org>

        Implement support for nullable types in the bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=111728

        Reviewed by Kentaro Hara.

        This patch adds support for nullable types in the bindings
        generator, as described in section 3.10.22 of WebIDL:
            http://dev.w3.org/2006/webapi/WebIDL/#idl-nullable-type

        interface MyInterface {
            readonly attribute boolean? value; // true, false or null.
        };

        The IDL Parser has been modified to record whether attributes are
        nullable. Question marks from the type will always be stripped
        from the domAttribute->signature->type field. Once support for
        this has been completely implemented, we'll be able to remove a
        bunch of custom bindings, i.e. those of Device Orientation.

        Any getter for an attribute which returns a nullable type will be
        called with an additional attribute (passed by reference) named
        "isNull". This will be the last argument passed to the method,
        unless an exception code (ec) argument will be passed as well.

        The CPP, GObject and ObjC bindings will not change behavior following
        this patch, although they have been modified to call the WebCore
        methods for nullable attributes with the correct signature. The
        V8 and JS binding generators do have modified behavior, in that they
        will actually return v8Null/jsNull when isNull == true.

        Tested by existing binding tests and the new nullable attribute
        tests in the bindings/scripts/test/ directory.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperty):
        (GenerateFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        * bindings/scripts/IDLParser.pm:
        (typeHasNullableSuffix):
        (typeRemoveNullableSuffix):
        (parseAttributeRest):
        (parseOptionalOrRequiredArgument):
        (parseAttributeRestOld):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::nullableDoubleAttribute):
        (WebDOMTestObj::nullableLongAttribute):
        (WebDOMTestObj::nullableBooleanAttribute):
        (WebDOMTestObj::nullableStringAttribute):
        (WebDOMTestObj::nullableLongSettableAttribute):
        (WebDOMTestObj::setNullableLongSettableAttribute):
        (WebDOMTestObj::nullableStringValue):
        (WebDOMTestObj::setNullableStringValue):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        (webkit_dom_test_obj_get_nullable_double_attribute):
        (webkit_dom_test_obj_get_nullable_long_attribute):
        (webkit_dom_test_obj_get_nullable_boolean_attribute):
        (webkit_dom_test_obj_get_nullable_string_attribute):
        (webkit_dom_test_obj_get_nullable_long_settable_attribute):
        (webkit_dom_test_obj_set_nullable_long_settable_attribute):
        (webkit_dom_test_obj_get_nullable_string_value):
        (webkit_dom_test_obj_set_nullable_string_value):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjNullableDoubleAttribute):
        (WebCore::jsTestObjNullableLongAttribute):
        (WebCore::jsTestObjNullableBooleanAttribute):
        (WebCore::jsTestObjNullableStringAttribute):
        (WebCore::jsTestObjNullableLongSettableAttribute):
        (WebCore::jsTestObjNullableStringValue):
        (WebCore::setJSTestObjNullableLongSettableAttribute):
        (WebCore::setJSTestObjNullableStringValue):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj nullableDoubleAttribute]):
        (-[DOMTestObj nullableLongAttribute]):
        (-[DOMTestObj nullableBooleanAttribute]):
        (-[DOMTestObj nullableStringAttribute]):
        (-[DOMTestObj nullableLongSettableAttribute]):
        (-[DOMTestObj setNullableLongSettableAttribute:]):
        (-[DOMTestObj nullableStringValue]):
        (-[DOMTestObj setNullableStringValue:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::nullableDoubleAttributeAttrGetter):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::nullableDoubleAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::nullableLongAttributeAttrGetter):
        (WebCore::TestObjV8Internal::nullableLongAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::nullableBooleanAttributeAttrGetter):
        (WebCore::TestObjV8Internal::nullableBooleanAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::nullableStringAttributeAttrGetter):
        (WebCore::TestObjV8Internal::nullableStringAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::nullableLongSettableAttributeAttrGetter):
        (WebCore::TestObjV8Internal::nullableLongSettableAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::nullableLongSettableAttributeAttrSetter):
        (WebCore::TestObjV8Internal::nullableLongSettableAttributeAttrSetterCallback):
        (WebCore::TestObjV8Internal::nullableStringValueAttrGetter):
        (WebCore::TestObjV8Internal::nullableStringValueAttrGetterCallback):
        (WebCore::TestObjV8Internal::nullableStringValueAttrSetter):
        (WebCore::TestObjV8Internal::nullableStringValueAttrSetterCallback):
        (WebCore):

2013-03-15  Marja Hölttä  <marja@chromium.org>

        [V8] Store main world and non-main world templates separately.
        https://bugs.webkit.org/show_bug.cgi?id=111724

        Reviewed by Jochen Eisinger.

        This is needed for generating specialized bindings for the main
        world (bug 110874).

        No new tests (updated existing bindings tests).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateNormalAttrSetter):
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):
        (GenerateImplementation):
        (JSValueToNative):
        (CreateCustomSignature):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooMethod):
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        (WebCore):
        (WebCore::V8Float64Array::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionMethod):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        (WebCore::V8TestActiveDOMObject::HasInstance):
        (WebCore):
        (WebCore::V8TestActiveDOMObject::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        (WebCore):
        (WebCore::V8TestCustomNamedGetter::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        (WebCore):
        (WebCore::V8TestEventConstructor::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::dispatchEventMethod):
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        (WebCore::V8TestEventTarget::HasInstance):
        (WebCore):
        (WebCore::V8TestEventTarget::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        (WebCore):
        (WebCore::V8TestException::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Method):
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        (WebCore::V8TestInterface::HasInstance):
        (WebCore):
        (WebCore::V8TestInterface::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        (WebCore):
        (WebCore::V8TestMediaQueryListListener::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        (WebCore):
        (WebCore::V8TestNamedConstructor::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetTemplate):
        (WebCore::V8TestNode::HasInstance):
        (WebCore):
        (WebCore::V8TestNode::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::testObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrSetter):
        (WebCore::TestObjV8Internal::mutablePointAttrSetter):
        (WebCore::TestObjV8Internal::immutablePointAttrSetter):
        (WebCore::TestObjV8Internal::voidMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::longMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::objMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsMethod):
        (WebCore::TestObjV8Internal::overloadedMethod1Method):
        (WebCore::TestObjV8Internal::overloadedMethod2Method):
        (WebCore::TestObjV8Internal::overloadedMethod8Method):
        (WebCore::TestObjV8Internal::overloadedMethodMethod):
        (WebCore::TestObjV8Internal::convert1Method):
        (WebCore::TestObjV8Internal::convert2Method):
        (WebCore::TestObjV8Internal::convert4Method):
        (WebCore::TestObjV8Internal::convert5Method):
        (WebCore::TestObjV8Internal::variadicNodeMethodMethod):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::HasInstance):
        (WebCore):
        (WebCore::V8TestObj::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::TestOverloadedConstructorsV8Internal::constructor1):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor2):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor3):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        (WebCore):
        (WebCore::V8TestOverloadedConstructors::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        (WebCore):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::funcMethod):
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        (WebCore):
        (WebCore::V8TestTypedefs::HasInstanceInAnyWorld):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (V8TestTypedefs):
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitNodeWrappers):
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/V8AdaptorFunction.cpp:
        (WebCore::V8AdaptorFunction::getTemplate):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toDOMStringList):
        (WebCore::toXPathNSResolver):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::toRefPtrNativeArray):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        (WebCore::V8PerIsolateData::hasPrivateTemplate):
        (WebCore::V8PerIsolateData::privateTemplate):
        (WebCore::V8PerIsolateData::rawTemplate):
        (WebCore::V8PerIsolateData::hasInstance):
        * bindings/v8/V8PerIsolateData.h:
        (WebCore::V8PerIsolateData::rawTemplateMap):
        (V8PerIsolateData):
        (WebCore::V8PerIsolateData::templateMap):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::extractTransferables):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8AudioBufferSourceNodeCustom.cpp:
        (WebCore::V8AudioBufferSourceNode::bufferAttrSetterCustom):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCustom):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toCanvasStyle):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::setDragImageMethodCustom):
        * bindings/v8/custom/V8CryptoCustom.cpp:
        (WebCore::V8Crypto::getRandomValuesMethodCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCustom):
        (WebCore::V8DOMFormData::appendMethodCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCustom):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateMethodCustom):
        * bindings/v8/custom/V8HTMLMediaElementCustom.cpp:
        (WebCore::V8HTMLMediaElement::controllerAttrSetterCustom):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::addMethodCustom):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::isHTMLAllCollectionMethodCustom):
        (WebCore::V8InjectedScriptHost::typeMethodCustom):
        (WebCore::V8InjectedScriptHost::getEventListenersMethodCustom):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::insertBeforeMethodCustom):
        (WebCore::V8Node::replaceChildMethodCustom):
        (WebCore::V8Node::removeChildMethodCustom):
        (WebCore::V8Node::appendChildMethodCustom):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::opaqueRootForGC):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toWebGLUniformLocation):
        (WebCore::V8WebGLRenderingContext::getAttachedShadersMethodCustom):
        (WebCore::V8WebGLRenderingContext::getProgramParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getShaderParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getUniformMethodCustom):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::isDocumentType):
        (WebCore::V8XMLHttpRequest::sendMethodCustom):

2013-03-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145802.
        http://trac.webkit.org/changeset/145802
        https://bugs.webkit.org/show_bug.cgi?id=112444

        This broke Chrome. (Requested by marja____ on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateNormalAttrSetter):
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):
        (GenerateImplementation):
        (JSValueToNative):
        (CreateCustomSignature):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooMethod):
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionMethod):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::dispatchEventMethod):
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Method):
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetTemplate):
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::testObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrSetter):
        (WebCore::TestObjV8Internal::mutablePointAttrSetter):
        (WebCore::TestObjV8Internal::immutablePointAttrSetter):
        (WebCore::TestObjV8Internal::voidMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::longMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::objMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsMethod):
        (WebCore::TestObjV8Internal::overloadedMethod1Method):
        (WebCore::TestObjV8Internal::overloadedMethod2Method):
        (WebCore::TestObjV8Internal::overloadedMethod8Method):
        (WebCore::TestObjV8Internal::overloadedMethodMethod):
        (WebCore::TestObjV8Internal::convert1Method):
        (WebCore::TestObjV8Internal::convert2Method):
        (WebCore::TestObjV8Internal::convert4Method):
        (WebCore::TestObjV8Internal::convert5Method):
        (WebCore::TestObjV8Internal::variadicNodeMethodMethod):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::TestOverloadedConstructorsV8Internal::constructor1):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor2):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor3):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::funcMethod):
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (V8TestTypedefs):
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitNodeWrappers):
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/V8AdaptorFunction.cpp:
        (WebCore::V8AdaptorFunction::getTemplate):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toDOMStringList):
        (WebCore::toXPathNSResolver):
        * bindings/v8/V8Binding.h:
        (WebCore::toRefPtrNativeArray):
        (WebCore):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        (WebCore::V8PerIsolateData::hasPrivateTemplate):
        (WebCore::V8PerIsolateData::privateTemplate):
        (WebCore::V8PerIsolateData::rawTemplate):
        (WebCore::V8PerIsolateData::hasInstance):
        * bindings/v8/V8PerIsolateData.h:
        (WebCore::V8PerIsolateData::rawTemplateMap):
        (WebCore::V8PerIsolateData::templateMap):
        (V8PerIsolateData):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::extractTransferables):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8AudioBufferSourceNodeCustom.cpp:
        (WebCore::V8AudioBufferSourceNode::bufferAttrSetterCustom):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCustom):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toCanvasStyle):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::setDragImageMethodCustom):
        * bindings/v8/custom/V8CryptoCustom.cpp:
        (WebCore::V8Crypto::getRandomValuesMethodCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCustom):
        (WebCore::V8DOMFormData::appendMethodCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCustom):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateMethodCustom):
        * bindings/v8/custom/V8HTMLMediaElementCustom.cpp:
        (WebCore::V8HTMLMediaElement::controllerAttrSetterCustom):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::addMethodCustom):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::isHTMLAllCollectionMethodCustom):
        (WebCore::V8InjectedScriptHost::typeMethodCustom):
        (WebCore::V8InjectedScriptHost::getEventListenersMethodCustom):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::insertBeforeMethodCustom):
        (WebCore::V8Node::replaceChildMethodCustom):
        (WebCore::V8Node::removeChildMethodCustom):
        (WebCore::V8Node::appendChildMethodCustom):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::opaqueRootForGC):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toWebGLUniformLocation):
        (WebCore::V8WebGLRenderingContext::getAttachedShadersMethodCustom):
        (WebCore::V8WebGLRenderingContext::getProgramParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getShaderParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getUniformMethodCustom):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::isDocumentType):
        (WebCore::V8XMLHttpRequest::sendMethodCustom):

2013-03-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145896.
        http://trac.webkit.org/changeset/145896
        https://bugs.webkit.org/show_bug.cgi?id=112443

        Chrome broken by r145802 and this builds on top of it.
        (Requested by marja____ on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetterCallback):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetterCallback):
        (GenerateNormalAttrSetter):
        (GenerateNamedConstructor):
        (GenerateBatchedAttributeData):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        (GenerateCallbackImplementation):
        (GenerateFunctionCallString):
        (CreateCustomSignature):
        (NativeToJSValue):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::ConfigureV8TestCustomNamedGetterTemplate):
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestEventConstructorTemplate):
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::ConfigureV8TestExceptionTemplate):
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (TestInterfaceV8Internal):
        (WebCore):
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        (WebCore::ConfigureV8TestNamedConstructorTemplate):
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::ConfigureV8TestNodeTemplate):
        (WebCore::V8TestNode::GetTemplate):
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (TestObjV8Internal):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::ConfigureV8TestOverloadedConstructorsTemplate):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (WebCore):
        * bindings/v8/DOMDataStore.h:
        (DOMDataStore):
        * bindings/v8/V8DOMConfiguration.cpp:
        * bindings/v8/V8DOMConfiguration.h:
        (V8DOMConfiguration):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8EventTargetCustom.cpp:
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        * bindings/v8/custom/V8MicroDataItemValueCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:

2013-03-15  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Remove PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=112438

        Reviewed by Rob Buis.

        This class only contains getFontFamilyForCharacters(), which was
        moved from PlatformSupport to FontCache in r129257.

        This patch does the same for the BlackBerry port.

        * platform/graphics/FontCache.h:
        (FontCache):
        * platform/graphics/blackberry/FontCacheBlackBerry.cpp:
        (WebCore::FontCache::getFontFamilyForCharacters):
        (WebCore):
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/blackberry/PlatformSupport.cpp: Removed.
        * platform/graphics/blackberry/PlatformSupport.h: Removed.

2013-03-15  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] FontPlatformData: remove TextOrientation parameter
        https://bugs.webkit.org/show_bug.cgi?id=112135

        Reviewed by Rob Buis.

        I forgot to remove the #include "TextOrientation.h" line as
        well. This file no longer exists.

        * platform/graphics/blackberry/FontCustomPlatformData.h:

2013-03-15  Sankeerth V S  <sankeerth.vs@samsung.com>

        DataGrid should reveal and select next/previous DataGridNode upon deletion of selected node
        https://bugs.webkit.org/show_bug.cgi?id=112404

        Reviewed by Vsevolod Vlasov.

        No new tests as this is a UI related change.

        While deleting the entries of the data grid by clicking on 'Delete'
        status bar button, deletion of selected node should trigger selection of
        next possible (backward/forward) DataGridNode.

        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._deleteButtonClicked):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._keyDown):
        (WebInspector.DataGrid.prototype.changeNodeAfterDeletion):

2013-03-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Draw timeline grid over flame chart items.
        https://bugs.webkit.org/show_bug.cgi?id=112439

        Reviewed by Pavel Feldman.

        I've used WebInspector.TimelineGrid

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.Calculator):
        (WebInspector.FlameChart.Calculator.prototype._updateBoundaries):
        (WebInspector.FlameChart.Calculator.prototype.computePosition):
        (WebInspector.FlameChart.Calculator.prototype.formatTime):
        (WebInspector.FlameChart.Calculator.prototype.maximumBoundary):
        (WebInspector.FlameChart.Calculator.prototype.minimumBoundary):
        (WebInspector.FlameChart.Calculator.prototype.boundarySpan):
        (WebInspector.FlameChart.prototype.update):

2013-03-15  Marja Hölttä  <marja@chromium.org>

        [V8] Add machinery for generating specialized bindings for the main world
        https://bugs.webkit.org/show_bug.cgi?id=111417

        Reviewed by Kentaro Hara.

        The new specialized bindings will be faster, because they don't need to
        do the "main world, isolated world or a worker" check, but can right
        away assume that we're in the main world.

        This patch generates main world bindings for getters and setters.

        No new tests (updated existing bindings tests).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetterCallback):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetterCallback):
        (GenerateNormalAttrSetter):
        (GenerateNamedConstructor):
        (GenerateBatchedAttributeData):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        (GenerateCallbackImplementation):
        (GenerateFunctionCallString):
        (CreateCustomSignature):
        (NativeToJSValue):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingAttrAttrGetterForMainWorld):
        (TestActiveDOMObjectV8Internal):
        (WebCore::TestActiveDOMObjectV8Internal::excitingAttrAttrGetterCallbackForMainWorld):
        (WebCore):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::ConfigureV8TestCustomNamedGetterTemplate):
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::TestEventConstructorV8Internal::attr1AttrGetterForMainWorld):
        (TestEventConstructorV8Internal):
        (WebCore::TestEventConstructorV8Internal::attr1AttrGetterCallbackForMainWorld):
        (WebCore::TestEventConstructorV8Internal::attr2AttrGetterForMainWorld):
        (WebCore::TestEventConstructorV8Internal::attr2AttrGetterCallbackForMainWorld):
        (WebCore):
        (WebCore::ConfigureV8TestEventConstructorTemplate):
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::TestExceptionV8Internal::nameAttrGetterForMainWorld):
        (TestExceptionV8Internal):
        (WebCore::TestExceptionV8Internal::nameAttrGetterCallbackForMainWorld):
        (WebCore):
        (WebCore::ConfigureV8TestExceptionTemplate):
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticReadOnlyAttrAttrGetterForMainWorld):
        (TestInterfaceV8Internal):
        (WebCore::TestInterfaceV8Internal::supplementalStaticReadOnlyAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrGetterForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrSetterForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStr1AttrGetterForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStr1AttrGetterCallbackForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrGetterForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrGetterCallbackForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrSetterForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrSetterCallbackForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrGetterCallbackForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrSetterCallbackForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrGetterForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrGetterCallbackForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrSetterForMainWorld):
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrSetterCallbackForMainWorld):
        (WebCore):
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        (WebCore::ConfigureV8TestNamedConstructorTemplate):
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::ConfigureV8TestNodeTemplate):
        (WebCore::V8TestNode::GetTemplate):
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyLongAttrAttrGetterForMainWorld):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::readOnlyLongAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::readOnlyStringAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::readOnlyStringAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::readOnlyTestObjAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::readOnlyTestObjAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::staticReadOnlyLongAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::staticReadOnlyLongAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::staticStringAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::staticStringAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::staticStringAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::staticStringAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::enumAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::enumAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::enumAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::enumAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::shortAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::shortAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::shortAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::shortAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::unsignedShortAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::unsignedShortAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::unsignedShortAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::unsignedShortAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::longAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::longAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::longAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::longAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::longLongAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::longLongAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::longLongAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::longLongAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::unsignedLongLongAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::unsignedLongLongAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::unsignedLongLongAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::unsignedLongLongAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::testObjAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::testObjAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::testObjAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::testObjAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::createAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::createAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::createAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::createAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedIntegralAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedIntegralAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedIntegralAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedIntegralAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedIntegralAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedUnsignedIntegralAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedUnsignedIntegralAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedUnsignedIntegralAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedUnsignedIntegralAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedBooleanAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedBooleanAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedBooleanAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedBooleanAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomIntegralAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomIntegralAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomIntegralAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomIntegralAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomBooleanAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomBooleanAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomBooleanAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomBooleanAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::attrWithSetterExceptionAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::attrWithSetterExceptionAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::attrWithSetterExceptionAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::attrWithSetterExceptionAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::customAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::customAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr1AttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr1AttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr1AttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr1AttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr2AttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr2AttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr2AttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr2AttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr3AttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr3AttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr3AttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::conditionalAttr3AttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::cachedAttribute1AttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::cachedAttribute1AttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::cachedAttribute2AttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::cachedAttribute2AttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::anyAttributeAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::anyAttributeAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::anyAttributeAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::anyAttributeAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr1AttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr1AttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr1AttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr1AttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr2AttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr2AttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr2AttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr2AttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::floatArrayAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::floatArrayAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::floatArrayAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::floatArrayAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::doubleArrayAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::doubleArrayAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::doubleArrayAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::doubleArrayAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::contentDocumentAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::contentDocumentAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::mutablePointAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::mutablePointAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::mutablePointAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::mutablePointAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::immutablePointAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::immutablePointAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::immutablePointAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::immutablePointAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::strawberryAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::strawberryAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::strawberryAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::strawberryAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::strictFloatAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::strictFloatAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::strictFloatAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::strictFloatAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::descriptionAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::descriptionAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::idAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::idAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::idAttrSetterForMainWorld):
        (WebCore::TestObjV8Internal::idAttrSetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::hashAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::hashAttrGetterCallbackForMainWorld):
        (WebCore::TestObjV8Internal::replaceableAttributeAttrGetterForMainWorld):
        (WebCore::TestObjV8Internal::replaceableAttributeAttrGetterCallbackForMainWorld):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::ConfigureV8TestOverloadedConstructorsTemplate):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::valueAttrGetterForMainWorld):
        (TestSerializedScriptValueInterfaceV8Internal):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::valueAttrGetterCallbackForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::valueAttrSetterForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::valueAttrSetterCallbackForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::readonlyValueAttrGetterForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::readonlyValueAttrGetterCallbackForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrGetterForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrGetterCallbackForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrSetterForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrSetterCallbackForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::portsAttrGetterForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::portsAttrGetterCallbackForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedReadonlyValueAttrGetterForMainWorld):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedReadonlyValueAttrGetterCallbackForMainWorld):
        (WebCore):
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::unsignedLongLongAttrAttrGetterForMainWorld):
        (TestTypedefsV8Internal):
        (WebCore::TestTypedefsV8Internal::unsignedLongLongAttrAttrGetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::unsignedLongLongAttrAttrSetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::unsignedLongLongAttrAttrSetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::immutableSerializedScriptValueAttrGetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::immutableSerializedScriptValueAttrGetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::immutableSerializedScriptValueAttrSetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::immutableSerializedScriptValueAttrSetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::attrWithGetterExceptionAttrGetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::attrWithGetterExceptionAttrGetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::attrWithGetterExceptionAttrSetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::attrWithGetterExceptionAttrSetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::attrWithSetterExceptionAttrGetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::attrWithSetterExceptionAttrGetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::attrWithSetterExceptionAttrSetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::attrWithSetterExceptionAttrSetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::stringAttrWithGetterExceptionAttrGetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::stringAttrWithGetterExceptionAttrGetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::stringAttrWithGetterExceptionAttrSetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::stringAttrWithGetterExceptionAttrSetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::stringAttrWithSetterExceptionAttrGetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::stringAttrWithSetterExceptionAttrGetterCallbackForMainWorld):
        (WebCore::TestTypedefsV8Internal::stringAttrWithSetterExceptionAttrSetterForMainWorld):
        (WebCore::TestTypedefsV8Internal::stringAttrWithSetterExceptionAttrSetterCallbackForMainWorld):
        (WebCore):
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        (WebCore::toV8FastForMainWorld):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::getWrapperForMainWorld):
        (DOMDataStore):
        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::addToTemplate):
        (WebCore):
        * bindings/v8/V8DOMConfiguration.h:
        (V8DOMConfiguration):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        * bindings/v8/custom/V8EventTargetCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        * bindings/v8/custom/V8MicroDataItemValueCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::toV8ForMainWorld):
        (WebCore):

2013-03-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. xOffset calculates incorrectly when chart width less that canvas.width.
        https://bugs.webkit.org/show_bug.cgi?id=112423

        Reviewed by Yury Semikhatsky.

        I extracted xOffset assigment procedure into a separate function.

        Drive by fix: size and posion of anchor element was adjusted.
        Drive by fix: we will not paint item if it is not visible.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart.prototype._maxXOffset):
        (WebInspector.FlameChart.prototype._setXOffset):
        (WebInspector.FlameChart.prototype._canvasDragging):
        (WebInspector.FlameChart.prototype._onMouseMove):
        (WebInspector.FlameChart.prototype._adjustXOffset):
        (WebInspector.FlameChart.prototype._adjustXScale):
        (WebInspector.FlameChart.prototype.draw):

2013-03-15  Noam Rosenthal  <noam@webkit.org>

        [Texmap] Change brightness filter to match new spec
        https://bugs.webkit.org/show_bug.cgi?id=112422

        New filters spec specifies an intercept of 0 instead of 1.
        This is already done for the software version in http://trac.webkit.org/changeset/139770.
        This patch adjusts the value for the accelerated version.

        Reviewed by Allan Sandfeld Jensen.

        Filter tests are currently disabled on Qt/GTK/EFL, but they would need to be rebaselined once enabled.

        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:

2013-03-15  Jaehun Lim  <ljaehun.lim@samsung.com>

        Call release() when a RefPtr is returned.
        https://bugs.webkit.org/show_bug.cgi?id=112420

        Reviewed by Eric Seidel.

        release() should be called on a RefPtr to convert it to a PassRefPtr.

        No new tests needed, no behavior changes.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseImageResolution):
        (WebCore::CSSParser::parseImageSet):

2013-03-15  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] InitiatorComparator is not reflexive/antisymmetric.
        https://bugs.webkit.org/show_bug.cgi?id=112341

        Reviewed by Vsevolod Vlasov.

        When both objects do not have initiator: f(a, b) = f(b, a) = -1
        Furthermore: redirected responses are mixed with "other".

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshInitiatorCell):
        Remember "displayed" initiator type.
        (WebInspector.NetworkDataGridNode.InitiatorComparator):
        Recall "diaplayed" initiator type for more precise comparison.

2013-03-15  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: show image decode performed off main thread on timeline
        https://bugs.webkit.org/show_bug.cgi?id=111159

        Reviewed by Pavel Feldman.

        - add handling of Decode Image event to TimelineTraceEventProcessorr;
        - only log platform events for the main thread;
        - extract constants for trace events produced by platform instrumentation.

        * inspector/InspectorTimelineAgent.cpp:
        (TimelineRecordType):
        * inspector/InspectorTimelineAgent.h:
        (TimelineRecordType):
        * inspector/TimelineTraceEventProcessor.cpp:
        (WebCore::TimelineTraceEventProcessor::TimelineTraceEventProcessor):
        (WebCore::TimelineTraceEventProcessor::onImageDecodeBegin):
        (WebCore):
        (WebCore::TimelineTraceEventProcessor::onImageDecodeEnd):
        * inspector/TimelineTraceEventProcessor.h:
        (TimelineTraceEventProcessor):
        * platform/PlatformInstrumentation.cpp:
        (WebCore):
        * platform/PlatformInstrumentation.h:
        (PlatformInstrumentation):
        (WebCore):
        (WebCore::PlatformInstrumentation::willDecodeImage):
        (WebCore::PlatformInstrumentation::didDecodeImage):
        (WebCore::PlatformInstrumentation::willResizeImage):
        (WebCore::PlatformInstrumentation::didResizeImage):

2013-03-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. When user zooms the chart, the point under cursor has to be the zooming center.
        https://bugs.webkit.org/show_bug.cgi?id=112417

        Reviewed by Yury Semikhatsky.

        It converts the cursor position into time,
        changes the scale factor and calculates the new offset for the canvas.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart.prototype._adjustXScale):
        (WebInspector.FlameChart.prototype._onMouseWheel):

2013-03-13  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Sort columns context menu items alphabetically.
        https://bugs.webkit.org/show_bug.cgi?id=112321

        Reviewed by Pavel Feldman.

        Problem: columns are presented in "natural" order,
        so it is hard to find specific item.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._getConfigurableColumnIDs):
        Generate list of column IDs sorted alphabetically.
        (WebInspector.NetworkLogView.prototype._contextMenu):
        Use alphabetically sorted list of column IDs.

2013-03-15  Takashi Sakamoto  <tasak@google.com>

        Crash at RenderStyle::inheritFrom reported by fuzzer
        https://bugs.webkit.org/show_bug.cgi?id=112322

        Reviewed by Hajime Morrita.

        pseudoStyleForElement should check whether a parent style of a given
        element is available or not. If a given element's parent is
        an insertion point whose reset-style-inheritance is true, the parent
        style is not available. Need to use defaultStyleForElement.

        Test: fast/dom/shadow/insertion-point-resetStyleInheritance-with-pseudo-element-crash.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        Removed cloneForParent. Instead, made m_state own parentStyle, i.e.
        changed m_parentStyle in class State from RenderStyle* to
        RefPtr<RenderStyle>.
        (WebCore::StyleResolver::pseudoStyleForElement):
        If an actual parent style of a given element is not available, use
        defaultStyleForElement. This is the same logic as styleForElement.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::setParentStyle):
        Modified the parameter to use PassRefPtr<RenderStyle>.
        (WebCore::StyleResolver::State::parentStyle):
        (State):

2013-03-15  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Selecting text inside an empty region causes selection outside the region area
        https://bugs.webkit.org/show_bug.cgi?id=107752

        Reviewed by David Hyatt.

        When performing hit testing inside a flow thread, we need to make sure that
        we actually hit some node from the flow thread content and not the flow thread
        itself (which would set the hit test result node to the document node, allowing
        wrong selection of content outside the empty region).

        Test: fast/regions/selecting-text-in-empty-region.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::hitTestFlowThreadPortionInRegion):

2013-03-15  Luiz Agostini  <luiz.agostini@nokia.com>

        [Texmap] layerRect should be used instead of contents rect for scrollable layer hit tests.
        https://bugs.webkit.org/show_bug.cgi?id=112413

        Reviewed by Noam Rosenthal.

        Using layerRect() instead of m_state.contentsRect for scrollable layer hit test.
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::scrollableLayerHitTestCondition):

2013-03-14  Dominic Cooney  <dominicc@chromium.org>

        Redundant if statement in RenderTextControlSingleLine::layout should be removed
        https://bugs.webkit.org/show_bug.cgi?id=112406

        Reviewed by Andreas Kling.

        Covered by existing tests added in r145239.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):

2013-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145864.
        http://trac.webkit.org/changeset/145864
        https://bugs.webkit.org/show_bug.cgi?id=112408

        should fix XMLDocumentParser instead of CSSDefaultStyleSheet
        (Requested by tasak on #webkit).

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):

2013-03-14  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [DataGrid] Specify columns with array of descriptors.
        https://bugs.webkit.org/show_bug.cgi?id=112338

        Reviewed by Pavel Feldman.

        Currently columns are specified by Object that maps
        column identifiers to column descriptors. Iteration order over
        Object keys is not guaranteed.

        Array should be used to specify column order.

        * inspector/front-end/DataGrid.js: Change consrtructor parameter type.
        * inspector/front-end/ApplicationCacheItemsView.js: Adopt changes.
        * inspector/front-end/CPUProfileView.js: Ditto.
        * inspector/front-end/CSSSelectorProfileView.js: Ditto.
        * inspector/front-end/CanvasProfileView.js: Ditto.
        * inspector/front-end/CookieItemsView.js: Ditto.
        * inspector/front-end/CookiesTable.js: Ditto.
        * inspector/front-end/DOMStorageItemsView.js: Ditto.
        * inspector/front-end/DirectoryContentView.js: Ditto.
        * inspector/front-end/HeapSnapshot.js: Ditto.
        * inspector/front-end/HeapSnapshotDataGrids.js: Ditto.
        * inspector/front-end/IndexedDBViews.js: Ditto.
        * inspector/front-end/NativeMemorySnapshotView.js: Ditto.
        * inspector/front-end/NetworkPanel.js: Ditto.
        * inspector/front-end/ResourceWebSocketFrameView.js: Ditto.

2013-03-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Support scrolling by dragging.
        https://bugs.webkit.org/show_bug.cgi?id=112346

        Reviewed by Yury Semikhatsky.

        Drag hander was added. It seems that simple repaint works well.
        When the user starts dragging we hide the popover, change offset
        and do update for the new canvas image.
        Drive by change: Due to new way of scrolling the canvas I changed
        the behaiviour of the wheel events. Now wheel scrolls if Shift key pressed
        and zooms if not.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype._startCanvasDragging):
        (WebInspector.FlameChart.prototype._canvasDragging):
        (WebInspector.FlameChart.prototype._endCanvasDragging):
        (WebInspector.FlameChart.prototype._onMouseWheel):

2013-03-14  Hayato Ito  <hayato@chromium.org>

        [Shadow Dom]: Non Bubbling events in ShadowDOM dispatch in an incorrect order
        https://bugs.webkit.org/show_bug.cgi?id=112214

        Reviewed by Dimitri Glazkov.

        Fix the order of event dispatching for Shadow DOM.

        So far, an event whose event phase should be set to AT_TARGET,
        e.g. event at shadow hosts, is dispatched in bubbling phase in the
        whole event path.  This patch fixed the order of event dispatching
        so that an event whose event phase must be set to AT_TARGET phase
        is dispatched in capturing phase rather than bubbling phase.

        The spec is here:
        https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#event-dispatch

        5.5 Event Dispatch says:

        - When capturing, which entails processing step 3 of the event
        dispatch algorithm, the Event eventPhase attribute must return
        AT_TARGET if the relative target is same as the node on which
        event listeners are invoked
        - When bubbling, which entails
        processing step 6 of the event dispatch algorithm, the event
        listeners must not be invoked on a node if it is the same as its
        relative target

        No new tests. Update existing layout tests.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEventAtCapturing):
        (WebCore::EventDispatcher::dispatchEventAtBubbling):

2013-03-14  Shezan Baig  <sbaig1@bloomberg.net>

        Backspace/delete at start of table cell shouldn't step out of cell
        https://bugs.webkit.org/show_bug.cgi?id=35372

        Reviewed by Ryosuke Niwa.

        Make Delete and ForwardDelete commands be no-ops if we are at the first
        position or last position of a table cell respectively.

        Tests: editing/deleting/backspace-at-table-cell-beginning.html
               editing/deleting/forward-delete-at-table-cell-ending.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):

2013-03-14  Xidorn Quan  <quanxunzhen@gmail.com>

        Clickable area is incorrect for elements with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=95373

        Reviewed by Simon Fraser.

        As RenderBlock doesn't see rounded rect which comes from border-radius
        in nodeAtPoint, the rounded corner seems to have an 'invisible' square
        box which catches hits. So we added check on whether hitTestPoint also
        intersects the rounded rect when hasBorderRadius is set.

        This patch is based on Takashi Sakamoto's work in
        https://bugs.webkit.org/show_bug.cgi?id=95373

        Test: fast/borders/border-radius-position.html

        * platform/graphics/FloatQuad.cpp:
        (WebCore):
        (WebCore::lineIntersectsCircle):
        (WebCore::FloatQuad::intersectsCircle):
        (WebCore::FloatQuad::intersectsEllipse):
        * platform/graphics/FloatQuad.h:
        (FloatQuad):
        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::intersectsQuad):
        (WebCore):
        * platform/graphics/RoundedRect.h:
        (RoundedRect):
        * rendering/HitTestLocation.cpp:
        (WebCore::HitTestLocation::intersects):
        (WebCore):
        * rendering/HitTestLocation.h:
        (HitTestLocation):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):

2013-03-14  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash when removing aria-menu item from DOM
        https://bugs.webkit.org/show_bug.cgi?id=112396

        Reviewed by Tim Horton.

        Prevent nil access to items in the ARIA menu flow when deleting
        objects from the DOM.

        Test: accessibility/menu-item-crash.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::siblingWithAriaRole):
        (WebCore::AccessibilityNodeObject::menuButtonForMenu):

2013-03-14  Hayato Ito  <hayato@chromium.org>

        [Shadow]: left side of ::-webkit-distributed selector not working as expected
        https://bugs.webkit.org/show_bug.cgi?id=110825

        Reviewed by Dimitri Glazkov.

        Make functional pseudo distributed elements work even when a left side element has specifiers.

        Test: fast/dom/shadow/distributed-pseudo-element-specifiers-in-left-side.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::rewriteSpecifiersWithNamespaceIfNeeded):
        Make it call rewriteSpecifiersForShadowDistributed() if required.

        (WebCore::CSSParser::rewriteSpecifiersWithElementName):
        Updated so that it can generate a correct chain of
        CSSParserSelectors even when '::distributed()' is used with an
        element, which might be empty, with specifiers.

        e.g. When parsing a selector of 'content.content-class::-webkit-distributed(div)', the following happens:

        1. rewriteSpecifiersWithElementName(...) is called with:

           elementName is: "content"
           specifiers is: [.content-class] -> [::-webkit-distributed]

        2. Looking for a distributed pseudo element in the specifiers and
           found it at the end of tagHistory chain of the specifiers.

        3. The result of calling specifiers->prependTagSelector(tag) is:

           specifiers is: [content] -> [.content-class] -> [::-webkit-distributed]

        4. rewriteSpecifiersForShadowDistributed() is called with:

           specifiers is: [content] -> [.content-class] -> [::-webkit-distributed]
           distributedPseudoElementSelector is: [::-webkit-distributed]

        5. An argumentSelector of the distributedPseudoElementSelector is:

           argumentSelector is: [div]

        6. Remove the distributed pseudo element selector from the specifiers.

           specifiers is: [content] -> [.content-class]

           Note that one pseudo-element may appear per complex selector
           and the pseudo-element may appear only if the subject of the
           selector is the last compound selector in the selector.

        7. Append specifiers to the end of the argument selector with a relation of ShadowDistributed:

           argumentSelector is: [div] -(ShadowDistributed)-> [content] -> [.content-class]

        8. Returns the argument selector as a return value.

        (WebCore::CSSParser::rewriteSpecifiersForShadowDistributed): As explained.
        * css/CSSParserValues.cpp:
        (WebCore):
        (WebCore::CSSParserSelector::findDistributedPseudoElementSelector):
        * css/CSSParserValues.h:
        (CSSParserSelector):
        (WebCore::CSSParserSelector::clearTagHistory):

2013-03-14  Takashi Sakamoto  <tasak@google.com>

        Crash at CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement reported by fuzzer
        https://bugs.webkit.org/show_bug.cgi?id=112328

        Reviewed by Dimitri Glazkov.

        ensureDefaultStyleSheets should check whether page() is null or not.

        Test: fast/css/ensure-default-style-sheets-crash.xhtml

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):

2013-03-14  Brandon Jones  <bajones@google.com>

        Check to ensure MultisampleRenderbuffer creation succeeds
        https://bugs.webkit.org/show_bug.cgi?id=111780

        Reviewed by Kenneth Russell.

        On OSX systems using AMD graphics chips the allocation of large
        Multisample Renderbuffers in Chromium would fail without any indication
        of failure. Attempting to draw to the buffer resulted in garbage being
        rendered onscreen. This could be reproduced by opening a full-page
        WebGL app and pressing (Command + "-") several times. This patch adds an
        additional check during DrawingBuffer resize to verify that the resized
        buffer is valid. 

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::checkBufferIntegrity):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:
        (DrawingBuffer):

2013-03-14  Enrica Casucci  <enrica@apple.com>

        Character orientation should follow UTR50 specs for vertical layout.
        https://bugs.webkit.org/show_bug.cgi?id=112213
        <rdar://problem/12880943>

        Reviewed by Ryosuke Niwa.

        platform/mac/fast/text/vertical-no-sideways.html: Modified to cover samples
        of the additional character ranges that should not be rotated in vertical layout.
        Added pixel results.

        This patch modifies shouldIgnoreRotation to include all the characters that
        should not be rotated sideways in vertical layout according to the UTR50 draft 6
        specifications. It also fixes rotation for Emojii.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::shouldIgnoreRotation):
        (WebCore::isInRange): Added.
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances): Adds the proper transforms to ensure
        Emojii also are drawn correctly upright.

2013-03-14  Manuel Rego Casasnovas  <rego@igalia.com>

        Add selectTrailingWhitespaceEnabled setting to WebCore::Page
        https://bugs.webkit.org/show_bug.cgi?id=109404

        Reviewed by Tony Chang.

        Covered by
        editing/selection/doubleclick-inline-first-last-contenteditable.html.

        * page/Settings.cpp:
        (WebCore): Configure default value for smartInsertDeleteEnabled and
        selectTrailingWhitespaceEnabled seetings as they are different in
        Chromium port depending on the OS.
        * page/Settings.in: Add new setting.

2013-03-14  Robert Flack  <flackr@chromium.org>

        [chromium] Short scrollbar has empty track rect even when buttons have no size.
        https://bugs.webkit.org/show_bug.cgi?id=102580

        Reviewed by James Robinson.

        When computing the scrollbar track rect, don't assume the button's height is the track width.

        Test: platform/chromium/scrollbars/short-scrollbar.html
        Note however that this doesn't expose the bug on any tested platforms and mock scrollbars
        don't use ScrollbarThemeChromium.cpp. Manually running this test on linux chromiumos will
        show the now present scrollbar track and thumb.

        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::trackRect):

2013-03-14  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: Show syntax highlight for application/javascript in Resource Preview tab
        https://bugs.webkit.org/show_bug.cgi?id=112355

        Reviewed by Pavel Feldman.

        No new tests.

        Return canonical mimeType in requestContent method of
        NetworkRequest.js

        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.requestContent):

2013-03-14  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [EFL] Use CROSS_PLATFORM_CONTEXT_MENU
        https://bugs.webkit.org/show_bug.cgi?id=111877

        Reviewed by Caio Marcelo de Oliveira Filho.

        Now EFL uses the CROSS_PLATFORM_CONTEXT_MENUS
        USE flag. This flag provides a full cross-platform
        representation of a ContextMenu and a ContextMenuItem.
        The embedder can then decide how to show this and neither
        WebCore nor WebCore/platform need to know any platform
        specific code about the menus, even though they could.

        No new tests needed, no behavior changes.

        * platform/ContextMenu.h:
        (ContextMenu):
        * platform/ContextMenuItem.h:
        (WebCore):
        * platform/PlatformMenuDescription.h:
        (WebCore):
        * platform/efl/ContextMenuEfl.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::getContextMenuItems):
        (WebCore::ContextMenu::createPlatformContextMenuFromItems):
        (WebCore::ContextMenu::platformContextMenu):
        * platform/efl/ContextMenuItemEfl.cpp:
        (WebCore::ContextMenuItem::platformContextMenuItem):

2013-03-14  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] resolveContentBasedTrackSizingFunctions should iterate over the grid items not the grid tracks
        https://bugs.webkit.org/show_bug.cgi?id=112299

        Reviewed by Tony Chang.

        Our initial implementation would iterate over the grid tracks. This was equivalent as no items were spanning but
        once grid items spans, they start to contribute to several grid tracks differently. This change aligns our code
        with what the specification does.

        One upside of doing a grid items' iteration is that the complexity should be better in all cases as we don't do
        a full grid walking (which is potentially quadratic), only some extra grid tracks' iteration (which are linear).

        Refactoring, there should be no change in behavior.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        Moved the |availableLogicalSpace| update into resolveContentBasedTrackSizingFunctions. This simplifies and consolidate our handling.

        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        Updated the core loop to iterator over grid items and not grid tracks. This idea is that now resolveContentBasedTrackSizingFunctionsForItems
        uses a filtering function to only process the appropriate grid tracks.

        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Updated to filter the grid tracks here (this matches the |TracksForGrowth| spec logic that is merely a filtering function).

        * rendering/RenderGrid.h:
        Added a new typedef and updated resolveContentBasedTrackSizingFunctionsForItems to use it.

        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::hasMinOrMaxContentMinTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentMinTrackBreadth):
        (WebCore::GridTrackSize::hasMinOrMaxContentMaxTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentMaxTrackBreadth):
        Added the following filtering function, which matches the values from |TracksForGrowth| in the specification.

2013-03-14  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Gradient: don't use the default setPlatformGradientSpaceTransform()
        https://bugs.webkit.org/show_bug.cgi?id=112246

        Reviewed by Xan Lopez.

        BlackBerry has its own implementation.

        * platform/graphics/Gradient.cpp:
        (WebCore):

2013-03-14  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] simulateAudioInterruption needs to be guarded by ENABLE(VIDEO)"
        https://bugs.webkit.org/show_bug.cgi?id=112358

        Guarded with ENABLE(VIDEO) to prevent problems when it is not
        enabled.

        Reviewed by Philippe Normand.

2013-03-12  Florin Malita  <fmalita@chromium.org>

        Tighten up the type bounds for SVGPropertyInfo callback parameters
        https://bugs.webkit.org/show_bug.cgi?id=111786

        Reviewed by Philip Rogers.

        Update SVGPropertyInfo's callbacks to pass SVGElement* parameters instead of void*. This
        allows us to perform some ASSERT-based type checking before downcasting in implementors.

        To avoid adding virtual methods unused in release builds to the base class (and overrides
        in descendants), for subtypes lacking polymorphic type markers (isXXX()) the check is
        performed using hasTagName() instead.

        The patch is also removing the lookupOrCreateWrapperForAnimatedProperty() SVGPropertyInfo
        callback for SVGViewSpec properties, because

          a) it doesn't appear to be reachable (SVGViewSpec doesn't have a backing element and
          thus cannot have an associated animator)

          b) it interferes with the parameter specialization described above (SVGViewSpec does not
          inherit from SVGElement)

        No new tests, refactoring only.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::synchronizeRequiredFeatures):
        (WebCore::SVGElement::synchronizeRequiredExtensions):
        (WebCore::SVGElement::synchronizeSystemLanguage):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::synchronizeOrientType):
        (WebCore::SVGMarkerElement::lookupOrCreateOrientTypeWrapper):
        * svg/SVGMarkerElement.h:
        (SVGMarkerElement):
        (WebCore::toSVGMarkerElement):
        (WebCore):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::lookupOrCreateDWrapper):
        (WebCore::SVGPathElement::synchronizeD):
        * svg/SVGPathElement.h:
        (SVGPathElement):
        (WebCore::toSVGPathElement):
        (WebCore):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::synchronizePoints):
        (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
        * svg/SVGPolyElement.h:
        (SVGPolyElement):
        (WebCore::toSVGPolyElement):
        (WebCore):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::synchronizeTextLength):
        (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
        * svg/SVGTextContentElement.h:
        (SVGTextContentElement):
        (WebCore::toSVGTextContentElement):
        (WebCore):
        Change SVGPropertyInfo callback params to SVGElement* and replace static casts with
        conversion wrappers. Implement conversion wrappers where needed.

        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::viewBoxPropertyInfo):
        (WebCore::SVGViewSpec::preserveAspectRatioPropertyInfo):
        (WebCore::SVGViewSpec::transformPropertyInfo):
        (WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper):
        (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper):
        (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper):
        * svg/SVGViewSpec.h:
        (SVGViewSpec):
        Remove SVGPropertyInfo-based lookupOrCreate* callbacks and updated the methods' parameters
        to SVGViewSpec*. Remove now-unneeded casts.

        * svg/properties/SVGAnimatedPropertyMacros.h:
        (WebCore):
        * svg/properties/SVGPropertyInfo.h:
        (WebCore):
        (SVGPropertyInfo):
        Update callback declarations.

2013-03-14  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Move platform-specific typedefs to PlatformMenuDescription.h
        https://bugs.webkit.org/show_bug.cgi?id=111876

        Reviewed by Caio Marcelo de Oliveira Filho.

        Cross platform Context Menu platform-specific typedefs fit better
        in PlatformMenuDescription.h and should not be part of the classes
        ContextMenu and ContextMenuItem. We have also renamed them to
        PlatformContextMenu and PlatformContextMenuItem instead of NativeMenu
        and NativeMenuItem respectively.

        No new tests needed since no behavior has changed.

        * platform/ContextMenu.h:
        (ContextMenu):
        * platform/ContextMenuItem.h:
        (ContextMenuItem):
        * platform/PlatformMenuDescription.h:
        (WebCore):
        * platform/efl/ContextMenuEfl.cpp:
        (WebCore::ContextMenu::createPlatformContextMenuFromItems):
        (WebCore::ContextMenu::platformContextMenu):
        * platform/efl/ContextMenuItemEfl.cpp:
        (WebCore::ContextMenuItem::platformContextMenuItem):
        * platform/win/ContextMenuItemWin.cpp:
        (WebCore):
        (WebCore::ContextMenuItem::platformContextMenuItem):
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::createPlatformContextMenuFromItems):
        (WebCore::ContextMenu::platformContextMenu):

2013-03-11  Jer Noble  <jer.noble@apple.com>

        Crash in DumpRenderTree at com.apple.WebCore: WebCore::CaptionUserPreferences::captionPreferencesChanged + 185
        https://bugs.webkit.org/show_bug.cgi?id=112051

        Reviewed by Eric Carlson.

        No new tests; fixes a crash during media/video-controls-captions-trackmenu.html.

        Instead of relying on a registration system which can fail when an element's document does not have a page,
        Elements will register for captionPreferencesChanged() notifications directly with their owning Document.
        CaptionUserPreferences, in turn, will notify all Documents in its PageGroup, rather than only directly
        registered listeners.

        * dom/Document.cpp:
        (WebCore::Document::registerForCaptionPreferencesChangedCallbacks): Added. Notify the CaptionUserPreferences that someone
            is interested in captionPreferencesChanged notfications.
        (WebCore::Document::unregisterForCaptionPreferencesChangedCallbacks): Added.
        (WebCore::Document::captionPreferencesChanged): Added. Pass to all registered elements.
        * dom/Document.h:
        * dom/Element.h:
        (WebCore::Element::captionPreferencesChanged): Added. Empty; intended
            to be overridden by subclasses.
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage): Initialize m_needsCaptionPreferenceChanged member.
        (WebCore::CachedPage::restore): Call captionPreferencesChanged() if necessary.
        * history/CachedPage.h:
        (WebCore::CachedPage::markForCaptionPreferencesChanged): Set the m_needsCaptionPreferenceChanged member.
        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForCaptionPreferencesChanged): Pass to every CachedPage.
        * history/PageCache.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Register with the Document.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Unregister with same.
        (WebCore::HTMLMediaElement::attach): Remove previous registration call.
        * html/HTMLMediaElement.h:
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::captionPreferencesChanged): Pass to the
            PageGroup.
        * page/CaptionUserPreferences.h:
        (WebCore::CaptionUserPreferences::setInterestedInCaptionPreferenceChanges):
            Empty; intended to be overridden by subclasses.
        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::setInterestedInCaptionPreferenceChanges):
            Renamed from registerForPreferencesChangedCallbacks().
        (WebCore::CaptionUserPreferencesMac::captionPreferencesChanged):
            Replace call to havePreferenceChangeListeners() with m_listeningForPreferenceChanges.
        * page/Page.cpp:
        (WebCore::Page::captionPreferencesChanged):
            Pass to every contained Document.
        * page/Page.h:
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::captionPreferencesChanged): Pass to the PageGroup.
        * page/CaptionUserPreferences.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferencesChanged): Pass to every page, as well as pages in the PageCache.
        * page/PageGroup.h:

2013-03-14  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Histogram leveldb open errors.
        https://bugs.webkit.org/show_bug.cgi?id=112307

        Reviewed by Tony Chang.

        No new tests, I don't know if there's a good way to test histograms.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::open):

2013-03-14  Robert Hogan  <robert@webkit.org>

        REGRESSION(r145305) Performance: 1.3% mac-release-10.6-webkit-latest/intl2/times/t change after rev 145300
        https://bugs.webkit.org/show_bug.cgi?id=112125

        Reviewed by Julien Chaffraix.

        When detecting cases where a loaded image may need to move up into the padding created by the row's baseline
        we don't need to do anything if the row doesn't have a baseline yet.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::layout):

2013-03-14  Brady Eidson  <beidson@apple.com>

        Add a mode to ResourceLoader that takes SharedBuffers instead of raw pointers and lengths.
        <rdar://problem/13416953> and https://bugs.webkit.org/show_bug.cgi?id=112310

        Reviewed by Andy Estes.

        No new tests (No independently testable change in behavior).

        Many of the tested platforms deliver data buffers to their ResourceHandles from objects
        that encapsulate a data buffer such as NSData (Mac), CFDataRef (CF), or QByteArray (qt).

        If those platforms also augmented SharedBuffer to wrap their native object (which Mac/CF do)
        and there existed ResourceLoader callbacks to take that SharedBuffer instead of char* + length,
        then many resource loads could avoid a useless copy.

        At least on Mac, there are some extremely important behind-the-scenes optimizations for NS/CFData
        that will be a more important win than simply avoiding a copy.

        This patch adds that SharedBuffer-based callback with the hope that all platforms could find a 
        way to use a buffer-encapsulating object going forward, and we could therefore deprecate the
        char* + length version of didReceiveData.

        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveBuffer): Add a didReceiveBuffer callback that takes 
          a SharedBuffer object. The default implementation passes raw bytes + length to didReceiveData.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::addDataOrBuffer): Replacing addData(), optionally adding the data from
          either a data+length or SharedBuffer
        (WebCore::ResourceLoader::didReceiveData): Pipe to didReceiveDataOrBuffer.
        (WebCore::ResourceLoader::didReceiveBuffer): Pipe to didReceiveDataOrBuffer.
        (WebCore::ResourceLoader::didReceiveDataOrBuffer): Single chokepoint for receiving data.
        * loader/ResourceLoader.h: Add OVERRIDE to all of the ResourceHandleClient methods to help
          catch future mistakes. Remove "virtual" from methods that didn't need it. Make "addData" into
          "addDataOrBuffer" and make it private.

        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveData): Pipe to didReceiveDataOrBuffer.
        (WebCore::NetscapePlugInStreamLoader::didReceiveBuffer): Pipe to didReceiveDataOrBuffer.
        (WebCore::NetscapePlugInStreamLoader::didReceiveDataOrBuffer): Single chokepoint for receiving data.
        * loader/NetscapePlugInStreamLoader.h:

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData): Pipe to didReceiveDataOrBuffer.
        (WebCore::SubresourceLoader::didReceiveBuffer): Pipe to didReceiveDataOrBuffer.
        (WebCore::SubresourceLoader::didReceiveDataOrBuffer): Single chokepoint for receiving data. Also,
          rely on ResourceLoader's base implementation for notifying the ResourceLoadNotifier.
        * loader/SubresourceLoader.h:

        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::append): Add a mode that appends a SharedBuffer.
        * loader/ResourceBuffer.h:

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::maybeTransferPlatformData): Fix a bug where appending data to a CFData-backed
          SharedBuffer would re-enter maybeTransferPlatformData and blow out the stack.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]): Send a wrapped NSData
          to didReceiveBuffer() instead of sending its char* and length to didReceiveData()

2013-03-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: nuke bottom up CPU profile calculation on backend
        https://bugs.webkit.org/show_bug.cgi?id=112351

        Reviewed by Pavel Feldman.

        Removed code that builds bottom-up CPU profile on the inspector
        backend. Bottom-up view is already built on the front-end from
        the top-down profile data.

        * bindings/js/ScriptProfile.cpp:
        * bindings/js/ScriptProfile.h:
        (ScriptProfile):
        * bindings/v8/ScriptProfile.cpp:
        (WebCore::ScriptProfile::buildInspectorObjectForHead):
        * bindings/v8/ScriptProfile.h:
        (ScriptProfile):
        * inspector/Inspector.json:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getCPUProfile):

2013-03-14  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112296

        Reviewed by Kentaro Hara.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * accessibility/AXObjectCache.cpp:
        (WebCore::nodeHasRole):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasAttribute):
        (WebCore::AccessibilityObject::getAttribute):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::helpText):
        (WebCore::AccessibilityRenderObject::checkboxOrRadioRect):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::accessKey):
        (WebCore::AccessibilityRenderObject::setElementAttributeValue):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::correspondingLabelForControlElement):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        (WebCore::AccessibilityRenderObject::setAccessibleName):
        (WebCore::AccessibilityRenderObject::stringRoleForMSAA):
        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::createWrapper):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::setDragImage):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::setDragImageMethodCustom):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::wrap):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::updateFocusAppearanceTimerFired):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Element.cpp:
        (WebCore::Element::offsetParent):
        (WebCore::Element::boundsInRootViewSpace):
        (WebCore::Element::getBoundingClientRect):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::computeInheritedLanguage):
        (WebCore::Element::lastElementChild):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::namedItem):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::normalize):
        (WebCore::Node::rootEditableElement):
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::ancestorElement):
        (WebCore::appendAttributeDesc):
        * dom/Position.cpp:
        (WebCore::Position::element):
        * dom/Range.cpp:
        (WebCore::Range::getBorderAndTextQuads):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::queryFirst):
        (WebCore::SelectorDataList::execute):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::recalcStyle):
        * dom/StaticHashSetNodeList.cpp:
        (WebCore::StaticHashSetNodeList::namedItem):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToBodyElement):
        * editing/FrameSelection.cpp:
        (WebCore::removingNodeRemovesPosition):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::entityMaskForText):
        (WebCore::MarkupAccumulator::appendStartMarkup):
        (WebCore::MarkupAccumulator::appendEndMarkup):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::haveSameTagName):
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::doApply):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        * editing/htmlediting.cpp:
        (WebCore::unsplittableElementForPosition):
        (WebCore::enclosingTableCell):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::wrapWithNode):
        (WebCore::createMarkupInternal):
        (WebCore::createFragmentFromMarkupWithContext):
        (WebCore::isPlainTextMarkup):
        (WebCore::createFragmentFromText):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::insertAdjacentElement):
        (WebCore::contextElementForInsertion):
        * html/HTMLFormControlElement.cpp:
        (WebCore::focusPostAttach):
        (WebCore::updateFromElementCallback):
        * html/HTMLFormElement.cpp:
        (WebCore::submitElementFromEvent):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateSnapshotInfo):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addRange):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::closestFormAncestor):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::toParentMediaElement):
        * html/shadow/TextFieldDecorationElement.h:
        (WebCore::toTextFieldDecorationElement):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::createDigest):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::inlineStyleSheetText):
        * mathml/MathMLElement.h:
        (WebCore::toMathMLElement):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        (WebCore::DragController::startDrag):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateWidget):
        * page/SpatialNavigation.cpp:
        (WebCore::rectToAbsoluteCoordinates):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintMediaFullscreenButton):
        (WebCore::RenderThemeEfl::paintMediaMuteButton):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGUseElement.cpp:
        (WebCore::isDisallowedElement):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        * xml/XPathStep.cpp:
        (WebCore::XPath::nodeMatchesBasicTest):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::parseEndElement):

2013-03-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: keep deprecated function stubs in InspectorFrontendHost.
        https://bugs.webkit.org/show_bug.cgi?id=112347

        Reviewed by Vsevolod Vlasov.

        In order to open older front-ends in newer hosts, we need to keep stubs
        for deprecated functions. Longer term, we need to wrap all calls to InspectorFrontendHost in the front-end.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::canInspectWorkers):
        (WebCore):
        (WebCore::InspectorFrontendHost::hiddenPanels):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:

2013-03-14  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Fixed styles pane visibility when docked to right.
        https://bugs.webkit.org/show_bug.cgi?id=112348

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._splitVertically):
        * inspector/front-end/SidebarPane.js:
        (WebInspector.SidebarPane.prototype.setExpandCallback):
        (WebInspector.SidebarPaneTitle):
        (WebInspector.SidebarTabbedPane.prototype.addPane):

2013-03-14  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] GraphicsContext3D: implement ImageExtractor::extractImage()
        https://bugs.webkit.org/show_bug.cgi?id=112242

        Reviewed by Rob Buis.

        In r136282 GraphicsContext3D::getImageData() was refactored in a
        new class called ImageExtractor.

        This patch implements the necessary changes for the BlackBerry
        port, which is still using the old API.

        * platform/graphics/GraphicsContext3D.h:
        (ImageExtractor):
        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::~ImageExtractor):
        (WebCore):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

2013-03-14  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Stopping playback of html5 media when receiving a higher priority audio event needs implementation
        https://bugs.webkit.org/show_bug.cgi?id=91611

        React to REQUEST_STATE GStreamer message to stop the pipeline when
        a higher priority stream is played. When this happens, states are
        updated accordingly.

        A method was added in the MediaPlayer class and internals to allow
        the the test runner to simulate an audio interruption.

        Reviewed by Philippe Normand.

        Test: media/media-higher-prio-audio-stream.html

        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore):
        (MediaPlayer):
        (WebCore::MediaPlayer::simulateAudioInterruption): New method
        delegating an audio interruption to the private backend to
        simulate the use-case where an external application needs
        exclusive access to the audio device.
        * platform/graphics/MediaPlayerPrivate.h:
        (MediaPlayerPrivateInterface):
        (WebCore::MediaPlayerPrivateInterface::simulateAudioInterruption):
        Added default empty method in the common private header.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore):
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink):
        (WebCore::setAudioStreamPropertiesCallback): Hooked to child-added
        signal on the audio sink, delegates on setAudioStreamProperties.
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties):
        Sets the audio stream properties.
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        Initializes the new attribute.
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        Disconnects autoaudiosink signal.
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        Changed logging.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Reacting to
        the REQUEST_STATE message.
        (WebCore::MediaPlayerPrivateGStreamer::simulateAudioInterruption):
        Added. Injects the REQUEST_STATE message to the pipeline.
        (WebCore::MediaPlayerPrivateGStreamer::updateStates): Updating the
        playback state if REQUEST_STATE.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer): Added new method and attribute.
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/Internals.cpp:
        (WebCore):
        (WebCore::Internals::simulateAudioInterruption): Added to call the
        method to stop the element because of a higher prio stream at the
        tests.

2013-03-14  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Add support for tiled shadow blur
        https://bugs.webkit.org/show_bug.cgi?id=90082

        Reviewed by Noam Rosenthal.

        Use the optimized ShadowBlur::drawRectShadow as long as we do not
        have a rotating transform. Such a transform would go through the
        slow path in ShadowBlur anyway, and would end up using a transformed
        TransparencyLayer with an alphaMap which causes scaling artifacts
        for us.

        Tested by fast/canvas/canvas-scale-fillRect-shadow.html
        and fast/canvas/canvas-transforms-fillRect-shadow.html

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
            Handle scaling transforms when shadows ignore transforms.
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
            Ditto.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRect):

2013-03-12  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: do not aggregate non-main thread timeline events, handle them in a generic fashion
        https://bugs.webkit.org/show_bug.cgi?id=112172

        Reviewed by Vsevolod Vlasov.

        - build nested event trees for non-main thread events similar to how it's done on the main thread;
        - drop aggregation logic for Rasterize events;
        - extract time conversion logic so that it may be reused in TimelineTraceEventProcessor.

        * English.lproj/localizedStrings.js: drive-by: drop duplicate line.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::TimelineTimeConverter::reset):
        (WebCore):
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::sendEvent):
        (WebCore::InspectorTimelineAgent::timestamp):
        * inspector/InspectorTimelineAgent.h:
        (TimelineTimeConverter):
        (WebCore::TimelineTimeConverter::TimelineTimeConverter):
        (WebCore::TimelineTimeConverter::fromMonotonicallyIncreasingTime):
        (WebCore):
        (InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::timeConverter):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createBackgroundRecord):
        (WebCore):
        * inspector/TimelineRecordFactory.h:
        (TimelineRecordFactory):
        * inspector/TimelineTraceEventProcessor.cpp:
        (WebCore::TimelineRecordStack::TimelineRecordStack):
        (WebCore):
        (WebCore::TimelineRecordStack::addScopedRecord):
        (WebCore::TimelineRecordStack::closeScopedRecord):
        (WebCore::TimelineRecordStack::addInstantRecord):
        (WebCore::TimelineRecordStack::isOpenRecordOfType):
        (WebCore::TimelineRecordStack::send):
        (WebCore::TimelineTraceEventProcessor::TimelineTraceEventProcessor):
        (WebCore::TimelineTraceEventProcessor::onBeginFrame):
        (WebCore::TimelineTraceEventProcessor::onRasterTaskBegin):
        (WebCore::TimelineTraceEventProcessor::onRasterTaskEnd):
        (WebCore::TimelineTraceEventProcessor::createRecord):
        * inspector/TimelineTraceEventProcessor.h:
        (TimelineRecordStack):
        (WebCore::TimelineRecordStack::Entry::Entry):
        (Entry):
        (WebCore::TimelineRecordStack::TimelineRecordStack):
        (WebCore):
        (WebCore::TimelineTraceEventProcessor::TimelineThreadState::TimelineThreadState):
        (TimelineThreadState):
        (TimelineTraceEventProcessor):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::TraceEvent):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::isNull):
        (WebCore::TimelineTraceEventProcessor::threadState):

2013-03-14  Xan Lopez  <xlopez@igalia.com>

        [GTK] Wrong ASSERT in AudioDestinationGstreamer::stop
        https://bugs.webkit.org/show_bug.cgi?id=112344

        Reviewed by Philippe Normand.

        Correct erroneous ASSERT, we want both member variables to exist.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::stop):

2013-03-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Support scroll and zoom with help of mouse wheel.
        https://bugs.webkit.org/show_bug.cgi?id=112337

        Reviewed by Yury Semikhatsky.

        New member variable _xOffset were introduced.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype._onMouseMove):
        (WebInspector.FlameChart.prototype._adjustXOffset):
        (WebInspector.FlameChart.prototype._adjustXScale):
        (WebInspector.FlameChart.prototype._onMouseWheel):
        (WebInspector.FlameChart.prototype._coordinatesToNodeIndex):
        (WebInspector.FlameChart.prototype.onResize):
        (WebInspector.FlameChart.prototype.draw):
        (WebInspector.FlameChart.prototype._scheduleUpdate):
        (WebInspector.FlameChart.prototype.update):

2013-03-14  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Synchronize layers only if the layer has been changed.
        https://bugs.webkit.org/show_bug.cgi?id=112095

        Reviewed by Allan Sandfeld Jensen.

        A regression was introduced in r144787, causing an infinite IPC commitState/renderNextFrame 
        loop.
        This patch fixes this by making sure we only commit layer states that have actual pending 
        changes. 

        No new tests, this is an optimization.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (CoordinatedGraphicsLayerState):
        (WebCore::CoordinatedGraphicsLayerState::hasPendingChanges):

2013-03-14  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Improve the handling of mock geolocation, device orientation and motion clients

        Reviewed by Tor Arne Vestbø.

        The mock versions of these web facing features should be instantiated when
        running in DumpRenderTree only. In order for them to work, no extra Qt modules
        such as QtLocation are actually needed.

        This patch decouples enabling device orientation/motion and geolocation from
        the underlying Qt modules and makes them available in developer builds
        (!production_build) and backed by mock backends when running in drt.

        So if the Qt 5 modules are available, they'll be used (unless drtRun). For
        developers the web facing features are always enabled (although requests will
        time out) and the mock backends are enabled inside DRT, allowing for the layout
        tests to run with less dependencies.

        In addition this also enables the mock device motion client, which was
        previously never instantiated.

        * Target.pri:
        * WebCore.pri:

2013-03-14  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [TexMap] Painting into area of composited tile not cleared
        https://bugs.webkit.org/show_bug.cgi?id=112268

        Reviewed by Kenneth Rohde Christiansen.

        Clip painting to the area that has been cleared, so we 
        do not accidentally overpaint other areas.

        Can be observed in ManualTests/scrollbars/scrollbars-in-composited-layers.html.

        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::updateContents):

2013-03-14  Marja Hölttä  <marja@chromium.org>

        [V8] Store main world and non-main world templates separately.
        https://bugs.webkit.org/show_bug.cgi?id=111724

        Reviewed by Jochen Eisinger.

        This is needed for generating specialized bindings for the main
        world (bug 110874).

        No new tests (updated existing bindings tests).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateNormalAttrSetter):
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):
        (GenerateImplementation):
        (JSValueToNative):
        (CreateCustomSignature):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooMethod):
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionMethod):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::dispatchEventMethod):
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Method):
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetTemplate):
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::testObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrSetter):
        (WebCore::TestObjV8Internal::mutablePointAttrSetter):
        (WebCore::TestObjV8Internal::immutablePointAttrSetter):
        (WebCore::TestObjV8Internal::voidMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::longMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::objMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsMethod):
        (WebCore::TestObjV8Internal::overloadedMethod1Method):
        (WebCore::TestObjV8Internal::overloadedMethod2Method):
        (WebCore::TestObjV8Internal::overloadedMethod8Method):
        (WebCore::TestObjV8Internal::overloadedMethodMethod):
        (WebCore::TestObjV8Internal::convert1Method):
        (WebCore::TestObjV8Internal::convert2Method):
        (WebCore::TestObjV8Internal::convert4Method):
        (WebCore::TestObjV8Internal::convert5Method):
        (WebCore::TestObjV8Internal::variadicNodeMethodMethod):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::TestOverloadedConstructorsV8Internal::constructor1):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor2):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor3):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::funcMethod):
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (V8TestTypedefs):
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitNodeWrappers):
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/V8AdaptorFunction.cpp:
        (WebCore::V8AdaptorFunction::getTemplate):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toDOMStringList):
        (WebCore::toXPathNSResolver):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::toRefPtrNativeArray):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        (WebCore::V8PerIsolateData::hasPrivateTemplate):
        (WebCore::V8PerIsolateData::privateTemplate):
        (WebCore::V8PerIsolateData::rawTemplate):
        (WebCore::V8PerIsolateData::hasInstance):
        * bindings/v8/V8PerIsolateData.h:
        (WebCore::V8PerIsolateData::rawTemplateMap):
        (V8PerIsolateData):
        (WebCore::V8PerIsolateData::templateMap):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::extractTransferables):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8AudioBufferSourceNodeCustom.cpp:
        (WebCore::V8AudioBufferSourceNode::bufferAttrSetterCustom):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCustom):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toCanvasStyle):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::setDragImageMethodCustom):
        * bindings/v8/custom/V8CryptoCustom.cpp:
        (WebCore::V8Crypto::getRandomValuesMethodCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCustom):
        (WebCore::V8DOMFormData::appendMethodCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCustom):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateMethodCustom):
        * bindings/v8/custom/V8HTMLMediaElementCustom.cpp:
        (WebCore::V8HTMLMediaElement::controllerAttrSetterCustom):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::addMethodCustom):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::isHTMLAllCollectionMethodCustom):
        (WebCore::V8InjectedScriptHost::typeMethodCustom):
        (WebCore::V8InjectedScriptHost::getEventListenersMethodCustom):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::insertBeforeMethodCustom):
        (WebCore::V8Node::replaceChildMethodCustom):
        (WebCore::V8Node::removeChildMethodCustom):
        (WebCore::V8Node::appendChildMethodCustom):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::opaqueRootForGC):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toWebGLUniformLocation):
        (WebCore::V8WebGLRenderingContext::getAttachedShadersMethodCustom):
        (WebCore::V8WebGLRenderingContext::getProgramParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getShaderParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getUniformMethodCustom):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::isDocumentType):
        (WebCore::V8XMLHttpRequest::sendMethodCustom):

2013-03-14  Mike West  <mkwst@chromium.org>

        Explicitly send only one report via XSSAuditorDelegate.
        https://bugs.webkit.org/show_bug.cgi?id=111964

        Reviewed by Adam Barth.

        This patch pulls the XSSAuditor report generation out into a separate
        function in XSSAuditorDelegate::generateViolationReport, and moves the
        call to that function into the "have we already notified folks about
        violations on this page?" block. This both clarifies the flow in
        XSSAuditorDelegate::didBlockScript, and ensures that only one violation
        report will be sent per page, which regressed in r145695.

        Existing tests verify that reports are generated and sent correctly.

        We have no tests for the latter condition: the XSSAuditor tests
        currently verify that a report showed up, but they can't verify that
        no report appeared without sitting around for a few more than a few
        seconds on every run.

        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::generateViolationReport):
            Pull the report generation logic out to this new function.
        (WebCore::XSSAuditorDelegate::didBlockScript):
            Move the report generation call into the block that ensures it only
            executes for the first violation.

2013-03-14  Sergio Villar Senin  <svillar@igalia.com>

        Empty list items after drag&drop in contentEditable divs
        https://bugs.webkit.org/show_bug.cgi?id=110610

        Reviewed by Ryosuke Niwa.

        Perform a cleanup after moving operations. This will mainly prune
        extra placeholders left by the editing algorithms. Also do not
        leave empty <li> when moving them around inside a list element.

        Tests: editing/pasteboard/cleanup-on-move.html
               editing/pasteboard/drag-list-item.html

        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply): perform
        cleanupAfterDeletion().
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems): do not
        insert an empty list item.
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2013-03-14  Eric Seidel  <eric@webkit.org>

        Threaded HTML Parser should limit speculation to avoid using too much memory
        https://bugs.webkit.org/show_bug.cgi?id=112069

        Reviewed by Adam Barth.

        This is a speculative fix for memory issues seen in:
        https://code.google.com/p/chromium/issues/detail?id=180819

        This also fixed https://bugs.webkit.org/show_bug.cgi?id=110546
        as a side-effect of simplifying the m_currentChunk handling.

        We now tell the background html parser every time we start
        a chunk on the main thread (instead of end), which greatly
        simplified the checkpoint cleanup code from:
        https://trac.webkit.org/changeset/145277

        The cost for this is now we have more messages going to the
        background thread (and postTask acquires a lock to write to the
        message queue).  Chromium has more advanced (lock-less) primatives
        for message posting, which we'll hopefully add to WebKit in
        furture patches.

        The outstanding chunks limit has not been tuned.  But it makes sense that
        we should not keeping infinite speculative tokens around for
        large documents with slow-to-load scripts.

        * html/parser/BackgroundHTMLInputStream.cpp:
        (WebCore::BackgroundHTMLInputStream::BackgroundHTMLInputStream):
        (WebCore::BackgroundHTMLInputStream::invalidateCheckpointsBefore):
        (WebCore):
        (WebCore::BackgroundHTMLInputStream::rewindTo):
        * html/parser/BackgroundHTMLInputStream.h:
        (BackgroundHTMLInputStream):
        (WebCore::BackgroundHTMLInputStream::outstandingCheckpointCount):
        (Checkpoint):
        (WebCore::BackgroundHTMLInputStream::Checkpoint::isNull):
        (WebCore::BackgroundHTMLInputStream::Checkpoint::clear):
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore):
        (WebCore::BackgroundHTMLParser::startedChunkWithCheckpoint):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::validateSpeculations):
        (WebCore::HTMLDocumentParser::discardSpeculationsAndResumeFrom):
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):

2013-03-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Minor changes for the popover.
        https://bugs.webkit.org/show_bug.cgi?id=112331

        Reviewed by Yury Semikhatsky.

        popover timeout needs to be decreased a bit.
        hidePopover call in onMouseMove doesn't necessary.
        We have to keep anchor element unmodified if the hovered item didn't changed.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype._onMouseMove):

2013-03-14  Jonathan Liu  <net147@gmail.com>

        Fix detection of Intel Mac OS X platform on Intel Mac 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=112312

        Reviewed by Simon Hausmann.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::platformVersionForUAString):

2013-03-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Rewrite drawing procedure for better performance.
        https://bugs.webkit.org/show_bug.cgi?id=112264

        Reviewed by Yury Semikhatsky.

        I traverses the profile tree in calculateTimelineData and calculates all the sizes and colors.
        Later in draw code we lineary pass the array and draw items.
        Also we could easily swap to another format of the profile.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype._nodeCount):
        (WebInspector.FlameChart.prototype._calculateTimelineData.appendReversedArray):
        (WebInspector.FlameChart.prototype._calculateTimelineData):
        (WebInspector.FlameChart.prototype._getPopoverAnchor):
        (WebInspector.FlameChart.prototype._showPopover):
        (WebInspector.FlameChart.prototype._hidePopover):
        (WebInspector.FlameChart.prototype._onClick):
        (WebInspector.FlameChart.prototype._onMouseMove):
        (WebInspector.FlameChart.prototype._coordinatesToNodeIndex):
        (WebInspector.FlameChart.prototype.onResize):
        (WebInspector.FlameChart.prototype.draw):

2013-03-14  Alice Liu  <alice.liu@apple.com>

        Add to HistoryItem a way to know if its underlying CachedPage has expired.
        https://bugs.webkit.org/show_bug.cgi?id=110652

        Reviewed by Brady Eidson.

        * WebCore.exp.in: Added WebCore::HistoryItem::isInPageCache and hasCachedPageExpired.
        * history/CachedPage.cpp: Add a data member, m_expirationTime, and a function, hasExpired().
        * history/CachedPage.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::hasCachedPageExpired): Added. returns m_cachedPage's expiration state.
        * history/HistoryItem.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::get):  Address the fixme about not using WebKitBackForwardCacheExpirationIntervalKey. 
        * page/Settings.in: Add backForwardCacheExpirationInterval to the automatically generated setters for Settings.

2013-03-13  Ryosuke Niwa  <rniwa@webkit.org>

        Cannot select a canvas element at the beginning or the end of a document
        https://bugs.webkit.org/show_bug.cgi?id=112319

        Reviewed by Eric Seidel.

        The bug was caused by the editing code treating canvas element as if an empty inline element.
        Treat it as an "atomic" element for the purpose of determining whether selection can have
        an end point in it or not.

        Test: editing/pasteboard/copy-paste-content-starting-and-ending-canvas.html

        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::canContainRangeEndPoint): Added.

2013-03-13  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Implement FontLoader interface
        https://bugs.webkit.org/show_bug.cgi?id=98395

        Reviewed by Eric Seidel.

        This patch implements the FontLoader interface defined in CSS Font
        Load Events Module Level 3.[1] It adds fontloader attribute to
        Document, and adds two interfaces, FontLoader and
        CSSFontFaceLoadEvent to WebCore.

        [1]: http://dev.w3.org/csswg/css-font-load-events-3/

        This feature is guarded by FONT_LOAD_EVENTS compiler flag and
        RuntimeEnabledFeatures::fontLoadEventsEnabled() runtime flag.

        Tests: fast/css/fontloader-download-error.html
               fast/css/fontloader-events.html
               fast/css/fontloader-loadingdone.html
               fast/css/fontloader-multiple-faces-download-error.html
               fast/css/fontloader-multiple-faces.html
               fast/css/fontloader-multiple-families.html
               http/tests/webfont/fontloader-loading-attribute.html

        * CMakeLists.txt: Adding FontLoader/CSSFontFaceLoadEvent files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue): Add convertValue() for CSSFontFaceRule, DOMError, and VoidCallback.
        * bindings/js/JSDictionary.h: Ditto.
        * bindings/v8/Dictionary.cpp: Add get() for CSSFontFaceRule, DOMError, and VoidCallback.
        (WebCore::Dictionary::get):
        * bindings/v8/Dictionary.h: Ditto.
        (Dictionary):
        * css/CSSFontFace.cpp: Notifies FontLoader as load progresses.
        (WebCore::CSSFontFace::fontLoaded):
        (WebCore::CSSFontFace::getFontData):
        (WebCore::CSSFontFace::notifyFontLoader):
        (WebCore::CSSFontFace::notifyLoadingDone):
        * css/CSSFontFace.h: Add two member variables. m_rule stores CSSFontFaceRule for the fontface. m_loadState holds current state of the fontface in terms of FontLoader.
        (WebCore::CSSFontFace::create): Takes additional parameter of type CSSFontFaceRule.
        (WebCore::CSSFontFace::loadState):
        (WebCore::CSSFontFace::CSSFontFace):
        * css/CSSFontFaceLoadEvent.cpp: Added.
        (WebCore::CSSFontFaceLoadEvent::CSSFontFaceLoadEvent):
        (WebCore::CSSFontFaceLoadEvent::~CSSFontFaceLoadEvent):
        (WebCore::CSSFontFaceLoadEvent::interfaceName):
        * css/CSSFontFaceLoadEvent.h: Added.
        (CSSFontFaceLoadEventInit):
        (CSSFontFaceLoadEvent):
        (WebCore::CSSFontFaceLoadEvent::create):
        (WebCore::CSSFontFaceLoadEvent::createForFontFaceRule):
        (WebCore::CSSFontFaceLoadEvent::createForError):
        (WebCore::CSSFontFaceLoadEvent::fontface):
        (WebCore::CSSFontFaceLoadEvent::error):
        * css/CSSFontFaceLoadEvent.idl: Added.
        * css/CSSFontFaceRule.idl: Add JSGenerateToJSObject and JSGenerateToNativeObject as JSC binding needs them.
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::isDecodeError): Added.
        (WebCore::CSSFontFaceSource::ensureFontData): Added.
        * css/CSSFontFaceSource.h:
        (CSSFontFaceSource):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Pass a CSSFontFaceRule to CSSFontFace::create().
        (WebCore::CSSFontSelector::getFontData): Moved logic for creating a CSSSegmentedFontFace to a helper function getFontFace().
        (WebCore::CSSFontSelector::getFontFace): Added.
        * css/CSSFontSelector.h:
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontLoaded): Fires callbacks when load is completed.
        (WebCore::CSSSegmentedFontFace::isLoading): Returns true if any fonts are still loading.
        (WebCore::CSSSegmentedFontFace::checkFont): Returns true if all fonts are loaded.
        (WebCore::CSSSegmentedFontFace::loadFont): Starts load by calling getFontData().
        * css/CSSSegmentedFontFace.h:
        (CSSSegmentedFontFace): Declares new functions and a vector to store callbacks.
        (LoadFontCallback):
        (WebCore::CSSSegmentedFontFace::LoadFontCallback::~LoadFontCallback):
        * css/FontLoader.cpp: Added.
        (LoadFontCallback): Holds callback functions of FontLoader.loadFont().
        (WebCore::LoadFontCallback::create):
        (WebCore::LoadFontCallback::createFromParams):
        (WebCore::LoadFontCallback::LoadFontCallback):
        (WebCore::LoadFontCallback::notifyLoaded):
        (WebCore::LoadFontCallback::notifyError):
        (WebCore::FontLoader::FontLoader):
        (WebCore::FontLoader::~FontLoader):
        (WebCore::FontLoader::eventTargetData):
        (WebCore::FontLoader::ensureEventTargetData):
        (WebCore::FontLoader::interfaceName):
        (WebCore::FontLoader::scriptExecutionContext):
        (WebCore::FontLoader::didLayout): Fires pending events and callbacks. This is called when layout have completed.
        (WebCore::FontLoader::scheduleEvent): Defers event dispatching until layout completes.
        (WebCore::FontLoader::firePendingEvents): Dispatches pending events.
        (WebCore::FontLoader::beginFontLoading): Schedules loading/loadstart events. This is called from CSSFontFace.
        (WebCore::FontLoader::fontLoaded): Schedules load/loadingdone events. This is called from CSSFontFace.
        (WebCore::FontLoader::loadError): Schedules error/loadingdone events. This is called from CSSFontFace.
        (WebCore::FontLoader::notifyWhenFontsReady): Implements fontloader.notifyWhenFontsReady().
        (WebCore::FontLoader::loadingDone): Fires callbacks of notifyWhenFontsReady.
        (WebCore::FontLoader::loadFont): Implements fontloader.loadFont().
        (WebCore::FontLoader::checkFont): Implements fontloader.checkFont().
        (WebCore::FontLoader::resolveFontStyle): Parses the given font parameter using the syntax of CSS 'font' property and creates Font object. The logic is taken from CanvasRenderingContext2D::setFont().
        * css/FontLoader.h: Added.
        (FontLoader):
        (WebCore::FontLoader::create):
        (WebCore::FontLoader::loading):
        (WebCore::FontLoader::document):
        (WebCore::FontLoader::refEventTarget):
        (WebCore::FontLoader::derefEventTarget):
        * css/FontLoader.idl: Added.
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::fontloader): Added.
        * dom/Document.h:
        (Document): Add m_fontloader and fontloader().
        * dom/Document.idl: Add fontloader attribute.
        * dom/EventNames.h: Add loading and loadingdone events.
        * dom/EventNames.in: Add CSSFontFaceLoadEvent.
        * dom/EventTargetFactory.in: Add FontLoader.
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks): Calls FontLoader::didLayout().

2013-03-13  Antti Koivisto  <antti@apple.com>

        Compute image background size when testing for background visibility
        https://bugs.webkit.org/show_bug.cgi?id=112313

        Reviewed by Simon Fraser.

        We can catch more cases where background is fully obscured.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackground):
                
            Use early returns.
    
        (WebCore::RenderBox::backgroundPaintedExtent):
        
            Compute the bounds for image backgrounds.

        (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect):
        (WebCore::RenderBox::backgroundIsKnownToBeObscured):
        
            Rename to make clear that the answers are certain to one direction only.

        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::boxShadowShouldBeAppliedToBackground):
        (WebCore::RenderImage::backgroundIsKnownToBeObscured):
        * rendering/RenderImage.h:

2013-03-13  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [css3-text] Add support for text-decoration-color
        https://bugs.webkit.org/show_bug.cgi?id=91638

        Reviewed by Julien Chaffraix.

        This patch implements the CSS3's 'text-decoration-color' property, with
        '-webkit' vendor prefix.

        More info about "text-decoration-color" property can be found here:
        http://dev.w3.org/csswg/css-text-decor-3/#text-decoration-color-property

        Mozilla implementation (using -moz prefix) is described here:
        https://developer.mozilla.org/en/CSS/text-decoration-color

        Tests: fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-color.html
               fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-color.html
               fast/css3-text/css3-text-decoration/text-decoration-color.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::isColorPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        Added parsing checks for '-webkit-text-decoration-color' property.

        * css/CSSPropertyNames.in:
        Added '-webkit-text-decoration-color' property name.

        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        Set property handler for '-webkit-text-decoration-color'.

        * css/StyleResolver.cpp:
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        Added switch case checks for text-decoration-color property on visited
        link checks and property appliance.

        * rendering/RenderObject.cpp:
        (WebCore::decorationColor):
        The newly added property needs to checked here when selecting the text
        decoration color.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::colorIncludingFallback):
        (WebCore::RenderStyle::visitedDependentColor):
        There is no proper way to check if a property has been set or not, so if
        text decoration color fallbacks to default color, it would override the
        check for 'text-fill-color' and 'text-stroke-color' properties on
        WebCore::decorationColor() static function, changing current behavior,
        which can be verified by new failing layout tests (ie.
        fast/text/stroking-decorations.html).

        * rendering/style/RenderStyle.h:
        Added {non-}visited text decoration color getters and setters.

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        Added {non-}visited text decoration color variables initialization to
        copy constructor and operator assignment functions.

        * rendering/style/StyleRareNonInheritedData.h:
        (StyleRareNonInheritedData):
        Added here as this property is not used regularly.

2013-03-13  Rik Cabanier  <cabanier@adobe.com>

        create runtime flags for CSS Compositing
        https://bugs.webkit.org/show_bug.cgi?id=111818

        Reviewed by Ryosuke Niwa.

        No new tests, no change in functionality.

        Added a runtime flags that enables CSS compositing

        * WebCore.exp.in:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::setCSSCompositingEnabled):
        (WebCore::RuntimeEnabledFeatures::cssCompositingEnabled):
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::cssCompositingEnabled):
        (WebCore):
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        (CSSParserContext):
        * dom/Document.cpp:
        (WebCore::Document::cssCompositingEnabled):
        (WebCore):
        * dom/Document.h:
        (Document):

2013-03-11  Kinuko Yasuda  <kinuko@chromium.org>

        Quota API: Update IDL to make it match the latest WD
        https://bugs.webkit.org/show_bug.cgi?id=88396

        Reviewed by Adam Barth.

        Add a new interface object (navigator.StorageQuota) and deprecate the old one (window.StorageInfo)
        to make the code match with the latest Quota API WD:
        http://www.w3.org/TR/quota-api/

        Tests: storage/storagequota-query-usage.html
               storage/storagequota-request-quota.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/quota/DOMWindowQuota.cpp:
        (WebCore::DOMWindowQuota::webkitStorageInfo): Added a deprecate warning message for the old interface.
        * Modules/quota/NavigatorStorageQuota.cpp: Added for the new interface.
        * Modules/quota/NavigatorStorageQuota.h: Added for the new interface.
        * Modules/quota/NavigatorStorageQuota.idl: Added for the new interface.
        * Modules/quota/StorageErrorCallback.cpp:
        (WebCore::StorageErrorCallback::CallbackTask::CallbackTask):
        (WebCore::StorageErrorCallback::CallbackTask::performTask):
        * Modules/quota/StorageErrorCallback.h: Renamed from Source/WebCore/Modules/quota/StorageInfoErrorCallback.h.
        (WebCore):
        (StorageErrorCallback):
        (WebCore::StorageErrorCallback::~StorageErrorCallback):
        (WebCore::StorageErrorCallback::CallbackTask::create):
        * Modules/quota/StorageErrorCallback.idl: Renamed from Source/WebCore/Modules/quota/StorageInfoErrorCallback.idl.
        * Modules/quota/StorageInfo.cpp: Added code to relay requests to the new StorageQuota implementation.
        * Modules/quota/StorageInfo.h:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.cpp: Added for the new interface.
        * Modules/quota/StorageQuota.h:
        (WebCore::StorageQuota::create):
        * Modules/quota/StorageQuota.idl: Copied from Source/WebCore/Modules/quota/StorageInfo.idl.
        * Modules/quota/StorageQuotaCallback.h: Renamed from Source/WebCore/Modules/quota/StorageInfoQuotaCallback.h.
        * Modules/quota/StorageQuotaCallback.idl: Renamed from Source/WebCore/Modules/quota/StorageInfoQuotaCallback.idl.
        * Modules/quota/StorageUsageCallback.h: Renamed from Source/WebCore/Modules/quota/StorageInfoUsageCallback.h.
        * Modules/quota/StorageUsageCallback.idl: Renamed from Source/WebCore/Modules/quota/StorageInfoUsageCallback.idl.
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * page/FeatureObserver.h:

2013-03-13  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed. Sort the Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2013-03-13  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] EOF should unwind the stack of template insertion modes iteratively
        https://bugs.webkit.org/show_bug.cgi?id=111907

        Reviewed by Adam Barth.

        No behavioral changes. This patch only aligns our parser implementation with the present spec.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processTemplateEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFileForInTemplateContents):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        * html/parser/HTMLTreeBuilder.h:
        (HTMLTreeBuilder):

2013-03-13  Michael Nordman  <michaeln@google.com>

        FileSystem mods: Changes to snapshot file creation to reduce dependencies on blob URLs.
        Adding a new minimal BlobDataHandle class which will be reimplemented/built upon in later CLs. In this
        patch, it's just enough to refactor the FileSystem code to not function in terms of blobURLs.
        https://bugs.webkit.org/show_bug.cgi?id=108851

        Reviewed by Adam Barth.

        No new tests. This is strictly a refactoring of the existing code.

        * Modules/filesystem/DOMFileSystem.cpp:
        (WebCore):
        (WebCore::DOMFileSystem::createFile):
        * Modules/filesystem/DOMFileSystemSync.cpp:
        (WebCore):
        * platform/AsyncFileSystemCallbacks.h:
        (AsyncFileSystemCallbacks):
        (WebCore::AsyncFileSystemCallbacks::didCreateSnapshotFile):
        * platform/gtk/AsyncFileSystemGtk.cpp:
        (WebCore::AsyncFileSystemGtk::createSnapshotFileAndReadMetadata):
        (WebCore):
        * platform/network/BlobData.cpp:
        (WebCore):
        (WebCore::BlobDataHandle::BlobDataHandle):
        (WebCore::BlobDataHandle::~BlobDataHandle):
        * platform/network/BlobData.h:
        (WebCore):
        (BlobDataHandle):
        (WebCore::BlobDataHandle::create):

2013-03-13  Ryosuke Niwa  <rniwa@webkit.org>

        Threaded HTML Parser is missing feature define flags in all but Chromium port's build files
        https://bugs.webkit.org/show_bug.cgi?id=112277

        Reviewed by Adam Barth.


        * Configurations/FeatureDefines.xcconfig:

2013-03-13  Marja Hölttä  <marja@chromium.org>

        [V8] Get rid of more function-level static FunctionTemplates and ObjectTemplates in bindings
        https://bugs.webkit.org/show_bug.cgi?id=112262

        Reviewed by Jochen Eisinger.

        In the future we'll create and store function templates for main world
        and non-main worlds separately (see bug 111724), having function
        templates and object templates as static variables inside functions will
        break the functionality.

        No new tests (no changes in functionality yet; existing bindings
        tests still pass).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createContext):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::hasPrivateTemplate):
        (WebCore):
        * bindings/v8/V8PerIsolateData.h:
        (V8PerIsolateData):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::wrapInShadowObject):

2013-03-13  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Refactor GridCoordinate to hold GridSpans
        https://bugs.webkit.org/show_bug.cgi?id=112211

        Reviewed by Tony Chang.

        In order to bring more spanning knowledge to RenderGrid without having
        duplicated GridSpan resolution, it became needed to store them into
        GridCoordinate. Note that this change is needed as we can only resolve
        all the positions with enough context in one place: when we place the
        item in the grid.

        Refactoring, no change in behavior expected.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::nextEmptyGridArea):
        Updated to create 2 GridSpans. Also fixed a style violation (PassOwnPtr
        as local member, not sure why it wasn't caught earlier).

        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::findChildLogicalPosition):
        Updated the original function after GridCoordinate internal representation change.

        (WebCore::RenderGrid::insertItemIntoGrid):
        Ditto. Also added a new overloaded function that does resolution after auto-placement.

        (WebCore::RenderGrid::resolveGridPositionsFromAutoPlacementPosition):
        Removed the extra GridSpan computation, which was wrong.

        * rendering/RenderGrid.h:
        (WebCore::RenderGrid::GridCoordinate::GridCoordinate):
        Updated GridCoordinate to hold 2 GridSpan. Also removed the 2 position
        constructor (it would have been a hazard), replaced by a 2 GridSpan constructor.

2013-03-13  Jochen Eisinger  <jochen@chromium.org>

        Also don't log error messages from the GraphicsContext3D if webGLErrorsToConsoleEnabled is false
        https://bugs.webkit.org/show_bug.cgi?id=112284

        Reviewed by Adam Barth.

        When running layout tests in content_shell, we end up logging more information.
        Since webGLErrorsToConsoleEnabled is false during layout tests, this change makes
        sure we match the baselines.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContextErrorMessageCallback::onErrorMessage):

2013-03-13  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Record attemps to open a path with non-ascii characters
        https://bugs.webkit.org/show_bug.cgi?id=112224

        Reviewed by Tony Chang.

        We want to see if that's correlated with errors on open.

        No new tests, there's no way to test histogramming that I know of. I
        ran chrome locally with a non ascii path though.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::open):

2013-03-13  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Handle min-width / max-width on the grid element
        https://bugs.webkit.org/show_bug.cgi?id=112269

        Reviewed by Ojan Vafai.

        Test: fast/css-grid-layout/grid-element-min-max-width.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::GridIterator):
        Added some sanity checks that the starting indexes are in the grid.

        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        Updated the code to use m_grid to iterate: this is the correct way to
        go as it will handle implicit rows / columns properly. Added a comment
        about the current way being inefficient and incorrect with spanning grid
        items.

        (WebCore::RenderGrid::computePreferredLogicalWidths):
        Updated the comments.

        (WebCore::RenderGrid::gridTrackSize):
        * rendering/RenderGrid.h:
        Constified gridTrackSize.

2013-03-13  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Prospective trivial build fix after r145744

        Add missing closing parentheses.

        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseDtd):

2013-03-13  Brady Eidson  <beidson@apple.com>

        Account for review feedback in https://bugs.webkit.org/show_bug.cgi?id=112279
        that I'd mistakenly left out of my commit.

        * loader/ResourceLoaderTypes.h:

2013-03-13  Abhishek Arya  <inferno@chromium.org>

        Crash in CompositeEditCommand::insertNodeAt.
        https://bugs.webkit.org/show_bug.cgi?id=112280

        Reviewed by Ryosuke Niwa.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt): Fix incorrect cast use of toElement.
        Subsitute with toContainerNode.

2013-03-13  Brady Eidson  <beidson@apple.com>

        Small ResourceLoader cleanups.
        https://bugs.webkit.org/show_bug.cgi?id=112279

        Reviewed by Geoff Garen.

        No new tests (Refactor with no behavior change).

        1 - Add "OVERRIDE" to virtual methods in subclasses of ResourceLoader to catch future mistakes.
        2 - Replace the "bool allAtOnce" flag with a descriptive enum to make reading code easier.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):

        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        * loader/NetscapePlugInStreamLoader.h:

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::didReceiveData):
        * loader/ResourceLoader.h:
        * loader/ResourceLoaderTypes.h: Added.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData):
        * loader/SubresourceLoader.h:

2013-03-13  Nate Chapin  <japhet@chromium.org>

        chromium's WebFrameTest.ReplaceNavigationAfterHistoryNavigation failing after r145734
        https://bugs.webkit.org/show_bug.cgi?id=112281

        Reviewed by Adam Barth.

        Fixes the aforementioned chromiun webkit_unit_test

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::maybeFinishLoadingMultipartContent): FrameLoader::isReplacing() is not quite
            synonymous with loading multipart content. Check that it's actually loading multipart before doing
            multipart-specific things.

2013-03-13  Tao Bai  <michaelbai@chromium.org>

        Add the default video poster if it doesn't exist in video tag
        https://bugs.webkit.org/show_bug.cgi?id=110263

        Reviewed by Eric Carlson.

        Tests: media/video-default-poster.html
               media/video-no-default-poster.html

        The Android web view application could provide the default poster
        for a video that doesn't have the poster attribute.

        To provide the default poster, the application must set defaultVideoPosterURL
        setting and return the image in the response of that URL.

        The way to do this would be:

        A) Replace the Element::imageSourceAttributeName function with an
           Element::imageSourceURL function that returns the imageSourceURL as a
           const AtomicString&. The body will be the same as before, it will just also
           include a call to getAttribute. Also will need to revise the four classes
           that override that function.

        B) Add a new HTMLVideoElement::posterImageURL function that implements the
           default poster URL logic.

        C) Update the four functions that get the poster attribute to handle poster
           loading and display to call posterImageURL.

           1) HTMLVideoElement::imageSourceURL.
           2) HTMLVideoElement::setDisplayMode.
           3) HTMLVideoElement::updateDisplayState.
           4) HTMLMediaElement::getPluginProxyParams. Will need to cast to
              HTMLVideoElement after checking isVideo.

        * dom/Element.cpp:
        (WebCore::Element::imageSourceURL): Replace imageSourceAttributeName() with imageSourceURL()
        * dom/Element.h: Replace imageSourceAttributeName() with imageSourceURL()
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::imageSourceURL): Replace imageSourceAttributeName() with imageSourceURL()
        * html/HTMLEmbedElement.h: Replace imageSourceAttributeName() with imageSourceURL()
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getPluginProxyParams): Change to use posterImageURL
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::imageSourceURL): Replace imageSourceAttributeName() with imageSourceURL()
        * html/HTMLObjectElement.h: Replace imageSourceAttributeName with imageSourceURL
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::HTMLVideoElement): set m_defaultPosterURL if there is such settings
        (WebCore::HTMLVideoElement::imageSourceURL): Replace imageSourceAttributeName() with imageSourceURL()
        (WebCore::HTMLVideoElement::setDisplayMode): Use imageSourceURL()
        (WebCore::HTMLVideoElement::updateDisplayState): Use imageSourceURL()
        (WebCore::HTMLVideoElement::posterImageURL): Return image source's KURL
        * html/HTMLVideoElement.h: Replace imageSourceAttributeName() with imageSourceURL() and add m_defaultPosterURL
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): Use imageSourceURL()
        * page/Settings.in: Add defaultVideoPosterURL setting.
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage): use imageSourceURL()
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::getURLForImageNode): use imageSourceURL()
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL): use imageSourceURL()
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::imageSourceURL): Replace imageSourceAttributeName() with imageSourceURL()
        * svg/SVGImageElement.h: Replace imageSourceAttributeName() with imageSourceURL()
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): support backup defaultVideoPosterURL.
        (WebCore::InternalSettings::Backup::restoreTo): support restore defaultVideoPosterURL.
        (WebCore::InternalSettings::setDefaultVideoPosterURL): set defaultVideoPosterURL.
        * testing/InternalSettings.h:
        (Backup): support backup defaultVideoPosterURL.
        (InternalSettings): Add setDefaultVidoePosterURL method.
        * testing/InternalSettings.idl: Add setDefaultVideoPosterURL for test purpose.
        * testing/Internals.cpp:
        (WebCore::Internals::getImageSourceURL): Add getImageSourceURL method.
        * testing/Internals.h: Add getImageSourceURL method.
        * testing/Internals.idl: Add getImageSourceURL method.

2013-03-13  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* functions for document types.
        https://bugs.webkit.org/show_bug.cgi?id=112225

        Reviewed by Ryosuke Niwa.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::document):
        ....lot of files.

2013-03-13  Liam Quinn  <lquinn@blackberry.com>

        Handle XHTML entities in XHTML Mobile Profile 1.1 and 1.2. We previously only handled them in XHTML Mobile Profile 1.0.
        https://bugs.webkit.org/show_bug.cgi?id=112174
        RIM PR 309038

        Reviewed by Rob Buis.
        Internally reviewed by Leo Yang.

        Check for the 1.1 and 1.2 doctypes alongside the 1.0 doctype.

        Tests: fast/doctypes/xhtml-with-xhtmlmp11-doctype.xhtml
               fast/doctypes/xhtml-with-xhtmlmp12-doctype.xhtml

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::externalSubsetHandler):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseDtd):

2013-03-13  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] Better error handling in NetworkStateNotifierEfl
        https://bugs.webkit.org/show_bug.cgi?id=112184

        Reviewed by Kenneth Rohde Christiansen.

        Improve error handling in for system calls in NetworkStateNotifierEfl.
        - EINTR errors are now properly handled for close() and recv() syscalls
        - recv() errors are now correctly detected, for e.g. if the socket was
        closed unexpectedly.
        - Make sure m_fdHandler is reset when the callback returns
        ECORE_CALLBACK_CANCEL to avoid double free in destructor. m_fdHandler
        gets destroyed when the callback returns ECORE_CALLBACK_CANCEL.
        - Keep netlink socket file descriptor as a class member so that we can
        close() it in the class destructor, even if m_fdHandler has already
        been destroyed.

        No new tests, no behavior change for layout tests.

        * platform/network/NetworkStateNotifier.h:
        (NetworkStateNotifier):
        * platform/network/efl/NetworkStateNotifierEfl.cpp:
        (WebCore::NetworkStateNotifier::readSocketCallback):
        (WebCore::NetworkStateNotifier::~NetworkStateNotifier):
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):

2013-03-13  Tony Chang  <tony@chromium.org>

        Regression(r143542): -webkit-align-items: center with overflow: auto/scroll has extra bottom padding
        https://bugs.webkit.org/show_bug.cgi?id=112047

        Reviewed by Ojan Vafai.

        Add a new pass for computing the client bottom edge that runs after we've repositioned children
        due to wrap-reverse, flex-end or vertical centering.

        Test: css3/flexbox/negative-overflow.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Remove the code to use clientLogicalBottom() that was computed before
        repositioning. The repositioning can change the edge.
        (WebCore::RenderFlexibleBox::clientLogicalBottomAfterRepositioning): Compute the new bottom based on the final position
        of flex items.
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):

2013-03-13  Nate Chapin  <japhet@chromium.org>

        REGRESSION(r137607): Redirecting a post to a get then reloading triggers resubmit warning
        https://bugs.webkit.org/show_bug.cgi?id=112194

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/navigation/post-redirect-get-reload.php

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest): Matching urls aren't a reliable way of checking whether
            we are in a redirect. Check redirectResponse.isNull() instead.
        * testing/Internals.cpp:
        (WebCore::Internals::forceReload): Expose a means of forcing a reload like one a user generates for testing.
            Note that testRunner.queueReload() does this, but is not supported after the initial load completes,
            which makes it unsuitable for this case.
        * testing/Internals.h:
        * testing/Internals.idl:

2013-03-13  Nate Chapin  <japhet@chromium.org>

        Merge MainResourceLoader's didFinishLoading and dataReceived into DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=109952

        Reviewed by Antti Koivisto.

        No new tests, refactor only.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/DocumentLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::responseReceived): Move content filtering to
            DocumentLoader.
        (WebCore::MainResourceLoader::dataReceived): Mostly moved to DocumentLoader.
        (WebCore::MainResourceLoader::didFinishLoading): Mostly moved to DocumentLoader.
        * loader/MainResourceLoader.h: Expose some variables that haven't been moved
            to DocumentLoader yet.

2013-03-13  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Break after doesn't work correctly with auto-height regions
        https://bugs.webkit.org/show_bug.cgi?id=112241

        Reviewed by David Hyatt.

        The change correctly returns the break position during the normal layout phase for
        auto-height regions. The problem doesn't exist during the constrained layout phase
        so it only affects the size of the auto-height regions by incorrectly positioning
        the content inside the flow.

        Test: fast/regions/autoheight-break-after.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::applyAfterBreak): Include the margin offset in the returned break position.

2013-03-12  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: coalesce repeating timeline records
        https://bugs.webkit.org/show_bug.cgi?id=112168

        Reviewed by Vsevolod Vlasov.

        - coalesce repeating top-level timeline events;
        - drive-by: only show categories that actually took time in aggregated stats;

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelineFrameController.js:
        (WebInspector.TimelineFrameController.prototype._innerAddRecord):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._highlightRect):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.reset):
        (WebInspector.TimelinePresentationModel.prototype._innerAddRecord):
        (WebInspector.TimelinePresentationModel.prototype._updateAncestorStats):
        (WebInspector.TimelinePresentationModel.prototype._findCoalescedParent):
        (WebInspector.TimelinePresentationModel.prototype._replaceWithCoalescedRecord):
        (WebInspector.TimelinePresentationModel.Record):
        (WebInspector.TimelinePresentationModel.adoptRecord):
        (WebInspector.TimelinePresentationModel.insertRetrospectiveRecord):
        (WebInspector.TimelinePresentationModel.Record.prototype.get selfTime):
        (WebInspector.TimelinePresentationModel.Record.prototype._generatePopupContentWithImagePreview):
        (WebInspector.TimelinePresentationModel.Record.prototype._getRecordDetails):
        (WebInspector.TimelinePresentationModel.Record.prototype.calculateAggregatedStats):

2013-03-13  Philip Rogers  <pdr@google.com>

        Fix body background image geometry calculation
        https://bugs.webkit.org/show_bug.cgi?id=112226

        Reviewed by Stephen Chenney.

        Images that depend on a container size require a call to set the container size before
        rendering, and a call to look up the correct image during painting.

        The body's renderer is special in that it may not be the renderer that actually paints its
        background. This patch fixes a bug where the correct RenderObject was used for looking up
        the image, but not for setting the container size. This fixes SVG background images on body.

        Test: svg/as-background-image/svg-as-background-body.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

            This change introduces clientForBackgroundImage in the background geometry calculation.
            This is very similar to how the client is looked up in paintFillLayerExtended.

        * rendering/RenderBoxModelObject.h:

            The new signature for calculateBackgroundImageGeometry now mirrors
            paintFillLayerExtended, containing a parameter for the correct background renderer.

        (RenderBoxModelObject):

2013-03-13  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] Handle "enter" key in {|} situation
        https://bugs.webkit.org/show_bug.cgi?id=112153

        Reviewed by Vsevolod Vlasov.

        Add a keymap to handle "Enter" key and override it in case of {|}
        situation.

        No new tests.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        (WebInspector.CodeMirrorTextEditor.BlockIndentController):
        (WebInspector.CodeMirrorTextEditor.BlockIndentController.prototype.Enter):

2013-03-13  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] bug with LineWidgets
        https://bugs.webkit.org/show_bug.cgi?id=111978

        Reviewed by Vsevolod Vlasov.

        Implement CodeMirrorTextEditor.beginUpdates and
        CodeMirrorTextEditor.endUpdates and surround decoration creation
        with the beginUpdates/endUpdates calls.

        No new tests.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        (WebInspector.CodeMirrorTextEditor.prototype.beginUpdates):
        (WebInspector.CodeMirrorTextEditor.prototype.endUpdates):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addMessageToSource):

2013-03-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: get rid of hiddenPanels filter
        https://bugs.webkit.org/show_bug.cgi?id=112252

        Reviewed by Vsevolod Vlasov.

        * WebCore.order:
        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        * inspector/front-end/externs.js:
        * inspector/front-end/inspector.js:
        (WebInspector._panelDescriptors):
        * testing/Internals.cpp:

2013-03-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: convert workers inspection into capability
        https://bugs.webkit.org/show_bug.cgi?id=112251

        Reviewed by Vsevolod Vlasov.

        It should be up to backend

        * inspector/Inspector.json:
        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::canInspectWorkers):
        (WebCore):
        * inspector/InspectorWorkerAgent.h:
        (InspectorWorkerAgent):
        * inspector/front-end/InspectorFrontendHostStub.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/externs.js:
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2013-03-13  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL] Start using evas object directly in Widget class
        https://bugs.webkit.org/show_bug.cgi?id=111858

        Reviewed by Antonio Gomes.

        Based on a patch by Kenneth Rohde Christiansen.

        EFL Widget class should use evas object pointer directly rather
        than WidgetPrivate* m_data as platformWidget() is a Mac specific
        implementation detail that they are moving away from with WebKit2.

        This patch brings: firstly better compliance with other ports,
        secondly it makes code cleaner.

        Besides, the evasObject is only directly used in the ScrollbarEfl
        subclass of Widget and not in Widget or ScrollView or any other subclass,
        thus the evas_object code has now been concentrated in ScrollbarEfl.

        No new tests as there are no behavioral changes.

        * page/efl/EventHandlerEfl.cpp:
        * platform/Widget.h:
        (Widget):
        (WebCore::Widget::evasObject):
        * platform/efl/ScrollbarEfl.cpp:
        (ScrollbarEfl::~ScrollbarEfl):
        (scrollbarEflEdjeMessage):
        (ScrollbarEfl::show):
        (ScrollbarEfl::hide):
        (ScrollbarEfl::setParent):
        (ScrollbarEfl::updateThumbPositionAndProportion):
        (ScrollbarEfl::frameRectsChanged):
        * platform/efl/ScrollbarEfl.h:
        (ScrollbarEfl):
        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::frameRectsChanged):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setEvasObject):
        * plugins/efl/PluginViewEfl.cpp:
        (WebCore::PluginView::platformGetValue):

2013-03-13  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] token highlight still has some problems
        https://bugs.webkit.org/show_bug.cgi?id=112173

        Reviewed by Vsevolod Vlasov.

        Use pseudo elements with borders to draw token highlight.

        No new tests.

        * inspector/front-end/cm/cmdevtools.css:
        (.cm-token-highlight):
        (.cm-token-highlight:before):
        (.cm-line-with-selection .cm-column-with-selection:before):

2013-03-13  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] SimpleFontData: remove duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=112149

        Reviewed by Carlos Garcia Campos.

        smallCapsFontData() and emphasisMarkFontData() were moved from
        platform specific files into platform/graphics/SimpleFontData.cpp
        in r133362, so the BlackBerry port no longer needs its own
        implementation.

        * platform/graphics/blackberry/SimpleFontDataBlackBerry.cpp:

2013-03-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: throw an exception if the requested lazy loaded script does not exist.
        https://bugs.webkit.org/show_bug.cgi?id=112237

        Reviewed by Pavel Feldman.

        * inspector/front-end/utilities.js:

2013-03-13  Mike West  <mkwst@chromium.org>

        Pass the XSSAuditor's report URL to the XSSAuditorDelegate on the main thread.
        https://bugs.webkit.org/show_bug.cgi?id=112179

        Reviewed by Adam Barth.

        Rather than relying on XSSInfo objects to move the XSSAuditor's report
        URL into the XSSAuditorDelegate for reporting, we should be able to grab
        the URL directly from XSSAuditor before it moves off the main thread,
        and store it on the delegate.

        This will enable us to drop the report URL properties from both
        XSSAuditor and XSSInfo. Oh, happy day!

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
            We no longer need to check whether XSSInfo objects are thread safe,
            as we've dropped the only problematic bit.
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
            When initializing the XSSAuditor, pass in an XSSAuditorDelegate*
            and assign the report URL directly onto that object.
        (WebCore::XSSAuditor::filterToken):
            Drop the report URL parameter from XSSInfo objects we create in the
            Auditor, as they're now handled directly from the delegate.
        (WebCore::XSSAuditor::isSafeToSendToAnotherThread):
            Drop the report URL property from XSSAuditor's threadsafeness check,
            as properties that do not exist are automatically thread-safe.
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
            Use the delegate's own report URL rather than the XSSInfo objects'.
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::create):
        (WebCore::XSSInfo::XSSInfo):
            Drop the report URL property from XSSInfo.
        (WebCore::XSSAuditorDelegate::setReportURL):
        (XSSAuditorDelegate):
            Provide a public API for setting a delegate's report URL.

2013-03-13  Mike West  <mkwst@chromium.org>

        Unsafe JavaScript attempt errors are ludicrously verbose and annoying
        https://bugs.webkit.org/show_bug.cgi?id=112042

        Reviewed by Timothy Hatcher.

        This patch attempts to make the most common case of error message less
        ludicrous by adjusting it to include only an origin as opposed to full
        URLs for the active and target frames. It now reads: "Blocked a frame
        with origin 'http://127.0.0.1:8000' from accessing a frame with origin
        'http://localhost:8000'. Protocols, domains, and ports must match."

        In the interest of keeping the patch size down, I'll follow up on the
        other cases (sandboxed access, 'document.domain' mismatches, etc) in
        future patches.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::crossDomainAccessErrorMessage):

2013-03-13  Takashi Sakamoto  <tasak@google.com>

        Implement :scope for element.querySelector[All]()
        https://bugs.webkit.org/show_bug.cgi?id=81069

        Reviewed by Dimitri Glazkov.

        Implemented :scope for element.querySelector[All]().
        Reuse scope in SelectorCheckingContext and added a new value to
        enum BehaviorAtBoundary.
        :scope spec is http://dev.w3.org/csswg/selectors4/#scope-pseudo.

        Test: fast/selectors/querySelector-scope.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        Added :scope pseudo type.
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match):
        (WebCore::SelectorChecker::checkOne):
        Added PseudoScope case and modified "scope" meaning when
        behaviorAtBoundary is equal to StaysWithinTreeScope.
        If so, "scope" is just a contextual reference node.
        * css/SelectorChecker.h:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches):
        (WebCore::SelectorDataList::matches):
        (WebCore::SelectorDataList::execute):
        Use rootNode as a contextual reference node.
        * dom/SelectorQuery.h:
        (SelectorDataList):

2013-03-13  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] FontPlatformData: remove TextOrientation parameter
        https://bugs.webkit.org/show_bug.cgi?id=112135

        Reviewed by Rob Buis.

        This doesn't exist since r136520.

        * platform/graphics/blackberry/FontCacheBlackBerry.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/blackberry/FontCustomPlatformData.h:
        (FontCustomPlatformData):
        * platform/graphics/blackberry/FontCustomPlatformDataBlackBerry.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/blackberry/FontPlatformDataBlackBerry.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::applyState):
        * platform/graphics/blackberry/SimpleFontDataBlackBerry.cpp:
        (WebCore::SimpleFontData::createScaledFontData):

2013-03-12  Antti Koivisto  <antti@apple.com>

        Basic child obscuration test for backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=111701

        Reviewed by Simon Fraser.
        
        Test: fast/repaint/obscured-background-no-repaint.html

        We can easily detect some simple cases where a background image is fully obscured by an opaque child.
        
        This avoids unncessary painting and image decoding. It is especially helpful for cases like about.com home
        page where a fully obscured 'loading' spinner keeps triggering frequent complex repaints (gif animations
        progress by getting painted and stop if they are not).
        
        This could be made way more sophisticated. The checking could also be done per-layout rather per-paint.
        Even this simple approach gets hit surprisingly often in real world sites.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::backgroundIsObscured):
        
            Before painting background test if any single child renderer fully obscures it.

        (WebCore::RenderBox::backgroundIsOpaqueInRect):
        * rendering/RenderBox.h:

2013-03-12  Hayato Ito  <hayato@chromium.org>

        [Crash] Touch Events retargeting causes crashes on chrome on android.
        https://bugs.webkit.org/show_bug.cgi?id=112210

        Reviewed by Dimitri Glazkov.

        Added null-check for TouchEvent's touches(), targetTouches() and changedTouches().

        No new tests - no new functionality.

        * dom/EventRetargeter.cpp:
        (WebCore::EventRetargeter::adjustForTouchEvent):
        (WebCore::EventRetargeter::adjustTouchList):
        * dom/EventRetargeter.h:

2013-03-12  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed attempted Windows build fix after http://trac.webkit.org/changeset/145592.

        * platform/RunLoopTimer.h: Removed.

2013-03-12  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove CoordinatedGraphicsLayer::setRootLayer().
        https://bugs.webkit.org/show_bug.cgi?id=111835

        Reviewed by Luiz Agostini.

        This patch removes CoordinatedGraphicsLayer::setRootLayer() because
        CoordinatedGraphicsScene already knows which layer is root.

        No new tests, no behavior change.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):

2013-03-12  Jun Jiang  <jun.a.jiang@intel.com>

        Enable GPU-GPU texture copy in texImage2D() for HTMLVideoElement if hardware accelerated video decode is in use
        https://bugs.webkit.org/show_bug.cgi?id=111126

        Reviewed by Kenneth Russell.

        In texImage2D() for HTMLVideoElement in WebGL, it is possible to do a GPU-GPU texture copy instead of CPU readback
        and upload when videoFrame is in the form of textures. Each platform port needs to implement the interface
        copyVideoTextureToPlatformTexture() defined in MediaPlayer.h to make it work.
 
        Already covered by current tests.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::copyVideoTextureToPlatformTexture):
        * html/HTMLVideoElement.h:
        (HTMLVideoElement):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::videoFrameToImage): Move some security check to upper level.
        (WebCore::WebGLRenderingContext::texImage2D): Add the fast GPU-GPU textures copy path for HTMLVideoElement and some security check.
        (WebCore::WebGLRenderingContext::texSubImage2D): Add some security check.
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::isValid): Added to check if the texture is defined at the given level.
        * html/canvas/WebGLTexture.h:
        (WebGLTexture):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::copyVideoTextureToPlatformTexture): Added to do the GPU-GPU textures copy.
        * platform/graphics/MediaPlayer.h:
        (MediaPlayer):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::copyVideoTextureToPlatformTexture):

2013-03-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145280.
        http://trac.webkit.org/changeset/145280
        https://bugs.webkit.org/show_bug.cgi?id=112217

        This patch broke chromium WebGL conformance tests (Requested
        by shawnsingh on #webkit).

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:
        (DrawingBuffer):

2013-03-12  Dean Jackson  <dino@apple.com>

        Don't send events to plugins that are being snapshotted
        https://bugs.webkit.org/show_bug.cgi?id=112215
        <rdar://problem/13386224>

        Reviewed by Tim Horton.

        If a plugin is in the process of being snapshotted, do not forward it
        any events. This avoids the case where we can accidentally capture some
        custom mouse pointers, as well as trigger a plugin menu.

        The next step will be to detect if the event should stop the snapshotting
        (restart the plugin).

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler): Return early if the plugin is snapshotting.

2013-03-12  Tim Horton  <timothy_horton@apple.com>

        Unreviewed attempted Windows build fix after http://trac.webkit.org/changeset/145592.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-03-12  James Robinson  <jamesr@chromium.org>

        Fix Gamepad::axes and Gamepad::buttons to avoid calling std::copy(..., ..., 0)
        https://bugs.webkit.org/show_bug.cgi?id=89510

        Reviewed by Kenneth Russell.

        WTF::Vector::begin() returns 0 when the vector has length zero. On windows, the debug implementation of
        std::copy() is unhappy with 0 as a third parameter even when the first and second parameters are equal.

        Covered by gamepad/gamepad-polling-access.html

        * Modules/gamepad/Gamepad.cpp:
        (WebCore::Gamepad::axes):
        (WebCore::Gamepad::buttons):

2013-03-12  Elliott Sprehn  <esprehn@chromium.org>

        Remove TextIterator.cpp's isAllCollapsibleWhitespace
        https://bugs.webkit.org/show_bug.cgi?id=112200

        Reviewed by Ryosuke Niwa.

        Remove isAllCollapsibleWhitespace since nothing uses it.

        * editing/TextIterator.cpp: Remove isAllCollapsibleWhitespace.

2013-03-12  Bear Travis  <betravis@adobe.com>

        [css exclusions] Move ExclusionShapeInsideInfo into RenderBlockRareData
        https://bugs.webkit.org/show_bug.cgi?id=110995

        Reviewed by Julien Chaffraix.

        This patch moves ExclusionShapeInsideInfo into the RenderBlockRareData struct,
        which enables us to move away from the global ExclusionShapeInsideInfo map.
        Some additional refactoring was done to remove ExclusionShapeInsideInfo's
        dependency on InlineIterator, which depended on RenderBlock. This work required
        adding a new LineSegmentIterator struct.

        Refactoring, no new tests.

        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore):
        (WebCore::LineSegmentRange::LineSegmentRange): Moving the InlineIterator
        constructor to the .cpp file, as InlineIterator is now forward declared in
        the .h file.
        (WebCore::ExclusionShapeInsideInfo::isEnabledFor): Moving isEnabledFor to
        the .cpp file, as RenderBlock is now forward declared in the .h file.
        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore):
        (LineSegmentIterator): A simple struct for containing segment positions for
        layout.
        (WebCore::LineSegmentIterator::LineSegmentIterator): Constructor.
        (LineSegmentRange): Transitioning to store LineSegmentIterator.
        (WebCore::LineSegmentRange::LineSegmentRange): Ditto.
        (ExclusionShapeInsideInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed): Destroying a block will now destroy
        its ExclusionShapeInsideInfo, so there is no need to remove it from the map.
        (WebCore):
        (WebCore::RenderBlock::updateExclusionShapeInsideInfoAfterStyleChange): Use
        the RenderBlockRareData struct rather than the global map.
        * rendering/RenderBlock.h:
        (WebCore):
        (WebCore::RenderBlock::ensureExclusionShapeInsideInfo): Ensure an info struct
        is present if the shape-inside style is set.
        (WebCore::RenderBlock::exclusionShapeInsideInfo): Look up the info struct for
        the current block.
        (WebCore::RenderBlock::setExclusionShapeInsideInfo): Update the info struct
        for the current block.
        (RenderBlockRareData): Add the ExclusionShapeInsideInfo member. Move the struct
        declaration to be public, so that the OwnPtr reference can properly delete it.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForLine): Construct the appropriate offsets during
        layout based on the stored LineSegmentIterators.

2013-03-12  James Robinson  <jamesr@chromium.org>

        Build fix for r145592 - update gyp files to refer to new file locations.

        * WebCore.gypi:

2013-03-12  Benjamin Poulain  <bpoulain@apple.com>

        Add a single character cache to WidthCache
        https://bugs.webkit.org/show_bug.cgi?id=112084

        Reviewed by Geoffrey Garen.

        More than half of the values stored in WidthCache are values
        for a single character.

        Previously, we were creating a new SmallStringKey for each one of
        them, causing a lot of extra memory operations even for the simple
        cases.

        This patch adds a second map, m_singleCharMap, to simplify the
        computation for the common case of a single char TextRun.

        * platform/graphics/WidthCache.h:
        (WebCore::WidthCache::clear):
        (WidthCache):
        (WebCore::WidthCache::addSlowCase):

2013-03-12  Philip Rogers  <pdr@google.com>

        Replace static_casts for SVG transformable and locatable elements
        https://bugs.webkit.org/show_bug.cgi?id=111651

        Reviewed by Abhishek Arya.

        toSVGStyledTransformableElement and toSVGStyledLocatableElement are preferred over
        static_casts because bad casts can be caught on our testing infrastructure. This patch
        replaces all static_casts for SVGStyledTransformableElement and SVGStyledLocatableElement
        with toSVGStyledTransformableElement and toSVGStyledLocatableElement, respectively.

        No new tests as this is covered with existing tests.

        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::updateShapeFromElement):
        (WebCore::RenderSVGShape::layout):
        (WebCore::RenderSVGShape::nonScalingStrokeTransform):
        (WebCore::RenderSVGShape::shouldGenerateMarkerPositions):
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::calculateDistance):

            This was an unnecessary cast and has been removed.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getBoundingBox):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGStyledLocatableElement.h:
        (WebCore):
        (WebCore::toSVGStyledLocatableElement):
        * svg/SVGStyledTransformableElement.h:
        (WebCore):
        (WebCore::toSVGStyledTransformableElement):

            It makes the code cleaner to pass Node* in here, rather than converting the Node*
            to an SVGElement* before calling this function. The same was not necessary for
            SVGStyledLocatable.

        * svg/SVGSVGElement.h:
        (WebCore):
        (WebCore::toSVGSVGElement):

            This code has been cleaned up. During the review of this patch, a similar cleanup
            was done in toSVGStyledTransformableElement.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::toClipPath):

2013-03-12  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112164

        Reviewed by Philip Rogers.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRulesForRegion):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::getURLForImageNode):
        (WebCore::Pasteboard::writeImage):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::getMediaElementFromRenderObject):
        * platform/qt/RenderThemeQtMobile.cpp:
        (WebCore::RenderThemeQtMobile::checkMultiple):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::title):
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absolutePDFURL):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::hitTest):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::valueChanged):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addPDFURLRect):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::requiresAcceleratedCompositing):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::checkRegionStyle):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isEnabled):
        (WebCore::RenderTheme::isSpinUpButtonPartPressed):
        (WebCore::RenderTheme::isHovered):
        (WebCore::RenderTheme::isSpinUpButtonPartHovered):
        (WebCore::RenderTheme::paintSliderTicks):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::mediaElementParent):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::isEmptyOrUnstyledAppleStyleSpan):
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::writeRenderRegionList):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):

2013-03-12  Geoffrey Garen  <ggaren@apple.com>

        Moved RunLoopTimer and SchedulePair to WTF
        https://bugs.webkit.org/show_bug.cgi?id=112171

        Reviewed by Oliver Hunt.

        This will allow us to use timers in lower level primitives without
        duplicating all the code.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.h:
        (WTF):
        (WebCore):
        (DocumentLoader):
        * loader/MainResourceLoader.h:
        * page/Page.h:
        * platform/AutodrainedPool.h: Removed.
        * platform/cf/RunLoopTimerCF.cpp: Removed.
        * platform/cf/SchedulePair.cpp: Removed.
        * platform/cf/SchedulePair.h: Removed.
        * platform/mac/AutodrainedPool.mm: Removed.
        * platform/mac/SchedulePairMac.mm: Removed.
        * platform/network/NetworkingContext.h:
        * platform/network/ResourceHandle.h:
        (WTF):
        (WebCore):
        (ResourceHandle):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/mac/ResourceHandleMac.mm:

2013-03-12  Christian Biesinger  <cbiesinger@chromium.org>

        Mac: Incorrect rendering of <audio> controls
        https://bugs.webkit.org/show_bug.cgi?id=110913

        Reviewed by Tony Chang.

        Covered by existing tests under media/.

        * css/mediaControls.css:
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        The timeline container and the timeline need min-width: 0 so that they can shrink if needed.
        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display):
        The timeline container also needs flex-start to ensure that it never overlaps
        the play/rewind buttons. The current-time and remaining-time displays need min-width: 0 so that the hack
        in RenderMediaControls.cpp works correctly - otherwise, RenderFlexibleBox tries to use the preferred width
        of the time displays, which is wrong when they try to hide themselves.

2013-03-12  Alexey Proskuryakov  <ap@apple.com>

        Improve logging in ResourceHandleMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=112185

        Reviewed by Brady Eidson.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Removed an obsolete #if.
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        (-[WebCoreResourceHandleAsDelegate connection:didCancelAuthenticationChallenge:]): Added a FIXME.
        (-[WebCoreResourceHandleAsDelegate connection:canAuthenticateAgainstProtectionSpace:]):

        * platform/network/mac/ResourceResponseMac.mm: Removed an unneeded include.

2013-03-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145554.
        http://trac.webkit.org/changeset/145554
        https://bugs.webkit.org/show_bug.cgi?id=112182

        Breaks several extension browser tests (see bug for details)
        (Requested by jamesr on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateImplementation):
        (CreateCustomSignature):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetTemplate):
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (V8TestTypedefs):
        * bindings/v8/V8AdaptorFunction.cpp:
        (WebCore::V8AdaptorFunction::getTemplate):
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        (WebCore::V8PerIsolateData::privateTemplate):
        (WebCore::V8PerIsolateData::rawTemplate):
        (WebCore::V8PerIsolateData::hasInstance):
        * bindings/v8/V8PerIsolateData.h:
        (WebCore::V8PerIsolateData::rawTemplateMap):
        (WebCore::V8PerIsolateData::templateMap):
        (V8PerIsolateData):
        * bindings/v8/WrapperTypeInfo.h:
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::opaqueRootForGC):

2013-03-12  Gavin Peters  <gavinp@chromium.org>

        [chromium] Use lipo(1) rather than file(1) to list library architectures.
        https://bugs.webkit.org/show_bug.cgi?id=111147

        Parsing file(1) output can be fragile; this patch replaces a use of file(1) to get
        the architecture list of a library with an invocation of lipo(1), which should be more
        stable.

        Reviewed by Nico Weber.

        No new tests, since adjust_visibility.sh doesn't have a test.

        * WebCore.gyp/mac/adjust_visibility.sh:

2013-03-12  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        Webkit unable to show gifs with applcation extension string shorter than 11 bytes
        https://bugs.webkit.org/show_bug.cgi?id=110620

        Reviewed by Laszlo Gombos.

        Use actual block size for gifs application extension string even if it is below 11 bytes 
        to be able to decode this kind of gifs.

        Test: fast/images/gif-short-app-extension-string.html

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::decodeInternal):

2013-03-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145277.
        http://trac.webkit.org/changeset/145277
        https://bugs.webkit.org/show_bug.cgi?id=112170

        chromium-gpu and android testers are seeing failures/crashes
        relating to this code (Requested by eseidel on #webkit).

        * html/parser/BackgroundHTMLInputStream.cpp:
        (WebCore::BackgroundHTMLInputStream::rewindTo):
        * html/parser/BackgroundHTMLInputStream.h:
        (BackgroundHTMLInputStream):
        (Checkpoint):
        * html/parser/BackgroundHTMLParser.cpp:
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):

2013-03-12  Simon Fraser  <simon.fraser@apple.com>

        Keep track of the number of GraphicsLayers with tiled backing in RenderLayerCompositor
        https://bugs.webkit.org/show_bug.cgi?id=112083

        Reviewed by Dean Jackson.

        Have RenderLayerCompositor keep track of how many of its GraphicsLayers use TiledBacking.
        This is useful for platforms to decide whether it's necessary to force GraphicsLayer flushes
        to update the visibleRect of those TiledBackings.
        
        GraphicsLayers are always created without TiledBacking. There are two
        ways the count can change:
        1. A GraphicsLayerCA toggles into or out of tiled mode. It notifies its
           client via a new tiledBackingUsageChanged() callback on GraphicsLayerClient.
        2. A tiled GraphicsLayerCA is destroyed. Added a new bottleneck function to
           RenderLayerBacking::willDestroyLayer() that is called everywhere we destroy layers.
           
        The main page TiledBacking is not counted as part of this.
        
        Also renamed uses of "tiledLayer" to "tiledBacking" in GraphicsLayer[CA].
    
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::getDebugBorderInfo):
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::usingTiledBacking):
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::tiledBackingUsageChanged):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent):
        (WebCore::GraphicsLayerCA::updateContentsScale):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::willDestroyLayer):
        (WebCore::RenderLayerBacking::tiledBackingUsageChanged):
        (WebCore::RenderLayerBacking::destroyGraphicsLayers):
        (WebCore::RenderLayerBacking::updateClippingLayers):
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        (WebCore::RenderLayerBacking::updateBackgroundLayer):
        (WebCore::RenderLayerBacking::updateMaskLayer):
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        (WebCore::RenderLayerBacking::compositingLayerType):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::layerTiledBackingUsageChanged):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::haveNonMainLayersWithTiledBacking):

2013-03-12  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* functions.
        https://bugs.webkit.org/show_bug.cgi?id=112072

        Reviewed by Philip Rogers.

        to* functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::canSetFocusAttribute):
        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::isLegacyAppleStyleSpan):
        (WebCore::isEmptyFontTag):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isMailPasteAsQuotationNode):
        (WebCore::haveSameTagName):
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::suggestions):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::isInHead):
        (WebCore::isInBody):
        (WebCore::isInFoot):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchNode):
        * page/PageSerializer.cpp:
        (WebCore::SerializerMarkupAccumulator::appendCustomAttributes):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValue):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintContents):
        (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::name):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::mediaElement):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::autosaveName):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textFormControlElement):
        (WebCore::updateUserModifyProperty):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::updateFromElement):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::updateFromElement):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::endElementNs):

2013-03-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Remove HILDON_CPPFLAGS and HILDON_CFLAGS references from GNUmakefiles
        https://bugs.webkit.org/show_bug.cgi?id=112163

        Reviewed by Martin Robinson.

        No new tests - no new functionality, merely a cleanup.

        * GNUmakefile.am: The Hildon dependency doesn't exist anymore so there's no need for
        references to HILDON_CPPFLAGS and HILDON_CFLAGS.

2013-03-12  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: removing GtkVersioning from chromium targets.

        * WebCore.gypi:

2013-03-12  Marja Hölttä  <marja@chromium.org>

        [V8] Store main world and non-main world templates separately.
        https://bugs.webkit.org/show_bug.cgi?id=111724

        Reviewed by Jochen Eisinger.

        This is needed for generating specialized bindings for the main
        world (bug 110874).

        No new tests (updated existing bindings tests).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateImplementation):
        (CreateCustomSignature):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetTemplate):
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (V8TestTypedefs):
        * bindings/v8/V8AdaptorFunction.cpp:
        (WebCore::V8AdaptorFunction::getTemplate):
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        (WebCore::V8PerIsolateData::privateTemplate):
        (WebCore::V8PerIsolateData::rawTemplate):
        (WebCore::V8PerIsolateData::hasInstance):
        * bindings/v8/V8PerIsolateData.h:
        (WebCore::V8PerIsolateData::rawTemplateMap):
        (V8PerIsolateData):
        (WebCore::V8PerIsolateData::templateMap):
        * bindings/v8/WrapperTypeInfo.h:
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):

2013-03-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up the libPlatformGtk.la library
        https://bugs.webkit.org/show_bug.cgi?id=111738

        Reviewed by Martin Robinson.

        No new tests - no new functionality.

        * GNUmakefile.am: Reference platformgtk_cppflags, platformgtk_sources variables along with webcoregtk_cppflags, webcoregtk_sources variables.
        * GNUmakefile.list.am: Removing GtkVersioning.c and GtkVersioning.h from the sources list, these files have been moved under Source/Platform.
        * bindings/gobject/GNUmakefile.am: Ditto on the platformgtk_* variables.

2013-03-12  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Image,ImageBuffer: add missing parameters to methods
        https://bugs.webkit.org/show_bug.cgi?id=112148

        Reviewed by Rob Buis.

        BitmapImage::draw(), Image::drawPattern() and ImageBuffer::draw()
        have a BlendMode parameter since r137011.

        ImageBuffer::copyImage() has a ScaleBehavior parameter since r134100.

        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/blackberry/ImageBufferBlackBerry.cpp:
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::draw):

2013-03-12  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] MediaPlayerPrivate: fix call to MediaStreamDescriptor::label()
        https://bugs.webkit.org/show_bug.cgi?id=112140

        Reviewed by Rob Buis.

        MediaStreamDescriptor::id() was renamed to MediaStreamDescriptor::label() in r139352.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::toWebMediaStreamDescriptor):

2013-03-12  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [REGRESSION] StepInto (F11) and StepOut (Shift-F11) shortcuts toggle Inspector window full-screen state
        https://bugs.webkit.org/show_bug.cgi?id=112113

        Reviewed by Alexander Pavlov.

        Updated handlers missed in first patch. Added JSDocs to all handlers.

        * inspector/front-end/Panel.js: Fixed JSDocs.
        * inspector/front-end/CallStackSidebarPane.js:
        Added return values. Added JSDocs.
        * inspector/front-end/ScriptsPanel.js: Ditto.
        * inspector/front-end/GoToLineDialog.js: Added JSDocs.
        * inspector/front-end/TimelinePanel.js: Ditto.

2013-03-12  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] DisplayRefreshMonitor: rename m_timestamp back to m_monotonicAnimationStartTime
        https://bugs.webkit.org/show_bug.cgi?id=112139

        Reviewed by Rob Buis.

        This changed in r131131, but it was accidentally renamed back in r144465.

        * platform/graphics/blackberry/DisplayRefreshMonitorBlackBerry.cpp:
        (WebCore::DisplayRefreshMonitor::displayLinkFired):

2013-03-12  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] FontPlatformData: HarfBuzz renaming
        https://bugs.webkit.org/show_bug.cgi?id=112142

        Reviewed by Rob Buis.

        When the old HarfBuzz code was removed in r141291,
        HarfBuzzNGFace.h was renamed to HarfBuzzFace.h and m_harfbuzzFace
        was renamed to m_harfBuzzFace.

        These changes need to be reflected in the BlackBerry port.

        * platform/graphics/blackberry/FontPlatformDataBlackBerry.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::harfBuzzFace):

2013-03-12  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] FontCacheBlackBerry: return PassRefPtr<SimpleFontData>
        https://bugs.webkit.org/show_bug.cgi?id=112022

        Reviewed by Rob Buis.

        FontData functions return PassRefPtr since r130160.

        * platform/graphics/blackberry/FontCacheBlackBerry.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/blackberry/SimpleFontDataBlackBerry.cpp:
        (WebCore::SimpleFontData::createScaledFontData):

2013-03-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Fix checkContentUpdated behavior in UISourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=112037

        Reviewed by Alexander Pavlov.

        UISourceCode.checkContentUpdated now saves last updated content that was loaded and rejected
        by user on the per-file basis (only the last one was saved currently).

        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate.prototype.innerCallback):
        (WebInspector.FileSystemProjectDelegate.prototype.requestFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype.canSetFileContent):
        (WebInspector.FileSystemWorkspaceProvider.prototype._fileSystemAdded):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleProjectDelegate.prototype.canSetFileContent):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.checkContentUpdated.contentLoaded):
        (WebInspector.UISourceCode.prototype.checkContentUpdated):
        (WebInspector.UISourceCode.prototype._commitContent):
        (WebInspector.UISourceCode.prototype.addRevision):
        (WebInspector.UISourceCode.prototype.commitWorkingCopy):
        * inspector/front-end/Workspace.js:
        (WebInspector.ProjectDelegate.prototype.canSetFileContent):
        (WebInspector.Project.prototype.canSetFileContent):

2013-03-12  Tomas Popela  <tpopela@redhat.com>

        [Gtk] NBSP are not replaced when using X clipboard
        https://bugs.webkit.org/show_bug.cgi?id=112118

        Reviewed by Martin Robinson.

        We're not replacing nbsp with spaces when using X clipboard
        (Shift+Insert or middle mouse button).

        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::text):

2013-03-12  Florin Malita  <fmalita@chromium.org>

        SVG Pattern pixelated on inline SVG with CSS transforms
        https://bugs.webkit.org/show_bug.cgi?id=111587

        Reviewed by Dirk Schulze.

        When calculating the resolution for resource image buffers, we need to also consider CSS
        transforms. This patch updates calculateTransformationToOutermostSVGCoordinateSystem()
        (renamed to calculateTransformationToOutermostCoordinateSystem) to include the affine
        component from CSS transforms by walking the parent layer tree.        

        Test: svg/custom/resources-css-scaled.html

        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::calculateScreenFontSizeScalingFactor):
        (WebCore::SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem):
        * rendering/svg/SVGRenderingContext.h:
        (SVGRenderingContext):

2013-03-12  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add html canvas memory details to the native memory overview
        https://bugs.webkit.org/show_bug.cgi?id=112123

        Reviewed by Alexander Pavlov.

        Show memory occupied vby HTMLCanvasElements under Image category
        in the native memory overview.

        * inspector/front-end/NativeHeapSnapshot.js:
        (WebInspector.NativeHeapSnapshot.prototype.images.getImageName):
        (WebInspector.NativeHeapSnapshot.prototype.images.getCanvasName):
        (WebInspector.NativeHeapSnapshot.prototype.images):
        (WebInspector.NativeHeapSnapshot.prototype._addNodes):

2013-03-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: ResourceScriptFile diverged state should be correctly reset after debugger reset.
        https://bugs.webkit.org/show_bug.cgi?id=112036

        Reviewed by Alexander Pavlov.

        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptFile):
        (WebInspector.ResourceScriptFile.prototype._workingCopyChanged):
        (WebInspector.ResourceScriptFile.prototype._maybeDirtyChanged):

2013-03-12  Marja Hölttä  <marja@chromium.org>

        [V8] Move the GetRawTemplate and HasInstance logic from generated bindings to V8PerIsolateData
        https://bugs.webkit.org/show_bug.cgi?id=112136

        Reviewed by Kentaro Hara.

        When templates for main world and non-main worlds will be separated (bug
        111724), HasInstance logic will be a bit ugly: We cannot determine the
        world type on the fly, because during GC there is no entered context,
        and HasInstance is called during GC. So we need to check against
        templates from all the worlds. It's cleaner if that logic is in
        V8PerIsolateData.

        No new tests (Updated existing bindings tests).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateImplementation):
        (CreateCustomSignature):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetTemplate):
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetTemplate):
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetTemplate):
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (V8TestTypedefs):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::rawTemplate):
        (WebCore):
        (WebCore::V8PerIsolateData::hasInstance):
        * bindings/v8/V8PerIsolateData.h:
        (V8PerIsolateData):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):

2013-03-12  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Fix JSDocs in TimelinePanel.js
        https://bugs.webkit.org/show_bug.cgi?id=112137

        Reviewed by Vsevolod Vlasov.

        Fix parameter type annotation of _loadFromFile.

        * inspector/front-end/TimelinePanel.js: Fixed JSDoc.

2013-03-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add a test for Workspace add/removeMapping methods.
        https://bugs.webkit.org/show_bug.cgi?id=112035

        Reviewed by Alexander Pavlov.

        Test: inspector/debugger/file-system-project-mapping.html

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._mapFileSystemToNetwork.mapFileSystemToNetwork):
        (WebInspector.ScriptsPanel.prototype._mapFileSystemToNetwork):
        (WebInspector.ScriptsPanel.prototype._mapNetworkToFileSystem.mapNetworkToFileSystem):
        (WebInspector.ScriptsPanel.prototype._mapNetworkToFileSystem):
        * inspector/front-end/Workspace.js:
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Workspace.prototype.addMapping):

2013-03-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: SourceFrames are leaking on reload.
        https://bugs.webkit.org/show_bug.cgi?id=111961

        Reviewed by Alexander Pavlov.

        Added dispose method on UISourceCodeFrame.
        Scripts panel now calls dispose when SourceFrame is removed and JavaScriptSourceFrame
        could remove breakpoint manager listeners in it.
        TabbedEditorContainer does not call viewForFile other than in appendFileTab methods to 
        avoid recreating SourceFrame for uiSourceCode when it was already removed.

        Test: inspector/debugger/breakpoint-manager-listeners-count.html

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.dispose):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype._addScrollAndSelectionListeners):
        (WebInspector.TabbedEditorContainer.prototype._removeScrollAndSelectionListeners):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        * inspector/front-end/UISourceCodeFrame.js:
        (WebInspector.UISourceCodeFrame.prototype.dispose):

2013-03-12  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Elements] Unable to undo "Edit as HTML" changes in the editor
        https://bugs.webkit.org/show_bug.cgi?id=112119

        Reviewed by Vsevolod Vlasov.

        No new tests, a UI change.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleShortcut): Do not undo/redo DOM/CSS changes if editing DOM text.
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.editing): Added.

2013-03-12  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] there are bugs in TokenHighlight feature
        https://bugs.webkit.org/show_bug.cgi?id=112039

        Reviewed by Vsevolod Vlasov.

        Fix token highlight in codeMirror experiment
        - rewrite token highlight overlay mode to highlight words, not
        substrings
        - add workaround to avoid selection of already selected word

        No new tests.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype._cursorChange):
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype._removeHighlight):
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype.nextToken):
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype._addHighlight):
        * inspector/front-end/cm/cmdevtools.css:
        (.line-with-selection .cm-column-with-selection):

2013-03-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145514.
        http://trac.webkit.org/changeset/145514
        https://bugs.webkit.org/show_bug.cgi?id=112134

        breaks Mac build (Requested by falken on #webkit).

        * dom/Element.cpp:
        * dom/Element.h:
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        * dom/GestureEvent.cpp:
        (WebCore::GestureEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/Node.cpp:
        (WebCore):
        (WebCore::Node::isInert):
        (WebCore::Node::handleLocalEvents):
        (WebCore::Node::disabled):
        (WebCore::Node::willRespondToMouseMoveEvents):
        (WebCore::Node::willRespondToMouseClickEvents):
        (WebCore::Node::willRespondToTouchEvents):
        * dom/Node.h:
        (Node):

2013-03-12  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] highlight matching braces
        https://bugs.webkit.org/show_bug.cgi?id=112041

        Reviewed by Vsevolod Vlasov.

        Add "matchbrackets" add-on to CodeMirror text editor add override
        default styles for matched and unmatched braces.

        No new tests.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/cm/cmdevtools.css:
        (.CodeMirror-matchingbracket):
        (.CodeMirror-nonmatchingbracket):
        * inspector/front-end/cm/matchbrackets.js: Added.
        (.):

2013-03-12  Matt Falkenhagen  <falken@chromium.org>

        Refactoring: Pull Node::disabled() and Node::isInert() down to Element.
        https://bugs.webkit.org/show_bug.cgi?id=112085

        Reviewed by Hajime Morrita.

        Node is too low a level for these methods.

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::disabled):
        (WebCore):
        (WebCore::Element::isInert):
        * dom/Element.h:
        (Element):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        * dom/GestureEvent.cpp:
        (WebCore::GestureEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/Node.cpp:
        (WebCore::Node::handleLocalEvents):
        (WebCore::Node::willRespondToMouseMoveEvents):
        (WebCore::Node::willRespondToMouseClickEvents):
        (WebCore::Node::willRespondToTouchEvents):
        * dom/Node.h:
        (Node):

2013-03-12  Marja Hölttä  <marja@chromium.org>

        [V8] Get rid of function-level static FunctionTemplates in generated bindings code
        https://bugs.webkit.org/show_bug.cgi?id=111971

        Reviewed by Jochen Eisinger.

        In the future we'll create and store function templates for main world
        and non-main worlds separately (see bug 111724), having function
        templates as static variables inside functions will break the
        functionality.

        No new tests (updated the bindings test expectations).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::V8PerIsolateData):
        (WebCore::V8PerIsolateData::privateTemplate):
        (WebCore):
        * bindings/v8/V8PerIsolateData.h:
        (V8PerIsolateData):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):

2013-03-12  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] Implement RuleCollector
        https://bugs.webkit.org/show_bug.cgi?id=109916

        Reviewed by Antti Koivisto.

        Implemented rule collector for an element and collector for a page.
        Not all members in class State are required entire while resolving
        a style.

        No new tests, because just refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        Added ElementRuleCollector and PageRuleCollector.
        * css/DocumentRuleSets.cpp:
        (WebCore::ShadowDistributedRules::collectMatchRequests):
        Since behaviorAtBoundary is a state owned by ElementRuleCollector,
        removed from here.
        * css/DocumentRuleSets.h:
        (WebCore::ShadowDistributedRules::isEmpty):
        Added to quickly check whether there exist any ShadowDistributedRules
        or not.
        * css/ElementRuleCollector.cpp: Copied from Source/WebCore/css/StyleResolver.cpp.
        (WebCore):
        (WebCore::ElementRuleCollector::matchedResult):
        (WebCore::ElementRuleCollector::matchedRuleList):
        (WebCore::ElementRuleCollector::addMatchedRule):
        (WebCore::ElementRuleCollector::clearMatchedRules):
        (WebCore::ElementRuleCollector::ensureRuleList):
        (WebCore::ElementRuleCollector::addElementStyleProperties):
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::collectMatchingRulesForRegion):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::matchScopedAuthorRules):
        (WebCore::ElementRuleCollector::matchHostRules):
        (WebCore::ElementRuleCollector::matchShadowDistributedRules):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchUserRules):
        (WebCore::ElementRuleCollector::matchUARules):
        (WebCore::ElementRuleCollector::ruleMatches):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        (WebCore::ElementRuleCollector::sortMatchedRules):
        (WebCore::ElementRuleCollector::matchAllRules):
        Moved these methods from StyleResolver to this class.
        (WebCore::ElementRuleCollector::hasAnyMatchingRules):
        This method is used for checking whether a given element can share
        a cache.
        * css/ElementRuleCollector.h: Copied from Source/WebCore/css/StyleResolver.h.
        (WebCore):
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        Use styleResolver instance to initialize its member variables, i.e.
        SelectorFilter, RuleSets, InspectorCSSOMWrappers, and
        StyleScopedResolver.
        (ElementRuleCollector):
        (WebCore::ElementRuleCollector::setMode):
        (WebCore::ElementRuleCollector::setPseudoStyleRequest):
        (WebCore::ElementRuleCollector::setSameOriginOnly):
        (WebCore::ElementRuleCollector::setRegionForStyling):
        Mode, SameOriginOnly, RegionForStyling are only used while collecting
        matched rules.
        (WebCore::ElementRuleCollector::setMedium):
        Need to know which default stylesheet should be looked up.
        (WebCore::ElementRuleCollector::document):
        * css/PageRuleCollector.cpp: Copied from Source/WebCore/css/StyleResolver.cpp.
        (WebCore::comparePageRules):
        (WebCore::PageRuleCollector::isLeftPage):
        (WebCore::PageRuleCollector::isFirstPage):
        (WebCore::PageRuleCollector::pageName):
        (WebCore::PageRuleCollector::matchAllPageRules):
        (WebCore::PageRuleCollector::matchPageRules):
        (WebCore::checkPageSelectorComponents):
        (WebCore::PageRuleCollector::matchPageRulesForList):
        Moved from StyleResolver.
        * css/PageRuleCollector.h: Copied from Source/WebCore/css/StyleResolver.h.
        (WebCore):
        (WebCore::PageRuleCollector::PageRuleCollector):
        (PageRuleCollector):
        (WebCore::PageRuleCollector::matchedResult):
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::MatchResult::addMatchedProperties):
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::applyMatchedProperties):
        * css/StyleResolver.h:
        (WebCore::MatchRequest::MatchRequest):
        Removed behaviorAtBoundary. Instead, ElementRuleCollector have the
        state.
        (MatchRequest):
        (WebCore::StyleResolver::selectorFilter):
        Added to obtain SelectorFilter in ElementRuleCollector's constructor.
        (StyleResolver):
        (MatchResult):
        (WebCore::StyleResolver::State::State):
        To pass ASSERT in StyleResolver::applyProperties, need to keep
        m_regionForStyling.
        (State):
        (WebCore::StyleResolver::State::regionForStyling):
        (WebCore::StyleResolver::State::useSVGZoomRules):
        (WebCore::StyleResolver::hasSelectorForId):
        (WebCore):
        (WebCore::checkRegionSelector):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willMatchRule):
        Removed StyleResolver from its parameter list. Instead, added
        InspectorCSSOMWrappers and DocumentStyleSheetCollection.
        * inspector/InspectorCSSAgent.h:
        (WebCore):
        (InspectorCSSAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willMatchRule):

2013-03-12  Floris Bos  <bos@je-eigen-domein.nl>

        [Qt] WebKit fails to compile if EGL headers are not in default INCLUDEPATH
        https://bugs.webkit.org/show_bug.cgi?id=111859

        Reviewed by Jocelyn Turcotte.

        The 3D graphics code wants to include EGL header files.
        But on some platforms such as the Raspberry Pi those are not in /usr/include
        but in another folder.
        Fix adds "egl" to CONFIG when OpenGL ES2 is used, so the right include
        paths are added.

        * WebCore.pri:

2013-03-12  Mike West  <mkwst@chromium.org>

        XSSAuditor should send only one console error when blocking a page.
        https://bugs.webkit.org/show_bug.cgi?id=110733

        Reviewed by Daniel Bates.

        Currently, we send two console errors when XSSAuditor blocks a page:
        "Refused to execute a JavaScript script. Source code of script found
        within request.\n", and "Entire page will be blocked.".

        We should only send one message, tuning it properly for the context, and
        including the URL of the page effected by the XSSAuditor's work.

        Covered by rebaselines of all the XSSAuditor and 'reflected-xss' tests.

        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditor.h:
        (WebCore::XSSAuditor::XSSAuditor):
            Add two booleans to track the headers used to set the XSSAuditor state.
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
            Add detail about the header status to the constructed XSSInfo object.
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::buildConsoleError):
            Move message construction out into a separate inlined function, as
            it's becoming complex.
        (WebCore::XSSAuditorDelegate::didBlockScript):
            Fold the "Entire page will be blocked" message into the main console
            error.
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::create):
        (WebCore::XSSInfo::XSSInfo):
            Add detail about header status to XSSInfo in order to correctly
            construct the console error.

2013-03-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145494.
        http://trac.webkit.org/changeset/145494
        https://bugs.webkit.org/show_bug.cgi?id=112117

        Breaks Chromium Mac (Requested by pfeldman on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::V8PerIsolateData):
        * bindings/v8/V8PerIsolateData.h:
        (V8PerIsolateData):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):

2013-03-12  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add memory instrumentation for ImageLoader
        https://bugs.webkit.org/show_bug.cgi?id=112115

        Reviewed by Alexander Pavlov.

        Added memory instrumentation to ImageLoader. CachedImage referenced
        by the loader is reported as having retaining reference. This allows
        to see in the native memory graph CachedImages that are not reachable
        from MemoryCache but referenced by HTMLImageElement.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::reportMemoryUsage):
        (WebCore):
        * loader/ImageLoader.h:
        (ImageLoader):

2013-03-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Broken shortcuts in Snippets SourceFrame
        https://bugs.webkit.org/show_bug.cgi?id=112038

        Reviewed by Pavel Feldman.

        * inspector/front-end/SnippetJavaScriptSourceFrame.js:
        (WebInspector.SnippetJavaScriptSourceFrame):
        (WebInspector.SnippetJavaScriptSourceFrame.prototype._onKeyDown):

2013-03-12  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Timeline] File selector control becomes visible on "tab" navigation.
        https://bugs.webkit.org/show_bug.cgi?id=111710

        Reviewed by Pavel Feldman.

        Solution: Exclude file selector control from tab-navigation flow.

        * inspector/front-end/FileUtils.js: Set tab-index to control.
        * inspector/front-end/TimelinePanel.js: Remove duplicating code.
        * inspector/front-end/inspector.css:
        (.status-bar-item): Make scroll height equal to offset height.

2013-03-12  Marja Hölttä  <marja@chromium.org>

        [V8] Get rid of function-level static FunctionTemplates in generated bindings code
        https://bugs.webkit.org/show_bug.cgi?id=111971

        Reviewed by Kentaro Hara.

        In the future we'll create and store function templates for main world
        and non-main worlds separately (see bug 111724), having function
        templates as static variables inside functions will break the
        functionality.

        No new tests (updated the bindings test expectations).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::V8PerIsolateData):
        (WebCore::V8PerIsolateData::privateTemplate):
        (WebCore):
        * bindings/v8/V8PerIsolateData.h:
        (V8PerIsolateData):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):

2013-03-12  Tien-Ren Chen  <trchen@chromium.org>

        Need to notify ScrollingCoordinator when frame scrollbars are destroyed
        https://bugs.webkit.org/show_bug.cgi?id=112104

        Reviewed by James Robinson.

        Need to notify ScrollingCoordinatorChromium whenever m_layerForHorizontalScrollbar /
        m_layerForVerticalScrollbar changes, for correct lifetime management.

        No new tests. Difficult to test lifetime management internal to ScrollingCoordinatorChromium.

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

2013-03-11  Simon Fraser  <simon.fraser@apple.com>

        We'll get there eventually.

        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp:

2013-03-11  Simon Fraser  <simon.fraser@apple.com>

        Fumbled adding new files to the vcproj. Fixing.

        * WebCore.vcproj/WebCore.vcproj:

2013-03-11  Simon Fraser  <simon.fraser@apple.com>

        Fix the Windows build by providing implementations of PlatformCAFilters::setFiltersOnLayer(),
        PlatformCAFilters::numAnimatedFilterProperties() and PlatformCAFilters::animatedFilterPropertyName(),
        adding PlatformCAFiltersWin.cpp to the vcproj.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/ca/PlatformCAFilters.h:
        (PlatformCAFilters):
        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp: Copied from Source/WebCore/platform/graphics/ca/PlatformCAFilters.h.
        (PlatformCAFilters::setFiltersOnLayer):
        (PlatformCAFilters::numAnimatedFilterProperties):
        (PlatformCAFilters::animatedFilterPropertyName):

2013-03-11  Jochen Eisinger  <jochen@chromium.org>

        Don't create multiple user gesture indicators when forwarding events to sub frames
        https://bugs.webkit.org/show_bug.cgi?id=111923

        Reviewed by Adam Barth.

        Ports that implement consumable user gestures depend on a single user
        gesture indicator being created in response to a single user gesture.

        Test: platform/chromium/fast/events/popup-allowed-from-gesture-only-once-iframes.html

        * dom/UserGestureIndicator.cpp:
        (WebCore::isDefinite):
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        (WebCore::UserGestureIndicator::processingUserGesture):
        * dom/UserGestureIndicator.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleTouchEvent):

2013-03-11  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build.

        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:

2013-03-11  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix after http://trac.webkit.org/changeset/145472.

        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::colorMatrixValueForFilter):

2013-03-11  Takashi Sakamoto  <tasak@google.com>

        [CSS] shadow from radius has wrong render in webkit
        https://bugs.webkit.org/show_bug.cgi?id=99928

        Reviewed by Simon Fraser.

        No rounded cornder should be expanded in the mixed case, i.e. some
        corners are rounded, but others are not rounded.
        Need to look at each corner independently,
        i.e. top-left, top-right, bottom-left and bottom-right, and
        to expand corners whose width and height are larger than 0.

        Test: fast/box-shadow/box-shadow-with-zero-radius.html

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::Radii::expand):

2013-03-11  Simon Fraser  <simon.fraser@apple.com>

        [CA] Animations of CSS filters don't work correctly
        https://bugs.webkit.org/show_bug.cgi?id=111905

        Reviewed by Dean Jackson.

        Fix various issues with transitions of composited filters on Mac,
        most of which stemmed from the conversion to use CAFilter.
        
        Put the Mac CA filter-related code into a new file, PlatformCAFilters,
        to group code that creates filter properties into a single place.
        
        Animations of CIFilters using multiple values never worked correctly,
        because we would clobber all but the last property for each filter,
        so fix that.
        
        Changes in the moved filter code:
            - Made use of sepiaFullConstants in the CIFilter and CAFilter code.
            - For CI, return CIVectors instead of NSArrays of NSNumbers.
            - Fudge the inputColor for the CI grayscale filter to better match software filters.
            - fix some cases where the behavior was wrong in the isDefault() case.

        * WebCore.xcodeproj/project.pbxproj: Add PlatformCAFilters.h, PlatformCAFiltersMac.mm.
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::animationNameForTransition): This function was creating a string
        containing non-ASCII characters.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::animationIdentifier): To handle CIFilter animations, we need to tack another
        index onto the animation identifier, since some animations require animating multiple
        properties of the same CIFilter. Add "subIndex" for this.
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations): Ditto.
        (WebCore::GraphicsLayerCA::updateAnimations): Ditto.
        (WebCore::GraphicsLayerCA::setAnimationOnLayer): Ditto.
        (WebCore::GraphicsLayerCA::removeCAAnimationFromLayer): Ditto.
        (WebCore::GraphicsLayerCA::pauseCAAnimationOnLayer): Ditto.
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes): Ditto.
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations): Ditto.
        * platform/graphics/ca/GraphicsLayerCA.h: Ditto.
        (WebCore::GraphicsLayerCA::LayerPropertyAnimation::LayerPropertyAnimation):
        (LayerPropertyAnimation):
        * platform/graphics/ca/PlatformCAAnimation.h:
        (PlatformCAAnimation): Functions moved.
        * platform/graphics/ca/PlatformCAFilters.h: Added.
        (PlatformCAFilters):
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::setFromValue):
        (PlatformCAAnimation::setToValue):
        (PlatformCAAnimation::setValues):
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm: Added.
        (PlatformCAFilters::filterValueForOperation):
        (PlatformCAFilters::colorMatrixValueForFilter):
        (PlatformCAFilters::numAnimatedFilterProperties):
        (PlatformCAFilters::animatedFilterPropertyName):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer):
        (PlatformCALayer::addAnimationForKey):
        (PlatformCALayer::setFilters):
        (PlatformCALayer::filtersCanBeComposited):

2013-03-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145462.
        http://trac.webkit.org/changeset/145462
        https://bugs.webkit.org/show_bug.cgi?id=112097

        Compilation failure in PluginView.cpp (Requested by jamesr_ on
        #webkit).

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::canSetFocusAttribute):
        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::isLegacyAppleStyleSpan):
        (WebCore::isEmptyFontTag):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isMailPasteAsQuotationNode):
        (WebCore::haveSameTagName):
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::suggestions):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::isInHead):
        (WebCore::isInBody):
        (WebCore::isInFoot):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchNode):
        * page/PageSerializer.cpp:
        (WebCore::SerializerMarkupAccumulator::appendCustomAttributes):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValue):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintContents):
        (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::name):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::mediaElement):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::autosaveName):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textFormControlElement):
        (WebCore::updateUserModifyProperty):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::updateFromElement):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::updateFromElement):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::endElementNs):

2013-03-11  Alexey Proskuryakov  <ap@apple.com>

        Move SharedWorkerRepository functions out of DefaultSharedWorkerRepository
        https://bugs.webkit.org/show_bug.cgi?id=100418

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added SharedWorkerRepository.cpp.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        Chromium uses WebKit/chromium/src/SharedWorkerRepository.cpp instead of
        WebCore/workers/DefaultSharedWorkerRepository.cpp. Not sure why it's added and
        then excluded, but did the same with the new SharedWorkerRepository.cpp, which
        just contains some code moved from that file.

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::load): Removed a PLATFORM(CHROMIUM) clause,
        chromium doesn't compile this file.
        (WebCore::DefaultSharedWorkerRepository::connectToWorker): Added a FIXME about
        seemingly wrong code.

        * workers/SharedWorkerRepository.cpp: Added.
        (WebCore::SharedWorkerRepository::isAvailable):
        (WebCore::SharedWorkerRepository::connect):
        (WebCore::SharedWorkerRepository::documentDetached):
        (WebCore::SharedWorkerRepository::hasSharedWorkers):
        Moved from DefaultSharedWorkerRepository.cpp, because this is part of SharedWorkerRepository.

2013-03-11  Adam Barth  <abarth@webkit.org>

        Make BackgroundHTMLParser work with doc.writes that enter or leave foreign content
        https://bugs.webkit.org/show_bug.cgi?id=109764

        Reviewed by Eric Seidel.

        Previously, we were not reseting the state of the
        HTMLTreeBuilderSimulator when we failed speculative parsing. This had a
        number of observable consequences, including not parsing CDATA sections
        correctly when document.write caused us to enter foreign content.

        Test: fast/parser/document-write-svg-cdata.html

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::resumeFrom):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        * html/parser/BackgroundHTMLParser.h:
        (Checkpoint):
        (BackgroundHTMLParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::validateSpeculations):
        (WebCore::HTMLDocumentParser::didFailSpeculation):
        * html/parser/HTMLDocumentParser.h:
        (ParsedChunk):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::namespaceURI):
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::options):
        (WebCore::HTMLTreeBuilder::openElements):
        (HTMLTreeBuilder):
        * html/parser/HTMLTreeBuilderSimulator.cpp:
        (WebCore::HTMLTreeBuilderSimulator::stateFor):
        (WebCore):
        * html/parser/HTMLTreeBuilderSimulator.h:
        (WebCore):
        (WebCore::HTMLTreeBuilderSimulator::state):
        (WebCore::HTMLTreeBuilderSimulator::setState):
        (HTMLTreeBuilderSimulator):

2013-03-11  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* functions.
        https://bugs.webkit.org/show_bug.cgi?id=112072

        Reviewed by Philip Rogers.

        to* functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::canSetFocusAttribute):
        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::isLegacyAppleStyleSpan):
        (WebCore::isEmptyFontTag):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isMailPasteAsQuotationNode):
        (WebCore::haveSameTagName):
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::suggestions):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::isInHead):
        (WebCore::isInBody):
        (WebCore::isInFoot):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchNode):
        * page/PageSerializer.cpp:
        (WebCore::SerializerMarkupAccumulator::appendCustomAttributes):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValue):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintContents):
        (WebCore::RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::name):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::mediaElement):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::autosaveName):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textFormControlElement):
        (WebCore::updateUserModifyProperty):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::updateFromElement):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::updateFromElement):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::endElementNs):

2013-03-11  Philip Rogers  <pdr@google.com>

        Replace static_casts for SVGSVGElement and SVGStopElement
        https://bugs.webkit.org/show_bug.cgi?id=111651

        Reviewed by Stephen Chenney.

        toSVGSVGElement and toSVGStopElement are preferred over static_casts because bad casts
        can be caught on our testing infrastructure. This patches replaces all static_casts for
        SVGSVGElement and SVGStopElement with toSVGSVGElement and toSVGStopElement, respectively.

        Additionaly, this patch renames SVGElement::isSVG to SVGElement::isSVGSVGElement to
        remove ambiguity for callers who may confuse this with isSVGElement.

        No new tests as this is covered with existing tests.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeIntrinsicRatioInformation):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::buildLocalToBorderBoxTransform):
        (WebCore::RenderSVGRoot::hasRelativeDimensions):
        (WebCore::RenderSVGRoot::hasRelativeIntrinsicLogicalWidth):
        (WebCore::RenderSVGRoot::hasRelativeLogicalHeight):
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::determineIfLayoutSizeChanged):
        (WebCore::RenderSVGViewportContainer::calcViewport):
        (WebCore::RenderSVGViewportContainer::viewportTransform):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::rootElement):
        (WebCore::SVGDocument::childShouldCreateRenderer):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::ownerSVGElement):
        * svg/SVGElement.h:
        (WebCore::SVGElement::isSVGSVGElement):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGSVGElement.h:
        (WebCore):
        (WebCore::toSVGSVGElement):
        * svg/SVGStopElement.h:
        (WebCore::toSVGStopElement):
        (WebCore):

2013-03-11  Tony Chang  <tony@chromium.org>

        Small code cleanup in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=112076

        Reviewed by Ojan Vafai.

        No new tests, this is a refactor and existing tests in css3/flexbox should pass.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Remove unused param from repositionLogicalHeightDependentFlexItems.
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems): Remove unused param from repositionLogicalHeightDependentFlexItems.
        The clientLogicalBottom can't have changed in this time (the only thing we've done is align children).
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes): Just call layout() if we marked the flexitem as needing layout.
        (WebCore::RenderFlexibleBox::applyStretchAlignmentToChild): Just call layout() if we marked the flexitem as needing layout.
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox): Remove unused param from repositionLogicalHeightDependentFlexItems.

2013-03-11  Jochen Eisinger  <jochen@chromium.org>

        Rename DefinitelyProcessingUserGesture to DefinitelyProcessingNewUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=111959

        Reviewed by Alexey Proskuryakov.

        The rationale is that the UserGestureIndicator will increase the number
        of consumable user gestures when it's invoked with what is now
        DefinitelyProcessingNewUserGesture.

        In a follow-up change I will reintroduce DefinitelyProcessingUserGesture
        which will only increase the consumable user gesture count if we are
        not already processing a user gesture.

        No new tests, no change in functionality.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::increment):
        (WebCore::AccessibilityNodeObject::decrement):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeScript):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInWorld):
        * bindings/v8/NPV8Object.cpp:
        (_NPN_EvaluateHelper):
        * dom/UserGestureIndicator.cpp:
        (WebCore::isDefinite):
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        (WebCore::UserGestureIndicator::processingUserGesture):
        * dom/UserGestureIndicator.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::contextMenuItemSelected):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledURLNavigation::fire):
        (WebCore::ScheduledURLNavigation::didStartTimer):
        (WebCore::ScheduledRedirect::fire):
        (WebCore::ScheduledRefresh::fire):
        (WebCore::ScheduledHistoryNavigation::fire):
        (WebCore::ScheduledFormSubmission::fire):
        (WebCore::ScheduledFormSubmission::didStartTimer):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleTouchEvent):
        * platform/chromium/PopupContainer.cpp:
        (WebCore::PopupContainer::handleMouseDownEvent):
        (WebCore::PopupContainer::handleMouseMoveEvent):
        (WebCore::PopupContainer::handleMouseReleaseEvent):
        (WebCore::PopupContainer::handleWheelEvent):
        (WebCore::PopupContainer::handleKeyEvent):

2013-03-11  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        Ruby text is incorrectly positioned when its writing-mode is changed to vertical after layout is done
        https://bugs.webkit.org/show_bug.cgi?id=96592

        Reviewed by Hajime Morrita.

        Fixed logical left of RenderRubyText is not cleared.

        This causes trouble when RenderRubyTest is laid out vertically after horizontally.
        Horizontal layout set logical top(== y).
        Vertical layout don't set logical left(== y).
        RenderRubyText::y remain old one.
        We clear old RenderRubyText::y at the first part of layout().

        Test: fast/writing-mode/ruby-text-logical-left.html

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout): Reset logicalLeft not to reuse old one.

2013-03-11  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        [css3-text] Add partial parsing support for text-underline-position property from CSS3 Text
        https://bugs.webkit.org/show_bug.cgi?id=102491

        Reviewed by Julien Chaffraix.

        This patch extends the existing parsing to support 'auto', 'alphabetic' and 'under'. We don't fully match
        the specification as we don't support [ left | right ] and this is left for another implementation
        as the rendering will need to be added.

        Test: fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTextUnderlinePosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextUnderlinePosition):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        Added parsing-related checks for text-underline-position property.
        * css/CSSPropertyNames.in: Added '-webkit-underline-position' property.
        * css/CSSValueKeywords.in:
        * css/SVGCSSValueKeywords.in:
        * css/StyleBuilder.cpp:
        (ApplyPropertyTextUnderlinePosition):
        (WebCore::ApplyPropertyTextUnderlinePosition::applyValue):
        (WebCore::ApplyPropertyTextUnderlinePosition::createHandler):
        (WebCore::StyleBuilder::StyleBuilder):
        Set property handler for text-underline-position.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        Added support for m_textUnderlinePosition on copy constructor and operator
        assignment functions.
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData): Added m_textUnderlinePosition here as it won't be used regularly.

2013-03-11  Christian Biesinger  <cbiesinger@chromium.org>

        Hit testing should use ancestorInThisScope to get the non-shadow ancestor
        https://bugs.webkit.org/show_bug.cgi?id=112068

        Reviewed by Dimitri Glazkov.

        Tests: media/nodesFromRect-shadowContent.html

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setToNonShadowAncestor):
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        Use ancestorInThisScope which is not deprecated and which produces
        correct results for nested shadow trees (e.g. in case of <video>,
        which contains <input> elements for the controls, which themselves
        have shadow trees)

2013-03-11  Abhishek Arya  <inferno@chromium.org>

        Replace static_cast with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112045

        Reviewed by Eric Seidel.

        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::removeMethodCustom):
        (WebCore::V8HTMLOptionsCollection::indexedPropertySetter):
        * bindings/v8/custom/V8NamedNodesCollection.cpp:
        (WebCore::V8NamedNodesCollection::namedItem):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::wrap):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::pushAnchorElementDown):
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):
        (WebCore::CompositeEditCommand::splitTreeToNode):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/mac/HTMLConverter.mm:
        (+[WebHTMLConverter editingAttributedStringFromRange:]):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameContentsCompositor):
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::plugInImageElement):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::idChanged):

2013-03-11  James Robinson  <jamesr@chromium.org>

        [chromium] Use SkMatrix44 instead of WebTransformationMatrix in animation APIs
        https://bugs.webkit.org/show_bug.cgi?id=111791

        Reviewed by Adrienne Walker.

        Adds a new utility function to convert a TransformationMatrix to an SkMatrix44 and
        uses it in AnimationTranslationUtil and GraphicsLayerChromium.

        * WebCore.gypi:
        * platform/chromium/support/WebTransformationMatrix.cpp:
        (WebKit::WebTransformationMatrix::WebTransformationMatrix):
        * platform/graphics/chromium/AnimationTranslationUtil.cpp:
        (WebCore::toWebTransformOperations):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateTransform):
        (WebCore::GraphicsLayerChromium::updateChildrenTransform):
        * platform/graphics/chromium/TransformSkMatrix44Conversions.cpp:
        (WebCore::TransformSkMatrix44Conversions::convert):
        * platform/graphics/chromium/TransformSkMatrix44Conversions.h:
        (TransformSkMatrix44Conversions):

2013-03-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145435.
        http://trac.webkit.org/changeset/145435
        https://bugs.webkit.org/show_bug.cgi?id=112082

        Still does not compile (Requested by jamesr on #webkit).

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::getObjectStores):
        (WebCore::IDBBackingStore::createObjectStore):
        (WebCore::IDBBackingStore::deleteObjectStore):
        (WebCore::IDBBackingStore::getRecord):
        (WebCore::IDBBackingStore::putRecord):
        (WebCore::IDBBackingStore::clearObjectStore):
        (WebCore::IDBBackingStore::deleteRecord):
        (WebCore::IDBBackingStore::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBBackingStore::getIndexes):
        (WebCore::IDBBackingStore::createIndex):
        (WebCore::IDBBackingStore::deleteIndex):
        (WebCore::IDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBBackingStore::findKeyInIndex):
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStore::keyExistsInIndex):
        (WebCore::indexCursorOptions):
        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (DeleteIndexOperation):
        (WebCore::IDBDatabaseBackendImpl::openInternal):
        (WebCore::IDBDatabaseBackendImpl::deleteIndex):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::KeyPrefix::KeyPrefix):
        (WebCore::IDBLevelDBCoding::KeyPrefix::encode):
        (WebCore::IDBLevelDBCoding::SchemaVersionKey::encode):
        (WebCore::IDBLevelDBCoding::MaxDatabaseIdKey::encode):
        (WebCore::IDBLevelDBCoding::DataVersionKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::encode):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::encode):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::encode):
        * Modules/indexeddb/IDBLevelDBCoding.h:
        (IDBLevelDBCoding):
        (KeyPrefix):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IndexWriter::writeIndexKeys):

2013-03-11  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Protect against key prefix overflows
        https://bugs.webkit.org/show_bug.cgi?id=111138

        Reviewed by Tony Chang.

        This reworks the boundary checking for all databaseId,
        objectStoreId, and indexId, including negative and
        zero-based ids. All entrypoints into IDBLevelDBCoding
        are protected with explicit checks and all internal
        uses of KeyPrefix are protected with ASSERTs in the
        various constructors.

        Tests: WebKit unit tests IDBBackingStoreTest.cpp in WebKit/chromium

        * Modules/indexeddb/IDBBackingStore.h: Make all public methods boolean-based for errors.
        * Modules/indexeddb/IDBLevelDBCoding.h: Add methods for checking databaseId, objectStoreId, and indexId.

2013-03-11  Philip Rogers  <pdr@google.com>

        Replace static_cast<SVGStyledElement> with toSVGStyledElement()
        https://bugs.webkit.org/show_bug.cgi?id=111651

        Reviewed by Abhishek Arya.

        toSVGStyledElement is preferred over static_cast<SVGStyledElement*> because bad casts
        can be caught on our testing infrastructure. This patch replaces all
        static_cast<SVGStyledElement> instances with toSVGStyledElement.

        Additionally, this patch renames SVGElement::isStyled to SVGElement::isSVGStyledElement to
        remove a confusing overlap with html styled elements. This name differs slighly from the
        other is*() functions in SVGElement but this will be resolved up with webkit.org/b/107386.

        No new tests as this is covered with existing tests.

        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::getElementCTM):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceClipper::calculateClipContentRepaintRect):
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceMasker::calculateMaskContentRepaintRect):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren):
        * rendering/svg/SVGResources.cpp:
        (WebCore::registerPendingResource):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isTargetAttributeCSSProperty):
        (WebCore::SVGAnimationElement::computeCSSPropertyValue):
        (WebCore::SVGAnimationElement::adjustForInheritance):
        (WebCore::inheritsFromProperty):
        * svg/SVGElement.cpp:
        (WebCore::collectInstancesForSVGElement):
        (WebCore::SVGElement::isAnimatableAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGElement::isSVGStyledElement):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement):
        (WebCore::SVGElementInstance::InstanceUpdateBlocker::InstanceUpdateBlocker):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::computeCTM):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::updateRelativeLengthsInformation):
        * svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::isSVGStyledElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::selfHasRelativeLengths):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2013-03-11  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Make scrolling between pages in non-continuous modes work
        https://bugs.webkit.org/show_bug.cgi?id=111415
        <rdar://problem/12555320>

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Export ScrollableArea::scrollToOffsetWithoutAnimation.

2013-03-11  Mark Lam  <mark.lam@apple.com>

        Remove the use of the quotaMap cache in DatabaseTracker.
        https://bugs.webkit.org/show_bug.cgi?id=111805.

        Reviewed by Geoffrey Garen.

        This change is needed because using the quotaMap cache can result in
        an inaccurate read (in a multi-process system) on what database files
        are actually present on the filesystem. Instead of using the quotaMap
        cache, we rely on the tracker database and query it every time we need
        the origin/quota information.

        No new tests.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
        (WebCore::DatabaseTracker::hasEntryForOriginNoLock):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::quotaForOriginNoLock):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteOrigin):
        * Modules/webdatabase/DatabaseTracker.h:

2013-03-11  Morten Stenshorne  <mstensho@opera.com>

        Don't rely on the fact that StaticPosition happens to be defined as 0
        https://bugs.webkit.org/show_bug.cgi?id=110123

        Also made the expression slightly less convoluted.

        Reviewed by Alexey Proskuryakov.

        No new tests. This is just code cleanup.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):

2013-03-11  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix build after http://trac.webkit.org/changeset/145421.

        * html/HTMLPlugInImageElement.cpp:

2013-03-05  Ojan Vafai  <ojan@chromium.org>

        Intrinsic width keyword values don't work for tables
        https://bugs.webkit.org/show_bug.cgi?id=111515

        Reviewed by Julien Chaffraix.

        Tests: fast/css-intrinsic-dimensions/css-tables.html
               fast/css-intrinsic-dimensions/tables.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        * rendering/RenderBox.h:
        Pass in the border and padding as an argument since RenderTable needs
        to pass in a different value. Unfortunately, the math doesn't work out right
        in the positioned/replaced cases if we just pass 0. We need to pass in the correct
        border and padding and then subtract it from the result.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        Compute intrinsic widths as well as specified ones. Down the road
        we may want to consider having intrinsic width values return true for
        isSpecified.

        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        Compute intrinsic widths as well.

        (WebCore::RenderTable::computeIntrinsicLogicalWidths):
        Implement this method so that the RenderBox::computeIntrinsicLogicalWidthUsing
        gets the right intrinsic values instead of the preferred values.

        (WebCore::RenderTable::computePreferredLogicalWidths):
        * rendering/RenderTable.h:

2013-03-11  Stephen Chenney  <schenney@chromium.org>

        HTMLInputElement can delete an ImageLoader while it's still needed
        https://bugs.webkit.org/show_bug.cgi?id=110621

        Reviewed by Darin Adler.

        ImageLoader objects may fire events for HTMLInputElements that are of
        type ImageInputType that own the loader. These events may cause script
        to run that changes the type of the input element and hence causes the
        ImageLoader to be deleted, while the image loader is still processing
        the event dispatch. Bad things ensue.

        This change moves ownership of the ImageLoader from the ImageInputType
        onto the HTMLImageElement which is already protected from deletion during
        event processing.

        Test: fast/forms/image/image-error-event-modifies-type-crash.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::imageLoader): Method to return the
          ImageLoader, creating it if not already created.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::hasImageLoader): Return true if the
          ImageLoader has been created.
        (HTMLInputElement): Define ImageLoader access methods and the OwnPtr
          for the HTMLImageLoader.
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::srcAttributeChanged): Use the element's ImageLoader.
        (WebCore::ImageInputType::attach): Use the element's ImageLoader.
        (WebCore::ImageInputType::willMoveToNewOwnerDocument): Use the element's ImageLoader.
        (WebCore::ImageInputType::height): Use the element's ImageLoader.
        (WebCore::ImageInputType::width): Use the element's ImageLoader.
        * html/ImageInputType.h:
        (ImageInputType): Remove the declaration of the ImageLoader.

2013-03-11  Alok Priyadarshi  <alokp@chromium.org>

        Revert "Mark GraphicsLayers as opaque when possible"

        This reverts commit 0a4d3c2d8a0373aa9e5bd9209885137a13a7f0e0.

        REGRESSION (r143626): http://chainlove.com shows garbage tiles on Mac
        https://bugs.webkit.org/show_bug.cgi?id=112043

        Unreviewed, rolling out r143626.

        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerModelObject.h:
        (RenderLayerModelObject):

2013-03-11  Dean Jackson  <dino@apple.com>

        Plugins created during user gestures (or soon after) should not be snapshotted
        https://bugs.webkit.org/show_bug.cgi?id=111975

        Reviewed by Tim Horton.

        There are sites which create plugins in response to user actions, such as clicking
        on an image that is acting like a poster frame. In those cases we should never snapshot.

        There are some other sites which also create plugins in response to user actions,
        but don't necessarily create the content themselves. Instead they run some script
        that injects an iframe, and the frame loads a plugin. In order to make sure we don't
        snapshot in those cases, we're adding the concept of a blessed plugin. Anything that
        is created soon after a *handled* user gesture is not snapshotted. To do this we
        mark a timestamp in the document when we've called an event listener for a user
        gesture. The plugin element then compares its creation time with the most recent
        user action time.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialise new timestamp.
        (WebCore::Document::resetLastHandledUserGestureTimestamp): Sets the member variable
            to the current time.
        * dom/Document.h:
        (WebCore::Document::lastHandledUserGestureTimestamp): Getter.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners): If there were some event listeners and
            we were processing a user gesture, then reset the timestamp in the document.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Remember if we were created
            during a user gesture.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Start the plugin
            if we were created during a user gesture, or if we are close enough in time
            to a listener that fired in relation to a user gesture.
        * html/HTMLPlugInImageElement.h: New private member flag indicating if we were
            in a user gesture when constructed.

2013-03-11  Jeffrey Pfau  <jpfau@apple.com>

        List cache partitions as units instead of as their contents
        https://bugs.webkit.org/show_bug.cgi?id=111909

        Reviewed by Maciej Stachowiak.

        Not possible to test with current automated test tools, must be tested manually.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::getOriginsWithCache): List a cache item as a member of a partition, if possible

2013-03-11  Alexey Proskuryakov  <ap@apple.com>

        Chromium build fix. Forked files strike again.

        * platform/network/chromium/ResourceHandle.cpp:
        (WebCore::ResourceHandle::firstRequest):

2013-03-11  James Robinson  <jamesr@chromium.org>

        Fix typo from r145399. Rubber stamped by Abhishek Arya.

        * rendering/svg/RenderSVGViewportContainer.h:
        (WebCore::toRenderSVGViewportContainer):

2013-03-11  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Refactor the ExclusionPolygon class to enable storing multiple boundaries
        https://bugs.webkit.org/show_bug.cgi?id=111766

        Reviewed by Dirk Schulze.

        Refactored the ExclusionPolygon class to enable adding support for shape-margin and shape-padding.
        Extracted a new FloatPolygon class which is now used by ExclusionPolygon to represent the shape's
        boundary. It will be used to add m_paddedPolygon and m_marginPolygon members to ExclusionPolygon
        in a subsequent patch.

        No new tests. This is strictly a refactoring of the existing code.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatPolygon.cpp: Factored out of Source/WebCore/rendering/ExclusionPolygon.cpp.
        (WebCore::determinant):
        (WebCore::areCollinearPoints):
        (WebCore::areCoincidentPoints):
        (WebCore::isPointOnLineSegment):
        (WebCore::nextVertexIndex):
        (WebCore::FloatPolygon::FloatPolygon):
        (WebCore::FloatPolygon::findNextEdgeVertexIndex):
        (WebCore::FloatPolygon::overlappingEdges):
        (WebCore::leftSide):
        (WebCore::FloatPolygon::contains):
        (WebCore::VertexPair::overlapsRect):
        (WebCore::VertexPair::intersection):
        * platform/graphics/FloatPolygon.h: Factored out of Source/WebCore/rendering/ExclusionPolygon.h.
        (FloatPolygon):
        (WebCore::FloatPolygon::vertexAt):
        (WebCore::FloatPolygon::numberOfVertices):
        (WebCore::FloatPolygon::fillRule):
        (WebCore::FloatPolygon::edgeAt):
        (WebCore::FloatPolygon::numberOfEdges):
        (WebCore::FloatPolygon::boundingBox):
        (WebCore::FloatPolygon::isEmpty):
        (VertexPair):
        (WebCore::VertexPair::~VertexPair):
        (WebCore::VertexPair::minX):
        (WebCore::VertexPair::minY):
        (WebCore::VertexPair::maxX):
        (WebCore::VertexPair::maxY):
        (FloatPolygonEdge):
        (WebCore::FloatPolygonEdge::previousEdge):
        (WebCore::FloatPolygonEdge::nextEdge):
        (WebCore::FloatPolygonEdge::polygon):
        (WebCore::FloatPolygonEdge::vertexIndex1):
        (WebCore::FloatPolygonEdge::vertexIndex2):
        (WebCore::FloatPolygonEdge::edgeIndex):
        * rendering/ExclusionPolygon.cpp: Now depends on FloatPolygon.
        (EdgeIntersection):
        (WebCore::leftSide):
        (WebCore::computeXIntersection):
        (WebCore::getVertexIntersectionVertices):
        (WebCore::computeXIntersections):
        (WebCore::computeOverlappingEdgeXProjections):
        (WebCore::ExclusionPolygon::getExcludedIntervals):
        (WebCore::ExclusionPolygon::getIncludedIntervals):
        (WebCore::firstFitRectInPolygon):
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop):
        * rendering/ExclusionPolygon.h: Now depends on FloatPolygon.
        (WebCore::OffsetPolygonEdge::OffsetPolygonEdge):
        (ExclusionPolygon):
        (WebCore::ExclusionPolygon::ExclusionPolygon):

2013-03-11  Alexey Proskuryakov  <ap@apple.com>

        Roll out part of r144671.

        ResourceHandle::firstRequest() should not be const(), because it returns a
        non-const reference.        

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::firstRequest):
        * platform/network/ResourceHandle.h:

2013-01-30  Jer Noble  <jer.noble@apple.com>

        Mac: Cmd-w should close full screen window.
        https://bugs.webkit.org/show_bug.cgi?id=108406

        Reviewed by Darin Adler.

        Pass performClose: requests on to the owning window controller.

        * platform/mac/WebCoreFullScreenWindow.mm:
        (-[WebCoreFullScreenWindow performClose:]):

2013-03-11  Xiyuan Xia  <xiyuan@chromium.org>

        [Chromium] chromium/linux breaks expectation of select popup background due to bad UA css rules
        https://bugs.webkit.org/show_bug.cgi?id=111873

        Reviewed by Tony Chang.

        On linux the default <select> background color is too dark to use as the
        popup background color.  Last fixes:
        https://bugs.webkit.org/show_bug.cgi?id=54115 and
        https://bugs.webkit.org/show_bug.cgi?id=56023
        attempt to fix the problem by applying a lighter background using
        special <option> selector. This breaks expectations of some websites.

        This CL reverts the bad UA css rules above and provides the lighter
        background color if <select> and <option> elements are using the default
        background.

        No new tests, this tests <select> popups and can be verified by ManualTests/select-scroll.html.

        * css/themeChromiumLinux.css:
        (select):
        * platform/PopupMenuStyle.h:
        (WebCore::PopupMenuStyle::PopupMenuStyle):
        (WebCore::PopupMenuStyle::backgroundColorType):
        (PopupMenuStyle):
        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::paintRow):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemStyle):
        (WebCore::RenderMenuList::getItemBackgroundColor):
        * rendering/RenderMenuList.h:
        (RenderMenuList):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::menuStyle):
        * rendering/RenderThemeChromiumDefault.cpp:
        (WebCore::RenderThemeChromiumDefault::systemColor):

2013-03-11  James Robinson  <jamesr@chromium.org>

        Compile fix. Rubber-stamp by Eric Seidel.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):

2013-03-11  Dima Gorbik  <dgorbik@apple.com>

        Fix build for r145397 (part 2)

        Unreviewed.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::getDisplayTree):

2013-03-11  Dima Gorbik  <dgorbik@apple.com>

        Fix build for r145397

        Unreviewed.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createTextTrackDisplay):
        * html/shadow/MediaControlsChromium.cpp:
        (WebCore::MediaControlsChromium::createTextTrackDisplay):
        * html/shadow/MediaControlsGtk.cpp:
        (WebCore::MediaControlsGtk::createTextTrackDisplay):

2013-03-11  Abhishek Arya  <inferno@chromium.org>

        Add ASSERT_WITH_SECURITY_IMPLICATION to catch bad casts.
        https://bugs.webkit.org/show_bug.cgi?id=112060

        Reviewed by Eric Seidel.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::document):
        * accessibility/AccessibilityMenuList.h:
        (WebCore::toAccessibilityMenuList):
        * accessibility/AccessibilityNodeObject.h:
        (WebCore::toAccessibilityNodeObject):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::toAccessibilityRenderObject):
        * accessibility/AccessibilitySVGRoot.h:
        (WebCore::toAccessibilitySVGRoot):
        * accessibility/AccessibilitySpinButton.h:
        (WebCore::toAccessibilitySpinButton):
        (WebCore::toAccessibilitySpinButtonPart):
        * accessibility/AccessibilityTable.h:
        (WebCore::toAccessibilityTable):
        * css/StyleRule.h:
        (WebCore::toStyleRuleMedia):
        (WebCore::toStyleRuleSupports):
        (WebCore::toStyleRuleRegion):
        * dom/EventContext.h:
        (WebCore::toTouchEventContext):
        * fileapi/File.h:
        (WebCore::toFile):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::insertAdjacentElement):
        (WebCore::contextElementForInsertion):
        * html/HTMLMediaElement.h:
        (WebCore::toMediaElement):
        * html/HTMLMeterElement.h:
        (WebCore::toHTMLMeterElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::toHTMLOptionElement):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::renderProgress):
        * html/HTMLProgressElement.h:
        (WebCore::toHTMLProgressElement):
        * html/HTMLSelectElement.h:
        (WebCore::toHTMLSelectElement):
        * html/HTMLTableCellElement.cpp:
        (WebCore::toHTMLTableCellElement):
        * html/HTMLTextFormControlElement.h:
        (WebCore::toHTMLTextFormControlElement):
        * html/PluginDocument.h:
        (WebCore::toPluginDocument):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * html/shadow/HTMLContentElement.h:
        (WebCore::toHTMLContentElement):
        * html/shadow/HTMLShadowElement.h:
        (WebCore::toHTMLShadowElement):
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::hostInput):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::document):
        * rendering/InlineTextBox.h:
        (WebCore::toInlineTextBox):
        * rendering/RenderHTMLCanvas.h:
        (WebCore::toRenderHTMLCanvas):
        * rendering/RenderScrollbar.h:
        (WebCore::toRenderScrollbar):
        * rendering/RenderTextFragment.h:
        (WebCore::toRenderTextFragment):
        * rendering/mathml/RenderMathMLOperator.h:
        (WebCore::toRenderMathMLOperator):
        * rendering/svg/RenderSVGTextPath.h:
        (WebCore::toRenderSVGTextPath):
        * rendering/svg/RenderSVGViewportContainer.h:
        (WebCore::toRenderSVGViewportContainer):
        * svg/graphics/SVGImageChromeClient.h:
        (WebCore::toSVGImageChromeClient):

2013-03-11  Adam Barth  <abarth@webkit.org>

        Factor HTMLTreeBuilderSimulator out of BackgroundHTMLParser
        https://bugs.webkit.org/show_bug.cgi?id=112057

        Reviewed by Eric Seidel.

        Simulating the HTML tree builder is a separate concern from parsing on
        the background thread. We plan to re-use the tree builder simulator for
        the view-source parser, for example. Also, having the simulator as a
        separate object will make it easier to fix
        https://bugs.webkit.org/show_bug.cgi?id=109764.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore):
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):

2013-02-26  Dima Gorbik  <dgorbik@apple.com>

        Not all properties apply to the '::cue' pseudo-element
        https://bugs.webkit.org/show_bug.cgi?id=110705

        Reviewed by Eric Carlson.

        Background properties are not inherited and they were not applied to right elements.
        Now we apply all ::cue properties to WebVTT cue background box, which -webkit-media-text-track-all-nodes
        container was corresponding to. Now it has 'cue' pseudoId instead of '-webkit-media-text-track-all-nodes'.
        Property filtering is turned off for user agent rules so that we are still able to apply filtered rules
        to this container internally. m_cueContainer is removed because it is no longer needed.
        m_allDocumentNodes container was renamed to m_cueBackgroundBox.

        Existing tests modified to cover this case.

        * css/RuleSet.h:
        (WebCore::RuleData::propertyWhitelistType): disable filtering for UA rules.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sortAndTransferMatchedRules): pass the UA scope to propertyWhitelistType().
        * css/mediaControls.css: rename -webkit-media-text-track-all-nodes to 'cue'
        (video::cue): 
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/shadow/MediaControlElements.h:
        (MediaControlTextTrackContainerElement):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createTextTrackDisplay):
        * html/shadow/MediaControlsChromium.cpp:
        (WebCore::MediaControlsChromium::createTextTrackDisplay):
        * html/shadow/MediaControlsGtk.cpp:
        (WebCore::MediaControlsGtk::createTextTrackDisplay):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::TextTrackCue):
        (WebCore::TextTrackCue::updateDisplayTree):
        (WebCore::TextTrackCue::getDisplayTree):
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::element):
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::captionsStyleSheetOverride):

2013-03-11  Tim Horton  <timothy_horton@apple.com>

        ChromeClient.h doesn’t need to include RenderSnapshottedPlugIn
        https://bugs.webkit.org/show_bug.cgi?id=111981

        Reviewed by Kentaro Hara.

        * page/ChromeClient.h: Remove the extraneous #include.

2013-03-11  David Hyatt  <hyatt@apple.com>

        Vertical writing doesn't work with form controls.
        https://bugs.webkit.org/show_bug.cgi?id=70211

        Reviewed by Simon Fraser.

        This is just some basic plumbing work to make textfields and
        textareas work with vertical writing modes. This patch leaves the
        html.css override alone, so authors can't enable vertical
        writing yet.
        
        The changes consist of converting uses of x/y/width/height to
        logicalLeft/Top/Width/Height.
      
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::paddingLogicalLeft):
        (WebCore::RenderBoxModelObject::paddingLogicalRight):
        (RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::marginLogicalHeight):
        (WebCore::RenderBoxModelObject::marginLogicalWidth):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::computeControlLogicalHeight):
        (WebCore::RenderSearchField::computeLogicalHeightLimit):
        (WebCore::RenderSearchField::centerContainerIfNeeded):
        * rendering/RenderSearchField.h:
        (RenderSearchField):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textBlockLogicalHeight):
        (WebCore::RenderTextControl::textBlockLogicalWidth):
        (WebCore::RenderTextControl::computeLogicalHeight):
        (WebCore::RenderTextControl::computeIntrinsicLogicalWidths):
        (WebCore::RenderTextControl::computePreferredLogicalWidths):
        * rendering/RenderTextControl.h:
        (RenderTextControl):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::preferredContentLogicalWidth):
        (WebCore::RenderTextControlMultiLine::computeControlLogicalHeight):
        (WebCore::RenderTextControlMultiLine::layoutSpecialExcludedChild):
        * rendering/RenderTextControlMultiLine.h:
        (RenderTextControlMultiLine):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::paint):
        (WebCore::RenderTextControlSingleLine::computeLogicalHeightLimit):
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth):
        (WebCore::RenderTextControlSingleLine::computeControlLogicalHeight):
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):
        * rendering/style/RenderStyle.h:

2013-03-11  Tim Horton  <timothy_horton@apple.com>

        TiledBacking scrolling coverage can be unfairly limited for clients who do scrolling outside the web view
        https://bugs.webkit.org/show_bug.cgi?id=111958
        <rdar://problem/13356896>

        Reviewed by Darin Adler.

        Don't limit TiledBacking coverage if the client has opted into using
        its exposed rect to allow scrolling above the web view.

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustTiledBackingCoverage):

2013-03-11  Rajeev Sarvaria  <rsarvaria@blackberry.com>

        GetnUniform*vEXT (Robustness extension) passed incorrect parameter in WebGLRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=111450

        Reviewed by Rob Buis.

        Bufsize argument corrected to size in bytes instead of number of integers or floats.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::getUniform):

2013-03-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145375.
        http://trac.webkit.org/changeset/145375
        https://bugs.webkit.org/show_bug.cgi?id=112050

        Does not compile (Requested by jamesr on #webkit).

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::getObjectStores):
        (WebCore::IDBBackingStore::createObjectStore):
        (WebCore::IDBBackingStore::deleteObjectStore):
        (WebCore::IDBBackingStore::getRecord):
        (WebCore::IDBBackingStore::putRecord):
        (WebCore::IDBBackingStore::clearObjectStore):
        (WebCore::IDBBackingStore::deleteRecord):
        (WebCore::IDBBackingStore::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBBackingStore::getIndexes):
        (WebCore::IDBBackingStore::createIndex):
        (WebCore::IDBBackingStore::deleteIndex):
        (WebCore::IDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBBackingStore::findKeyInIndex):
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStore::keyExistsInIndex):
        (WebCore::indexCursorOptions):
        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (DeleteIndexOperation):
        (WebCore::IDBDatabaseBackendImpl::openInternal):
        (WebCore::IDBDatabaseBackendImpl::deleteIndex):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::KeyPrefix::KeyPrefix):
        (WebCore::IDBLevelDBCoding::KeyPrefix::encode):
        (WebCore::IDBLevelDBCoding::SchemaVersionKey::encode):
        (WebCore::IDBLevelDBCoding::MaxDatabaseIdKey::encode):
        (WebCore::IDBLevelDBCoding::DataVersionKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::encode):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::encode):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::encode):
        * Modules/indexeddb/IDBLevelDBCoding.h:
        (IDBLevelDBCoding):
        (KeyPrefix):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IndexWriter::writeIndexKeys):

2013-03-11  Adam Klein  <adamk@chromium.org>

        MutationCallback should be a WebIDL 'callback', not a [Callback] interface
        https://bugs.webkit.org/show_bug.cgi?id=91406

        Reviewed by Adam Barth.

        Spec: http://dom.spec.whatwg.org/#mutationcallback

        Besides no longer calling handleEvent methods on passed-in objects,
        throw a TypeError if a non-function is passed to the MutationObserver constructor.
        This is per WebIDL: http://www.w3.org/TR/WebIDL/#es-callback-function

        Updated MutationObserver constructor tests to exercise TypeError-throwing behavior.

        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call): Call the callback directly instead of handing off to JSCallbackData; make return value void.
        Use jsArray() to convert from WTF::Vector -> JSArray.
        * bindings/js/JSMutationCallback.h:
        (JSMutationCallback): Rename handleEvent() to call(), make it void.
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverConstructor::constructJSMutationObserver): Throw if passed a non-function.
        * bindings/v8/V8MutationCallback.cpp:
        (WebCore::V8MutationCallback::V8MutationCallback): Take a v8::Function instead of a v8::Object.
        (WebCore::V8MutationCallback::call): Call the callback directly instead of handing off to invokeCallback(); make return value void.
        Use v8Array() to convert form WTF::Vector -> JSArray.
        * bindings/v8/V8MutationCallback.h:
        (WebCore::V8MutationCallback::create): Take a v8::Function instead of a v8::Object.
        (V8MutationCallback): ditto
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCustom): Throw if passed a non-function, cast to a v8::Function when constructing callback.
        * dom/MutationCallback.h:
        (WebCore): Remove unnecessary typedef.
        (MutationCallback): Rename handleEvent() to call(), make it void.
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::deliver): Update MutationCallback method name.

2013-03-11  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Handle spanning grid items over specified grid tracks
        https://bugs.webkit.org/show_bug.cgi?id=111918

        Reviewed by Tony Chang.

        This change updates the containing block override logic to handle multiple
        spanned tracks. This makes the multiple specified grid tracks case work and
        will enable us to handle the minmax case once the computation logic has been
        updated.

        Test: fast/css-grid-layout/grid-item-spanning-resolution.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):
        (WebCore::RenderGrid::layoutGridItems):
        Updated these functions to use gridAreaBreadthForChild.

        (WebCore::RenderGrid::gridAreaBreadthForChild):
        Added this helper function to handle multiple spanned grid tracks.

        * rendering/RenderGrid.h: Added the previous function.

2013-03-11  Philip Rogers  <pdr@google.com>

        Replace SVG's static_cast<SVGElement> with toSVGElement()
        https://bugs.webkit.org/show_bug.cgi?id=111651

        Reviewed by Abhishek Arya.

        toSVGElement is preferred over static_cast because bad casts can be caught on
        our testing infrastructure. This patch replaces all static_cast<SVGElement>
        instances with toSVGElement.

        No new tests as this is just a refactoring.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::locateSharedStyle):
        * dom/Element.cpp:
        (WebCore::Element::synchronizeAllAttributes):
        (WebCore::Element::synchronizeAttribute):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::getElementCTM):
        (WebCore::RenderSVGModelObject::checkIntersection):
        (WebCore::RenderSVGModelObject::checkEnclosure):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceClipper::calculateClipContentRepaintRect):
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceMasker::calculateMaskContentRepaintRect):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::strokeWidth):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::strokeBoundingBox):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren):
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGPaintingResource):
        (WebCore::writeStyle):
        (WebCore::operator<<):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::buildCachedResources):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createRenderer):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::adjustForInheritance):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::viewportElement):
        (WebCore::SVGElement::haveLoadedRequiredResources):
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        (WebCore::SVGElement::childShouldCreateRenderer):
        * svg/SVGElement.h:
        (WebCore::toSVGElement):
        (WebCore):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::buildPendingResource):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::childShouldCreateRenderer):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::nearestViewportElement):
        (WebCore::SVGLocatable::farthestViewportElement):
        (WebCore::SVGLocatable::computeCTM):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::collectIntersectionOrEnclosureList):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::updateRelativeLengthsInformation):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::toClipPath):
        (WebCore::SVGUseElement::rendererClipChild):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::hasCycleUseReferencing):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::viewTarget):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2013-03-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] ResourceRequest::updateSoupMessage doesn't update the URI of the soup message
        https://bugs.webkit.org/show_bug.cgi?id=112040

        Reviewed by Gustavo Noronha Silva.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessage): Update the soup
        message URI with the ResourceRequest URL.

2013-03-11  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Protect against key prefix overflows
        https://bugs.webkit.org/show_bug.cgi?id=111138

        Reviewed by Tony Chang.

        This reworks the boundary checking for all databaseId,
        objectStoreId, and indexId, including negative and
        zero-based ids. All entrypoints into IDBLevelDBCoding
        are protected with explicit checks and all internal
        uses of KeyPrefix are protected with ASSERTs in the
        various constructors.

        Tests: WebKit unit tests IDBBackingStoreTest.cpp in WebKit/chromium

        * Modules/indexeddb/IDBBackingStore.h: Make all public methods boolean-based for errors.
        * Modules/indexeddb/IDBLevelDBCoding.h: Add methods for checking databaseId, objectStoreId, and indexId.

2013-03-11  Xan Lopez  <xlopez@igalia.com>

        [BlackBerry] PlatformBlackBerry.cmake: create thin AR archives
        https://bugs.webkit.org/show_bug.cgi?id=110580

        Reviewed by Rob Buis.

        Otherwise libwebcore.a goes beyond the 4Gb file size limit and the
        link phase fails.

        * PlatformBlackBerry.cmake:

2013-03-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: fix styles toolbar in the vertical mode.
        Not reviewed: swapped two lines.

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

2013-03-11  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] add token highlight feature
        https://bugs.webkit.org/show_bug.cgi?id=112009

        Reviewed by Pavel Feldman.

        Handle CodeMirror's "cursorActivity" event, check selection for being
        a word and highlight all its occurrences via CodeMirror.addOverlay method.

        No new tests.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter):
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype._cursorChange):
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype._isWord):
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype._removeHighlight):
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype._addHighlight.nextToken):
        (WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype._addHighlight):
        * inspector/front-end/cm/cmdevtools.css:
        (.cm-token-highlight):

2013-03-11  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] set indentation size according to devtools settings
        https://bugs.webkit.org/show_bug.cgi?id=111717

        Reviewed by Pavel Feldman.

        Set up codemirror indent size according to devtools settings.

        No new tests.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (.get if):
        (WebInspector.CodeMirrorTextEditor):

2013-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add per image statistics to the native memory snapshot
        https://bugs.webkit.org/show_bug.cgi?id=112011

        Reviewed by Pavel Feldman.

        Added per-image statistics to the native memory distribution table.

        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker):
        (WebInspector.HeapSnapshotWorker.prototype.createLoader):
        (WebInspector.HeapSnapshotWorker.prototype.wrapCallback):
        (WebInspector.HeapSnapshotWorker.prototype.callFactoryMethod):
        (WebInspector.HeapSnapshotProxyObject.prototype.callFactoryMethod): the method now accepts
        proxy constructor function instead of its name. This eliminates unnecessary function lookup.
        (WebInspector.HeapSnapshotLoaderProxy):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.close):
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createRetainingEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createAddedNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createDeletedNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProviderForClass):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProviderForDominator):
        (WebInspector.NativeHeapSnapshotProxy):
        (WebInspector.NativeHeapSnapshotProxy.prototype.images):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapProfileHeader.prototype.snapshotProxyConstructor):
        (WebInspector.HeapProfileHeader.prototype._setupWorker):
        * inspector/front-end/NativeHeapSnapshot.js:
        (WebInspector.NativeHeapSnapshot.prototype.images):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotNode):
        (WebInspector.NativeSnapshotNode.prototype._createSizeCell):
        (WebInspector.NativeSnapshotNode.prototype._populate):
        (WebInspector.NativeSnapshotNode.prototype._addChildrenFromGraph):
        (WebInspector.NativeSnapshotNode.prototype._addImageDetails.didLoad.didReceiveImages):
        (WebInspector.NativeSnapshotNode.prototype._addImageDetails):
        (WebInspector.NativeSnapshotProfileHeader.prototype.snapshotProxyConstructor):

2013-03-11  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Enable tiled shadow blur for inset box shadows
        https://bugs.webkit.org/show_bug.cgi?id=111736

        Reviewed by Noam Rosenthal.

        Paint inset box-shadows using the optimized tiled shadow blur, instead of
        applying shadow blur to the entire painted rect.

        This optimizes the default CSS on common pastebin sites.

        Tested by existing tests.

        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
            Must set fill color before calling clearShadow, as that might clear m_color.
        (WebCore::ShadowBlur::drawLayerPieces):
            Ditto.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):

2013-03-11  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] GraphicsLayer: rename notifySyncRequired to notifyFlushRequired
        https://bugs.webkit.org/show_bug.cgi?id=111997

        Reviewed by Rob Buis.

        This changed in r130439 but the old name was introduced again by
        mistake in r144465.

        * platform/graphics/blackberry/GraphicsLayerBlackBerry.h:
        (WebCore::GraphicsLayerBlackBerry::notifyFlushRequired):
        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::setNeedsCommit):

2013-03-11  Kent Tamura  <tkent@chromium.org>

        Inappropriate validation message for required number/date input elements
        https://bugs.webkit.org/show_bug.cgi?id=111982

        Reviewed by Kentaro Hara.

        For validation message, badInput messages should take precedence
        over valueMissing messages because users already filled out the
        field with a bad value.

        Tests: Update fast/forms/validationMessage.html

        * html/InputType.cpp:
        (WebCore::InputType::validationMessage):
        Check badInput first.

2013-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: extract common parts of native profiles
        https://bugs.webkit.org/show_bug.cgi?id=111965

        Reviewed by Alexander Pavlov.

        Extracted common parts of native profiles into NativeProfileTypeBase. Memory
        domain dispatcher is now a separate class as it is shared by two native memory
        profile types.

        Both native memory profile types now capture native heap graph.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.MemoryAgentDispatcher.instance):
        (WebInspector.NativeProfileTypeBase.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeProfileTypeBase.prototype.buttonClicked):
        (WebInspector.NativeSnapshotProfileType):
        (WebInspector.NativeSnapshotProfileHeader.prototype._didReceiveMemorySnapshot):
        (WebInspector.NativeMemoryProfileType):
        (WebInspector.NativeMemoryProfileHeader.prototype._updateSnapshotStatus):
        (WebInspector.NativeMemoryProfileHeader.prototype._didReceiveMemorySnapshot):

2013-03-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145349.
        http://trac.webkit.org/changeset/145349
        https://bugs.webkit.org/show_bug.cgi?id=111966

        Missing code history of Element,PageRuleCollector. (Requested
        by tasak on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/DocumentRuleSets.cpp:
        (WebCore::ShadowDistributedRules::collectMatchRequests):
        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.cpp: Removed.
        * css/ElementRuleCollector.h: Removed.
        * css/PageRuleCollector.cpp: Removed.
        * css/PageRuleCollector.h: Removed.
        * css/StyleResolver.cpp:
        (WebCore::leftToRightDeclaration):
        (WebCore):
        (WebCore::rightToLeftDeclaration):
        (WebCore::StyleResolver::State::ensureRuleList):
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::addMatchedProperties):
        (WebCore::StyleResolver::addElementStyleProperties):
        (MatchingUARulesScope):
        (WebCore::MatchingUARulesScope::MatchingUARulesScope):
        (WebCore::MatchingUARulesScope::~MatchingUARulesScope):
        (WebCore::MatchingUARulesScope::isMatchingUARules):
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::matchHostRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::compareRules):
        (WebCore::StyleResolver::sortMatchedRules):
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::ruleMatches):
        (WebCore::StyleResolver::checkRegionSelector):
        (WebCore::comparePageRules):
        (WebCore::StyleResolver::matchPageRules):
        (WebCore::checkPageSelectorComponents):
        (WebCore::StyleResolver::matchPageRulesForList):
        (WebCore::StyleResolver::isLeftPage):
        (WebCore::StyleResolver::isFirstPage):
        (WebCore::StyleResolver::pageName):
        * css/StyleResolver.h:
        (WebCore::MatchRequest::MatchRequest):
        (MatchRequest):
        (StyleResolver):
        (MatchResult):
        (WebCore::StyleResolver::State::State):
        (State):
        (WebCore::StyleResolver::State::takeRuleList):
        (WebCore::StyleResolver::State::setSameOriginOnly):
        (WebCore::StyleResolver::State::isSameOriginOnly):
        (WebCore::StyleResolver::State::pseudoStyleRequest):
        (WebCore::StyleResolver::State::setMode):
        (WebCore::StyleResolver::State::mode):
        (WebCore::StyleResolver::State::matchedRules):
        (WebCore::StyleResolver::State::addMatchedRule):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willMatchRule):
        * inspector/InspectorCSSAgent.h:
        (WebCore):
        (InspectorCSSAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willMatchRule):

2013-03-11  Marja Hölttä  <marja@chromium.org>

        [V8] Fix V8InjectedScriptManager
        https://bugs.webkit.org/show_bug.cgi?id=111968

        Reviewed by Kentaro Hara.

        This is needed to make the inspector work after templates for main world
        and non-main worlds are separated (bug 111724).

        No new tests (no changes in functionality).

        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):

2013-03-11  Hayato Ito  <hayato@chromium.org>

        Make sure that CSSSelector::setValue() is never called after parsing its pseudoType.
        https://bugs.webkit.org/show_bug.cgi?id=111957

        Reviewed by Hajime Morrita.

        It'd be nice to have an assertion here since
        CSSSelector::pseudoType() will never parse a new value after it
        parses a value and m_pseudoType is set to non-PseudoNotParsed.

        No new tests (no change in behaviour).

        * css/CSSSelector.h:
        (WebCore::CSSSelector::setValue):

2013-03-11  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] Implement RuleCollector
        https://bugs.webkit.org/show_bug.cgi?id=109916

        Reviewed by Antti Koivisto.

        Implemented rule collector for an element and collector for a page.
        Not all members in class State are required entire while resolving
        a style.

        No new tests, because just refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        Added ElementRuleCollector and PageRuleCollector.
        * css/DocumentRuleSets.cpp:
        (WebCore::ShadowDistributedRules::collectMatchRequests):
        Since behaviorAtBoundary is a state owned by ElementRuleCollector,
        removed from here.
        * css/DocumentRuleSets.h:
        (WebCore::ShadowDistributedRules::isEmpty):
        Added to quickly check whether there exist any ShadowDistributedRules
        or not.
        * css/ElementRuleCollector.cpp: Copied from Source/WebCore/css/StyleResolver.cpp.
        (WebCore):
        (WebCore::ElementRuleCollector::matchedResult):
        (WebCore::ElementRuleCollector::matchedRuleList):
        (WebCore::ElementRuleCollector::addMatchedRule):
        (WebCore::ElementRuleCollector::clearMatchedRules):
        (WebCore::ElementRuleCollector::ensureRuleList):
        (WebCore::ElementRuleCollector::addElementStyleProperties):
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::collectMatchingRulesForRegion):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::matchScopedAuthorRules):
        (WebCore::ElementRuleCollector::matchHostRules):
        (WebCore::ElementRuleCollector::matchShadowDistributedRules):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchUserRules):
        (WebCore::ElementRuleCollector::matchUARules):
        (WebCore::ElementRuleCollector::ruleMatches):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        (WebCore::ElementRuleCollector::sortMatchedRules):
        (WebCore::ElementRuleCollector::matchAllRules):
        Moved these methods from StyleResolver to this class.
        (WebCore::ElementRuleCollector::hasAnyMatchingRules):
        This method is used for checking whether a given element can share
        a cache.
        * css/ElementRuleCollector.h: Copied from Source/WebCore/css/StyleResolver.h.
        (WebCore):
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        Use styleResolver instance to initialize its member variables, i.e.
        SelectorFilter, RuleSets, InspectorCSSOMWrappers, and
        StyleScopedResolver.
        (ElementRuleCollector):
        (WebCore::ElementRuleCollector::setMode):
        (WebCore::ElementRuleCollector::setPseudoStyleRequest):
        (WebCore::ElementRuleCollector::setSameOriginOnly):
        (WebCore::ElementRuleCollector::setRegionForStyling):
        Mode, SameOriginOnly, RegionForStyling are only used while collecting
        matched rules.
        (WebCore::ElementRuleCollector::setMedium):
        Need to know which default stylesheet should be looked up.
        (WebCore::ElementRuleCollector::document):
        * css/PageRuleCollector.cpp: Copied from Source/WebCore/css/StyleResolver.cpp.
        (WebCore::comparePageRules):
        (WebCore::PageRuleCollector::isLeftPage):
        (WebCore::PageRuleCollector::isFirstPage):
        (WebCore::PageRuleCollector::pageName):
        (WebCore::PageRuleCollector::matchAllPageRules):
        (WebCore::PageRuleCollector::matchPageRules):
        (WebCore::checkPageSelectorComponents):
        (WebCore::PageRuleCollector::matchPageRulesForList):
        Moved from StyleResolver.
        * css/PageRuleCollector.h: Copied from Source/WebCore/css/StyleResolver.h.
        (WebCore):
        (WebCore::PageRuleCollector::PageRuleCollector):
        (PageRuleCollector):
        (WebCore::PageRuleCollector::matchedResult):
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::MatchResult::addMatchedProperties):
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::applyMatchedProperties):
        * css/StyleResolver.h:
        (WebCore::MatchRequest::MatchRequest):
        Removed behaviorAtBoundary. Instead, ElementRuleCollector have the
        state.
        (MatchRequest):
        (WebCore::StyleResolver::selectorFilter):
        Added to obtain SelectorFilter in ElementRuleCollector's constructor.
        (StyleResolver):
        (MatchResult):
        (WebCore::StyleResolver::State::State):
        To pass ASSERT in StyleResolver::applyProperties, need to keep
        m_regionForStyling.
        (State):
        (WebCore::StyleResolver::State::regionForStyling):
        (WebCore::StyleResolver::State::useSVGZoomRules):
        (WebCore::StyleResolver::hasSelectorForId):
        (WebCore):
        (WebCore::checkRegionSelector):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willMatchRule):
        Removed StyleResolver from its parameter list. Instead, added
        InspectorCSSOMWrappers and DocumentStyleSheetCollection.
        * inspector/InspectorCSSAgent.h:
        (WebCore):
        (InspectorCSSAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willMatchRule):

2013-03-11  Mike West  <mkwst@chromium.org>

        XSSAuditor doesn't need a copy of the original document's body.
        https://bugs.webkit.org/show_bug.cgi?id=111946

        Reviewed by Darin Adler.

        The XSSAuditor currently copies the original HTTP body of the document
        that's being audited in order to include it into a violation report if
        reflected XSS is detected. We don't actually need to do this, as we
        have access to the original request information from inside the
        XSSAuditorDelegate where the report is generated.
        XSSAuditorDelegate::didBlockScript ASSERTs that it's running on the
        main thread, so it should be safe to reach through the document's
        loader to get that information directly, rather than passing it from
        thread to thread via XSSInfo object properties.

        * html/parser/XSSAuditor.h:
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        (WebCore::XSSAuditor::isSafeToSendToAnotherThread):
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::create):
        (WebCore::XSSInfo::XSSInfo):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSInfo::isSafeToSendToAnotherThread):
            Drop the XSSInfo and XSSAuditor properties that held an
            isolatedCopy of the the original HTTP body. Depending on the
            document's size, this could be a significant savings.
        (WebCore::XSSAuditorDelegate::didBlockScript):
            Reach into the document's loader's original request in order to
            grab the body as a String, and feed that into the violation report
            object.

            As a drive-by, this patch creates a FrameLoader* temporary
            variable to minimize repetition in this area of the code. We use
            the loader a few times, but should only have to grab it once.

2013-03-11  Silvia Pfeiffer  <silviapf@chromium.org>

        [Chromium] REGRESSION: Closed Captions button not showing properly
        https://bugs.webkit.org/show_bug.cgi?id=109871

        Reviewed by Jer Noble.

        No new tests - covered by existing tests.

        Most of the patch was in the meantime covered by a patch to
        https://bugs.webkit.org/show_bug.cgi?id=111109 .
        This changes a static Chromium-only function name to be consistent with
        parent class function names.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaToggleClosedCaptionsButton):
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):
        Rename paintMediaClosedCaptionsButton to paintMediaToggleClosedCaptionsButton.

2013-03-11  Tim Horton  <timothy_horton@apple.com>

        RenderSnapshottedPlugIn paints in PaintPhaseBlockBackground instead of PaintPhaseForeground
        https://bugs.webkit.org/show_bug.cgi?id=111962
        <rdar://problem/13289335>

        Reviewed by Dean Jackson.

        RenderSnapshottedPlugIn should paint its snapshot during the foreground
        painting phase, instead of BlockBackground, to match normal plugin painting.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paint):

2013-03-07  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Elements] XSLT transformation result from the xml-stylesheet PI not rendered
        https://bugs.webkit.org/show_bug.cgi?id=111313

        Reviewed by Vsevolod Vlasov.

        Frame document update upon XSL transformation was never instrumented.
        This change instruments the Document::applyXSLTransform() method to that end.

        Test: http/tests/inspector/styles/xsl-transformed.xml

        * dom/Document.cpp:
        (WebCore::Document::applyXSLTransform): Instrumented.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::frameDocumentUpdated): Invoked upon applyXSLTransform().
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl): Added.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCommitLoad): Drive-by: simplified.
        (WebCore::InspectorInstrumentation::frameDocumentUpdated): Added.

2013-03-10  Matt Falkenhagen  <falken@chromium.org>

        Implement inert subtrees needed for modal <dialog>
        https://bugs.webkit.org/show_bug.cgi?id=110952

        Reviewed by Hajime Morrita.

        This changes Node::disabled() to return true when a modal dialog is
        open and the node is not in the dialog.

        Reusing disabled for inertness is useful because then event
        targeting and focus control automatically have the desired behavior:
        inert nodes are skipped over.

        Tests: fast/dom/HTMLDialogElement/closed-dialog-does-not-block-mouse-events.html
               fast/dom/HTMLDialogElement/modal-dialog-blocks-mouse-events.html
               fast/dom/HTMLDialogElement/non-modal-dialog-does-not-block-mouse-events.html

        * dom/Document.h:
        (WebCore::Document::activeModalDialog): Returns the topmost element in the top layer.
        Since now the only elements in the top layer are modal dialogs, it is the active modal dialog.
        * dom/Node.cpp:
        (WebCore):
        (WebCore::Node::isInert): As per the spec, a node that is not an ancestor or descendant of the modal dialog is inert.
        (WebCore::Node::disabled): Return false when inert.
        * dom/Node.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabled): Fall back to the superclass so inert is taken into account.

2013-03-10  Glenn Adams  <glenn@skynav.com>

        Line breaking opportunities at the end of a text node are missed
        https://bugs.webkit.org/show_bug.cgi?id=17427

        Reviewed by Darin Adler.

        When initializing context for determining next break position,
        reuse last two characters from previous text node(s) within block.
        This additional state is stored in the current LazyLineBreakIterator
        as an optimization to prevent having to add two new parameters to
        isBreakable().

        At present, this fixes only the ASCII shortcut code path, but
        does not yet handle the non-ASCII path. Since the ASCII path is
        the most performant critical, the handling of this latter path
        will be addressed by webkit.org/b/105692.

        Additionally test for case where last two characters context
        is derived from distinct nodes, possibly with intervening empty
        inline node(s).

        Test: fast/text/line-break-between-text-nodes.html

        * platform/text/TextBreakIterator.h:
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::lastCharacter):
        (WebCore::LazyLineBreakIterator::secondToLastCharacter):
        (WebCore::LazyLineBreakIterator::setLastTwoCharacters):
        (WebCore::LazyLineBreakIterator::resetLastTwoCharacters):
        (WebCore::LazyLineBreakIterator::updateLastTwoCharacters):
        (LazyLineBreakIterator):
        Add state variables to retain last two characters of previous text node(s)
        for reuse when initializing nextBreakPosition<>() context.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):
        Record and reset retained last two characters of previous text node(s) as
        appropriate.
        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition):
        Use state variables holding retained last two characters of previous text node(s)
        for when initializing nextBreakPosition<>() context.

2013-03-10  Darin Adler  <darin@apple.com>

        NetworkStorageSession leaks its CFURLStorageSessionRef
        https://bugs.webkit.org/show_bug.cgi?id=111950
        <rdar://problem/13384134>

        Reviewed by Sam Weinig.

        * platform/network/NetworkStorageSession.h:
        Change the argument type of the constructor to a RetainPtr.
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Changed
        the argument type to a RetainPtr.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Added
        calls to adoptCF to adopt the value returned by wkCreatePrivateStorageSession.
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession): Ditto.
        (WebCore::NetworkStorageSession::cookieStorage): Changed to use adoptCF
        instead of the RetainPtr constructor with AdoptCF since the former is
        far easier to read.

2013-03-10  Jason Anderssen  <janderssen@gmail.com>

        Conformance Test 1.0.3 (Beta) function: bufferData undefined value failed.
        https://bugs.webkit.org/show_bug.cgi?id=111641

        Reviewed by Dean Jackson.

        The WebGL specification requires that a size of 0 is not valid. In javascript, passing in undefined 
        as a parameter to a long long is the same as passing in 0, so we must check for this incorrect
        value and fail. 
        The test suite in Kronos 1.0.3 failed, test to verify conformance is as follows:
        https://www.khronos.org/registry/webgl/sdk/tests/conformance/more/functions/bufferDataBadArgs.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bufferData):
        Synthesize error and returned if size is 0.

2013-03-10  Andreas Kling  <akling@apple.com>

        SVGDocumentExtensions should use OwnPtr for pending resource maps.
        <http://webkit.org/b/111943>

        Reviewed by Anders Carlsson.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions):
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResourceForRemoval):
        (WebCore::SVGDocumentExtensions::markPendingResourcesForRemoval):
        * svg/SVGDocumentExtensions.h:
        (SVGDocumentExtensions):

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

        Add a heuristic to determine the “primary” snapshotted plugin
        https://bugs.webkit.org/show_bug.cgi?id=111932
        <rdar://problem/13270208>

        Reviewed by Dean Jackson.

        * WebCore.exp.in: Export a few things.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::classNameForShadowRoot): If we've been informed that we are the primary snapshotted plugin, add the 'primary' class.
        (WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn): Added
        (WebCore::HTMLPlugInImageElement::updateSnapshotInfo): Hand classNameForShadowRoot our primary-ness.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): Add storage for m_isPrimarySnapshottedPlugIn.

2013-03-10  Mike West  <mkwst@chromium.org>

        XSSAuditor doesn't need a copy of the original document URL.
        https://bugs.webkit.org/show_bug.cgi?id=111944

        Reviewed by Adam Barth.

        When creating an XSSInfo object in response to detecting reflected XSS
        on a page, the Auditor was passing in a copy of the document's
        original URL for reporting. It doesn't look like we need this, as
        XSSInfo's only consumer, XSSAuditorDelegate, runs on the main thread
        with access to the document. We can obtain access to the same
        information by reading the URL directly from the delegate's Document
        object if and when we need it.

        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
            Read the document's URL directly in order to create a violation
            report.
        (WebCore::XSSInfo::isSafeToSendToAnotherThread):
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::create):
        (WebCore::XSSInfo::XSSInfo):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        (WebCore::XSSAuditor::isSafeToSendToAnotherThread):
        * html/parser/XSSAuditor.h:
            Remove the copied original URL from both XSSInfo objects and the
            XSSAuditor.

2013-03-10  Andreas Kling  <akling@apple.com>

        GlyphMetricsMap should use OwnPtr.
        <http://webkit.org/b/111937>

        Reviewed by Anders Carlsson.

        Use OwnPtr instead of raw pointer + deleteAllValues().

        * platform/graphics/GlyphMetricsMap.h:
        (GlyphMetricsMap):
        (WebCore::::locatePageSlowCase):

2013-03-10  Eric Carlson  <eric.carlson@apple.com>

        Allow iOS port to use InbandTextTrackPrivateAVF
        https://bugs.webkit.org/show_bug.cgi?id=111933

        Reviewed by Dean Jackson.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue): Drive-by cleanup.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

2013-03-09  Eric Carlson  <eric.carlson@apple.com>

        Enable platform code to implement text track menu
        https://bugs.webkit.org/show_bug.cgi?id=111924

        Reviewed by Dean Jackson.

        No new tests, the new code isn't enabled in any ports yet.

        * WebCore.xcodeproj/project.pbxproj: Add PlatformTextTrack.h and PlatformTextTrackMenu.h.

        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::createForJSConstructor): scheduleLoad -> scheduleDelayedAction.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Deal with scheduleLoad to scheduleDelayedAction rename.
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        (WebCore::HTMLMediaElement::finishParsingChildren): Ditto.
        (WebCore::HTMLMediaElement::insertedInto): Ditto.
        (WebCore::HTMLMediaElement::scheduleDelayedAction): Ditto.
        (WebCore::HTMLMediaElement::scheduleNextSourceChild): Ditto.
        (WebCore::HTMLMediaElement::loadTimerFired): Ditto.
        (WebCore::HTMLMediaElement::textTrackModeChanged): Notify platform menu of track change.
        (WebCore::HTMLMediaElement::playInternal): Deal with scheduleLoad to scheduleDelayedAction rename.
        (WebCore::HTMLMediaElement::pauseInternal): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTrack): Ditto. Call addTrack() instead of appending 
            the track directly.
        (WebCore::HTMLMediaElement::setSelectedTextTrack): Deal with platform menu changing the
            selected track.
        (WebCore::HTMLMediaElement::platformTextTracks): Return an array of PlatformTracks representing
            the current text tracks.
        (WebCore::HTMLMediaElement::notifyMediaPlayerOfTextTrackChanges): Notify the platform menu
            that the list of text tracks has changed.
        (WebCore::HTMLMediaElement::platformTextTrackMenu): Return the platform track menu, if any.
        (WebCore::HTMLMediaElement::closeCaptionTracksChanged): 
        (WebCore::HTMLMediaElement::addTrack): Call addTrack() instead of appending the track directly.
        (WebCore::HTMLMediaElement::removeTrack): Call closeCaptionTracksChanged.
        (WebCore::HTMLMediaElement::addTextTrack): Call addTrack() instead of appending the track directly.
        (WebCore::HTMLMediaElement::didAddTrack): Ditto.
        (WebCore::HTMLMediaElement::didRemoveTrack): Deal with scheduleLoad to scheduleDelayedAction rename.
        (WebCore::HTMLMediaElement::sourceWasAdded): Ditto.
        (WebCore::HTMLMediaElement::clearMediaPlayer): Forget the platform track menu.
        (WebCore::HTMLMediaElement::resume): Deal with scheduleLoad to scheduleDelayedAction rename.
        * html/HTMLMediaElement.h:

        * html/track/InbandTextTrack.h: scheduleLoad -> scheduleDelayedAction.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::platformTextTrack): Create a PlatformTextTrack.
        * html/track/TextTrack.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::implementsTextTrackControls): New, player private passthrough.
        (WebCore::MediaPlayer::textTrackMenu): Ditto.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/PlatformTextTrack.h: Added.

        * platform/graphics/PlatformTextTrackMenu.h: Added.

2013-03-09  Eric Carlson  <eric.carlson@apple.com>

        Video size calculated incorrectly when PLUGIN_PROXY_FOR_VIDEO
        https://bugs.webkit.org/show_bug.cgi?id=111912

        Reviewed by Dean Jackson.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): We use RenderPart when
            PLUGIN_PROXY_FOR_VIDEO is defined, not RenderVideo.

2013-03-09  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Fix offset handling in GStreamer WebKitWebSource.
        https://bugs.webkit.org/show_bug.cgi?id=111888

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcSeekDataCb):
        (StreamingClient::didReceiveData):
        The offset handling in WebKitWebSource was completely wrong
        before and caused wrong offsets to be set on the GStreamer buffers
        after a seek.

        Apart from that there was also a race condition that happens
        when a downstream element causes seeks in very short succession
        and is switching between two different parts of the stream.

2013-03-09  Keishi Hattori  <keishi@webkit.org>

        Month transition animation is missing in some places
        https://bugs.webkit.org/show_bug.cgi?id=111908

        Reviewed by Kent Tamura.

        Month transition animation was missing when navigating using keyboard
        shortcuts and when navigation was trigger by selecting.

        Added tests to calendar-picker/*-picker-key-operations.html.

        * Resources/pagepopups/calendarPicker.js:
        (Animator): Added annotations.
        (Animator.prototype.isRunning): Returns true of the animation is running. Used by test.
        (ScrollView.prototype.scrollAnimator): Returns the scroll animator. Used by test.
        (CalendarPicker):
        (CalendarPicker.prototype.onYearListViewDidSelectMonth): Use CalendarPicker.NavigationBehavior enum instead of bool.
        (CalendarPicker.prototype.setSelection): Ditto.
        (CalendarPicker.prototype._moveHighlight): Ditto.
        (CalendarPicker.prototype.onCalendarTableKeyDown): Ditto.
        (CalendarPicker.prototype.onBodyKeyDown): Ditto.

2013-03-09  Dean Jackson  <dino@apple.com>

        Can't build w/o accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=111891

        Patch originally came from Tobias Mueller <tobiasmue@gnome.org>

        Unreviewed build fix for platforms without ACCELERATED_COMPOSITING enabled, due
        to r145057.

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::~PseudoElement): Wrap the call to pseudoElementDestroyed in
            USE(ACCELERATED_COMPOSITING)

2013-03-07  Robert Hogan  <robert@webkit.org>

        REGRESSION(r140907): Incorrect baseline for cells with media content during load
        https://bugs.webkit.org/show_bug.cgi?id=108357

        Reviewed by Julien Chaffraix.

        If a cell has replaced content, the intrinsic height of its content can change between layouts. If that's the case then the intrinsic padding we used
        for layout (the padding required to push the contents of the cell down to the row's baseline) is included in the new height and baseline and makes both
        of them wrong. So if a cell's content's intrinsic height has changed push the new content up into the intrinsic padding and relayout so that the rest of
        table and row layout can use the correct baseline and height for this cell.

        Tests: fast/css/vertical-align-baseline-rowspan-012.html
               http/tests/css/vertical-align-baseline-after-image-load-2.html
               http/tests/css/vertical-align-baseline-after-image-load-3.html
               http/tests/css/vertical-align-baseline-after-image-load.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::layout):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::isBaselineAligned):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):

2013-03-08  Chris Fleizach  <cfleizach@apple.com>

        REGRESSION: Intermittent crash in SpeechSynthesis::didFinishSpeaking
        https://bugs.webkit.org/show_bug.cgi?id=111613

        Reviewed by Ryosuke Niwa.

        This crash happens when the mock synthesizer utterance variable gets cleared
        before the speakingFinished timer happens. I don't see how that could happen
        but I was able to make a similar problem happen when cancel is called twice.

        This adds in a few more asserts and common sense checks. I'm hoping it will
        illuminate the problem further.

        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::speakingFinished):
        (WebCore::PlatformSpeechSynthesizerMock::speak):
        (WebCore::PlatformSpeechSynthesizerMock::cancel):

2013-03-08  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Make WebCore link for iOS

        * WebCore.exp.in:
        - Add ENABLE(RUBBER_BAND) for FrameView::setWantsLayerForTopOverHangArea(bool)
          and FrameView::setWantsLayerForBottomOverHangArea(bool).
        - Move FloatPoint::FloatPoint(_NSPoint const&) to !PLATFORM(IOS)
          section.

2013-03-08  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Resolve grid-{end|after} integer against the end|after edge
        https://bugs.webkit.org/show_bug.cgi?id=111885

        Reviewed by Tony Chang.

        The current code resolves grid-end (resp. grid-after) <integer>'s format against the start
        (resp. before) axis. The specification changed so that they are resolved against their matching
        axis.

        Test: fast/css-grid-layout/grid-auto-flow-resolution.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::maximumIndexInDirection):
        Updated the code to do the grid sizing measurement without resolveGridPositionsFromStyle. That's required
        as resolveGridPositionsFromStyle requires the grid to be sized.

        (WebCore::RenderGrid::placeItemsOnGrid):
        Added a comment about not recomputing after grid growth. This issue was raised to www-style
        (http://lists.w3.org/Archives/Public/www-style/2013Mar/0182.html).

        (WebCore::RenderGrid::resolveGridPositionsFromStyle):
        Added an ASSERT now that we don't call it during grid construction. Also added some code to pass
        the side of the GridPosition we give to resolveGridPositionFromStyle.

        (WebCore::RenderGrid::resolveGridPositionFromStyle):
        Updated the code to resolve the grid position against the right side.

        * rendering/RenderGrid.h:
        Added GridPositionSide and updated resolveGridPositionFromStyle's signature.

2013-03-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142015.
        http://trac.webkit.org/changeset/142015
        https://bugs.webkit.org/show_bug.cgi?id=111904

        The change caused 2 major regressions (bug 111091 and bug
        111595) and Pravin doesn't have time to investigate them
        (Requested by jchaffraix on #webkit).

        * dom/Node.cpp:
        (WebCore::Node::diff):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::childBecameNonInline):
        (WebCore):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::childBecameNonInline):
        (RenderBoxModelObject):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::childBecameNonInline):
        (WebCore):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderObject.cpp:
        (WebCore):
        (WebCore::RenderObject::handleDynamicFloatPositionChange):
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        (RenderObject):

2013-03-08  Dean Jackson  <dino@apple.com>

        Don't snapshot Java plugins
        https://bugs.webkit.org/show_bug.cgi?id=111899

        Reviewed by Tim Horton.

        Export MIMETypeRegistry::isJavaAppletMIMEType symbol.

        * WebCore.exp.in:

2013-03-08  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] processTemplateEndTag() needs to check for template in html scope
        https://bugs.webkit.org/show_bug.cgi?id=111880

        Reviewed by Eric Seidel.

        Currently, </template> handling exits with an error if there is not a template tag "in scope"
        which will be true if there is a table (for instance) below a template. This makes it so that
        the search (correctly) examines the entire element stack.

        Tests added to html5lib testing library.

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

2013-03-08  Eric Seidel  <eric@webkit.org>

        BackgroundHTMLParser should be able to atomize well-known strings
        https://bugs.webkit.org/show_bug.cgi?id=107337

        Reviewed by Adam Barth.

        Testing this patch easily requires applying bug 107236 locally
        to remove all the rendering noise from Parser/html-threaded-parser.html.

        This patch adds a new class HTMLIdentifier which allows us to avoid
        allocating strings for known tag/attribute names from HTMLNames.

        There is still a lot of meat on this bone, but I think it's important to
        land something "smallish" to start and iterate from there.

        This took Parser/html-threaded-parser.html from:
        median= 443.726500002 ms, stdev= 7.25002679952 ms, min= 430.244000047 ms, max= 455.511000007 ms
        to:
        median= 427.849500004 ms, stdev= 9.96967058292 ms, min= 417.914000049 ms, max= 461.528000014 ms
        on my MBP.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::tokenExitsForeignContent):
        (WebCore::tokenExitsSVG):
        (WebCore::tokenExitsMath):
        (WebCore::BackgroundHTMLParser::simulateTreeBuilder):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::scan):
        * html/parser/CSSPreloadScanner.h:
        (WebCore):
        (CSSPreloadScanner):
        * html/parser/CompactHTMLToken.cpp:
        (SameSizeAsCompactHTMLToken):
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        * html/parser/CompactHTMLToken.h:
        (WebCore::CompactHTMLToken::Attribute::Attribute):
        (Attribute):
        (WebCore::CompactHTMLToken::data):
        (WebCore::CompactHTMLToken::publicIdentifier):
        (CompactHTMLToken):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        * html/parser/HTMLIdentifier.cpp: Added.
        (WebCore):
        (WebCore::identifierTable):
        (WebCore::HTMLIdentifier::hasIndex):
        (WebCore::HTMLIdentifier::findIndex):
        (WebCore::nameForIndex):
        (WebCore::HTMLIdentifier::asString):
        (WebCore::HTMLIdentifier::asStringImpl):
        (WebCore::HTMLIdentifier::addNames):
        (WebCore::HTMLIdentifier::init):
        * html/parser/HTMLIdentifier.h: Added.
        (WebCore):
        (HTMLIdentifier):
        (WebCore::HTMLIdentifier::HTMLIdentifier):
        (WebCore::HTMLIdentifier::isSafeToSendToAnotherThread):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::threadSafeEqual):
        (WebCore::threadSafeMatch):
        * html/parser/HTMLParserIdioms.h:
        (WebCore):
        (WebCore::threadSafeHTMLNamesMatch):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::tagIdFor):
        (WebCore::TokenPreloadScanner::StartTagScanner::match):
        (TokenPreloadScanner::StartTagScanner):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * html/parser/HTMLPreloadScanner.h:

2013-03-08  Brandon Jones  <bajones@google.com>

        Check to ensure MultisampleRenderbuffer creation succeeds
        https://bugs.webkit.org/show_bug.cgi?id=111780

        Reviewed by Dean Jackson.

        On OSX systems using AMD graphics chips the allocation of large
        Multisample Renderbuffers in Chromium would fail without any indication
        of failure. Attempting to draw to the buffer resulted in garbage being
        rendered onscreen. This could be reproduced by opening a full-page
        WebGL app and pressing (Command + "-") several times. This patch adds an
        additional check during DrawingBuffer resize to verify that the resized
        buffer is valid. 

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::checkBufferIntegrity):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:
        (DrawingBuffer):

2013-03-08  Harald Alvestrand  <hta@chromium.org>

        Implemented new API for RTCStatsReport object.
        https://bugs.webkit.org/show_bug.cgi?id=110333

        Removed RTCStatsElement object, moved its interface to
        RTCStatsReport. Preserved some interfaces for
        backwards compatibility; will be removed in a later patch.

        Reviewed by Adam Barth.

        Tested by extensions to RTCPeerConnection-stats test.

        * Modules/mediastream/RTCStatsElement.cpp: Removed.
        * Modules/mediastream/RTCStatsElement.h: Removed.
        * Modules/mediastream/RTCStatsElement.idl: Removed.
        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore::RTCStatsReport::create):
        (WebCore::RTCStatsReport::RTCStatsReport):
        (WebCore):
        (WebCore::RTCStatsReport::names):
        (WebCore::RTCStatsReport::local):
        (WebCore::RTCStatsReport::remote):
        (WebCore::RTCStatsReport::addStatistic):
        (WebCore::RTCStatsReport::addElement):
        * Modules/mediastream/RTCStatsReport.h:
        (RTCStatsReport):
        (WebCore::RTCStatsReport::timestamp):
        (WebCore::RTCStatsReport::id):
        (WebCore::RTCStatsReport::stat):
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.cpp:
        (WebCore::RTCStatsResponse::namedItem):
        (WebCore):
        (WebCore::RTCStatsResponse::addReport):
        (WebCore::RTCStatsResponse::addStatistic):
        * Modules/mediastream/RTCStatsResponse.h:
        (RTCStatsResponse):
        * Modules/mediastream/RTCStatsResponse.idl:
        * WebCore.gypi:
        * platform/chromium/support/WebRTCStatsResponse.cpp:
        (WebKit::WebRTCStatsResponse::addReport):
        (WebKit):
        (WebKit::WebRTCStatsResponse::addStatistic):
        (WebKit::WebRTCStatsResponse::addElement):
        * platform/mediastream/RTCStatsResponseBase.h:
        (RTCStatsResponseBase):

2013-03-08  Eric Seidel  <eric@webkit.org>

        Free up background parser's checkpoints when speculation succeeds
        https://bugs.webkit.org/show_bug.cgi?id=110547

        Reviewed by Adam Barth.

        This should be a memory (and possible perf) win while parsing
        pages, as we will no longer hold multiple copies of every
        source byte during the whole parse.

        Many LayoutTests exercise this code path, and I've manually (debugger and printf)
        that we're hitting this code, but we'll have to wait for the memory/perf bots
        to tell us if this shows up as a win.

        We only bother to message the parser at the end of a speculation chain, so as not
        to send too many messages to the background parser.

        * html/parser/BackgroundHTMLInputStream.cpp:
        (WebCore::BackgroundHTMLInputStream::BackgroundHTMLInputStream):
        (WebCore::BackgroundHTMLInputStream::invalidateCheckpointsUpThrough):
        (WebCore):
        (WebCore::BackgroundHTMLInputStream::rewindTo):
        * html/parser/BackgroundHTMLInputStream.h:
        (BackgroundHTMLInputStream):
        (Checkpoint):
        (WebCore::BackgroundHTMLInputStream::Checkpoint::isNull):
        (WebCore::BackgroundHTMLInputStream::Checkpoint::clear):
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::passedCheckpoint):
        (WebCore):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):

2013-03-08  Chandra Shekar Vallala  <brk376@motorola.com>

        [chromium] Keydown event for 'shift+alt' returns win keycode instead of 'alt'
        https://bugs.webkit.org/show_bug.cgi?id=111112

        Reviewed by Tony Chang.

        Return windows keycode of Alt incase of GDK_META_L, GDK_META_R. This matches
        the firefox behaviour in linux platform.

        Added Manual Test : ManualTests/shift-alt-key-event.html
        Try press Shift then alt key. The test passes if the shiftKey, altKey values
        of JSKeyEvent are true and keycode/which is 18.

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2013-03-08  Mike West  <mkwst@chromium.org>

        CSP: 'eval()' is blocked in report-only mode.
        https://bugs.webkit.org/show_bug.cgi?id=111867

        Reviewed by Adam Barth.

        Setting a 'Content-Security-Policy-Report-Only' header should not have
        any effect on what a page actually executes. Currently, however, setting
        a 'script-src' directive that doesn't whitelist 'unsafe-eval' actually
        blocks 'eval()' on the page. This patch fixes that by checking whether
        we're in report-only mode before turning 'eval()' off inside the script
        engine.

        This leaves us in a weird state, however. We don't currently have any
        mechanism of explaining to the VM that we just want to be notified of
        'eval()' usage. I've filed http://wkbug.com/111869 to cover this
        aspect.

        Test: http/tests/security/contentSecurityPolicy/eval-allowed-in-report-only-mode.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
            For each policy we parse, check that we're only turning off eval in
            the VM when we're in enforce mode. If we're in report-only mode,
            skip it.

2013-03-08  Christian Biesinger  <cbiesinger@chromium.org>

        REGRESSION (r143643): <button> should support ::first-line and ::first-letter
        https://bugs.webkit.org/show_bug.cgi?id=111782

        Reviewed by Ojan Vafai.

        Test: fast/forms/button-first-line-first-letter.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::firstLineBlock):
        (WebCore::findFirstLetterBlock):
        Add isRenderButton to the first-line and first-letter checks that
        don't allow ::first-* styles for flexbox.

2013-03-08  Geoffrey Garen  <ggaren@apple.com>

        Removed an out-of-date comment from SharedTimer
        https://bugs.webkit.org/show_bug.cgi?id=111875

        Reviewed by Mark Hahnenberg.

        Even if we surround each call to an ObjC interface with an autorelease
        pool, it's still nice to have one at top-level entry points like
        timers, to avoid turning a single mistake into a long-term leak.

        * platform/ios/SharedTimerIOS.mm:
        (WebCore::timerFired):
        * platform/mac/SharedTimerMac.mm:
        (WebCore::timerFired):

2013-03-08  Benjamin Poulain  <benjamin@webkit.org>

        [Mac] Add a feature flag for 'view-mode' Media Feature, disable it on Mac
        https://bugs.webkit.org/show_bug.cgi?id=111297

        Reviewed by Kenneth Rohde Christiansen.

        The 'view-mode' Media Feature spec is implemented in WebCore but
        there is no WebKit support for it on Mac.
        Because of this, we always lie and report a windowed view mode.

        This patch add a feature flag for the feature and disable it on
        Mac so that we stop reporting incorrect default values.

        * WebCore.exp.in:
        * css/CSSValueKeywords.in:
        * css/MediaFeatureNames.h:
        (MediaFeatureNames):
        * css/MediaQueryEvaluator.cpp:
        * css/MediaQueryExp.cpp:
        (WebCore::featureWithCSSValueID):
        (WebCore::featureWithoutValue):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (Page):

2013-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        After sending message, Mail changes formatting
        https://bugs.webkit.org/show_bug.cgi?id=111360

        Reviewed by Enrica Casucci.

        Added makeInsertedContentRoundTrippableWithHTMLTreeBuilder to move prohibited children (e.g. p, h1, etc...)
        out of paragraph elements to run immediately after the fragment insertion. This function splits trees and
        moves prohibited children out of paragraph elements to keep the tree isomorphic under HTML serialization and
        parsing. Unfortunately, there are many other DOM tree constructs we need to fix to make the subtree truly
        isomorphic but this is a step forward.

        Test: editing/pasteboard/pasting-into-p-should-not-nest-p.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isProhibitedParagraphChild): Added. Matches the list at
        https://dvcs.w3.org/hg/editing/raw-file/57abe6d3cb60/editing.html#prohibited-paragraph-child
        except main element, which is currently missing in the specification.
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder): Added.
        (WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor): Added.
        (WebCore::ReplaceSelectionCommand::doApply): Call moveProhibitedChildrenOutOfParagraphElements.

        * editing/ReplaceSelectionCommand.h:
        (ReplaceSelectionCommand):

2013-03-08  Eric Seidel  <eric@webkit.org>

        AtomicHTMLToken should not be heap allocated or RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=111250

        Reviewed by Adam Barth.

        It was clearly an oversight on our part to ever make AtomicHTMLToken ref-counted.
        We don't need the actual "token" saved, just enough of it to recreate a fake token.

        This removed many more mallocs than I thought it would, for a nice little speed win.
        Before:
        median= 450.482999993 ms, stdev= 7.2381436538 ms, min= 436.084999994 ms, max= 464.968999964 ms
        After:
        median= 436.41600004 ms, stdev= 5.71435647554 ms, min= 427.160999971 ms, max= 446.753000026 ms

        * html/parser/AtomicHTMLToken.h:
        (AtomicHTMLToken):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createElementFromSavedToken):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken):
        (WebCore::HTMLDocumentParser::constructTreeFromCompactHTMLToken):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::isHTMLIntegrationPoint):
        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore):
        (WebCore::HTMLFormattingElementList::tryToEnsureNoahsArkConditionQuickly):
        (WebCore::HTMLFormattingElementList::ensureNoahsArkCondition):
        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::create):
        (WebCore::HTMLStackItem::localName):
        (WebCore::HTMLStackItem::attributes):
        (WebCore::HTMLStackItem::getAttributeItem):
        (HTMLStackItem):
        (WebCore::HTMLStackItem::hasLocalName):
        (WebCore::HTMLStackItem::hasTagName):
        (WebCore::HTMLStackItem::HTMLStackItem):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::processFakeEndTag):
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHead):
        (WebCore::HTMLTreeBuilder::defaultForInHead):
        (WebCore::HTMLTreeBuilder::defaultForInHeadNoscript):
        (WebCore::HTMLTreeBuilder::defaultForAfterHead):
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):

2013-03-08  Roger Fong  <roger_fong@apple.com>

        Makefile fixes.

        * WebCore.vcxproj/WebCore.make:

2013-03-07  Emil A Eklund  <eae@chromium.org>

        [sub-pixel] Rounding error in table cell height calculation causes unnecessary scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=111794

        Reviewed by Levi Weintraub.
        
        In RenderTableCell::logicalHeightForRowSizing the
        adjustedLogicalHeight is calculated from the logicalHeight and
        intrinsic padding and is then returned and floored. This can
        cause cause the cell to be slightly smaller (0.5px) than the
        element it contains.

        Test: fast/sub-pixel/table-cell-height.html

        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::logicalHeightForRowSizing):
        Change to use pixelSnapped version of logicalHeight method and
        change signature to return int as the only caller immediately
        down-casts the result to an int.

2013-03-08  Christian Biesinger  <cbiesinger@chromium.org>

        RenderFullScreen needs to clear override sizes when exiting full screen
        https://bugs.webkit.org/show_bug.cgi?id=111775

        Reviewed by Ojan Vafai.

        Test: fullscreen/full-screen-with-flex-item.html

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::unwrapRenderer):
        RenderFullScreen is a flexbox, so it will potentially set override
        sizes on its children while in fullscreen mode. When we exit
        fullscreen mode, we need to clear this override size, otherwise the
        the leftover override size may affect layout. See the testcase for an
        example.

2013-03-08  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Handle 2 positions with one 'auto' properly
        https://bugs.webkit.org/show_bug.cgi?id=111653

        Reviewed by Tony Chang.

        The rendering code was making the assumption that we have one position.
        Thus it couldn't fully match what the specification wants as the 2 opposite
        positions are required to resolve either position in several cases (e.g.
        1 / span 2, auto / 'c').

        This change introduces resolveGridPositionsFromStyle to do both opposite
        positions resolution in one pass and thus handling more cases.

        Test: fast/css-grid-layout/grid-item-spanning-resolution.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::maximumIndexInDirection):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        Updated the above functions to rely on resolveGridPositionsFromStyle.

        (WebCore::RenderGrid::resolveGridPositionsFromStyle):
        Added this new function that handle the correct resolution.

        (WebCore::RenderGrid::resolveGridPositionFromStyle):
        Updated the ASSERT to match the new code flow.

        * rendering/RenderGrid.h:
        (WebCore::RenderGrid::GridSpan::GridSpan):
        Introduced this new struct to hold the 2 positions along one axis.

2013-03-08  Dominic Cooney  <dominicc@chromium.org>

        RenderTextControlSingleLine should not assume that its text element has a renderer
        https://bugs.webkit.org/show_bug.cgi?id=111826

        Reviewed by Ojan Vafai.

        Tests: fast/forms/search/search-autoscroll-hidden-decoration-container-crash.html
               fast/forms/search/search-hide-decoration-container-crash.html
               fast/forms/search/search-scroll-hidden-decoration-container-crash.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::controlClipRect):
        (WebCore::RenderTextControlSingleLine::autoscroll):
        (WebCore::RenderTextControlSingleLine::scroll):

2013-03-08  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Use WeakPtr for Factory-to-BackingStore reference
        https://bugs.webkit.org/show_bug.cgi?id=111459

        Reviewed by Adam Barth.

        IDBFactoryBackendImpl maintains a map of backing stores - if another database in the same
        origin is opened, the backing store instance must be re-used). This was a map to raw
        pointers so that the backing store can be collected when all database references are
        dropped. The map was maintained manually by passing the factory to the IDBBackingStore which
        would add/remove itself on creation/destruction.

        Replace this with a HashMap<WeakPtr<T>>. This simplifies the plumbing; map entries
        "leak" but are purged on subsequent opens.

        Added webkit_unit_test (Chromium port) to verify refcounts.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore): No need to notify factory of lifetime.
        (WebCore::IDBBackingStore::~IDBBackingStore): Ditto.
        (WebCore::IDBBackingStore::open): Ditto.
        * Modules/indexeddb/IDBBackingStore.h: No reference to the factory, but...
        (WebCore::IDBBackingStore::createWeakPtr): Do need to expose weak pointers for the factory to hold.
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::cleanWeakMap): Helper function to scrub a HashMap<WeakPtr<T>> of empty pointers.
        May move to WTF when we've learned how general it is, or come up with a dedicated WeakPtrHashMap type.
        (WebCore::IDBFactoryBackendImpl::openBackingStore): WeakPtr fu.
        * Modules/indexeddb/IDBFactoryBackendImpl.h:
        (IDBFactoryBackendImpl): Remove plumbing methods.

2013-03-08  John Mellor  <johnme@chromium.org>

        @media queries do not take zooming into account
        https://bugs.webkit.org/show_bug.cgi?id=53186

        Reviewed by Kenneth Rohde Christiansen.

        Fixes @media width and height to take into account full page zoom, by
        adding code to MediaQueryEvaluator's width/heightMediaFeatureEval,
        corresponding to the existing code in Element::clientWidth which makes
        document.documentElement.clientWidth take into account page zoom.

        Test: fast/media/mq-width-pagezoom.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::heightMediaFeatureEval):
        (WebCore::widthMediaFeatureEval):

2013-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [BlackBerry] Add stubs for DNSResolveQueue platform specific methods
        https://bugs.webkit.org/show_bug.cgi?id=111841

        Reviewed by Rob Buis.

        Add empty implementations of
        DNSResolveQueue::platformProxyIsEnabledInSystemPreferences() and
        DNSResolveQueue::platformResolve() to DNSBlackBerry.cpp to make it
        build.

        * platform/network/blackberry/DNSBlackBerry.cpp:
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences):
        (WebCore::DNSResolveQueue::platformResolve):

2013-03-08  Glenn Hartmann  <hartmanng@chromium.org>

       Adding a hook to collect data for a Google UMA histogram to track when
       m_needsCompositedScrolling is turned on and off.
       https://bugs.webkit.org/show_bug.cgi?id=111725

       Reviewed by Julien Chaffraix.

       We want to keep track of this information to quantify the effects of a
       few patches that will cause us to opt in to composited scrolling.
       Specifically, we want to measure the effects of
       https://bugs.webkit.org/show_bug.cgi?id=109302,
       https://bugs.webkit.org/show_bug.cgi?id=109966,
       https://bugs.webkit.org/show_bug.cgi?id=109591, and
       https://bugs.webkit.org/show_bug.cgi?id=107618.

       We do this by measuring a per-layer boolean value, and comparing the
       ratio between number of layers opted in and number of layers that remain
       uncomposited. We hope the relative number of layers opting in will
       increase after the relevant patches land and are enabled.

       Unfortunately implementing extra statistics is impractical at the
       moment since most of the actionable relevant data is expensive to
       compute. For example, it would be useful to know if the layers that opt
       out do so because of invisible or non-overlapping layers that cause a
       potential stacking container's children to be discontiguous, because we
       would potentially be able to mitigate the problem. However, this would
       add considerable overhead to perform overlap testing just to gather
       data.

       No new tests (no change in behaviour).

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

2013-03-08  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] GraphicsContext: rename addRoundedRectClip to clipRoundedRect
        https://bugs.webkit.org/show_bug.cgi?id=111852

        Reviewed by Rob Buis.

        This changed in r139353.

        * platform/graphics/blackberry/GraphicsContextBlackBerry.cpp:
        (WebCore::GraphicsContext::clipRoundedRect):

2013-03-08  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Add BlendMode parameter to GraphicsContext::setPlatformCompositeOperation
        https://bugs.webkit.org/show_bug.cgi?id=111840

        Reviewed by Rob Buis.

        This parameter was added in r137011.

        * platform/graphics/blackberry/GraphicsContextBlackBerry.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):

2013-03-08  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Remove unused GraphicsContext::addInnerRoundedRectClip()
        https://bugs.webkit.org/show_bug.cgi?id=111838

        Reviewed by Rob Buis.

        This was removed in r139138.

        * platform/graphics/blackberry/GraphicsContextBlackBerry.cpp:

2013-03-08  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] GraphicsContext: add fillRule parameter to clip() and canvasClip()
        https://bugs.webkit.org/show_bug.cgi?id=111836

        Reviewed by Rob Buis.

        This parameter was added in r139967.

        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):

2013-03-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Get rid of file system ids and use file pathes as uri for file based uiSourceCodes.
        https://bugs.webkit.org/show_bug.cgi?id=111753

        Reviewed by Pavel Feldman.

        * inspector/front-end/FileSystemMapping.js:
        (WebInspector.FileSystemMappingImpl):
        (WebInspector.FileSystemMappingImpl.prototype._loadFromSettings.get this):
        (WebInspector.FileSystemMappingImpl.prototype._loadFromSettings):
        (WebInspector.FileSystemMappingImpl.prototype._saveToSettings):
        (WebInspector.FileSystemMappingImpl.prototype.set addFileSystemMapping):
        (WebInspector.FileSystemMappingImpl.prototype.removeFileSystemMapping):
        (WebInspector.FileSystemMappingImpl.prototype.fileSystemPaths):
        (WebInspector.FileSystemMappingImpl.prototype.fileSystemPathForPrefix):
        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate.projectId):
        (WebInspector.FileSystemProjectDelegate.prototype.id):
        (WebInspector.FileSystemProjectDelegate.prototype.fileSystemPath):
        (WebInspector.FileSystemWorkspaceProvider):
        (WebInspector.FileSystemWorkspaceProvider.prototype._fileSystemAdded):
        (WebInspector.FileSystemWorkspaceProvider.prototype._fileSystemRemoved):
        (WebInspector.FileSystemWorkspaceProvider.prototype.fileSystemPath):
        * inspector/front-end/IsolatedFileSystemManager.js:
        (WebInspector.IsolatedFileSystemManager.prototype._innerAddFileSystem):
        (WebInspector.IsolatedFileSystemManager.prototype._fileSystemRemoved):
        * inspector/front-end/Workspace.js:
        (WebInspector.Workspace.prototype.uiSourceCodeForURL):

2013-03-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Polish TabbedEditorContaner and ScriptsNavigator behavior.
        https://bugs.webkit.org/show_bug.cgi?id=111732

        Reviewed by Pavel Feldman.

        Resources matching inspectedPageURL are always expanded in NavigatorView now.
        Snippets tab in scripts navigator is not automatically opened anymore.
        Cleared saved TabbedEditorContainer history because it might have been corrupted due to errors in earlier versions.
        Snippets are not revealed in TabbedEditorContainer anymore unless they were actually selected by user or there is no other tabs opened.

        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView):
        (WebInspector.NavigatorView.prototype.addUISourceCode):
        (WebInspector.NavigatorView.prototype._inspectedURLChanged):
        (WebInspector.NavigatorView.prototype.revealUISourceCode):
        (WebInspector.NavigatorView.prototype.removeUISourceCode):
        (WebInspector.NavigatorFolderTreeElement.prototype.onattach):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.uiSourceCode):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.reveal):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype.revealUISourceCode):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showFile):
        * inspector/front-end/Settings.js:
        (WebInspector.VersionController.prototype._updateVersionFrom1To2):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype.addUISourceCode.tabId.this._tabIds.get this):
        (WebInspector.TabbedEditorContainer.prototype.addUISourceCode):
        (WebInspector.TabbedEditorContainer.History.prototype._rebuildItemIndex):

2013-03-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add shortcut for running a snippet.
        https://bugs.webkit.org/show_bug.cgi?id=111680

        Reviewed by Pavel Feldman.

        Added Ctrl/Cmd+Enter as a shortcut for running a snippet.

        * inspector/front-end/SnippetJavaScriptSourceFrame.js:
        (WebInspector.SnippetJavaScriptSourceFrame):
        (WebInspector.SnippetJavaScriptSourceFrame.prototype._runButtonClicked):
        (WebInspector.SnippetJavaScriptSourceFrame.prototype._runSnippet):
        (WebInspector.SnippetJavaScriptSourceFrame.prototype._onKeyDown):

2013-03-08  Philip Rogers  <pdr@google.com>

        Prevent infinite loop in SVG use cycle detection
        https://bugs.webkit.org/show_bug.cgi?id=111822

        Reviewed by Stephen Chenney.

        SVG use cycle detection depended on idForStyleResolution() which differs from
        getIdAttribute() in quirks mode. During use tree cycle detection, this difference
        resulted in an infinite loop because idForStyleResolution() used lower-cased id
        attributes. This patch removes an existing fixme for this and switches to using
        getIdAttribute().

        Test: svg/custom/use-cycle-detection.html

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::hasCycleUseReferencing):

2013-03-08  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        When we set word-wrap: break-word and xml:space="preserve" to svg text element, the text is collapsed.
        https://bugs.webkit.org/show_bug.cgi?id=111675

        Reviewed by Stephen Chenney.

        RenderSVGText define its size when it laid out its first line at SVGRootInlineBox::computePerCharacterLayoutInformation().

        In the following spec, SVG don't perform automatic line break or word wrapping.
        http://www.w3.org/TR/SVG/text.html#Introduction
        > SVG performs no automatic line breaking or word wrapping.
        However, when we set word-wrap: break-word and xml:space="preserve" to svg text element, RenderBlock::LineBreaker::nextLineBreak() breaks the text.
        This make single character lines and make RenderSVGText narrow.

        We must ignore word-wrap property to make the text a single line.

        We always disable break words and break all in nextLineBreak() when the object is SVGInlineText.

        Test: svg/text/preserve-break-word.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak): Disable break words and break all when we process SVG Text.

2013-03-08  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] HTML5 video - sound volume bar out of widget
        https://bugs.webkit.org/show_bug.cgi?id=108213

        Reviewed by Jocelyn Turcotte.

        Since we use Safari shadow DOM for media controls, follow
        the overall layout of Safari media control CSS.

        * css/mediaControlsQt.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):

2013-03-08  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Doesn't build with QtMultimedia
        https://bugs.webkit.org/show_bug.cgi?id=111847

        Reviewed by Jocelyn Turcotte.

        Fix include.

        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2013-03-08  Huang Dongsung  <luxtella@company100.net>

        [EFL][Qt] REGRESSION(r144787): A fixed element lags when scrolling and wheeling.
        https://bugs.webkit.org/show_bug.cgi?id=111829

        Reviewed by Noam Rosenthal.

        Currently, flagsChanged deals with all boolean flags. It introduces this bug
        because when another flag (i.e. preserves3D) is changed, fixedToViewport is set
        to false. So this patch updates all flags when at least one flag is changed.

        In addition, this patch amends isScrollable code to match other flags.

        This patch can only be tested manually since there is no automated
        testing facilities for in-motion touch.
        Test: ManualTests/fixed-position.html
              ManualTests/nested-fixed-position.html

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setScrollableArea):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):

2013-03-07  Dean Jackson  <dino@apple.com>

        Remove dead label code in snapshotted plugin
        https://bugs.webkit.org/show_bug.cgi?id=111781

        Reviewed by Tim Horton.

        Since ports can use the shadow tree to do label display,
        there is no need for the hardcoded timers in RenderSnapshottedPlugin.

        * rendering/RenderSnapshottedPlugIn.cpp: Remove label flags and timers.
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        (WebCore::RenderSnapshottedPlugIn::~RenderSnapshottedPlugIn):
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot):
        (WebCore::RenderSnapshottedPlugIn::handleEvent):
        * rendering/RenderSnapshottedPlugIn.h:
        (RenderSnapshottedPlugIn):

2013-03-07  Dean Jackson  <dino@apple.com>

        Implement a custom appearance for the snapshotted plugin background
        https://bugs.webkit.org/show_bug.cgi?id=108368

        Reviewed by Tim Horton.

        After https://bugs.webkit.org/show_bug.cgi?id=108284 (r142507), a
        snapshotted plugin was no longer drawing the background of the
        label blurred. Since the snapshot content was now a shadow tree,
        it wasn't feasible to pre-blur a region of the snapshot: the label
        could be any size and in any location, with ports being able to
        override the appearance through their UA style sheet.

        Instead we now use one of the elements in the tree, the snapshot-overlay,
        as a hook where ports can add any effect they want. This could be simply
        a border, or a transparent mask, or even a CSS filter. We introduce a custom
        CSS appearance "snapshotted-plugin-overlay", which could be added to the
        element in the injected UA stylesheet. This calls into RenderTheme in
        the same way that custom controls do.

        Meanwhile, in RenderThemeMac, we implement the appearance by drawing the
        content of the plugin snapshot into the background of the element. That
        way we can add effects in CSS.

        Test: plugins/snapshot-appearance.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Handle SnapshottedPluginOverlayPart.
        * css/CSSValueKeywords.in: New appearance value snapshotted-plugin-overlay.
        * platform/ThemeTypes.h: New value SnapshottedPluginOverlayPart.
        * html/HTMLPlugInElement.h:
        (WebCore::toHTMLPlugInElement): Add safer casting helpers.
        * html/HTMLPlugInImageElement.h:
        (WebCore::toHTMLPlugInImageElement): Ditto.
        * rendering/RenderSnapshottedPlugIn.cpp: Remove the code for handling
            the blur directly in the renderer.
        (WebCore::RenderSnapshottedPlugIn::paint): Simplify the paint logic since we're
            no longer trying to blur here.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot): Ditto.
        * rendering/RenderSnapshottedPlugIn.h: Remove the methods that were trying
            to blur the image directly.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Call paintSnapshottedPluginOverlay.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintSnapshottedPluginOverlay): New virtual method with default implementation.
        * rendering/RenderThemeMacShared.h:
        (RenderThemeMacShared): Override paintSnapshottedPluginOverlay.
        * rendering/RenderThemeMacShared.mm:
        (WebCore::RenderThemeMacShared::paintSnapshottedPluginOverlay): Implement a custom render path
            that takes the snapshot image from the node's parent, and draws it into the background.
            Along the way make sure we're actually using the right type of element (an HTMLPlugInImageElement).

2013-03-08  Sergio Villar Senin  <svillar@igalia.com>

        Improve drag&drop of list items in contentEditable divs
        https://bugs.webkit.org/show_bug.cgi?id=111556

        Reviewed by Ryosuke Niwa.

        A single fully selected <li> should generate the same markup as if
        we were selecting some of them, i.e., we should preserve the list
        structure and appearance.

        Test: editing/selection/drag-list-item.html

        * editing/htmlediting.cpp:
        (WebCore::isListItem): modified constness.
        * editing/htmlediting.h:
        (WebCore): ditto.
        * editing/markup.cpp:
        (WebCore::highestAncestorToWrapMarkup):

2013-03-08  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] LayerTiler: rename currentFrameHasAlpha as currentFrameKnownToBeOpaque
        https://bugs.webkit.org/show_bug.cgi?id=111828

        Reviewed by Carlos Garcia Campos.

        This changed in r141637.

        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::updateTextureContentsIfNeeded):

2013-03-08  Antoine Quint  <graouts@apple.com>

        Fix a couple of typos.

        Unreviewed.

        * inspector/Inspector.json:

2013-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [BlackBerry] Use OwnPtr for CredentialBackingStore members
        https://bugs.webkit.org/show_bug.cgi?id=111737

        Reviewed by Rob Buis.

        It simplifies the code a bit.

        * platform/network/blackberry/CredentialBackingStore.cpp:
        (WebCore::CredentialBackingStore::~CredentialBackingStore):
        (WebCore::CredentialBackingStore::open):
        (WebCore::CredentialBackingStore::certMgrWrapper):
        * platform/network/blackberry/CredentialBackingStore.h:
        (CredentialBackingStore):

2013-03-07  Gavin Barraclough  <barraclough@apple.com>

        MemoryPressureHandler should fully flush the WebCore & NS URL caches
        https://bugs.webkit.org/show_bug.cgi?id=111827

        Rubber Stamped by Geoff Garen

        When the handler is fired we should free as much memory as possible.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):
            - fully flush the WebCore & NS URL caches

2013-03-07  Keishi Hattori  <keishi@webkit.org>

        Update calendar picker UI
        https://bugs.webkit.org/show_bug.cgi?id=109439

        Reviewed by Kent Tamura.

        This patch changes the calendar picker UI.

        Added tests to existing calendar picker tests.
        Test: platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-month-popup.html

        * Resources/pagepopups/calendarPicker.css:
        (body):
        (.rtl):
        (.scroll-view):
        (.scroll-view-content):
        (.list-cell):
        (.list-cell.hidden):
        (.day-cell):
        (.week-number-cell):
        (.day-cell.today):
        (.day-cell.highlighted):
        (.day-cell.highlighted.disabled):
        (.day-cell.selected):
        (.day-cell.disabled):
        (.day-cell.current-month):
        (.calendar-table-view):
        (.preparing .calendar-table-view:focus):
        (.week-day-label):
        (.week-number-label):
        (.calendar-table-header-view):
        (.calendar-picker):
        (.calendar-header-view):
        (.calendar-title):
        (.rtl .calendar-title):
        (.month-popup-button:disabled):
        (.month-popup-button):
        (.month-popup-button .disclosure-triangle):
        (.month-popup-button .disclosure-triangle svg):
        (.today-button::after):
        (.calendar-navigation-button):
        (.year-list-view):
        (.year-list-cell):
        (.year-list-cell .label):
        (.year-list-cell .month-chooser):
        (.month-buttons-row):
        (.month-button):
        (.month-button.highlighted):
        (.scrubby-scroll-bar):
        (.scrubby-scroll-thumb):
        (.month-popup-view):
        (.year-list-view .scrubby-scroll-bar):
        (.rtl .year-list-view .scrubby-scroll-bar):
        * Resources/pagepopups/calendarPicker.js:
        (setGlobalParams): Sets the global params.
        (initialize):
        (openCalendarPicker):
        (CalendarHeaderView.prototype.onNavigationButtonClick): Fix typo.
        (CalendarPicker):
        (CalendarPicker.prototype.onWindowResize): We want to have the "preparing" class applied
        to cancel css transitions while setting up the calendar picker so we can avoid flaky pixel tests.
        (CalendarPicker.prototype.onYearListViewDidHide): The user clicked on a month so hide the month popup.
        (CalendarPicker.prototype.onYearListViewDidSelectMonth): Change the current month in response to the month popup.
        (CalendarPicker.prototype.attachTo): We want the calendar table focused when the calendar picker first opens.
        (CalendarPicker.prototype.cleanup): Clean up any event listeners or elements attached to nodes outside of this.element.
        (CalendarPicker.prototype.onMonthPopupButtonClick): Open the month popup in response to the month popup button being clicked.
        (CalendarPicker.prototype._setConfig): Configures the calendar picker.
        (CalendarPicker.prototype.currentMonth): The currently shown month.
        (CalendarPicker.prototype.setCurrentMonth): Scrolls the calendar table to the given month. Use the navigation behavior param to specify if you want a transition animation.
        (CalendarPicker.prototype.adjustHeight): Adjusts the height so its just tall enough to fit the current month. If the month picker is open, fit that.
        (CalendarPicker.prototype.selection): Currently selected date range.
        (CalendarPicker.prototype.highlight): Currently highlighted date range.
        (CalendarPicker.prototype.firstVisibleDay): Returns the first visible day ignoring scroll animation (i.e. this is the first visible day when the scroll animation is done).
        (CalendarPicker.prototype.lastVisibleDay): Returns the last visible day ignoring scroll animation.
        (CalendarPicker.prototype.selectRangeContainingDay): Sets the selection to the date range containing the given day.
        (CalendarPicker.prototype.highlightRangeContainingDay): Sets the highlight to the date range containing the given day.
        (CalendarPicker.prototype.setSelection): Sets the selection to the given date range.
        (CalendarPicker.prototype._setHighlight): Sets the highlight to the given date range.
        (CalendarPicker.prototype._stepMismatch): Just moving.
        (CalendarPicker.prototype._outOfRange): Ditto.
        (CalendarPicker.prototype.isValid): Returns true if the given date range is a valid selection.
        (CalendarPicker.prototype.isValidDay): Returns true if the day is part of a valid selection.
        (CalendarPicker.prototype._moveHighlight): Moves the highlight to the given date range if possible. Returns true if it succeeds.
        (CalendarPicker.prototype.onCalendarTableKeyDown): Handles the arrow keys, etc.
        (CalendarPicker.prototype.width):
        (CalendarPicker.prototype.height):
        (CalendarPicker.prototype.setHeight):
        (CalendarPicker.prototype.onBodyKeyDown): Handles esc/m/y/d.
        * Resources/pagepopups/chromium/calendarPickerChromium.css:
        (.calendar-table-view:focus):
        (.preparing .calendar-table-view:focus):

2013-03-07  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Remove unused return value after r122962
        https://bugs.webkit.org/show_bug.cgi?id=111821

        Reviewed by Pavel Feldman.

        No new tests.

        * inspector/front-end/ConsolePanel.js:
        (WebInspector.ConsolePanel.prototype.jumpToPreviousSearchResult):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.jumpToPreviousSearchResult):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.jumpToPreviousSearchResult):

2013-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145166.
        http://trac.webkit.org/changeset/145166
        https://bugs.webkit.org/show_bug.cgi?id=111819

        build break - no symbol
        webkit_support::CreateScopedTempDirectory() (Requested by
        hayato on #webkit).

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore):
        (WebCore::IDBBackingStore::~IDBBackingStore):
        (WebCore::IDBBackingStore::open):
        * Modules/indexeddb/IDBBackingStore.h:
        (WebCore):
        (IDBBackingStore):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::addIDBBackingStore):
        (WebCore):
        (WebCore::IDBFactoryBackendImpl::removeIDBBackingStore):
        (WebCore::IDBFactoryBackendImpl::openBackingStore):
        * Modules/indexeddb/IDBFactoryBackendImpl.h:
        (IDBFactoryBackendImpl):

2013-03-07  Hajime Morrita  <morrita@google.com>

        Custom Elements: CustomElement constructor shouldn't share function instance
        https://bugs.webkit.org/show_bug.cgi?id=111807

        Reviewed by Kentaro Hara.

        Adaptor functions of custom elements unintentionally share the instance.
        This fix gives new one for each.

        Test: Updated fast/dom/custom/document-register-basic.html

        * bindings/v8/V8AdaptorFunction.cpp:
        (WebCore::V8AdaptorFunction::wrap):

2013-03-07  Jared Wyles  <wyles@adobe.com>

        Reading border radius from style property returns in wrong order.
        https://bugs.webkit.org/show_bug.cgi?id=110853

        Reviewed by Ryosuke Niwa
        
        Updating the order of border-radius to return in the order specified
        in http://www.w3.org/TR/css3-background/#the-border-radius

        Tests updated in LayoutTests/fast/borders/border-radius-parsing.html 
        Changed the expectations in LayoutTests/inspector/elements/elements-panel-styles-expected.txt 
        
        Compat information -
        jQuery's css function favours using getComputedStyle for elements so that should not be impacted.
        Zepto does check for the element on style first so may be a slight concern there.

        * css/StylePropertyShorthand.cpp:
        (WebCore::borderRadiusShorthand):

2013-03-07  Andreas Kling  <akling@apple.com>

        Resizing Cappuccino is very laggy on WebKit since Safari 5.1
        <http://webkit.org/b/71354>
        <rdar://problem/10565998>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Export FloatPoint(const NSPoint&)

2013-03-07  Andreas Kling  <akling@apple.com>

        Remove desktop version of -webkit-text-size-adjust property.
        <http://webkit.org/b/56543>
        <rdar://problem/9150203>

        Reviewed by Simon Fraser.

        This property existed to support a number of Apple-internal clients of WebKit.
        We no longer need this property, and since it's clashing with a mobile version of the
        same property with different meaning, let's remove it altogether from the desktop build.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyLineHeight::applyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::updateFont):
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::applyProperty):
        * css/StyleResolver.h:
        (StyleResolver):
        * css/svg.css:
        * editing/EditingStyle.cpp:
        * inspector/front-end/inspector.css:
        (#console-messages):
        * inspector/front-end/resourcesPanel.css:
        (.storage-view.query):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData):

2013-03-07  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Use WeakPtr for Factory-to-BackingStore reference
        https://bugs.webkit.org/show_bug.cgi?id=111459

        Reviewed by Adam Barth.

        IDBFactoryBackendImpl maintains a map of backing stores - if another database in the same
        origin is opened, the backing store instance must be re-used). This was a map to raw
        pointers so that the backing store can be collected when all database references are
        dropped. The map was maintained manually by passing the factory to the IDBBackingStore which
        would add/remove itself on creation/destruction.

        Replace this with a HashMap<WeakPtr<>>. This simplifies the plumbing; map entries
        "leak" but are purged on subsequent opens.

        Added webkit_unit_test (Chromium port) to verify refcounts.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore): No need to notify factory of lifetime.
        (WebCore::IDBBackingStore::~IDBBackingStore): Ditto.
        (WebCore::IDBBackingStore::open): Ditto.
        * Modules/indexeddb/IDBBackingStore.h: No reference to the factory, but...
        (WebCore::IDBBackingStore::createWeakPtr): Do need to expose weak pointers for the factory to hold.
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::cleanWeakMap): Helper function to scrub a HashMap<WeakPtr<T>> of empty pointers.
        May move to WTF when we've learned how general it is, or come up with a dedicated WeakPtrHashMap type.
        (WebCore::IDBFactoryBackendImpl::openBackingStore): WeakPtr fu.
        * Modules/indexeddb/IDBFactoryBackendImpl.h:
        (IDBFactoryBackendImpl): Remove plumbing methods.

2013-03-07  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] RefCounting ParsedCookie to avoid SegFaults
        https://bugs.webkit.org/show_bug.cgi?id=111761

        Reviewed by Rob Buis.

        Making necessary changes to ref count the ParsedCookie object.

        Tested using the opera cookie test suite and the BB Browser cookie test suite.
        Tested using the browser, visiting popular sites such as facebook, reddit, google etc
        to ensure cookie functionality isn't changed.

        * loader/blackberry/CookieJarBlackBerry.cpp:
        (WebCore::getRawCookies):
        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
        (WebCore::CookieDatabaseBackingStore::insert):
        (WebCore::CookieDatabaseBackingStore::update):
        (WebCore::CookieDatabaseBackingStore::remove):
        (WebCore::CookieDatabaseBackingStore::getCookiesFromDatabase):
        (WebCore::CookieDatabaseBackingStore::invokeGetCookiesWithLimit):
        (WebCore::CookieDatabaseBackingStore::invokeSendChangesToDatabase):
        (WebCore::CookieDatabaseBackingStore::addToChangeQueue):
        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h:
        (CookieDatabaseBackingStore):
        * platform/blackberry/CookieManager.cpp:
        (WebCore::cookieSorter):
        (WebCore::CookieManager::setCookies):
        (WebCore::CookieManager::getCookie):
        (WebCore::CookieManager::generateHtmlFragmentForCookies):
        (WebCore::CookieManager::getRawCookies):
        (WebCore::CookieManager::checkAndTreatCookie):
        (WebCore::CookieManager::addCookieToMap):
        (WebCore::CookieManager::getBackingStoreCookies):
        (WebCore::CookieManager::findOrCreateCookieMap):
        (WebCore::CookieManager::removeCookieWithName):
        (WebCore::CookieManager::cookieLimitCleanUp):
        * platform/blackberry/CookieManager.h:
        * platform/blackberry/CookieMap.cpp:
        (WebCore::CookieMap::addOrReplaceCookie):
        (WebCore::CookieMap::removeCookieAtIndex):
        (WebCore::CookieMap::removeCookie):
        (WebCore::CookieMap::getAllCookies):
        (WebCore::CookieMap::removeOldestCookie):
        (WebCore::CookieMap::deleteAllCookiesAndDomains):
        (WebCore::CookieMap::getAllChildCookies):
        * platform/blackberry/CookieMap.h:
        (CookieMap):
        * platform/blackberry/CookieParser.cpp:
        (WebCore):
        (WebCore::CookieParser::parse):
        (WebCore::CookieParser::parseOneCookie):
        * platform/blackberry/CookieParser.h:
        (CookieParser):
        * platform/blackberry/ParsedCookie.cpp:
        * platform/blackberry/ParsedCookie.h:
        (ParsedCookie):
        (WebCore::ParsedCookie::create):

2013-03-07  Aaron Colwell  <acolwell@chromium.org>

        Heap-use-after-free in WebCore::HTMLMediaElement::~HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=110623

        Reviewed by Kentaro Hara.

        Test: http/tests/misc/delete-frame-during-readystatechange-with-gc-after-video-removal.html

        * bindings/v8/V8GCController.cpp: Fix MinorGCWrapperVisitor so it doesn't collect ActiveDOMObjects
                                          that have pending activity.
        * html/HTMLAudioElement.h:
        (HTMLAudioElement): Removed hasPendingActivity() now that this is handled by the base class.
        * html/HTMLAudioElement.idl: Removed ActiveDOMObject annotation since HTMLMediaElement now has it.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::hasPendingActivity): Update implementation to return true if the media
                                                         has audio and is playing. This brings the code into
                                                         compliance with the detached element behavior outlined
                                                         in the HTML5 spec.
        * html/HTMLMediaElement.idl: Added ActiveDOMObject annotation so that all derived classes are
                                     considered ActiveDOMObjects.

2013-03-07  Jeffrey Pfau  <jpfau@apple.com>

        CFNetwork cache partitioning does not work properly on subdomains
        https://bugs.webkit.org/show_bug.cgi?id=111772

        Reviewed by David Kilzer.

        Ensure that the cache partitioning is done over the top privately-controlled domain for the NSURLRequest.

        Not possible to test with current automated test tools, must be tested manually.

        * loader/cache/MemoryCache.cpp: Remove extraneous calls to partitionName
        (WebCore):
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationSucceeded):
        (WebCore::MemoryCache::resourceForRequest):
        (WebCore::MemoryCache::evict):
        (WebCore::MemoryCache::removeResourcesWithOrigin):
        * platform/network/cf/ResourceRequest.h: Put top privately-controlled domain reduction code into ResourceRequest::partitionName
        (ResourceRequest):
        (WebCore::ResourceRequest::cachePartition):
        (WebCore::ResourceRequest::setCachePartition): Pre-process the partition name
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore):
        (WebCore::ResourceRequest::partitionName):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Use a UTF-8 version of the cache partition name

2013-03-07  Kenneth Russell  <kbr@google.com>

        Compute WebGL context attributes from DrawingBuffer when it is used
        https://bugs.webkit.org/show_bug.cgi?id=111666

        Reviewed by James Robinson.

        Fixed computation of antialias flag when DrawingBuffer is used.

        No new tests; covered by existing tests. Ran WebGL conformance
        tests on desktop Linux and Android to test.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::getContextAttributes):
            Query DrawingBuffer, when used, for antialias flag.

2013-03-07  Beth Dakin  <bdakin@apple.com>

        Need API to draw custom overhang area
        https://bugs.webkit.org/show_bug.cgi?id=111679
        -and corresponding-
        <rdar://problem/13291415>

        Reviewed by Simon Fraser.

        This will allow clients to put custom images into the top or bottom overhang area.

        New FrameView API takes a bool indicating whether the client wants a top/bottom 
        overhang layer. If the bool is true, the overhang layer will be returned. 
        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::setWantsLayerForTopOverHangArea):
        (WebCore::FrameView::setWantsLayerForBottomOverHangArea):
        * page/FrameView.h:
        (FrameView):

        Keep member variables for the top and bottom overhang layers. Create them if 
        necessary, and update them if the root layer changes.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::reportMemoryUsage):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-03-07  Gavin Barraclough  <barraclough@apple.com>

        Reduce page cache size on Mac
        https://bugs.webkit.org/show_bug.cgi?id=111795

        Rubber stamped by Geoff Garen

        5 entries is unnecessarily large; research show 3 should suffice.
        On a low memory warning we should clear this completely.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):
            - clear the page cache completely

2013-03-07  Simon Fraser  <simon.fraser@apple.com>

        Rename Mac's TileCache to TileController, and WebTileCacheLayer to WebTiledBackingLayer
        https://bugs.webkit.org/show_bug.cgi?id=111779

        Reviewed by Tim Horton.
        
        "TileCache" was a name conflict in downstream code, so rename it to TileController.
        The layer that has a TileController is now a WebTiledBackingLayer (which fits with
        the TiledBacking API that TileController exposes).
        
        Also renamed the flags in PlatformCALayer to match.

        Rename only, no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::shouldUseTiledBacking):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::platformCALayerShowRepaintCounter):
        (WebCore::GraphicsLayerCA::platformCALayerDidCreateTiles):
        (WebCore::GraphicsLayerCA::updateVisibleRect):
        (WebCore::GraphicsLayerCA::getDebugBorderInfo):
        (WebCore::GraphicsLayerCA::requiresTiledLayer):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::usesTiledBackingLayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer):
        (PlatformCALayer::~PlatformCALayer):
        (PlatformCALayer::tiledBacking):
        * platform/graphics/ca/mac/TileController.h: Renamed from Source/WebCore/platform/graphics/ca/mac/TileCache.h.
        * platform/graphics/ca/mac/WebTileLayer.h:
        (TileController):
        * platform/graphics/ca/mac/WebTileLayer.mm:
        (-[WebTileLayer drawInContext:]):
        (-[WebTileLayer setTileController:WebCore::]):
        (-[WebTileLayer logFilledFreshTile]):
        * platform/graphics/ca/mac/WebTiledBackingLayer.h: Renamed from Source/WebCore/platform/graphics/ca/mac/WebTileCacheLayer.h.
        * platform/graphics/ca/mac/WebTiledBackingLayer.mm: Renamed from Source/WebCore/platform/graphics/ca/mac/WebTileCacheLayer.mm.
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::shouldUseTiledBacking):
        (WebCore::RenderLayerBacking::adjustTiledBackingCoverage):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::usingTiledBacking):
        (RenderLayerBacking):
        (WebCore::RenderLayerBacking::hasTiledBackingFlatteningLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidLayout):
        (WebCore::RenderLayerCompositor::rootFixedBackgroundsChanged):
        (WebCore::RenderLayerCompositor::supportsFixedRootBackgroundCompositing):

2013-03-07  Alexey Proskuryakov  <ap@apple.com>

        FormData should allow setting filename to empty
        https://bugs.webkit.org/show_bug.cgi?id=111687

        Reviewed by Brady Eidson.

        Tests: http/tests/local/formdata/send-form-data-with-empty-blob-filename.html
               http/tests/local/formdata/send-form-data-with-empty-file-filename.html

        * platform/network/FormData.cpp: (WebCore::FormData::appendKeyValuePairItems):
        Missing value is a null string. If the string is empty, we should treat is as
        authoritative.

2013-03-07  David Hyatt  <hyatt@apple.com>

        REGRESSION: fast/border/border-fit-2.html needs updating
        https://bugs.webkit.org/show_bug.cgi?id=111776

        Reviewed by Simon Fraser.

        This test is incorrectly shrinking the border image now.
        We need to apply some clamping to the border-fit like the
        old code did. The pixel results *are* still changing though,
        since a layout-time shrinkage will not result in right-aligned
        boxes in an LTR block when the left edge gets chopped. We'll
        have to see if this behavioral change ends up being a problem,
        but for now we'll rebaseline and assume it will be ok.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fitBorderToLinesIfNeeded):

2013-03-07  Antoine Quint  <graouts@apple.com>

        Web Inspector: provide reasons why a layer was composited in the LayerTreeAgent
        https://bugs.webkit.org/show_bug.cgi?id=111703

        Introduce a new LayerTree.reasonsForCompositingLayer(layerId) method which returns
        the list of reasons why the provided layer was composited as an object with an
        optional property for each possible reason. The RenderLayerCompositor already knows
        how to provide this information via its own reasonsForCompositing() method, and we
        process the returned bitmask to populate the object sent to the front-end.

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/layers/layers-compositing-reasons.html

        * inspector/Inspector.json:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        (WebCore):
        * inspector/InspectorLayerTreeAgent.h:
        (InspectorLayerTreeAgent):

2013-03-07  Anders Carlsson  <andersca@apple.com>

        Add a didFocusTextField callback to the injected bundle form client
        https://bugs.webkit.org/show_bug.cgi?id=111771

        Reviewed by Andreas Kling.

        Export a symbol needed by WebKit2.

        * WebCore.exp.in:

2013-03-06  James Robinson  <jamesr@chromium.org>

        [chromium] Stop using WebTransformationMatrix on WebLayer
        https://bugs.webkit.org/show_bug.cgi?id=111635

        Reviewed by Adrienne Walker.

        Switches over to the SkMatrix44 transform setters.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::transformToSkMatrix44):
          Utility for convering a WebCore::TransformationMatrix to an SkMatrix44.
          Will move to a more common location once it gets more callers.
        (WebCore::GraphicsLayerChromium::updateTransform):
        (WebCore::GraphicsLayerChromium::updateChildrenTransform):

2013-03-07  Eric Carlson  <eric.carlson@apple.com>

        [Mac] allow iOS to use CaptionUserPreferencesMac
        https://bugs.webkit.org/show_bug.cgi?id=111770

        Reviewed by Dean Jackson.

        No new tests, covered by existing tests.

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::userCaptionPreferencesChangedNotificationCallback): Respond to notifications on
            the web thread.

2013-03-07  Mike West  <mkwst@chromium.org>

        Move side-effects on hover/active state out of hit-testing
        https://bugs.webkit.org/show_bug.cgi?id=98168

        Reviewed by Julien Chaffraix.

        Original patch by Allan Sandfeld Jensen; I'm just tweaking things.

        Document::updateHoverActiveState is currently called during hit testing
        to update the hover and active states of elements effected by mouse
        movements (or their keyboard equivalents). This conflates the hit test
        algorithm itself with side-effects associated with specific use-cases.

        This conflation makes it very difficult to reuse the hover/active logic
        for things other than hit testing. 'mouseenter'/'mouseleave' events[1]
        are one example of a feature that would be simple to implement on top of
        this existing logic if we split it out from the hit testing path, and
        instead call it explicitly when necessary. An explicit split between
        hit testing and its side-effects will also enable us to simplify the
        logic in future patches with well-named parameters, rather than relying
        on stuffing properties into HitTestRequest.

        This patch drops the call to Document::updateHoverActiveState from
        RenderView::hitTest, and adjusts the three call-sites in EventHandler
        to explicitly call out to it rather than Document::updateStyleIfNeeded.
        The latter call is still necessary but has been folded into
        updateHoverActiveState, as the former is never called without calling
        the latter.

        [1]: http://wkbug.com/18930

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::updateHoverActiveState):
            First, this function must now only be called from contexts that were
            performing a read/write hit-test: the code asserts this
            precondition.

            Second, rather than accepting a HitTestResult, the function accepts
            an Element* from which to begin the hover/active chain changes.

            Third, we have to explicitly update the hover/active states for
            documents between the updated element and the top-level document.
            The hit-testing logic was taking care of this for us, now we need to
            take care of it ourselves.

            Fourth, call out to updateStyleIfNeeded rather than making our
            caller do so. The calls were always paired; now that's explicit.
        (WebCore::Document::prepareMouseEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::hoverTimerFired):
            Call out to updateHoverActiveState rather than updateStyleIfNeeded.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::hitTest):
            Drop the call to updateHoverActiveState.

2013-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145097.
        http://trac.webkit.org/changeset/145097
        https://bugs.webkit.org/show_bug.cgi?id=111765

        Triggers an ASSERT in the Chromium port (Requested by abarth
        on #webkit).

        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData):
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):

2013-03-07  Chris Fleizach  <cfleizach@apple.com>

        AX: Can't activate links with VoiceOver in Safari
        https://bugs.webkit.org/show_bug.cgi?id=111755

        Reviewed by Tim Horton.

        VoiceOver is relying on the press action being the first action in the list. We changed
        that order inadvertently recently, which confuses VoiceOver.

        Test: platform/mac/accessibility/press-action-is-first.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityActionNames]):

2013-03-07  Rafael Weinstein  <rafaelw@chromium.org>

        Unreviewed, rolling out r145083.
        http://trac.webkit.org/changeset/145083
        https://bugs.webkit.org/show_bug.cgi?id=110733

        caused lots crashes in http/tests/security/xssAuditor/* tests

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::create):
        (XSSInfo):
        (WebCore::XSSInfo::XSSInfo):

2013-03-07  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Implement hue and saturation non-separable blend modes
        https://bugs.webkit.org/show_bug.cgi?id=109464

        Added the following GLSL helper functions to the CustomFilterValidatedProgram:

            - css_Sat(C): returns the saturation for the color C
            - css_SetSat(C, s): sets the saturation s on the color C
            - css_SetSatHelper(Cmin, Cmid, Cmax, s): helper function for css_SetSat

        The above functions are being used for the "hue" and "saturation" non-separable
        blend modes, the relevant spec for such modes is at URL:
        https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blendingnonseparable

        Reviewed by Dean Jackson.

        Tests: css3/filters/custom/custom-filter-nonseparable-blend-mode-hue.html
               css3/filters/custom/custom-filter-nonseparable-blend-mode-saturation.html

        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::blendFunctionString):

2013-03-07  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [ACE] set correct font
        https://bugs.webkit.org/show_bug.cgi?id=111747

        Reviewed by Pavel Feldman.

        No new tests.

        Set class "source-code" for the ace editor element.

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

2013-03-06  Ojan Vafai  <ojan@chromium.org>

        Recalculate borders at the beginning of table layout
        https://bugs.webkit.org/show_bug.cgi?id=111634

        Reviewed by Julien Chaffraix.

        Doing it in convertStyleLogicalWidthToComputedWidth missed some dynamic
        relayout cases. I confirmed that the new results match the results we
        would get if we set the border width initially instead of dynamically.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        (WebCore::RenderTable::layout):

2013-03-07  David Hyatt  <hyatt@apple.com>

        border-fit-adjust should happen at layout time rather than paint time
        https://bugs.webkit.org/show_bug.cgi?id=111606
        <rdar://problem/13101714>

        Reviewed by Antti Koivisto.

        In order for border-fit-adjust to be accurate in more cases, it needs
        to be a layout-time adjustment rather than a paint-time adjustment.
        Specifically there are cases where an LTR adjusted box was right-aligned
        by its container, and without genuinely shrinking the size of the box,
        we end up chopping off the right edge but not shifting the box to the
        right to compensate.
        
        This patch changes border-fit-adjust to now do the adjustment using
        the override width mechanism and a second layout pass instead of just
        hacking painting.

        Test: fast/block/border-fit-with-right-alignment.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        Calls fitBorderToLinesIfNeeded at the end of layout to do a second
        layout pass if the adjustment needs to be made.

        (WebCore::RenderBlock::fitBorderToLinesIfNeeded):
        Renamed borderFitAdjust to fitBorderToLinesIfNeeded and made it
        non-virtual, since it's no longer called from RenderBox code. Changed it
        to do a relayout using override widths if an adjustment is needed.

        * rendering/RenderBlock.h:
        (RenderBlock):
        Renamed borderFitAdjust to fitBorderToLinesIfNeeded and made it
        non-virtual.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMask):
        Removed the paint-time border-fit adjustment.

        (WebCore::RenderBox::computeLogicalWidthInRegion):
        Use the override width when border-fit is set to lines.

        * rendering/RenderBox.h:
        (RenderBox):
        Remove the virtual borderFitAdjust method.

2013-03-07  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        REGRESSION(r143727): Clicking / selecting inside an <embed> is broken
        https://bugs.webkit.org/show_bug.cgi?id=111217

        Reviewed by Julien Chaffraix.

        Hit-testing into child frames need to happen in RenderPart, otherwise
        we will miss frame views in <embed> and <object> elements. 

        Test: fast/dom/nodesFromRect/nodesFromRect-embedded-frame-content.html

        * rendering/RenderFrameBase.cpp:
        * rendering/RenderFrameBase.h:
        (RenderFrameBase):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::nodeAtPoint):
        * rendering/RenderPart.h:
        (RenderPart):

2013-03-07  Alexey Proskuryakov  <ap@apple.com>

        FormData should allow setting filename to empty
        https://bugs.webkit.org/show_bug.cgi?id=111687

        Reviewed by Brady Eidson.

        Tests: http/tests/local/formdata/send-form-data-with-empty-blob-filename.html
               http/tests/local/formdata/send-form-data-with-empty-file-filename.html

        * html/FileInputType.cpp: (WebCore::FileInputType::appendFormData):
        Use a Blob for empty file input, not a hacky File with empty path.

        * platform/network/FormData.cpp: (WebCore::FormData::appendKeyValuePairItems):
        Missing value is a null string. If the string is empty, we should treat is as
        authoritative.

2013-03-07  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] dublicated horizontal scroll
        https://bugs.webkit.org/show_bug.cgi?id=111712

        Reviewed by Pavel Feldman.

        Set a box-sizing css property on all codemirror elements to
        "content-box".

        No new tests.

        * inspector/front-end/cm/cmdevtools.css:
        (.CodeMirror *):

2013-03-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Styles sidebar pane toolbar disappears in horizontal split mode.
        https://bugs.webkit.org/show_bug.cgi?id=111735

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._splitVertically):
        * inspector/front-end/elementsPanel.css:
        (.sidebar-pane.composite .metrics-and-computed .sidebar-pane-toolbar):

2013-03-07  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Limit the supported compilers to GCC >= 4.7 and Clang >= 3.0
        https://bugs.webkit.org/show_bug.cgi?id=109932

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Replace references to SYMBOL_VISIBILITY_INLINES and SYMBOL_VISIBILITY variables with the actual flags.
        They are now available by default due to the limited set of supported compilers.
        * bindings/gobject/GNUmakefile.am: Ditto.

2013-03-07  Mike West  <mkwst@chromium.org>

        XSSAuditor should send only one console error when blocking a page.
        https://bugs.webkit.org/show_bug.cgi?id=110733

        Reviewed by Daniel Bates.

        Currently, we send two console errors when XSSAuditor blocks a page:
        "Refused to execute a JavaScript script. Source code of script found
        within request.\n", and "Entire page will be blocked.".

        We should only send one message, tuning it properly for the context, and
        including the URL of the page effected by the XSSAuditor's work.

        Covered by rebaselines of all the XSSAuditor and 'reflected-xss' tests.

        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditor.h:
        (WebCore::XSSAuditor::XSSAuditor):
            Add two booleans to track the headers used to set the XSSAuditor state.
        (WebCore::XSSAuditor::init):
            Save a copy of the document's URL even if we're not generating a
            report upon violation: we'll need it for the console messages. Also
            populate the didSendValidXXXHeader booleans for use later.
        (WebCore::XSSAuditor::filterToken):
            Add detail about the header status to the constructed XSSInfo object.
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::buildConsoleError):
            Move message construction out into a separate inlined function, as
            it's becoming complex.
        (WebCore::XSSAuditorDelegate::didBlockScript):
            Fold the "Entire page will be blocked" message into the main console
            error.
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::create):
        (WebCore::XSSInfo::XSSInfo):
            Add detail about header status to XSSInfo in order to correctly
            construct the console error.

2013-03-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add some more compilation annotations to NavigatorView
        https://bugs.webkit.org/show_bug.cgi?id=111730

        Reviewed by Alexander Pavlov.

        * inspector/front-end/NavigatorView.js:

2013-03-06  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Enable translations for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=111398

        Reviewed by Martin Robinson.

        Build change only, thus no tests.

        * GNUmakefile.am: distribute po files.
        * platform/gtk/po/POTFILES.in: adjust paths for translatable files.

2013-03-07  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [CodeMirror] update codemirror to version 3.1
        https://bugs.webkit.org/show_bug.cgi?id=111711

        Reviewed by Vsevolod Vlasov.

        Update code mirror experimental editor to version 3.1

        No new tests.

        * inspector/front-end/cm/codemirror.css:
        (.CodeMirror div.CodeMirror-cursor):
        (.CodeMirror div.CodeMirror-secondarycursor):
        (.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor):
        (.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor:not(#nonsense_id)):
        (.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite):
        (.CodeMirror-gutters):
        (.CodeMirror-linewidget):
        (.CodeMirror-widget):
        (.CodeMirror-focused div.CodeMirror-cursor):
        (@media print):
        * inspector/front-end/cm/codemirror.js:
        (window.CodeMirror):
        (window.CodeMirror.):

2013-03-07  Sergio Correia  <sergio.correia@openbossa.org>

        OpenGLShims: fix check for ANGLE GLES2 extensions
        https://bugs.webkit.org/show_bug.cgi?id=111656

        Reviewed by Simon Hausmann.

        The check for ANGLE GLES2 extensions is currently being overriden
        with checks for APPLE extensions in lookupOpenGLFunctionAddress().

        No new tests. No user visible behavior changed.

        * platform/graphics/OpenGLShims.cpp:
        (WebCore::lookupOpenGLFunctionAddress):

2013-03-07  David Kilzer  <ddkilzer@apple.com>

        Rename visible_units.h to VisibleUnits.h in WebCore.vcxproj.filters
        <http://webkit.org/b/111426>

        * WebCore.vcxproj/WebCore.vcxproj.filters: Rename visible_units.h
        to VisibleUnits.h and re-sort.

2013-03-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Support a shortcut for reloading front-end in debug mode.
        https://bugs.webkit.org/show_bug.cgi?id=111709

        Reviewed by Pavel Feldman.

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

2013-03-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Support setting up file system mappings from scripts panel context menu.
        https://bugs.webkit.org/show_bug.cgi?id=111583

        Reviewed by Pavel Feldman.

        Added context menu items to set up network - file system mappings from sources panel.
        Implemented mapping add/remove methods on Workspace.
        Added a dialog suggesting to reload front-end after making such changes.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/FileSystemMapping.js:
        (WebInspector.FileSystemMappingImpl.prototype.fileSystemPath):
        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemWorkspaceProvider.prototype._fileSystemRemoved):
        (WebInspector.FileSystemWorkspaceProvider.prototype.fileSystemPath):
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog.prototype.onEnter):
        (WebInspector.FilteredItemSelectionDialog.prototype.setQuery):
        (WebInspector.SelectUISourceCodeDialog):
        (WebInspector.SelectUISourceCodeDialog.prototype.uiSourceCodeSelected):
        (WebInspector.SelectUISourceCodeDialog.prototype.filterProject):
        (WebInspector.SelectUISourceCodeDialog.prototype.filterUISourceCode):
        (WebInspector.SelectUISourceCodeDialog.prototype.selectItem):
        (WebInspector.SelectUISourceCodeDialog.prototype._uiSourceCodeAdded):
        (WebInspector.OpenResourceDialog):
        (WebInspector.OpenResourceDialog.prototype.uiSourceCodeSelected):
        (WebInspector.OpenResourceDialog.prototype.filterProject):
        (WebInspector.SelectUISourceCodeForProjectTypeDialog):
        (WebInspector.SelectUISourceCodeForProjectTypeDialog.prototype.uiSourceCodeSelected):
        (WebInspector.SelectUISourceCodeForProjectTypeDialog.prototype.filterProject):
        (WebInspector.SelectUISourceCodeForProjectTypeDialog.show):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._mapFileSystemToNetwork.mapFileSystemToNetwork):
        (WebInspector.ScriptsPanel.prototype._mapFileSystemToNetwork):
        (WebInspector.ScriptsPanel.prototype._removeNetworkMapping):
        (WebInspector.ScriptsPanel.prototype._mapNetworkToFileSystem.mapNetworkToFileSystem):
        (WebInspector.ScriptsPanel.prototype._mapNetworkToFileSystem):
        (WebInspector.ScriptsPanel.prototype.):
        (WebInspector.ScriptsPanel.prototype._appendUISourceCodeMappingItems):
        (WebInspector.ScriptsPanel.prototype._appendUISourceCodeItems):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.WorkspaceSettingsTab):
        (WebInspector.WorkspaceSettingsTab.prototype.wasShown):
        (WebInspector.WorkspaceSettingsTab.prototype._reset):
        * inspector/front-end/ViewportControl.js:
        (WebInspector.ViewportControl.prototype.refresh):
        * inspector/front-end/Workspace.js:
        (WebInspector.Workspace.prototype.addMapping):
        (WebInspector.Workspace.prototype.removeMapping):
        * inspector/front-end/externs.js:
        (WebInspector.suggestReload):
        * inspector/front-end/inspector.js:
        (WebInspector.suggestReload):

2013-03-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add support for frontend reloading
        https://bugs.webkit.org/show_bug.cgi?id=111727

        Reviewed by Pavel Feldman.

        This patch adds support for frontend reloading including:
          - making sure no messages are sent to backend once frontend started reloading
          - updating frontend url with up-to-date dockSide query parameter value.

        * inspector/front-end/InspectorBackend.js:
        (InspectorBackendClass.prototype.sendMessageObjectToBackend):
        (InspectorBackendClass.prototype.disconnect):
        * inspector/front-end/externs.js:
        (WebInspector.reload):
        * inspector/front-end/inspector.js:
        (WebInspector.reload):

2013-03-07  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Change profile start button caption depending on profile type.
        https://bugs.webkit.org/show_bug.cgi?id=111698

        Change the start profiling button caption to "Snapshot" for
        snapshot-like profile types, e.g. JS heap snapshot, native memory snapshot.

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotProfileType.prototype.isInstantProfile):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotProfileType.prototype.isInstantProfile):
        (WebInspector.NativeMemoryProfileType.prototype.isInstantProfile):
        * inspector/front-end/ProfileLauncherView.js:
        (WebInspector.ProfileLauncherView):
        (WebInspector.ProfileLauncherView.prototype.addProfileType):
        (WebInspector.ProfileLauncherView.prototype._updateControls):
        (WebInspector.MultiProfileLauncherView.prototype._updateControls):
        (WebInspector.MultiProfileLauncherView.prototype._profileTypeChanged):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.isInstantProfile):

2013-03-07  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [texmap] Remove direct access to clip state from clip stack
        https://bugs.webkit.org/show_bug.cgi?id=111630

        Reviewed by Allan Sandfeld Jensen.

        As we are now monitoring the clip state from
        TextureMapperGL/BitmapTextureGL, have direct access to clip state object
        would eventually make it dirty without properly setting the
        'clipStateDirty' flag. This bug intends to substitute direct access with
        auxiliary functions which would set the clip state dirty when necessary.

        No new tests. No user visible behavior changed.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::ClipStack::intersect):
        (WebCore::TextureMapperGL::ClipStack::setStencilIndex):
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::beginScissorClip):
        (WebCore::TextureMapperGL::beginClip):
        Replaced direct access with auxiliary functions.

        * platform/graphics/texmap/TextureMapperGL.h:
        (ClipStack): Removed ClipStack::current() function.
        (WebCore::TextureMapperGL::ClipStack::getStencilIndex): Added.
        (WebCore::TextureMapperGL::ClipStack::isCurrentScissorBoxEmpty): Added.

2013-03-07  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [Texturemapper] transform-style 'flat' value is broken
        https://bugs.webkit.org/show_bug.cgi?id=111566

        Reviewed by Allan Sandfeld Jensen.

        After changes from r144290, the CSS3 'transform-styles' property, when
        used with 'flat' value, resulted in non-stenciled rendering inside
        clipped area - vide example from Surfin' Safari blog:
        https://www.webkit.org/blog-files/3d-transforms/transform-style.html

        This patch forces the clip state to be applied when binding the default
        surface.

        No new tests. No user visible behavior changed.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::ClipStack::apply):
        (WebCore::TextureMapperGL::ClipStack::applyIfNeeded): Added.
        Moved state cache check from apply() to applyIfNeeded().

        (WebCore::BitmapTextureGL::clearIfNeeded):
        (WebCore::BitmapTextureGL::bind):
        (WebCore::TextureMapperGL::beginScissorClip):
        (WebCore::TextureMapperGL::beginClip):
        (WebCore::TextureMapperGL::endClip):
        * platform/graphics/texmap/TextureMapperGL.h:
        (ClipStack):
        Use applyIfNeeded() to check for clip state before clipping.

2013-03-07  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: refactoring: move TextEditorModel.Indent enum into TextUtils
        https://bugs.webkit.org/show_bug.cgi?id=111715

        Reviewed by Pavel Feldman.

        Move WebInspector.TextEditorModel.Indent into WebInspector.TextUtils namespace.

        No new tests: no change in behaviour.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.endsWithBracketRegex.):
        * inspector/front-end/TextUtils.js:

2013-03-07  Ian Vollick  <vollick@chromium.org>

        Fix painting phases for composited scrolling
        https://bugs.webkit.org/show_bug.cgi?id=107618

        Reviewed by Simon Fraser.

        With composited scrolling, the scrolling contents layer paints the 
        foreground and the main graphics layer paints the background. This 
        causes a few problems:

          1) If we create a foreground layer, we end up with two layers painting 
             the foreground phase.
          2) Focus rings / outlines paint into the foreground layer, so they end
             up moving around with the scrolling contents.
          3) Neg z-order descendants paint in the the main graphics layer and
             will therefore not scroll.

        To deal with 1) we need to stop painting the foreground into both the
        foreground and scrolling contents layers. We also need to ensure that
        the foreground layer is the right size and has the right offset from
        renderer if we're on the composited scrolling path.

        To deal with 2) and 3), I have added a new graphics layer painting phase 
        flag -- GraphicsLayerPaintCompositedScroll -- and applied it to two
        layers in the subtree created by RenderLayerBacking. This ultimately
        affects the paint phase passed to RenderLayer::paintLayerContents and
        allows us to paint the focus rings, outlines and negative z-order
        descendants into the proper layers.

        Tests: compositing/overflow/composited-scrolling-paint-phases.html
               compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html
               compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html

        * page/Frame.h:
          Added a flag for including painting phases in the layer tree dump.
        (WebCore::GraphicsLayer::dumpProperties):
          Can now dump painting phase information, but only if requested.
        * platform/graphics/GraphicsLayerClient.h:
          Added a new entry to GraphicsLayerPaintingPhaseFlags for comp-scroll.
        (WebCore::RenderLayer::paintLayerContents):
          Updated the logic to account for the new comp-scroll-related paint
          phase flag.
        * rendering/RenderLayer.h:
          Added the RenderLayer painting phase counterpart to
          GraphicsLayerPaintCompositedScroll.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
          Ensures that the foreground layer is sized correctly for comp-scroll.
        (WebCore::RenderLayerBacking::updateScrollingLayers):
          If we have a foreground layer, the scrolling contents layer no
          longer gets assigned the foreground painting phase.
        (WebCore::RenderLayerBacking::paintingPhaseForPrimaryLayer):
          If we're comp-scrolling, then the primary layer gets the new phase.
        (WebCore::RenderLayerBacking::paintIntoLayer):
          Simply translates the new graphics layer painting phase to its
          render layer counterpart.
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText):
        * testing/Internals.h:
        * testing/Internals.idl:
          The above changes are solely plumbing to allow layout tests to
          request that paint phase information be included in the layer tree
          dump.

2013-03-07  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Use Qt5.1 supportedMimeTypes methods.
        https://bugs.webkit.org/show_bug.cgi?id=111185

        Reviewed by Jocelyn Turcotte.

        Uses the supportedMimeTypes() methods from QImageReader and QImageWriter when available.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):

2013-03-07  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Stick item color to the function.
        https://bugs.webkit.org/show_bug.cgi?id=111697

        Reviewed by Yury Semikhatsky.

        Different nodes associated with a single function have to use the same color.
        Minor polish: do not filter out (idle) and (program) items. They were big due to an error on v8 side.
        Set minimum width to 0 for more precise picture.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype._rootNodes):
        (WebInspector.FlameChart.prototype.draw):
        (WebInspector.FlameChart.prototype._drawNode):
        (WebInspector.FlameChart.prototype._drawBar):

2013-03-07  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [ACE] gutter size should be fixed.
        https://bugs.webkit.org/show_bug.cgi?id=111576

        Reviewed by Pavel Feldman.

        Add a custom ace editor build that supports setFixedGutterWidth configuration
        parameter and switch this setting on.

        No new tests.

        * inspector/front-end/AceTextEditor.js:
        (WebInspector.AceTextEditor): Switch fixedGutterWidth setting on.
        * inspector/front-end/ace/ace.js:
        (.):

2013-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145059.
        http://trac.webkit.org/changeset/145059
        https://bugs.webkit.org/show_bug.cgi?id=111707

        crash webkit build (Requested by tasak on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/DocumentRuleSets.cpp:
        (WebCore::ShadowDistributedRules::collectMatchRequests):
        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.cpp: Removed.
        * css/ElementRuleCollector.h: Removed.
        * css/PageRuleCollector.cpp: Removed.
        * css/PageRuleCollector.h: Removed.
        * css/StyleResolver.cpp:
        (WebCore::leftToRightDeclaration):
        (WebCore):
        (WebCore::rightToLeftDeclaration):
        (WebCore::StyleResolver::State::ensureRuleList):
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::addMatchedProperties):
        (WebCore::StyleResolver::addElementStyleProperties):
        (MatchingUARulesScope):
        (WebCore::MatchingUARulesScope::MatchingUARulesScope):
        (WebCore::MatchingUARulesScope::~MatchingUARulesScope):
        (WebCore::MatchingUARulesScope::isMatchingUARules):
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::matchHostRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::compareRules):
        (WebCore::StyleResolver::sortMatchedRules):
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::ruleMatches):
        (WebCore::StyleResolver::checkRegionSelector):
        (WebCore::comparePageRules):
        (WebCore::StyleResolver::matchPageRules):
        (WebCore::checkPageSelectorComponents):
        (WebCore::StyleResolver::matchPageRulesForList):
        (WebCore::StyleResolver::isLeftPage):
        (WebCore::StyleResolver::isFirstPage):
        (WebCore::StyleResolver::pageName):
        * css/StyleResolver.h:
        (WebCore::MatchRequest::MatchRequest):
        (MatchRequest):
        (StyleResolver):
        (MatchResult):
        (WebCore::StyleResolver::State::State):
        (State):
        (WebCore::StyleResolver::State::takeRuleList):
        (WebCore::StyleResolver::State::setSameOriginOnly):
        (WebCore::StyleResolver::State::isSameOriginOnly):
        (WebCore::StyleResolver::State::pseudoStyleRequest):
        (WebCore::StyleResolver::State::setMode):
        (WebCore::StyleResolver::State::mode):
        (WebCore::StyleResolver::State::matchedRules):
        (WebCore::StyleResolver::State::addMatchedRule):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willMatchRule):
        * inspector/InspectorCSSAgent.h:
        (WebCore):
        (InspectorCSSAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willMatchRule):

2013-03-07  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):

2013-03-07  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] Implement RuleCollector
        https://bugs.webkit.org/show_bug.cgi?id=109916

        Reviewed by Antti Koivisto.

        Implemented rule collector for an element and collector for a page.
        Not all members in class State are required entire while resolving
        a style.

        No new tests, because just refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        Added ElementRuleCollector and PageRuleCollector.
        * css/DocumentRuleSets.cpp:
        (WebCore::ShadowDistributedRules::collectMatchRequests):
        Since behaviorAtBoundary is a state owned by ElementRuleCollector,
        removed from here.
        * css/DocumentRuleSets.h:
        (WebCore::ShadowDistributedRules::isEmpty):
        Added to quickly check whether there exist any ShadowDistributedRules
        or not.
        * css/ElementRuleCollector.cpp: Copied from Source/WebCore/css/StyleResolver.cpp.
        (WebCore):
        (WebCore::ElementRuleCollector::matchedResult):
        (WebCore::ElementRuleCollector::matchedRuleList):
        (WebCore::ElementRuleCollector::addMatchedRule):
        (WebCore::ElementRuleCollector::clearMatchedRules):
        (WebCore::ElementRuleCollector::ensureRuleList):
        (WebCore::ElementRuleCollector::addElementStyleProperties):
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::collectMatchingRulesForRegion):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::matchScopedAuthorRules):
        (WebCore::ElementRuleCollector::matchHostRules):
        (WebCore::ElementRuleCollector::matchShadowDistributedRules):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchUserRules):
        (WebCore::ElementRuleCollector::matchUARules):
        (WebCore::ElementRuleCollector::ruleMatches):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        (WebCore::ElementRuleCollector::sortMatchedRules):
        (WebCore::ElementRuleCollector::matchAllRules):
        Moved these methods from StyleResolver to this class.
        (WebCore::ElementRuleCollector::hasAnyMatchingRules):
        This method is used for checking whether a given element can share
        a cache.
        * css/ElementRuleCollector.h: Copied from Source/WebCore/css/StyleResolver.h.
        (WebCore):
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        Use styleResolver instance to initialize its member variables, i.e.
        SelectorFilter, RuleSets, InspectorCSSOMWrappers, and
        StyleScopedResolver.
        (ElementRuleCollector):
        (WebCore::ElementRuleCollector::setMode):
        (WebCore::ElementRuleCollector::setPseudoStyleRequest):
        (WebCore::ElementRuleCollector::setSameOriginOnly):
        (WebCore::ElementRuleCollector::setRegionForStyling):
        Mode, SameOriginOnly, RegionForStyling are only used while collecting
        matched rules.
        (WebCore::ElementRuleCollector::setMedium):
        Need to know which default stylesheet should be looked up.
        (WebCore::ElementRuleCollector::document):
        * css/PageRuleCollector.cpp: Copied from Source/WebCore/css/StyleResolver.cpp.
        (WebCore::comparePageRules):
        (WebCore::PageRuleCollector::isLeftPage):
        (WebCore::PageRuleCollector::isFirstPage):
        (WebCore::PageRuleCollector::pageName):
        (WebCore::PageRuleCollector::matchAllPageRules):
        (WebCore::PageRuleCollector::matchPageRules):
        (WebCore::checkPageSelectorComponents):
        (WebCore::PageRuleCollector::matchPageRulesForList):
        Moved from StyleResolver.
        * css/PageRuleCollector.h: Copied from Source/WebCore/css/StyleResolver.h.
        (WebCore):
        (WebCore::PageRuleCollector::PageRuleCollector):
        (PageRuleCollector):
        (WebCore::PageRuleCollector::matchedResult):
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::MatchResult::addMatchedProperties):
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::applyMatchedProperties):
        * css/StyleResolver.h:
        (WebCore::MatchRequest::MatchRequest):
        Removed behaviorAtBoundary. Instead, ElementRuleCollector have the
        state.
        (MatchRequest):
        (WebCore::StyleResolver::selectorFilter):
        Added to obtain SelectorFilter in ElementRuleCollector's constructor.
        (StyleResolver):
        (MatchResult):
        (WebCore::StyleResolver::State::State):
        To pass ASSERT in StyleResolver::applyProperties, need to keep
        m_regionForStyling.
        (State):
        (WebCore::StyleResolver::State::regionForStyling):
        (WebCore::StyleResolver::State::useSVGZoomRules):
        (WebCore::StyleResolver::hasSelectorForId):
        (WebCore):
        (WebCore::checkRegionSelector):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willMatchRule):
        Removed StyleResolver from its parameter list. Instead, added
        InspectorCSSOMWrappers and DocumentStyleSheetCollection.
        * inspector/InspectorCSSAgent.h:
        (WebCore):
        (InspectorCSSAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willMatchRule):

2013-03-07  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [ACE] add experimental breakpoint support
        https://bugs.webkit.org/show_bug.cgi?id=111573

        Reviewed by Pavel Feldman.

        No new tests.

        - Implement attributes model for ace editor. Update attribute
        locations by handling onTextChange event from editor.
        - Implement breakpoints atop of attributes model.

        * inspector/front-end/AceTextEditor.js:
        (WebInspector.AceTextEditor):
        (WebInspector.AceTextEditor.prototype._updateBreakpoints):
        (WebInspector.AceTextEditor.prototype._updateLineAttributes):
        (WebInspector.AceTextEditor.prototype._onTextChange):
        (WebInspector.AceTextEditor.prototype.addBreakpoint):
        (WebInspector.AceTextEditor.prototype.removeBreakpoint):
        (WebInspector.AceTextEditor.prototype.getAttribute):
        (WebInspector.AceTextEditor.prototype.setAttribute):
        (WebInspector.AceTextEditor.prototype.removeAttribute):
        * inspector/front-end/ace/acedevtools.css:
        (.ace-editor-container):
        (.ace_gutter-cell.webkit-breakpoint):
        (.ace_gutter-cell.webkit-breakpoint-conditional):
        (.ace_gutter-cell.webkit-breakpoint-disabled):
        (.ace_gutter-cell):

2013-03-07  Antoine Quint  <graouts@apple.com>

        Web Inspector: identify layers for CSS generated content in LayerTreeAgent
        https://bugs.webkit.org/show_bug.cgi?id=111551

        Layers can be associated with pseudo elements, elements that are generated
        when ::before or ::after pseudo-classes are used to style an element and
        provide additional rendering using the CSS "content" property. In order to
        identify that a layer is associated to a pseudo element, we add a new set of
        optional properties on the Layer object: "isGeneratedContent", "pseudoElementId"
        and "pseudoClass".

        We need to provide the "pseudoElementId" for the same reason we provide a
        "nodeId" for the Layer. This is so that the front-end can identify that a
        layer whose "layerId" may have changed between two layer tree updates is
        used to render content for the same pseudo element.

        In the instance that a layer is rendering generated content, we also set
        the "nodeId" to be the generating node's id. The generating node is the
        node in the DOM that the user styled using ::before or ::after pseudo-classes.
        We also add the pseudo-class used as the "pseudoClass" property such that the
        front-end may provide useful information to the user about what type of
        pseudo-class yielded the generation of this layer. We also deal with the
        possibility that the layer is a reflection for a pseudo element.
    
        Since pseudo elements are not part of the user-visible DOM, and thus can't be
        pushed to the front-end, we maintain a special ID hash map in the LayerTreeAgent.
        In order to be able to unbind a pseudo element id and a pseudo element, we add a
        destructor method to PseudoElement and provide a new instrumentation call so that
        the LayerTreeAgent may be notified of a PseudoElement being destroyed. This
        reflects the principle we use to update the RenderLayer bindings when a
        RenderLayer is destroyed, as notified by the RenderLayerCompositor.

        Reviewed by Simon Fraser.

        Test: inspector-protocol/layers/layers-generated-content.html

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::~PseudoElement): New destructor used to notify
        InspectorInstrumentation of a PseudoElement being destroyed, such that
        it can eventually be relayed to the InspectorLayerTreeAgent.
        (WebCore):
        * dom/PseudoElement.h:
        (PseudoElement):
        * inspector/Inspector.json: Add the new PseudoElementId type used for
        the new "pseudoElementId" property on Layer, to which we also add the
        "isGeneratedContent" and "pseudoClass" properties.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyed): New method
        called in the PseudoElement destructor used to relay the fact that a
        PseudoElement was destroyed to the InspectorLayerTreeAgent.
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reset): Clear the new PseudoElement
        identifier maps.
        (WebCore::InspectorLayerTreeAgent::pseudoElementDestroyed): Remove any
        identifier binding for the provided PseudoElement being destroyed.
        (WebCore):
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer): Set the new
        "isGeneratedContent", "pseudoElementId" and "pseudoClass" properties on
        the Layer object for layers associated with a pseudo element.
        (WebCore::InspectorLayerTreeAgent::bind): Use emptyString() instead of "".
        (WebCore::InspectorLayerTreeAgent::unbind): Use an iterator instead of a
        get() and remove() combination in order to reduce lookups and mimick the
        code written for unbindPseudoElement().
        (WebCore::InspectorLayerTreeAgent::bindPseudoElement): Binds the provided
        PseudoElement to a unique identifier.
        (WebCore::InspectorLayerTreeAgent::unbindPseudoElement): Unbinds the
        provided PseudoElement from its unique identifier.
        * inspector/InspectorLayerTreeAgent.h:
        (InspectorLayerTreeAgent):

2013-03-07  Keishi Hattori  <keishi@webkit.org>

        Add clear button to date/time input types
        https://bugs.webkit.org/show_bug.cgi?id=111319

        Reviewed by Kent Tamura.

        We want to remove the clear button from the calendar picker (Bug 109439)
        so we are adding the clear button to the right side of the input element.

        Tests: fast/forms/date-multiple-fields/date-multiple-fields-clearbutton-change-and-input-events.html
               fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-clearbutton-change-and-input-events.html
               fast/forms/month-multiple-fields/month-multiple-fields-clearbutton-change-and-input-events.html
               fast/forms/time-multiple-fields/time-multiple-fields-clearbutton-change-and-input-events.html
               fast/forms/week-multiple-fields/week-multiple-fields-clearbutton-change-and-input-events.html

        * CMakeLists.txt: Added ClearButtonElement.cpp
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/html.css:
        (input::-webkit-clear-button): Styles for the clear button.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::editControlValueChanged):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::requiredAttributeChanged): Hide clear button if the value is required.
        (WebCore):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::readonlyAttributeChanged):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::focusAndSelectClearButtonOwner): Called on mouse down on clear button.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldClearButtonRespondToMouseEvents):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::clearValue):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateClearButtonVisibility): We want to hide the clear button if the value is required or the value is empty.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateClearButtonVisibility):
        (WebCore):
        (WebCore::HTMLInputElement::requiredAttributeChanged):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/InputType.cpp:
        (WebCore::InputType::requiredAttributeChanged): Notifies the InputType that the required attribute has changed.
        (WebCore):
        (WebCore::InputType::updateClearButtonVisibility):
        * html/InputType.h:
        (InputType):
        * html/shadow/ClearButtonElement.cpp: Added.
        (WebCore):
        (WebCore::ClearButtonElement::ClearButtonElement):
        (WebCore::ClearButtonElement::create):
        (WebCore::ClearButtonElement::detach):
        (WebCore::ClearButtonElement::releaseCapture): Stop capturing mouse events.
        (WebCore::ClearButtonElement::defaultEventHandler):
        * html/shadow/ClearButtonElement.h: Added.
        (WebCore):
        (ClearButtonElement):
        (ClearButtonOwner):
        (WebCore::ClearButtonElement::ClearButtonOwner::~ClearButtonOwner):
        (WebCore::ClearButtonElement::removeClearButtonOwner):
        (WebCore::ClearButtonElement::isMouseFocusable):

2013-03-07  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Refactorings: Prepare SuggestBox for reuse.
        https://bugs.webkit.org/show_bug.cgi?id=111301

        Reviewed by Alexander Pavlov.

        1) Remove userEnteredText from delegate interface.
           Pass prefix to updateSuggestions instead.
        2) Clarify that suggestions array is never null.

        * inspector/front-end/SuggestBox.js:
        (WebInspector.SuggestBox): Renamed parameter/member.
        (WebInspector.SuggestBox.prototype._updateItems):
        Minor readability changes.
        (WebInspector.SuggestBox.prototype._canShowBox):
        Use userEnteredText parameter.
        (WebInspector.SuggestBox.prototype.updateSuggestions):
        Pass userEnteredText to _canShowBox.
        * inspector/front-end/DatabaseQueryView.js: Fix JSDocs.
        * inspector/front-end/RuntimeModel.js: Ditto.
        * inspector/front-end/TextPrompt.js: Ditto.
        (WebInspector.TextPrompt.prototype._completionsReady):
        Pass userEnteredText to updateSuggestions.

2013-03-07  Victor Carbune  <vcarbune@chromium.org>

        TextTrackRegion Constructor
        https://bugs.webkit.org/show_bug.cgi?id=110511

        Reviewed by Adam Barth.

        This is an initial patch for implementing the TextTrackRegion
        defined in the "WebVTT Extension: Regions for rendering cue groups":
        https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/region.html

        The feature components are hidden behind the WEBVTT_REGIONS flag
        and is currently disabled by default in all ports and tests skipped.

        Test: media/track/regions-webvtt/text-track-region-constructor.html

        * WebCore.gypi: Added files to be included for building Chromium with
        feature enabled (it is disabled by default).
        * html/track/TextTrackRegion.cpp: Added.
        (WebCore):
        (WebCore::TextTrackRegion::TextTrackRegion):
        (WebCore::TextTrackRegion::~TextTrackRegion):
        (WebCore::TextTrackRegion::setId): Setter.
        (WebCore::TextTrackRegion::setWidth): Setter.
        (WebCore::TextTrackRegion::setHeight): Setter.
        (WebCore::TextTrackRegion::setRegionAnchorX): Setter.
        (WebCore::TextTrackRegion::setRegionAnchorY): Setter.
        (WebCore::TextTrackRegion::setViewportAnchorX): Setter.
        (WebCore::TextTrackRegion::setViewportAnchorY): Setter.
        (WebCore::TextTrackRegion::scroll): Getter. Internally, the scroll
        value is stored as a boolean, but when returned is converted to either
        the empty string or "up".
        (WebCore::TextTrackRegion::setScroll): Setter.
        (WebCore::TextTrackRegion::setRegionSettings): Not used yet (see b/109818)
        * html/track/TextTrackRegion.h: Added.
        (WebCore):
        (TextTrackRegion):
        (WebCore::TextTrackRegion::create):
        (WebCore::TextTrackRegion::track): Getter.
        (WebCore::TextTrackRegion::id): Getter.
        (WebCore::TextTrackRegion::width): Getter.
        (WebCore::TextTrackRegion::height): Getter.
        (WebCore::TextTrackRegion::regionAnchorX): Getter.
        (WebCore::TextTrackRegion::regionAnchorY): Getter.
        (WebCore::TextTrackRegion::viewportAnchorX): Getter.
        (WebCore::TextTrackRegion::viewportAnchorY): Getter.
        (WebCore::TextTrackRegion::regionSettings): Getter, used only internally (see b/109818).
        * html/track/TextTrackRegion.idl: Added.
        * page/DOMWindow.idl: Constructor support.

2013-03-07  Dan Carney  <dcarney@google.com>

        [v8] remove latin-1 transition flag
        https://bugs.webkit.org/show_bug.cgi?id=111692

        Reviewed by Jochen Eisinger.

        No new tests. No change in functionality.

        * bindings/v8/V8ValueCache.cpp:
        (WebCore::makeExternalString):

2013-03-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: NavigatorView should show (program) for uiSourceCodes with empty name.
        https://bugs.webkit.org/show_bug.cgi?id=111691

        Reviewed by Alexander Pavlov.

        Made String.prototype methods return string literal, not String object.

        * inspector/front-end/utilities.js:
        (String.prototype.escapeCharacters):

2013-03-07  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Cmd+L (Go-to-Line) masks Go to location bar action
        https://bugs.webkit.org/show_bug.cgi?id=111357

        Reviewed by Pavel Feldman.

        Allow panel shortcut handlers to bubble event.

        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.install): Minor refactoring, added JSDocs.
        (WebInspector.GoToLineDialog._show): Added JSDocs and return value.
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.handleShortcut):
        Mark event as handled iff handler returned true.
        * inspector/front-end/ScriptsPanel.js: Added return values to handlers.
        * inspector/front-end/TimelinePanel.js: Ditto.

2013-03-06  Takashi Sakamoto  <tasak@google.com>

        Box-shadow displayed improperly with border-radius.
        https://bugs.webkit.org/show_bug.cgi?id=111256

        Reviewed by Simon Fraser.

        RoundedRect::adjustRadii doesn't adjust radii correctly, because
        the method compares maxRadiusWidth with maxRadiusHeight. However,
        we have to compare maxRadiusWidth / rect.width() with
        maxRadiusHeight / rect.height().

        Test: fast/borders/border-radius-with-box-shadow-01.html

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::adjustRadii):
        Should check which ratio is smaller.

2013-03-06  Mike West  <mkwst@chromium.org>

        [V8] Preprocess constant values to avoid a "static_cast<signed int>" in CodeGeneratorV8.
        https://bugs.webkit.org/show_bug.cgi?id=111625

        Reviewed by Kentaro Hara.

        When processing constants in IDL files, CodeGeneratorV8 currently runs
        the values through 'static_cast<signed int>' in the generated code. We
        can avoid this miniscule bit of overhead by preprocessing the hex value
        in Perl when generating the code.

        The FIXME has been in the code since it originally landed in 2009[1].
        Now's as good a time as any to take care of it.

        [1]: http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm?rev=144976#L2933

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):
            If we're presented with a string which begins with '0x', run it
            through some fairly obtuse Perlisms to first convert from a hex
            string to an integer ('hex($value)'), "pack" the integer as an
            unsigned integer ('pack("I", ...)'), and then "unpack" it as a
            signed integer ('unpack("i", ...)'). Because that's _of course_
            how you would do things.

2013-03-06  Paweł Forysiuk  <tuxator@o2.pl>

        WebKit does not build without accelerated compositing after Changeset 144823
        https://bugs.webkit.org/show_bug.cgi?id=111597

        Reviewed by Kentaro Hara.

        Properly guard functions ifdefed in ScrollingCoordinator.h.
        Remove redundant checks and fallback code inside those functions.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollLayerForScrollableArea):
        (WebCore::ScrollingCoordinator::horizontalScrollbarLayerForScrollableArea):
        (WebCore::ScrollingCoordinator::verticalScrollbarLayerForScrollableArea):
        (WebCore):

2013-03-06  Hajime Morrita  <morrita@google.com>

        Custom Elements Refactoring: CustomElementConstructor API shouldn't bound to HTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=111678

        Reviewed by Kentaro Hara.

        The latest Custom Elements standard supports non-HTML custom elements. Even though current implementation
        support only HTML, it'd be better off to make API generic enough to support them.

        This change

        - eliminates HTMLElement from the API signature by replacing it with Element, and
        - rename V8HTMLCustomElement to V8CustomElement.

        No new tests, just changing signatures and a class name.

        * WebCore.gypi:
        * bindings/v8/V8CustomElement.cpp: Renamed from Source/WebCore/bindings/v8/V8HTMLCustomElement.cpp.
        (WebCore):
        (WebCore::findWrapperTypeOf):
        (WebCore::V8CustomElement::createWrapper):
        * bindings/v8/V8CustomElement.h: Renamed from Source/WebCore/bindings/v8/V8HTMLCustomElement.h.
        (WebCore):
        (V8CustomElement):
        (WebCore::V8CustomElement::toV8):
        (WebCore::V8CustomElement::wrap):
        (WebCore::HTMLCustomElement::wrap):
        * bindings/v8/custom/V8CustomElementConstructorCustom.cpp:
        (WebCore::V8CustomElementConstructor::callAsFunctionCallback):
        * dom/CustomElementConstructor.cpp:
        (WebCore::CustomElementConstructor::createElement):
        * dom/CustomElementConstructor.h:
        (WebCore):
        (CustomElementConstructor):
        * dom/CustomElementRegistry.cpp:
        (WebCore::CustomElementRegistry::constructorOf):
        (WebCore::CustomElementRegistry::createElement):
        * dom/CustomElementRegistry.h:
        (WebCore):
        (CustomElementRegistry):
        * dom/Document.cpp: Ensured that the document is an HTML.
        (WebCore::Document::registerElement):
        * dom/Document.idl:
        * dom/make_names.pl:
        (printWrapperFactoryCppFile):
        * html/HTMLDocument.idl: Moved an API to Document.idl

2013-03-06  Tim Horton  <timothy_horton@apple.com>

        TileCache debug minimap should fit inside the intersection of the visible rect and exposed rect
        https://bugs.webkit.org/show_bug.cgi?id=111655
        <rdar://problem/13355773>

        Reviewed by Simon Fraser.

        If content clips to the exposed rect, make the TileCache minimap fit in the exposed rect too.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::updateTileCoverageMap):

2013-03-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144726.
        http://trac.webkit.org/changeset/144726
        https://bugs.webkit.org/show_bug.cgi?id=111681

        caused performance regression for Dromaeo attribute tests.
        (Requested by arpitab on #webkit).

        * dom/Element.h:
        (WebCore::ElementData::getAttributeItemIndex):

2013-03-04  Kinuko Yasuda  <kinuko@chromium.org>

        File.lastModifiedDate() should return the current date/time if the file date/time is not available
        https://bugs.webkit.org/show_bug.cgi?id=111403

        Reviewed by Kent Tamura.

        Per the recent File API spec change:
        http://www.w3.org/TR/2012/WD-FileAPI-20121025/#dfn-lastModifiedDate

        Test: http/tests/local/fileapi/script-tests/file-last-modified-after-delete.js:

        * fileapi/File.cpp:
        (WebCore::File::lastModifiedDate): Changed to return the current date/time instead null if the valid file date/time is not available.
        * fileapi/File.h:
        (File):

2013-03-06  Philippe Liard  <pliard@chromium.org>

        Make RuleData support up to 8191 selectors
        https://bugs.webkit.org/show_bug.cgi?id=111663

        Reviewed by Andreas Kling.

        r125294 made RuleData consume less memory by replacing a pointer with
        an index encoded on 12 bits.
        This unfortunately breaks Chrome for Android (and others) when a lot of
        CSS is used or more precisely when selectorIndex cannot be stored on 12
        bits.

        Threfore this change decreases the number of bits used to store
        m_position by 1 (from 19 to 18) and adds this extra bit to
        m_selectorIndex so that values up to 8191 can be stored safely without
        overflowing.

        * css/RuleSet.h:
        (RuleData):

2013-03-06  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Remove unused code from contextmenu of element panel
        https://bugs.webkit.org/show_bug.cgi?id=111658

        Reviewed by Pavel Feldman.

        No new tests (no functional changes).

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._contextMenuEventFired.set get var):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.populateContextMenu):

2013-03-06  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Extend our grammar to support 2 positions for grid-{row|column}
        https://bugs.webkit.org/show_bug.cgi?id=110777

        Reviewed by Tony Chang.

        Now that we support all the logical grid properties, we can change grid-{row|column}
        into shorthands. That's what this change does along with extending our parsing support
        to handle 2 positions.

        Tests: fast/css-grid-layout/grid-item-column-row.html
               fast/css-grid-layout/grid-item-end-after-get-set.html
               fast/css-grid-layout/grid-item-start-before-get-set.html

        * css/CSSComputedStyleDeclaration.cpp:
        Removed grid-{row|column} from computedProperties as they are shorthands (see comments
        at computedProperties definition).

        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getCSSPropertyValuesForGridShorthand):
        Switched to using the StylePropertyShorthand and reusing the existing longhand code.

        * css/CSSComputedStyleDeclaration.h:
        Added getCSSPropertyValuesForGridShorthand.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridItemPositionShorthand):
        Added custom parsing for the shorthand, that builds on top of the longhand code.

        * css/CSSParser.h:
        Added parseGridItemPositionShorthand.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Removed the previous handling as shorthand are expanded at parse time.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):
        Added the new shorthands to the list.

        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitGridColumnShorthand):
        (WebCore::webkitGridRowShorthand):
        (WebCore::shorthandForProperty):
        * css/StylePropertyShorthand.h:
        Registered grid-{row|column} as shorthands.

2013-03-06  Kenneth Russell  <kbr@google.com>

        [Chromium] Fix byte ordering bugs reading back WebGL canvases' content on Android
        https://bugs.webkit.org/show_bug.cgi?id=111661

        Reviewed by James Robinson.

        No new tests; covered by existing tests. Ran WebGL conformance
        tests on Android and desktop Linux to verify fix.

        * platform/chromium/support/GraphicsContext3DChromium.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
            Avoid incorrect byte swap on Android and other OSs which don't
            swizzle R and B channels.

2013-03-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Improve warning messages when input value is out of range.
        https://bugs.webkit.org/show_bug.cgi?id=111534

        Reviewed by Laszlo Gombos.

        Show input value range when user inputs greater or less value.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageRangeUnderflowText):

2013-03-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Enable interactive form validation for email and url input type validation
        https://bugs.webkit.org/show_bug.cgi?id=111026

        Reviewed by Laszlo Gombos.

        WebKit EFL can check if input value is valid by enabling this feature.

        * platform/efl/LocalizedStringsEfl.cpp: Change validation messages of email and url the same with chromium port.
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        * platform/efl/RenderThemeEfl.cpp: Add type checking conditions for email and url.
        (WebCore::RenderThemeEfl::supportsDataListUI):

2013-03-06  Aaron Colwell  <acolwell@chromium.org>

        Remove WebCore::Node::isActiveNode() since it isn't called anywhere.
        https://bugs.webkit.org/show_bug.cgi?id=111646

        Reviewed by Kentaro Hara.

        No new tests. This removes dead code.

        * dom/Node.h:
        (Node):
        * html/HTMLAudioElement.h:

2013-03-06  Abhishek Arya  <inferno@chromium.org>

        Crash in SVGViewSpec::viewTarget
        https://bugs.webkit.org/show_bug.cgi?id=111648

        Reviewed by Philip Rogers.

        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::viewTarget):

2013-03-06  Benjamin Poulain  <benjamin@webkit.org>

        WebKitTestRunner needs layoutTestController.elementDoesAutoCompleteForElementWithId
        https://bugs.webkit.org/show_bug.cgi?id=42696

        Reviewed by Andreas Kling.

        Since the method acts directly on a WebCore element and strictly test
        HTMLInputElement::shouldAutoComplete(), the test function is moved to internals.

        * testing/Internals.cpp:
        (WebCore::Internals::elementShouldAutoComplete):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-03-06  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Synthetic ResourceResponses cannot be sent over IPC without losing most information
        https://bugs.webkit.org/show_bug.cgi?id=111623

        Reviewed by Brady Eidson.

        * WebCore.exp.in: Exported functions for building synthetic responses.

        * platform/network/ResourceResponseBase.cpp:
        * platform/network/ResourceResponseBase.h:
        Added a lot of FIXMEs.

        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::platformResponseIsUpToDate):
        Track m_platformResponseIsUpToDate flag as well as we can. Currently, it will
        be incorrect if a real platform response gets mutated.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse): Added a FIXME about how useless this
        function is when it tries to create a new CFURLResponse.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::initNSURLResponse): Added a FIXME.
        (WebCore::ResourceResponse::nsURLResponse): Added a return to make logic more clear.
        (WebCore::ResourceResponse::ResourceResponse): Track m_platformResponseIsUpToDate.

        * platform/network/blackberry/ResourceResponse.h:
        * platform/network/curl/ResourceResponse.h:
        * platform/network/qt/ResourceResponse.h:
        * platform/network/soup/ResourceResponse.h:
        * platform/network/win/ResourceResponse.h:
        These platforms do not keep a platform response, so it's never up to date, and
        WebCore data needs to be serialized.

2013-03-06  Dana Jansens  <danakj@chromium.org>

        [chromium] Remove WebSharedGraphicsContext3D class
        https://bugs.webkit.org/show_bug.cgi?id=111492

        Reviewed by James Robinson.

        Removing dead code, no new tests.

        * WebCore.gypi:
        * platform/chromium/support/WebSharedGraphicsContext3D.cpp: Removed.

2013-03-06  Dana Jansens  <danakj@chromium.org>

        [chromium] Don't get callbacks or create GrContext from unowned WebGraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=111638

        Reviewed by James Robinson.

        If the context is not owned, it's lifetime is not guaranteed, and by the time
        the GraphicsContext3D is destroyed, the WGC3D can already be deleted.

        When the context is not owned by the GraphicsContext3D, then don't clean it up
        in the destructor or set up callbacks, as these are the owner's responsibility.

        * platform/chromium/support/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::grContext):
        (WebCore::GraphicsContext3DPrivate::setContextLostCallback):
        (WebCore::GraphicsContext3DPrivate::setErrorMessageCallback):

2013-02-22  Jer Noble  <jer.noble@apple.com>

        Default mouse cursor behavior should be auto-hide for full screen video with custom controls
        https://bugs.webkit.org/show_bug.cgi?id=107601

        Reviewed by Beth Dakin.

        Test: fullscreen/video-cursor-auto-hide.html

        To facilitate automatically hiding the mouse cursor after a certain amount of idle mouse
        time, add a new CSS property '-webkit-cursor-visibility', and handle that value inside of
        EventHandler. When that value is present, the EventHandler will start a timer which, when
        fired, will set the view's cursor to the None cursor. Subsequent mouse moves will either
        cancel the timer, or reset the auto-hide timer.

        Add a new CSS property, '-webkit-cursor-visibility':
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ECursorVisibility):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

        Add a rule for video descendants of full screen elements to auto-hide the cursor on hover:
        * css/fullscreen.css:
        (:-webkit-full-screen video:hover):

        Add a new timer, m_autoHideCursorTimer, to control resetting the view's cursor to None after
        enough mouse idle time has passed.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::~EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::startAutoHideCursorTimer):
        (WebCore::EventHandler::cancelAutoHideCursorTimer):
        (WebCore::EventHandler::autoHideCursorTimerFired):
        * page/EventHandler.h:

        Make FrameView::isActive() a public function (like it is in its superclass).
        * page/FrameView.h:
        (FrameView):

        Move the definition for timeWithoutMouseMovementBeforeHidingControls from page->theme()
        to page->settings() and allow that setting to be overridden in InternalSettings for 
        testing purposes:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setTimeWithoutMouseMovementBeforeHidingControls):
        (WebCore::Settings::timeWithoutMouseMovementBeforeHidingControls):
        * rendering/RenderTheme.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setTimeWithoutMouseMovementBeforeHidingControls):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::startHideFullscreenControlsTimer):

        Add support to FeatureObserver for CURSOR_VISIBILITY:
        * page/FeatureObserver.h:

        Enable the feature flag:
        * Configurations/FeatureDefines.xcconfig:

2013-03-06  Jer Noble  <jer.noble@apple.com>

        Full screen from an iframe with a z-index style will allow siblings with higher z-index to overlay full screen content.
        https://bugs.webkit.org/show_bug.cgi?id=111637

        Reviewed by Simon Fraser.

        No new tests; updated fullscreen/full-screen-iframe-zIndex.html to expose bug.

        Pages with explicit z-index: styles on their iframes will override the default z-index: UA style when
        elements within that iframe enter full screen mode. Mark the UA style as !important so as to not allow
        iframe siblings with higher z-index styles to overlay the full screen element.

        * css/fullscreen.css:
        (:-webkit-full-screen):

2013-03-06  Levi Weintraub  <leviw@chromium.org>

        InsertUnorderedList can lead to lost content and assertions in moveParagraphs
        https://bugs.webkit.org/show_bug.cgi?id=111228

        Reviewed by Ryosuke Niwa.

        When a list is wrapped in a presentational inline like a b tag, we'd create markup that included
        everything up to the b tag from moveParagraphs when intending to only move the contents of the
        list item. This could make it impossible to remove content from a list and trigger loss of
        editable text.

        Test: editing/execCommand/insert-remove-block-list-inside-presentational-inline.html

        * editing/EditingStyle.cpp:
        (WebCore::elementMatchesAndPropertyIsNotInInlineStyleDecl): Ensure there's an inline style
        before calling propertyExistsInStyle.
        (WebCore::HTMLElementEquivalent::propertyExistsInStyle): Removing null check for style.
        All callers ensure this value isn't null.
        * editing/markup.cpp:
        (WebCore::highestAncestorToWrapMarkup): Avoid going over RenderBlocks when finding the highest
        presentational ancestor to avoid leaving the bounds of the original paragraph.

2013-03-06  Adam Klein  <adamk@chromium.org>

        [V8] Use implicit references instead of object groups to keep registered MutationObservers alive
        https://bugs.webkit.org/show_bug.cgi?id=111382

        Reviewed by Adam Barth.

        Two-phase approach to implicit references: after grouping objects
        together, add an implicit reference between each registered node's
        group and the MutationObserver's group (which includes wrappers from
        all worlds).

        Also changed many uses of v8::Value to v8::Object where we know we're
        dealing with Object and the V8 API expects them.

        Test: ManualTests/mutation-observer-leaks-nodes.html

        * bindings/v8/V8GCController.cpp:
        (WebCore::ImplicitConnection::ImplicitConnection):
        (WebCore::ImplicitConnection::wrapper):
        (ImplicitConnection):
        (WebCore::ImplicitReference::ImplicitReference): Wrapper class holding a parent who should have an implicit reference to a child.
        (ImplicitReference):
        (WebCore::operator<): Needed for std::sort() call to avoid the overhead of using a HashMap
        (WebCore::WrapperGrouper::addObjectWrapperToGroup):
        (WebCore::WrapperGrouper::addNodeWrapperToGroup):
        (WebCore::WrapperGrouper::addImplicitReference):
        (WrapperGrouper):
        (WebCore::WrapperGrouper::apply):

2013-03-06  Ankur Taly  <ataly@google.com>

        Modify log method in V8DOMActivityLogger so that the apiName and
        extraInfo arguments are of type const String& instead of const char*.
        This change gets rid of some of the memory ownership issues that arise
        with char* pointers.
        https://bugs.webkit.org/show_bug.cgi?id=111483

        Reviewed by Adam Barth.

        There are no new tests as there is no change in behavior.

        * bindings/v8/V8DOMActivityLogger.h:
        (WebCore::V8DOMActivityLogger::log):

2013-03-06  Mike Reed  <reed@google.com>

        Use SkTypeface API directly, rather than (soon to be private) SkFontHost
        https://bugs.webkit.org/show_bug.cgi?id=111588

        Reviewed by Stephen White.

        No new tests, as existing tests in fast/writing-mode exercise this code.

        e.g. japanese-rl-text-with-broken-font.html
             vertical-subst-font-vert-no-dflt.html

        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:
        (WebCore::FontPlatformData::emSizeInFontUnits):
        (WebCore::FontPlatformData::openTypeTable):
        * platform/graphics/harfbuzz/HarfBuzzFaceSkia.cpp:
        (WebCore::harfBuzzSkiaGetTable):
        (WebCore::HarfBuzzFace::createFace):
        * platform/graphics/skia/SimpleFontDataSkia.cpp:
        (WebCore::SimpleFontData::platformInit):

2013-03-06  Victor Costan <costan@gmail.com>

        Cleanup in multipart FormData sending code.
        https://bugs.webkit.org/show_bug.cgi?id=111603

        Reviewed by Alexey Proskuryakov.

        No new tests. This is cleanup.

        * platform/network/FormDataBuilder.cpp:
        (WebCore::appendQuotedString): use proper types (e.g, size_t instead of
        unsigned long)

2013-03-06  Tony Gentilcore  <tonyg@chromium.org>

        Threaded HTML parser should use 8 bit strings for attributes
        https://bugs.webkit.org/show_bug.cgi?id=111610

        Reviewed by Eric Seidel.

        This fixes a 27% regression in dromaeo_jslibattrjquery on the threaded HTML parser vs. the main thread parser.

        No new tests because no new functionality.

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

2013-03-06  Alpha Lam  <hclam@chromium.org>

        More cleanup in GIFImageReader
        https://bugs.webkit.org/show_bug.cgi?id=111137

        Reviewed by Stephen White.

        Refactor GIFImageReaderReader with the following changes:
        + Separate GIFLZWContext for decoding states.
        + Replace unsigned char* with Vector<unsigned char>

        There is no change in code behavior and just refactoring.

        No new tests. This is covered by existing GIFImageReaderTest.
        I also did a local testing on a 50k image corpus and showed no regression.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        (GIFImageDecoder):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::outputRow):
        (GIFImageReader::doLZW):
        (GIFImageReader::decodeInternal):
        (GIFImageReader::prepareLZWContext):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFFrameContext):
        (GIFFrameContext::GIFFrameContext):
        (GIFFrameContext::~GIFFrameContext):
        (GIFLZWContext):
        (GIFLZWContext::GIFLZWContext):
        (GIFImageReader):

2013-03-06  Tim Horton  <timothy_horton@apple.com>

        Fix typo'd MainThreadScrollingBecauseOfStyleIndictaion
        https://bugs.webkit.org/show_bug.cgi?id=111557

        Reviewed by Geoff Garen.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::updateTileCoverageMap):

2013-03-05  Geoffrey Garen  <ggaren@apple.com>

        Removed some dead code in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=111525

        Reviewed by Alexey Proskuryakov.

        Page cache autorelease doesn't exist anymore, so there's no need to keep
        around these olds hacks.

        * WebCore.exp.in:
        * history/PageCache.cpp:
        (WebCore::PageCache::PageCache):
        (WebCore):
        * history/PageCache.h:
        (PageCache):
        * page/Settings.cpp:
        (WebCore::Settings::setUsesPageCache):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):
        * platform/qt/QtTestSupport.cpp:
        (WebKit::QtTestSupport::clearMemoryCaches):

2013-03-06  Rafael Weinstein  <rafaelw@chromium.org>

        Unreviewed, rolling out r144924.
        http://trac.webkit.org/changeset/144924
        https://bugs.webkit.org/show_bug.cgi?id=109908

        caused multiple crashes in inspector/debugger tests

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/js/ScriptObject.h:
        * bindings/v8/ScriptObject.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::disconnect):
        * inspector/InjectedScriptHost.h:
        (WebCore):
        (InjectedScriptHost):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::InjectedScriptManager):
        (WebCore::InjectedScriptManager::discardInjectedScripts):
        (WebCore::InjectedScriptManager::discardInjectedScriptsFor):
        * inspector/InjectedScriptManager.h:
        (InjectedScriptManager):
        * inspector/InjectedScriptSource.js:
        (.):

2013-03-06  Dmitry Zvorygin  <zvorygin@chromium.org>

        Introduce new message sources for logging.
        https://bugs.webkit.org/show_bug.cgi?id=110968

        Reviewed by Pavel Feldman.

        Added SecurityMessageSource, RenderingMessageSource, StorageMessageSource, AppCacheMessageSource, CSSMessageSource.
        Changed some logging lines to contain more descriptive message source.

        * Modules/webdatabase/DatabaseBase.cpp:
        (WebCore::DatabaseBase::logErrorMessage):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::logErrorMessage):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * css/MediaList.cpp:
        (WebCore::addResolutionWarningMessageToConsole):
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeScript):
        (WebCore::ScriptElement::notifyFinished):
        * dom/ViewportArguments.cpp:
        (WebCore::reportViewportWarning):
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::printWarningToConsole):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        * inspector/Inspector.json:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::reportLocalLoadFailed):
        (WebCore::createWindow):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::responseReceived):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::logWarning):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::corsPolicyPreventedLoad):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::abort):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        * page/ConsoleTypes.h:
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::logToConsole):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::reportMessage):

2013-03-06  Florin Malita  <fmalita@chromium.org>

        SVG pattern to pattern reference does not work if first pattern has a child node
        https://bugs.webkit.org/show_bug.cgi?id=111586

        Reviewed by Philip Rogers.

        SVGPatternElement::collectPatternAttributes should test for child elements, not child nodes.

        Tests: svg/custom/pattern-reference-expected.svg
               svg/custom/pattern-reference.svg

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

2013-03-06  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [soup] session cookies are not correctly reported in getRawCookies()
        https://bugs.webkit.org/show_bug.cgi?id=111584

        Reviewed by Martin Robinson.

        As per libsoup documentation, SoupCookie->expires is NULL for session cookies.
        However, the soup implementation for getRawCookies() does not check for NULL
        case before passing the value to soup_date_to_time_t(), which leads to run time
        warnings.

        We should also pass true for WebCore::Cookie's session argument if
        SoupCookie->expires is NULL. The current implementation reports the cookie as a
        session one if soup_cookie_jar_is_persistent(jar) returns true, which is
        inaccurate.

        No new tests, no behavior change for layout tests as Web Inspector currently
        ignores the "session" member and uses expires/max-age instead to deduce it.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):

2013-03-06  Douglas Stockwell  <dstockwell@chromium.org>

        REGRESSION(r111639): delayed animation start can be postponed
        https://bugs.webkit.org/show_bug.cgi?id=108582

        Query the animation timer directly for the time it will next fire rather than
        trying to cache the interval. Previous approach was incorrect -- as time advanced
        it was possible for the interval to jump beyond the next service time.

        Reviewed by Darin Adler.

        Test: animations/animation-delay-changed.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::updateAnimationTimerForRenderer):
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        * page/animation/AnimationControllerPrivate.h:
        (AnimationControllerPrivate): Remove m_previousTimeToNextService

2013-03-06  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [ACE] show execution line in Ace editor
        https://bugs.webkit.org/show_bug.cgi?id=111575

        Reviewed by Pavel Feldman.

        Highlight execution line by the means of Ace full line markers.

        No new tests.

        * inspector/front-end/AceTextEditor.js:
        (WebInspector.AceTextEditor.prototype.setExecutionLine):
        (WebInspector.AceTextEditor.prototype.clearExecutionLine):
        (WebInspector.AceTextEditor.prototype.setSelection):
        * inspector/front-end/ace/acedevtools.css:
        (.ace-editor-container):
        (.webkit-execution-line):

2013-03-06  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: fix closure compiler warnings in the profiler code
        https://bugs.webkit.org/show_bug.cgi?id=111581

        Reviewed by Vsevolod Vlasov.

        Added missing annotations. Replaced NativeProfileLauncherView with
        ProfileLauncherView.

        * inspector/InjectedScriptExterns.js:
        (InjectedScriptHost.prototype.objectId):
        (InjectedScriptHost.prototype.releaseObjectId):
        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart.prototype._forEachNode):
        * inspector/front-end/ProfileLauncherView.js:
        * inspector/front-end/ProfilesPanel.js:

2013-03-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [BlackBerry] Pass String::StrictConversion instead of true to String::utf8()
        https://bugs.webkit.org/show_bug.cgi?id=111546

        Reviewed by Rob Buis.

        String::utf8() API changed in r134173.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::notifyChallengeResult):

2013-03-06  Julien Chaffraix  <jchaffraix@webkit.org>

        Remove the (dead) code for handling shorthands in StyleResolver / StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=111505

        Unreviewed minimal build fix.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Put CSSPropertyWebkitWrap under the proper if-guard.

2013-03-06  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed follow up to r144928: front-end closure compilation fixes.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.JavaScriptOutlineDialog.prototype.dispose):
        (WebInspector.OpenResourceDialog.prototype.dispose):
        * inspector/front-end/StyleSheetOutlineDialog.js:
        (WebInspector.StyleSheetOutlineDialog.prototype.dispose):

2013-03-06  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Update open resource dialog when new uiSourceCodes are loaded.
        https://bugs.webkit.org/show_bug.cgi?id=111327

        Reviewed by Pavel Feldman.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog):
        (WebInspector.FilteredItemSelectionDialog.prototype.willHide):
        (WebInspector.FilteredItemSelectionDialog.prototype._itemsLoaded):
        (WebInspector.FilteredItemSelectionDialog.prototype._updateAfterItemsLoaded):
        (WebInspector.FilteredItemSelectionDialog.prototype._filterItems.compareFunction):
        (WebInspector.FilteredItemSelectionDialog.prototype._filterItems):
        (WebInspector.SelectionDialogContentProvider.prototype.dispose):
        (WebInspector.JavaScriptOutlineDialog.prototype._didBuildOutlineChunk):
        (WebInspector.OpenResourceDialog):
        (WebInspector.OpenResourceDialog.prototype.requestItems):
        (WebInspector.OpenResourceDialog.prototype._filterUISourceCode):
        (WebInspector.OpenResourceDialog.prototype._uiSourceCodeAdded):
        (WebInspector.OpenResourceDialog.prototype.dispose):
        * inspector/front-end/StyleSheetOutlineDialog.js:
        (WebInspector.StyleSheetOutlineDialog.prototype.requestItems):
        (WebInspector.StyleSheetOutlineDialog.prototype.requestItems.didGetStyleSheet):

2013-03-06  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Move sidebar-specific styles to a separate file.
        https://bugs.webkit.org/show_bug.cgi?id=111173

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane):
        * inspector/front-end/NativeBreakpointsSidebarPane.js:
        (WebInspector.NativeBreakpointsSidebarPane):
        * inspector/front-end/SidebarPane.js:
        (WebInspector.SidebarPaneTitle):
        (WebInspector.SidebarPaneStack):
        (WebInspector.SidebarTabbedPane):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/breakpointsList.css: Added.
        (.sidebar-pane > .body .breakpoint-condition):
        (#breakpoint-condition-input):
        (ol.breakpoint-list):
        (.breakpoints-list-deactivated):
        (.breakpoint-list li):
        (.breakpoint-list li:hover):
        (.breakpoint-list .checkbox-elem):
        (.breakpoint-list .source-text):
        (.sidebar-pane .breakpoint-hit):
        (li.breakpoint-hit .breakpoint-hit-marker):
        (.event-listener-breakpoints .event-category):
        (.event-listener-breakpoints.properties-tree .children li):
        (.event-listener-breakpoints .checkbox-elem):
        * inspector/front-end/elementsPanel.css:
        (.panel.elements .sidebar-pane-toolbar > select):
        (.panel.elements .sidebar-pane-toolbar > select:hover):
        (.panel.elements .sidebar-pane-toolbar > select:active):
        (.panel.elements .sidebar-pane-toolbar > select.select-settings):
        (.panel.elements .sidebar-pane-toolbar > select.select-filter):
        (.panel.elements .sidebar-pane-toolbar > select > option, .panel.elements .sidebar-pane-toolbar > select > hr):
        * inspector/front-end/inspector.css:
        (.event-bar .event-properties):
        * inspector/front-end/scriptsPanel.css:
        (.workers-list > li):
        (a.worker-item):
        (a.worker-item:hover):
        * inspector/front-end/sidebarPane.css: Added.
        (.sidebar-pane):
        (.sidebar-pane > .body):
        (.sidebar-pane > .body .info):
        (.sidebar-pane > .body .placard + .info):
        (.sidebar-pane.visible > .body):
        (.sidebar-pane .section .properties):
        (.sidebar-tabbed-pane .tabbed-pane-header):
        (.sidebar-pane-stack > .sidebar-pane.visible:nth-last-of-type(1)):
        (.sidebar-pane-title):
        (.sidebar-pane-title + .sidebar-pane-title, .pane:not(.visible) + .sidebar-pane-title, .sidebar-pane-title:first-of-type):
        (.sidebar-pane-title:active):
        (.sidebar-pane-title::before):
        (.sidebar-pane-title.expanded::before):
        (.sidebar-pane-toolbar):
        (.sidebar-pane-toolbar > *):
        (.sidebar-pane-toolbar > .pane-title-button):
        (.sidebar-pane-toolbar > .pane-title-button:hover):
        (.sidebar-pane-toolbar > .pane-title-button:active, .sidebar-pane-toolbar > .pane-title-button.toggled):
        (.sidebar-pane-toolbar > .pane-title-button.add):
        (.sidebar-pane-toolbar > .pane-title-button.element-state):
        (.sidebar-pane-toolbar > .pane-title-button.refresh):
        (.sidebar-pane-subtitle):
        (body.platform-windows .sidebar-pane-subtitle):
        (.sidebar-pane-subtitle input, .section .header input[type=checkbox]):

2013-03-06  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Combine style-related panes into a single tab when Elements panel is split horizontally.
        https://bugs.webkit.org/show_bug.cgi?id=111550
        Reviewed by Pavel Feldman.

        Grouping the Elements sidebar panes into two tabbed panes proved to be
        confusing and inconvenient. Put all the Elements sidebar panes into a single tabbed pane.
        Combined Styles, Computed Style and Metrics into a single pane.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._splitVertically):
        (WebInspector.ElementsPanel.prototype.addExtensionSidebarPane):
        * inspector/front-end/elementsPanel.css:
        (.sidebar-pane.composite):
        (.sidebar-pane.composite > .body):
        (.sidebar-pane.composite .metrics):
        (.sidebar-pane.composite .sidebar-pane-toolbar):
        (.sidebar-pane.composite .sidebar-pane-toolbar > .sidebar-pane-subtitle):
        (.sidebar-pane.composite .styles-section.read-only):

2013-03-05  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: support stable remote object ids
        https://bugs.webkit.org/show_bug.cgi?id=109908

        Reviewed by Pavel Feldman.

        Introduced a map from javascript object to its id. It guarantees
        that object is assined id only once (unless it is explicitely
        released). The map is per execution context and is stored in
        InjectedScriptManager.

        Test: inspector-protocol/persistent-id.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::objectId):
        (WebCore):
        (WebCore::JSInjectedScriptHost::releaseObjectId):
        * bindings/js/ScriptObject.h:
        (WTF):
        (WTF::ScriptObjectHash::hash):
        (WTF::ScriptObjectHash::equal):
        (ScriptObjectHash):
        * bindings/v8/ScriptObject.h:
        (WTF):
        (WTF::ScriptObjectHash::hash):
        (WTF::ScriptObjectHash::equal):
        (ScriptObjectHash):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::objectIdMethodCustom):
        (WebCore):
        (WebCore::V8InjectedScriptHost::releaseObjectIdMethodCustom):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::disconnect):
        (WebCore::InjectedScriptHost::objectId):
        (WebCore):
        (WebCore::InjectedScriptHost::releaseObjectId):
        * inspector/InjectedScriptHost.h:
        (WebCore):
        (InjectedScriptHost):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptManager.cpp:
        (InjectedScriptManager::ObjectIdMap):
        (WebCore::InjectedScriptManager::ObjectIdMap::ObjectIdMap):
        (WebCore::InjectedScriptManager::ObjectIdMap::objectId):
        (WebCore::InjectedScriptManager::ObjectIdMap::releaseObjectId):
        (WebCore):
        (WebCore::InjectedScriptManager::InjectedScriptManager):
        (WebCore::InjectedScriptManager::discardInjectedScripts):
        (WebCore::InjectedScriptManager::discardInjectedScriptsFor):
        (WebCore::InjectedScriptManager::objectId):
        (WebCore::InjectedScriptManager::releaseObjectId):
        * inspector/InjectedScriptManager.h:
        (InjectedScriptManager):
        * inspector/InjectedScriptSource.js:
        (.):

2013-03-06  Marja Hölttä  <marja@chromium.org>

        REGRESSION(r144617): Wrong usage of overwritten variable in toDOMWindow (V8Binding.cpp)
        https://bugs.webkit.org/show_bug.cgi?id=111565

        Reviewed by Jochen Eisinger.

        In toDOMWindow, the variable "global" was first nuked, and then used again. This
        change was introduced in r144617.

        No new tests (no functional changes).

        * bindings/v8/V8Binding.cpp:
        (WebCore::toDOMWindow):

2013-03-06  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use regular eval instead of injectScript for front-end extension API
        https://bugs.webkit.org/show_bug.cgi?id=111529

        Reviewed by Pavel Feldman.

        Removed InjectedScriptManager::injectScript and replaced all of it calls
        except the actual script injection with ScriptController::executeScript.

        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * inspector/InjectedScriptManager.h:
        (InjectedScriptManager):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._emulateTouchEventsChanged.get if):
        * inspector/front-end/ExtensionAPI.js:
        (buildExtensionAPIInjectedScript):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):

2013-03-06  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Do not disable C++0x
        https://bugs.webkit.org/show_bug.cgi?id=111559

        Reviewed by Kenneth Rohde Christiansen.

        * WebCore.pri:

2013-03-06  Julien Chaffraix  <jchaffraix@webkit.org>

        Remove the (dead) code for handling shorthands in StyleResolver / StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=111505

        Reviewed by Alexis Menard.

        The CSS parsing code expands shorthands (with the exception of 'font') to their longhands.
        This means that all the code in StyleResolver / StyleBuilder to handle shorthands is basically
        dead and shouldn't be there. The reason for it to be is that people didn't know about shorthands
        expansion and thus copied existing code.

        This change addresses both issues by removing the code and adding ASSERTs that should prevent people
        from adding more dead code.

        Refactoring, covered by existing tests.

        * css/StylePropertyShorthand.h: Added isExpandedShorthand.
        * css/StylePropertyShorthand.cpp:
        (WebCore::isExpandedShorthand):
        Added this function that ignores 'font' as it is the only shorthand that is no consistently expanded
        to account for system fonts.

        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        Removed the shorthands.

        * css/StyleBuilder.h:
        (WebCore::StyleBuilder::setPropertyHandler):
        Added ASSERTs that people don't add shorthand handling.

        * css/StyleResolver.cpp:
        (WebCore::isValidVisitedLinkProperty):
        Removed all the shorthands (shouldn't be reachable unless the ASSERT in applyProperty
        triggers).

        (WebCore::StyleResolver::applyProperty):
        Removed all shorthand handling code, moved the shorthands together and added some ASSERT
        to ensure people don't abuse the code and re-add some of it back by mistake.

2013-03-05  Kent Tamura  <tkent@chromium.org>

        Rename WebCore/editing/visible_units.* to VisibleUnits.*
        https://bugs.webkit.org/show_bug.cgi?id=111426

        Reviewed by Alexey Proskuryakov.

        No new tests. Just a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityNodeObject.cpp:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * dom/Position.cpp:
        * dom/Range.cpp:
        * editing/AlternativeTextController.cpp:
        * editing/ApplyBlockElementCommand.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/EditingAllInOne.cpp:
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        * editing/FormatBlockCommand.cpp:
        * editing/FrameSelection.cpp:
        * editing/IndentOutdentCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertListCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/InsertTextCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SurroundingText.cpp:
        * editing/TextCheckingHelper.cpp:
        * editing/TextIterator.cpp:
        * editing/TypingCommand.cpp:
        * editing/VisiblePosition.cpp:
        * editing/VisibleSelection.cpp:
        * editing/VisibleUnits.cpp: Copied from Source/WebCore/editing/visible_units.cpp.
        * editing/VisibleUnits.h: Copied from Source/WebCore/editing/visible_units.h.
        * editing/htmlediting.cpp:
        * editing/markup.cpp:
        * editing/visible_units.cpp: Removed.
        * editing/visible_units.h: Removed.
        * page/Frame.cpp:
        * page/mac/FrameMac.mm:
        * platform/win/EditorWin.cpp:

2013-03-06  Alexis Menard  <alexis@webkit.org>

        Do not add CSSPropertyBorderImage shorthand part of the property list when parsing CSS border property
        https://bugs.webkit.org/show_bug.cgi?id=111481

        Reviewed by Julien Chaffraix.

        After http://trac.webkit.org/changeset/135848 and more generally we do not 
        add shorthand directly into the property list used afterwards to build
        StylePropertySet but we rather expand the shorthand to add the
        longhands. CSSPropertyBorderImage is a shorthand and it should follow
        that rule, so when we successfully parsed CSS border property and we
        should reset border-image then we should reset the longhands too.

        Test: LayoutTests/inspector/styles/styles-new-API-expected.txt which
        reflects the fact that we add longhands instead of the shorthand. All
        the other tests should not regress.

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

2013-03-06  Luiz Agostini  <luiz.agostini@nokia.com>

        Accelerated overflow scrolling for Coordinated Graphics.
        https://bugs.webkit.org/show_bug.cgi?id=110323

        Reviewed by Noam Rosenthal.

        A scroll offset is applied to individual layers on UI process and the
        web process is notified assynchronously.
        The new API WKCoordinatedScene may be used to scroll layers in the UI process.

        Tests will be added on bug #111140.

        Scrolling coordinator is used to provide a ScrollableArea to CoordinatedGraphicsLayer.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::scrollableAreaScrollLayerDidChange):
        (WebCore):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::willDestroyScrollableArea):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
        (ScrollingCoordinatorCoordinatedGraphics):

        GraphicsLayerTextureMapper is responsible for receiving the 'did commit' messages and to pass
        them to its TextureMapperLayer on the appropriated time.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::didCommitScrollOffset):
        (WebCore):
        (WebCore::GraphicsLayerTextureMapper::setIsScrollable):
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore::GraphicsLayerTextureMapper::setScrollClient):
        (WebCore::GraphicsLayerTextureMapper::setID):
        (GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::isScrollable):

        TextureMapperLayer is responsible for applying the requested scroll offset and for
        sending the commit messages to web process. It is also able to hittest layers and identify
        the ones that are scrollable.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::hitTest):
        (WebCore):
        (WebCore::TextureMapperLayer::scrollableLayerHitTestCondition):
        (WebCore::TextureMapperLayer::findScrollableContentsLayerAt):
        (WebCore::TextureMapperLayer::mapScrollOffset):
        (WebCore::TextureMapperLayer::commitScrollOffset):
        (WebCore::TextureMapperLayer::scrollBy):
        (WebCore::TextureMapperLayer::didCommitScrollOffset):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):
        (ScrollingClient):
        (WebCore::TextureMapperLayer::TextureMapperLayer):
        (WebCore::TextureMapperLayer::setID):
        (WebCore::TextureMapperLayer::id):
        (WebCore::TextureMapperLayer::setScrollClient):
        (WebCore::TextureMapperLayer::setIsScrollable):
        (WebCore::TextureMapperLayer::isScrollable):
        (WebCore::TextureMapperLayer::adjustedPosition):

        CoordinatedGraphicsLayer receives the commit messages and updates its ScrollableArea.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setScrollableArea):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::commitScrollOffset):
        (WebCore::CoordinatedGraphicsLayer::resetLayerState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (WebCore):
        (CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::isScrollable):

        CoordinatedGraphicsScene receives the commit messages from TextureMapperLayer and
        dispatches them on the main thread. It also has a new method that is used to find
        the topmost scrollable layer at a given point.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        (WebCore::CoordinatedGraphicsScene::createLayer):
        (WebCore::CoordinatedGraphicsScene::dispatchCommitScrollOffset):
        (WebCore):
        (WebCore::CoordinatedGraphicsScene::commitScrollOffset):
        (WebCore::CoordinatedGraphicsScene::findScrollableContentsLayerAt):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        (WebCore):
        (CoordinatedGraphicsSceneClient):
        (CoordinatedGraphicsScene):

        New fields have been added to CoordinatedGraphicsLayerState.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (CoordinatedGraphicsLayerState):

2013-03-06  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        REGGRESSION (r142112): It made compositing tests fail on EFL, Qt.
        https://bugs.webkit.org/show_bug.cgi?id=109291

        Reviewed by Kenneth Rohde Christiansen.

        Report we support fixed layers.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::supportsFixedPositionLayers):
        (ScrollingCoordinatorCoordinatedGraphics):

2013-03-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144859.
        http://trac.webkit.org/changeset/144859
        https://bugs.webkit.org/show_bug.cgi?id=111519

        Introduced a test that calls non-exist function on non-
        Chromium ports and crash on Chromium (Requested by rniwa on
        #webkit).

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

2013-03-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Could not open Profiles panel.
        https://bugs.webkit.org/show_bug.cgi?id=111535

        Reviewed by Alexander Pavlov.

        * inspector/front-end/CPUProfileView.js:
        * inspector/front-end/ProfilesPanel.js:

2013-03-06  Tony Chang  <tony@chromium.org>

        Crash during middle mouse click when page is removed
        https://bugs.webkit.org/show_bug.cgi?id=111489

        Reviewed by Hajime Morrita.

        Check for a null page that can happen if we remove the document from the DOM.
        The other methods in EventHandler also check for a null page.

        Test: editing/pasteboard/selection-paste-crash.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handlePasteGlobalSelection):

2013-03-05  Eric Seidel  <eric@webkit.org>

        Replace shouldLazyAttach bool with an enum for readability
        https://bugs.webkit.org/show_bug.cgi?id=111503

        Reviewed by Dimitri Glazkov.

        No behavioral change.

        * bindings/cpp/WebDOMNodeCustom.cpp:
        (WebDOMNode::insertBefore):
        (WebDOMNode::replaceChild):
        (WebDOMNode::appendChild):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::appendChild):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore):
        (WebCore::V8Node::insertBeforeMethodCustom):
        (WebCore::V8Node::replaceChildMethodCustom):
        (WebCore::V8Node::appendChildMethodCustom):
        * dom/ContainerNode.cpp:
        (WebCore):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::updateTreeAfterInsertion):
        * dom/ContainerNode.h:
        (ContainerNode):
        * dom/Node.cpp:
        (WebCore::Node::insertBefore):
        (WebCore::Node::replaceChild):
        (WebCore::Node::appendChild):
        * dom/Node.h:
        (Node):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::createControls):
        * html/shadow/MediaControlsBlackBerry.cpp:
        (WebCore::MediaControlsBlackBerry::createControls):
        * html/shadow/MediaControlsChromium.cpp:
        (WebCore::MediaControlsChromium::initializeControls):
        * html/shadow/MediaControlsChromiumAndroid.cpp:
        (WebCore::MediaControlsChromiumAndroid::createControls):

2013-03-05  Hajime Morrita  <morrita@google.com>

        Custom Elements: CustomElementConstructor::m_name doesn't have any good use.
        https://bugs.webkit.org/show_bug.cgi?id=111523

        Reviewed by Kentaro Hara.

        This change removes CustomElementConstructor::m_name and renames
        m_tagName to m_name. Now generated function name is same as interface name.

        Originally, m_name was added to specify the generated constructor
        name. An early version of custom element allows to give the name,
        but it no longer says anything about that.

        The rename is to align the semantics of type extension mechanism
        of Custom Elements, where the name of a custom element isn't
        necessarily a tag name.

        No new tests. Just removing old code.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * dom/CustomElementConstructor.cpp:
        (WebCore::CustomElementConstructor::create):
        (WebCore::CustomElementConstructor::CustomElementConstructor):
        (WebCore::CustomElementConstructor::createElement):
        * dom/CustomElementConstructor.h:
        (CustomElementConstructor):
        (WebCore::CustomElementConstructor::name):
        * dom/CustomElementRegistry.cpp:
        (WebCore::CustomElementRegistry::registerElement):

2013-03-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Flame Chart. Provide node context info in a popover when mouse hovers over a flame chart item.
        https://bugs.webkit.org/show_bug.cgi?id=111442

        Reviewed by Yury Semikhatsky.

        FlameChart is a canvas so it is not possible to attach the popover to the items on it.
        It would be a bit tricky to support an offset due to complex behaviour of the popover.
        The simplest solution is to create a fake anchor element and move it to the right position.

        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype._getPopoverAnchor):
        (WebInspector.FlameChart.prototype._showPopover):
        (WebInspector.FlameChart.prototype._onMouseMove):
        (WebInspector.FlameChart.prototype.findNodeCallback):
        (WebInspector.FlameChart.prototype._coordinatesToNode):
        (WebInspector.FlameChart.prototype.onResize):
        * inspector/front-end/flameChart.css:
        (.flame-chart .item-anchor):

2013-03-05  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r144787. Add missing USE(GRAPHICS_SURFACE) guards.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):

2013-03-05  Geoffrey Garen  <ggaren@apple.com>

        Autoreleased cached pages slow down the PLT by 2%
        https://bugs.webkit.org/show_bug.cgi?id=111522

        Reviewed by Filip Pizlo.

        Let's stop doing that.

        2% PLT speedup.

        * history/PageCache.cpp:
        (WebCore::PageCache::remove):

2013-03-05  Hayato Ito  <hayato@chromium.org>

        [Shadow] Implements event re-targeting for Touch Events.
        https://bugs.webkit.org/show_bug.cgi?id=107800

        Reviewed by Dimitri Glazkov.

        So far, Touch Events have been intentionally disabled in shadow
        tree since it allows users to access internal nodes in shadow tree
        by accessing Touch Event's information.

        This patch re-targets all individual touch point's target in
        TouchList (touches, targetTouches and changedTouches) owned by a Touch Event
        before the Touch Event is dispatched so that we won't break an
        upper boundary of shadow DOM.

        Touch Events re-targeting is similar to that of Mouse Events
        re-targeting. The difference is that a Touch Event can have more
        than one related target because of multiple touches. We must
        re-target all individual touch points which can be referred from
        the Touch Event.

        Now, Touch Events can be fired in shadow tree. I've removed the
        existing limitation.

        Test: fast/dom/shadow/touch-event-retargeting.html

        * dom/EventContext.cpp:
        (WebCore::EventContext::isTouchEventContext):
        (WebCore):
        (WebCore::TouchEventContext::TouchEventContext):
        (WebCore::TouchEventContext::~TouchEventContext):
        (WebCore::TouchEventContext::handleLocalEvents):
        (WebCore::TouchEventContext::isTouchEventContext):
        (WebCore::TouchEventContext::checkReachability):  Used for assertion of reachability for each Touch point.
        * dom/EventContext.h:
        (WebCore):
        (EventContext):
        (TouchEventContext): Introduced to hold necessary information for re-targeting Touch event.
        (WebCore::TouchEventContext::touches):
        (WebCore::TouchEventContext::targetTouches):
        (WebCore::TouchEventContext::changedTouches):
        (WebCore::EventContext::isReachable):
        * dom/EventRetargeter.cpp:
        (WebCore::EventRetargeter::calculateEventPath):
        (WebCore::EventRetargeter::adjustForTouchEvent):
        (WebCore):
        (WebCore::EventRetargeter::adjustTouchList):
        (WebCore::EventRetargeter::adjustForRelatedTarget):
        (WebCore::EventRetargeter::calculateAdjustedNodes): Updated so that this can be used for Touch point re-targeting.
        (WebCore::EventRetargeter::buildRelatedNodeMap):
        * dom/EventRetargeter.h:
        (WebCore):
        (EventRetargeter):
        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent):
        (WebCore):
        (WebCore::Node::dispatchTouchEvent):
        * dom/Node.h:
        (WebCore):
        (Node):
        * dom/Touch.cpp:
        (WebCore::Touch::Touch):
        (WebCore):
        (WebCore::Touch::cloneWithNewTarget):
        * dom/Touch.h:
        (Touch):
        * dom/TouchEvent.cpp:
        (WebCore::TouchEventDispatchMediator::create):
        (WebCore):
        (WebCore::TouchEventDispatchMediator::TouchEventDispatchMediator):
        (WebCore::TouchEventDispatchMediator::event):
        (WebCore::TouchEventDispatchMediator::dispatchEvent):
        * dom/TouchEvent.h:
        (TouchEvent):
        (WebCore::TouchEvent::setTouches):
        (WebCore::TouchEvent::setTargetTouches):
        (WebCore::TouchEvent::setChangedTouches):
        (TouchEventDispatchMediator):
        (WebCore):
        (WebCore::toTouchEvent):
        * dom/TouchList.cpp:
        (WebCore::TouchList::item):
        (WebCore):
        * dom/TouchList.h:
        (TouchList):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultInFrame): Removed the limitation. Adjusting is no longer done here.
        (WebCore::EventHandler::handleTouchEvent):

2013-03-05  Hajime Morrita  <morrita@google.com>

        [Custom Elements][V8] Custom Element doesn't need its own WrapperTypeInfo
        https://bugs.webkit.org/show_bug.cgi?id=111411

        Reviewed by Kentaro Hara.

        No new tests. No observable change yet.

        This is a preparation for Bug 110436, where WebKit is going to
        allow any HTML element to be a superclass of custom elements.

        This change eliminates WrapperTypeInfo for custom element. Instead
        of that, the wrapper of a custom element picks WrapperTypeInfo
        from most descendant built-in HTML element. For example, think about
        following hierarchy:

        - ... <- HTMLElement <- HTMLDivElememnt <- ExistingCustomElement <- NewCustomElement

        In this case, both ExistingCustomElement and NewCustomElement has
        HTMLDivElememnt's type info. This is because HTMLDivElememnt is
        the most descendant (or "the nearest") built-in HTML
        element. (HTMLElement isn't the most descendant.
        ExistingCustomElement isn't a built-in.)

        Using such WrapperTypeInfos, created custom element wrappers can
        get appropriate set of method and properties regardless of its
        super-elements.

        This change tells the prototype object of each built-in object
        which WrapperTypeInfo the native backing wants:
        HTMLDivElememnt.prototype knows V8HTMLDivElement::info for
        example. The pointer to the type info is stored into an internal
        field. On wrapper construction, createWrapper() walks up the
        prototype chain and pick the first one.

        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::configureTemplate):
        * bindings/v8/V8HTMLCustomElement.cpp:
        (WebCore::findWrapperTypeOf):
        (WebCore::V8HTMLCustomElement::createWrapper):
        * bindings/v8/V8HTMLCustomElement.h:
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextData::constructorForTypeSlowCase):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):

2013-03-05  Aaron Colwell  <acolwell@chromium.org>

        Heap-use-after-free in WebCore::HTMLMediaElement::~HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=110623

        Reviewed by Eric Seidel.

        Test: http/tests/misc/delete-frame-during-readystatechange-with-gc-after-video-removal.html

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

2013-03-05  Chris Fleizach  <cfleizach@apple.com>
 
        AX: Support aria-posinset/setsize
        https://bugs.webkit.org/show_bug.cgi?id=109725

        Reviewed by Tim Horton.

        Expose aria-setsize and aria-posinset through accessibility.
        Right now only the Mac platform exposes them.

        Test: platform/mac/accessibility/aria-setsize-posinset.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIASetSize):
        (WebCore):
        (WebCore::AccessibilityObject::supportsARIAPosInset):
        (WebCore::AccessibilityObject::ariaSetSize):
        (WebCore::AccessibilityObject::ariaPosInset):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:


2013-03-05  Peter Nelson  <peter@peterdn.com>

        [WinCairo] Support for cookies is incomplete
        https://bugs.webkit.org/show_bug.cgi?id=110147
        
        Expired and HttpOnly cookies no longer accessible from JavaScript.
        Cookies set in JavaScript now have correct domain/path.

        Reviewed by Brent Fulgham.

        Test: http/tests/cookies/http-get-cookie-set-in-js.html

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore):
        (WebCore::addMatchingCurlCookie):
        (WebCore::getNetscapeCookieFormat):
        (WebCore::setCookiesFromDOM):
        (WebCore::cookieRequestHeaderFieldValue):

2013-03-05  Alec Flett  <alecflett@chromium.org>

        Fix mac clang build with long long
        https://bugs.webkit.org/show_bug.cgi?id=111495

        Unreviewed fix for mac build.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore):

2013-03-05  Alec Flett  <alecflett@chromium.org>

        Fix mac clang build with long long
        https://bugs.webkit.org/show_bug.cgi?id=111495

        Unreviewed fix for mac build.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore):

2013-03-05  Aaron Colwell  <acolwell@chromium.org>

        Add V8Document.h include when the V8 code generator creates a toV8(Document*) call.
        https://bugs.webkit.org/show_bug.cgi?id=111486

        Reviewed by Adam Barth.

        No new tests. This doesn't change user visible behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNamedConstructor):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:

2013-03-05  Shawn Singh  <shawnsingh@chromium.org>

        Fix default background of a dragged image.
        https://bugs.webkit.org/show_bug.cgi?id=110512

        Reviewed by Tony Chang.

        Transparent background color (particularly visible in the padding
        of an element) was not being respected. The solution is to
        initially fill the drag image with transparent instead of white,
        so that any color background works correctly. This patch does not
        affect Apple Mac or Win platforms, given that this part of the
        code is #if guarded from those platforms.

        Manual test added:
          ManualTests/drag-background-with-padding.html

        Infrastructure for retrieving the drag image for pixel testing
        does not yet exist.

        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):

2013-03-05  Emil A Eklund  <eae@chromium.org>

        ASSERTION FAILED: i < size(), UNKNOWN in WebCore::RenderTableSection::layout
        https://bugs.webkit.org/show_bug.cgi?id=108838

        Reviewed by Levi Weintraub.
        
        Ensure that RenderTable::recalcSections is called when moving a
        TableSection by calling setNeedsSectionRecalc in addChild for
        TableSections.

        Test: fullscreen/full-screen-table-section.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):

2013-03-05  Kenneth Russell  <kbr@google.com>

        Upgrade ANGLE to r1987
        https://bugs.webkit.org/show_bug.cgi?id=111381

        Reviewed by Dean Jackson.

        Covered by existing tests. Ran WebGL conformance tests in Safari
        to ensure correct operation of patch.

        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::initializeANGLE):
            Changed all ports to query for highp support in fragment
            shaders and conditionally enable it in ANGLE shader translator.

2013-03-05  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Add IDBBackingStoreTest
        https://bugs.webkit.org/show_bug.cgi?id=111233

        Reviewed by Adam Barth.

        These are tweaks to make IDBBackingStore more easily testable.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore): Allow use without a backing store.

2013-03-04  James Robinson  <jamesr@chromium.org>

        [chromium] Move check for threaded compositing from WebCompositorSupport to Platform
        https://bugs.webkit.org/show_bug.cgi?id=111386

        Reviewed by Adrienne Walker.

        This moves checks for whether threaded compositing is enabled from WebCompositorSupport
        to Platform. In the case of Canvas2DLayerBridge, the check is moved completely out of
        the class to make it easier for tests to specify the threaded configuration to use in the test.

        * platform/graphics/chromium/Canvas2DLayerBridge.cpp:
        (WebCore::Canvas2DLayerBridge::Canvas2DLayerBridge):
        * platform/graphics/chromium/Canvas2DLayerBridge.h:
        (WebCore::Canvas2DLayerBridge::create):
        (Canvas2DLayerBridge):
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::createAcceleratedCanvas):

2013-03-05  Anders Carlsson  <andersca@apple.com>

        Split up the storage event dispatch functions further
        https://bugs.webkit.org/show_bug.cgi?id=111482

        Reviewed by Beth Dakin.

        Add new functions for dispatching storage events to a set of frames.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::dispatchStorageEvent):
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
        (WebCore):
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
        * storage/StorageEventDispatcher.h:
        (WebCore):
        (StorageEventDispatcher):

2013-03-05  Stephen Chenney  <schenney@chromium.org>

        Crash when ImageLoader deletes Element inside SVGImageElement
        https://bugs.webkit.org/show_bug.cgi?id=111085

        Reviewed by Abhishek Arya.

        Elements with ImageLoader objects associated with them may have their
        final reference held by the ImageLoader (to allow events to be sent
        and handled). Any call on Element that causes the ImageLoader to
        dispatch events might then result in the final deref of the Element
        itself, thus leaving all the Element's "this" pointers up the stack
        pointing to invalid memory.

        This change puts the deref of the Element on a timer so that, if the
        deref is called via a method on Element, the call stack will unwind
        before the deref occurs.

        Test: svg/custom/image-with-attr-change-after-delete-crash.html

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::ImageLoader): Initialize a timer
        (WebCore::ImageLoader::updatedHasPendingEvent): Put deref of the
          element on a oneShotTimer, with appropriate assertions and checks to
          ensure we only ref/deref once.
        (WebCore::ImageLoader::timerFired): Deref the element when the timer fires.
        * loader/ImageLoader.h:
        (ImageLoader): Define a timer for controlling deref of the element.

2013-03-05  Antoine Quint  <graouts@apple.com>

        Web Inspector: identify reflection layers in LayerTreeAgent
        https://bugs.webkit.org/show_bug.cgi?id=111419

        We add a new property "isReflection" to the Layer objects returned
        to the front-end to indicate whether the layer was created to host
        the reflection for an element. When this new property is true, the
        "nodeId" property is set to point to the reflected element's node
        id, since there is no node per-se directly associated with this layer.
        We also change the "bounds" property to return absolute page coordinates
        such that the front-end can use this information to highlight that
        region in the page since metrics would otherwise be unavailable.

        Reviewed by Dean Jackson.

        Test: inspector-protocol/layers/layers-reflected-content.html

        * inspector/Inspector.json:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):

2013-03-05  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile fix after r144024.
        https://bugs.webkit.org/show_bug.cgi?id=111306

        Reviewed by James Robinson.

        * page/scrolling/ScrollingCoordinator.cpp: Added guard for USE(ACCELERATED_COMPOSITING).
        * page/scrolling/ScrollingCoordinator.h: Added guard for USE(ACCELERATED_COMPOSITING).

2013-03-05  James Weatherall  <wez@chromium.org>

        keydown and keyup events have zero keycode for some numeric pad keys under Chromium on Linux
        https://bugs.webkit.org/show_bug.cgi?id=85642

        Add missing key mappings for GDK_KP_Begin, GDK_KP_Insert, GDK_KP_Delete and GDK_ISO_Level3_Shift.

        Reviewed by Ojan Vafai.

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2013-03-05  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Properly refactor frontend/backend code by #includes
        https://bugs.webkit.org/show_bug.cgi?id=110653

        Reviewed by Dimitri Glazkov.

        IndexedDB has a distinct backend and frontend, with well defined
        *Interface / *Callbacks classes distinguishing them, respectively.
        
        This makes sure that the frontend and backend do not include each
        other and fixes build problems that occurred as a result.

        Specifically this moves enums out of IDBCursor and IDBTransaction
        into IndexedDB.h in a new WebCore::IndexedDB namespace.

        No new tests, as this is just a refactor.

2013-03-05  Jeffrey Pfau  <jpfau@apple.com>

        Clear associated cache partitions when deleting origins' cache
        https://bugs.webkit.org/show_bug.cgi?id=111383

        Reviewed by Maciej Stachowiak.

        Clear the cache partitions associated with the origin being cleared.

        Not possible to test with current automated test tools, must be tested manually.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeResourcesWithOrigin):

2013-03-04  Ojan Vafai  <ojan@chromium.org>

        Inline min/maxInstrinsicLogicalWidth functions
        https://bugs.webkit.org/show_bug.cgi?id=111399

        Reviewed by Tony Chang.

        Turns out these functions don't need to be public and only
        have one caller. This patch is in preparation for supporting
        intrinsic widths on tables, which will need to pass in the
        border and padding width as an argument.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::fillAvailableMeasure):
        (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        * rendering/RenderBox.h:

2013-03-05  Victor Carbune  <vcarbune@chromium.org>

        Cue line-height property shouldn't be inherited from the video element
        https://bugs.webkit.org/show_bug.cgi?id=111262

        Reviewed by Eric Carlson.

        Test: media/track/track-cue-rendering-on-resize.html

        * css/mediaControls.css:
        (video::-webkit-media-text-track-container): Set the default font size
        and family using the "font" property to also reset the line-height property.

2013-03-05  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove some unused binding code
        https://bugs.webkit.org/show_bug.cgi?id=111463

        Reviewed by Adam Barth.

        IDBRequest got a custom V8 getter for |request| to help diagnose an issue, but the
        root cause was found/fixed (http://wkbug.com/110916 and http://wkbug.com/110206) so
        remove it. Also, IDBKey was marked ScriptWrappable but it is now explicitly converted
        to a ScriptValue before it gets anywhere near the binding code, so remove that too.
        Finally, createIDBKeyFromValue doesn't need to be exposed from IDBBindingUtilities.

        No new tests - just removing dead code.

        * Modules/indexeddb/IDBKey.h: No need for ScriptWrappable.
        * Modules/indexeddb/IDBRequest.idl: Remove custom binding (root cause of bug found).
        * WebCore.gypi: Ditto.
        * bindings/js/IDBBindingUtilities.h: Don't expose internal createIDBKeyFromValue().
        * bindings/v8/IDBBindingUtilities.h: Ditto.
        * bindings/v8/custom/V8IDBRequestCustom.cpp: Removed.

2013-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144798.
        http://trac.webkit.org/changeset/144798
        https://bugs.webkit.org/show_bug.cgi?id=111478

        "broke chromium windows build" (Requested by dpranke on
        #webkit).

        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::Cursor::continueFunction):
        (WebCore::objectStoreCursorOptions):
        (WebCore::indexCursorOptions):
        (WebCore::IDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBBackingStore::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBBackingStore::openIndexCursor):
        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::create):
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::stringToDirection):
        (WebCore::IDBCursor::directionToString):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        (WebCore::IDBCursorBackendImpl::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        (WebCore::IDBCursorBackendImpl::value):
        (IDBCursorBackendImpl):
        * Modules/indexeddb/IDBCursorBackendInterface.h:
        (WebCore):
        * Modules/indexeddb/IDBCursorWithValue.cpp:
        (WebCore::IDBCursorWithValue::create):
        (WebCore::IDBCursorWithValue::IDBCursorWithValue):
        * Modules/indexeddb/IDBCursorWithValue.h:
        (IDBCursorWithValue):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (GetOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (OpenCursorOperation):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::createIndex):
        (WebCore::IDBDatabaseBackendImpl::deleteIndex):
        (WebCore::IDBDatabaseBackendImpl::get):
        (WebCore::GetOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::put):
        (WebCore::PutOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::setIndexKeys):
        (WebCore::IDBDatabaseBackendImpl::openCursor):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::deleteRange):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::clear):
        (WebCore::IDBDatabaseBackendImpl::transactionStarted):
        (WebCore::IDBDatabaseBackendImpl::transactionFinished):
        (WebCore::IDBDatabaseBackendImpl::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackendImpl::transactionFinishedAndCompleteFired):
        (WebCore::IDBDatabaseBackendImpl::createTransaction):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore):
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore):
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::setCursorDetails):
        (WebCore::IDBRequest::setResultCursor):
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::stringToMode):
        (WebCore::IDBTransaction::modeToString):
        * Modules/indexeddb/IDBTransaction.h:
        (WebCore::IDBTransaction::isReadOnly):
        (WebCore::IDBTransaction::isVersionChange):
        (IDBTransaction):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::mode):
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):
        (WebCore::IDBTransactionCoordinator::canRunTransaction):
        * Modules/indexeddb/IndexedDB.h: Removed.
        * Target.pri:
        * WebCore.gypi:

2013-03-05  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Allow local and remote descriptions to be accessed after close
        https://bugs.webkit.org/show_bug.cgi?id=111437

        Reviewed by Adam Barth.

        It's quite clear in the standard that the getters should still return the old value.
        Also overhauling the state setters a bit to check if the new state is different.

        Existing tests expanded to cover patch.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::localDescription):
        (WebCore::RTCPeerConnection::remoteDescription):
        (WebCore::RTCPeerConnection::changeSignalingState):
        (WebCore::RTCPeerConnection::changeIceGatheringState):
        (WebCore::RTCPeerConnection::changeIceConnectionState):

2013-03-05  Charlie Reis  <creis@chromium.org>

        Add FrameLoaderClient::didAccessInitialDocument
        https://bugs.webkit.org/show_bug.cgi?id=107963

        Notifies the FrameLoaderClient if another page accesses the
        initial empty document of a main frame.  In this case, it is
        no longer safe to display the provisional URL.

        Only takes effect for PLATFORM(CHROMIUM), since no other platforms
        listen to the notification.

        Reviewed by Adam Barth.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::setSecurityToken):
            Use default token for initial document.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
            Notify loader if initial document is accessed.
        (WebCore::V8DOMWindow::namedSecurityCheck):
        (WebCore::V8DOMWindow::indexedSecurityCheck):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::didAccessInitialDocument):
        (WebCore):
        * loader/FrameLoader.h:
        (FrameLoader):
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        (WebCore::FrameLoaderClient::didAccessInitialDocument):

2013-03-05  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Fix assertion in CookieManager::getBackingStoreCookies
        https://bugs.webkit.org/show_bug.cgi?id=111468

        Reviewed by Rob Buis.
        Internally reviewed by Konrad Piascik.

        The assert in getBackingStoreCookies could be giving out false positives now
        that we have our fixes for cookie loading in PR 286189. The cookie store could
        be half loaded if the first cookie get/set call happens before the db is fully loaded.
        A full webkit sync call to reload the database will cause the assert to be hit.

        Safer to flush everything out and try again.

        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::getBackingStoreCookies):

2013-03-05  Tony Gentilcore  <tonyg@chromium.org>

        CompactHTMLToken does not need an XSSInfo pointer
        https://bugs.webkit.org/show_bug.cgi?id=111423

        Reviewed by Eric Seidel.

        The CompactHTMLToken should remain as small as possible because it is copied. This shrinks the size by one pointer
        by moving a relatively uncommon attribute out to its own Vector.

        No new tests because no new functionality.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::checkThatXSSInfosAreSafeToSendToAnotherThread):
        (WebCore):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):
        * html/parser/CompactHTMLToken.cpp:
        (SameSizeAsCompactHTMLToken):
        (WebCore::CompactHTMLToken::isSafeToSendToAnotherThread):
        * html/parser/CompactHTMLToken.h:
        (WebCore):
        (CompactHTMLToken):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        * html/parser/HTMLDocumentParser.h:
        (ParsedChunk):
        * html/parser/XSSAuditorDelegate.h:
        (XSSInfo):
        (WebCore):

2013-03-05  Anders Carlsson  <andersca@apple.com>

        Split StorageEventDispatcher::dispatch into two functions
        https://bugs.webkit.org/show_bug.cgi?id=111464

        Reviewed by Beth Dakin.

        Split StorageEventDispatcher::dispatch into dispatchSessionStorageEvent and
        dispatchLocalStorageEvent and make StorageAreaImpl::dispatchStorageEvent call
        the right function based on the storage area type.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::dispatchStorageEvent):
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvent):
        (WebCore):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvent):
        * storage/StorageEventDispatcher.h:
        (StorageEventDispatcher):

2013-03-05  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix after r144024.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollLayerForScrollableArea): Handle
        case of not using Accelerated Compositing
        (WebCore::ScrollingCoordinator::horizontalScrollbarLayerForScrollableArea):
        (WebCore::ScrollingCoordinator::verticalScrollbarLayerForScrollableArea): Ditto.

2013-03-05  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Properly refactor frontend/backend code by #includes
        https://bugs.webkit.org/show_bug.cgi?id=110653

        Reviewed by Dimitri Glazkov.

        IndexedDB has a distinct backend and frontend, with well defined
        *Interface / *Callbacks classes distinguishing them, respectively.
        
        This makes sure that the frontend and backend do not include each
        other and fixes build problems that occurred as a result.

        Specifically this moves enums out of IDBCursor and IDBTransaction
        into IndexedDB.h in a new WebCore::IndexedDB namespace.

        No new tests, as this is just a refactor.

2013-03-05  James Robinson  <jamesr@chromium.org>

        ContainerNode::setActive should not sleep for 100ms on platforms that do not implement synchronous repaint(true) semantics
        https://bugs.webkit.org/show_bug.cgi?id=87054

        Reviewed by Darin Adler.

        Adds a new ChromeClient function to query if the platform supports the immediate parameter
        to the invalidation APIs and guards the synchronous repaint logic in ContainerNode::setActive()
        with it.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::setActive):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::supportsImmediateInvalidation):

2013-03-05  Anders Carlsson  <andersca@apple.com>

        Simplify storage event dispatch somewhat
        https://bugs.webkit.org/show_bug.cgi?id=111461

        Reviewed by Beth Dakin.

        Add a StorageAreaImpl::dispatchStorageEvent to avoid replicating the calls to
        StorageEventDispatcher::dispatch there times. This is in preparation for changing the
        interface of StorageEventDispatcher so it can be used by WebKit2.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::setItem):
        (WebCore::StorageAreaImpl::removeItem):
        (WebCore::StorageAreaImpl::clear):
        (WebCore::StorageAreaImpl::dispatchStorageEvent):

        * storage/StorageAreaImpl.h:
        Reindent.

2013-03-05  Tony Chang  <tony@chromium.org>

        Fix some crashes in render sliders
        https://bugs.webkit.org/show_bug.cgi?id=111458

        Reviewed by Ojan Vafai.

        Fix some cases where we assumed the renderer is a renderBox.

        Test: fast/forms/range/slider-inline-crash.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::layout): Use renderBox() which will return 0 if the renderer is not a RenderBox.
        (WebCore::SliderThumbElement::setPositionFromPoint): Bail out early if renderBox() is 0.

2013-03-04  Andrew Scherkus  <scherkus@chromium.org>

        REGRESSION(r142191): Fix closed caption buttons for ports still using the painting path.
        https://bugs.webkit.org/show_bug.cgi?id=111109

        Reviewed by Eric Carlson.

        Covered by following tests:
        media/track/track-cue-rendering-horizontal.html
        media/track/track-cue-rendering-vertical.html

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMediaToggleClosedCaptionsButton):

2013-03-05  Gwang Yoon Hwang  <ryumiel@company100.net>

        Coordinated Graphics: CoordinatedGraphicsLayer makes CoordinatedGraphicsScene perform via CoordinatedGraphicsState.
        https://bugs.webkit.org/show_bug.cgi?id=108294

        Reviewed by Anders Carlsson.

        CoordinatedLayerTreeHostProxy has too many IPC messages (e.g. SyncCanvas and
        CreateTile), and there is a long function chain from CoordinatedGraphicsLayer to
        CoordinatedGraphicsScene (4 classes).
        If we want to add a new message, we need to add similar functions into 4 classes.

        Now CoordinatedLayerTreeHost has only one IPC message for CoordinatedGraphicsLayer:
        CommitCoordinatedGraphicsState.
        CoordinatedGraphicsLayer makes CoordinatedGraphicsScene run as follows:
        1. CoordinatedGraphicsLayer makes a CoordinatedGraphicsLayerState.
        2. CoordinatedLayerTreeHost stores all LayerStates.
        3. CoordinatedLayerTreeHost sends GraphicsState includes LayerStates to CoordinatedLayerTreeHostProxy
        at the moment of flushing via CommitCoordinatedGraphicsState message.
        4. CoordinatedGraphicsScene applies all state changes to layers.

        There is one big behavior change. All states changes (e.g.
        UpdateTiles, SetLayerChildren, and etc..) are performed at the same time, when
        CoordinatedGraphicsScene::commitCoordinatedGraphicsState is called.

        This patch is based on Dongsung Huang, and Noam's work in
        https://bugs.webkit.org/show_bug.cgi?id=108294

        No new tests, covered by existing tests.

        * Target.pri:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setPosition):
        (WebCore::CoordinatedGraphicsLayer::setAnchorPoint):
        (WebCore::CoordinatedGraphicsLayer::setSize):
        (WebCore::CoordinatedGraphicsLayer::setTransform):
        (WebCore::CoordinatedGraphicsLayer::setChildrenTransform):
        (WebCore::CoordinatedGraphicsLayer::setPreserves3D):
        (WebCore::CoordinatedGraphicsLayer::setMasksToBounds):
        (WebCore::CoordinatedGraphicsLayer::setDrawsContent):
        (WebCore::CoordinatedGraphicsLayer::setContentsVisible):
        (WebCore::CoordinatedGraphicsLayer::setContentsOpaque):
        (WebCore::CoordinatedGraphicsLayer::setBackfaceVisibility):
        (WebCore::CoordinatedGraphicsLayer::setOpacity):
        (WebCore::CoordinatedGraphicsLayer::setContentsRect):
        (WebCore::CoordinatedGraphicsLayer::setFilters):
        (WebCore::CoordinatedGraphicsLayer::setContentsToSolidColor):
        (WebCore::CoordinatedGraphicsLayer::setShowDebugBorder):
        (WebCore::CoordinatedGraphicsLayer::setShowRepaintCounter):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        (WebCore::CoordinatedGraphicsLayer::setReplicatedByLayer):
        (WebCore::CoordinatedGraphicsLayer::setFixedToViewport):
        (WebCore::CoordinatedGraphicsLayer::syncChildren):
        (WebCore::CoordinatedGraphicsLayer::syncFilters):
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::setDebugBorder):
        (WebCore::CoordinatedGraphicsLayer::syncAnimations):
        (WebCore::CoordinatedGraphicsLayer::syncCanvas):
        (WebCore::CoordinatedGraphicsLayer::destroyCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::createCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::resetLayerState):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::releaseImageBackingIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::setRootLayer):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStorePaintEnd):
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        (WebCore::CoordinatedGraphicsLayer::removeTile):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::createCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::syncCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::destroyCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerRepaintCountIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerChildrenIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerFiltersIfNeeded):
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        (WebCore::CoordinatedGraphicsScene::deleteLayer):
        (WebCore::CoordinatedGraphicsScene::createTilesIfNeeded):
        (WebCore::CoordinatedGraphicsScene::removeTilesIfNeeded):
        (WebCore::CoordinatedGraphicsScene::updateTilesIfNeeded):
        (WebCore::CoordinatedGraphicsScene::assignImageBackingToLayer):
        (WebCore::CoordinatedGraphicsScene::commitSceneState):
        (WebCore::CoordinatedGraphicsScene::setLayerAnimationsIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        (WebCore):
        (CoordinatedGraphicsScene):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h: Added.
        (WebCore):
        (TileUpdateInfo):
        (TileCreationInfo):
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):
        (CoordinatedGraphicsLayerState):
        (CoordinatedGraphicsState):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h:
        * platform/graphics/texmap/coordinated/CoordinatedLayerInfo.h: Removed.
        * platform/graphics/texmap/coordinated/SurfaceUpdateInfo.h:

2013-03-05  Roger Fong  <roger_fong@apple.com>

        Unreviewed. AppleWin VS2010 build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * rendering/RenderingAllInOne.cpp:

2013-03-05  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] shape-outside on floats for polygon shapes
        https://bugs.webkit.org/show_bug.cgi?id=98676

        Reviewed by David Hyatt.

        Implement support for polygonal shape-outside on floats. The basic
        tack taken here is to keep using the bounding box of the shape to
        position the float, but to compute the offset (caused by the shape)
        from the bounding box for each line when creating and positioning
        other inline content.

        Test: fast/exclusions/shape-outside-floats/shape-outside-floats-simple-polygon.html

        * rendering/ExclusionShapeInfo.cpp:
        (WebCore):
        (WebCore::::computedShape): Add new template parameter.
        (WebCore::::logicalTopOffset): Add new template parameter.
        (WebCore::::computeSegmentsForLine): Move here from
            ExclusionShapeInsideInfo, since ExclusionShapeOutsideInfo needs it
            as well. Make virtual since there is slightly different behavior
            between each class even though the vast majority of the code is
            common.
        * rendering/ExclusionShapeInfo.h:
        (WebCore):
        (WebCore::ExclusionShapeInfo::~ExclusionShapeInfo): Since
            computeSegmentsForLine is virtual, the destructor must be virtual
            as well.
        (ExclusionShapeInfo): Add new data members to support
            computeSegmentsForLine.
        (WebCore::ExclusionShapeInfo::shapeLogicalRight): Fix bug, the logical
            right is based off of maxX, not y. (it's a logical bounding box!)
        (WebCore::ExclusionShapeInfo::logicalLineTop): Moved from
            ExclusionShapeInsideInfo for use by computeSegmentsForLine and
            lineOverlapsShapeBounds.
        (WebCore::ExclusionShapeInfo::logicalLineBottom): Moved from
            ExclusionShapeInsideInfo for use by computeSegmentsForLine and
            lineOverlapsShapeBounds.
        (WebCore::ExclusionShapeInfo::lineOverlapsShapeBounds): Moved from
            ExclusionShapeInsideInfo for use by computeSegmentsForLine.
        * rendering/ExclusionShapeInsideInfo.cpp: Moved common code from
            computeSegmentsForLine into ExclusionShapeInfo.
        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore): Moved some methods to ExclusionShapeInfo.
        (ExclusionShapeInsideInfo): Update for new template parameter.
        (WebCore::ExclusionShapeInsideInfo::compyteSegmentsForLine): Override
            superclass method to clear the segment ranges. Segement ranges
            aren't used by shape outside, and have some complex dependencies
            that make it very hard to try and move up into ExclusionShapeInfo.
        (WebCore::ExclusionShapeInsideInfo::ExclusionShapeInsideInfo): Update
            for new template parameter.
        * rendering/ExclusionShapeOutsideInfo.cpp:
        (WebCore::ExclusionShapeOutsideInfo::isEnabledFor): Add polygons as a
            supported shape.
        (WebCore::ExclusionShapeOutsideInfo::computeSegmentsForLine): Override
            superclass method to not recompute if it isn't needed (this isn't
            straightfoward for shape inside, which is why it isn't common),
            and to save the left and right offsets caused by the shape
            outside, since that's all that is needed to properly do layout in
            the case of floats.
        * rendering/ExclusionShapeOutsideInfo.h:
        (WebCore::ExclusionShapeOutsideInfo::shapeLogicalOffset): Reformat to
            be on a single line, like most other methods of it's type in
            WebKit headers.
        (ExclusionShapeOutsideInfo): Update for new template parameter.
        (WebCore::ExclusionShapeOutsideInfo::logicalLeftOffsetForLine):
            Accessor method to get the left offset between the shape and the
            shape's bounding box.
        (WebCore::ExclusionShapeOutsideInfo::logicalRightOffsetForLine):
            Accessor method to get the left offset between the shape and the
            shape's bounding box.
        (WebCore::ExclusionShapeOutsideInfo::ExclusionShapeOutsideInfo):
            Update for new template parameter.
        * rendering/RenderBlock.cpp:
        (WebCore::::collectIfNeeded): Save the last float encountered so that
            the shape outside offset can be accounted for.
        (WebCore::RenderBlock::logicalLeftOffsetForLine): Account for the
            shape outside offset on the outermost float.
        (WebCore::RenderBlock::logicalRightOffsetForLine): Account for the
            shape outside offset on the outermost float.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatIntervalSearchAdapter::FloatIntervalSearchAdapter):
            Initialize the lastFloat member.
        (WebCore::RenderBlock::FloatIntervalSearchAdapter::lastFloat): Get the
            last float encountered.
        (FloatIntervalSearchAdapter): Add a pointer to the last float
            encountered. Note that the variable is mutable because
            collectIfNeeded is declared as a const method even though it isn't
            (it uses loopholes to update m_offset and m_heightRemaining).
            Instead of trying to come up with a hack to stick with the
            loopholes, I decided to be explicit about it.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded): Take
            into account the offset from any polygonal shape outside.
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak): Add a FIXME
            because the current code will not work properly with stacked
            floats that have polygonal shape outside.

2013-03-04  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Autogenerate regions for columns.
        https://bugs.webkit.org/show_bug.cgi?id=111363

        Reviewed by Dean Jackson.

        In CSS Regions, we lay out the regions first, and then
        we put the flow thread into the regions. This model doesn't
        really work for multicolumn layout, which needs to be able
        to auto-generate new regions lazily in response to the flow
        thread asking for regions at particular offsets.

        With the multi-column model, where the regions can't just occur
        anywhere, its ok not to lay them out before the flow thread, as
        long as we have at least given them the correct size.
        
        This patch changes the layout algorithm for columns to:
        (1) Size any existing regions (without worrying about placement).
        (2) Lay out the flow thread (generating and sizing regions lazily
        that need to be created).
        (3) Lay out the regions (to give them correct placement and to
        compute overflow correctly for the multi-column block that contains
        the regions).

        There are no new tests, since there are no behavioral changes. This
        is just groundwork for being able to add new sets in response to
        spans, balancing, and nested pagination contexts.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::determineLogicalLeftPositionForChild):
        (WebCore::RenderBlock::layoutBlockChild):
        * rendering/RenderBlock.h:
        (RenderBlock):
        Since we want to be able to call determineLogicalLeftPositionForChild
        to place the flow thread properly, and we don't want to apply a layout
        delta (flow threads repaint themselves), we parameterize the method
        here so that it can be called without applying a layout delta.
        
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addRegionToThread):
        (WebCore::RenderFlowThread::removeRegionFromThread):
        These methods are only used by RenderMultiColumnFlowThread, since
        RenderNamedFlowThread overrides them. Remove the code that invalidates
        the flow threads region set as regions come and go, since that is now
        going to be expected with auto-generation.

        (WebCore::RenderFlowThread::validateRegions):
        Refactor the code in RenderFlowThread::layout that validates the regions
        into its own method, so that we can re-validate regions at any time
        after generating new ones.
        
        (WebCore::RenderFlowThread::layout):
        Changed to move the region validation code into its own function that is
        now called from here.

        (WebCore::RenderFlowThread::updateLogicalWidth):
        Don't assert if a region set needs layout.

        (WebCore::RenderFlowThread::computeLogicalHeight):
        Ditto. Don't assert if a region set needs layout. That's expected now.

        (WebCore::RenderFlowThread::regionAtBlockOffset):
        Add code to regionAtBlockOffset to auto-generate regions up to
        the offset. This ensures the region that is being asked for
        exists.

        (WebCore::RenderFlowThread::pageLogicalTopForOffset):
        (WebCore::RenderFlowThread::pageLogicalWidthForOffset):
        (WebCore::RenderFlowThread::pageLogicalHeightForOffset):
        (WebCore::RenderFlowThread::pageRemainingLogicalHeightForOffset):
        These functions are no longer const, since the act of asking for
        pagination offsets can cause us to generate new regions.

        (WebCore::RenderFlowThread::mapFromFlowToRegion):
        Modified to turn auto-generation off, since this is not really
        a "layout-time" function.

        (WebCore::RenderFlowThread::logicalWidthChangedInRegions):
        Modified to not assert if a region set needs layout, since that is
        expected now.

        * rendering/RenderFlowThread.h:
        Changes to remove const from the methods that can trigger region
        auto-generation.

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::styleDidChange):
        Make sure to propagate style changes down into the regions. I don't know
        of any correctness bugs around this, but I figured I'd be thorough.

        (WebCore::RenderMultiColumnBlock::checkForPaginationLogicalHeightChange):
        We no longer build a column set aggressively. We wait for the flow thread
        to ask us for a region at a particular offset, and only then do we
        build the set.
        
        (WebCore::RenderMultiColumnBlock::addChild):
        Now that we lay out the flow thread as a special excluded child, we don't
        care about the ordering of it relative to the region children.

        (WebCore::RenderMultiColumnBlock::layoutSpecialExcludedChild):
        We now lay out the flow thread as a special excluded child (like the legend
        of a fieldset).

        * rendering/RenderMultiColumnBlock.h:
        (RenderMultiColumnBlock):
        Add new overrides like layoutSpecialExcludedChild.
        
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::initialLogicalWidth):
        Set the flow thread to the initial column width even when no regions exist
        yet. This way we ensure the width is right even when we don't have any
        regions yet.

        (WebCore::RenderMultiColumnFlowThread::autoGenerateRegionsToBlockOffset):
        This method handles autogenerating the new region for a given offset.
        Right now it's simplistic, since we only have one column set. This method
        will be enhanced in future patches when we start supporting multiple column
        sets.

        * rendering/RenderMultiColumnFlowThread.h:
        (RenderMultiColumnFlowThread):
        Adding new method declarations like autoGenerateRegionsToBlockOffset.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        Since regions lay out after flow threads, we don't need to make 
        setFlowThreadPortionRect virtual any longer. We can just get our column set's
        width correct immediately. This is the same logic, just moved into updateLogicalWidth().

        * rendering/RenderMultiColumnSet.h:
        Remove setFlowThreadPortionRect override, since the function can just be simple
        and non-virtual in RenderRegion now.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::layoutBlock):
        Don't ever invalidate region sets in response to our size changing during layout. Since
        our size is always determined outside of layout now, we don't need to do any of
        these checks.

        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::setFlowThreadPortionRect):
        Changed to be non-virtual now that RenderMultiColumnSet doesn't need to override.

2013-03-04  Alexey Proskuryakov  <ap@apple.com>

        Make AsyncFileReader work without ScriptExecutionContext
        https://bugs.webkit.org/show_bug.cgi?id=111376

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj: Added MainThreadTask.h.

        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        Removed fileThread(). Creating a thread for every context that acesses files appears
        wasteful and unnecessary.

        * fileapi/AsyncFileStream.h:
        * fileapi/AsyncFileStream.cpp:
        (WebCore::createFileThread): FileThread is now a singleton.
        (WebCore::fileThread): Ditto.
        (WebCore::AsyncFileStream::AsyncFileStream):
        (WebCore::AsyncFileStream::create):
        (WebCore::didStart):
        (WebCore::AsyncFileStream::startOnFileThread):
        (WebCore::AsyncFileStream::stop):
        (WebCore::derefProxyOnMainThread):
        (WebCore::AsyncFileStream::stopOnFileThread):
        (WebCore::didGetSize):
        (WebCore::AsyncFileStream::getSizeOnFileThread):
        (WebCore::didOpen):
        (WebCore::AsyncFileStream::openForReadOnFileThread):
        (WebCore::AsyncFileStream::openForWriteOnFileThread):
        (WebCore::didRead):
        (WebCore::AsyncFileStream::readOnFileThread):
        (WebCore::didWrite):
        (WebCore::AsyncFileStream::writeOnFileThread):
        (WebCore::didTruncate):
        (WebCore::AsyncFileStream::truncateOnFileThread):
        Use callOnMainThread() instead of posting messages through a context. We never used
        other threads, and don't plan to.

        * loader/ResourceLoader.cpp:
        * loader/ResourceLoader.h:
        We no longer need this pseudo-client call to create an AsyncFileStream, now that
        we don't need to get a ScriptExecutionContext somewhere.

        * platform/MainThreadTask.h: Added. This implements callOnMainThread with multiple
        strongly typed arguments. Closely based on CrossThreadTask.h.

        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::BlobResourceHandle): Create AsyncFileStream directly.

        * platform/network/ResourceHandleClient.h: Removed createAsyncFileStream().

2013-03-05  Jessie Berlin  <jberlin@apple.com>

        Update the localizable strings file.

        Rubber-stamped by Anders Carlsson.

        * English.lproj/Localizable.strings:

2013-03-05  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-label does not override text content on iOS
        https://bugs.webkit.org/show_bug.cgi?id=111222

        Reviewed by David Kilzer.

        Make iOS use the same text alternative computation that Mac is using. The main difference
        is that description and title need to be concatenated, because iOS doesn't have two attributes
        to return those values.

        Test: platform/iphone-simulator/accessibility/aria-label-with-internal-text.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper stringValueShouldBeUsedInLabel]):
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        (-[WebAccessibilityObjectWrapper accessibilityHint]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:

2013-03-05  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r144698): Only enable SPEECH_SYNTHESIS for Mac
        <http://webkit.org/b/106742>

        Fixes the following build failures:

            Undefined symbols for architecture i386:
              "__ZTVN7WebCore25PlatformSpeechSynthesizerE", referenced from:
                  __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
              NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
              "__ZN7WebCore25PlatformSpeechSynthesizer19initializeVoiceListEv", referenced from:
                  __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
            ld: symbol(s) not found for architecture i386

        * Configurations/FeatureDefines.xcconfig:
        - Only set ENABLE_SPEECH_SYNTHESIS for the macosx platform.

2013-03-05  Dmitry Zvorygin  <zvorygin@chromium.org>

        Web Inspector: registered new MIME type application/font-woff for WOFF fonts.
        https://bugs.webkit.org/show_bug.cgi?id=111418

        The WOFF MIME Type was formally registered as application/font-woff (FINALLY):
        http://www.iana.org/assignments/media-types/application/font-woff

        Reviewed by Pavel Feldman.

        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager):
        (WebInspector.NetworkDispatcher.prototype._updateNetworkRequestWithResponse):

2013-03-05  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Add parsing for grid-{end|after}
        https://bugs.webkit.org/show_bug.cgi?id=111372

        Reviewed by Tony Chang.

        Test: fast/css-grid-layout/grid-item-end-after-get-set.html

        This change adds the proper support for grid-{end|after}. It doesn't update
        grid-{row|column} to be a shorthand for both grid-{before|start} and grid-{after|end}
        though.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Added the new properties to our known properties. Also added
        support for getComputedStyle.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        Added parsing for the new properties.

        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        The new properties are not inherited.

        * css/CSSPropertyNames.in:
        Added the new properties.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Added code to handle applying them to our style.

        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridItemData.cpp:
        (WebCore::StyleGridItemData::StyleGridItemData):
        * rendering/style/StyleGridItemData.h:
        (WebCore::StyleGridItemData::operator==):
        (StyleGridItemData):
        Updated our representation to store the new properties.

2013-03-05  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed follow-up to r144756, fix broken inspector-less build.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willWriteHTML):

2013-03-05  Mark Lam  <mark.lam@apple.com>

        Improve robustness of WebSQL quota management.
        https://bugs.webkit.org/show_bug.cgi?id=110600.

        Reviewed by Geoffrey Garen.

        1. Introduced the OriginLock for synchronizing write access to the
           database origin directory. This allows us to more accurately
           compute the disk usage.

           The OriginLock uses a mutex to provide mutual exclusion between
           threads and a file lock for mutual exclusion between processes.
           The file lock part is conditional on USE(FILE_LOCK).

           The mutex mutual exclusion also serves to ensure that only 1 thread
           can write to a sqlite database at one time.

        2. Change the SQLTransactionCoordinator to only allow one write
           transaction to an origin instead of one write transaction per
           database. This is needed in order to accurately compute the
           disk usage. It is also necessary so that the OriginLock does not
           deadlock itself (as would be the case if concurrent write transactions
           to different databases in the same origin are allowed).

        3. Fix DatabaseTracker::getMaxSizeForDatabase() to check for when
           disk usage may exceed the quota, and ensure that we will return
           an appropriate max database size.

           Disk usage can exceed the usage if it is already near the quota limit
           but have not exceeded it yet. If a new database is opened in that
           origin, it may bump the usage above the quota, but should not
           continually repeat this. Subsequent attempts to open a database
           will find that the quota is already exhausted and fail.

           There is still a race condition pertaining to the tracker database
           getting out of sync that may still enable runaway growth in the
           database sizes. That issue only manifest in a multi-process
           environment, and will be fixed in another changeset.

        4. Fixed a bug in SQLStatement to check if the errorCallback exists
           before invoking it.

        No new layout tests. A quota-test.html was attached to bugzilla for manual
        testing of multi-tab concurrent consumption of storage resource, and also
        to test handling situations when the user deletes the database files while
        the script is still using the database.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::originLockFor):
        (WebCore::DatabaseTracker::deleteOriginLockFor):
        (WebCore::DatabaseTracker::deleteOrigin):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginLock.cpp: Added.
        (WebCore::OriginLock::lockFileNameForPath):
        (WebCore::OriginLock::OriginLock):
        (WebCore::OriginLock::~OriginLock):
        (WebCore::OriginLock::lock):
        (WebCore::OriginLock::unlock):
        * Modules/webdatabase/OriginLock.h: Added.
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::performCallback):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::computeNextStateAndCleanupIfNeeded):
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        (WebCore::SQLTransactionBackend::postflightAndCommit):
        (WebCore::SQLTransactionBackend::cleanupAfterTransactionErrorCallback):
        (WebCore::SQLTransactionBackend::acquireOriginLock):
        (WebCore::SQLTransactionBackend::releaseOriginLockIfNeeded):
        * Modules/webdatabase/SQLTransactionBackend.h:
        (SQLTransactionBackend):
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::getDatabaseIdentifier):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * config.h:
        * platform/FileSystem.h:
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::lockFile):
        (WebCore::unlockFile):

2013-03-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: move PopoverContentHelper from TimelinePresentationModel.js to Popover.js.
        https://bugs.webkit.org/show_bug.cgi?id=111431

        Reviewed by Yury Semikhatsky.

        class WebInspector.TimelinePresentationModel.PopoverContentHelper was renamed to WebInspector.PopoverContentHelper.
        Style names were changed accordingly.

        * inspector/front-end/Popover.js:
        (WebInspector.PopoverContentHelper):
        (WebInspector.PopoverContentHelper.prototype.contentTable):
        (WebInspector.PopoverContentHelper.prototype._createCell):
        (WebInspector.PopoverContentHelper.prototype.appendTextRow):
        (WebInspector.PopoverContentHelper.prototype.appendElementRow):
        (WebInspector.PopoverContentHelper.prototype.appendStackTrace):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.generateMainThreadBarPopupContent):
        (WebInspector.TimelinePresentationModel.Record.prototype._generatePopupContentWithImagePreview):
        (WebInspector.TimelinePresentationModel.generatePopupContentForFrame):
        (WebInspector.TimelinePresentationModel.generatePopupContentForFrameStatistics):
        * inspector/front-end/popover.css:
        (.popover-details):
        (.popover-function-name):
        (.popover-stacktrace-title):
        (.popover-details-row-title):
        (.popover-details-row-data):
        (.popover-details-title):
        * inspector/front-end/timelinePanel.css:

2013-03-05  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: remove "Live native memory chart" experiment
        https://bugs.webkit.org/show_bug.cgi?id=111432

        Reviewed by Alexander Pavlov.

        Removed support for live native memory chart.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NativeMemorySnapshotView.js:
        * inspector/front-end/ProfileLauncherView.js:
        (WebInspector.ProfileLauncherView):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/nativeMemoryProfiler.css:

2013-03-05  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: remove length parameter from Parse HTML timeline event
        https://bugs.webkit.org/show_bug.cgi?id=111421

        Reviewed by Yury Semikhatsky.

        - remove length parameter in all instrumentation methods used to emit ParseHTML timeline event;
        - drive-by style fixes.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willWriteHTMLImpl):
        (WebCore::InspectorInstrumentation::didWriteHTMLImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willWriteHTML):
        (WebCore::InspectorInstrumentation::didWriteHTML):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createParseHTMLData):
        * inspector/TimelineRecordFactory.h:
        (TimelineRecordFactory):

2013-03-05  Alexei Filippov  <alph@chromium.org>

        Web Inspector: allow each profiler panel to have own landing page
        https://bugs.webkit.org/show_bug.cgi?id=111298

        Reviewed by Yury Semikhatsky.

        Refactor profiler landing page to allow different profiler panels to have own landing pages.
          - MultiProfileLauncherView is inherited from ProfileLauncherView
          - Native memory distribution profiler has got a custom page.

        No new tests: code refactoring.

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype.get profile):
        (WebInspector.HeapSnapshotView.prototype.get baseProfile):
        (WebInspector.HeapSnapshotView.prototype._profiles):
        * inspector/front-end/NativeMemorySnapshotView.js:
        * inspector/front-end/ProfileLauncherView.js:
        (WebInspector.ProfileLauncherView):
        (WebInspector.ProfileLauncherView.prototype.addProfileType):
        (WebInspector.ProfileLauncherView.prototype._controlButtonClicked):
        (WebInspector.ProfileLauncherView.prototype._updateControls):
        (WebInspector.ProfileLauncherView.prototype.profileStarted):
        (WebInspector.ProfileLauncherView.prototype.profileFinished):
        (WebInspector.MultiProfileLauncherView):
        (WebInspector.MultiProfileLauncherView.prototype.addProfileType):
        (WebInspector.MultiProfileLauncherView.prototype._profileTypeChanged):
        (WebInspector.NativeProfileLauncherView):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype._createLauncherView):
        (WebInspector.CPUProfilerPanel):
        (WebInspector.CSSSelectorProfilerPanel):
        (WebInspector.HeapProfilerPanel):
        (WebInspector.CanvasProfilerPanel):
        (WebInspector.MemoryChartProfilerPanel):
        (WebInspector.MemoryChartProfilerPanel.prototype._createLauncherView):
        (WebInspector.NativeMemoryProfilerPanel):
        * inspector/front-end/profilesPanel.css:
        (.panel-enabler-view.profile-launcher-view button:not(.status-bar-item)):

2013-03-05  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Clarify some StylesSidebarPanel and CSSMetadata JSDocs.
        https://bugs.webkit.org/show_bug.cgi?id=111427

        Reviewed by Alexander Pavlov.

        Goal: reflect in JSDoc that non-null array is passed to completionsReady callback.

        * inspector/front-end/CSSMetadata.js:
        Added JSDocs, avoided possible NPEs.
        * inspector/front-end/StylesSidebarPane.js:
        Fixed JSDocs, removed unused assignment.

2013-03-05  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r144727): Change type of columnRange and rowRange to pair<unsigned, unsigned>
        <http://webkit.org/b/110050>

        Fixes the following build failures:

            Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:741:30: error: non-const lvalue reference to type 'pair<unsigned int, unsigned int>' cannot bind to a value of unrelated type 'pair<int, int>'
                tableCell->rowIndexRange(rowRange);
                                         ^~~~~~~~
            In file included from Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:33:
            Source/WebCore/accessibility/AccessibilityTableCell.h:47:58: note: passing argument to parameter 'rowRange' here
                virtual void rowIndexRange(pair<unsigned, unsigned>& rowRange);
                                                                     ^
            Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:742:33: error: non-const lvalue reference to type 'pair<unsigned int, unsigned int>' cannot bind to a value of unrelated type 'pair<int, int>'
                tableCell->columnIndexRange(columnRange);
                                            ^~~~~~~~~~~
            In file included from Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:33:
            Source/WebCore/accessibility/AccessibilityTableCell.h:49:61: note: passing argument to parameter 'columnRange' here
                virtual void columnIndexRange(pair<unsigned, unsigned>& columnRange);
                                                                        ^
            Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:804:30: error: non-const lvalue reference to type 'pair<unsigned int, unsigned int>' cannot bind to a value of unrelated type 'pair<int, int>'
                tableCell->rowIndexRange(rowRange);
                                         ^~~~~~~~
            In file included from Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:33:
            Source/WebCore/accessibility/AccessibilityTableCell.h:47:58: note: passing argument to parameter 'rowRange' here
                virtual void rowIndexRange(pair<unsigned, unsigned>& rowRange);
                                                                     ^
            Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:818:33: error: non-const lvalue reference to type 'pair<unsigned int, unsigned int>' cannot bind to a value of unrelated type 'pair<int, int>'
                tableCell->columnIndexRange(columnRange);
                                            ^~~~~~~~~~~
            In file included from Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:33:
            Source/WebCore/accessibility/AccessibilityTableCell.h:49:61: note: passing argument to parameter 'columnRange' here
                virtual void columnIndexRange(pair<unsigned, unsigned>& columnRange);
                                                            ^
            4 errors generated.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityHeaderElements]):
        (-[WebAccessibilityObjectWrapper accessibilityRowRange]):
        (-[WebAccessibilityObjectWrapper accessibilityColumnRange]):

2013-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [refactoring] set frame identifiers in timeline records early, do not keep them in event stack
        https://bugs.webkit.org/show_bug.cgi?id=111345

        Reviewed by Pavel Feldman.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setFrameIdentifier):
        (WebCore):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        (WebCore::InspectorTimelineAgent::commitFrameRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        (TimelineRecordEntry):
        (InspectorTimelineAgent):

2013-03-05  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add the getStreamById method on RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=111311

        Reviewed by Adam Barth.

        Adding the missing method on RTCPeerConnection defined here:
        http://dev.w3.org/2011/webrtc/editor/webrtc.html#widl-RTCPeerConnection-getStreamById-MediaStream-DOMString-streamId

        Existing tests have been extended to cover patch.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getStreamById):
        (WebCore):
        * Modules/mediastream/RTCPeerConnection.h:
        (RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.idl:
        * platform/chromium/support/WebMediaStream.cpp:
        (WebKit::WebMediaStream::initialize):
        (WebKit):
        * platform/mediastream/MediaStreamSource.cpp:
        (WebCore::MediaStreamSource::setReadyState):

2013-03-05  Antoine Quint  <graouts@apple.com>

        Web Inspector: allow retrieval of composited layers in a given DOM subtree
        https://bugs.webkit.org/show_bug.cgi?id=111312

        Introduce the LayerTreeAgent.layersForNode(node) method allowing the front-end
        to gather all composited layers associated with nodes in the subtree of which
        the provided node is the root.

        In order to gather the layers in the subtree, we first traverse the node's
        renderer's RenderObject hierarchy and whenever we encounter a RenderObject
        that has a RenderLayer, we then traverse that renderLayer's RenderLayer
        hierarchy. This allows for a quick path through the relevant objects we're
        gathering.

        Layers gathered will push the node to which they're associated, allowing a
        nodeId for this layer to be listed in the Layer object sent to the front-end.
        It is crucial to be able to provide a nodeId as well as a layerId for a Layer
        object in order to be able to correctly assess mutations in the layer tree.
        For instance, it is expected that a node's layer be replaced by a new layer
        to represent a slightly different rendering of its content, but the front-end
        should be able to represent this layer as an object for which only certain
        attributes have changed (like the "paintCount" property).

        Layer objects also indicate whether they're associated to a node hosted in a
        shadow tree (the optional "isInShadowTree" property) in order for the front-end
        to be able to only show this layer if the option to show nodes hosted in shadow
        tree is enabled.

        Finally, since we're only gathering composited layers, we're removing the
        "isLayerComposited" property and removing the optional flag on the "paintCount",
        "memory" and "compositedBounds" properties.

        Reviewed by Simon Fraser.

        Test: inspector-protocol/layers/layers-for-node.html

        * inspector/Inspector.json:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        (WebCore::InspectorLayerTreeAgent::idForNode):
        * inspector/InspectorLayerTreeAgent.h:
        (InspectorLayerTreeAgent):

2013-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: use timestamps consistent with rest of Timeline in WebSocket events.
        https://bugs.webkit.org/show_bug.cgi?id=111344

        - create web socket related records in a manner consistent with the rest of timeline.

        Reviewed by Pavel Feldman.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateWebSocket):
        (WebCore::InspectorTimelineAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorTimelineAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorTimelineAgent::didDestroyWebSocket):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):

2013-03-05  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Crash when MathML used in CSS Regions
        https://bugs.webkit.org/show_bug.cgi?id=110686

        Reviewed by David Hyatt.

        The MathML blocks trigger a children layout when computing the preferred widths. This happens to determine the preferred
        logical heights of the children. When the layout reaches the line boxes computation the preferred width of the containing block
        is requested. Because it wasn't computed, the layout of the children is started again to determine the preferred logical heights.
        This causes an infinite recursion and triggers a stack overflow.

        The patch introduces a new RAII utility class that disables fragmentation when the constructor is called and restores it
        on the destructor. This class is used when computing the preferred height for the children of a MathML block.

        Test: fast/regions/mathml-crash.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setFlowThreadStateIncludingDescendants): Do not cross RenderFlowThread boundaries when updating the flow thread
        state flag. The innermost flow threads need to manage their descendants flag values.
        * rendering/RenderView.cpp:
        (WebCore::FragmentationDisabler::FragmentationDisabler):
        (WebCore):
        (WebCore::FragmentationDisabler::~FragmentationDisabler):
        * rendering/RenderView.h:
        (FragmentationDisabler):
        (WebCore):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::computeChildrenPreferredLogicalHeights):

2013-03-05  Mike West  <mkwst@chromium.org>

        Cleanup: Move HitTestLocation and HitTestResult into separate files.
        https://bugs.webkit.org/show_bug.cgi?id=111294

        Reviewed by Allan Sandfeld Jensen.

        HitTestLocation and HitTestResult currently both live in
        HitTestResult.h. That makes things more difficult to understand than
        they should be, and violates the one-class-one-file principle that
        WebKit generally follows. Happily, it's fairly trivial to fix.

        This should have no visible change; it's strictly an internal
        refactoring. It doesn't even touch any implementation code: we're
        just moving bits from one place to another.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Hey, look: a new file! Let's add it to six different build systems! :)
        * rendering/HitTestLocation.cpp: Added.
        (WebCore):
        (WebCore::HitTestLocation::HitTestLocation):
        (WebCore::HitTestLocation::~HitTestLocation):
        (WebCore::HitTestLocation::operator=):
        (WebCore::HitTestLocation::move):
        (WebCore::HitTestLocation::intersectsRect):
        (WebCore::HitTestLocation::intersects):
        (WebCore::HitTestLocation::rectForPoint):
        * rendering/HitTestLocation.h: Added.
        (WebCore):
        (HitTestLocation):
        (WebCore::HitTestLocation::point):
        (WebCore::HitTestLocation::roundedPoint):
        (WebCore::HitTestLocation::region):
        (WebCore::HitTestLocation::isRectBasedTest):
        (WebCore::HitTestLocation::isRectilinear):
        (WebCore::HitTestLocation::boundingBox):
        (WebCore::HitTestLocation::topPadding):
        (WebCore::HitTestLocation::rightPadding):
        (WebCore::HitTestLocation::bottomPadding):
        (WebCore::HitTestLocation::leftPadding):
        (WebCore::HitTestLocation::transformedPoint):
        (WebCore::HitTestLocation::transformedRect):
        * rendering/HitTestResult.cpp:
        * rendering/HitTestResult.h:
            Move all this code from HitTestResult.* to HitTestLocation.*.
        * rendering/RenderBlock.cpp:
            Include HitTestLocation.h.

2013-03-05  Jochen Eisinger  <jochen@chromium.org>

        Refactor UserGestureIndicator::Token to be a top-level class
        https://bugs.webkit.org/show_bug.cgi?id=111412

        Reviewed by Nico Weber.

        This will allow for forward declaring the class in a public WebKit
        API header. The goal is to enable the embedder to hold on to a
        UserGestureToken.

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        (WebCore::UserGestureIndicator::currentToken):
        * dom/UserGestureIndicator.h:
        (UserGestureToken):
        (WebCore::UserGestureToken::~UserGestureToken):
        (WebCore):
        (UserGestureIndicator):
        * page/DOMTimer.h:
        (DOMTimer):
        * page/EventHandler.h:

2013-03-05  Mike West  <mkwst@chromium.org>

        Remove redundant code in Document::updateHoverActiveState.
        https://bugs.webkit.org/show_bug.cgi?id=111303

        Reviewed by Darin Adler.

        Document::updateHoverActiveState currently looks for touchrelease events
        and explictly clears out the hover state for all nodes between the
        currently hovered node and the top of the hover chain. This is actually
        redundant with the logic in the rest of the function; we can simplify by
        setting the Element* we're working with to 0, which causes the later
        loops to do the necessary work.

        There should be no web-visible effect from this change; it should simply
        make this function less complex.

        Extracted from Allan Sandfeld Jensen's original patch to wkbug.com/98168

        * dom/Document.cpp:
        (WebCore::Document::updateHoverActiveState):
            Set innerElementInDocument to 0 rather than walking the hover chain
            and clearing it when we see a touchrelease event. The rest of the
            code in this function will have the same effect.

2013-03-05  Koji Hara  <kojih@chromium.org>

        [V8] Remove unused custom indexedPropertyGetter
        https://bugs.webkit.org/show_bug.cgi?id=111409

        Reviewed by Kentaro Hara.

        Remove unused custom indexedPropertyGetter.
        There are 9 custom indexedPropertyGetter, including an unused one(NamedNodeMap).
        This commit assures all existing custom indexedPropertyGetter(for V8) are used.

        No new tests. Simple refactoring.

        * bindings/v8/custom/V8NamedNodeMapCustom.cpp: Remove indexedPropertyGetter

2013-03-05  Hajime Morrita  <morrita@google.com>

        ShadowRoot needs guardRef() and guardDeref()
        https://bugs.webkit.org/show_bug.cgi?id=109777

        Reviewed by Dimitri Glazkov.

        This change moves m_guardRefCount from Document to TreeScope,
        which allows ShadowRoot to be guarded by guardRef() mechanism as
        Document. After r137524, Node referes TreeScope instead of
        Document. This is natural consequence of the change: It no longer
        makes sense to guardRef() Document pointer from Node.

        Detail:

        - Document::m_guardRefCount and related funcdtions are moved to TreeScope
        - Document::removedLastRef is factored out into TreeScope::removedLastRefToScope(),
          TreeScope::dispose() and Docuent::dispose(). ShadowRoot also got its own dispose() implementation.
        - Moved guardRef() and guardDeref() calls to TreeScope and Node.
          Note that there are two "guarded" TreeScope references. One is
          Node::m_treeScope and another is TreeScope::m_parentTreeScope.
          The guarded-ref management is now encapsulated in these two classes.

        No new tests. Covered by existing tests.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::dispose): Extracted from removedLastRef()
        * dom/Document.h:
        (WebCore::Node::isTreeScope):
        (WebCore::Node::Node):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::DocumentFragment): Remove ASSERT() and move it to ...
        (WebCore::DocumentFragment::create): ... here, to allow NULL document from ShadowRoot.
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::removedLastRef):
        * dom/Node.h:
        (WebCore::Node::setTreeScope):
        * dom/Element.cpp:
        (WebCore::Element::ensureAttr): This has been wrong and is fixed in this revision since the incorrectness is unveiled by this change.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot): Passed NULL document to superclass. This aligns what Document is doing.
        (WebCore::ShadowRoot::dispose): Added.
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/TreeScope.cpp:
        (SameSizeAsTreeScope):
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::~TreeScope):
        (WebCore::TreeScope::dispose): Added.
        (WebCore::TreeScope::setParentTreeScope):
        (WebCore::TreeScope::deletionHasBegun):
        (WebCore::TreeScope::beginDeletion):
        (WebCore::TreeScope::refCount): Added.
        * dom/TreeScope.h: Turned m_rootNode to Node* from ContainerNode* for Node::isTreeScope to be inlined.
        (WebCore::TreeScope::guardRef): Pulled up from Document.
        (WebCore::TreeScope::guardDeref): Ditto.
        (WebCore::TreeScope::hasGuardRefCount): Added to hide m_guardRefCount.
        (WebCore::TreeScope::deletionHasBegun): Added.
        (WebCore::TreeScope::beginDeletion): Added.
        (WebCore::TreeScope::removedLastRefToScope): Pulled up from Document.
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):

2013-03-04  Uday Kiran  <udaykiran@motorola.com>

        getPropertyValue for -webkit-text-stroke returns null, should compute the shorthand value
        https://bugs.webkit.org/show_bug.cgi?id=111018

        Reviewed by Alexander Pavlov.

        Test: fast/css/getPropertyValue-webkit-text-stroke.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):

2013-03-04  Uday Kiran  <udaykiran@motorola.com>

        getPropertyValue for -webkit-columns returns null, should compute the shorthand value
        https://bugs.webkit.org/show_bug.cgi?id=111011

        Reviewed by Alexander Pavlov.

        Test: fast/css/getPropertyValue-columns.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):

2013-03-04  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Do not accumulate file system files, add them to workspace immediately
        https://bugs.webkit.org/show_bug.cgi?id=111325

        Reviewed by Pavel Feldman.

        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate.prototype.populate.fileLoaded):
        (WebInspector.FileSystemProjectDelegate.prototype.populate):
        * inspector/front-end/IsolatedFileSystem.js:
        (WebInspector.IsolatedFileSystem.prototype.innerCallback):
        (WebInspector.IsolatedFileSystem.prototype.requestFilesRecursive):

2013-03-04  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed Windows build fix attempt.

        floor method is ambigious so explicitly specify the type.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData):

2013-03-04  Chris Fleizach  <cfleizach@apple.com>

        AX: cellForColumnAndRow fails for tables with hidden table cells
        https://bugs.webkit.org/show_bug.cgi?id=110050

        Reviewed by Tim Horton.

        If a table had hidden cells, then accessibility code was being confused in a few ways.
        1) The cellForColumnAndRow method would return the wrong information since that was
           using the RenderTableSection to retrieve a cell, which did not have the same data as the AXTable
        2) The way we were adding children made it impossible to determine column and row range because we 
           would skip rows that had hidden children
        3) AccessibilityARIAGrid and AccessibilityTable were using different methods for cellForColumnAndRow

        The fix does a few things to make things right:
        1) Always add an accessibility row, even if there are no visible cells in that row.
        2) Have one method for AXTable and AXARIAGrid for cellForColumnAndRow.
        3) Change cellForColumnAndRow to query the accessibility children rather than the RenderTableSection in determining the row, col info.
        4) cellForColumnAndRow should use unsigned values instead of int values.

        Test: accessibility/table-with-hidden-head-section.html

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore):
        * accessibility/AccessibilityARIAGrid.h:
        (AccessibilityARIAGrid):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityARIAGridCell.h:
        (AccessibilityARIAGridCell):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTable.h:
        (WebCore):
        (AccessibilityTable):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        * accessibility/AccessibilityTableCell.h:
        (AccessibilityTableCell):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetColumnAtIndex):
        (webkitAccessibleTableGetRowAtIndex):
        (webkitAccessibleTableGetColumnExtentAt):
        (webkitAccessibleTableGetRowExtentAt):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * rendering/RenderTableSection.h:
        (RenderTableSection):
        (WebCore::RenderTableSection::rowRendererAt):

2013-03-04  Arpita Bahuguna  <a.bah@samsung.com>

        getAttribute does not behave correctly for mixed-case attributes on HTML elements
        https://bugs.webkit.org/show_bug.cgi?id=105713

        Reviewed by Andreas Kling.

        getAttribute() and getAttributeNode() APIs do not convert the
        passed attribute name to lowercase before comparing against the
        existing attributes.
        The specification however states that the passed name should
        be converted to ASCII lowercase before checking for the existence
        of the given attribute. [www.w3.org/TR/domcore/#dom-element-getattribute]

        Test: fast/dom/Element/getAttribute-case-insensitivity.html

        * dom/Element.h:
        (WebCore::ElementData::getAttributeItemIndex):
        getAttributeItemIndex() accepts a bool param 'shouldIgnoreAttributeCase'
        which specifies whether the attribute's case should be ignored
        before comparison. But inspite of this param's value we still carry
        out a case sensitive search.
        Have modified the same to convert the passed attribute's name to
        lowercase if 'shouldIgnoreAttributeCase' is true.

2013-03-04  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        [Chromium] Add runtime flag for font load events
        https://bugs.webkit.org/show_bug.cgi?id=111296

        Reviewed by Kent Tamura.

        Add a runtime feature flag for FontLoader interface (disabled by default),
        and enable ENABLE_FONT_LOAD_EVENTS build flag for chromium.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::setFontLoadEventsEnabled):
        (WebCore::RuntimeEnabledFeatures::fontLoadEventsEnabled):

2013-03-04  Brandon Jones  <bajones@google.com>

        WEBGL_compressed_texture_atc implementation
        https://bugs.webkit.org/show_bug.cgi?id=110496

        Reviewed by Kenneth Russell.

        Test: webgl/conformance/extensions/webgl-compressed-texture-atc.html

        Exposes the WEBGL_compressed_texture_atc extension, but is unverified since no desktop hardware supports
        the format that I am aware of. Should enable mobile ports to expose the format, however.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLCompressedTextureATC.cpp: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (WebCore::WebGLCompressedTextureATC::WebGLCompressedTextureATC):
        (WebCore::WebGLCompressedTextureATC::~WebGLCompressedTextureATC):
        (WebCore::WebGLCompressedTextureATC::getName):
        (WebCore::WebGLCompressedTextureATC::create):
        (WebCore::WebGLCompressedTextureATC::supported):
        * html/canvas/WebGLCompressedTextureATC.h: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (WebGLCompressedTextureATC):
        * html/canvas/WebGLCompressedTextureATC.idl: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore):
        (WebGLRenderingContext):
        * platform/graphics/Extensions3D.h:


2013-03-04  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Exceptions when WebInspector run in hosted mode.
        https://bugs.webkit.org/show_bug.cgi?id=111326

        Reviewed by Pavel Feldman.

        There is bug in commands code generation in InspectorBackend.js
        As a consequence all protocol enums have wrong names and cause
        exception when refererenced.

        Currently protocol enums are referenced only from NetworkManager.

        Test: inspector/inspector-backend-commands-generation.html

        * inspector/front-end/InspectorBackend.js:
        (InspectorBackendClass.prototype.loadFromJSONIfNeeded):
        Use static method to generate code.
        (InspectorBackendClass._generateCommands):
        Extracted from loadFromJSONIfNeeded. Typo fixed.

2013-03-04  Chris Rogers  <crogers@google.com>

        Add audio hardware support for multi-channel output by implementing AudioDestinationNode.maxChannelCount
        https://bugs.webkit.org/show_bug.cgi?id=111385

        Reviewed by James Robinson.
        
        See specification details for .maxChannelCount:
        https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioDestinationNode
        
        * Modules/webaudio/AudioDestinationNode.h:
        (WebCore::AudioDestinationNode::maxChannelCount):
        * Modules/webaudio/AudioDestinationNode.idl:
        * Modules/webaudio/AudioNode.h:
        Implement .maxChannelCount attribute.
        
        (AudioNode):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::initialize):
        (WebCore::DefaultAudioDestinationNode::createDestination):
        (WebCore::DefaultAudioDestinationNode::enableInput):
        Call to createDestination() now takes no argument.
        Instead we maintain a member variable for the input device ID.
        (WebCore::DefaultAudioDestinationNode::maxChannelCount):
        (WebCore::DefaultAudioDestinationNode::setChannelCount):
        Check port-specific hardware support for maxChannelCount(),
        and allow setting the channel count based on what the hardware
        supports.
        
        * platform/audio/AudioDestination.h:
        (AudioDestination):
        * platform/audio/chromium/AudioDestinationChromium.cpp:
        (WebCore::AudioDestination::maxChannelCount):
        (WebCore::AudioDestinationChromium::render):
        Call into chromium WebKit API: audioHardwareOutputChannels().

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestination::maxChannelCount):
        Add basic implementation for maxChannelCount() only supporting stereo output.

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestination::maxChannelCount):
        Add basic implementation for maxChannelCount() only supporting stereo output.
        Later, the mac port can support more than this with some small improvements to AudioDestinationMac.

2013-03-04  Adam Barth  <abarth@webkit.org>

        Background HTML parser can rewind the tokenizer after end-of-file
        https://bugs.webkit.org/show_bug.cgi?id=111365

        Reviewed by Eric Seidel.

        Prior to this patch, it was possible to call didFailSpeculation after
        processing the end-of-file token because checkForSpeculationFailure
        didn't zero out m_tokenizer in some control paths.

        This patch renames checkForSpeculationFailure to validateSpeculations
        and ensures that it always takes ownership of the main thread's
        HTMLTokenizer.

        This patch also adds a number of ASSERTs to make sure the parser state
        machine stays in the correct configuration (e.g., that we don't have a
        main thread tokenizer while we're supposed to be tokenizing on the
        background thread).

        Test: fast/parser/document-write-fighting-eof.html

        * html/parser/BackgroundHTMLInputStream.cpp:
        (WebCore::BackgroundHTMLInputStream::rewindTo):
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::append):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::validateSpeculations):
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):

2013-03-04  Tim 'mithro' Ansell  <mithro@mithis.com>

        Make sure that clearOwnerNode also clears StyleResolver references (via didMutate).
        https://bugs.webkit.org/show_bug.cgi?id=109446

        Reviewed by Eric Seidel.

        Test: fast/css/stylesheet.innerHTML-calls-didmutate.html

        * css/CSSStyleSheet.h:

2013-03-04  Kentaro Hara  <haraken@chromium.org>

        Unreviewd build fix after r144701.

        * platform/EventTracer.cpp:
        (WebCore::EventTracer::initialize):

2013-03-04  Min Qin  <qinmin@chromium.org>

        Fix some style issues in RenderLayerCompositor
        https://bugs.webkit.org/show_bug.cgi?id=111369

        Reviewed by Simon Fraser.

        Just style fix, no test needed

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

2013-03-04  Terry Anderson  <tdanderson@chromium.org>

        Revert changes to RenderLayer::scrollByRecursively() that were added for gesture-scrolling
        https://bugs.webkit.org/show_bug.cgi?id=111007

        Reviewed by Simon Fraser.

        Due to http://trac.webkit.org/changeset/144519 landing, the changes made to RenderLayer in
        http://trac.webkit.org/changeset/142057,
        http://trac.webkit.org/changeset/140177, and  
        http://trac.webkit.org/changeset/142195
        are no longer necessary (as RenderLayer::scrollByRecursively() is not used for
        gesture-scrolling) and should be reverted.

        No change in behavior, so no new tests needed.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):
        * rendering/RenderLayer.h:

2013-03-04  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix after r144701.

        * platform/EventTracer.cpp:
        (WebCore::EventTracer::initialize):

2013-03-04  Christian Biesinger  <cbiesinger@chromium.org>

        REGRESSION (r143643): Buttons containing floats render differently
        https://bugs.webkit.org/show_bug.cgi?id=110933

        Reviewed by Ojan Vafai.

        Test: fast/forms/button-with-float.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::expandsToEncloseOverhangingFloats):
        Also include new flexbox as a renderer that needs to enclose
        overhanging floats. Flex boxes establish a block formatting context,
        so they need to contain floats:
        http://dev.w3.org/csswg/css3-flexbox/#flex-items

2013-03-04  Chris Fleizach  <cfleizach@apple.com>

        Support WebSpeech - Speech Synthesis
        https://bugs.webkit.org/show_bug.cgi?id=106742

        Build fix.

        * Modules/speech/SpeechSynthesis.cpp:

2013-03-04  Rafael Weinstein  <rafaelw@chromium.org>

        Unreviewed, rolling out r144595.
        http://trac.webkit.org/changeset/144595
        https://bugs.webkit.org/show_bug.cgi?id=90341

        Causing multiple crashes in fast/dom/Element/* tests (hits
        assert in Attr.cp:215)

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNode):

2013-02-26  Kentaro Hara  <haraken@chromium.org>

        [chromium] Implement TRACE_EVENT macros for sampling profiling
        https://bugs.webkit.org/show_bug.cgi?id=110932

        Reviewed by Adam Barth.

        We are implementing TRACE_EVENT macros for sampling profiling.
        It works in the following mechanism:

        - Chromium defines global state variables for sampling profiling.
        (i.e. g_trace_state0, g_trace_state1, g_trace_state2 in trace_event.h)

        - WebKit gets the addresses of the global state variables at the
        initialization step. (i.e. EventTracer::initialize())

        - WebKit updates the global states by using TRACE_EVENT_SAMPLING_STATE()
        macros every time WebKit changes its state. (e.g. DOM attribute
        getters/setters/methods)

        - A sampling thread running in Chrome reads the global states
        periodically and visualizes the profiling results into about://tracing.

        This patch implements (1) a WebKit API to get the addresses of
        the global states and (2) the TRACE_EVENT_SAMPLING_STATE() macro.

        No tests. The sampling profiler is not enabled in Chrome by default.
        I manually inserted TRACE_EVENT_SAMPLING_STATE() macros and
        confirmed that the sampling profiling is working as expected.

        * platform/EventTracer.cpp:
        (WebCore::EventTracer::initialize):
        (WebCore::EventTracer::getTraceCategoryEnabledFlag):
        (WebCore):
        * platform/EventTracer.h:
        (WebCore):
        (EventTracer):
        * platform/chromium/EventTracerChromium.cpp:
        (WebCore):
        (WebCore::EventTracer::initialize):
        * platform/chromium/TraceEvent.h:

2013-03-04  Chris Fleizach  <cfleizach@apple.com>

        Support WebSpeech - Speech Synthesis
        https://bugs.webkit.org/show_bug.cgi?id=106742

        Reviewed by Simon Fraser.

        Enable speech synthesis for the Mac.

        * Configurations/FeatureDefines.xcconfig:

2013-03-04  Ruslan Abdikeev  <aruslan@chromium.org>

        <link rel="apple-touch-icon"> tag is not honored on CNN.com, workflowy.com etc
        https://bugs.webkit.org/show_bug.cgi?id=109061

        Reviewed by Adam Barth.

        Test: fast/dom/icon-url-list-apple-touch.html

        Added iconTypes parameter to Document::iconURLs().
        Added Document::shortcutIconURLs() with original semantics of iconURLs().
        Fixed IconController.cpp to provide iconTypesMask to iconURLs().
        Renamed iconTypes to iconTypesMask to make the meaning clearer.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::shortcutIconURLs):
        (WebCore):
        (WebCore::Document::iconURLs):
        * dom/Document.h:
        (Document):
        * loader/icon/IconController.cpp:
        (WebCore::IconController::iconURL):
        (WebCore::IconController::urlsForTypes):
        * testing/Internals.cpp:
        (WebCore::Internals::iconURLs):
        (WebCore::Internals::shortcutIconURLs):
        (WebCore):
        (WebCore::Internals::allIconURLs):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-02-27  Jeffrey Pfau  <jpfau@apple.com>

        Cache partitioning does not affect iframe MainResources
        https://bugs.webkit.org/show_bug.cgi?id=111022

        Reviewed by David Kilzer.

        Set the partition of a main resource request if in a subframe.

        Test: http/tests/cache/partitioned-cache-iframe.html

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

2013-03-04  Chris Fleizach  <cfleizach@apple.com>

        AX: user agent shadow roots for plugins should be 'accessible'
        https://bugs.webkit.org/show_bug.cgi?id=111339

        Reviewed by Tim Horton.

        If a plugin element uses a user agent shadow element, we should make that shadow element
        into a button with the title and subtitle put together, and use that as the label. This 
        will probably be the best accessibility experience.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):

2013-03-04  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Form controls on composited layers are not painted properly
        https://bugs.webkit.org/show_bug.cgi?id=111366

        Reviewed by James Robinson.

        Set PlatformContextSkia::m_drawingToImageBuffer which is used as a hint to properly blend GDI-painted bitmap.

        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp:
        (WebCore::OpaqueRectTrackingContentLayerDelegate::paintContents):

2013-03-04  Simon Fraser  <simon.fraser@apple.com>

        Give ViewportConstraints classes copy constructors
        https://bugs.webkit.org/show_bug.cgi?id=111367

        Reviewed by Beth Dakin.
        
        Downstream code requires that ViewportConstraints objects have
        copy constructors, so add them.
        
        Also clean up some redundant initialization of stack objects
        in RenderLayerCompositor.

        No behavior change.

        * page/scrolling/ScrollingConstraints.h:
        (WebCore::ViewportConstraints::ViewportConstraints):
        (ViewportConstraints):
        (WebCore::FixedPositionViewportConstraints::FixedPositionViewportConstraints):
        (FixedPositionViewportConstraints):
        (WebCore::StickyPositionViewportConstraints::StickyPositionViewportConstraints):
        (StickyPositionViewportConstraints):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):

2013-03-04  Roger Fong  <roger_fong@apple.com>

        Unreviewed. AppleWin build fix.

        * html/parser/XSSAuditor.cpp:
        (WebCore::isSemicolonSeparatedAttribute):

2013-03-04  Andreas Kling  <akling@apple.com>

        CSSParser: Avoid temporary String when parsing hex colors.
        <http://webkit.org/b/111341>

        Reviewed by Anders Carlsson.

        Templatize CSSParser::fastParseColor() so we can pass a CSSParserString as the color name.
        This avoids creating a temporary WTF::String from the parser string.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::fastParseColor):
        * css/CSSParser.h:
        * css/CSSParserValues.h:
        (CSSParserString):

2013-03-04  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Add parsing for grid-{start|before}
        https://bugs.webkit.org/show_bug.cgi?id=110988

        Reviewed by Tony Chang.

        Test: fast/css-grid-layout/grid-item-start-before-get-set.html

        Refactored how we store internally grid-{row|column} to be based on grid-{before|start}.
        This is required as grid-{row|column} are shorthands for resp. grid-{before|after} and grid-{start|end}
        in the specification and will also be in the code. That means a lot of methods were renamed to be more
        aligned with the new design.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Added the code to parse, apply and get back the new properties. Also
        some renaming after the internal naming change below.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::maximumIndexInDirection):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::autoPlacementMajorAxisPositionForChild):
        (WebCore::RenderGrid::autoPlacementMinorAxisPositionForChild):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridItemData.cpp:
        (WebCore::StyleGridItemData::StyleGridItemData):
        * rendering/style/StyleGridItemData.h:
        (WebCore::StyleGridItemData::operator==):
        Updated the naming now that we manipulate grid-{before|start} instead of grid-{row|column}.

2013-03-04  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: change voiceURI to voice
        https://bugs.webkit.org/show_bug.cgi?id=110773

        Reviewed by Tim Horton.

        Change the voiceURI property to a voice property that takes a SpeechSynthesisVoice.
        This was recently added to the errata of the WebSpeech spec.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-utterance-uses-voice.html

        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore):
        (WebCore::SpeechSynthesisUtterance::voice):
        (WebCore::SpeechSynthesisUtterance::setVoice):
        * Modules/speech/SpeechSynthesisUtterance.h:
        (SpeechSynthesisUtterance):
        * Modules/speech/SpeechSynthesisUtterance.idl:
        * Modules/speech/SpeechSynthesisVoice.h:
        (WebCore::SpeechSynthesisVoice::platformVoice):
        (SpeechSynthesisVoice):
        * platform/PlatformSpeechSynthesisUtterance.cpp:
        (WebCore::PlatformSpeechSynthesisUtterance::PlatformSpeechSynthesisUtterance):
        * platform/PlatformSpeechSynthesisUtterance.h:
        (WebCore::PlatformSpeechSynthesisUtterance::voice):
        (WebCore::PlatformSpeechSynthesisUtterance::setVoice):
        (PlatformSpeechSynthesisUtterance):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):

2013-03-04  Victor Costan <costan@gmail.com>

        Filename passed to FormData.append() takes precedence over filename in
        File.
        https://bugs.webkit.org/show_bug.cgi?id=111255

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/local/formdata/send-form-data-with-filename.html

        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems): changed to implement the
        behavior in the XMLHttpRequest W3C spec.

2013-03-04  Alexis Hetu  <sugoi@chromium.org>

        Canvas and DOM go out of sync
        https://bugs.webkit.org/show_bug.cgi?id=107701

        Reviewed by Simon Fraser.

        Test: fast/canvas/canvas-overflow-hidden-animation.html

        Added an update of the current compositor from the layer's stacking
        container when the layer itself isn't a stacking container.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        Added an update of the stacking container of the owning layer of the
        layer backing when the owning layer isn't a stacking container itself.

2013-03-04  Alexey Proskuryakov  <ap@apple.com>

        Small BlobResourceHandle cleanup
        https://bugs.webkit.org/show_bug.cgi?id=111352

        Reviewed by Sam Weinig.

        1. Don't use PassRefPtr<BlobStorageData> when ownership is not being passed.
        2. Added OVERRIDE to some functions.
        3. Added const to ResourceHandle::firstRequest().

        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::loadResourceSynchronously):
        (WebCore::BlobRegistryImpl::createResourceHandle):
        (WebCore::BlobRegistryImpl::getBlobDataFromURL):
        * platform/network/BlobRegistryImpl.h:
        (BlobRegistryImpl):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::createAsync):
        (WebCore::BlobResourceHandle::loadResourceSynchronously):
        * platform/network/BlobResourceHandle.h:
        (BlobResourceHandle):
        * platform/network/FormData.cpp:
        (WebCore::appendBlobResolved):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::firstRequest):
        * platform/network/ResourceHandle.h:
        (ResourceHandle):

2013-03-04  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce WebInspector.EventTarget interface for interfaces that dispatch events.
        https://bugs.webkit.org/show_bug.cgi?id=111320

        Reviewed by Pavel Feldman.

        * inspector/front-end/Object.js:
        (WebInspector.EventTarget):
        (WebInspector.EventTarget.prototype.addEventListener):
        (WebInspector.EventTarget.prototype.removeEventListener):
        (WebInspector.EventTarget.prototype.removeAllListeners):
        (WebInspector.EventTarget.prototype.hasEventListeners):
        (WebInspector.EventTarget.prototype.dispatchEventToListeners):
        * inspector/front-end/ResourceScriptMapping.js:
        * inspector/front-end/UISourceCode.js:
        * inspector/front-end/Workspace.js:
        (WebInspector.ProjectDelegate.prototype.searchInFileContent):

2013-03-04  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor bypass with --> comment syntax.
        https://bugs.webkit.org/show_bug.cgi?id=111349

        Reviewed by Adam Barth.

        Test: http/tests/security/xssAuditor/open-iframe-src-03.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::isTerminatingCharacter):
        Adds ">" to the list of terminating characters, so that comments of
        the form --> end the snippet we seek to match.

2013-03-04  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Modal dialogs sometimes lose focus.
        https://bugs.webkit.org/show_bug.cgi?id=111317

        Reviewed by Pavel Feldman.

        setCurrentFocusElement doesn't give focus to an element anymore
        if modal glass pane is shown and element is not inside it.

        * inspector/front-end/Dialog.js:
        (WebInspector.Dialog):
        (WebInspector.Dialog.prototype._hide):
        * inspector/front-end/InspectorView.js:
        (WebInspector.InspectorView.prototype.defaultFocusedElement):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.defaultFocusedElement):
        * inspector/front-end/UIUtils.js:
        (WebInspector.GlassPane):
        (WebInspector.GlassPane.prototype.dispose):
        (WebInspector.setCurrentFocusElement):
        * inspector/front-end/dialog.css:

2013-03-04  Roger Fong  <roger_fong@apple.com>

        Unreviewed. AppleWin build fix.

        * WebCore.vcxproj/WebCore.vcxproj:

2013-03-04  Dan Carney  <dcarney@google.com>

        [v8] add isolate parameter to heap statistics calls
        https://bugs.webkit.org/show_bug.cgi?id=111308

        Reviewed by Jochen Eisinger.

        No new tests.

        * bindings/v8/ScriptGCEvent.cpp:
        (WebCore::ScriptGCEvent::getHeapSize):
        (WebCore::ScriptGCEvent::getUsedHeapSize):
        * bindings/v8/V8AdaptorFunction.cpp:
        (WebCore::V8AdaptorFunction::getTemplate):
        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::checkMemoryUsage):

2013-03-04  Jochen Eisinger  <jochen@chromium.org>

        [chromium] remove deprecated hyphenation methods from Platform
        https://bugs.webkit.org/show_bug.cgi?id=111101

        Reviewed by Adam Barth.

        * platform/text/chromium/Hyphenation.cpp:
        (WebCore::canHyphenate):
        (WebCore::lastHyphenLocation):

2013-03-04  Benjamin Poulain  <benjamin@webkit.org>

        Use initialization from literal for MediaFeatureNames
        https://bugs.webkit.org/show_bug.cgi?id=111283

        Reviewed by Andreas Kling.

        * css/MediaFeatureNames.cpp:
        (WebCore::MediaFeatureNames::init):
        Initialization from literal is faster and use less memory. The names are
        defined statically in MediaFeatureNames.h.

        Also use the NotNull placement new to avoid a branch on silly allocators.

2013-03-04  Joshua Bell  <jsbell@chromium.org>

        [V8] Unreviewed. Rebaselined run-bindings-tests following r144617

        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::TestActiveDOMObjectV8Internal::TestActiveDOMObjectDomainSafeFunctionSetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::ConfigureV8TestCustomNamedGetterTemplate):
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::ConfigureV8TestEventConstructorTemplate):
        (WebCore::V8TestEventConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::ConfigureV8TestExceptionTemplate):
        (WebCore::V8TestException::GetTemplate):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        (WebCore::ConfigureV8TestNamedConstructorTemplate):
        (WebCore::V8TestNamedConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructorConstructor):
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::ConfigureV8TestNodeTemplate):
        (WebCore::V8TestNode::GetTemplate):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::ConfigureV8TestOverloadedConstructorsTemplate):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        * bindings/scripts/test/V8/V8TestTypedefs.h:
        (V8TestTypedefs):

2013-03-04  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r144562.
        http://trac.webkit.org/changeset/144562
        https://bugs.webkit.org/show_bug.cgi?id=85642

        Caused KeyPadInsert faluires in webkit_unittests

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2013-03-04  Uday Kiran  <udaykiran@motorola.com>

        getComputedStyle not implemented for -webkit-columns shorthand
        https://bugs.webkit.org/show_bug.cgi?id=111236

        Reviewed by Alexis Menard.

        Implement getComputedStyle for -webkit-columns shorthand.

        Test: fast/css/getComputedStyle/getComputedStyle-webkit-columns-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2013-03-04  Levi Weintraub  <leviw@chromium.org>

        Add support for 8 bit TextRuns on Chromium Linux & Mac
        https://bugs.webkit.org/show_bug.cgi?id=99393

        Reviewed by Eric Seidel.

        Adding support for 8 bit TextRuns for Mac and Linux Chromium. To accomplish this,
        8 bit text runs are upconverted to 16 bit in the complex text path during string
        normalization, as HarfBuzz operates on UChars.

        Windows has platfom assumptions that TextRuns are 16 bit that need to be addressed
        before enabling this optimization.

        No new tests. No change in behavior.

        (WebCore::HarfBuzzShaperBase::setNormalizedBuffer):
        * platform/graphics/harfbuzz/HarfBuzzShaperBase.h:
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::normalizeCharacters):
        (WebCore::HarfBuzzShaper::HarfBuzzShaper):

2013-03-04  Alexis Menard  <alexis@webkit.org>

        transition-property property and transition shorthand property doesn't accept "all, all".
        https://bugs.webkit.org/show_bug.cgi?id=111201

        Reviewed by Simon Fraser.

        Relax the parsing of transition-property to allow all, all as a value.
        It is not very useful per say but it is possible by the spec and we
        align with Firefox, IE and Opera.

        Test: LayoutTests/transitions/transitions-parsing.html

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

2013-03-04  Min Qin  <qinmin@chromium.org>

        Don't apply page scale to clipRect if applyPageScaleFactorInCompositor is set to true
        https://bugs.webkit.org/show_bug.cgi?id=111229

        Reviewed by Simon Fraser.

        If applyPageScaleFactorInCompositor is set to true, webcore should use css coordinates.
        As a result, we shouldn't apply page scale to clipRect in RenderLayerCompositor.
        Layout tests set the flag to false, so we don't have anything to test against.

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

2013-03-04  Ian Vollick  <vollick@chromium.org>

        ASSERTION FAILED: m_clipRectsCache->m_respectingOverflowClip[clipRectsType] == (clipRectsContext.respectOverflowClip == RespectOverflowClip) in RenderLayer.
        https://bugs.webkit.org/show_bug.cgi?id=108257

        Reviewed by David Hyatt.

        With composited scrolling we paint both with and without respecting
        overflow clip. To prevent collisions in the clip cache, and to prevent
        throwing away cached clips unnecessarily, we keep two copies of the
        clip cache -- one for when overflow clip is respected, and one for
        when it isn't.

        No new tests. Covered by existing tests (in debug):
          compositing/overflow/automatically-opt-into-composited-scrolling.html
          compositing/overflow/composited-scrolling-creates-a-stacking-container.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateClipRects):
          No longer asserts that our 'respect overflow clip' status is
          consistent. It also gets and sets the clip cache using the clip rect
          context rather than just the clip rect type.
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::clearClipRects):
        (WebCore::ClipRectsCache::ClipRectsCache):
        (WebCore::ClipRectsCache::getClipRects):
        (WebCore::ClipRectsCache::setClipRects):
        (WebCore::ClipRectsCache::getIndex):
          Get and set the cached clip rects using the context rather than
          type.
        (WebCore::RenderLayer::clipRects):
          We now cache twice as many clip rects.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
          ShouldRespectOverflowClip was moved out of RenderLayer.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::clearClipRects):
        * rendering/RenderLayer.h:
        (WebCore::ClipRectsCache::ClipRectsCache):
        (WebCore::ClipRectsCache::getClipRects):
        (WebCore::ClipRectsCache::setClipRects):
        (ClipRectsCache):
        (WebCore::ClipRectsCache::getIndex):
        (WebCore::RenderLayer::clipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2013-03-04  Aaron Colwell  <acolwell@chromium.org>

        Remove unused return value from SourceBufferPrivate::abort() and WebSourceBuffer::abort().
        https://bugs.webkit.org/show_bug.cgi?id=111195

        Reviewed by Adam Barth.

        No new tests. No user visible behavior changed.

        * platform/graphics/SourceBufferPrivate.h:
        (SourceBufferPrivate):

2013-03-04  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Eliminate the unique multicolumn flow thread style creation function
        https://bugs.webkit.org/show_bug.cgi?id=111338

        Reviewed by Allan Jensen.

        There is nothing special about a multi-column flow thread style now, so we can just
        use the existing anonymous style creation function.

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore):
        (WebCore::RenderMultiColumnBlock::addChild):

2013-03-04  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] WebCore::returnString is unsafe and should be removed!
        https://bugs.webkit.org/show_bug.cgi?id=110423

        Reviewed by Martin Robinson.

        Remove returnString() and replace it in callers with a new
        function that will cache and return the values of string
        properties for ATK interfaces in the private section of the
        wrapper AtkObject WebKitAccessible.

        * accessibility/atk/WebKitAccessibleUtil.cpp: Remove returnString().
        * accessibility/atk/WebKitAccessibleUtil.h: Ditto.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (_WebKitAccessiblePrivate): New private structure to store cached
        values of string property for the different ATK interfaces.
        (cacheAndReturnAtkProperty): New helper function to make sure the
        returned const gchar* value is previously cached in the private
        section of the wrapper AtkObject.
        (webkitAccessibleGetName): Use the new helper function.
        (webkitAccessibleGetDescription): Ditto.
        (webkitAccessibleInit): Initialize pointer to private structure.
        (webkitAccessibleFinalize): Remove unneeded code.
        (webkitAccessibleClassInit): Add private struct to class type/
        * accessibility/atk/WebKitAccessibleWrapperAtk.h:
        (_WebKitAccessible): New member pointing to the private structure,
        made the new helper function cacheAndReturnAtkProperty() available
        to external callers (implementation files for ATK interfaces).
        (AtkCachedProperty): New enum to allow reusing code when calling
        cacheAndReturnAtkProperty() to cache and return different properties.

        * accessibility/atk/WebKitAccessibleInterfaceAction.cpp:
        (webkitAccessibleActionGetKeybinding): Replace calls to returnString()
        with calls to the new helper function cacheAndReturnAtkProperty().
        (webkitAccessibleActionGetName): Ditto.
        * accessibility/atk/WebKitAccessibleInterfaceDocument.cpp:
        (documentAttributeValue): Ditto.
        (webkitAccessibleDocumentGetLocale): Ditto.
        * accessibility/atk/WebKitAccessibleInterfaceImage.cpp:
        (webkitAccessibleImageGetImageDescription): Ditto.

        Remove returnString() from WebKitAccessibleHyperlink (which is not
        an AtkObject, but a GObject) as well, replacing it in callers with
        simple code that will cache and return the required values in the
        private section of these kind of objects.

        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (_WebKitAccessibleHyperlinkPrivate): Added two new fields to cache
        string values for the key binding and name properties from the
        AtkAction interface, which is implemented by AtkHyperlink.
        (webkitAccessibleHyperlinkActionGetKeybinding): Cache the string
        value for the key binding before returning a const gchar* pointer.
        (webkitAccessibleHyperlinkActionGetName): Ditto.
        (webkitAccessibleHyperlinkGetURI): Do not cache the URI here, as
        this function returns a gchar* that will be owned by the caller.

2013-03-04  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Compile fix after r144216
        https://bugs.webkit.org/show_bug.cgi?id=111305

        Reviewed by Brent Fulgham.

        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::cfURLRequest): Added new parameter.

2013-03-03  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Make sure region styling works for columns inside regions.
        https://bugs.webkit.org/show_bug.cgi?id=111276

        Reviewed by Sam Weinig.

        Test: fast/regions/region-styling-in-columns.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        (WebCore::CurrentRenderFlowThreadMaintainer::~CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        (CurrentRenderFlowThreadMaintainer):
        Fix the CurrentRenderFlowThreadMaintainer so that it saves off the old render flow thread
        and restores it when done. This effectively makes flow thread layout a push/pop stack,
        since with in-flow threads, this is allowed. We assert that a nested flow thread is
        in-flow to preserve the invariant that you can't nest CSS Regions flow thread.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::computeChildrenStyleInRegion):
        Add isInFlowRenderFlowThread() to the anonymous check to make sure a style gets made
        for the nested flow thread.

2013-03-04  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: WebInspector.AceTextEditor throws a warning
        https://bugs.webkit.org/show_bug.cgi?id=111315

        Reviewed by Pavel Feldman.

        Add WebInspector.AceTextEditor to externs.js to suppress closure
        compilation warning.

        No new tests: no change in behaviour.

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

2013-03-04  Antoine Quint  <graouts@apple.com>

        Fix debug build under certain configurations, cause was
        http://trac.webkit.org/changeset/144624.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        * inspector/InspectorLayerTreeAgent.h:
        (WebCore):
        (WebCore::InspectorLayerTreeAgent::create):
        (InspectorLayerTreeAgent):

2013-03-04  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] REGRESSION(r141240) Crash in PluginPackage::fetchInfo
        https://bugs.webkit.org/show_bug.cgi?id=111322

        Reviewed by Simon Hausmann.

        Do not try to load blacklisted plugins.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):

2013-03-04  Alexis Menard  <alexis@webkit.org>

        transition properties can't be found in CSSStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=110011

        Reviewed by Antti Koivisto.

        The previous approach for handling the unprefixing was to alias the
        unprefixed properties with the prefixed ones in CSSPropertyNames.in.
        Unfortunately it will alias the properties in the parsing code which will just
        identically parse the two versions. This means that when we populate StylePropertySet
        we do not have information whether we just parsed the prefixed, the
        unprefixed properties or we parsed both. The patch takes another
        approach by creating two distinct sets of properties (unprefixed and
        prefixed). Each properties have their own id and we now handle them in
        the parsing code as disctints properties and add both versions to the
        declared style. In order to avoid properties getting out of sync, 
        this patch adds few facilities to StylePropertySet to update the
        prefixed and the unprefixed entries. Finally the style resolution
        happens only for the prefixed version (to limit the size of this patch)
        and the unprefixed versions are not resolved. This is to avoid creating
        the animation objects twice for the resolved style.

        Test : transitions/transitions-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::addPropertyWithPrefixingVariant): Always add the
        prefixed and the unprefixed property even if only one is specified.
        (WebCore):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTransitionShorthand): Add both prefixed and
        unprefixed longhands to the declarated style.
        (WebCore::CSSParser::parseAnimationProperty):
        * css/CSSParser.h:
        (CSSParser):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSProperty.h:
        (WebCore:: prefixingVariantForPropertyId): This function takes a given
        property id and returns its prefixed or unprefixed id if it exists. If
        not it returns the same id.
        (WebCore):
        * css/CSSPropertyNames.in:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):
        (WebCore::StylePropertySet::removeShorthandProperty):
        (WebCore::StylePropertySet::removeProperty):
        (WebCore::StylePropertySet::removeProperty): Remove
        also the prefixed or unprefixed shorthand if it exists.
        (WebCore):
        (WebCore::StylePropertySet::setProperty):
        (WebCore::StylePropertySet:: appendPrefixingVariantProperty):
        (WebCore::StylePropertySet::setPrefixingVariantProperty): If it
        exists a unprefixed or prefixed counterpart of the property we're
        trying to set, then we update the other one.
        (WebCore::StylePropertySet::asText):
        (WebCore::StylePropertySet::mergeAndOverrideOnConflict):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * css/StylePropertyShorthand.cpp:
        (WebCore::transitionShorthand):
        (WebCore):
        (WebCore::shorthandForProperty): Define the transitions unprefixed
        longhands.
        * css/StylePropertyShorthand.h:
        (WebCore):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty): StyleBuilder will handle the
        resolution and the creation of the animations for the style. As the
        declarated style now contains declarations for the prefixed and
        unprefixed property we do not want to resolve two times and create duplicate animations.
        Therefore when we try to resolve the unprefixed version we just bail out.

2013-03-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: CPU Flame Chart: reveal profiler DataGrid node when user clicks on a FlameChart item.
        https://bugs.webkit.org/show_bug.cgi?id=111309

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileView.prototype._revealProfilerNode):
        * inspector/front-end/FlameChart.js:
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype._onClick):

2013-03-04  Antoine Quint  <graouts@apple.com>

        Web Inspector: remove existing LayerTreeAgent protocol APIs
        https://bugs.webkit.org/show_bug.cgi?id=111251

        In order to eventually provide a more useful API for the LayerTreeAgent
        that will be done in followup bugs, we remove the current API exposed by
        the agent providing a clean slate that will make future patches easier
        to read. Additionally, we remove the "childLayers" property on the Layer
        object since we will no longer be providing a hierarchy of layers, but
        rather a flat list of layers attached to a node and its descendants.

        No new tests since we're removing the APIs exposed by the LayerTreeAgent.
        Subsequent patches will add tests as new APIs are added.

        Reviewed by Timothy Hatcher.

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        * inspector/InspectorLayerTreeAgent.h:
        (InspectorLayerTreeAgent):

2013-03-04  Li Yin  <li.yin@intel.com>

        MediaStream.ended must return true when it is created with ended tracks.
        https://bugs.webkit.org/show_bug.cgi?id=111293

        Reviewed by Kentaro Hara.

        Spec: http://dev.w3.org/2011/webrtc/editor/getusermedia.html#MediaStream-ended
        When a MediaStream object is created, its ended attribute must be set to false,
        unless it is being created using the MediaStream() constructor whose arguments
        are lists of MediaStreamTrack objects that are all ended, in which case the
        MediaStream object must be created with its ended attribute set to true.

        Test: fast/mediastream/MediaStreamConstructor.html

        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):

2013-03-04  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Adding new rules broken if a <style> tag is added to document dynamically
        https://bugs.webkit.org/show_bug.cgi?id=111299

        Reviewed by Pavel Feldman.

        The CSSStyleSheet instance should be retrieved directly from the HTMLStyleElement just created,
        not from the document.styleSheets list.

        Test: inspector/styles/add-new-rule-with-style-after-body.html

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):

2013-03-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Unreviewed. Fix for closure type annotations.

        * inspector/front-end/FlameChart.js:

2013-03-04  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] Build fix when compiling with GLES2 support enabled.
        https://bugs.webkit.org/show_bug.cgi?id=111291

        Reviewed by Kenneth Rohde Christiansen.

        This patch fixes build issues when compiling with GLES2
        support. As part of the fix the patch removes Evas specific
        workaround of using GLX with EGL in PlatformContext as GLES2 
        is the main target with EGL.

        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore::GLCurrentContextWrapper::GLCurrentContextWrapper):
        * platform/graphics/texmap/TextureMapper.h:

2013-03-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: implement Flame Chart for CPU profiler.
        https://bugs.webkit.org/show_bug.cgi?id=111162

        Reviewed by Yury Semikhatsky.

        It is an initial implementation. The next step is to provide
        function names and other stats about the hovered item.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * inspector/compile-front-end.py:
        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileView.prototype._getCPUProfileCallback):
        * inspector/front-end/FlameChart.js: Added.
        (WebInspector.FlameChart):
        (WebInspector.FlameChart.prototype._onMouseMove):
        (WebInspector.FlameChart.prototype.findNodeCallback):
        (WebInspector.FlameChart.prototype._coordinatesToNode):
        (WebInspector.FlameChart.prototype.onResize):
        (WebInspector.FlameChart.prototype._rootNodes):
        (WebInspector.FlameChart.prototype.draw):
        (WebInspector.FlameChart.prototype._drawNode):
        (WebInspector.FlameChart.prototype._forEachNode):
        (WebInspector.FlameChart.prototype._drawBar):
        (WebInspector.FlameChart.prototype.update):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/flameChart.css: Added.
        (.flame-chart):

2013-03-04  Marja Hölttä  <marja@chromium.org>

        [V8] Add a "context type" parameter to GetTemplate and ConfigureV8SomethingTemplate functions
        https://bugs.webkit.org/show_bug.cgi?id=110875

        The parameter will later be used for generating specialized V8
        bindings for the 3 different world types (main world, isolated
        work, worker).

        Reviewed by Kentaro Hara.

        No new tests (no changes in behavior yet).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateDomainSafeFunctionSetter):
        (GenerateNormalAttrGetter):
        (GenerateNamedConstructor):
        (GenerateImplementation):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        * bindings/v8/DOMDataStore.h:
        (DOMDataStore):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore):
        (WebCore::DOMWrapperWorld::setInitializingWindow):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::contextHasCorrectPrototype):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::getWorld):
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::retrieveFrameWithGlobalObjectCheck):
        * bindings/v8/V8AdaptorFunction.cpp:
        (WebCore::V8AdaptorFunction::getTemplate):
        (WebCore::V8AdaptorFunction::wrap):
        * bindings/v8/V8AdaptorFunction.h:
        (V8AdaptorFunction):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toDOMWindow):
        (WebCore::toScriptExecutionContext):
        (WebCore::worldType):
        (WebCore):
        (WebCore::worldTypeInMainThread):
        * bindings/v8/V8Binding.h:
        (WebCore):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::clearForNavigation):
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::createWrapper):
        * bindings/v8/V8Initializer.cpp:
        (WebCore::findFrame):
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextData::constructorForTypeSlowCase):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::controllerForContext):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore::WrapperTypeInfo::getTemplate):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::eventAttrGetterCustom):
        (WebCore::V8DOMWindow::eventAttrSetterCustom):
        (WebCore::V8DOMWindow::toStringMethodCustom):
        (WebCore::V8DOMWindow::namedSecurityCheck):
        (WebCore::V8DOMWindow::indexedSecurityCheck):
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::wrapInShadowObject):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLImageElementConstructor.h:
        (V8HTMLImageElementConstructor):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventMethodCustom):

2013-03-04  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: add Ace editor experiment
        https://bugs.webkit.org/show_bug.cgi?id=111191

        Reviewed by Pavel Feldman.

        No new tests.

        Add Ace text editor experiment.

        * WebCore.gypi:
        * inspector/front-end/AceTextEditor.js: Added.
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        * inspector/front-end/ace/ace.js: Added.
        * inspector/front-end/ace/acedevtools.css: Added.
        * inspector/front-end/ace/mode_css.js: Added.
        * inspector/front-end/ace/mode_html.js: Added.
        * inspector/front-end/ace/mode_javascript.js: Added.
        * inspector/front-end/ace/theme_textmate.js: Added.
        * inspector/front-end/ace/LICENSE.txt: Added.

2013-03-04  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Add build flag for FontLoader
        https://bugs.webkit.org/show_bug.cgi?id=111289

        Reviewed by Benjamin Poulain.

        Add ENABLE_FONT_LOAD_EVENTS build flag (disabled by default).

        * Configurations/FeatureDefines.xcconfig:

2013-03-04  Mike West  <mkwst@chromium.org>

        XSSAuditor should strip dangerous attributes from SMIL animation elements.
        https://bugs.webkit.org/show_bug.cgi?id=111071

        Reviewed by Adam Barth.

        SMIL animation elements can, amusingly enough, animate the 'href' of a
        link. This patch teaches XSSAuditor how to deal with the
        semicolon-separated 'animation[values]' attribute in order to ensure
        that it doesn't contain JavaScript URLs that could be animated into
        place for an unsuspecting user to click on.

        Test: http/tests/security/xssAuditor/svg-animate.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::isSemicolonSeparatedAttribute): Added.
            This returns true if the given attribute is SVGNames::valuesAttr,
            but makes it possible to easily extend the list with additional
            attributes with this strange property.
        (WebCore::semicolonSeparatedValueContainsJavaScriptURL): Added.
            Given a semicolon-separated string, determine if it contains any
            JavaScript URLs.
        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):
            When looking for dangerousness, determine whether or not we should
            be comparing against each member of a semicolon-separated list.

2013-03-04  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] New files for BlackBerry::Platform::Graphics::GraphicsContext integration
        https://bugs.webkit.org/show_bug.cgi?id=111153

        Reviewed by Rob Buis.

        BlackBerry PR 293208

        This patch contains contributions from many members of the BlackBerry
        WebKit team:

        Rob Buis
        Robin Cao
        Eli Fidler
        Mike Lattanzio
        Yong Li
        Maxim Mogilnitsky
        Joshua Netterfield
        Arvid Nilsson
        Jakob Petsovits
        Konrad Piascik
        Jeff Rogers
        Artem Simonov
        Filip Spacek
        George Staikos

        Covered by existing tests.

        * platform/graphics/blackberry/FontBlackBerry.cpp: Added.
        (FSFixedToFloat):
        (FloatToFSFixed):
        (WebCore):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::canReturnFallbackFontsForComplexText):
        (WebCore::Font::drawEmphasisMarksForComplexText):
        (WebCore::Font::canExpandAroundIdeographsInComplexText):
        * platform/graphics/blackberry/FontCacheBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::getFamilyNameStringFromFontDescriptionAndFamily):
        (WebCore::fontWeightToFontconfigWeight):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/blackberry/FontCustomPlatformData.h: Added.
        (WebCore):
        (FontCustomPlatformData):
        * platform/graphics/blackberry/FontCustomPlatformDataBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::FontCustomPlatformData::supportsFormat):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/blackberry/FontPlatformDataBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::name):
        (WebCore::FontPlatformData::applyState):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::platformIsEqual):
        (WebCore::FontPlatformData::description):
        (WebCore::FontPlatformData::harfbuzzFace):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::setFakeBold):
        (WebCore::FontPlatformData::setFakeItalic):
        (WebCore::FontPlatformData::platformFontHandle):
        (WebCore::FontPlatformData::isFixedPitch):
        * platform/graphics/blackberry/GlyphPageTreeNodeBlackBerry.cpp: Added.
        (WebCore):
        (WorldTypeScopedPtr):
        (WebCore::WorldTypeScopedPtr::WorldTypeScopedPtr):
        (WebCore::WorldTypeScopedPtr::~WorldTypeScopedPtr):
        (WebCore::WorldTypeScopedPtr::get):
        (WebCore::GlyphPage::fill):
        * platform/graphics/blackberry/GradientBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::totalStopsNeeded):
        (WebCore::fillStops):
        (WebCore::Gradient::platformGradient):
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::fill):
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/blackberry/GraphicsContextBlackBerry.cpp: Added.
        (WebCore):
        (GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::setIsAcceleratedContext):
        (WebCore::GraphicsContext::isAcceleratedContext):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer):
        (WebCore::GraphicsContext::endPlatformTransparencyLayer):
        (WebCore::GraphicsContext::supportsTransparencyLayers):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineDash):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipConvexPolygon):
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        (WebCore::GraphicsContext::clipBounds):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        * platform/graphics/blackberry/ITypeUtils.h: Added.
        (floatToITypeFixed):
        (intToITypeFixed):
        (iTypeFixedToFloat):
        * platform/graphics/blackberry/ImageBufferBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::makeBufferCurrent):
        (WebCore::getImageDataInternal):
        (WebCore::ImageBufferData::getImageData):
        (WebCore::flushAndDraw):
        (WebCore::ImageBufferData::draw):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::platformLayer):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/blackberry/ImageBufferDataBlackBerry.h: Added.
        (WebCore):
        (ImageBufferData):
        * platform/graphics/blackberry/PathBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::scratchContext):
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::currentPoint):
        (WebCore::Path::contains):
        (WebCore::Path::strokeContains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::strokeBoundingRect):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::platformAddPathForRoundedRect):
        (WebCore::Path::clear):
        (WebCore::Path::isEmpty):
        (WebCore::Path::hasCurrentPoint):
        (WebCore::Path::apply):
        (WebCore::Path::transform):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipOut):
        * platform/graphics/blackberry/PatternBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::Pattern::platformDestroy):
        (WebCore::Pattern::platformPattern):
        (WebCore::Pattern::setPlatformPatternSpaceTransform):
        * platform/graphics/blackberry/PlatformSupport.cpp: Added.
        (WebCore):
        (WebCore::PlatformSupport::getFontFamilyForCharacters):
        * platform/graphics/blackberry/PlatformSupport.h: Added.
        (WebCore):
        (PlatformSupport):
        (FontFamily):
        * platform/graphics/blackberry/SimpleFontDataBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::FSFixedToFloat):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::createScaledFontData):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::emphasisMarkFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):

2013-03-04  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        MediaStream API: local addTrack() and removeTrack() operations should not fire events.
        https://bugs.webkit.org/show_bug.cgi?id=111079

        Reviewed by Adam Barth.

        Removed the scheduling of "addtrack" and "removetrack" events by
        addTrack and removeTrack(). Replaced the test since the old test was
        driven by the event firing removed by this patch.

        Test: fast/mediastream/MediaStream-add-remove-tracks.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):

2013-03-04  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: touchmove not emulated inside iframe
        https://bugs.webkit.org/show_bug.cgi?id=111292

        Reviewed by Vsevolod Vlasov.

        Move fake touch event dispatching from mouseMoved() into handleMouseMoveEvent()
        and bail out earlier from dispatchSyntheticTouchEventIfEnabled() when the event
        should be dispatched on a subframe.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):

2013-03-04  Mike West  <mkwst@chromium.org>

        Long URLs in error messages should be shortened
        https://bugs.webkit.org/show_bug.cgi?id=111133

        Reviewed by Jochen Eisinger.

        When generating console messages, we're often copying the page's URL
        in order to add detail about where the error occurred. Generally, this
        is fine, but in edge cases (multi-meg 'data:' URLs), we're using far
        more memory than we should, and impacting performance.

        This patch adds an 'elidedString()' method to KURL for use in this
        sort of case; when generating console messages, we should insert the
        elided URL rather than the full URL.

        This shouldn't change any visible behavior; we're already visually
        eliding URLs in console messages for URLs above 150 characters. This
        patch simply changes the underlying string to ensure that no URL is
        over 1k in length to begin with.

        * platform/KURL.cpp:
        (WebCore::KURL::elidedString): Added.
        * platform/KURL.h:
            An exciting new method that gives you the same result as string()
            for URLs less than 1k long, and elides the middle of URLs longer
            than 1k by replacing everything but the first and last 0.5k with
            "...".
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::fail):
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeScript):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        (WebCore::createWindow):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::responseReceived):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFail):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::loadResource):
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::checkSourceAndReportViolation):
        (WebCore::CSPDirectiveList::allowScriptNonce):
        (WebCore::CSPDirectiveList::allowPluginType):
            Use 'KURL::elidedString()' rather than 'KURL::string()'
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::logWarning):
            Here, we're doing the same as above, but it enables us to throw
            away the asUTF8() function entirely by switching to makeString
            rather than String::format.

2013-03-04  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: add runtime flag to determine if inspector's source files were flattened.
        https://bugs.webkit.org/show_bug.cgi?id=111184

        Reviewed by Pavel Feldman.

        - Add a file "buildSystemOnly.js" which will be included into
        devtools.html only by GYP build system. This script sets a single flag
        which essentially means that inspector source files were run
        through a build system and flattened.
        - Update "importScript" and "registerRequiredCSS" functions to correct
        paths according to the "flattenImports" flag.

        No new tests: no change in behaviour.

        * WebCore.gypi:
        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        * inspector/front-end/View.js:
        (WebInspector.View.prototype.registerRequiredCSS):
        * inspector/front-end/buildSystemOnly.js: Added.
        * inspector/front-end/utilities.js:

2013-03-04  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Fix front-end compilation
        https://bugs.webkit.org/show_bug.cgi?id=111286

        Reviewed by Alexander Pavlov.

        * inspector/InjectedScriptSource.js:
        * inspector/front-end/FileSystemProjectDelegate.js:
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype.removeUISourceCode):
        (WebInspector.NavigatorTreeNode.prototype.reset):
        (WebInspector.NavigatorFolderTreeNode.prototype.didAddChild):

2013-03-03  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Add proper checks to enable GraphicsSurface usage on EGL without XCompositeWindow.
        https://bugs.webkit.org/show_bug.cgi?id=108034

        Reviewed by Laszlo Gombos.

        Covered by existing WebGL tests.

        Currently, we set GRAPHICS_SURFACE to true if support for XCompositeWindow
        is identified during compile time. This is ok, when using GLX. We might not
        have support for XCompositeWindow when using EGL and GLES2.0. This patch
        makes changes so that GRAPHICS_SURFACE is always enabled with EGL and adds
        GLX guard to the parts of code dependent on XCompositeWindow support.

        * platform/graphics/opengl/GLPlatformSurface.cpp:
        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        (WebCore::GLXConfigSelector::findMatchingConfig):
        * platform/graphics/surfaces/glx/X11Helper.cpp:
        (WebCore::X11Helper::createOffScreenWindow):
        (WebCore::X11Helper::isXRenderExtensionSupported):
        * platform/graphics/surfaces/glx/X11Helper.h:

2013-03-03  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [PageAgent] can't find frame by security origin.
        https://bugs.webkit.org/show_bug.cgi?id=110849

        Use toRawString() in order to compare Frames' SecurityOrigins for storage-related goals.

        Reviewed by Vsevolod Vlasov.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::findFrameWithSecurityOrigin):

2013-03-03  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, rolling out r144455.
        http://trac.webkit.org/changeset/144455
        https://bugs.webkit.org/show_bug.cgi?id=111165

        A simpler solution to the SecurityOrigin -> localStorage
        lookup exists

        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.storageId):
        (WebInspector.DOMStorage.prototype.get id):
        (WebInspector.DOMStorage.prototype.getItems):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        (WebInspector.DOMStorageModel.prototype._securityOriginAdded):
        (WebInspector.DOMStorageModel.prototype._securityOriginRemoved):
        (WebInspector.DOMStorageModel.prototype._storageKey):
        * inspector/front-end/ExtensionAuditCategory.js:
        * inspector/front-end/FileSystemModel.js:
        (WebInspector.FileSystemModel.prototype._reset):
        (WebInspector.FileSystemModel.prototype._securityOriginAdded):
        (WebInspector.FileSystemModel.prototype._securityOriginRemoved):
        (WebInspector.FileSystemModel.prototype._addOrigin):
        (WebInspector.FileSystemModel.prototype._removeOrigin):
        (WebInspector.FileSystemModel.prototype._requestFileSystemRoot):
        (WebInspector.FileSystemModel.prototype._fileSystemRootReceived):
        (WebInspector.FileSystemModel.prototype._removeFileSystem):
        (WebInspector.FileSystemModel.FileSystem.prototype.get name):
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel.prototype._reset):
        (WebInspector.IndexedDBModel.prototype.refreshDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._securityOriginAdded):
        (WebInspector.IndexedDBModel.prototype._securityOriginRemoved):
        (WebInspector.IndexedDBModel.prototype._addOrigin):
        (WebInspector.IndexedDBModel.prototype._removeOrigin):
        (WebInspector.IndexedDBModel.prototype._updateOriginDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._loadDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._loadDatabase):
        (WebInspector.IndexedDBModel.prototype.):
        (WebInspector.IndexedDBModel.prototype._requestData):
        (WebInspector.IndexedDBModel.DatabaseId.prototype.equals):
        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDatabaseView.prototype._refreshDatabase):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._addFrame):
        (WebInspector.ResourceTreeModel.prototype._addSecurityOrigin):
        (WebInspector.ResourceTreeModel.prototype._removeSecurityOrigin):
        (WebInspector.ResourceTreeModel.prototype.securityOrigins):
        (WebInspector.ResourceTreeModel.prototype._handleMainFrameDetached):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeFrame):
        (WebInspector.ResourceTreeFrame.prototype._navigate):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.IDBDatabaseTreeElement):
        (WebInspector.IDBDatabaseTreeElement.prototype.get itemURL):
        (WebInspector.IDBObjectStoreTreeElement.prototype.get itemURL):
        (WebInspector.IDBIndexTreeElement.prototype.get itemURL):
        (WebInspector.DOMStorageTreeElement):
        (WebInspector.DOMStorageTreeElement.prototype.get itemURL):
        (WebInspector.FileSystemTreeElement):

2013-03-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Let user know when file system based uiSourceCode was changed on disk.
        https://bugs.webkit.org/show_bug.cgi?id=110133

        Reviewed by Pavel Feldman.

        We now check if file system based uiSourceCode content was updated externally when 
        UISourceCodeFrame is shown or inspector window is focused.
        If there is no working copy being edited right now we replace old content with the new one silently.
        Otherwise ask user if he wants to replace his working copy with the new content.

        * English.lproj/localizedStrings.js:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.editRange):
        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate.prototype.innerCallback):
        (WebInspector.FileSystemProjectDelegate.prototype.requestFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype._contentRequestFinished):
        (WebInspector.FileSystemProjectDelegate.prototype.requestUpdatedFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype.contentCallback):
        (WebInspector.FileSystemProjectDelegate.prototype.searchInFileContent):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.wasShown):
        (WebInspector.JavaScriptSourceFrame.prototype.willHide):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleProjectDelegate.prototype.requestUpdatedFileContent):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.setContent):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.checkContentUpdated.updatedContentLoaded):
        (WebInspector.UISourceCode.prototype.checkContentUpdated):
        * inspector/front-end/UISourceCodeFrame.js:
        (WebInspector.UISourceCodeFrame.prototype.wasShown):
        (WebInspector.UISourceCodeFrame.prototype.willHide):
        (WebInspector.UISourceCodeFrame.prototype._windowFocused):
        (WebInspector.UISourceCodeFrame.prototype._checkContentUpdated):
        * inspector/front-end/Workspace.js:
        (WebInspector.ProjectDelegate.prototype.requestUpdatedFileContent):
        (WebInspector.Project.prototype.requestUpdatedFileContent):

2013-03-03  Arpita Bahuguna  <a.bah@samsung.com>

        createAttribute/setAttributeNode does not properly normalize case
        https://bugs.webkit.org/show_bug.cgi?id=90341

        Reviewed by Darin Adler.

        setAttributeNode() verifies for existing attributes in a case sensitive
        manner. Thus, it would add another attribute if specified in a case
        different from the existing one. Instead, like setAttribute(), it too
        should modify the existing attribute's value.

        Test: fast/dom/Element/setAttributeNode-case-insensitivity.html

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNode):
        Made changes to check for an existing attribute by converting the
        specified attribute's localName to lowercase.

2013-03-03  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::indexedSecurityCheck):
        (TestActiveDOMObjectV8Internal):
        (WebCore::TestActiveDOMObjectV8Internal::namedSecurityCheck):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):

2013-03-03  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix after r144590.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateSecurityCheckFunctions):

2013-03-03  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix after r144587.

        * bindings/v8/V8Binding.cpp:
        (WebCore::toV8Context):
        * bindings/v8/V8MutationCallback.cpp:
        (WebCore::V8MutationCallback::V8MutationCallback):

2013-03-01  Kentaro Hara  <haraken@chromium.org>

        [V8] HTMLDocument.all should have [Replaceable]
        https://bugs.webkit.org/show_bug.cgi?id=111230

        Reviewed by Adam Barth.

        (Although HTMLDocument.all is already removed from the spec,)
        it is expected to behave as a [Replaceable] attribute. By adding
        a [Replaceable] IDL attribute, we can remove custom implementation
        of HTMLDocument.all.

        I confimed that exactly the same code is generated for .all getter
        and setter.

        No tests. No change in behavior.

        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * html/HTMLDocument.idl:

2013-03-01  Kentaro Hara  <haraken@chromium.org>

        [V8] indexedSecurityCheck() and namedSecurityCheck() should be auto-generated
        https://bugs.webkit.org/show_bug.cgi?id=111225

        Reviewed by Adam Barth.

        indexedSecurityCheck() and namedSecurityCheck() should be auto-generated,
        except for DOMWindow's ones.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateSecurityCheckFunctions):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::namedSecurityCheckCustom):
        (WebCore::V8DOMWindow::indexedSecurityCheckCustom):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:

2013-03-01  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename $implContentDecls to $implContentInternals in CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=111214

        Reviewed by Adam Barth.

        $implContentDecls stores generated code that is put in a namespace 'XXXV8Internal'.
        For clarification, it should be renamed to $implContentInternals.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        (GenerateDomainSafeFunctionSetter):
        (GenerateConstructorGetter):
        (GenerateNormalAttrGetterCallback):
        (GenerateNormalAttrGetter):
        (GenerateReplaceableAttrSetterCallback):
        (GenerateReplaceableAttrSetter):
        (GenerateNormalAttrSetterCallback):
        (GenerateNormalAttrSetter):
        (GenerateOverloadedFunction):
        (GenerateFunctionCallback):
        (GenerateFunction):
        (GenerateOverloadedConstructorCallback):
        (GenerateSingleConstructorCallback):
        (GenerateEventConstructor):
        (GenerateTypedArrayConstructor):
        (GenerateImplementation):
        (WriteData):

2013-03-01  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename getWorld() to isolatedWorld(), and getWorldForEnteredContext() to isolatedWorldForEnteredContext()
        https://bugs.webkit.org/show_bug.cgi?id=111212

        Reviewed by Adam Barth.

        The rename I did in r142424 was wrong. Given that getWorld() returns 0
        for the main world, it should be named isolatedWorld(). Similarly,
        given that getWorldForEnteredContext() returns 0 for the main world,
        it should be named isolatedWorldForEnteredContext().

        No tests. No change in behavior.

        * bindings/v8/CustomElementHelpers.cpp:
        (WebCore::CustomElementHelpers::isFeatureAllowed):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::makeContextWeak):
        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::isolatedWorld):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::shouldBypassMainWorldContentSecurityPolicy):
        (WebCore::ScriptController::currentWorldContext):
        * bindings/v8/V8Binding.h:
        (WebCore::isolatedWorldForEnteredContext):
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::constructorCustom):

2013-03-01  Kentaro Hara  <haraken@chromium.org>

        [V8] Move HTMLDocument::getNamedProperty() to DOMWindowShell
        https://bugs.webkit.org/show_bug.cgi?id=111223

        Reviewed by Adam Barth.

        HTMLDocument::getNamedProperty() is used by DOMWindowShell.
        It can be a static method in DOMWindowShell.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::getNamedProperty):
        (WebCore):
        (WebCore::getter):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:

2013-03-03  Dan Bernstein  <mitz@apple.com>

        Build fix after r144565. Reverted r144533.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:

2013-03-03  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Qt build after r144498
        https://bugs.webkit.org/show_bug.cgi?id=111272

        Reviewed by Eric Seidel.

        Update the Qt version of the XML parser to call the new API.

        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::resumeParsing):
        (WebCore::XMLDocumentParser::appendFragmentSource):

2013-03-03  Dean Jackson  <dino@apple.com>

        Plug-ins that are appropriately large w.r.t page size should autostart
        https://bugs.webkit.org/show_bug.cgi?id=111242

        Reviewed by Brady Eidson.

        A "full-page" plug-in site should never snapshot. The trick is
        how to determine what is full-page. This change implements the
        following algorithm.

        - The plug-in is in the main frame (not an iframe).
        - The plug-in is sized with width and height 100%.
        - The displayed area of the plug-in is more than 96% of the viewport area.

        This is definitely not foolproof. For example, zombo.com has a slight
        border around its plug-in. As the window size gets smaller, the body margin
        takes up more than 5% of the width or height, and the plug-in doesn't pass
        the tests above.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore): New static constant: sizingFullPageThresholdPercentage
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Implements
            the rules described above.

2013-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        [Win] IDLParser.pm fails to parse OESTextureHalfFloat and causes a build failure
        https://bugs.webkit.org/show_bug.cgi?id=111267

        Reviewed by Kentaro Hara.

        Allow empty definitions.

        * bindings/scripts/IDLParser.pm:
        (Parse):

2013-03-03  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: RenderLayerFilterInfo.h needs to include Element.h with ENABLE(SVG)

        Fixes the following build failures:

            In file included from Source/WebCore/rendering/RenderLayerFilterInfo.cpp:33:
            Source/WebCore/rendering/RenderLayerFilterInfo.h:118:19: error: use of undeclared identifier 'Element'
                Vector<RefPtr<Element> > m_internalSVGReferences;
                              ^
            Source/WebCore/rendering/RenderLayerFilterInfo.h:118:28: error: expected a type
                Vector<RefPtr<Element> > m_internalSVGReferences;
                                       ^
            Source/WebCore/rendering/RenderLayerFilterInfo.h:118:30: error: private field 'm_internalSVGReferences' is not used [-Werror,-Wunused-private-field]
                Vector<RefPtr<Element> > m_internalSVGReferences;
                                         ^
            3 errors generated.

        * rendering/RenderLayerFilterInfo.h: Include Element.h within
        ENABLE(SVG).  Move ENABLE(SVG) block below unconditional
        headers.

2013-03-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144567.
        http://trac.webkit.org/changeset/144567
        https://bugs.webkit.org/show_bug.cgi?id=111266

        Does not compile on apple-win (Requested by abarth on
        #webkit).

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::iconURLs):
        * dom/Document.h:
        (Document):
        * loader/icon/IconController.cpp:
        (WebCore::IconController::iconURL):
        (WebCore::IconController::urlsForTypes):
        * loader/icon/IconController.h:
        (IconController):
        * testing/Internals.cpp:
        (WebCore::Internals::iconURLs):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-03-03  Mike West  <mkwst@chromium.org>

        CSP 1.1: Support CSP 1.1 directives on the unprefixed header.
        https://bugs.webkit.org/show_bug.cgi?id=111254

        Reviewed by Adam Barth.

        We'd like to ensure that early adopters don't get stuck on a prefixed
        header; when CSP 1.1 is baked enough to be supported in multiple
        browsers, everything should Just Work™.

        This patch changes WebKit's behavior regarding CSP_NEXT features.
        Currently, they're only exposed on the prefixed header ('X-WebKit-CSP').
        This patch exposes those features on the canonical header, assuming
        that the runtime flag is set. This shouldn't have any effect at all on
        ports that haven't yet enabled CSP_NEXT, and will simply clear the way
        for a clean deployment to a wider audience once the specification
        process is further along.

        This change shouldn't have any effect on the existing tests: they
        should run just as they did before. The next step will be to adjust
        the LayoutTests for 1.1 to prefer the canonical header, but I'll do
        that in another patch to reduce churn.

        Related, the enum names no longer made sense: the difference between the
        canonical 'Content-Security-Policy' header and 'X-WebKit-CSP' is the
        prefix, not the functionality. This patch renames them for clarity.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
            Use the new enum names.
        * page/ContentSecurityPolicy.cpp:
        (CSPDirectiveList):
        (WebCore::CSPDirectiveList::CSPDirectiveList):
        (WebCore::CSPDirectiveList::addDirective):
            Drop the 'm_experimental' property from CSPDirectiveList; we'll
            control the behavior via the runtime flag from now on.

            Also, this fixes a small bug in 'addDirective()': we never threw
            unrecognized directive errors for users who were sending the
            prefixed header. Oops!
        (WebCore::ContentSecurityPolicy::deprecatedHeaderType):
            Use the new enum names.
        * page/ContentSecurityPolicy.h:
            Redefine the enum for clarity: 'PrefixedReport' and 'Report'
            rather than 'ReportAllDirectives' and 'ReportStableDirectives'.

2013-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Another Windows build fix attempt after r144567.
        Try touching the IDL file in a hope it'll regenerate JSInternals.cpp.

        * testing/Internals.idl:

2013-03-03  Adam Barth  <abarth@webkit.org>

        Unreviewed attempted build fix. Adds back some includes removed in
        http://trac.webkit.org/changeset/144565.

        * Modules/mediastream/RTCPeerConnection.cpp:
        * bindings/ScriptControllerBase.cpp:
        * bindings/objc/DOM.mm:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * css/CSSFontSelector.cpp:
        * css/WebKitCSSSVGDocumentValue.cpp:
        * dom/DOMImplementation.cpp:
        * dom/PendingScript.h:
        * dom/ScriptElement.cpp:
        * dom/ScriptElement.h:
        * history/CachedFrame.cpp:
        * html/DOMURL.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAppletElement.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/ImageDocument.cpp:
        * html/ImageInputType.cpp:
        * html/MediaDocument.cpp:
        * html/PluginDocument.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLParserOptions.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorFileSystemAgent.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/NetworkResourcesData.h:
        (WebCore):
        * loader/CookieJar.cpp:
        * loader/CrossOriginAccessControl.cpp:
        * loader/FrameLoader.cpp:
        * loader/MainResourceLoader.cpp:
        * loader/MixedContentChecker.cpp:
        * loader/PingLoader.cpp:
        * loader/SubframeLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/cache/CachedResource.cpp:
        * loader/icon/IconController.cpp:
        * page/DOMWindowExtension.cpp:
        * page/Frame.cpp:
        * page/PerformanceTiming.cpp:
        * page/PointerLockController.cpp:
        * page/animation/CSSPropertyAnimation.cpp:
        * platform/chromium/PasteboardChromium.cpp:
        * platform/efl/ErrorsEfl.cpp:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/gtk/ErrorsGtk.cpp:
        * platform/gtk/PasteboardGtk.cpp:
        * platform/gtk/PasteboardHelper.h:
        * platform/mac/ClipboardMac.mm:
        * platform/mac/HTMLConverter.mm:
        * platform/qt/PasteboardQt.cpp:
        * plugins/DOMMimeType.cpp:
        * plugins/PluginView.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderImageResource.cpp:
        * rendering/RenderImageResourceStyleImage.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerBacking.cpp:
        * svg/SVGImageLoader.cpp:
        * svg/SVGUseElement.cpp:
        * testing/MockPagePopupDriver.cpp:
        * xml/XSLStyleSheet.h:
        (WebCore):

2013-03-03  Ruslan Abdikeev  <aruslan@chromium.org>

        <link rel="apple-touch-icon"> tag is not honored on CNN.com, workflowy.com etc
        https://bugs.webkit.org/show_bug.cgi?id=109061

        Reviewed by Adam Barth.

        Test: fast/dom/icon-url-list-apple-touch.html

        Added iconTypes parameter to Document::iconURLs().
        Added Document::shortcutIconURLs() with original semantics of iconURLs().
        Fixed IconController.cpp to provide iconTypesMask to iconURLs().
        Renamed iconTypes to iconTypesMask to make the meaning clearer.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::shortcutIconURLs):
        (WebCore):
        (WebCore::Document::iconURLs):
        * dom/Document.h:
        (Document):
        * loader/icon/IconController.cpp:
        (WebCore::IconController::iconURL):
        (WebCore::IconController::urlsForTypes):
        * testing/Internals.cpp:
        (WebCore::Internals::iconURLs):
        (WebCore::Internals::shortcutIconURLs):
        (WebCore):
        (WebCore::Internals::allIconURLs):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-03-03  Mike West  <mkwst@chromium.org>

        CSP: Throw a warning when a '*-report-only' header doesn't contain a 'report-uri' directive.
        https://bugs.webkit.org/show_bug.cgi?id=111208

        Reviewed by Adam Barth.

        Developers in the wild have been observed to serve a report-only CSP
        header with a policy that doesn't contain a 'report-uri' directive.
        This has zero effect, of course, and we should help them understand
        that by throwing a warning up on the console.

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

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::isReportOnly): Added.
        (WebCore::CSPDirectiveList::reportURIs): Added.
        (WebCore::CSPDirectiveList::create):
            After creating a CSPDirectiveList, check whether it's in
            report-only mode without a report-uri. If so, warn the developer.
        (WebCore::ContentSecurityPolicy::reportMissingReportURI): Added.
            Write an exciting message to the console, warning the developer
            about her expensive no-op machine.

2013-03-03  Adam Barth  <abarth@webkit.org>

        Unreviewed rollout of http://trac.webkit.org/r144530
        As described in https://bugs.webkit.org/show_bug.cgi?id=111167 and
        https://bugs.webkit.org/show_bug.cgi?id=111035, this patch caused a
        large number of ASSERTs in chromium-win.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/notifications/Notification.cpp:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/ScriptControllerBase.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptSourceCode.h:
        (WebCore):
        * bindings/objc/DOM.mm:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * css/CSSCrossfadeValue.h:
        (WebCore::CSSCrossfadeValue::CSSCrossfadeValue):
        (WebCore::CSSCrossfadeValue::CrossfadeSubimageObserverProxy::CrossfadeSubimageObserverProxy):
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        * css/WebKitCSSSVGDocumentValue.cpp:
        * css/WebKitCSSSVGDocumentValue.h:
        (WebCore):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        * dom/ContainerNode.cpp:
        * dom/DOMImplementation.cpp:
        * dom/PendingScript.h:
        * dom/ScriptElement.cpp:
        * dom/ScriptElement.h:
        * history/CachedFrame.cpp:
        * html/DOMURL.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAppletElement.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/ImageDocument.cpp:
        * html/ImageInputType.cpp:
        * html/MediaDocument.cpp:
        * html/PluginDocument.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLParserOptions.cpp:
        * html/parser/HTMLScriptRunner.h:
        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorFileSystemAgent.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        * inspector/InspectorPageAgent.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/NetworkResourcesData.h:
        (WebCore):
        * loader/CookieJar.cpp:
        * loader/CrossOriginAccessControl.cpp:
        * loader/CrossOriginAccessControl.h:
        (WebCore):
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        * loader/FrameLoader.h:
        (WebCore):
        (WebCore::FrameLoader::policyChecker):
        * loader/ImageLoader.cpp:
        * loader/ImageLoader.h:
        * loader/LinkLoader.h:
        (WebCore):
        * loader/MainResourceLoader.cpp:
        * loader/MainResourceLoader.h:
        (WebCore):
        * loader/MixedContentChecker.cpp:
        * loader/PingLoader.cpp:
        * loader/PolicyChecker.h:
        (WebCore):
        * loader/ProgressTracker.cpp:
        * loader/SubframeLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/TextTrackLoader.cpp:
        * loader/TextTrackLoader.h:
        (WebCore):
        * loader/ThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore):
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedFont.h:
        (CachedFontClient):
        (WebCore::CachedFontClient::~CachedFontClient):
        (WebCore::CachedFontClient::expectedType):
        (WebCore::CachedFontClient::resourceClientType):
        (WebCore::CachedFontClient::fontLoaded):
        (WebCore):
        * loader/cache/CachedFontClient.h: Removed.
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedRawResource.cpp:
        * loader/cache/CachedRawResource.h:
        (WebCore):
        (CachedRawResourceClient):
        (WebCore::CachedRawResourceClient::~CachedRawResourceClient):
        (WebCore::CachedRawResourceClient::expectedType):
        (WebCore::CachedRawResourceClient::resourceClientType):
        (WebCore::CachedRawResourceClient::dataSent):
        (WebCore::CachedRawResourceClient::responseReceived):
        (WebCore::CachedRawResourceClient::dataReceived):
        (WebCore::CachedRawResourceClient::redirectReceived):
        (WebCore::CachedRawResourceClient::dataDownloaded):
        * loader/cache/CachedRawResourceClient.h: Removed.
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResourceHandle.cpp:
        (WebCore):
        * loader/cache/CachedResourceHandle.h:
        (WebCore):
        (WebCore::CachedResourceHandleBase::~CachedResourceHandleBase):
        (WebCore::CachedResourceHandleBase::CachedResourceHandleBase):
        * loader/cache/CachedSVGDocument.h:
        (CachedSVGDocumentClient):
        (WebCore::CachedSVGDocumentClient::~CachedSVGDocumentClient):
        (WebCore::CachedSVGDocumentClient::expectedType):
        (WebCore::CachedSVGDocumentClient::resourceClientType):
        (WebCore):
        * loader/cache/CachedSVGDocumentClient.h: Removed.
        * loader/cache/CachedSVGDocumentReference.cpp: Removed.
        * loader/cache/CachedSVGDocumentReference.h:
        (WebCore):
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        * loader/cache/CachedStyleSheetClient.h:
        (WebCore):
        * loader/cache/MemoryCache.h:
        (WebCore):
        (MemoryCache):
        * loader/chromium/CachedRawResourceChromium.cpp:
        * loader/icon/IconController.cpp:
        * loader/icon/IconLoader.h:
        * loader/mac/ResourceLoaderMac.mm:
        * page/DOMWindowExtension.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore):
        (WebCore::Frame::reportMemoryUsage):
        * page/Frame.h:
        (WebCore):
        (Frame):
        (WebCore::Frame::init):
        (WebCore::Frame::loader):
        * page/PerformanceNavigation.cpp:
        * page/PerformanceTiming.cpp:
        * page/PointerLockController.cpp:
        * page/Settings.cpp:
        * page/animation/CSSPropertyAnimation.cpp:
        * platform/chromium/PasteboardChromium.cpp:
        * platform/efl/ErrorsEfl.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore):
        (WebCore::FilterOperation::ReferenceFilterOperation::setCachedSVGDocumentReference):
        (WebCore::FilterOperation::ReferenceFilterOperation::ReferenceFilterOperation):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/gtk/ErrorsGtk.cpp:
        * platform/gtk/PasteboardGtk.cpp:
        * platform/gtk/PasteboardHelper.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        * platform/mac/HTMLConverter.mm:
        * platform/mac/PasteboardMac.mm:
        * platform/network/AuthenticationChallengeBase.cpp:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/mac/CookieStorageMac.mm:
        * platform/qt/PasteboardQt.cpp:
        * plugins/DOMMimeType.cpp:
        * plugins/PluginRequest.h: Removed.
        * plugins/PluginStream.h:
        (PluginStreamClient):
        (WebCore::PluginStreamClient::~PluginStreamClient):
        (WebCore::PluginStreamClient::streamDidFinishLoading):
        (WebCore):
        * plugins/PluginStreamClient.h: Removed.
        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        (WebCore):
        (PluginRequest):
        (WebCore::PluginRequest::PluginRequest):
        (WebCore::PluginRequest::frameLoadRequest):
        (WebCore::PluginRequest::notifyData):
        (WebCore::PluginRequest::sendNotification):
        (WebCore::PluginRequest::shouldAllowPopups):
        * rendering/HitTestResult.cpp:
        * rendering/InlineFlowBox.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::RenderImageResource):
        (WebCore):
        * rendering/RenderImageResource.h:
        (WebCore::RenderImageResource::image):
        (WebCore::RenderImageResource::errorOccurred):
        (WebCore::RenderImageResource::usesImageContainerSize):
        (WebCore::RenderImageResource::imageHasRelativeWidth):
        (WebCore::RenderImageResource::imageHasRelativeHeight):
        (WebCore::RenderImageResource::imageSize):
        * rendering/RenderImageResourceStyleImage.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerFilterInfo.h:
        (WebCore):
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderSnapshottedPlugIn.cpp:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/style/StyleCachedShader.h:
        * rendering/style/StyleCustomFilterProgram.cpp: Removed.
        * rendering/style/StyleCustomFilterProgram.h:
        (WebCore):
        (WebCore::StyleCustomFilterProgram::vertexShaderString):
        (StyleCustomFilterProgram):
        (WebCore::StyleCustomFilterProgram::fragmentShaderString):
        (WebCore::StyleCustomFilterProgram::isLoaded):
        (WebCore::StyleCustomFilterProgram::willHaveClients):
        (WebCore::StyleCustomFilterProgram::didRemoveLastClient):
        (WebCore::StyleCustomFilterProgram::notifyFinished):
        * svg/SVGFEImageElement.h:
        * svg/SVGFontFaceUriElement.h:
        (SVGFontFaceUriElement):
        * svg/SVGImageLoader.cpp:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        * svg/graphics/SVGImageCache.cpp:
        * testing/MockPagePopupDriver.cpp:
        * xml/XSLStyleSheet.h:
        (WebCore):
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2013-03-03  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove TranslateParameter() from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=111218

        Reviewed by Adam Barth.

        TranslateParameter() does nothing. It tries to convert TimeoutHandler to DOMString,
        but there is no non-custom method that uses TimeoutHandler.

        The only place where TimeoutHandler is used in the WebKit IDL is setTimeout() and setInterval().
        However, the latest spec uses 'any' instead of TimeoutHandler.
        http://dev.w3.org/html5/spec-LC/timers.html
        Thus, this patch updates the IDL declarations of setTimeout() and setInterval()
        according to the spec. By this change, TimeoutHandler is gone away from the WebKit IDL.
        (Anyway this IDL change has no effect, because setTimeout() and setInterval() are written
        in custom bindings.)

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2013-03-03  James Weatherall  <wez@chromium.org>

        keydown and keyup events have zero keycode for some numeric pad keys under Chromium on Linux
        https://bugs.webkit.org/show_bug.cgi?id=85642

        Add missing key mappings for GDK_KP_Begin, GDK_KP_Insert, GDK_KP_Delete and GDK_ISO_Level3_Shift.

        Reviewed by Adam Barth.

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2013-03-03  Adam Barth  <abarth@webkit.org>

        REGRESSION(144520): Does not compile on chromium-win
        https://bugs.webkit.org/show_bug.cgi?id=111261

        Unreviewed rollout of http://trac.webkit.org/changeset/144520. This
        patch does not compile for chromium-win. See the bug for the compile
        error.

        * rendering/ExclusionShapeInsideInfo.cpp:
        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore):
        (LineSegmentRange):
        (WebCore::LineSegmentRange::LineSegmentRange):
        (WebCore::ExclusionShapeInsideInfo::isEnabledFor):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::RenderBlock::exclusionShapeInsideInfo):
        (WebCore):
        (WebCore::RenderBlock::updateExclusionShapeInsideInfoAfterStyleChange):
        * rendering/RenderBlock.h:
        (WebCore):
        (RenderBlock):
        (RenderBlockRareData):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForLine):

2013-03-02  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION (r144517): IndexedDB layout test failures on GTK
        https://bugs.webkit.org/show_bug.cgi?id=111243

        Reviewed by Martin Robinson.

        Changes to the custom JSC bindings for IDBAny are required after r144517,
        specifically the case of IDBAny object having the KeyPathType type has to be covered.
        These changes are analogous to those made to the V8 bindings in the mentioned commit.

        No new tests - already covered by existing tests.

        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS): A helper function that wraps an IDBKeyPath into a JSValue.
        (WebCore): Shuffle the order inside the switch statement a bit to match the V8 custom bindings.
        Cover the case where the IDBAny object has the KeyPathType, calling the new helper method.

2013-03-02  Darin Adler  <darin@apple.com>

        Another try at fixing the build.

        * loader/cache/MemoryCache.cpp: Added an include of CachedResourceHandle.h.

2013-03-02  Darin Adler  <darin@apple.com>

        Try to fix build.

        * inspector/InspectorInstrumentation.h: Add missing forward declaration
        of CachedResource.

2013-02-18  Darin Adler  <darin@apple.com>

        Cut down the number of source files that depend on Clipboard.h
        https://bugs.webkit.org/show_bug.cgi?id=110030

        Reviewed by Ryosuke Niwa.

        I am doing some work on Clipboard and it's better to recompile 50 files
        each time we touch the header instead of 700. Also cut down on includes
        of DragState.h.

        * WebCore.exp.in: Updated for new MouseEvent::create function.

        * dom/ClipboardEvent.cpp: Added include of Clipboard.h since we use it
        here and the world no longer includes it everywhere.

        * dom/ClipboardEvent.h: Forward declared Clipboard instead of including
        Clipboard.h. Also made some overrides private because they can be.

        * dom/DataTransferItem.h: Removed unneeded include of Clipboard.h.

        * dom/MouseEvent.cpp: Added include of Clipboard.h since we use it
        here and the world no longer includes it everywhere.
        (WebCore::MouseEvent::create): Made the create function non-inline
        since we can't compile it without including Clipboard.h and we don't
        want to include Clipboard.h in the header. This is not so commonly
        used or so hot that this needs to be inlined.

        * dom/MouseEvent.h: Forward declared Clipboard instead of including
        Clipboard.h. Made MouseEvent::create a non-inline function and also
        used overloading instead of default arguments, since we can't compile
        a default argument of type PassRefPtr<Clipboard> without including
        Clipboard.h.

        * dom/WheelEvent.cpp: Added include of Clipboard.h since we use it
        here and the world no longer includes it everywhere.

        * dom/WheelEvent.h: Forward declare PlatformWheelEvent since it is used
        in this header. Previously we'd get it indirectly from including a header
        that included Clipboard.h.

        * editing/Editor.cpp: Added include of Clipboard.h since we use it here
        and the world no longer includes it everywhere.

        * inspector/InspectorDebuggerAgent.cpp: Added include of CachedResource.h.
        We used to get this indirectly through Clipboard.h.

        * inspector/InspectorFrontendHost.cpp: Added includes of ResourceError.h
        and ResourceResponse.h. We used to get these indirectly through Clipboard.h.
        Also removed unneeded include of <wtf/RefPtr.h>.

        * inspector/NetworkResourcesData.cpp: Added include of CachedResource.h.
        We used to get this indirectly through Clipboard.h.

        * loader/PingLoader.cpp: Added include of ResourceResponse.h.
        We used to get this indirectly through Clipboard.h.

        * page/DragController.cpp: Added include of DragState.h.
        We used to get this indirectly through EventHandler.h

        * page/EventHandler.h: Forward declared DragState and Element instead of
        including DragState.h. Also added an include of LayoutPoint.h, which we
        used to get indirectly through DragState.h.

2013-02-27  Darin Adler  <darin@apple.com>

        StringHasher functions require alignment that call sites do not all guarantee
        https://bugs.webkit.org/show_bug.cgi?id=110171

        Reviewed by Benjamin Poulain.

        * platform/graphics/WidthCache.h:
        (WebCore::WidthCache::SmallStringKey::SmallStringKey): Use the newly added
        addCharactersAssumingAligned to make sure we don't slow this call site down.
        It's safe since this code always adds characters two at a time.

2013-03-02  Adam Barth  <abarth@webkit.org>

        XSSAuditor has a subtle race condition when used with the threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=111253

        Reviewed by Eric Seidel.

        We were refing and derefing a StringImpl for a main-thread
        AtomicString. Using QualifiedNames on the background thread is very
        fragile and we should figure out a more robust solution.

        * html/parser/XSSAuditor.cpp:
        (WebCore::findAttributeWithName):

2013-03-02  Benjamin Poulain  <bpoulain@apple.com>

        Move computedStyleIncludingVisitedInfo from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=109772

        Reviewed by Andreas Kling.

        The function computedStyleIncludingVisitedInfo() is purely internal to WebCore,
        it is better defined on Internals than on TestRunner.

        * testing/Internals.cpp:
        (WebCore::Internals::computedStyleIncludingVisitedInfo):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-03-02  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r143637): Export ScriptController::javaScriptContext() on iOS
        <http://webkit.org/b/106059>

        Fixes the following build failure:

            Undefined symbols for architecture armv7:
              "__ZN7WebCore16ScriptController17javaScriptContextEv", referenced from:
                  -[WebFrame javaScriptContext] in WebFrame.o
                  __ZN20WebFrameLoaderClient35dispatchDidClearWindowObjectInWorldEPN7WebCore15DOMWrapperWorldE in WebFrameLoaderClient.o
            ld: symbol(s) not found for architecture armv7

        * WebCore.exp.in: Export ScriptController::javaScriptContext()
        even more unconditionally.

2013-03-02  Eric Seidel  <eric@webkit.org>

        Remove two unnecessary mallocs from the main-thread-parser code path
        https://bugs.webkit.org/show_bug.cgi?id=111249

        Reviewed by Adam Barth.

        I noticed these while fixing up our Vector -> String conversions
        but never went back to fix the FIXME.

        AtomicString(Vector<UChar, capacity>) is smart enough to avoid mallocing
        if the represented string is already in the AtomicString table.  It
        also handles 8bit vs. 16bit and empty() just like nameString() does.

        I also removed a 3rd caller to nameString() in the XSSAuditor which
        was causing an unnecessary malloc in both the main and background
        thread parser paths.

        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/HTMLToken.h:
        * html/parser/XSSAuditor.cpp:
        (WebCore):
        (WebCore::threadSafeMatch):
        (WebCore::hasName):

2013-03-02  Eric Seidel  <eric@webkit.org>

        constructTreeFromCompactHTMLToken should call clearExternalCharacters
        https://bugs.webkit.org/show_bug.cgi?id=111248

        Reviewed by Adam Barth.

        I don't know how to write a test for this.  It's possible characters()
        is never accessed from HTMLStackItem::token(), but it's better to be
        safe than sorry here.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::constructTreeFromCompactHTMLToken):

2013-03-02  Rob Buis  <rbuis@rim.com>

        Text overflow ellipsis wrong color when using webkit-text-fill-color
        https://bugs.webkit.org/show_bug.cgi?id=54841

        Reviewed by David Hyatt.

        Take -webkit-text-fill-color into account for ellipsis painting.

        Test: fast/css/text-overflow-ellipsis-color.html

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):

2013-03-02  Ryosuke Niwa  <rniwa@webkit.org>

        Fix a typo in my previous commit (r144534).

        * platform/win/PasteboardWin.cpp:

2013-03-02  Nayan Kumar K  <nayankk@motorola.com>

        [WebGL] Support for texImage2D of type HALF_FLOAT_OES with ArrayBufferView.
        https://bugs.webkit.org/show_bug.cgi?id=110818

        Reviewed by Kenneth Russell.

        As per OES_texture_half_float specification texImage2D and texSubImage2D entry
        points taking ArrayBufferView should extended to accept null with the pixel type
        HALF_FLOAT_OES.

        Tests: fast/canvas/webgl/oes-texture-half-float-not-supported.html
               fast/canvas/webgl/oes-texture-half-float.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/OESTextureHalfFloat.cpp: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (WebCore::OESTextureHalfFloat::OESTextureHalfFloat):
        (WebCore::OESTextureHalfFloat::~OESTextureHalfFloat):
        (WebCore::OESTextureHalfFloat::getName):
        (WebCore::OESTextureHalfFloat::create):
        * html/canvas/OESTextureHalfFloat.h: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (OESTextureHalfFloat):
        * html/canvas/OESTextureHalfFloat.idl: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType):
        (WebCore::WebGLRenderingContext::validateTexFuncData):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore):
        (WebGLRenderingContext):
        * html/canvas/WebGLRenderingContext.idl:
        * platform/graphics/Extensions3D.h:
        (Extensions3D):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsTypes3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::texImage2D):

2013-03-02  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt after r144530.

        * platform/win/PasteboardWin.cpp:

2013-03-01  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build after r144530.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h: Include the header for the
        base class.

2013-03-01  Terry Anderson  <tdanderson@chromium.org>

        Remove unused member variable m_useLatchedEventNode from PlatformWheelEvent.h
        https://bugs.webkit.org/show_bug.cgi?id=107314

        Reviewed by Darin Adler.

        EventHandler::handleGestureScrollCore() was removed in http://trac.webkit.org/changeset/140177,
        and this was the only place where the member variable |m_useLatchedEventNode| in
        PlatformWheelEvent was mutated. This variable is no longer needed and so it should be removed.

        No change in behavior, so no new tests needed.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        (WebCore::PlatformWheelEvent::useLatchedEventNode):
        (PlatformWheelEvent):

2013-02-28  Alexey Proskuryakov  <ap@apple.com>

        Reduce amount of rebuilding when touching networking headers
        https://bugs.webkit.org/show_bug.cgi?id=111035

        Reviewed by Eric Seidel.

        This uses a number of common unsurprising techniques. One interesting observation
        is that including CachedResource related headers is very expensive. We can usually
        get away with their Client counterparts, and with CachedResourceHandle.

        * page/Frame.cpp:
        * page/Frame.h:
        Don't include FrameLoader, greatly reducing include graph for most non-loader files.
        This required making Frame::init() non-inline - I'm not sure why it ever was.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        Even though FrameLoader is logically on loading side of WebCore, it's included in
        too many places. Not including PolicyChecker.h and ResourceHandle.h was among the
        largest wins. As a future improvement, we should probably convert other members
        to OwnPtrs.

        * css/CSSCrossfadeValue.h: Initializing CachedResourceHandle with 0 requires a
        definition of a class it holds, but default construction does not.

        * loader/CrossOriginAccessControl.h: This file among others only needs ResourceHandleTypes.h,
        not ResourceHandle.h. This header is semi-recent, so not all include sites were updated.

        * loader/cache/CachedFont.h:
        * loader/cache/CachedFontClient.h: Added.
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h: Added.
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentClient.h: Added.
        These types were defining client types in the same headers, making it impossible
        to avoid including networking headers through CachedResource. Moved clients into
        separate files.

        * plugins/PluginStream.h:
        * plugins/PluginStreamClient.h: Added.
        Similar situation here.

        * loader/cache/CachedResourceHandle.cpp:
        * loader/cache/CachedResourceHandle.h:
        Moved functions that need to know about CachedResource to .cpp file. This is another
        huge win. Added a destructor, so that CachedResource woudn't be needed in all files
        that include CachedResourceHandle.

        * loader/cache/CachedSVGDocumentReference.cpp: Added.
        * loader/cache/CachedSVGDocumentReference.h:
        Moved constructor and virtual function implementations to a .cpp file - they need
        not inlining, and this lets us avoid including CachedSVGDocument.h in the header.

        * platform/graphics/filters/FilterOperation.cpp:
        * platform/graphics/filters/FilterOperation.h:
        Avoid including CachedSVGDocumentReference.h. This is not such a big win now that
        CachedSVGDocumentReference.h itself is smaller, but FilterOperation is so clearly
        rendering code that it seems best to cut any ties with resources and loading.
        Added a virtual destrutor in .cpp file, because inline destructors in polymorphic
        classes are generally harmful (due to code bloat).

        * plugins/PluginRequest.h: Added.
        * plugins/PluginView.h:
        Moved PluginRequest into a separate file, it was out of place in a view hierarchy
        class file.

        * rendering/RenderImageResource.cpp:
        * rendering/RenderImageResource.h:
        Moved definitions of virtual functions to a .cpp file. Thre is no win from having
        them inline, and now we don't need CachedImage.h in the header.

        * rendering/style/StyleCustomFilterProgram.cpp: Added.
        * rendering/style/StyleCustomFilterProgram.h:
        Ditto.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/notifications/Notification.cpp:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/ScriptControllerBase.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptSourceCode.h:
        * bindings/objc/DOM.mm:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        * css/WebKitCSSSVGDocumentValue.cpp:
        * css/WebKitCSSSVGDocumentValue.h:
        * dom/Clipboard.cpp:
        * dom/ContainerNode.cpp:
        * dom/DOMImplementation.cpp:
        * dom/PendingScript.h:
        * dom/ScriptElement.cpp:
        * dom/ScriptElement.h:
        * history/CachedFrame.cpp:
        * html/DOMURL.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAppletElement.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/ImageDocument.cpp:
        * html/ImageInputType.cpp:
        * html/MediaDocument.cpp:
        * html/PluginDocument.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLParserOptions.cpp:
        * html/parser/HTMLScriptRunner.h:
        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorFileSystemAgent.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/NetworkResourcesData.h:
        * loader/CookieJar.cpp:
        * loader/CrossOriginAccessControl.cpp:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentThreadableLoader.h:
        * loader/ImageLoader.cpp:
        * loader/ImageLoader.h:
        * loader/LinkLoader.h:
        * loader/MainResourceLoader.cpp:
        * loader/MainResourceLoader.h:
        * loader/MixedContentChecker.cpp:
        * loader/PingLoader.cpp:
        * loader/PolicyChecker.h:
        * loader/ProgressTracker.cpp:
        * loader/SubframeLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/TextTrackLoader.cpp:
        * loader/TextTrackLoader.h:
        * loader/ThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedRawResource.cpp:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedStyleSheetClient.h:
        * loader/cache/MemoryCache.cpp:
        * loader/cache/MemoryCache.h:
        * loader/chromium/CachedRawResourceChromium.cpp:
        * loader/icon/IconController.cpp:
        * loader/icon/IconLoader.h:
        * loader/mac/ResourceLoaderMac.mm:
        * page/DOMWindowExtension.cpp:
        * page/DragController.cpp:
        * page/PerformanceNavigation.cpp:
        * page/PerformanceTiming.cpp:
        * page/PointerLockController.cpp:
        * page/Settings.cpp:
        * page/animation/CSSPropertyAnimation.cpp:
        * platform/chromium/PasteboardChromium.cpp:
        * platform/efl/ErrorsEfl.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/gtk/ErrorsGtk.cpp:
        * platform/gtk/PasteboardGtk.cpp:
        * platform/gtk/PasteboardHelper.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        * platform/mac/HTMLConverter.mm:
        * platform/mac/PasteboardMac.mm:
        * platform/network/AuthenticationChallengeBase.cpp:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/mac/CookieStorageMac.mm:
        * platform/qt/PasteboardQt.cpp:
        * plugins/DOMMimeType.cpp:
        * plugins/PluginView.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/InlineFlowBox.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderImageResourceStyleImage.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderSnapshottedPlugIn.cpp:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/style/StyleCachedShader.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGImageLoader.cpp:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        * svg/graphics/SVGImageCache.cpp:
        * testing/MockPagePopupDriver.cpp:
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        Many self-evident changes - removing unnecessary header includes, adding smaller
        more local ones that are now necessary.

2013-03-01  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Transformed objects inside fragmented transparent objects don't render
        https://bugs.webkit.org/show_bug.cgi?id=111221.

        Reviewed by Simon Fraser.

        Improve transparencyClipBox so that it understands when moving into descendants
        that it does in fact have to break up the transformed clip rect across the
        fragments.
        
        Make sure when handling fragmented transforms using multiple paints that
        the test that determines the extent of the transform within the fragments
        uses transparencyClipBox. This gives us an accurate set of columns that the
        final transformed result will paint across.

        Tests: fast/multicol/mixed-opacity-fixed-test.html
               fast/multicol/mixed-opacity-test.html
               fast/multicol/transform-inside-opacity.html

        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox):
        (WebCore::expandClipRectForDescendantsAndReflection):
        Break transformed boxes up into fragments when they are
        being requested by an ancestor.

        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        * rendering/RenderLayer.h:
        (RenderLayer):
        Modify collectFragments so that we pass in the correct range
        within the columns that can possibly cover the fragmented
        transformed box.

2013-03-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: do not visit raw pointers by default.
        https://bugs.webkit.org/show_bug.cgi?id=110943

        Reviewed by Yury Semikhatsky.

        Unfortunately in many cases raw pointer may point to an object that has been deleted.
        There is no working solution to solve this problem in general.
        It could be solved only on case by case basis.

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::reportLeaf):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::reportMemoryUsage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::FrameData::reportMemoryUsage):
        * platform/graphics/skia/MemoryInstrumentationSkia.cpp:
        (reportMemoryUsage):

2013-03-01  Kentaro Hara  <haraken@chromium.org>

        Style recalculation takes too long when adding whitespace text nodes
        https://bugs.webkit.org/show_bug.cgi?id=110786

        Reviewed by Darin Adler.

        // This takes 216 msec.
        for (var i = 0; i < 1500; ++i) {
          document.body.appendChild(document.createTextNode('x'));
          document.body.appendChild(document.createElement('div'));
          document.body.appendChild(document.createTextNode('x'));
        }

        // But this takes 25.3 seconds.
        for (var i = 0; i < 1500; ++i) {
          document.body.appendChild(document.createTextNode(' '));
          document.body.appendChild(document.createElement('div'));
          document.body.appendChild(document.createTextNode(' '));
        }

        The reason is that we do not create renderers for empty text
        nodes and thus we are hitting the worst O(N^2) case in Node::attach().
        (See FIXME in Node::attach().)

        This patch adds a logic to bail out the loop to avoid the O(N^2) case.
        Specifically, the patch bails out the loop if we encounter a text node
        for which we again decided not to create a renderer. This bail out is
        reasonable because the fact that we again decided not to create a renderer
        for the text node indicates that there will be no affect of the result
        of Text::textRendererIsNeeded() of the rest of the sibling nodes.

        Performance test: https://bugs.webkit.org/attachment.cgi?id=190545
        Performance result in Chromium/Linux: 25.3 sec => 48 msec !

        Test: perf/append-text-nodes-without-renderers.html (for performance)
              fast/dynamic/create-renderer-for-whitespace-only-text.html (for correctness)

        The loop was introduced in r29054. We have to make sure that
        all layout tests that were updated in r29054 pass with this patch.
        See http://trac.webkit.org/changeset/29054.

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

2013-03-01  Jason Anderssen  <janderssen@gmail.com>

        Moved markerTextForListItem from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=110939

        Reviewed by Benjamin Poulain.

        TestRunner framework is an old way of testing webkit, it would be
        better to incorporate the testing frame directly into the WebCore itself
        as to make it more compatible with WK2.

        * testing/Internals.cpp:
        (WebCore::Internals::markerTextForListItem):
        (WebCore):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-03-01  Elliott Sprehn  <esprehn@gmail.com>

        Don't leak Documents when using MutationObserver from extensions
        https://bugs.webkit.org/show_bug.cgi?id=111234

        Reviewed by Adam Barth.

        MutationObserverCallback holds a WorldContextHandle which secretly isn't
        a handle to anything when it's for the main world. When it's for a non-main
        world though, like those used in extensions, it becomes a strong reference
        to the v8::Context which results in leaks by creating cycles:

        MutationObserver -> Callback -> World -> Document -> Node -> MutationObserver.

        Instead we should keep a RefPtr to a DOMWrapperWorld in the callback and then
        get the v8::Context from that inside handleEvent.

        Tests: ManualTests/leak-observer-nonmain-world.html

        * bindings/v8/V8Binding.cpp:
        (WebCore::toV8Context): Added overload that takes a DOMWrapperWorld.
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8MutationCallback.cpp:
        (WebCore::V8MutationCallback::V8MutationCallback):
        (WebCore::V8MutationCallback::handleEvent):
        * bindings/v8/V8MutationCallback.h:
        (V8MutationCallback):

2013-03-01  Bear Travis  <betravis@adobe.com>

        [css exclusions] Move ExclusionShapeInsideInfo into RenderBlockRareData
        https://bugs.webkit.org/show_bug.cgi?id=110995

        Reviewed by Julien Chaffraix.

        This patch moves ExclusionShapeInsideInfo into the RenderBlockRareData struct,
        which enables us to move away from the global ExclusionShapeInsideInfo map.
        Some additional refactoring was done to remove ExclusionShapeInsideInfo's
        dependency on InlineIterator, which depended on RenderBlock. This work required
        adding a new LineSegmentIterator struct.

        Refactoring, no new tests.

        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore):
        (WebCore::LineSegmentRange::LineSegmentRange): Moving the InlineIterator
        constructor to the .cpp file, as InlineIterator is now forward declared in
        the .h file.
        (WebCore::ExclusionShapeInsideInfo::isEnabledFor): Moving isEnabledFor to
        the .cpp file, as RenderBlock is now forward declared in the .h file.
        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore):
        (LineSegmentIterator): A simple struct for containing segment positions for
        layout.
        (WebCore::LineSegmentIterator::LineSegmentIterator): Constructor.
        (LineSegmentRange): Transitioning to store LineSegmentIterator.
        (WebCore::LineSegmentRange::LineSegmentRange): Ditto.
        (ExclusionShapeInsideInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed): Destroying a block will now destroy
        its ExclusionShapeInsideInfo, so there is no need to remove it from the map.
        (WebCore):
        (WebCore::RenderBlock::updateExclusionShapeInsideInfoAfterStyleChange): Use
        the RenderBlockRareData struct rather than the global map.
        * rendering/RenderBlock.h:
        (WebCore):
        (WebCore::RenderBlock::ensureExclusionShapeInsideInfo): Ensure an info struct
        is present if the shape-inside style is set.
        (WebCore::RenderBlock::exclusionShapeInsideInfo): Look up the info struct for
        the current block.
        (WebCore::RenderBlock::setExclusionShapeInsideInfo): Update the info struct
        for the current block.
        (RenderBlockRareData): Add the ExclusionShapeInsideInfo member.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForLine): Construct the appropriate offsets during
        layout based on the stored LineSegmentIterators.

2013-03-01  Terry Anderson  <tdanderson@chromium.org>

        EventHandler::handleGestureScrollUpdate() should invoke the user-generated scroll routines 
        so its behavior matches other user-initiated scrolls
        https://bugs.webkit.org/show_bug.cgi?id=109769

        Reviewed by James Robinson.

        To ensure that the scrolling behavior of GestureScrollUpdate events are consistent with
        the scrolling behavior of mousewheel events, use the existing user-generated scroll logic
        instead of calling into RenderLayer::scrollByRecursively(). This patch fixes the bug
        reported in https://bugs.webkit.org/show_bug.cgi?id=109316, where the example page can
        be scrolled using touch but cannot be scrolled using mousewheels.

        Note that this patch does not use any of the mousewheel event-handling code.

        Tests: fast/events/touch/gesture/touch-gesture-noscroll-body-propagated.html
               fast/events/touch/gesture/touch-gesture-noscroll-body-xhidden.html
               fast/events/touch/gesture/touch-gesture-noscroll-body-yhidden.html
               fast/events/touch/gesture/touch-gesture-noscroll-body.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureScrollBegin):
        (WebCore::EventHandler::handleGestureScrollUpdate):
        (WebCore::EventHandler::sendScrollEventToView):
            By calling this function at the start of handleGestureScrollUpdate() in the case
            where |m_scrollGestureHandlingNode| is null, we ensure that the scroll updates
            can still scroll the page itself, if possible.
        (WebCore):
        (WebCore::EventHandler::clearGestureScrollNodes):
        * page/EventHandler.h:
        (EventHandler):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::setHasPreciseScrollingDeltas):

2013-03-01  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Avoid ScriptValue copies in IDBAny
        https://bugs.webkit.org/show_bug.cgi?id=111002

        Reviewed by Adam Barth.

        This avoids some v8 handle thrashing in the long term,
        and protects us against some crashes in the short term.

        The crashes will be fixed in 
        https://bugs.webkit.org/show_bug.cgi?id=110206.

        * Modules/indexeddb/IDBAny.cpp:
        (WebCore::IDBAny::createNull):
        (WebCore::IDBAny::createString):
        (WebCore::IDBAny::IDBAny):
        (WebCore::IDBAny::scriptValue):
        * Modules/indexeddb/IDBAny.h:
        (WebCore::IDBAny::create):
        (IDBAny):
        (WebCore::IDBAny::keyPath):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        (WebCore):

2013-03-01  Victor Carbune  <vcarbune@chromium.org>

        Support padding, margin and border for internal UA cue styling
        https://bugs.webkit.org/show_bug.cgi?id=110703

        Reviewed by Eric Carlson.

        For some particular user agent styling this allows the possibility
        of making the window around the cue text bigger to match some user
        styles (see CaptionUserPreferencesMac::captionsStyleSheetOverride).

        These properties *cannot* be set through by using the ::cue
        pseudo-element and, as specified, are used only internally.

        Note: This patch is identical to the previously commited one,
        as it was rolled back without related tests failing.

        Test: media/track/track-cue-rendering-with-padding.html

        * css/mediaControls.css:
        (video::-webkit-media-text-track-display): Set the CSS box model
        to include in the specified width or height the values of
        padding / margin / border by using -webkit-box-sizing and avoid
        overflow over 100% width because of having these properties set.
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::isOutside): To not interfere with
        the regular WebVTT positioning algorithm, the check is done for
        the absolute content box.
        (WebCore::RenderTextTrackCue::repositionCueSnapToLinesSet): Added
        an extra adjustment step to accomodate vertical padding (and not
        overflow the cue container)

2013-03-01  Andy Estes  <aestes@apple.com>

        REGRESSION (r125809): CFStrings created via StringImpl::createCFString()  might reference freed memory when Objective-C garbage collection is enabled
        https://bugs.webkit.org/show_bug.cgi?id=111219

        Reviewed by Benjamin Poulain.

        StringImpl::createCFString() uses CFStringCreateWithBytesNoCopy() in
        order to create CFString without making an unnecessary copy. In order
        to ensure that the the StringImpl's backing buffer isn't deallocated
        while the CFString is still alive, we use a custom CFAllocator to
        ref/deref the StringImpl at the appropriate times.

        However, custom allocators aren't supported when Objective-C garbage
        collection is enabled, so in this case we use the default CF allocator.
        Since we can't guarantee the lifetime of the StringImpl in this case,
        we should just fall back to copying the string, as we did prior to r125809.

        * platform/text/cf/StringImplCF.cpp:
        (garbageCollectionEnabled): Moved the check for whether garbage
        collection is enabled from StringWrapperCFAllocator::create() to here.
        (WTF::StringWrapperCFAllocator::create): Call garbageCollectionEnabled().
        (WTF::StringImpl::createCFString): If garbage collection is enabled,
        call the variants of CFStringCreate that copy the string.

2013-03-01  Roger Fong  <roger_fong@apple.com>

        Unreviewed AppleWin build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):

2013-03-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Allow sharing the WebCore include list with the Chromium build
        https://bugs.webkit.org/show_bug.cgi?id=110241

        Reviewed by Dirk Pranke.

        * WebCore.gyp/WebCoreGTK.gyp: Added. A skeleton gyp file for WebCoreGTK+.
        * WebCore.gypi: Added shared include directories.

2013-03-01  Alexey Proskuryakov  <ap@apple.com>

        Make in-memory blobs work in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=111132

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        Exported functions now needed by WebKit2, and made some headers Private instead
        of Project.

2013-03-01  Eric Seidel  <eric@webkit.org>

        Threaded HTML Parser has an extra copy of every byte from the network
        https://bugs.webkit.org/show_bug.cgi?id=111135

        Reviewed by Adam Barth.

        Every LayoutTest executes this code in threaded parsing mode.

        * dom/DecodedDataDocumentParser.cpp:
        (WebCore::DecodedDataDocumentParser::appendBytes):
         - Pass ownership of the decoded string to the parser.
        (WebCore::DecodedDataDocumentParser::flush):
         - Same.
        * dom/DecodedDataDocumentParser.h:
        (DecodedDataDocumentParser):
        * dom/Document.cpp:
        (WebCore::Document::setContent):
        * dom/DocumentParser.h:
        (DocumentParser):
        * dom/RawDataDocumentParser.h:
        (WebCore::RawDataDocumentParser::append):
        * html/FTPDirectoryDocument.cpp:
        (FTPDirectoryDocumentParser):
        (WebCore::FTPDirectoryDocumentParser::append):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::append):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::append):
        * html/parser/HTMLViewSourceParser.h:
        (HTMLViewSourceParser):
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::append):
        * html/parser/TextDocumentParser.h:
        (TextDocumentParser):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::append):
        * xml/parser/XMLDocumentParser.h:
        (XMLDocumentParser):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::resumeParsing):

2013-03-01  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Change inRenderFlowThread to follow containing block chain
        https://bugs.webkit.org/show_bug.cgi?id=111206

        Reviewed by Simon Fraser.

        This patch removes inRenderFlowThread and changes enclosingRenderFlowThread()
        to flowThreadContainingBlock(). flowThreadContainingBlock() now follows
        the containing block chain instead of the parent chain when outside of layout.
        (It already did the right thing when called during layout.)
        
        By removing inRenderFlowThread (which was following the parent chain), all
        code that is checking for flow thread containment now correctly uses the
        containing block chain. This allows for content to escape in-flow flow threads
        and do the right thing without asserting.
        
        Test: fast/multicol/positioned-outside-of-columns.html

        * dom/WebKitNamedFlow.cpp:
        (WebCore::inFlowThread):
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeLeftoverAnonymousBlock):
        (WebCore::RenderBlock::collapseAnonymousBoxChild):
        (WebCore::RenderBlock::updateRegionsAndExclusionsLogicalSize):
        (WebCore::RenderBlock::computeRegionRangeForBlock):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::determineLogicalLeftPositionForChild):
        (WebCore::RenderBlock::computeLogicalLocationForFloat):
        (WebCore::RenderBlock::logicalLeftOffsetForContent):
        (WebCore::RenderBlock::logicalRightOffsetForContent):
        (WebCore::RenderBlock::hasNextPage):
        (WebCore::RenderBlock::applyBeforeBreak):
        (WebCore::RenderBlock::applyAfterBreak):
        (WebCore::RenderBlock::pageLogicalTopForOffset):
        (WebCore::RenderBlock::pageLogicalHeightForOffset):
        (WebCore::RenderBlock::pageRemainingLogicalHeightForOffset):
        (WebCore::RenderBlock::adjustForUnsplittableChild):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        (WebCore::RenderBlock::lineWidthForPaginatedLineChanged):
        (WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage):
        (WebCore::RenderBlock::regionAtBlockOffset):
        (WebCore::RenderBlock::setStaticInlinePositionForChild):
        (WebCore::RenderBlock::logicalWidthChangedInRegions):
        (WebCore::RenderBlock::clampToStartAndEndRegions):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::layoutExclusionShapeInsideInfo):
        (WebCore::LineLayoutState::LineLayoutState):
        (WebCore::LineLayoutState::flowThread):
        (WebCore::LineLayoutState::setFlowThread):
        (LineLayoutState):
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::linkToEndLineIfNeeded):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::checkPaginationAndFloatsAtEndLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clearRenderBoxRegionInfo):
        (WebCore::RenderBox::renderBoxRegionInfo):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectInFlowRegion):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        * rendering/RenderLayer.cpp:
        (WebCore::accumulateOffsetTowardsAncestor):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::canBeComposited):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::locateFlowThreadContainingBlock):
        (WebCore::RenderObject::containerForRepaint):
        (WebCore::RenderObject::willBeRemovedFromTree):
        (WebCore::RenderObject::removeFromRenderFlowThread):
        (WebCore::RenderObject::removeFromRenderFlowThreadRecursive):
        * rendering/RenderObject.h:
        (RenderObject):
        (WebCore::RenderObject::flowThreadContainingBlock):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setObjectStyleInRegion):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::addChild):
        (WebCore::RenderView::initializeLayoutState):
        (WebCore::RenderView::setSelection):
        * rendering/RenderView.h:
        (WebCore::RenderView::pushLayoutState):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::setContainingRegion):

2013-02-28  Sam Weinig  <sam@webkit.org>

        Add SPI for marking a WebView as doing things on behalf of another process
        https://bugs.webkit.org/show_bug.cgi?id=111125

        Reviewed by Alexey Proskuryakov.

        * platform/network/NetworkingContext.h:
        (NetworkingContext):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        Set the sourceApplicationAuditData on the URL connection if available.

2013-03-01  Brent Fulgham  <bfulgham@webkit.org>

        [Windows] Unreviewed VS2010 build fix.

        * WebCore.vcxproj/WebCore.vcxproj: Add missing TimelineTraceEventProcessor
          files to the project.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2013-03-01  Bear Travis  <betravis@adobe.com>

        [css exclusions] setting shape-inside on a parent does not relayout child blocks' inline content
        https://bugs.webkit.org/show_bug.cgi?id=108128

        Reviewed by David Hyatt.

        Ensure that blocks lay out when their parent's shape-inside changes.
        ExclusionShapeInsideInfo now stores an additional flag indicating whether
        the shape has changed and its block's children require layout. Each block
        can look up the flag via LayoutState to determine whether it needs to lay
        out its children.

        Test: fast/exclusions/shape-inside/shape-inside-dynamic-nested.html

        * rendering/ExclusionShapeInfo.h:
        (WebCore::ExclusionShapeInfo::shapeSizeDirty): Add a method to determine
        if the shape has changed.
        (ExclusionShapeInfo):
        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::setNeedsLayout): Set the flag indicating
        layout is necessary.
        (WebCore::ExclusionShapeInsideInfo::needsLayout): Retrieve the layout flag.
        (ExclusionShapeInsideInfo):
        (WebCore::ExclusionShapeInsideInfo::ExclusionShapeInsideInfo): Initialize
        the layout flag.
        * rendering/RenderBlock.cpp:
        (WebCore::exclusionInfoRequiresRelayout): Return true if the shape info should
        cause a relayout. Also update the needsLayout flag on the ExclusionShapeInsideInfo.
        (WebCore):
        (WebCore::RenderBlock::updateRegionsAndExclusionsLogicalSize): Return a boolean
        indicating whether regions or exclusions updates should cause a relayout.
        (WebCore::RenderBlock::layoutBlock): Relayout children if the shape inside has
        changed.
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutExclusionShapeInsideInfo): Changing to be a
        class method.
        (WebCore::LineWidth::LineWidth): Changing to use class method.
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Ditto.
        (WebCore::constructBidiRunsForLine): Ditto.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Ditto.
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): Ditto.

2013-03-01  Uday Kiran  <udaykiran@motorola.com>

        getComputedStyle not implemented for -webkit-column-rule shorthand
        https://bugs.webkit.org/show_bug.cgi?id=111203

        Reviewed by Alexis Menard.

        Implement getComputedStyle for -webkit-column-rule property.

        Test: fast/css/getComputedStyle/getComputedStyle-column-rule.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2013-02-28  David Hyatt  <hyatt@apple.com>

        REGRESSION(r144318) 1-7% perf. regression on SVG/SvgHitTesting
        https://bugs.webkit.org/show_bug.cgi?id=111117

        Make sure the allocated vector has a capacity of 1, since that is
        far and away the most common case.

        Reviewed by Andreas Kling.

        * rendering/RenderFlowThread.h:
        (WebCore):
        * rendering/RenderLayer.h:
        (WebCore):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderRegion.h:
        (WebCore):
        (WebCore::RenderRegion::collectLayerFragments):

2013-03-01  Enrica Casucci  <enrica@apple.com>

        Crash at WebCore::SharedBuffer::hasPlatformData writing an image to the pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=111211.
        <rdar://problem/8772758>

        Reviewed by Ryosuke Niwa.

        This is a speculative fix since we don't have a solid repro case.
        Adding null check every time we build a SharedBuffer from an NSData
        we have obtained manipulating data from the pasteboard.

        * platform/mac/PasteboardMac.mm:
        (WebCore::writeFileWrapperAsRTFDAttachment):
        (WebCore::Pasteboard::writeImage):

2013-03-01  Enrica Casucci  <enrica@apple.com>

        Crash at WebCore::SharedBuffer::hasPlatformData during paste.
        https://bugs.webkit.org/show_bug.cgi?id=111207.
        <rdar://problem/13024528>

        Reviewed by Ryosuke Niwa.

        This is a speculative fix since we don't have a solid repro case.
        Adding null check every time we get a SharedBuffer from the pasteboard.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::plainText):
        (WebCore::documentFragmentWithRTF):

2013-03-01  Alexey Proskuryakov  <ap@apple.com>

        Build fix for builds with BLOB disabled. This fixes it for me on Mac at least.

        * platform/network/BlobRegistryImpl.cpp:

2013-03-01  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Session cookies should not be persistent.
        https://bugs.webkit.org/show_bug.cgi?id=111060

        Reviewed by Brent Fulgham.

        Curl saves both persistent cookies, and session cookies to the cookie file.
        The session cookies should be deleted before starting a new session.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::ResourceHandleManager): Call method to initialize cookie session.
        (WebCore::ResourceHandleManager::initCookieSession): Added method to initialize cookie session.
        * platform/network/curl/ResourceHandleManager.h: Added method to initialize cookie session.

2013-03-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Navigator should show tree element for each folder in the source path.
        https://bugs.webkit.org/show_bug.cgi?id=108943

        Reviewed by Pavel Feldman.

        NavigatorView now renders tree element for each folder in uiSourceCode uri.
        Merging several folders into one tree elememnt when folder has only one folder as a child is supported.
        ScriptsNavigator has horizontal scroll now.
        Projects are shown in ScriptsNavigator by their displayName. This allows us to show several root file system folders
        with the same name in the navigator (e.g. 'Source/WebCore/inspector' and 'LayoutTests/inspector').

        Test: inspector/debugger/navigator-view.html: Renamed from scripts-file-selector.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView):
        (WebInspector.NavigatorView.iconClassForType):
        (WebInspector.NavigatorView.prototype.addUISourceCode):
        (WebInspector.NavigatorView.prototype._getProjectNode):
        (WebInspector.NavigatorView.prototype._createProjectNode):
        (WebInspector.NavigatorView.prototype._getOrCreateProjectNode):
        (WebInspector.NavigatorView.prototype._getFolderNode):
        (WebInspector.NavigatorView.prototype._createFolderNode):
        (WebInspector.NavigatorView.prototype._getOrCreateFolderNode):
        (WebInspector.NavigatorView.prototype._getUISourceCodeParentNode):
        (WebInspector.NavigatorView.prototype._getOrCreateUISourceCodeParentNode):
        (WebInspector.NavigatorView.prototype.revealUISourceCode):
        (WebInspector.NavigatorView.prototype.removeUISourceCode):
        (WebInspector.NavigatorView.prototype.rename):
        (WebInspector.NavigatorView.prototype.reset):
        (.typeWeight):
        (WebInspector.NavigatorTreeOutline._treeElementsCompare):
        (WebInspector.BaseNavigatorTreeElement):
        (WebInspector.BaseNavigatorTreeElement.prototype.type):
        (WebInspector.NavigatorFolderTreeElement):
        (WebInspector.NavigatorFolderTreeElement.prototype.onpopulate):
        (WebInspector.NavigatorFolderTreeElement.prototype.onattach):
        (WebInspector.NavigatorSourceTreeElement):
        (WebInspector.NavigatorTreeNode):
        (WebInspector.NavigatorTreeNode.prototype.treeElement):
        (WebInspector.NavigatorTreeNode.prototype.dispose):
        (WebInspector.NavigatorTreeNode.prototype.isRoot):
        (WebInspector.NavigatorTreeNode.prototype.hasChildren):
        (WebInspector.NavigatorTreeNode.prototype.populate):
        (WebInspector.NavigatorTreeNode.prototype.wasPopulated):
        (WebInspector.NavigatorTreeNode.prototype.didAddChild):
        (WebInspector.NavigatorTreeNode.prototype.willRemoveChild):
        (WebInspector.NavigatorTreeNode.prototype.isPopulated):
        (WebInspector.NavigatorTreeNode.prototype.isEmpty):
        (WebInspector.NavigatorTreeNode.prototype.child):
        (WebInspector.NavigatorTreeNode.prototype.children):
        (WebInspector.NavigatorTreeNode.prototype.appendChild):
        (WebInspector.NavigatorTreeNode.prototype.removeChild):
        (WebInspector.NavigatorTreeNode.prototype.reset):
        (WebInspector.NavigatorRootTreeNode):
        (WebInspector.NavigatorRootTreeNode.prototype.isRoot):
        (WebInspector.NavigatorRootTreeNode.prototype.treeElement):
        (WebInspector.NavigatorRootTreeNode.prototype.wasPopulated):
        (WebInspector.NavigatorRootTreeNode.prototype.didAddChild):
        (WebInspector.NavigatorRootTreeNode.prototype.willRemoveChild):
        (WebInspector.NavigatorUISourceCodeTreeNode):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.treeElement):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.updateTitle):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.hasChildren):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.dispose):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype._titleChanged):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype._workingCopyChanged):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype._workingCopyCommitted):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype._formattedChanged):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.reveal):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.rename.commitHandler):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.rename.cancelHandler):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.rename.afterEditing):
        (WebInspector.NavigatorUISourceCodeTreeNode.prototype.rename):
        (WebInspector.NavigatorFolderTreeNode):
        (WebInspector.NavigatorFolderTreeNode.prototype.treeElement):
        (WebInspector.NavigatorFolderTreeNode.prototype._createTreeElement):
        (WebInspector.NavigatorFolderTreeNode.prototype.wasPopulated):
        (WebInspector.NavigatorFolderTreeNode.prototype._addChildrenRecursive):
        (WebInspector.NavigatorFolderTreeNode.prototype._shouldMerge):
        (WebInspector.NavigatorFolderTreeNode.prototype.didAddChild):
        (WebInspector.NavigatorFolderTreeNode.prototype.willRemoveChild):
        * inspector/front-end/ScriptsNavigator.js:
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleProjectDelegate.prototype.displayName):
        * inspector/front-end/navigatorView.css:
        (.navigator > ol):
        (.navigator .base-navigator-tree-element-title):
        (.navigator-tabbed-pane .navigator-container):

2013-03-01  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Upstream BlackBerry::Platform::Graphics::GraphicsContext integration related changes in platform/graphics/blackberry
        https://bugs.webkit.org/show_bug.cgi?id=111072

        Reviewed by Rob Buis.

        BlackBerry PR 293208

        This patch contains contributions from many members of the BlackBerry
        WebKit team:

        Rob Buis
        Robin Cao
        Michael Carmody
        Max Feil
        Eli Fidler
        Antonio Gomes
        Jacky Jiang
        Mike Lattanzio
        Yong Li
        Andrew Lo
        Maxim Mogilnitsky
        Joshua Netterfield
        Arvid Nilsson
        Jakob Petsovits
        Konrad Piascik
        Jeff Rogers
        Artem Simonov
        Filip Spacek
        George Staikos
        Cosmin Truta

        Covered by existing tests.

        * platform/graphics/blackberry/CanvasLayerWebKitThread.cpp:
        (WebCore::CanvasLayerWebKitThread::deleteTextures):
        (CanvasLayerCompositingThreadClient):
        (WebCore::CanvasLayerCompositingThreadClient::layerCompositingThreadDestroyed):
        (WebCore::CanvasLayerCompositingThreadClient::layerVisibilityChanged):
        (WebCore::CanvasLayerCompositingThreadClient::uploadTexturesIfNeeded):
        (WebCore::CanvasLayerCompositingThreadClient::clearBuffer):
        (WebCore):
        (WebCore::CanvasLayerCompositingThreadClient::CanvasLayerCompositingThreadClient):
        (WebCore::CanvasLayerCompositingThreadClient::drawTextures):
        (WebCore::CanvasLayerCompositingThreadClient::deleteTextures):
        (WebCore::CanvasLayerCompositingThreadClient::commitPendingTextureUploads):
        (WebCore::CanvasLayerWebKitThread::CanvasLayerWebKitThread):
        (WebCore::CanvasLayerWebKitThread::~CanvasLayerWebKitThread):
        (WebCore::CanvasLayerWebKitThread::clearBuffer):
        * platform/graphics/blackberry/CanvasLayerWebKitThread.h:
        (WebCore):
        (WebCore::CanvasLayerWebKitThread::create):
        (CanvasLayerWebKitThread):
        * platform/graphics/blackberry/DisplayRefreshMonitorBlackBerry.cpp:
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        * platform/graphics/blackberry/DrawingBufferBlackBerry.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        (WebCore::DrawingBuffer::platformLayer):
        * platform/graphics/blackberry/EGLImageLayerCompositingThreadClient.cpp:
        (WebCore::EGLImageLayerCompositingThreadClient::~EGLImageLayerCompositingThreadClient):
        (WebCore::EGLImageLayerCompositingThreadClient::uploadTexturesIfNeeded):
        (WebCore::EGLImageLayerCompositingThreadClient::drawTextures):
        (WebCore::EGLImageLayerCompositingThreadClient::deleteTextures):
        (WebCore::EGLImageLayerCompositingThreadClient::bindContentsTexture):
        (WebCore::EGLImageLayerCompositingThreadClient::setTextureAccessor):
        * platform/graphics/blackberry/EGLImageLayerCompositingThreadClient.h:
        (Graphics):
        (EGLImageLayerCompositingThreadClient):
        (WebCore::EGLImageLayerCompositingThreadClient::EGLImageLayerCompositingThreadClient):
        * platform/graphics/blackberry/EGLImageLayerWebKitThread.cpp:
        (WebCore::EGLImageLayerWebKitThread::EGLImageLayerWebKitThread):
        (WebCore::EGLImageLayerWebKitThread::~EGLImageLayerWebKitThread):
        (WebCore::EGLImageLayerWebKitThread::updateFrontBuffer):
        (WebCore::EGLImageLayerWebKitThread::deleteFrontBuffer):
        (WebCore::EGLImageLayerWebKitThread::commitPendingTextureUploads):
        (WebCore::EGLImageLayerWebKitThread::createTextureIfNeeded):
        (WebCore::EGLImageLayerWebKitThread::blitToFrontBuffer):
        * platform/graphics/blackberry/EGLImageLayerWebKitThread.h:
        (Graphics):
        (EGLImageLayerWebKitThread):
        * platform/graphics/blackberry/FloatRectBlackBerry.cpp:
        (WebCore::FloatRect::normalized):
        (WebCore):
        * platform/graphics/blackberry/FontCacheBlackberry.cpp: Removed.
        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::paintToCanvas):
        (WebCore::GraphicsContext3D::getImageData):
        (WebCore):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp:
        (WebCore::GraphicsLayerBlackBerry::GraphicsLayerBlackBerry):
        (WebCore::GraphicsLayerBlackBerry::setBackgroundColor):
        (WebCore::GraphicsLayerBlackBerry::clearBackgroundColor):
        (WebCore):
        (WebCore::GraphicsLayerBlackBerry::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerBlackBerry::setNeedsDisplay):
        (WebCore::GraphicsLayerBlackBerry::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerBlackBerry::updateLayerBackgroundColor):
        (WebCore::GraphicsLayerBlackBerry::setupContentsLayer):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.h:
        (GraphicsLayerBlackBerry):
        (WebCore::GraphicsLayerBlackBerry::notifySyncRequired):
        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        (WebCore):
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/blackberry/InstrumentedPlatformCanvas.h: Removed.
        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        (WebCore::LayerCompositingThread::drawTextures):
        (WebCore::LayerCompositingThread::drawSurface):
        (WebCore::LayerCompositingThread::contentsTexture):
        (WebCore::LayerCompositingThread::commitPendingTextureUploads):
        (WebCore):
        * platform/graphics/blackberry/LayerCompositingThread.h:
        (Graphics):
        (LayerCompositingThread):
        * platform/graphics/blackberry/LayerCompositingThreadClient.h:
        (Graphics):
        (WebCore):
        (LayerCompositingThreadClient):
        (WebCore::LayerCompositingThreadClient::contentsTexture):
        (WebCore::LayerCompositingThreadClient::commitPendingTextureUploads):
        * platform/graphics/blackberry/LayerData.h:
        (WebCore::LayerData::LayerData):
        (WebCore::LayerData::contentsResolutionIndependent):
        (LayerData):
        (WebCore::LayerData::layerProgram):
        (WebCore::LayerData::isContainerForFixedPositionLayers):
        (WebCore::LayerData::isFixedToTop):
        (WebCore::LayerData::isFixedToLeft):
        (WebCore::LayerData::frameVisibleRect):
        (WebCore::LayerData::frameContentsSize):
        (WebCore::LayerData::contentsScale):
        * platform/graphics/blackberry/LayerFilterRenderer.cpp:
        (WebCore::LayerFilterRendererAction::LayerFilterRendererAction):
        (WebCore::LayerFilterRenderer::initializeSharedGLObjects):
        (WebCore::LayerFilterRenderer::ping):
        (WebCore::LayerFilterRenderer::pong):
        (WebCore::LayerFilterRenderer::pushSnapshot):
        (WebCore::LayerFilterRenderer::popSnapshot):
        (WebCore::LayerFilterRenderer::applyActions):
        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore):
        (WebCore::LayerRenderer::LayerRenderer):
        (WebCore::LayerRenderer::~LayerRenderer):
        (WebCore::LayerRenderer::setViewport):
        (WebCore::LayerRenderer::compositeLayers):
        (WebCore::LayerRenderer::compositeBuffer):
        (WebCore::LayerRenderer::drawColor):
        (WebCore::LayerRenderer::useSurface):
        (WebCore::LayerRenderer::drawLayersOnSurfaces):
        (WebCore::glRound):
        (WebCore::LayerRenderer::toOpenGLWindowCoordinates):
        (WebCore::LayerRenderer::drawDebugBorder):
        (WebCore::LayerRenderer::drawHolePunchRect):
        (WebCore::LayerRenderer::updateLayersRecursive):
        (WebCore::LayerRenderer::compositeLayersRecursive):
        (WebCore::LayerRenderer::createProgram):
        (WebCore::LayerRenderer::useProgram):
        (WebCore::LayerRenderer::useLayerProgram):
        * platform/graphics/blackberry/LayerRenderer.h:
        (LayerRenderer):
        * platform/graphics/blackberry/LayerRendererSurface.cpp:
        (WebCore::LayerRendererSurface::ensureTexture):
        * platform/graphics/blackberry/LayerTile.cpp:
        (WebCore::LayerTile::LayerTile):
        (WebCore::LayerTile::setContents):
        (WebCore::LayerTile::updateContents):
        * platform/graphics/blackberry/LayerTile.h:
        (LayerTile):
        (WebCore::LayerTile::renderState):
        (WebCore::LayerTile::needsRender):
        (WebCore::LayerTile::setNeedsRender):
        (WebCore::LayerTile::setRenderPending):
        (WebCore::LayerTile::setRenderDone):
        * platform/graphics/blackberry/LayerTileIndex.h:
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore):
        (WebCore::defaultTileSize):
        (WebCore::LayerTiler::LayerTiler):
        (WebCore::LayerTiler::updateTextureContentsIfNeeded):
        (WebCore::LayerTiler::createBuffer):
        (WebCore::LayerTiler::willCommit):
        (WebCore::LayerTiler::commitPendingTextureUploads):
        (WebCore::LayerTiler::layerVisibilityChanged):
        (WebCore::LayerTiler::uploadTexturesIfNeeded):
        (WebCore::LayerTiler::processTextureJob):
        (WebCore::LayerTiler::addTileJob):
        (WebCore::LayerTiler::performTileJob):
        (WebCore::LayerTiler::drawTile):
        (WebCore::LayerTiler::drawTextures):
        (WebCore::LayerTiler::pruneTextures):
        (WebCore::LayerTiler::updateTileSize):
        (WebCore::LayerTiler::setNeedsBacking):
        (WebCore::LayerTiler::contentsTexture):
        * platform/graphics/blackberry/LayerTiler.h:
        (WebCore::LayerTiler::tileSize):
        (LayerTiler):
        (WebCore::LayerTiler::TextureJob::TextureJob):
        (WebCore::LayerTiler::TextureJob::setContents):
        (WebCore::LayerTiler::TextureJob::updateContents):
        (TextureJob):
        (WebCore::LayerTiler::needsRender):
        (WebCore::LayerTiler::removeUpdateContentsJobs):
        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::LayerWebKitThread):
        (WebCore::LayerWebKitThread::~LayerWebKitThread):
        (WebCore::LayerWebKitThread::paintContents):
        (WebCore::LayerWebKitThread::commitPendingTextureUploads):
        (WebCore::LayerWebKitThread::setContents):
        (WebCore::LayerWebKitThread::setNeedsCommit):
        (WebCore::LayerWebKitThread::notifyAnimationsStarted):
        (WebCore::LayerWebKitThread::commitOnWebKitThread):
        (WebCore::LayerWebKitThread::startAnimations):
        (WebCore::LayerWebKitThread::updateTextureContents):
        (WebCore::LayerWebKitThread::commitOnCompositingThread):
        (WebCore::LayerWebKitThread::addSublayer):
        (WebCore):
        (WebCore::LayerWebKitThread::addOverlay):
        (WebCore::LayerWebKitThread::insert):
        (WebCore::LayerWebKitThread::removeFromSuperlayer):
        (WebCore::LayerWebKitThread::removeSublayerOrOverlay):
        (WebCore::LayerWebKitThread::remove):
        (WebCore::LayerWebKitThread::replaceSublayer):
        (WebCore::LayerWebKitThread::filtersCanBeComposited):
        (WebCore::LayerWebKitThread::removeAll):
        (WebCore::LayerWebKitThread::setSublayers):
        (WebCore::LayerWebKitThread::updateLayerHierarchy):
        (WebCore::LayerWebKitThread::setIsMask):
        (WebCore::LayerWebKitThread::releaseLayerResources):
        * platform/graphics/blackberry/LayerWebKitThread.h:
        (WebCore::LayerWebKitThread::insertSublayer):
        (LayerWebKitThread):
        (WebCore::LayerWebKitThread::isMask):
        (WebCore::LayerWebKitThread::removeAllSublayers):
        (WebCore::LayerWebKitThread::setFixedPosition):
        (WebCore::LayerWebKitThread::setIsContainerForFixedPositionLayers):
        (WebCore::LayerWebKitThread::setFixedToTop):
        (WebCore::LayerWebKitThread::setFixedToLeft):
        (WebCore::LayerWebKitThread::setFrameVisibleRect):
        (WebCore::LayerWebKitThread::setFrameContentsSize):
        (WebCore::LayerWebKitThread::setLayerProgram):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
        (WebCore::MediaPlayerPrivate::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivate::prepareForRendering):
        (WebCore):
        (WebCore::MediaPlayerPrivate::resizeSourceDimensions):
        (WebCore::MediaPlayerPrivate::percentLoaded):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::waitMetadataTimerFired):
        (WebCore::MediaPlayerPrivate::onAuthenticationNeeded):
        (WebCore::MediaPlayerPrivate::notifyChallengeResult):
        (WebCore::MediaPlayerPrivate::isProcessingUserGesture):
        (WebCore::loadBufferingImageData):
        (WebCore::MediaPlayerPrivate::setBuffering):
        (WebCore::MediaPlayerPrivate::drawBufferingAnimation):
        (WebCore::MediaPlayerPrivate::onConditionallyEnterFullscreen):
        (WebCore::MediaPlayerPrivate::onExitFullscreen):
        (WebCore::MediaPlayerPrivate::onCreateHolePunchRect):
        (WebCore::MediaPlayerPrivate::onDestroyHolePunchRect):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (BlackBerry):
        (Platform):
        (Graphics):
        (MediaPlayerPrivate):
        * platform/graphics/blackberry/PluginLayerWebKitThread.cpp:
        (WebCore::PluginLayerWebKitThread::setPluginView):
        * platform/graphics/blackberry/Texture.cpp:
        (WebCore::Texture::Texture):
        (WebCore::Texture::updateContents):
        (WebCore::Texture::setContentsToColor):
        (WebCore::Texture::protect):
        * platform/graphics/blackberry/Texture.h:
        (Texture):
        (WebCore::Texture::textureId):
        (WebCore::Texture::isDirty):
        (WebCore::Texture::hasTexture):
        (WebCore::Texture::sizeInBytes):
        (WebCore::Texture::setTextureId):
        (WebCore::Texture::setSize):
        * platform/graphics/blackberry/TextureCacheCompositingThread.cpp:
        (WebCore::TextureCacheCompositingThread::allocateTextureId):
        (WebCore::freeTextureId):
        (WebCore::TextureCacheCompositingThread::collectGarbage):
        (WebCore::TextureCacheCompositingThread::textureSizeInBytesChanged):
        (WebCore):
        (WebCore::TextureCacheCompositingThread::textureDestroyed):
        (WebCore::TextureCacheCompositingThread::install):
        (WebCore::TextureCacheCompositingThread::resizeTexture):
        (WebCore::TextureCacheCompositingThread::evict):
        (WebCore::TextureCacheCompositingThread::prune):
        (WebCore::TextureCacheCompositingThread::clear):
        (WebCore::TextureCacheCompositingThread::textureForTiledContents):
        (WebCore::TextureCacheCompositingThread::updateContents):
        * platform/graphics/blackberry/TextureCacheCompositingThread.h:
        (TextureCacheCompositingThread):
        (WebCore::TextureCacheCompositingThread::ZombieTexture::ZombieTexture):
        (ZombieTexture):
        * platform/graphics/blackberry/skia/ImageBufferDataSkia.h: Removed.
        * platform/graphics/blackberry/skia/PlatformSupport.cpp: Removed.
        * platform/graphics/blackberry/skia/PlatformSupport.h: Removed.

2013-03-01  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix the Mac build with the current qtbase/dev branch
        https://bugs.webkit.org/show_bug.cgi?id=111190

        Reviewed by Allan Sandfeld Jensen.

        QMAKE_MACOSX_DEPLOYMENT_TARGET now influences
        __MAC_OS_X_VERSION_MIN_REQUIRED through -mmacosx-version-min after
        changes in qtbase to support iOS.

        Having only WebCore defining it to 10.5 would create a mismatch of
        ENABLE_THREADING_LIBDISPATCH with WTF to cause undefined symbols
        while linking both together at the end.

        Fix it by removing the statement which isn't needed anymore.
        qtbase/mkspecs/common/mac-minimum-version.conf already defines
        10.6 as the minimum Mac version.

        * Target.pri:

2013-03-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Snippets renaming is broken.
        https://bugs.webkit.org/show_bug.cgi?id=111181

        Reviewed by Alexander Pavlov.

        * inspector/front-end/NavigatorView.js:
        * inspector/front-end/ScriptSnippetModel.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.set _fileRenamed):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.rename):

2013-03-01  David Hyatt  <hyatt@apple.com>

        Fix a misspelled word in RenderObject.h. staticly -> statically.

        Reviewed by Dean Jackson.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::RenderObjectBitfields::isPositioned):

2013-03-01  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Change flow thread containment to be a state.
        https://bugs.webkit.org/show_bug.cgi?id=111110

        Change m_inRenderFlowThread from a single bit to an actual state. This
        will let us track whether we're inside a multicolumn (in-flow) flow thread
        or a named (out-of-flow) flow thread. In the former case, we're going to have
        to do more work to maintain this state, but for now I've kept all the logic
        the same just for the initial landing.

        Reviewed by Andreas Kling.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::createRendererForElementIfNeeded):
        (WebCore::NodeRenderingContext::createRendererForTextIfNeeded):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clone):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setFlowThreadStateIncludingDescendants):
        (WebCore::RenderObject::removeFromRenderFlowThreadRecursive):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setParent):
        (RenderObject):
        (WebCore::RenderObject::inRenderFlowThread):
        (WebCore::RenderObject::flowThreadState):
        (WebCore::RenderObject::setFlowThreadState):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (RenderObjectBitfields):
        (WebCore::RenderObject::RenderObjectBitfields::flowThreadState):
        (WebCore::RenderObject::RenderObjectBitfields::setFlowThreadState):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::addChild):
        
2013-03-01  Jessie Berlin  <jberlin@apple.com>

        Build fix.

        Roll out r144431 because it was a build fix for r144422, which was rolled out in r144446.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:

2013-03-01  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r144358): Add UNUSED_PARAM() macros to WebCore::Extensions3DOpenGL::drawBuffersEXT()
        <http://webkit.org/b/109331>

        Fixes the following build failures:

            Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp:218:51: error: unused parameter 'n' [-Werror,-Wunused-parameter]
            void Extensions3DOpenGL::drawBuffersEXT(GC3Dsizei n, const GC3Denum* bufs)
                                                              ^
            Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp:218:70: error: unused parameter 'bufs' [-Werror,-Wunused-parameter]
            void Extensions3DOpenGL::drawBuffersEXT(GC3Dsizei n, const GC3Denum* bufs)
                                                                                 ^
            2 errors generated.

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::drawBuffersEXT): Add UNUSED_PARAM()
        macros.

2013-03-01  Dan Carney  <dcarney@google.com>

        [v8] ScriptValue has dangerous copy semantics
        https://bugs.webkit.org/show_bug.cgi?id=110206

        Reviewed by Kentaro Hara.

        Update ScriptValue to used a SharedPersistent,
        making it impossible to return dead references.

        No new tests. No change in functionality.

        * bindings/v8/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore::ScriptValue::getString):
        (WebCore::ScriptValue::toString):
        (WebCore::ScriptValue::toInspectorValue):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::operator=):
        (WebCore::ScriptValue::operator==):
        (WebCore::ScriptValue::isEqual):
        (WebCore::ScriptValue::isFunction):
        (WebCore::ScriptValue::isNull):
        (WebCore::ScriptValue::isUndefined):
        (WebCore::ScriptValue::isObject):
        (WebCore::ScriptValue::hasNoValue):
        (WebCore::ScriptValue::clear):
        (ScriptValue):
        (WebCore::ScriptValue::v8Value):
        (WebCore::ScriptValue::v8ValueRaw):
        * bindings/v8/SharedPersistent.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAttrGetterCustom):

2013-03-01  Julien Chaffraix  <jchaffraix@webkit.org>

        Add FeatureObserver for marquee and reflection
        https://bugs.webkit.org/show_bug.cgi?id=111118

        Reviewed by Simon Fraser.

        Refactoring covered by existing tests.

        * page/FeatureObserver.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):
        Added some instrumentation for reflection and marquee as they are both prefixed and this would help
        to know their popularity on the web. Marquee was split between <marquee> (HTMLMarqueeElement) and 
        overflow: -webkit-marquee (CSSOverflowMarquee).

2013-03-01  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Introduce opaque SecurityOrigin string identifiers in the frontend
        https://bugs.webkit.org/show_bug.cgi?id=111165

        Reviewed by Vsevolod Vlasov.

        A plain string security origin value has been replaced by WebInspector.SecurityOrigin all over the code,
        containing a URL (which holds a stringified security origin) and an identifier (which is now used
        as a key in place of the stringified security origin in various maps). To avoid the ResourceTreeModel
        code clutter, the security origin tracking code has been extracted into a separate type,
        WebInspector.SecurityOriginTracker, which works as a helper on the ResourceTreeModel.

        No new tests, as it is a refactoring.

        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.storageId):
        (WebInspector.DOMStorage.prototype.id):
        (WebInspector.DOMStorage.prototype.getItems):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        (WebInspector.DOMStorageModel.prototype._securityOriginAdded):
        (WebInspector.DOMStorageModel.prototype._securityOriginRemoved):
        (WebInspector.DOMStorageModel.prototype._storageKey):
        * inspector/front-end/ExtensionAuditCategory.js:
        * inspector/front-end/FileSystemModel.js:
        (WebInspector.FileSystemModel.prototype._reset):
        (WebInspector.FileSystemModel.prototype._securityOriginAdded):
        (WebInspector.FileSystemModel.prototype._securityOriginRemoved):
        (WebInspector.FileSystemModel.prototype._addOrigin):
        (WebInspector.FileSystemModel.prototype._removeOrigin):
        (WebInspector.FileSystemModel.prototype._requestFileSystemRoot):
        (WebInspector.FileSystemModel.prototype._fileSystemRootReceived):
        (WebInspector.FileSystemModel.prototype._removeFileSystem):
        (WebInspector.FileSystemModel.FileSystem.prototype.get name):
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel.prototype._reset):
        (WebInspector.IndexedDBModel.prototype.refreshDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._securityOriginAdded):
        (WebInspector.IndexedDBModel.prototype._securityOriginRemoved):
        (WebInspector.IndexedDBModel.prototype._addOrigin):
        (WebInspector.IndexedDBModel.prototype._removeOrigin):
        (WebInspector.IndexedDBModel.prototype._updateOriginDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._loadDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._loadDatabase):
        (WebInspector.IndexedDBModel.prototype.):
        (WebInspector.IndexedDBModel.prototype._requestData):
        (WebInspector.IndexedDBModel.DatabaseId.prototype.equals):
        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDatabaseView.prototype._refreshDatabase):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._addFrame):
        (WebInspector.ResourceTreeModel.prototype.securityOriginForId):
        (WebInspector.ResourceTreeModel.prototype.securityOrigins):
        (WebInspector.ResourceTreeModel.prototype._handleMainFrameDetached):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeModel.SecurityOriginTracker):
        (WebInspector.ResourceTreeModel.SecurityOriginTracker.prototype._addSecurityOrigin):
        (WebInspector.ResourceTreeModel.SecurityOriginTracker.prototype._removeSecurityOrigin):
        (WebInspector.ResourceTreeModel.SecurityOriginTracker.prototype._bindSecurityOrigin):
        (WebInspector.ResourceTreeModel.SecurityOriginTracker.prototype._unbindSecurityOrigin):
        (WebInspector.ResourceTreeModel.SecurityOriginTracker.prototype._detachMainFrame):
        (WebInspector.ResourceTreeModel.SecurityOriginTracker.prototype._securityOriginForId):
        (WebInspector.ResourceTreeModel.SecurityOriginTracker.prototype._securityOrigins):
        (WebInspector.ResourceTreeFrame.prototype._navigate):
        (WebInspector.SecurityOrigin.prototype.id):
        (WebInspector.SecurityOrigin.prototype.url):
        (WebInspector.SecurityOrigin.prototype.uiTitle):
        (WebInspector.SecurityOrigin.prototype.toProtocol):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.IDBDatabaseTreeElement):
        (WebInspector.IDBDatabaseTreeElement.prototype.get itemURL):
        (WebInspector.IDBObjectStoreTreeElement.prototype.get itemURL):
        (WebInspector.IDBIndexTreeElement.prototype.get itemURL):
        (WebInspector.DOMStorageTreeElement):
        (WebInspector.DOMStorageTreeElement.prototype.get itemURL):
        (WebInspector.FileSystemTreeElement):

2013-03-01  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Timeline] Show "curtains" when mouse is over CPU bar.
        https://bugs.webkit.org/show_bug.cgi?id=108930

        Reviewed by Pavel Feldman.

        This feature will help developers to focus on events
        that caused CPU bar.

        * inspector/front-end/Popover.js: Added "arrowDirection" parameter.
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid): Added "curtains".
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._mouseMove): Show/hide "curtains"
        when mouse is over CPU bar.
        * inspector/front-end/timelinePanel.css: Added "curtains" style rules.

2013-03-01  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Implement navigation to UI locations of property names/values in the source code
        Relanding fixed r144449.
        https://bugs.webkit.org/show_bug.cgi?id=105285

        Reviewed by Vsevolod Vlasov.

        Users can now Ctrl/Cmd-click CSS property names/values whose UI locations are found in
        an external stylesheet/sass/other file. Inline stylesheets are not navigable,
        since their start position is not detectable inside the surrounding HTML as of yet.

        No new tests, a UI change.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSRule.prototype.isSourceNavigable): Whether the rule contains reliable source code information.
        (WebInspector.CSSProperty.prototype.uiLocation): Returns a UILocation for the property name of value.
        * inspector/front-end/StylesSidebarPane.js: Add navigation code.
        (WebInspector.StylesSidebarPane.prototype._innerRebuildUpdate):
        (WebInspector.StylePropertiesSection):

2013-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144449.
        http://trac.webkit.org/changeset/144449
        https://bugs.webkit.org/show_bug.cgi?id=111175

        Breaks style-related inspector tests (Requested by apavlov on
        #webkit).

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSRule.prototype.get isRegular):
        (WebInspector.CSSProperty.prototype.setDisabled):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._innerRebuildUpdate):
        (WebInspector.StylePropertiesSection):
        (.event):
        (.isRevert):

2013-03-01  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Implement navigation to UI locations of property names/values in the source code
        https://bugs.webkit.org/show_bug.cgi?id=105285

        Reviewed by Vsevolod Vlasov.

        Users can now Ctrl/Cmd-click CSS property names/values whose UI locations are found in
        an external stylesheet/sass/other file. Inline stylesheets are not navigable,
        since their start position is not detectable inside the surrounding HTML as of yet.

        No new tests, a UI change.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSRule.prototype.isSourceNavigable): Whether the rule contains reliable source code information.
        (WebInspector.CSSProperty.prototype.uiLocation): Returns a UILocation for the property name of value.
        * inspector/front-end/StylesSidebarPane.js: Add navigation code.
        (WebInspector.StylesSidebarPane.prototype._innerRebuildUpdate):
        (WebInspector.StylePropertiesSection):

2013-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144443.
        http://trac.webkit.org/changeset/144443
        https://bugs.webkit.org/show_bug.cgi?id=111169

        Caused 2 tests to crash by segv on Chromium Mac10.6 (Requested
        by toyoshim on #webkit).

        * css/mediaControls.css:
        (video::-webkit-media-text-track-display):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::isOutside):
        (WebCore::RenderTextTrackCue::repositionCueSnapToLinesSet):

2013-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144422 and r144424.
        http://trac.webkit.org/changeset/144422
        http://trac.webkit.org/changeset/144424
        https://bugs.webkit.org/show_bug.cgi?id=111167

        Caused over 20 tests to fail assertion on Chromium Win port as
        ASSERTION FAILED: m_platformRequestUpdated (Requested by
        toyoshim on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/notifications/Notification.cpp:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/ScriptControllerBase.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptSourceCode.h:
        * bindings/objc/DOM.mm:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * css/CSSCrossfadeValue.h:
        (WebCore::CSSCrossfadeValue::CSSCrossfadeValue):
        (WebCore::CSSCrossfadeValue::CrossfadeSubimageObserverProxy::CrossfadeSubimageObserverProxy):
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        * css/WebKitCSSSVGDocumentValue.cpp:
        * css/WebKitCSSSVGDocumentValue.h:
        (WebCore):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        * dom/ContainerNode.cpp:
        * dom/DOMImplementation.cpp:
        * dom/PendingScript.h:
        * dom/ScriptElement.cpp:
        * dom/ScriptElement.h:
        * history/CachedFrame.cpp:
        * html/DOMURL.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAppletElement.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/ImageDocument.cpp:
        * html/ImageInputType.cpp:
        * html/MediaDocument.cpp:
        * html/PluginDocument.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLParserOptions.cpp:
        * html/parser/HTMLScriptRunner.h:
        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorFileSystemAgent.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        * inspector/InspectorPageAgent.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/NetworkResourcesData.h:
        (WebCore):
        * loader/CookieJar.cpp:
        * loader/CrossOriginAccessControl.cpp:
        * loader/CrossOriginAccessControl.h:
        (WebCore):
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        * loader/FrameLoader.h:
        (WebCore):
        (WebCore::FrameLoader::policyChecker):
        * loader/ImageLoader.cpp:
        * loader/ImageLoader.h:
        * loader/LinkLoader.h:
        * loader/MainResourceLoader.cpp:
        * loader/MainResourceLoader.h:
        * loader/MixedContentChecker.cpp:
        * loader/PingLoader.cpp:
        * loader/PolicyChecker.h:
        (WebCore):
        * loader/ProgressTracker.cpp:
        * loader/SubframeLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/TextTrackLoader.cpp:
        * loader/TextTrackLoader.h:
        * loader/ThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore):
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedFont.h:
        (CachedFontClient):
        (WebCore::CachedFontClient::~CachedFontClient):
        (WebCore::CachedFontClient::expectedType):
        (WebCore::CachedFontClient::resourceClientType):
        (WebCore::CachedFontClient::fontLoaded):
        (WebCore):
        * loader/cache/CachedFontClient.h: Removed.
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedRawResource.cpp:
        * loader/cache/CachedRawResource.h:
        (WebCore):
        (CachedRawResourceClient):
        (WebCore::CachedRawResourceClient::~CachedRawResourceClient):
        (WebCore::CachedRawResourceClient::expectedType):
        (WebCore::CachedRawResourceClient::resourceClientType):
        (WebCore::CachedRawResourceClient::dataSent):
        (WebCore::CachedRawResourceClient::responseReceived):
        (WebCore::CachedRawResourceClient::dataReceived):
        (WebCore::CachedRawResourceClient::redirectReceived):
        (WebCore::CachedRawResourceClient::dataDownloaded):
        * loader/cache/CachedRawResourceClient.h: Removed.
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResourceHandle.cpp:
        * loader/cache/CachedResourceHandle.h:
        (WebCore::CachedResourceHandleBase::~CachedResourceHandleBase):
        (WebCore::CachedResourceHandleBase::CachedResourceHandleBase):
        * loader/cache/CachedSVGDocument.h:
        (CachedSVGDocumentClient):
        (WebCore::CachedSVGDocumentClient::~CachedSVGDocumentClient):
        (WebCore::CachedSVGDocumentClient::expectedType):
        (WebCore::CachedSVGDocumentClient::resourceClientType):
        (WebCore):
        * loader/cache/CachedSVGDocumentClient.h: Removed.
        * loader/cache/CachedSVGDocumentReference.cpp: Removed.
        * loader/cache/CachedSVGDocumentReference.h:
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        * loader/cache/CachedStyleSheetClient.h:
        * loader/cache/MemoryCache.cpp:
        * loader/cache/MemoryCache.h:
        (WebCore):
        (MemoryCache):
        * loader/chromium/CachedRawResourceChromium.cpp:
        * loader/icon/IconController.cpp:
        * loader/icon/IconLoader.h:
        * loader/mac/ResourceLoaderMac.mm:
        * page/DOMWindowExtension.cpp:
        * page/DragController.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::reportMemoryUsage):
        * page/Frame.h:
        (WebCore):
        (Frame):
        (WebCore::Frame::init):
        (WebCore::Frame::loader):
        * page/PerformanceNavigation.cpp:
        * page/PerformanceTiming.cpp:
        * page/PointerLockController.cpp:
        * page/Settings.cpp:
        * page/animation/CSSPropertyAnimation.cpp:
        * platform/chromium/PasteboardChromium.cpp:
        * platform/efl/ErrorsEfl.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/filters/FilterOperation.cpp:
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::ReferenceFilterOperation::setCachedSVGDocumentReference):
        (WebCore::FilterOperation::ReferenceFilterOperation::ReferenceFilterOperation):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/gtk/ErrorsGtk.cpp:
        * platform/gtk/PasteboardGtk.cpp:
        * platform/gtk/PasteboardHelper.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        * platform/mac/HTMLConverter.mm:
        * platform/mac/PasteboardMac.mm:
        * platform/network/AuthenticationChallengeBase.cpp:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/mac/CookieStorageMac.mm:
        * platform/qt/PasteboardQt.cpp:
        * plugins/DOMMimeType.cpp:
        * plugins/PluginRequest.h: Removed.
        * plugins/PluginStream.h:
        (PluginStreamClient):
        (WebCore::PluginStreamClient::~PluginStreamClient):
        (WebCore::PluginStreamClient::streamDidFinishLoading):
        (WebCore):
        * plugins/PluginStreamClient.h: Removed.
        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        (WebCore):
        (PluginRequest):
        (WebCore::PluginRequest::PluginRequest):
        (WebCore::PluginRequest::frameLoadRequest):
        (WebCore::PluginRequest::notifyData):
        (WebCore::PluginRequest::sendNotification):
        (WebCore::PluginRequest::shouldAllowPopups):
        * rendering/HitTestResult.cpp:
        * rendering/InlineFlowBox.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::RenderImageResource):
        * rendering/RenderImageResource.h:
        (WebCore::RenderImageResource::image):
        (WebCore::RenderImageResource::errorOccurred):
        (WebCore::RenderImageResource::usesImageContainerSize):
        (WebCore::RenderImageResource::imageHasRelativeWidth):
        (WebCore::RenderImageResource::imageHasRelativeHeight):
        (WebCore::RenderImageResource::imageSize):
        * rendering/RenderImageResourceStyleImage.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderSnapshottedPlugIn.cpp:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/style/StyleCachedShader.h:
        * rendering/style/StyleCustomFilterProgram.cpp: Removed.
        * rendering/style/StyleCustomFilterProgram.h:
        (WebCore):
        (WebCore::StyleCustomFilterProgram::vertexShaderString):
        (StyleCustomFilterProgram):
        (WebCore::StyleCustomFilterProgram::fragmentShaderString):
        (WebCore::StyleCustomFilterProgram::isLoaded):
        (WebCore::StyleCustomFilterProgram::willHaveClients):
        (WebCore::StyleCustomFilterProgram::didRemoveLastClient):
        (WebCore::StyleCustomFilterProgram::notifyFinished):
        * svg/SVGFEImageElement.h:
        * svg/SVGFontFaceUriElement.h:
        (SVGFontFaceUriElement):
        * svg/SVGImageLoader.cpp:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        * svg/graphics/SVGImageCache.cpp:
        * testing/MockPagePopupDriver.cpp:
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2013-03-01  Alexei Filippov  <alph@chromium.org>

        Web Inspector: fix closure compiler warnings in ProfilesPanel
        https://bugs.webkit.org/show_bug.cgi?id=111163

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ProfileLauncherView.js:
        (WebInspector.ProfileLauncherView.prototype.addProfileType):
        * inspector/front-end/ProfilesPanel.js:

2013-03-01  Victor Carbune  <vcarbune@chromium.org>

        Support padding, margin and border for internal UA cue styling
        https://bugs.webkit.org/show_bug.cgi?id=110703

        Reviewed by Eric Carlson.

        For some particular user agent styling this allows the possibility
        of making the window around the cue text bigger to match some user
        styles (see CaptionUserPreferencesMac::captionsStyleSheetOverride).

        These properties *cannot* be set through by using the ::cue
        pseudo-element and, as specified, are used only internally.

        Test: media/track/track-cue-rendering-with-padding.html

        * css/mediaControls.css:
        (video::-webkit-media-text-track-display): Set the CSS box model
        to include in the specified width or height the values of
        padding / margin / border by using -webkit-box-sizing and avoid
        overflow over 100% width because of having these properties set.
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::isOutside): To not interfere with
        the regular WebVTT positioning algorithm, the check is done for
        the absolute content box.
        (WebCore::RenderTextTrackCue::repositionCueSnapToLinesSet): Added
        an extra adjustment step to accomodate vertical padding (and not
        overflow the cue container)

2013-02-26  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Save/load timeline should preserve DOMContentLoaded and Load event markers
        https://bugs.webkit.org/show_bug.cgi?id=110819

        Reviewed by Pavel Feldman.

        To create event divider TimelinePresentation model checks if record
        frame is main frame. With this patch check is moved to backend and
        result is saved in record to avoid incoherence.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        Record "isMainFrame" flag.
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent): Ditto.
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createMarkData):
        Added data object constructor.
        * inspector/TimelineRecordFactory.h: Ditto.
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.isEventDivider):
        Use saved flag value instead of comparing with "current" main frame.

2013-03-01  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [DataGrid] Columns are misaligned after rows being refreshed.
        https://bugs.webkit.org/show_bug.cgi?id=111077

        Reviewed by Pavel Feldman.

        Analysis: DataGridNode.refresh removes all cells and then recreates them.
        The issue is that mandatory "corner" cell is not recreated.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGridNode.prototype.refresh):
        Added "corner" cell restoration code.

2013-02-28  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Selector's raw start position in its line is considered to be 0 when computing UILocation
        https://bugs.webkit.org/show_bug.cgi?id=110732

        Reviewed by Vsevolod Vlasov.

        Test: inspector/styles/selector-line.html

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::sizetExtractor): Utility for binary search.
        (WebCore::ContentSearchUtils::textPositionFromOffset): Converts absolute raw text offset into line:column.
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines): Refactor.
        (WebCore::ContentSearchUtils::lineEndings): Factored out of getRegularExpressionMatchesByLines.
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch): Drive-by: pass String by reference.
        * inspector/ContentSearchUtils.h:
        * inspector/Inspector.json: Use line:column for SourceRange boundaries rather than raw offsets.
        * inspector/InspectorStyleSheet.cpp:
        (ParsedStyleSheet::text): ASSERT(m_hasText).
        (WebCore::InspectorStyle::buildObjectForStyle): Supply the lineEndings argument.
        (WebCore::buildSourceRangeObject): Follow the protocol change.
        (WebCore::InspectorStyle::setPropertyText): Refactor.
        (WebCore::InspectorStyle::toggleProperty): Ditto.
        (WebCore::InspectorStyle::styleText): Ditto.
        (WebCore::InspectorStyle::populateAllProperties): Ditto.
        (WebCore::InspectorStyle::styleWithProperties): Convert relative property range offsets into absolute ones.
        (WebCore::InspectorStyle::extractSourceData): Factored out.
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters): Supply the lineEndings argument.
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList): Ditto.
        (WebCore::InspectorStyleSheet::lineEndings): Compute line endings for ordinary stylesheets.
        (WebCore::InspectorStyleSheetForInlineStyle::lineEndings): Ditto for bogus inline style stylesheets.
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js: Removed the byte counting for unused CSS.
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSRule): Set selector rawLocation based on the selectorList range or sourceLine.
        (WebInspector.CSSRule.prototype._setRawLocation): Added.
        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping.prototype._bindUISourceCode): Fix call order when binding scss sourcecodes.

2013-03-01  Benjamin Poulain  <benjamin@webkit.org>

        Get rid of two silly static null Strings
        https://bugs.webkit.org/show_bug.cgi?id=111151

        Reviewed by Eric Seidel.

        We have a global null String through nullAtom, there is no need
        for local static null strings.

        * page/Page.cpp:
        (WebCore::Page::groupName):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::markerText):

2013-03-01  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h: Add a missing #include.

2013-03-01  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix code-mirror experiment to work in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=111064

        Reviewed by Pavel Feldman.

        No new tests: no change in behaviour.

        Improve importScript function to try load a script from the root
        directory iff its loading from the given path failed.

        * inspector/front-end/utilities.js:

2013-03-01  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] capture a WebGL extension by it's name in lower case
        https://bugs.webkit.org/show_bug.cgi?id=110745

        Reviewed by Pavel Feldman.

        WebGL's getExtension accepts a name that is tested against an ASCII case-insensitive match.
        Just force lower case for extension names.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2013-03-01  Mike West  <mkwst@chromium.org>

        XSSAuditor should use threadSafeMatch when relevant.
        https://bugs.webkit.org/show_bug.cgi?id=111099

        Reviewed by Adam Barth.

        Given the work on breaking parsing out into a background thread, we
        should compare QualifiedNames in a thread-safe manner. Rather than
        casting the result of QualifiedName::localName to a String, we can
        call out to threadSafeMatch to do the comparison.

        This patch leaves one use of equalIgnoringNullity in
        XSSAuditor::findAttributeWithName. That usage seems safe, since we're
        creating a new string against which to compare.

        * html/parser/XSSAuditor.cpp:
        (WebCore::hasName):
            Replace call to equalIgnoringNullity(Vector<UChar...>, String)
            with threadSafeMatch(String, QualifiedName).

2013-02-28  Keishi Hattori  <keishi@webkit.org>

        Add calendar table view for the new calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=110970

        Reviewed by Kent Tamura.

        The calendar table that will be used in the new calendar picker (Bug 109439).

        No new tests. Code is not used yet.

        * Resources/pagepopups/calendarPicker.js:
        (DayCell): Cell which represents one day in the calendar.
        (DayCell.recycleOrCreate):
        (DayCell.prototype._recycleBin):
        (DayCell.prototype.throwAway):
        (DayCell.prototype.setHighlighted): Sets the highlighted class on the element.
        (DayCell.prototype.setDisabled): Sets the disabled class on the element.
        (DayCell.prototype.setIsInCurrentMonth): Sets the current-month class on the element.
        (DayCell.prototype.setIsToday): Sets the today class on the element.
        (DayCell.prototype.reset): Resets the day cell to be reused.
        (WeekNumberCell): Cell used for the week number column.
        (WeekNumberCell.prototype._recycleBin):
        (WeekNumberCell.recycleOrCreate):
        (WeekNumberCell.prototype.reset):
        (WeekNumberCell.prototype.throwAway):
        (WeekNumberCell.prototype.setHighlighted): Sets the highlighted class on the element.
        (WeekNumberCell.prototype.setDisabled): Sets the disabled class on the element.
        (CalendarTableHeaderView): Header for the calendar table. Contains the column labels.
        (CalendarRowCell): Row containing day cells and maybe a week number cell.
        (CalendarRowCell.prototype._recycleBin):
        (CalendarRowCell.prototype.reset):
        (CalendarRowCell.prototype.throwAway):
        (CalendarTableView): A list view showing a grid of days.
        (CalendarTableView.prototype.rowAtScrollOffset): Returns the row number currently at the scroll offset.
        (CalendarTableView.prototype.scrollOffsetForRow): Returns the current scroll offset for the given row.
        (CalendarTableView.prototype.onClick): If the click is on a DayCell or WeekNumberCell, select the appropriate date range.
        (CalendarTableView.prototype.onMouseOver): If the click is on a DayCell or WeekNumberCell, highlight the appropriate date range.
        (CalendarTableView.prototype.onMouseOut):
        (CalendarTableView.prototype.prepareNewCell): Prepares a new row cell by recycling or creating a new one.
        (CalendarTableView.prototype.height): Returns the height of the view in pixels.
        (CalendarTableView.prototype.setHeight): Sets the height of the view in pixels.
        (CalendarTableView.prototype.scrollToMonth): Scrolls to reveal the given month.
        (CalendarTableView.prototype.dayAtColumnAndRow): Day at a given column and row. Column number doesn't count week number column.
        (CalendarTableView.prototype.columnAndRowForDay): Column and row for the given day.
        (CalendarTableView.prototype.updateCells): Update the position and appearance of the cell.s
        (CalendarTableView.prototype.prepareNewDayCell): Prepares a new day cell. The cell is registered to this._dayCells.
        (CalendarTableView.prototype.prepareNewWeekNumberCell): Prepares a new week number cell. The cell is registered to this._weekNumberCells.
        (CalendarTableView.prototype.throwAwayDayCell): The cell is unregistered from this._dayCells.
        (CalendarTableView.prototype.throwAwayWeekNumberCell): The cell is unregistered from this._weekNumberCells.

2013-02-28  Alexey Proskuryakov  <ap@apple.com>

        Reduce amount of rebuilding when touching networking headers
        https://bugs.webkit.org/show_bug.cgi?id=111035

        Reviewed by Eric Seidel.

        This uses a number of common unsurprising techniques. One interesting observation
        is that including CachedResource related headers is very expensive. We can usually
        get away with their Client counterparts, and with CachedResourceHandle.

        * page/Frame.cpp:
        * page/Frame.h:
        Don't include FrameLoader, greatly reducing include graph for most non-loader files.
        This required making Frame::init() non-inline - I'm not sure why it ever was.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        Even though FrameLoader is logically on loading side of WebCore, it's included in
        too many places. Not including PolicyChecker.h and ResourceHandle.h was among the
        largest wins. As a future improvement, we should probably convert other members
        to OwnPtrs.

        * css/CSSCrossfadeValue.h: Initializing CachedResourceHandle with 0 requires a
        definition of a class it holds, but default construction does not.

        * loader/CrossOriginAccessControl.h: This file among others only needs ResourceHandleTypes.h,
        not ResourceHandle.h. This header is semi-recent, so not all include sites were updated.

        * loader/cache/CachedFont.h:
        * loader/cache/CachedFontClient.h: Added.
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h: Added.
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentClient.h: Added.
        These types were defining client types in the same headers, making it impossible
        to avoid including networking headers through CachedResource. Moved clients into
        separate files.

        * plugins/PluginStream.h:
        * plugins/PluginStreamClient.h: Added.
        Similar situation here.

        * loader/cache/CachedResourceHandle.cpp:
        * loader/cache/CachedResourceHandle.h:
        Moved functions that need to know about CachedResource to .cpp file. This is another
        huge win. Added a destructor, so that CachedResource woudn't be needed in all files
        that include CachedResourceHandle.

        * loader/cache/CachedSVGDocumentReference.cpp: Added.
        * loader/cache/CachedSVGDocumentReference.h:
        Moved constructor and virtual function implementations to a .cpp file - they need
        not inlining, and this lets us avoid including CachedSVGDocument.h in the header.

        * platform/graphics/filters/FilterOperation.cpp:
        * platform/graphics/filters/FilterOperation.h:
        Avoid including CachedSVGDocumentReference.h. This is not such a big win now that
        CachedSVGDocumentReference.h itself is smaller, but FilterOperation is so clearly
        rendering code that it seems best to cut any ties with resources and loading.
        Added a virtual destrutor in .cpp file, because inline destructors in polymorphic
        classes are generally harmful (due to code bloat).

        * plugins/PluginRequest.h: Added.
        * plugins/PluginView.h:
        Moved PluginRequest into a separate file, it was out of place in a view hierarchy
        class file.

        * rendering/RenderImageResource.cpp:
        * rendering/RenderImageResource.h:
        Moved definitions of virtual functions to a .cpp file. Thre is no win from having
        them inline, and now we don't need CachedImage.h in the header.

        * rendering/style/StyleCustomFilterProgram.cpp: Added.
        * rendering/style/StyleCustomFilterProgram.h:
        Ditto.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/notifications/Notification.cpp:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/ScriptControllerBase.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptSourceCode.h:
        * bindings/objc/DOM.mm:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        * css/WebKitCSSSVGDocumentValue.cpp:
        * css/WebKitCSSSVGDocumentValue.h:
        * dom/Clipboard.cpp:
        * dom/ContainerNode.cpp:
        * dom/DOMImplementation.cpp:
        * dom/PendingScript.h:
        * dom/ScriptElement.cpp:
        * dom/ScriptElement.h:
        * history/CachedFrame.cpp:
        * html/DOMURL.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAppletElement.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/ImageDocument.cpp:
        * html/ImageInputType.cpp:
        * html/MediaDocument.cpp:
        * html/PluginDocument.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLParserOptions.cpp:
        * html/parser/HTMLScriptRunner.h:
        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorFileSystemAgent.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/NetworkResourcesData.h:
        * loader/CookieJar.cpp:
        * loader/CrossOriginAccessControl.cpp:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentThreadableLoader.h:
        * loader/ImageLoader.cpp:
        * loader/ImageLoader.h:
        * loader/LinkLoader.h:
        * loader/MainResourceLoader.cpp:
        * loader/MainResourceLoader.h:
        * loader/MixedContentChecker.cpp:
        * loader/PingLoader.cpp:
        * loader/PolicyChecker.h:
        * loader/ProgressTracker.cpp:
        * loader/SubframeLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/TextTrackLoader.cpp:
        * loader/TextTrackLoader.h:
        * loader/ThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedRawResource.cpp:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedStyleSheetClient.h:
        * loader/cache/MemoryCache.cpp:
        * loader/cache/MemoryCache.h:
        * loader/chromium/CachedRawResourceChromium.cpp:
        * loader/icon/IconController.cpp:
        * loader/icon/IconLoader.h:
        * loader/mac/ResourceLoaderMac.mm:
        * page/DOMWindowExtension.cpp:
        * page/DragController.cpp:
        * page/PerformanceNavigation.cpp:
        * page/PerformanceTiming.cpp:
        * page/PointerLockController.cpp:
        * page/Settings.cpp:
        * page/animation/CSSPropertyAnimation.cpp:
        * platform/chromium/PasteboardChromium.cpp:
        * platform/efl/ErrorsEfl.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/gtk/ErrorsGtk.cpp:
        * platform/gtk/PasteboardGtk.cpp:
        * platform/gtk/PasteboardHelper.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        * platform/mac/HTMLConverter.mm:
        * platform/mac/PasteboardMac.mm:
        * platform/network/AuthenticationChallengeBase.cpp:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/mac/CookieStorageMac.mm:
        * platform/qt/PasteboardQt.cpp:
        * plugins/DOMMimeType.cpp:
        * plugins/PluginView.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/InlineFlowBox.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderImageResourceStyleImage.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderSnapshottedPlugIn.cpp:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/style/StyleCachedShader.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGImageLoader.cpp:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        * svg/graphics/SVGImageCache.cpp:
        * testing/MockPagePopupDriver.cpp:
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        Many self-evident changes - removing unnecessary header includes, adding smaller
        more local ones that are now necessary.

2013-02-28  Koji Hara  <kojih@chromium.org>

        [V8] Added V8CustomIndexedGetter to IDLs that correspond to existing custom indexedPropertyGetter.
        https://bugs.webkit.org/show_bug.cgi?id=110852

        Reviewed by Kentaro Hara.

        Add V8CustomIndexedGetter attribute that indicates the interface have custom implementation of a getter of indexed properties.
        (Also added to the wiki)
        https://trac.webkit.org/wiki/WebKitIDL#V8CustomIndexedGetter
        Add V8CustomIndexedGetter to IDLs that correspond to existing custom indexedPropertyGetter.
        We want to clean up CodeGeneratorV8.pm.
        The problem is that all implementations of indexed properties and named properties are currently delegated to custom bindings.
        We want to auto-generate as much code as possible.
        As a starting point, this commit assures a interface has [V8CustomIndexedGetter] ==> there's custom implementation of indexed getter.

        No test. Simple refactoring.

        * bindings/scripts/IDLAttributes.txt: Add V8CustomIndexedGetter attribute.
        * dom/NamedNodeMap.idl: Add V8CustomIndexedGetter attribute.
        * html/HTMLAppletElement.idl: Add V8CustomIndexedGetter attribute.
        * html/HTMLEmbedElement.idl: Add V8CustomIndexedGetter attribute.
        * html/HTMLFormElement.idl: Add V8CustomIndexedGetter attribute.
        * html/HTMLObjectElement.idl: Add V8CustomIndexedGetter attribute.
        * html/HTMLOptionsCollection.idl: Add V8CustomIndexedGetter attribute.
        * html/HTMLSelectElement.idl: Add V8CustomIndexedGetter attribute.
        * page/DOMWindow.idl: Add V8CustomIndexedGetter attribute.
        * storage/Storage.idl: Add V8CustomIndexedGetter attribute.

2013-02-28  Xingnan Wang  <xingnan.wang@intel.com>

        Heap-use-after-free in WebCore::AudioNodeInput::updateInternalBus
        https://bugs.webkit.org/show_bug.cgi?id=108542

        Replace the wrong AudioNodeOutput::bus() usage out of safe peroid,
        which causes this issue.

        Reviewed by Chris Rogers.

        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::numberOfChannels):
        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::bus):

2013-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144370.
        http://trac.webkit.org/changeset/144370
        https://bugs.webkit.org/show_bug.cgi?id=111136

        Caused 21 assertion failure at DocumentLoader.cpp(436)
        (Requested by toyoshim on #webkit).

        * dom/Document.cpp:
        (WebCore::Document::decrementActiveParserCount):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::checkLoadComplete):

2013-02-28  Li Yin  <li.yin@intel.com>

        [chromium] Events can't be triggered on MediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=110930

        Reviewed by Kentaro Hara.

        Spec: http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack
        ended event handler should be triggered, when stop() is called.

        No new tests because the test fast/mediastream/MediaStreamTrack.html
        had covered it already.

        * platform/mediastream/chromium/MediaStreamCenterChromium.cpp:
        (WebCore::MediaStreamCenterChromium::didStopLocalMediaStream):

2013-02-28  Ankur Taly  <ataly@google.com>

        WebKit API for enabling DOM logging for certain worlds
        https://bugs.webkit.org/show_bug.cgi?id=110779

        Reviewed by Adam Barth.
        
        Adds additional static methods to DOMWrapperWorld for managing the
        mapping between worldIDs and logger objects (where DOM logging messages
        are sent), and also defines a class (V8DOMActivityLogger) for logger
        objects.

        * WebCore.gypi:
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore):
        (WebCore::domActivityLoggers):
        (WebCore::DOMWrapperWorld::setDOMActivityLogger):
        (WebCore::DOMWrapperWorld::getDOMActivityLogger):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        * bindings/v8/V8DOMActivityLogger.h: Added.
        (WebCore):
        (V8DOMActivityLogger):
        (WebCore::V8DOMActivityLogger::~V8DOMActivityLogger):
        (WebCore::V8DOMActivityLogger::log):

2013-02-28  Adam Barth  <abarth@webkit.org>

        The threaded HTML parser shouldn't need to invalidate the speculation buffer on every document.write
        https://bugs.webkit.org/show_bug.cgi?id=111130

        Reviewed by Eric Seidel.

        Previously, the threaded HTML parser always invalidated its speculation
        buffer when it received a document.write.  That means we performed
        poorly on web sites that contained document.write calls early in the
        page.

        This patch teaches the HTMLDocumentParser that we don't need to discard
        the speculation buffer in the common case of starting and ending in the
        DataState.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::checkForSpeculationFailure):
        (WebCore::HTMLDocumentParser::didFailSpeculation):
        * html/parser/HTMLDocumentParser.h:
        (WebCore):
        (ParsedChunk):

2013-02-28  Eberhard Graether  <egraether@google.com>

        WebInspector: Switch hide element shortcut in ElementsPanel to use a selector
        https://bugs.webkit.org/show_bug.cgi?id=110641

        Reviewed by Pavel Feldman.

        This change switches the shortcut for adding visibility:hidden to an element's style
        to toggling a class name on the element and injecting a style rule into the element's
        document instead. This way it is possible to change the visibility of all child
        elements as well.

        Test: inspector/elements/hide-shortcut.html

        * inspector/front-end/CSSStyleModel.js:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._onkeydown):
        (WebInspector.ElementsTreeOutline.prototype.resolvedNode.toggleClassAndInjectStyleRule):
        (WebInspector.ElementsTreeOutline.prototype.):
        (WebInspector.ElementsTreeOutline.prototype._toggleHideShortcut):

2013-02-28  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with --no-web-audio and --no-video
        https://bugs.webkit.org/show_bug.cgi?id=111055

        Unreviewed build fix.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:

2013-02-28  Xingnan Wang  <xingnan.wang@intel.com>

        Implement the memory report on IPP FFTFrame on Web Audio
        https://bugs.webkit.org/show_bug.cgi?id=111039

        Reviewed by Yury Semikhatsky.

        Covered by existing test.

        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::reportMemoryUsage):

2013-02-28  Levi Weintraub  <leviw@chromium.org>

        Stale FrameSelection in removed iframe causes crash
        https://bugs.webkit.org/show_bug.cgi?id=108696

        Reviewed by Ryosuke Niwa.

        Catching a specific issue where selectFrameElementInParentIfFullySelected in a nested
        iFrame that is removed can leave the outer frame's selection referencing stale nodes.
        Instead, in this case, we keep the frame alive long enough to check for this condition
        and clear our selection if we hit it.

        Test: editing/selection/selection-in-iframe-removed-crash.html

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

2013-02-28  Conrad Shultz  <conrad_shultz@apple.com>

        Need API to control page underlay color
        https://bugs.webkit.org/show_bug.cgi?id=110918

        Reviewed by Simon Fraser.

        * page/ChromeClient.h:
        (ChromeClient):
        Declare underlayColor().

        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::setUpOverhangAreasLayerContents):
        Have setUpOverhangAreasLayerContents() take a background color parameter.

        * platform/mac/ScrollbarThemeMac.h:
        (ScrollbarThemeMac):
        Ditto.

        * platform/mac/ScrollbarThemeMac.mm:
        Include ColorMac.h.
        (WebCore::ScrollbarThemeMac::setUpOverhangAreasLayerContents):
        Use the passed-in background color, if valid, for the overhang area layer.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        Get the underlay color from the chrome client and pass it into setUpOverhangAreasLayerContents().

2013-02-28  Beth Dakin  <bdakin@apple.com>

        RelevantRepaintedObjects heuristic should ensure there is some coverage in the 
        bottom half of the relevant view rect
        https://bugs.webkit.org/show_bug.cgi?id=111124
        -and corresponding-
        <rdar://problem/12257164>

        Reviewed by Simon Fraser.

        We need two Regions now -- one for the top and another for the bottom. Make sure 
        we have at least half of our desired coverage in both.
        * page/Page.cpp:
        (WebCore::Page::resetRelevantPaintedObjectCounter):
        (WebCore::Page::addRelevantRepaintedObject):
        (WebCore::Page::reportMemoryUsage):
        * page/Page.h:

2013-02-28  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: support pitch change
        https://bugs.webkit.org/show_bug.cgi?id=107348

        Reviewed by Beth Dakin.

        Implement a policy for the Mac synthesizer to convert from the utterance's pitch rate
        to something sensible for the platform.

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper initWithSpeechSynthesizer:WebCore::]):
        (-[WebSpeechSynthesisWrapper convertPitchToNSSpeechValue:]):
        (-[WebSpeechSynthesisWrapper updateBasePitchForSynthesizer]):
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):

2013-02-28   Vineet Chaudhary  <rgf748@motorola.com>

        Unreviewed. Bindings test results update after r144376.

        * bindings/scripts/test/JS/JSTestObj.cpp:

2013-02-28  Roger Fong  <roger_fong@apple.com>

        Unreviewed. AppleWin VS2010 build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-02-28  Roger Fong  <roger_fong@apple.com>

        Unreviewed. AppleWin Build fix.

        * WebCore.vcproj/WebCore.vcproj:

2013-02-28  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove the world->isMainWorld() check from minorGCPrologue()
        https://bugs.webkit.org/show_bug.cgi?id=111114

        Reviewed by Adam Barth.

        A couple of weeks ago, I introduced the following check to minorGCPrologue() in r142419.

          void minorGCPrologue() {
            // A minor GC can handle the main world only.
            DOMWrapperWorld* world = worldForEnteredContextWithoutContextCheck();
            if (world && world->isMainWorld()) {
              MinorGCWrapperVisitor visitor(isolate);
              v8::V8::VisitHandlesForPartialDependence(isolate, &visitor);
              visitor.notifyFinished();
            }
          }

        - The check makes no sense. A GC should not care about what world we are in.
        There is no concept of worlds in GC.

        - worldForEnteredContextWithoutContextCheck() returns 0 for the main world.
        So if a GC runs in the main world, the minor DOM GC is skipped.

        - worldForEnteredContextWithoutContextCheck() caused a Chromium crash
        (https://code.google.com/p/chromium/issues/detail?id=177587)

        We should remove the check.

        No tests. No change in behavior.

        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::getWorld):
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::minorGCPrologue):

2013-02-28  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        Create GraphicsContext3DState to aggregate state objects
        https://bugs.webkit.org/show_bug.cgi?id=110817

        Reviewed by Kenneth Russell.

        Aggregate context state-related objects on a GraphicsContext3DState
        struct, in a similar fashion as GraphicsContext does. This is useful to
        avoid duplicated values for platform-specific initialization lists.

        No behavior changes, thus covered by existing tests.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::GraphicsContext3DState::GraphicsContext3DState):
        (GraphicsContext3DState):
        (GraphicsContext3D):
        Moved m_boundFBO, m_activeTexture and m_boundTexture0 to GraphicsContext3DState.

        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/cairo/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::copyToGraphicsSurface):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::readPixels):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::readRenderingResults):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteTexture):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::createOffscreenBuffers):
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        (WebCore::GraphicsContext3DPrivate::blitMultisampleFramebuffer):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        Removed initialization list values not needed anymore and reassigned
        calls to m_boundFBO, m_boundTexture0 and m_activeTexture to m_state
        respectives.
        
2013-02-28  David Hyatt  <hyatt@apple.com>

        Unreviewed build fix. A merge error led to a duplication of a single line.
        Just removing the duplicate line.

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

2013-02-28  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Notification.requestPermission callback should be optional
        https://bugs.webkit.org/show_bug.cgi?id=108196

        Reviewed by Kentaro Hara.

        Spec says it should be optional.
        http://notifications.spec.whatwg.org/#notification

        Test: fast/notifications/notifications-request-permission-optional.html

        * GNUmakefile.list.am:
        * Modules/notifications/Notification.h:
        (Notification):
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationRequestCallback::timerFired):
        * Modules/notifications/NotificationCenter.h:
        (NotificationCenter):
        * Modules/notifications/NotificationCenter.idl:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDesktopNotificationsCustom.cpp: Removed.
        * bindings/js/JSNotificationCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp: Removed.
        * bindings/v8/custom/V8NotificationCustom.cpp: Removed.

2013-02-28  Ben Wagner  <bungeman@chromium.org>

        Underline should round to match other content.
        https://bugs.webkit.org/show_bug.cgi?id=111005

        Reviewed by Stephen White.

        Test: fast/text/decorations-with-text-combine.html

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        Round (instead of floor) underlines to match other content.

2013-02-28  Eric Carlson  <eric.carlson@apple.com>

        Refine Ryosuke's r144367 fix.

        Rubber-stamped by Ryosuke Niwa.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferences):

2013-02-28  Eric Seidel  <eric@webkit.org>

        Threaded HTML parser hits ASSERTION FAILED: this == frameLoader()->activeDocumentLoader()
        https://bugs.webkit.org/show_bug.cgi?id=110937

        Reviewed by Adam Barth.

        Remove the #ifdef guards added to work around this ASSERT.
        This was fixed by https://bugs.webkit.org/show_bug.cgi?id=110951
        as now DocumentLoader::checkLoadComplete() will ignore the call
        if the DocumentLoader is not the active document loader for the Document.

        * dom/Document.cpp:
        (WebCore::Document::decrementActiveParserCount):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::checkLoadComplete):

2013-02-28  Ryosuke Niwa  <rniwa@webkit.org>

        Revert an erroneous change in r144336.

        Rubber-stamped by Eric Carlson.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferences):

2013-02-28  David Hyatt  <hyatt@apple.com>

        Unreviewed build fix for Windows. Make sure the new bits are unsigned and not bools.

        * rendering/RenderBlock.h:

2013-02-28  Jochen Eisinger  <jochen@chromium.org>

        Meta referrer isn't honored for window.open
        https://bugs.webkit.org/show_bug.cgi?id=111076

        Reviewed by Adam Barth.

        Test: http/tests/security/referrer-policy-window-open.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): loadFrameRequest() will set the correct referrer
        (WebCore::createWindow): This code is required for the inspector which doesn't set the referrer
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):

2013-02-28  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [texmap] Remove redundant defines on TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=111090

        Reviewed by Antonio Gomes.

        driverSupportsSubImage() already uses OpenGL ES defines to return
        correct support, thus no need for these additional defines.

        No behavior changes, thus covered by existing tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContentsNoSwizzle):

2013-02-26  Zhenyao Mo  <zmo@google.com>

        EXT_draw_buffers needs implementation
        https://bugs.webkit.org/show_bug.cgi?id=109331

        Reviewed by Kenneth Russell.

        This patch adds support for EXT_draw_buffers for WebGL.
        mac OpenGL port is passing khronos WebGL conformance test with this patch. OpenGL ES port implementation isn't added in this patch.
        Also, it has the WebKit side support for chromium port, but pending command buffer implementation.

        Besides the basic extension implementation, we also added drawBuffers() wrapper to work around a mac driver bug: i.e., do not enable a buffer if there is no attachment added.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::toInt32):
        (WebCore::toUInt32):
        (WebCore::toFloat):
        (WebCore::toInt64):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/EXTDrawBuffers.cpp: Added.
        (WebCore):
        (WebCore::EXTDrawBuffers::EXTDrawBuffers):
        (WebCore::EXTDrawBuffers::~EXTDrawBuffers):
        (WebCore::EXTDrawBuffers::getName):
        (WebCore::EXTDrawBuffers::create):
        (WebCore::EXTDrawBuffers::supported):
        (WebCore::EXTDrawBuffers::drawBuffersEXT):
        * html/canvas/EXTDrawBuffers.h: Added.
        (WebCore):
        (EXTDrawBuffers):
        * html/canvas/EXTDrawBuffers.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::setAttachmentForBoundFramebuffer):
        (WebCore::WebGLFramebuffer::removeAttachmentFromBoundFramebuffer):
        (WebCore::WebGLFramebuffer::drawBuffers):
        (WebCore):
        (WebCore::WebGLFramebuffer::drawBuffersIfNecessary):
        * html/canvas/WebGLFramebuffer.h:
        (WebGLFramebuffer):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::validateFramebufferFuncParameters):
        (WebCore::WebGLRenderingContext::getMaxDrawBuffers):
        (WebCore::WebGLRenderingContext::getMaxColorAttachments):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore):
        (WebGLRenderingContext):
        * platform/chromium/support/Extensions3DChromium.cpp:
        (WebCore::Extensions3DChromium::drawBuffersEXT):
        (WebCore):
        * platform/graphics/Extensions3D.h:
        (Extensions3D):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::getClearBitsByAttachmentType):
        * platform/graphics/chromium/Extensions3DChromium.h:
        (Extensions3DChromium):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):
        (WebCore::Extensions3DOpenGL::drawBuffersEXT):
        (WebCore):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        (Extensions3DOpenGL):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::ensureEnabled):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.h:
        (Extensions3DOpenGLCommon):
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::drawBuffersEXT):
        (WebCore):
        (WebCore::Extensions3DOpenGLES::supportsExtension):
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        (Extensions3DOpenGLES):

2013-02-28  Alexey Proskuryakov  <ap@apple.com>

        Create BlobRegistry through a strategy
        https://bugs.webkit.org/show_bug.cgi?id=111100

        Chromium build fix.

        * platform/network/BlobRegistry.cpp: Use destructor for chromium too.

2013-02-28  Alexey Proskuryakov  <ap@apple.com>

        Create BlobRegistry through a strategy
        https://bugs.webkit.org/show_bug.cgi?id=111100

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Added BlobRegistry.cpp.

        * WebCore.exp.in:
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::createBlobRegistry):
        * loader/LoaderStrategy.h:
        Addxed a function to create BlobRegistry, with default implementation being
        in-process WebKit1 one.

        * platform/network/BlobData.h: Added ENABLE(BLOB).

        * platform/network/BlobRegistry.cpp: Added. Moved singleton to a separate file.
        * platform/network/BlobRegistry.h: Made destructor non-inline. Cleaned up includes.

        * platform/network/BlobRegistryImpl.cpp:
        * platform/network/BlobRegistryImpl.h:
        Cleaned up includes, made functions that are only called through base class private.
        Added ENABLE(BLOB).

        * platform/network/BlobStorageData.h: Added ENABLE(BLOB).

        * platform/network/FormData.cpp:
        (WebCore::appendBlobResolved): Check blob registry type before upcasting. It's a
        public function, and we should not depend on high level understanding of process
        model to prove that the cast is safe.

        * platform/network/ResourceHandle.cpp:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/mac/ResourceHandleMac.mm:
        Cleaned up includes.

2013-02-28  Kent Tamura  <tkent@chromium.org>

        REGRESSION: INPUT_MULTIPLE_FIELDS_UI: Changing CSS display property on input[type=date] unexpectedly makes another line for ::-webkit-calendar-picker-indicator
        https://bugs.webkit.org/show_bug.cgi?id=110974

        Reviewed by Kentaro Hara.

        Input elements with the multiple fields UI require flexible box
        layout.
        - If display:inline or display:inline-block is specified, we
          replace it with display:inline-flex.
        - If display:block is specified, we replace it with
          display:flex.
        - If other display value is specified, we use it as is, but it
          won't wrap inside an input element because we have
          display:inline-block for ::-webkit-calendar-pixker-indicaotor.

        r144184 was incomplete. It avoided the wrapping issue, but it
        didn't make spin buttons and calendar arrows right-aligned.

        Tests: Update fast/forms/date/date-apparance-basic.html

        * css/html.css:
        (input::-webkit-calendar-picker-indicator):
        Add display:inline-block in orde to avoid line-wrapping.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::customStyleForRenderer):
        Move the code to BaseMultipleFieldsDateAndTimeInputType::customStyleForRenderer.
        * html/InputType.cpp:
        (WebCore::InputType::customStyleForRenderer): Added.
        * html/InputType.h:
        (InputType): Add customStyleForRenderer, and remove
        shouldApplyLocaleDirection.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::customStyleForRenderer):
        Moved the code from HTMLInputElement::customStyleForRenderer, and
        add display property updatting code.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):
        Add customStyleForRenderer, and remove shouldApplyLocaleDirection.

2013-02-28  Anders Carlsson  <andersca@apple.com>

        Implement more StorageAreaProxy member functions
        https://bugs.webkit.org/show_bug.cgi?id=111103

        Reviewed by Sam Weinig.

        Export two more StorageMap symbols required by WebKit2.

        * WebCore.exp.in:

2013-02-28  Xianzhu Wang  <wangxianzhu@chromium.org>

        Focus ring for a child layer is incorrectly offset by ancestor composited layer's position
        https://bugs.webkit.org/show_bug.cgi?id=110895

        Reviewed by Simon Fraser.

        Test: compositing/sub-layer-focus-ring.html

        The problem occurs in RenderBlock::addFocusRingRects() where the absolute position of a sub-layer is used to calculate the focus ring rect of the layer.
        Should use the relative position to the current paintContainer instead.

        To fix the issue:
        - RenderLayer passes LayerPaintingInfo.rootLayer to PaintInfo.paintContainer
        - Let RenderObject::paintFocusRing() and RenderObject::paintOutline() take PaintInfo instead of GraphicsContext* so that the paintContainer can be passed
        - RenderBlock::addFocusRingRects() uses localToContainerPoint(FloatPoint(), paintContainer) instead of localToAbsolute() to calculate the focus ring rect of a sublayer.

        * rendering/PaintInfo.h:
        (WebCore):
        (WebCore::PaintInfo::PaintInfo): Add a field paintContainer (the RenderLayerModelObject which originates the current painting)
        (PaintInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::paintContinuationOutlines):
        (WebCore::RenderBlock::addFocusRingRects): Use the added paintContainer parameter to calculate the relative offset of the child layer.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintBackgroundForFragments): Pass LayerPaintingInfo.rootLayer to PaintInfo.paintContainer.
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase): Ditto.
        (WebCore::RenderLayer::paintOutlineForFragments): Ditto.
        (WebCore::RenderLayer::paintMaskForFragments): Ditto.
        * rendering/RenderLayer.cpp:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintFocusRing): Now takes PaintInfo instead of GraphicsContext*. Pass paintInfo.paintContainer to addFocusRingRects().
        (WebCore::RenderObject::paintOutline): Now takes PaintInfo instead of GraphicsContext*.
        (WebCore::RenderObject::absoluteFocusRingQuads):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::addFocusRingRects): Add paintContainer parameter.

2013-02-28  David Hyatt  <hyatt@apple.com>

        Remove the quirk margin bits from RenderObject and put them back in RenderBlock.
        https://bugs.webkit.org/show_bug.cgi?id=111089

        Reviewed by Dan Bernstein.

        This patch removes the marginBeforeQuirk and marginAfterQuirk bits from RenderObject
        and puts them into RenderBlock instead. I also did some renaming and clean-up after
        moving them, e.g., to hasMarginBeforeQuirk and hasMarginAfterQuirk.
        
        Even though it's pretty irrelevant, I also made the code writing-mode-correct so that
        the correct child margin quirk is propagated across differing writing mode
        boundaries.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::marginBeforeEstimateForChild):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::handleAfterSideOfBlock):
        (WebCore::RenderBlock::hasMarginBeforeQuirk):
        (WebCore):
        (WebCore::RenderBlock::hasMarginAfterQuirk):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::setHasMarginBeforeQuirk):
        (WebCore::RenderBlock::setHasMarginAfterQuirk):
        (RenderBlock):
        (WebCore::RenderBlock::hasMarginBeforeQuirk):
        (WebCore::RenderBlock::hasMarginAfterQuirk):
        (MarginInfo):
        (WebCore::RenderBlock::MarginInfo::setHasMarginBeforeQuirk):
        (WebCore::RenderBlock::MarginInfo::setHasMarginAfterQuirk):
        (WebCore::RenderBlock::MarginInfo::hasMarginBeforeQuirk):
        (WebCore::RenderBlock::MarginInfo::hasMarginAfterQuirk):
        * rendering/RenderObject.h:
        (RenderObject):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (RenderObjectBitfields):
        * rendering/style/RenderStyle.h:

2013-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144126 and r144176.
        http://trac.webkit.org/changeset/144126
        http://trac.webkit.org/changeset/144176
        https://bugs.webkit.org/show_bug.cgi?id=111096

        Caused fast/notifications/notifications-request-
        permission.html to crash (Requested by abarth on #webkit).

        * GNUmakefile.list.am:
        * Modules/notifications/Notification.h:
        (Notification):
        * Modules/notifications/Notification.idl:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNotificationCustom.cpp: Added.
        (WebCore):
        (WebCore::JSNotification::requestPermission):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/v8/custom/V8NotificationCustom.cpp: Added.
        (WebCore):
        (WebCore::V8Notification::requestPermissionMethodCustom):

2013-02-28  Nate Chapin  <japhet@chromium.org>

        Crash in CachedRawResource::responseReceived().
        https://bugs.webkit.org/show_bug.cgi?id=110482

        Reviewed by Adam Barth.

        Test: http/tests/security/XFrameOptions/x-frame-options-deny-multiple-clients.html

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::responseReceived):

2013-02-28  Eric Carlson  <eric.carlson@apple.com>

        [Mac] use HAVE() macro instead of version check
        https://bugs.webkit.org/show_bug.cgi?id=111087

        Reviewed by Dean Jackson.

        No new tests, covered by existing tests.

        * page/CaptionUserPreferencesMac.h: Use HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK).
        * page/CaptionUserPreferencesMac.mm: Ditto.
        (WebCore::CaptionUserPreferencesMac::CaptionUserPreferencesMac): Ditto.
        (WebCore::CaptionUserPreferencesMac::~CaptionUserPreferencesMac): Ditto.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferences): Ditto.

2013-02-28  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: support the boundary event
        https://bugs.webkit.org/show_bug.cgi?id=107350

        Reviewed by Beth Dakin.

        Generate boundary events for speech synthesis and have them fire the appropriate events.
        This implements for the Mac platform, as well as simulating these events in the mock
        synthesizer for testing purposes.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-boundary-events.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore):
        (WebCore::SpeechSynthesis::boundaryEventOccurred):
        * Modules/speech/SpeechSynthesis.h:
        (SpeechSynthesis):
        * platform/PlatformSpeechSynthesizer.h:
        (WebCore):
        (PlatformSpeechSynthesizerClient):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speechSynthesizer:willSpeakWord:ofString:]):
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::speak):

2013-02-28  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Histogram all exits from IDBBackingStore::open
        https://bugs.webkit.org/show_bug.cgi?id=110677

        Reviewed by Tony Chang.

        No tests because this only changes logging code.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::open):

2013-02-28  Aaron Colwell  <acolwell@chromium.org>

        Factor SourceBuffer methods out of MediaSourcePrivate & WebMediaSource
        into SourceBufferPrivate & WebSourceBuffer respectively.
        https://bugs.webkit.org/show_bug.cgi?id=110798

        Reviewed by Adam Barth, Jer Noble.

        No new tests. No user visible behavior has changed.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::removeSourceBuffer):
        * Modules/mediasource/MediaSource.h:
        (MediaSource):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::create):
        (WebCore):
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::buffered):
        (WebCore::SourceBuffer::setTimestampOffset):
        (WebCore::SourceBuffer::append):
        (WebCore::SourceBuffer::abort):
        (WebCore::SourceBuffer::removedFromMediaSource):
        (WebCore::SourceBuffer::isRemoved):
        (WebCore::SourceBuffer::isOpen):
        (WebCore::SourceBuffer::isEnded):
        * Modules/mediasource/SourceBuffer.h:
        (WebCore):
        (SourceBuffer):
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::SourceBufferList):
        (WebCore::SourceBufferList::remove):
        (WebCore::SourceBufferList::clear):
        * Modules/mediasource/SourceBufferList.h:
        (SourceBufferList):
        * html/HTMLMediaElement.cpp:
        * platform/graphics/MediaSourcePrivate.h:
        (WebCore):
        (MediaSourcePrivate):
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore):
        (SourceBufferPrivate): Contains methods extracted from MediaPlayerPrivate.
        (WebCore::SourceBufferPrivate::SourceBufferPrivate):
        (WebCore::SourceBufferPrivate::~SourceBufferPrivate):

2013-02-28  Joe Mason  <jmason@rim.com>

        [BlackBerry] Handle Set-Cookie immediately even when loading is deferred
        https://bugs.webkit.org/show_bug.cgi?id=111083

        Reviewed by Yong Li.

        Internal PR: 298805
        Internally Reviewed By: Leo Yang

        Handle Set-Cookie headers immediately, even if loading is being deferred, since any request
        created while loading is deferred should include all cookies received. (This especially
        affects Set-Cookie headers sent with a 401 response - often this causes an auth dialog to be
        opened, which defers loading, but the followup request using the credentials from the dialog
        needs to include the cookie.)

        This is safe because handleSetCookieHeader only updates the cookiejar, it doesn't call back
        into the loader.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyHeadersReceived):
        (WebCore::NetworkJob::handleNotifyHeaderReceived):

2013-02-28  David Grogan  <dgrogan@chromium.org>

        IndexedDB: IO error when checking schema should destroy LevelDB directory
        https://bugs.webkit.org/show_bug.cgi?id=110675

        Reviewed by Adam Barth.

        Also some refactoring to remove IDBBackingStore's dependence on
        static LevelDBDatabase methods. This facilitated the unit test.

        New unit test - IDBIOErrorTest.CleanUpTest

        * Modules/indexeddb/IDBBackingStore.cpp:
        (DefaultLevelDBFactory):
        Wraps the previous behavior.
        (WebCore::IDBBackingStore::open):
        The default parameter provides the previous behavior, which is what
        non-tests want.
        * Modules/indexeddb/IDBBackingStore.h:
        * platform/leveldb/LevelDBDatabase.h:

2013-02-28  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r144157.
        http://trac.webkit.org/changeset/144157
        https://bugs.webkit.org/show_bug.cgi?id=110794

        It broke chromium windows build

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNamedConstructor):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorMethodCustom):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):

2013-02-26  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Rewrite the painting/stacking model to be spec compliant.
        https://bugs.webkit.org/show_bug.cgi?id=110624.

        Reviewed by Simon Fraser.

        This patch implements a new painting and hit testing model for columns that is
        spec-compliant with Section 3.5 of the multicolumn specification, which states:
        
        "All column boxes in a multi-column element are in the same stacking context and
        the drawing order of their contents is as specified in CSS 2.1. Column boxes do
        not establish new stacking contexts."
        
        What this statement means is that you cannot paint a layer and all its stacking
        context descendants in a strip in each column, since some of those descendants
        might actually "break out" of the pagination (like fixed positioned descendants)
        and overlap multiple columns. In addition clips may apply across pagination
        boundaries, and any overlap caused by opacity has to do the right thing and
        treat the paginated and unpaginated components together as a single unit.
        
        The solution to this problem is to introduce the concept of a LayerFragment. Now
        all layers when painting or hit testing compute a fragment list, and that list
        is then walked in order to do painting and hit testing of layers. In the simple
        unpaginated case, a layer has one LayerFragment, but in the case of columns the
        layer may be broken up into multiple fragments representing boxes in separate
        columns.
        
        Much of this patch consists of refactoring all of the painting and hit testing
        code to operate on these fragments.

        Test: fast/multicol/mixed-positioning-stacking-order.html.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::collectLayerFragments):
        This method is called by the RenderLayer code to fetch the layer fragments from
        the regions of a flow thread. The flow thread just turns around and calls into
        each of its regions one by one to get the fragments from each region.

        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        A new function that collects LayerFragments and then determines the bounding
        box that encloses all of the fragments.

        * rendering/RenderFlowThread.h:
        Declarations of the new methods for obtaining layer fragments and bounding
        box information for fragments.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updatePagination):
        RenderLayers now track an enclosing pagination layer. If this is set, then the layer knows it
        needs to check with the enclosing pagination layer's flow thread renderer to
        obtain layer fragments.
        
        (WebCore::transparencyClipBox):
        Modified to obtain a fragments bounding box so that opacity can operate correctly on
        column boxes.

        (WebCore::accumulateOffsetTowardsAncestor):
        This method has been patched to allow for fixed positioned objects to escape
        in-flow RenderFlowThreads. Our in-flow RenderFlowThreads behave differently from
        CSS Regions flow threads in that they aren't necesssarily acting as the containing
        block for all of their descendants. Content is allowed to "escape" from the flow
        thread.

        (WebCore::RenderLayer::collectFragments):
        A new method that collects fragments from the flow thread and sets up the appropriate
        clips and translations on each fragment.

        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::paintOverflowControlsForFragments):
        Refactoring of painting to break all individual painting steps out into methods that walk over
        fragment boxes. This actually had the side effect of making the main painting function,
        paintLayerContents, much cleaner and easier to read. :)
        
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::createLocalTransformState):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestContentsForFragments):
        (WebCore::RenderLayer::hitTestResizerInFragments):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        (WebCore::RenderLayer::hitTestContents):
        (WebCore::RenderLayer::hitTestList):
        Refactoring of hit testing to break all individual hit testing steps out into methods that walk over
        fragment boxes.
        
        (WebCore::RenderLayer::backgroundClipRect):
        Modified to avoid using the clip rects cache when crossing into different pagination contexts,
        e.g., from unpaginated to paginated.
        
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::boundingBox):
        Modified boundingBox to work with fragments. A new flag is used to indicate whether or not
        the bounds of fragments or the original unsplit box are being computed.
        
        (WebCore::RenderLayer::collectLayers):
        Fix layer collection so that in-flow RenderFlowThreads can still be collected, since in-flow
        RenderFlowThreads do not establish stacking contexts.

        * rendering/RenderLayer.h:
        (WebCore::ClipRect::moveBy):
        Added a moveBy method that just wrap the corresponding LayoutRect method.

        (LayerFragment):
        (WebCore::LayerFragment::LayerFragment):
        (WebCore::LayerFragment::setRects):
        (WebCore::LayerFragment::moveBy):
        (WebCore::LayerFragment::intersect):
        (WebCore::RenderLayer::enclosingPaginationLayer):
        The new LayerFragment struct. Holds clips and translation information for each fragment box.

        (WebCore::RenderLayer::isOutOfFlowRenderFlowThread):
        Helper method for determining if the renderer is an out-of-flow RenderFlowThread.

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::createMultiColumnFlowThreadStyle):
        Change the flow thread style to no longer establish a stacking context.
        
        (WebCore::RenderMultiColumnBlock::layoutBlock):
        Patched to move the flow thread to a position that allows it to be untranslated in the
        initial column.

        (WebCore):
        * rendering/RenderMultiColumnBlock.h:
        (RenderMultiColumnBlock):
        layoutBlock is subclassed to tweak the flow thread's position.

        * rendering/RenderMultiColumnFlowThread.h:
        (RenderMultiColumnFlowThread):
        The flow thread for multi-column blocks implements collectLayerFragments to hand back LayerFragment
        information based off its RenderMultiColumnSets.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::paintObject):
        Changed to no longer paint column contents, since the layer code is just doing that now.

        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        The method that figures out what columns are intersected by a layer and hands back
        initial fragment information.

        * rendering/RenderMultiColumnSet.h:
        (RenderMultiColumnSet):
        Declaration of collectLayerFragments.
        
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::container):
        Patch container() to allow fixed positioned objects to escape in-flow RenderFlowThreads.
        
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isInFlowRenderFlowThread):
        (WebCore::RenderObject::isOutOfFlowRenderFlowThread):
        Methods for distinguishing between in-flow and out-of-flow RenderFlowThreads.

        (WebCore::RenderObject::canContainFixedPositionObjects):
        Patch canContainFixedPositionObjects() to allow fixed positioned objects to escape
        in-flow RenderFlowThreads.
        
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::collectLayerFragments):
        (RenderRegion):
        The virtual functions on Region for fragment collection.

2013-02-28  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: Adding existing key in DOMStorageItemsView leaves it inconsistent state
        https://bugs.webkit.org/show_bug.cgi?id=111061

        Reviewed by Alexander Pavlov.

        The view must be checked for all the rows with the matching keys. Only the first one would be updated
        with the new value while the others must be removed from the grid. Also in case there are various key/value
        pairs, the changed node should be selected and revealed in the grid.

        No new tests as UI related minor change.

        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._domStorageItemUpdated):

2013-02-28  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] User credentials is not correctly handled
        https://bugs.webkit.org/show_bug.cgi?id=110994

        Reviewed by Yong Li.

        WTF::String::utf8 no longer receives a bool, see r134173.

        * platform/network/blackberry/CredentialBackingStore.cpp:
        (WebCore::CredentialBackingStore::encryptedString):

2013-02-28  Lianghui Chen  <liachen@rim.com>

        [BlackBerry] User credentials are not correctly handled for non-browser usage
        https://bugs.webkit.org/show_bug.cgi?id=111032

        Internal PR: 295181
        Internal reviewed by Joe Mason.

        Reviewed by Yong Li.

        Use encrypted password as binary data when calling SQLiteStatement::bindBlob(), in
        stead of using it as a normal WTF::String.

        No new tests as this causes no expected behaviour change.

        * platform/network/blackberry/CredentialBackingStore.cpp:
        (WebCore::CredentialBackingStore::addLogin):
        (WebCore::CredentialBackingStore::updateLogin):

2013-02-28  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: "loadScript" function to load scripts via xhr
        https://bugs.webkit.org/show_bug.cgi?id=110879

        Reviewed by Pavel Feldman.

        Create an alias for "importScript" function and use it in those cases
        which assume lazy script loading.

        No new tests.

        * inspector/front-end/Panel.js:
        (WebInspector.PanelDescriptor.prototype.panel):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        * inspector/front-end/utilities.js:

2013-02-28  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Move profiler tools into separate panels
        https://bugs.webkit.org/show_bug.cgi?id=109832

        Reviewed by Yury Semikhatsky.

        This is a first part of the fix that puts each profiler tool into a separate panel.
        The fix introduces separate panels for each profiler type.
        There are now six panel (including experimental):
          1. JS CPU profiler
          2. CSS Selector profiler
          3. JS Heap profiler
          4. Canvas profier
          5. Native memory snapshots
          6. Native memory distribution
        The new functionality is put behind experimental flag.

        * inspector/front-end/ProfileLauncherView.js:
        (WebInspector.ProfileLauncherView):
        (WebInspector.ProfileLauncherView.prototype.addProfileType):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileHeader.prototype.view):
        (WebInspector.ProfileHeader.prototype.createView):
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype._handleContextMenuEvent):
        (WebInspector.ProfilesPanel.prototype._addProfileHeader):
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):
        (WebInspector.ProfilesPanel.prototype._showProfile):
        (WebInspector.ProfilesPanel.prototype._searchableViews):
        (WebInspector.ProfileSidebarTreeElement.prototype.handleContextMenuEvent):
        (WebInspector.ProfileGroupSidebarTreeElement):
        (WebInspector.ProfileGroupSidebarTreeElement.prototype.onselect):
        (WebInspector.CPUProfilerPanel):
        (WebInspector.CSSSelectorProfilerPanel):
        (WebInspector.HeapProfilerPanel):
        (WebInspector.CanvasProfilerPanel):
        (WebInspector.MemoryChartProfilerPanel):
        (WebInspector.NativeMemoryProfilerPanel):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/inspector.css:
        (.toolbar-item.cpu-profiler .toolbar-icon):
        (.toolbar-item.css-profiler .toolbar-icon):
        (.toolbar-item.heap-profiler .toolbar-icon):
        (.toolbar-item.canvas-profiler .toolbar-icon):
        (.toolbar-item.memory-chart-profiler .toolbar-icon):
        (.toolbar-item.memory-snapshot-profiler .toolbar-icon):
        * inspector/front-end/inspector.js:
        (WebInspector._panelDescriptors):

2013-02-28  Keishi Hattori  <keishi@webkit.org>

        Add calendar header for new calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=110967

        Reviewed by Kent Tamura.

        The calendar header showing the current month and containing navigation
        buttons, which will be part of the new calendar picker (Bug 109439).

        No new tests. Code is not yet used.

        * Resources/pagepopups/calendarPicker.js:
        (MonthPopupButton): Button that opens the month popup.
        (MonthPopupButton.prototype._shouldUseShortMonth): Returns true if we should use the short month format in order to fit in the available width.
        (MonthPopupButton.prototype.setCurrentMonth): Sets the month to the button label.
        (MonthPopupButton.prototype.onClick): Dispatches buttonClick event which will tell the calendar picker to open the month popup.
        (CalendarNavigationButton): A square button that fires repeatedly while the mouse is pressed down.
        (CalendarNavigationButton.prototype.setDisabled):
        (CalendarNavigationButton.prototype.onClick):
        (CalendarNavigationButton.prototype.onMouseDown): Sets the timer to fire while the mouse is pressed down.
        (CalendarNavigationButton.prototype.onWindowMouseUp):
        (CalendarNavigationButton.prototype.onRepeatingClick):
        (CalendarHeaderView): View containing month popup button and the navigation buttons.
        (CalendarHeaderView.prototype.onCurrentMonthChanged): Sets the MonthPopupButton label and checks if the navigation buttons should be disabled.
        (CalendarHeaderView.prototype.onNavigationButtonClick):
        (CalendarHeaderView.prototype.setDisabled): Used to disable all the buttons while the month popup is open.

2013-02-28  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: class console-formatted-string renamed to console-formatted- ?
        https://bugs.webkit.org/show_bug.cgi?id=110881

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._renderPropertyPreview):

2013-02-28  Mike West  <mkwst@chromium.org>

        XSSAuditor should strip formaction attributes from input and button elements.
        https://bugs.webkit.org/show_bug.cgi?id=110975

        Reviewed by Daniel Bates.

        The 'formaction' attribute of 'input' and 'button' elements is just as
        dangerous as the 'action' attribute of 'form' elements. This patch
        teaches the XSSAuditor how to avoid them.

        Tests: http/tests/security/xssAuditor/formaction-on-button.html
               http/tests/security/xssAuditor/formaction-on-input.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterStartToken):
        (WebCore::XSSAuditor::filterInputToken): Added.
        (WebCore::XSSAuditor::filterButtonToken): Added.
        * html/parser/XSSAuditor.h:
            Create filters for 'input' and 'button' elements, which currently
            only have the effect of filtering the 'formaction' attribute.

2013-02-28  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        REGRESSION(r144169): It broke clipping
        https://bugs.webkit.org/show_bug.cgi?id=111065

        Reviewed by Noam Rosenthal.

        The clipstack was not marked dirty when new clips were added
        leading to clipping never being applied.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::ClipStack::push):

2013-02-28  Tamas Czene  <tczene@inf.u-szeged.hu>

        OpenCL implementation of FEImage SVG Filter.
        https://bugs.webkit.org/show_bug.cgi?id=110752

        Reviewed by Zoltan Herczeg.

        The result of the image is uploaded to an OpenCL buffer.

        * Target.pri:
        * platform/graphics/gpu/opencl/OpenCLFEImage.cpp: Added.
        (WebCore):
        (WebCore::FEImage::platformApplyOpenCL):
        * svg/graphics/filters/SVGFEImage.h:
        (FEImage):

2013-02-28  Mike West  <mkwst@chromium.org>

        Web Inspector: Make it obvious where command line functions come from
        https://bugs.webkit.org/show_bug.cgi?id=62367

        Reviewed by Pavel Feldman.

        This patch adds a custom .toString() method on the various command-line
        API methods that are bound in the inspector. Rather than dumping the
        function text, we now model the response after that of native methods:
        "function __() { [Command Line API] }".

        Test: inspector/console/console-native-function-to-string.html

        * inspector/InjectedScriptSource.js:
            Added a function to the CommandLineAPI constructor that creates a
            custom toString() method for each command-line API method.

2013-02-28  David Kilzer  <ddkilzer@apple.com>

        ResourceRequestCFNet.cpp won't compile after r144216
        <http://webkit.org/b/111034>

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Move Mac-only symbol into !PLATFORM(IOS)
        section.  Update iOS-only symbol to add argument.
        * platform/network/cf/ResourceRequest.h: Remove unused method
        declaration.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody): Fix typos.
        Add static_cast<CFStringRef>().
        (WebCore::ResourceRequest::doUpdateResourceHTTPBody): Fix another
        typo.

2013-02-28  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r144184.
        http://trac.webkit.org/changeset/144184
        https://bugs.webkit.org/show_bug.cgi?id=110974

        The change didn't fix all of the problems.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):

2013-02-27  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Protocol] Genarate JS enum definitions.
        https://bugs.webkit.org/show_bug.cgi?id=110461

        Reviewed by Pavel Feldman.

        Generating corresponding type annotations
        would help to compiler to point errors.

        * inspector/CodeGeneratorInspector.py: Generate "registerEnum" records.
        * inspector/InjectedScriptSource.js: Shadow compiler warning.
        * inspector/front-end/InspectorBackend.js:
        Added "registerEnum". Added "registerEnum" generation.
        * inspector/front-end/NetworkManager.js: Use enum instead of literal.
        * inspector/generate_protocol_externs.py: Generate enum typedefs.

2013-02-27  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Step-up/-down of hour field should respect min/max attributes
        https://bugs.webkit.org/show_bug.cgi?id=109555

        Reviewed by Kent Tamura.

        Make step-up/-down of the hour field respect the min/max attributes of the element.
        Note that it still accepts any keyboard inputs (the element
        becomes 'invalid' state when out-of-range values entered).
        Also, disable the hour field and/or the AMPM field when there is only single possible value.

        Test: fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-readonly-subfield.html
              fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-stepup-stepdown-from-renderer.html
              fast/forms/time-multiple-fields/time-multiple-fields-readonly-subfield.html
              fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html

        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::setupLayoutParameters): Populates layoutParameters.{minimum,maximum}.
        * html/shadow/DateTimeEditElement.cpp:
        (DateTimeEditBuilder): Add data fields for min/max of day and hour fields.
        (WebCore::DateTimeEditBuilder::DateTimeEditBuilder): Set newly added data members.
        (WebCore::DateTimeEditBuilder::visitField): Pass minimum/maximum value to the month field constructors.
        (WebCore::DateTimeEditBuilder::shouldAMPMFieldDisabled): Added.
        (WebCore::DateTimeEditBuilder::shouldDayOfMonthFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldHourFieldDisabled):
        Disables the hour field when min, max, and value have the same hour, except when the minute
        field is disabled (by step attribute), because we need to leave at least one field editable.
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeHourFieldElementBase::DateTimeHourFieldElementBase):
        (WebCore::DateTimeHourFieldElementBase::initialize):
        (WebCore::DateTimeHourFieldElementBase::setValueAsDate):
        (WebCore::DateTimeHourFieldElementBase::setValueAsDateTimeFieldsState):
        (WebCore::DateTimeHour11FieldElement::DateTimeHour11FieldElement):
        (WebCore::DateTimeHour11FieldElement::create):
        (WebCore::DateTimeHour11FieldElement::populateDateTimeFieldsState):
        (WebCore::DateTimeHour11FieldElement::setValueAsInteger):
        (WebCore::DateTimeHour11FieldElement::clampValueForHardLimits):
        (WebCore::DateTimeHour12FieldElement::DateTimeHour12FieldElement):
        (WebCore::DateTimeHour12FieldElement::create):
        (WebCore::DateTimeHour12FieldElement::populateDateTimeFieldsState):
        (WebCore::DateTimeHour12FieldElement::setValueAsInteger):
        (WebCore::DateTimeHour12FieldElement::clampValueForHardLimits):
        (WebCore::DateTimeHour23FieldElement::DateTimeHour23FieldElement):
        (WebCore::DateTimeHour23FieldElement::create):
        (WebCore::DateTimeHour23FieldElement::populateDateTimeFieldsState):
        (WebCore::DateTimeHour23FieldElement::setValueAsInteger):
        (WebCore::DateTimeHour23FieldElement::clampValueForHardLimits):
        (WebCore::DateTimeHour24FieldElement::DateTimeHour24FieldElement):
        (WebCore::DateTimeHour24FieldElement::create):
        (WebCore::DateTimeHour24FieldElement::populateDateTimeFieldsState):
        (WebCore::DateTimeHour24FieldElement::setValueAsInteger):
        (WebCore::DateTimeHour24FieldElement::clampValueForHardLimits):
        * html/shadow/DateTimeFieldElements.h: Splitted DateTimeHourFieldElement into a base class and four derived classes that represents different hour formats.
        (DateTimeHourFieldElementBase): Added.
        (DateTimeHour11FieldElement): Added. Represents 0-11 hour format.
        (DateTimeHour12FieldElement): Added. Represents 1-12 hour format.
        (DateTimeHour23FieldElement): Added. Represents 0-23 hour format.
        (DateTimeHour24FieldElement): Added. Represents 1-24 hour format.

2013-02-27  Tien-Ren Chen  <trchen@chromium.org>

        Need to re-layout fixed position elements after scale when using settings()->fixedElementsLayoutRelativeToFrame()
        https://bugs.webkit.org/show_bug.cgi?id=105486

        Reviewed by James Robinson.

        In settings()->fixedElementsLayoutRelativeToFrame() mode, fixed-position
        elements are layout relative to the current visible viewport, which can
        be different from the layout viewport when using fixed-layout mode.
        We need to re-layout fixed-position elements in case of visible content
        size changes.

        The test is currently chromium-specific due to difficulties to make this
        test works on Mac. The mac port seems to work very differently with
        visible content size when a page is scaled. And there is no reliable way
        to hide scrollbars in mac-wk1 that doesn't cause a side effect.

        Test: platform/chromium/fast/repaint/relayout-fixed-position-after-scale.html

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

2013-02-27  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Enable shape-inside rectangle support for shape-padding
        https://bugs.webkit.org/show_bug.cgi?id=110500

        Reviewed by Dirk Schulze.

        Added support for CSS shape-padding for shapes defined with shape-inside.

        Tests: fast/exclusions/shape-inside/shape-inside-circle-padding.html
               fast/exclusions/shape-inside/shape-inside-ellipse-padding.html
               fast/exclusions/shape-inside/shape-inside-rectangle-padding.html
               fast/exclusions/shape-inside/shape-inside-rounded-rectangle-padding.html

        * rendering/ExclusionRectangle.cpp:
        (WebCore::FloatRoundedRect::paddingBounds): Inset the rounded rectangle to reflect the padding parameter.
        (WebCore::FloatRoundedRect::marginBounds): Expand the rounded rectangle to reflect the margin parameter.
        (WebCore::FloatRoundedRect::cornerInterceptForWidth): Moved this method from ExclusionRectangle to FloatRoundedRect.
        (WebCore::ExclusionRectangle::shapePaddingBounds): Lazily compute the bounds of the padding box.
        (WebCore::ExclusionRectangle::shapeMarginBounds): Lazily compute the bounds of the margin box.
        (WebCore::ExclusionRectangle::getExcludedIntervals): This computuation is now based on the (new) margin box.
        (WebCore::ExclusionRectangle::getIncludedIntervals): This computation is now base don the (new) padding box.
        (WebCore::ExclusionRectangle::firstIncludedIntervalLogicalTop): This computation is now base don the (new) padding box.
        * rendering/ExclusionRectangle.h:
        (FloatRoundedRect): A subclass of FloatRect that includes corner radii specified as CSS shapes do.
        (WebCore::FloatRoundedRect::FloatRoundedRect):
        (WebCore::FloatRoundedRect::rx):
        (WebCore::FloatRoundedRect::ry):
        (WebCore::ExclusionRectangle::ExclusionRectangle):
        * rendering/ExclusionShape.cpp:
        (WebCore::ExclusionShape::createExclusionShape): Initialize the new shapeMargin and shapePadding properties.
        * rendering/ExclusionShape.h:
        (ExclusionShape):
        (WebCore::ExclusionShape::shapeMargin): Added a public read-only property for shapeMargin.
        (WebCore::ExclusionShape::shapePadding): Added a public read-only property for shapePadding.
        * rendering/ExclusionShapeInfo.cpp:
        (WebCore::::computedShape): Pass the values of the CSS shape-margin and shapp-padding properties to createExclusionShape().

2013-02-25  Alpha Lam  <hclam@chromium.org>

        More style cleanup in GIFImageReader
        https://bugs.webkit.org/show_bug.cgi?id=110776

        Reviewed by Allan Sandfeld Jensen.

        Renamed variable q to currentComponent which more accurately represent
        the purpose.

        No test. Simple refactoring.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::decodeInternal):

2013-02-27  Keishi Hattori  <keishi@webkit.org>

        Add month popup for new calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=110830

        Reviewed by Kent Tamura.

        Adding month popup view for use in the new calendar picker (Bug 109439).
        YearListCell will grow in height when selected to reveal the buttons for
        selecting the month.

        No new tests. Code is not used yet.

        * Resources/pagepopups/calendarPicker.js:
        (YearListCell): A row inside the month popup. Contains buttons for choosing a month.
        (YearListCell.prototype._recycleBin):
        (YearListCell.prototype.reset): Resets a thrown away cell for reuse at the given row.
        (YearListCell.prototype.height):
        (YearListCell.prototype.setHeight):
        (YearListView): List view showing YearListCells.
        (YearListView.prototype.onMouseOver): If the mouse is over a month button, highlights it.
        (YearListView.prototype.onMouseOut): De-highlights the month button.
        (YearListView.prototype.setWidth): Set scroll view width to leave space for the scroll bar.
        (YearListView.prototype.setHeight): Sets the scroll bar height as well.
        (YearListView.prototype._animateRow): Animates the row height to open/close the YearListCell.
        (YearListView.prototype.onCellHeightAnimatorDidStop): Keep this._runningAnimators and this._animatingRows up to date.
        (YearListView.prototype.onCellHeightAnimatorStep): Update the cell height and position.
        (YearListView.prototype.onClick): If this is a click on a month button, select the month.
        (YearListView.prototype.rowAtScrollOffset): Calculates the row currently at the given offset.
        (YearListView.prototype.scrollOffsetForRow): Calculates the current scroll offset of the given row.
        (YearListView.prototype.prepareNewCell): Prepares a new or recycled YearListCell.
        (YearListView.prototype.updateCells): Updates the position of the visible cells.
        (YearListView.prototype.deselect): Deselects a row.
        (YearListView.prototype.deselectWithoutAnimating): Deselects a row without the closing animation.
        (YearListView.prototype.select): Selects a row.
        (YearListView.prototype.selectWithoutAnimating): Deselects a row without the opening animation.
        (YearListView.prototype.buttonForMonth): Returns the month button for a given month. Returns null if the cell is not visible.
        (YearListView.prototype.dehighlightMonth): Dehighlights the month button.
        (YearListView.prototype.highlightMonth): Highlights the month button.
        (YearListView.prototype.show): Call when showing the year list view. Shows the given month as highlighted.
        (YearListView.prototype.hide): Dispatches a did hide event which will be picked up by the CalendarPicker and the MonthPopupView will close.
        (YearListView.prototype._moveHighlightTo): Used to move the month highlight in response to a key event.
        (YearListView.prototype.onKeyDown): Arrow keys and PageUp/PageDown keys work.
        (MonthPopupView): The popup view to be overlayed over the calendar picker.
        (MonthPopupView.prototype.show): Takes the initialMonth to show and the calendarTableRect so we can overlay the year list view right on top of it.
        (MonthPopupView.prototype.hide):
        (MonthPopupView.prototype.onClick): Hides itself if the use clicks outside the year list view.

2013-02-27  Adam Barth  <abarth@webkit.org>

        Use FeatureObserver to see how often web sites use multipart main documents
        https://bugs.webkit.org/show_bug.cgi?id=111015

        Reviewed by Nate Chapin.

        Multipart main documents add sigificant complexity to the loader.  It
        would be interesting to know how often this complexity is used.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::responseReceived):
        * page/FeatureObserver.h:

2013-02-27  James Simonsen  <simonjam@chromium.org>

        [chromium] Lower priority of preloaded images
        https://bugs.webkit.org/show_bug.cgi?id=110527

        Reviewed by Nate Chapin.

        This improves Speed Index by ~5%, because it encourages us to load images that are needed for
        painting over speculative preloads. Ideally, all embedders would use this, but it relies on
        ResourceHandle::didChangePriority being implemented. Currently, only Chrome does that.

        Test: http/tests/loading/promote-img-preload-priority.html

        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        (WebCore::FrameLoaderClient::dispatchDidChangeResourcePriority): Added callback to enable testing.
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setLoadPriority): Signal callback.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::preload): Actual behavior change.

2013-02-27  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial buildfix after r144190.

        * platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):

2013-02-27  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: support speech cancel
        https://bugs.webkit.org/show_bug.cgi?id=107349

        Reviewed by Beth Dakin.

        Add the ability to cancel speech utterances and make it work with Mac
        and the mock speech synthesizer.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-cancel.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::pending):
        (WebCore::SpeechSynthesis::cancel):
        (WebCore::SpeechSynthesis::handleSpeakingCompleted):
        * platform/PlatformSpeechSynthesizer.h:
        (PlatformSpeechSynthesizer):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper cancel]):
        (WebCore::PlatformSpeechSynthesizer::cancel):
        (WebCore):
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::cancel):
        (WebCore):
        (WebCore::PlatformSpeechSynthesizerMock::speak):
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        (PlatformSpeechSynthesizerMock):

2013-02-27  Min Qin  <qinmin@chromium.org>

        Unlock partially decoded images after passing them to the ImageDecodingStore
        https://bugs.webkit.org/show_bug.cgi?id=110778

        Reviewed by Stephen White.

        For partially decoded images, we need to unlock them so that the memory can be freed.
        This change unlocks all the image frames after they are passed to ImageDecodingStore.
        Unit tests are added in ImageFrameGeneratorTest.

        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::tryToResumeDecodeAndScale):
        (WebCore::ImageFrameGenerator::tryToDecodeAndScale):
        (WebCore::ImageFrameGenerator::decode):
        * platform/image-decoders/ImageDecoder.h:
        (ImageDecoder):
        (WebCore::ImageDecoder::lockFrameBuffers):
        (WebCore::ImageDecoder::unlockFrameBuffers):

2013-02-27  Kenneth Russell  <kbr@google.com>

        Insufficient validation when uploading depth textures to WebGL
        https://bugs.webkit.org/show_bug.cgi?id=110931

        Reviewed by Abhishek Arya.

        Updated webgl/conformance/extensions/webgl-depth-texture.html
        layout test with additional test cases.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2D):
            Check for valid format/type combinations, depth, and
            depth+stencil formats when uploading HTML elements and
            ImageData as textures.

2013-02-27  Adam Barth  <abarth@webkit.org>

        Threaded HTML Parser fails fast/dom/HTMLAnchorElement/anchor-no-multiple-windows.html in debug
        https://bugs.webkit.org/show_bug.cgi?id=110951

        Reviewed by Eric Seidel.

        We were triggering this ASSERT because we didn't understand that a
        given frame might have multiple DocumentLoaders in various states. That
        caused us to think that a DocumentLoader in the provisional state was
        actually loading.

        * dom/Document.cpp:
        (WebCore::Document::decrementActiveParserCount):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):

2013-02-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Mac platform should support ability to scroll an element into visible
        https://bugs.webkit.org/show_bug.cgi?id=109860

        Reviewed by Beth Dakin.

        Support the scrollToMakeVisible() action for MacOS accessibility clients.

        Tests: platform/mac/accessibility/scroll-to-visible-action.html

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityActionNames]):
        (-[WebAccessibilityObjectWrapper accessibilityScrollToVisible]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):

2013-02-27  John Bauman  <jbauman@chromium.org>

        Plugin in iframe may not display
        https://bugs.webkit.org/show_bug.cgi?id=109879

        Reviewed by Simon Fraser.

        Changing the cliprect on a layer containing an iframe may change the
        cliprect of plugins inside the iframe, so recursively tell all plugins
        in iframes that their cliprect has changed after doing layout on the
        outer frame.

        Test: plugins/plugin-clip-subframe.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::clipRectChanged):
        * platform/ScrollView.h:
        * platform/Widget.h:
        (WebCore::Widget::clipRectChanged):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::clipRectChanged):
        * plugins/PluginView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):

2013-02-27  Chris Rogers  <crogers@google.com>

        Implement channel up-mixing and down-mixing rules
        https://bugs.webkit.org/show_bug.cgi?id=110812

        Reviewed by Kenneth Russell.

        Please see Web Audio specification for details of the AudioNode mixing rules attributes:
        https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#UpMix

        Test: webaudio/audionode-channel-rules.html

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::channelCount):
        (WebCore):
        (WebCore::AudioNode::setChannelCount):
        (WebCore::AudioNode::channelCountMode):
        (WebCore::AudioNode::setChannelCountMode):
        (WebCore::AudioNode::channelInterpretation):
        (WebCore::AudioNode::setChannelInterpretation):
        (WebCore::AudioNode::updateChannelsForInputs):
        * Modules/webaudio/AudioNode.h:
        (AudioNode):
        (WebCore::AudioNode::internalChannelCountMode):
        (WebCore::AudioNode::internalChannelInterpretation):
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::numberOfChannels):
        (WebCore::AudioNodeInput::bus):
        (WebCore::AudioNodeInput::internalSummingBus):
        (WebCore::AudioNodeInput::sumAllConnections):
        (WebCore::AudioNodeInput::pull):
        * Modules/webaudio/AudioNodeInput.h:
        (AudioNodeInput):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::speakersCopyFrom):
        (WebCore::AudioBus::speakersSumFrom):
        (WebCore::AudioBus::speakersSumFrom5_1_ToMono):
        (WebCore):
        * platform/audio/AudioBus.h:
        (AudioBus):

2013-02-27  Adam Barth  <abarth@webkit.org>

        Threaded HTML parser hits ASSERTION FAILED: this == frameLoader()->activeDocumentLoader()
        https://bugs.webkit.org/show_bug.cgi?id=110937

        Reviewed by Darin Adler.

        This patch restores the ASSERT behind an ifdef so that we can continue
        to get converage from the ASSERT while we investigate why it is
        triggering in the threaded parser.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::checkLoadComplete):

2013-02-27  Lianghui Chen  <liachen@rim.com>

        [BlackBerry] User credentials is not correctly handled
        https://bugs.webkit.org/show_bug.cgi?id=110994

        Internal PR: 280990
        Internal reviewed by Leo Yang.

        Reviewed by Yong Li.

        Following changes are made:
            Remove url from generating the hash to index user credential.
            Remove url from database.
            Use new CertMgrWrapper API to remove password from CertMgr.
            Handle encrypted password as binary data, instead of normal text string.
            When authentication fails, remove the saved user credential only when they match.
            Remove some url related API from CredentialBackingStore, as they are obsolete now.

        No new tests as this is platform specific change about user credential.

        * platform/network/blackberry/CredentialBackingStore.cpp:
        (WebCore::hashCredentialInfo):
        (WebCore::CredentialBackingStore::CredentialBackingStore):
        (WebCore::CredentialBackingStore::~CredentialBackingStore):
        (WebCore::CredentialBackingStore::open):
        (WebCore::CredentialBackingStore::addLogin):
        (WebCore::CredentialBackingStore::updateLogin):
        (WebCore::CredentialBackingStore::hasLogin):
        (WebCore::CredentialBackingStore::getLogin):
        (WebCore::CredentialBackingStore::removeLogin):
        (WebCore::CredentialBackingStore::addNeverRemember):
        (WebCore::CredentialBackingStore::encryptedString):
        (WebCore::CredentialBackingStore::decryptedString):
        * platform/network/blackberry/CredentialBackingStore.h:
        (CredentialBackingStore):
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):
        (WebCore::NetworkJob::purgeCredentials):

2013-02-27  David Hyatt  <hyatt@apple.com>

        Refactor transform painting/hit testing code in RenderLayer.
        https://bugs.webkit.org/show_bug.cgi?id=110998

        Reviewed by Eric Seidel.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        Pull the code that applies the transform for painting into a new
        function that can also apply an additional translation offset. This
        offset will be used by the new columns code when that patch lands.
        
        (WebCore::RenderLayer::createLocalTransformState):
        Also patched to be able to apply an additional translation offset.

        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestLayerByApplyingTransform):
        Same as with painting, pull the code that applies the transform into
        its own function and also enable an extra translation offset to be
        applied.
        
        * rendering/RenderLayer.h:
        Added the new functions to the header.

2013-02-27  David Kilzer  <ddkilzer@apple.com>

        Touch CSSGrammar.y.in to fix an internal buildbot

        * css/CSSGrammar.y.in: Add copyright dates based on previous
        commits.

2013-02-27  Manuel Rego Casasnovas  <rego@igalia.com>

        Add smartInsertDeleteEnabled setting to WebCore::Page
        https://bugs.webkit.org/show_bug.cgi?id=107840

        Reviewed by Ryosuke Niwa.

        Covered by editing/deleting/smart-editing-disabled.html.

        * page/Settings.in: Add new setting with true as initial value.

2013-02-27  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: Support pause/resume ability
        https://bugs.webkit.org/show_bug.cgi?id=107345

        Reviewed by Beth Dakin.

        Add in the pause/resume functionality to SpeechSynthesis. Also hook up
        the callback events.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-pause-resume.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore::SpeechSynthesis::pending):
        (WebCore::SpeechSynthesis::paused):
        (WebCore::SpeechSynthesis::startSpeakingImmediately):
        (WebCore::SpeechSynthesis::pause):
        (WebCore::SpeechSynthesis::resume):
        (WebCore):
        (WebCore::SpeechSynthesis::didPauseSpeaking):
        (WebCore::SpeechSynthesis::didResumeSpeaking):
        * Modules/speech/SpeechSynthesis.h:
        (SpeechSynthesis):
        * platform/PlatformSpeechSynthesizer.h:
        (PlatformSpeechSynthesizerClient):
        (PlatformSpeechSynthesizer):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        (-[WebSpeechSynthesisWrapper pause]):
        (-[WebSpeechSynthesisWrapper resume]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeaking:]):
        (WebCore::PlatformSpeechSynthesizer::pause):
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::resume):

2013-02-26  Alexey Proskuryakov  <ap@apple.com>

        Don't add a body to platform request until necessary
        https://bugs.webkit.org/show_bug.cgi?id=110900

        Reviewed by Brady Eidson.

        ResourceRequest now has more state for syncing between resource and platform parts.
        In addition to tracking which is up to date, we also track which has up to date
        HTTP Body.

        The reason is that we don't need the body on request before it's actually sent,
        and we actually cannot build it when networking is out of process.

        * WebCore.exp.in: Updated exports.

        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setHTTPBody): Update HTTP body before returning it.
        (WebCore::ResourceRequestBase::updatePlatformRequest): Update according to HTTPBodyUpdatePolicy.
        (WebCore::ResourceRequestBase::updateResourceRequest): Ditto.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::formDataStreamLengthPropertyName):
        (WebCore::formCopyProperty):
        (WebCore::setHTTPBody):
        Changed to not update Content-Length in platform request directly. We need to keep it
        in sync with resource request, and it's easier to do in a caller. Exposed computed
        length as a property do avoid duplicating the work.

        * platform/network/cf/FormDataStreamCFNet.h: Removed unnecessary httpBodyFromStream().

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::ResourceHandle::createCFURLConnection):
        Update body when necessary.

        (WebCore::ResourceRequest::nsURLRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdateResourceHTTPBody):
        (WebCore):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldHTTPBody):
        (WebCore::ResourceRequest::applyWebArchiveHackForMail):
        Ditto.

        * platform/network/cf/ResourceRequest.h: Track body up-to-date state.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::cfURLRequest): Honor HTTPBodyUpdatePolicy.
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Don't update body here.
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody): Update the body, and make sure
        that Content-Length is correct.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Don't update body here.
        (WebCore::ResourceRequest::doUpdateResourceHTTPBody): Update the body, fixing a bug
        where body stream was lost if this function got called.
        (WebCore::ResourceRequest::applyWebArchiveHackForMail): No need to update body for this one.

        * platform/network/mac/ResourceRequestMac.mm: Ditto (but this didn't have a bug
        with streams in doUpdateResourceRequest()).

        * platform/network/mac/FormDataStreamMac.h: Forward declare formDataStreamLengthPropertyName().

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        Update body when necessary.

        * platform/network/blackberry/ResourceRequest.h:
        * platform/network/chromium/ResourceRequest.h:
        * platform/network/curl/ResourceRequest.h:
        * platform/network/qt/ResourceRequest.h:
        * platform/network/soup/ResourceRequest.h:
        * platform/network/win/ResourceRequest.h:
        Added stubs for new functions. These ports don't keep a platform request in ResourceRequest,
        and don't need updating.

2013-02-27  Glenn Adams  <glenn@skynav.com>

        Add ENABLE_CSS3_TEXT_LINE_BREAK flag.
        https://bugs.webkit.org/show_bug.cgi?id=110944

        Reviewed by Dean Jackson.

        No new tests.

        * Configurations/FeatureDefines.xcconfig:

2013-02-27  Andrei Bucur  <abucur@adobe.com>

        REGRESSION(r124739): fast/lists/list-marker-remove-crash.html hits an assertion in MoveParagraphs
        https://bugs.webkit.org/show_bug.cgi?id=93247

        Reviewed by Darin Adler.

        The listifyParagraph function inside InsertListCommand triggered a layout for the new list and updated
        only the "start" Position. The insertion and layout may have changed the "end" Position as well. The patch
        makes sure "end" is also recomputed.

        Test: No new test, the patch fixes a regression.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::listifyParagraph):

2013-02-27  Zach Kuznia  <zork@chromium.org>

        Add ENABLE_STREAM guards to FileReaderLoader
        https://bugs.webkit.org/show_bug.cgi?id=110938

        Reviewed by Hajime Morrita.

        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderLoader.h:

2013-02-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Switch QtWebKit to GStreamer 1.0.
        https://bugs.webkit.org/show_bug.cgi?id=106669.

        Original patch by Sebastian Dröge.
        Reviewed by Csaba Osztrogonác.

        * WebCore.pri:

2013-02-27  Eli Fidler  <efidler@rim.com>

        [BlackBerry] Fix BlackBerry::Platform::String to WTF::String conversion when the string is Latin-1-encoded.
        https://bugs.webkit.org/show_bug.cgi?id=110986

        Reviewed by Yong Li.

        Internally reviewed by Nima Ghanavatian.
        BlackBerry PR 292922

        We were assuming all platform strings were valid UTF-8, which isn't true for Latin-1 strings.

        * platform/text/blackberry/StringBlackBerry.cpp:
        (WTF::String::String):

2013-02-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [TexMap] REGRESSION(144183): It make negative delay tests fails
        https://bugs.webkit.org/show_bug.cgi?id=110989

        Reviewed by Noam Rosenthal.

        Do not apply a negative offset to the animation starttime send to the GraphicLayerClient,
        it needs the actual animation start not a virtual start.

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

2013-02-27  Aaron Colwell  <acolwell@chromium.org>

        Fix SourceBufferList so SourceBuffer.append() calls are always rejected after the MediaSource is closed.
        https://bugs.webkit.org/show_bug.cgi?id=110917

        Reviewed by Eric Carlson.

        Test: http/tests/media/media-source/video-media-source-reject-append-after-reopening.html

        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::clear):

2013-02-27  Justin Novosad  <junov@google.com>

        REGRESSION (r134631) of border-radius percentage with border pixel
        https://bugs.webkit.org/show_bug.cgi?id=110889

        Reviewed by Simon Fraser.

        Fixing background color filling to handle "non renderable" rounded
        rectangles.

        Test: fast/borders/border-radius-percent.html

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

2013-02-27  Florin Malita  <fmalita@chromium.org>

        [Chromium] Layout Test svg/custom/transform-with-shadow-and-gradient.svg is failing
        https://bugs.webkit.org/show_bug.cgi?id=76557

        Reviewed by Stephen Chenney.

        Always use kDst_Mode transfer for the shadow looper. Using kSrc_Mode to enforce CSS
        box-shadow opaqueness at this level is not necessary since the RenderBoxModel box
        decoration code already makes sure that shadows are filled with opaque black.

        This change aligns the SVG shadow behavior (and pixel results) with CG/Safari.

        No new tests, coverage provided by existing tests.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2013-02-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Generate a wrapper function for ReplaceableAttrSetter()
        https://bugs.webkit.org/show_bug.cgi?id=110781

        Reviewed by Adam Barth.

        This is one of steps to insert TRACE_EVENT_STATE() macros
        into DOM bindings. This patch introduces an indirection function
        for xxxReplaceableAttrSetter(), like this:

        // For non-custom replaceable setters (Note: One implementation
        is enough for all replaceable setters in one interface.)
        void V8XXX:::ReplaceableAttrSetterCallback(...) {
          V8XXX::ReplaceableAttrSetter(...);
        }

        // For custom replaceable setters. (Note: This is treated as
        a normal custom setter.)
        void xxxAttrSetterCallback(...) {
          return xxxAttrSetterCustom(...);
        }

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateReplaceableAttrSetterCallback):
        (GenerateReplaceableAttrSetter):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::TestObjReplaceableAttrSetterCallback):
        (TestObjV8Internal):
        (WebCore):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::TestTypedefsReplaceableAttrSetterCallback):
        (TestTypedefsV8Internal):

2013-02-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Flash objects won't load until scrolling page
        https://bugs.webkit.org/show_bug.cgi?id=110149

        Reviewed by Simon Hausmann.

        Revert r134222. The issue from bug 101836 is no longer reproducable,
        and the fix was causing flash objects to not load properly.

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

2013-02-27  No'am Rosenthal  <noam@webkit.org>

        [Texmap] TextureMapper is too eager to use intermediate surfaces
        https://bugs.webkit.org/show_bug.cgi?id=110762

        Reviewed by Allan Sandfeld Jensen.

        Refactor the way intermediate surfaces are handled in TextureMapperLayer.
        Beforehand, we would create an intermediate surface whenever there is a chance of overlap, and
        the intermediate surface would be the largest possible. The result would then be drawn to the
        target surface with the layer's opacity and mask.

        This would make it so that (1) surfaces are created even when they're not needed, i.e. when there
        is no actual overlap, and (2) mask wouldn't be applied correctly.

        In this patch the behavior is changed so that the area to be painted is divided to "overlapping"
        and "non overlapping" regions. The non-overlapping regions are painted directly, while the overlapping
        regions are tiled to smaller rectangles painted using an intermediate surface.
        Masks are applied to those intermediate surfaces based on the transform of the actual mask, not drawn
        together with the content texture like before.

        This optimizes for the more common case of opacity animations on a large tree, while making the quite
        rare case of composited masks slightly less optimized but always correct.

        Tests: compositing/overlap-blending/children-opacity-huge.html
               compositing/overlap-blending/reflection-opacity-huge.html
               compositing/overlap-blending/children-opacity-no-overlap.html

        * platform/graphics/cairo/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/cairo/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::paintToTextureMapper):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (MediaPlayerPrivateQt):
        * platform/graphics/surfaces/GraphicsSurface.cpp:
        (WebCore::GraphicsSurface::paintToTextureMapper):
        * platform/graphics/surfaces/GraphicsSurface.h:
        (GraphicsSurface):
        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        * platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (TextureMapperBackingStore):
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (TextureMapperPlatformLayer):
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.cpp:
        (WebCore::TextureMapperSurfaceBackingStore::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.h:
        (TextureMapperSurfaceBackingStore):
        * platform/graphics/texmap/TextureMapperTile.cpp:
        (WebCore::TextureMapperTile::paint):
        * platform/graphics/texmap/TextureMapperTile.h:
        (TextureMapperTile):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:
        (TextureMapperTiledBackingStore):
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.cpp:
        (WebCore::CoordinatedBackingStore::paintTilesToTextureMapper):
        (WebCore::CoordinatedBackingStore::paintToTextureMapper):
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h:
        (CoordinatedBackingStore):
                Removed the "mask" parameter from TextureMapperPlatformLayer and overrides, since
                we no longer paint the contents and the mask in the same pass.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::TextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::setMaskMode):
        (TextureMapper):
        (WebCore::TextureMapper::isInMaskMode):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawNumber):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::draw):
        (WebCore):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        (WebCore::TextureMapperGL::drawFiltered):
        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::TextureMapperImageBuffer::drawTexture):
        (WebCore::TextureMapperImageBuffer::drawSolidColor):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (TextureMapperImageBuffer):
                Instead of painting the mask together with the texture/color, paint the mask
                by drawing with DestinationIn to an existing surface.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (TextureMapperPaintOptions):
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::shouldBlend):
        (WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica):
        (WebCore::TextureMapperLayer::replicaTransform):
        (WebCore):
        (WebCore::applyFilters):
        (WebCore::resolveOverlaps):
        (WebCore::TextureMapperLayer::computeOverlapRegions):
        (WebCore::TextureMapperLayer::paintUsingOverlapRegions):
        (WebCore::TextureMapperLayer::applyMask):
        (WebCore::TextureMapperLayer::paintIntoSurface):
        (WebCore::commitSurface):
        (WebCore::TextureMapperLayer::paintWithIntermediateSurface):
        (WebCore::TextureMapperLayer::paintRecursive):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore):
        (TextureMapperLayer):
        (WebCore::TextureMapperLayer::hasFilters):
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore):
        (WebCore::TextureMapperShaderProgram::create):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:

2013-02-27  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] [Audits] Disabled "Run" button styling is the same as the enabled one
        https://bugs.webkit.org/show_bug.cgi?id=110971

        Reviewed by Yury Semikhatsky.

        Split out PanelEnablerView-related rules into panelEnabledView.css and restored the missing rules
        in inspector.css.

        * inspector/front-end/inspector.css:
        * inspector/front-end/panelEnablerView.css:

2013-02-27  Kent Tamura  <tkent@chromium.org>

        REGRESSION: INPUT_MULTIPLE_FIELDS_UI: Changing CSS display property on input[type=date] unexpectedly makes another line for ::-webkit-calendar-picker-indicator
        https://bugs.webkit.org/show_bug.cgi?id=110974

        Reviewed by Kentaro Hara.

        Input elements with the multiple fields UI require flexible box
        layout. We should use RenderFlexibleBox regardless of display
        property values.

        Tests: Update fast/forms/date/date-apparance-basic.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createRenderer):
        Always use RenderFlexibleBox.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Declare createRenderer.

2013-02-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [TexMap] Flickering after transitions on Apple HTML5 demo
        https://bugs.webkit.org/show_bug.cgi?id=102501

        Reviewed by Noam Rosenthal.

        Notify about animation start after the new animation is actually commited.

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

2013-02-27  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: Refactor AuditsPanel with AuditController as newly introduced entity
        https://bugs.webkit.org/show_bug.cgi?id=110866

        Reviewed by Alexander Pavlov.

        AuditController is being introduced in order to follow MVC pattern with the Audits.
        This is the first step about the refactoring. Moving the methods from the AuditsPanel
        into AuditController would ease the event driven approach to de-couple the AuditsPanel
        and the AuditLauncherView.

        No new tests as code refactoring.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/AuditController.js: Added.
        (WebInspector.AuditController):
        (WebInspector.AuditController.prototype.ruleResultReadyCallback):
        (WebInspector.AuditController.prototype.categoryDoneCallback):
        (WebInspector.AuditController.prototype._executeAudit):
        (WebInspector.AuditController.prototype._auditFinishedCallback):
        (WebInspector.AuditController.prototype.startAuditWhenResourcesReady):
        (WebInspector.AuditController.prototype.initiateAudit):
        (WebInspector.AuditController.prototype._reloadResources):
        (WebInspector.AuditController.prototype._didMainResourceLoad):
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView):
        (WebInspector.AuditLauncherView.prototype._startAudit):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        (WebInspector.AuditsPanel.prototype.auditFinishedCallback):
        * inspector/front-end/WebKit.qrc:

2013-02-27  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Region overset property is not properly computed when there is a region break
        https://bugs.webkit.org/show_bug.cgi?id=92497

        Reviewed by David Hyatt.

        For "paginated" content in regions that has -webkit-region-break-after:always, the bottom margin was being passed
        along for the next region in the chain, which shouldn't happen.

        The fix is, at layout, to clear the bottom margin for the nodes (inside paginated contexts) that have
        -webkit-region-break-after:always.

        Tests: fast/multicol/break-after-always-bottom-margin.html
               fast/regions/overset-break-nested.html
               fast/regions/overset-break-with-sibling.html
               fast/regions/overset-break.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::applyAfterBreak):

2013-02-27  Stephen Chenney  <schenney@chromium.org>

        Bindings test results update after r144126
        https://bugs.webkit.org/show_bug.cgi?id=108196

        Unreviewed test update.

        * bindings/scripts/test/JS/JSTestObj.cpp: Add include of CallbackFunction.h

2013-02-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed inspector front-end closure compilaiton fix.

        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.SnippetsNavigatorView.prototype._handleEvaluateSnippet):
        (WebInspector.SnippetsNavigatorView.prototype._handleRemoveSnippet):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.set _fileRenamed):

2013-02-27  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [texmap] Do not apply clip state if redundant
        https://bugs.webkit.org/show_bug.cgi?id=110790

        Reviewed by Noam Rosenthal.

        Add a bool to check if clip state has changed since last apply.

        No behavior changes, thus covered by existing tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::ClipStack::reset):
        (WebCore::TextureMapperGL::ClipStack::pop):
        (WebCore::TextureMapperGL::ClipStack::apply):
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore::TextureMapperGL::ClipStack::ClipStack):
        (ClipStack):

2013-02-27  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: timeline stops working on certain sites
        https://bugs.webkit.org/show_bug.cgi?id=110955

        Reviewed by Alexander Pavlov.

        Analysis: "timerId" value is number,
        so it is not wrapped to node as expected.

        Solution: wrap values of all types except Node.

        * inspector/front-end/TimelinePresentationModel.js:
        Wrap nonstring values to text nodes.

2013-02-27  Adam Barth  <abarth@webkit.org>

        HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser can trigger ASSERT(m_speculations.isEmpty())
        https://bugs.webkit.org/show_bug.cgi?id=110949

        Reviewed by Eric Seidel.

        We can hit this ASSERT if didReceiveParsedChunkFromBackgroundParser is
        called from the background thread while we're processing
        m_speculations (i.e., if processing m_speculations is taking a while
        and we've yielded to the event loop).

        It's hard to write a deterministic test for this patch, but it's hit
        quite often with existing LayoutTests.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):

2013-02-27  Kentaro Hara  <haraken@chromium.org>

        [V8] Generate a wrapper function for named constructor callbacks
        https://bugs.webkit.org/show_bug.cgi?id=110794

        Reviewed by Adam Barth.

        This would be the final step of generating wrapper functions.
        The patch generates the following wrapper function for named
        constructor callbacks.

        Handle<Value> namedConstructorCallback(...)
        {
            return namedConstructor(...);
        }

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNamedConstructor):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::namedConstructor):
        (WebCore::namedConstructorCallback):
        (WebCore):
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::namedConstructor):
        (WebCore::namedConstructorCallback):
        (WebCore):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):

2013-02-26  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: show raster tasks on Timeline
        https://bugs.webkit.org/show_bug.cgi?id=105851

        - add DeferPaint, Paint & RasterTask trace events handling to trace event processor;
        - upon begin frame, emit aggregated background event for all raster tasks related to inspected page.

        Reviewed by Pavel Feldman.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (InstrumentationEvents):
        (InstrumentationEventArguments):
        * inspector/InspectorInstrumentation.h:
        (InstrumentationEvents):
        (WebCore):
        (InstrumentationEventArguments):
        * inspector/InspectorTimelineAgent.cpp:
        (TimelineRecordType):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::didBeginFrame):
        * inspector/InspectorTimelineAgent.h:
        (TimelineRecordType):
        (WebCore):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createRasterData):
        (WebCore):
        * inspector/TimelineRecordFactory.h:
        (TimelineRecordFactory):
        * inspector/TimelineTraceEventProcessor.cpp:
        (WebCore::TimelineTraceEventProcessor::TimelineTraceEventProcessor):
        (WebCore::TimelineTraceEventProcessor::~TimelineTraceEventProcessor):
        (WebCore):
        (WebCore::TimelineTraceEventProcessor::registerHandler):
        (WebCore::TimelineTraceEventProcessor::shutdown):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::findParameter):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::parameter):
        (WebCore::TimelineTraceEventProcessor::processEventOnAnyThread):
        (WebCore::TimelineTraceEventProcessor::onBeginFrame):
        (WebCore::TimelineTraceEventProcessor::onPaintLayerBegin):
        (WebCore::TimelineTraceEventProcessor::onPaintLayerEnd):
        (WebCore::TimelineTraceEventProcessor::onRasterTaskBegin):
        (WebCore::TimelineTraceEventProcessor::onRasterTaskEnd):
        (WebCore::TimelineTraceEventProcessor::onLayerDeleted):
        (WebCore::TimelineTraceEventProcessor::onPaint):
        (WebCore::TimelineTraceEventProcessor::flushRasterizerStatistics):
        (WebCore::TimelineTraceEventProcessor::sendTimelineRecord):
        (WebCore::TimelineTraceEventProcessor::processBackgroundEvents):
        * inspector/TimelineTraceEventProcessor.h:
        (WebCore::TimelineTraceEventProcessor::TraceEvent::TraceEvent):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::id):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asInt):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asUInt):
        (TimelineTraceEventProcessor):
        * inspector/front-end/TimelineModel.js:
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel._initRecordStyles):

2013-02-26  Uday Kiran  <udaykiran@motorola.com>

        getPropertyValue for -webkit-column-rule returns null, should compute the shorthand value
        https://bugs.webkit.org/show_bug.cgi?id=110698

        Reviewed by Alexander Pavlov.

        Test: fast/css/getPropertyValue-column-rule.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):

2013-02-26  Uday Kiran  <udaykiran@motorola.com>

        getPropertyValue for -webkit-margin-collapse returns null, should compute the shorthand value
        https://bugs.webkit.org/show_bug.cgi?id=110903

        Reviewed by Alexander Pavlov.

        getPropertyValue("-webkit-margin-collapse") should compute shorthand value
        when -webkit-margin-collapse is specified in CSS.

        Test: fast/css/getPropertyValue-webkit-margin-collapse.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):

2013-02-26  Uday Kiran  <udaykiran@motorola.com>

        getPropertyValue for -webkit-marquee returns null, should compute the shorthand value
        https://bugs.webkit.org/show_bug.cgi?id=110816

        Reviewed by Alexander Pavlov.

        Compute the shorthand value for '-webkit-marquee' specified in CSS.

        Test: fast/css/getPropertyValue-webkit-marquee.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):

2013-02-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove Event::dataTransferAttrGetterCustom() and Event::valueAttrSetterCustom()
        https://bugs.webkit.org/show_bug.cgi?id=110666

        Reviewed by Adam Barth.

        Event::dataTransferAttrGetterCustom() is not used
        (i.e. the custom method is not registered to V8).
        Event::valueAttrSetterCustom() is declared but not
        implemented. We can remove them.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeaderCustomCall):
        * bindings/v8/custom/V8EventCustom.cpp:

2013-02-26  Dimitri Glazkov  <dglazkov@chromium.org>

        SelectorQuery should not ever use ResolvingStyle mode.
        https://bugs.webkit.org/show_bug.cgi?id=110843

        It looks like we accidentally used ResolvingStyle mode for webkitMatchesSelector, and I exacerbated the problem
        in r143858 by switching all of SelectorQuery to use it. There aren't any visible effects, but the style bits
        of elements are unnecessarily twiddled when if we do that. Let's not do it.

        Reviewed by Eric Seidel.

        No public-facing behavior change, covered by existing tests.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches): Switched to always use QueryingRules mode.

2013-02-26  Adam Barth  <abarth@webkit.org>

        Silence this ASSERT. It is triggered by the threaded HTML parser.
        Investigation to follow in https://bugs.webkit.org/show_bug.cgi?id=110937

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::checkLoadComplete):

2013-02-26  Mark Lam  <mark.lam@apple.com>

        SQLTransactionBackend::doCleanup() should not nullify its current
        statement and transaction error fields.
        https://bugs.webkit.org/show_bug.cgi?id=110826.

        Reviewed by Geoffrey Garen.

        The reason for this is because the frontend SQLTransaction may have
        tasks that are already registered via callOnMainThread(), and may
        invoke transaction state functions that access these objects in the
        SQLTransactionBackend. This proves to be problematic if the database
        was interrupted resulting in doCleanup() being called concurrently
        while those states are executing.

        Instead, we leave their clean up to the SQLTransactionBackend destructor
        which is guaranteed to only be called when the SQLTransaction is also
        destructing i.e. these objects are no longer needed.

        No new tests.

        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):

2013-02-26  Anders Carlsson  <andersca@apple.com>

        Implement StorageAreaProxy::getItem and StorageAreaProxy::setItem
        https://bugs.webkit.org/show_bug.cgi?id=110927

        Reviewed by Sam Weinig.

        Export StorageMap::getItem and StorageMap::setItem.

        * WebCore.exp.in:

2013-02-26  Adam Klein  <adamk@chromium.org>

        Parsing of HTML tags in MathML Text Insertion Points leads to bogus parser behavior
        https://bugs.webkit.org/show_bug.cgi?id=110808

        Reviewed by Adam Barth.

        When looking for various table tags in the HTMLElementStack, compare
        QualifiedNames rather than just local names, where necessary.

        Note that not all uses have been "fixed"; I've only changed for which
        I could write a test with differing behavior. A followup patch to
        rationalize the use of QualifiedName vs local names would be ideal.

        Tests: html5lib/generated/run-math-data.html
               html5lib/generated/run-math-write.html

        * html/parser/HTMLElementStack.cpp:
        (WebCore::inScopeCommon): Added a version of inScopeCommon that
        handles QualifiedNames instead of just localNames.
        (WebCore::HTMLElementStack::inTableScope): When given a QualifiedName,
        call the new version of inScopeCommon().
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):

2013-02-26  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Notification.requestPermission callback should be optional
        https://bugs.webkit.org/show_bug.cgi?id=108196

        Reviewed by Adam Barth.

        Spec says it should be optional.
        http://notifications.spec.whatwg.org/#notification

        Test: fast/notifications/notifications-request-permission-optional.html

        * GNUmakefile.list.am:
        * Modules/notifications/Notification.h:
        (Notification):
        * Modules/notifications/Notification.idl:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNotificationCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/v8/custom/V8NotificationCustom.cpp: Removed.

2013-02-26  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Add temporary diagnostic code to IDBRequest.result getter
        https://bugs.webkit.org/show_bug.cgi?id=110916

        Reviewed by Kentaro Hara.

        Implement a custom getter for IDBRequest.result that does one additional hidden
        property set, to try and isolate the flaky crash seen in wkbug.com/105363 which is
        difficult to repro locally. If the crash moves to the new line it will point
        the investigation in a new direction. Also add an assertion that probes string
        wrappers (the expected type).

        * Modules/indexeddb/IDBRequest.idl: Mark attribute as [Custom]
        * WebCore.gypi: New file.
        * bindings/v8/custom/V8IDBRequestCustom.cpp: Added.
        (WebCore::V8IDBRequest::resultAttrGetterCustom): Implementation - copy/paste from
        generated code, plus extra setNamedHiddenReference call and string ASSERT.

2013-02-26  Anders Carlsson  <andersca@apple.com>

        Add a couple of symbols needed by WebKit2.

        * WebCore.exp.in:

2013-02-26  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Implement color and luminosity non-separable blend modes
        https://bugs.webkit.org/show_bug.cgi?id=106226

        Added the following GLSL helper functions to the CustomFilterValidatedProgram:

            - css_Lum(C): returns the luminosity for the color C
            - css_ClipColor(C): clips color C
            - css_SetLum(C, l): sets the luminosity l on the color C

        The above functions are being used for the "color" and "luminosity" non-separable
        blend modes, the relevant spec for such modes is at URL:
        https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blendingnonseparable

        Reviewed by Dean Jackson.

        Tests: css3/filters/custom/custom-filter-nonseparable-blend-mode-color.html
               css3/filters/custom/custom-filter-nonseparable-blend-mode-luminosity.html

        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::blendFunctionString):

2013-02-26  Anders Carlsson  <andersca@apple.com>

        StorageAreaProxy should hold on to a StorageMap and not a HashMap
        https://bugs.webkit.org/show_bug.cgi?id=110919

        Reviewed by Jessie Berlin.

        StorageMap should be a private header.

        * WebCore.xcodeproj/project.pbxproj:

2013-02-26  Stephen Chenney  <schenney@chromium.org>

        feDisplacementMap filter gets color space wrong
        https://bugs.webkit.org/show_bug.cgi?id=105929

        Reviewed by Dirk Schulze.

        Tests: svg/filters/feDisplacementMap-color-interpolation-filters-expected.svg
               svg/filters/feDisplacementMap-color-interpolation-filters.svg
               svg/filters/feDisplacementMap-filterUnits-expected.svg
               svg/filters/feDisplacementMap-filterUnits.svg

        According to the spec, the SVG feDisplacementMap filter should not
        change the color space on its first input, and other vendors seem to
        agree that this also means that the output should be in the first
        input's color space. That makes sense: we are displacing the input,
        not otherwise manipulating colors.

        This change improves color space handling for filters by more
        explicitly tracking which color space is used for the filter's
        operation and which is used for the filter's result. It provides a
        means for filter effects to override the color-interpolation-filters
        property as defined by the spec. feFlood and feDisplacementMap use
        this new feature to enforce the spec requirements.

        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::setResultColorSpace): Override the default color space with the
            same color space as the first input filter.
        (WebCore):
        (WebCore::FEDisplacementMap::transformResultColorSpace): Only transform the color space on
            the second filter input.
        (WebCore::FEDisplacementMap::platformApplySoftware): Make the application code more efficient,
            and give slightly better numerical accuracy.
        * platform/graphics/filters/FEDisplacementMap.h:
        (FEDisplacementMap): Declare setResultColorSpace.
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware): Remove the call that forces
            the result color space. We do it now in the setResultColorSpace.
        * platform/graphics/filters/FEFlood.h:
        (FEFlood): Add setResultColorSPace override that enforces sRGB color space. But not if using
            CG, which apparently does this this already internally.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect): Rename m_colorSpace to m_operatingColorSpace.
        (WebCore::FilterEffect::apply): Allow filter effects to
            override the color space conversion of their inputs.
        (WebCore::FilterEffect::createImageBufferResult): Always create the
            image buffer with the result color space.
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::operatingColorSpace): New accessor.
        (WebCore::FilterEffect::setOperatingColorSpace): New accessor.
        (WebCore::FilterEffect::resultColorSpace): New accessor.
        (WebCore::FilterEffect::setResultColorSpace): New accessor.
        (FilterEffect):
        (WebCore::FilterEffect::transformResultColorSpace): A new virtual
            method that allows filter effects individual control over the color
            space conversion of their inputs.
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::SourceGraphic): Variable rename.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build): Use accessors to set color
            space to enable per-effect overrides.
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives): Use accessors to set color.

2013-02-26  Mike West  <mkwst@chromium.org>

        X-Frame-Options should accept ALLOWALL as a valid value.
        https://bugs.webkit.org/show_bug.cgi?id=110857

        Reviewed by Adam Barth.

        DoubleClick, among others, serves ALLOWALL as a 'X-Frame-Options' value
        with the intent of (shock!) allowing a resource to be framed by all
        origins. Given its prevelance, and the fact that IE supports the header,
        we shouldn't call it out as invalid.

        This patch tweaks the warning logic to only throw the warning if the
        header's value isn't 'ALLOWALL', 'DENY', or 'SAMEORIGIN'.

        Test: http/tests/security/XFrameOptions/x-frame-options-allowall.html

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

2013-02-26  Tony Chang  <tony@chromium.org>

        CSS Flexbox: dynamically applied align-items doesn't affect item alignment
        https://bugs.webkit.org/show_bug.cgi?id=110341

        Reviewed by Ojan Vafai.

        If flex items don't change width, we don't lay them out again. This causes problems
        when an item goes from stretch to non-stretch since we need to relayout to get the
        smaller height. Fix this by marking flex items that were stretch as needing layout.

        Test: css3/flexbox/relayout-align-items.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::resolveAlignment): Pull out common code for computing flex item style.
        (WebCore::RenderFlexibleBox::styleDidChange): Mark children as needing layout.
        (WebCore::RenderFlexibleBox::alignmentForChild): Use resolveAlignment.
        * rendering/RenderFlexibleBox.h:

2013-02-26  Anders Carlsson  <andersca@apple.com>

        StorageMap can just import an entire map of items at once
        https://bugs.webkit.org/show_bug.cgi?id=110904

        Reviewed by Beth Dakin.

        Instead of iterating over the map inside StorageAreaSync, just pass it directly
        (through StorageAreaImpl) to StorageMap and iterate over it there.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::importItems):
        * storage/StorageAreaImpl.h:
        (StorageAreaImpl):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::performImport):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::importItems):
        * storage/StorageMap.h:
        (StorageMap):

2013-02-26  CHAUDHARY VINEET  <rgf748@motorola.com>

        [JSC] static methods with Callback should not have this pointer
        https://bugs.webkit.org/show_bug.cgi?id=110846

        Reviewed by Kentaro Hara.

        Fixing the JSC Codegenerator not to use 'this' pointer in static methods.

        No new tests. 

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArg):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::staticMethodWithCallbackAndOptionalArgMethod):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::staticMethodWithCallbackAndOptionalArgMethodCallback):
        (WebCore::TestObjV8Internal::staticMethodWithCallbackArgMethod):
        (WebCore::TestObjV8Internal::staticMethodWithCallbackArgMethodCallback):
        (WebCore::ConfigureV8TestObjTemplate):

2013-02-20  Alpha Lam  <hclam@chromium.org>

        GIFImageReader to read from source data directly
        https://bugs.webkit.org/show_bug.cgi?id=109662

        Reviewed by Stephen White.

        This is the first patch to improve GIF image decoding.

        GIFImageReader has an internal 256 bytes buffer to saving incoming
        bytes. This mechanism is out-dated because WebKit holds the entire
        file in memory and it is not necessary to hold data in an intermediate
        buffer.

        This is also a blocker for later work to parse and decode GIF
        incrementally.

        This change removed the imtermediate 'hold' buffer and uses an index
        for data position to keep track of parsing of the GIF file. Buffer for
        global colormap and local colormap are also removed because they can be
        referenced from the data stream.

        This change is tested by:

        Layout tests
        All tests passed under fast/images.

        Unit tests
        Added GIFImageDecoderTest for Chromium.

        Local testing
        I tested this implementation against a set of 50k GIF images and
        there's no crashes and produces bit-exact results as previous code.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::doLZW):
        (GIFImageReader::decode):
        (GIFImageReader::decodeInternal):
        (GIFImageReader::setRemainingBytes):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFFrameContext):
        (GIFFrameContext::GIFFrameContext):
        (GIFFrameContext::~GIFFrameContext):
        (GIFImageReader::GIFImageReader):
        (GIFImageReader::~GIFImageReader):
        (GIFImageReader::setData):
        (GIFImageReader):
        (GIFImageReader::globalColormap):
        (GIFImageReader::localColormap):
        (GIFImageReader::localColormapSize):
        (GIFImageReader::data):
        (GIFImageReader::colormap):

2013-02-26  Christian Biesinger  <cbiesinger@chromium.org>

        Empty <button>s should collapse; empty <input type="button"> should not collapse
        https://bugs.webkit.org/show_bug.cgi?id=110654

        Reviewed by Ojan Vafai.

        This patch also fixes other height computation issues with flex boxes
        related to scroll bars and hasLineIfEmpty()=true. See below for
        details.

        Tests: css3/flexbox/button.html
               css3/flexbox/position-absolute-child-with-contenteditable.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Add a FIXME to make
        border/padding/scrollbar inclusion more consistent with other
        renderers.
        * rendering/RenderButton.h:
        (WebCore::RenderButton::hasLineIfEmpty): We only want a line for
        <input type=button|submit|reset>, for consistency with Firefox.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Start out layoutBlock by
        setting the logical height to border + padding + scrollbar height to
        ensure that we have space for the scrollbar even without children. The
        layoutFlexItems change below is not enough because we also need this
        when hasLineIfEmpty() is false.
        (WebCore::RenderFlexibleBox::layoutFlexItems): Ensure we have a line
        when hasLineIfEmpty() is true by calling setLogicalHeight(border+
        padding+scrollbar+lineHeight()) if we don't have a flex line.

2013-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143941.
        http://trac.webkit.org/changeset/143941
        https://bugs.webkit.org/show_bug.cgi?id=110901

        This is a step in the wrong direction as it ties us to what
        grid-{row|column} expect (see
        https://bugs.webkit.org/show_bug.cgi?id=110777 for the right
        direction) (Requested by jchaffraix on #webkit).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridPosition):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/StyleResolver.cpp:
        (WebCore::createGridPosition):
        (WebCore::StyleResolver::applyProperty):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::maximumIndexInDirection):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        (WebCore::RenderGrid::autoPlacementMajorAxisPositionForChild):
        (WebCore::RenderGrid::autoPlacementMinorAxisPositionForChild):
        * rendering/RenderGrid.h:
        * rendering/style/GridPosition.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridItemData.h:
        (StyleGridItemData):

2013-02-26  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; use correct macro for platform name in FeatureDefines.xcconfig.

        * Configurations/FeatureDefines.xcconfig:

2013-02-26  Andrew Lo  <anlo@rim.com>

        [BlackBerry] Animated images not animating on accelerated compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=110886

        Reviewed by Rob Buis.

        Internally reviewed by Arvid Nilsson.
        Internal PR 299598.

        Animated images on AC layers call GraphicsLayer::setContentsToImage
        on each frame with the same Image.

        We need to set needs display in that case so that the frames are
        displayed.

        No new tests are needed since there is no new functionality.

        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::setContents):

2013-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144065.
        http://trac.webkit.org/changeset/144065
        https://bugs.webkit.org/show_bug.cgi?id=110896

        Causing failures and crashes on Chromium Win7 and Win XP
        (Requested by schenney on #webkit).

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::normalizeCharacters):
        (WebCore::HarfBuzzShaper::HarfBuzzShaper):
        * platform/graphics/harfbuzz/HarfBuzzShaperBase.cpp:
        (WebCore::HarfBuzzShaperBase::setNormalizedBuffer):

2013-02-26  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [TexMap] Ignore layer repaint request when drawsContent is false
        https://bugs.webkit.org/show_bug.cgi?id=110888

        Reviewed by Noam Rosenthal.

        As long as drawsContent is false we should ignore requests for repaints.
        A full repaint will be requested when drawsContent is changed to true.

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

2013-02-26  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: IDBObjectStore.index() doesn't report errors after deleteIndex()
        https://bugs.webkit.org/show_bug.cgi?id=110792

        Reviewed by Tony Chang.

        The object store's metadata wasn't updated if the index hadn't been accessed
        by script and hence placed in the name->object map. Make sure the metadata
        is always updated.

        Test: storage/indexeddb/deleteIndex-bug110792.html

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::deleteIndex): Always update the object store's metadata.

2013-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144019.
        http://trac.webkit.org/changeset/144019
        https://bugs.webkit.org/show_bug.cgi?id=110892

        due to 8% perf regression on chromium-win7 intl1 page cycler,
        see https://bugs.webkit.org/show_bug.cgi?id=110872 (Requested
        by gasubic on #webkit).

        * platform/text/LineBreakIteratorPoolICU.h:
        (WebCore::LineBreakIteratorPool::take):
        (WebCore::LineBreakIteratorPool::put):
        (LineBreakIteratorPool):
        * platform/text/TextBreakIterator.h:
        (WebCore):
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        (LazyLineBreakIterator):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/RenderText.h:
        (WebCore):
        * rendering/break_lines.cpp:
        (WebCore):
        (WebCore::isBreakableSpace):
        (WebCore::needsLineBreakIterator):
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):
        * rendering/break_lines.h:
        (WebCore):
        (WebCore::isBreakable):

2013-02-26  Dana Jansens  <danakj@chromium.org>

        Create the SharedGraphicsContext3D through its own method.
        https://bugs.webkit.org/show_bug.cgi?id=109345

        Reviewed by James Robinson.

        Allow creating a GraphicsContext3DPrivate from an externally owned
        WebGraphicsContext3D and GrContext. Then create the shared graphics
        context from these provided by the embedder.

        This falls back to the old path if the new methods return NULL to
        let us land this immediately and then transition the chromium side
        over to this path.

        * platform/chromium/support/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::createGraphicsContextFromExternalWebContextAndGrContext):
        (WebCore::GraphicsContext3DPrivate::grContext):
        * platform/chromium/support/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::webContext):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3DImpl::getOrCreateContext):

2013-02-26  Antti Koivisto  <antti@apple.com>

        REGRESSION(r143986): fast/files/revoke-blob-url.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=110885
        
        Reviewed by Alexey Proskuryakov.

        The ResourceRequest string constructor assumes that the string is a valid URL. Use KURL constructor instead.

        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL):

2013-02-26  Dean Jackson  <dino@apple.com>

        Draw intermediate snapshots if possible
        https://bugs.webkit.org/show_bug.cgi?id=110811

        Reviewed by Simon Fraser.

        After http://webkit.org/b/110495 we delayed snapshotting until we've
        received a nice image, but this made the page look like it is broken.
        We should draw any intermediate snapshots that we find, which might
        include content such as progress bars/spinners.

        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::isPlugInImageElement): Expose virtual method
        to indicate if this is a HTMLPlugInImageElement or not.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateSnapshot): If we have
        a RenderEmbeddedObject renderer, then tell it to repaint.
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::snapshotImage): Expose an
        accessor for snapshot images.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage): New helper
        method to render an image directly. This code is similar to
        that in RenderSnapshottedPlugIn.
        (WebCore::RenderEmbeddedObject::paintContents): The virtual implementation
        of this method for use when we have a snapshot to paint. If we are a plugin that is
        in the process of being snapshotted, ask our HTMLPlugInImageElement for a
        snapshot and paint that instead. In the case where we are not snapshotting,
        or we do not yet have a snapshot, this will call back into the RenderWidget code.
        * rendering/RenderEmbeddedObject.h:
        (RenderEmbeddedObject): New methods paintSnapshotImage and paintContents
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents): New method called in the middle
        of paint() that can be overridden by RenderEmbeddedObject. The code here was
        simply moved out of the previous paint().
        (WebCore::RenderWidget::paint): Call paintContents at the appropriate time.
        * rendering/RenderWidget.h:
        (RenderWidget): New virtual method paintContents.

2013-02-26  Levi Weintraub  <leviw@chromium.org>

        Add support for 8 bit TextRuns for Chromium/HarfBuzz
        https://bugs.webkit.org/show_bug.cgi?id=99393

        Reviewed by Eric Seidel.

        Adding support for 8 bit TextRuns for platforms using HarfBuzz. To accomplish this,
        8 bit text runs are upconverted to 16 bit in the complex text path during string
        normalization, as HarfBuzz operates on UChars.

        No new tests. No change in behavior.

        (WebCore::HarfBuzzShaperBase::setNormalizedBuffer):
        * platform/graphics/harfbuzz/HarfBuzzShaperBase.h:
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::normalizeCharacters):
        (WebCore::HarfBuzzShaper::HarfBuzzShaper):

2013-02-26  Dmitry Zvorygin  <zvorygin@chromium.org>

        Merged Tip and Debug log levels for web console.
        https://bugs.webkit.org/show_bug.cgi?id=109919

        Reviewed by Pavel Feldman.

        In every component either TIP or DEBUG level was used for reporting,
        but not both. This patch is prerequisite for Web Inspector console log filtering.

        * css/MediaList.cpp:
        (WebCore::addResolutionWarningMessageToConsole):
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageLevelValue):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::abort):
        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        * page/ConsoleTypes.h:
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTMessageHandler::handleMessage):

2013-02-26  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Upstream the datalist support UI
        https://bugs.webkit.org/show_bug.cgi?id=110736

        Reviewed by Rob Buis.

        Original code by Otto Derek Cheung <otcheung@rim.com>

        * css/themeBlackBerry.css:
        (input::-webkit-suggestion-dropdown-box):
        (input::-webkit-suggestion-dropdown-box-item):
        (input::-webkit-suggestion-prefix-text):
        (input::-webkit-suggestion-dropdown-box-item-last):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::supportsDataListUI):
        (WebCore):
        * platform/blackberry/RenderThemeBlackBerry.h:
        (RenderThemeBlackBerry):

2013-02-26  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: plumb trace events to Timeline agent
        https://bugs.webkit.org/show_bug.cgi?id=105796

        Reviewed by Pavel Feldman.

        - plumb trace events to Timeline;
        - add TimelineTraceEventProcessor to process selected trace events;
        - emit timeline events from TimelineTraceEventProcessor.

        Note that actual event processing logic is a separate change.

        * CMakeLists.txt: Added TimelineTraceEventProcessor.{h,cpp}.
        * GNUmakefile.list.am:  Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * inspector/InspectorAllInOne.cpp: Ditto.
        * inspector/InspectorClient.h:
        (InspectorClient):
        (WebCore::InspectorClient::setTraceEventCallback):
        * inspector/InspectorTimelineAgent.cpp: create/destroy trace event processor on start/stop.
        (WebCore::InspectorTimelineAgent::start): 
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::page):
        (WebCore):
        * inspector/InspectorTimelineAgent.h:
        (WebCore):
        (InspectorTimelineAgent):
        * inspector/TimelineTraceEventProcessor.cpp: Added.
        (WebCore::TimelineTraceEventProcessor::TimelineTraceEventProcessor):
        (WebCore):
        (WebCore::TimelineTraceEventProcessor::~TimelineTraceEventProcessor):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::parameter):
        (WebCore::TimelineTraceEventProcessor::processEventOnAnyThread):
        (WebCore::TimelineTraceEventProcessor::processEvent):
        (WebCore::TimelineTraceEventProcessor::sendTimelineRecord):
        (WebCore::TimelineTraceEventProcessor::processBackgroundEvents):
        * inspector/TimelineTraceEventProcessor.h: Added.
        (WebCore):
        (TimelineTraceEventProcessor):
        (TraceEvent):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::TraceEvent):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::timestamp):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::phase):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::name):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::threadIdentifier):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::argumentCount):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asBool):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asInt):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asUInt):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asDouble):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asString):
        (WebCore::TimelineTraceEventProcessor::EventTypeEntry::EventTypeEntry):
        (EventTypeEntry):

2013-02-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Web Inspector: Specify return type of WebInspector.UIString
        https://bugs.webkit.org/show_bug.cgi?id=110095

        Reviewed by Pavel Feldman.

        Specify return type of WebInspector.UIString.
        Fix new js-compiler warnings.

        This change will increase type coverage by 0.4% (to 81%)

        * inspector/front-end/ObjectPropertiesSection.js: Fix type errors.
        * inspector/front-end/UIString.js:
        (WebInspector.UIString): Return type specified.

2013-02-26  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Resources] Cookies table looks empty.
        https://bugs.webkit.org/show_bug.cgi?id=110870

        Reviewed by Pavel Feldman.

        Fixed data-grid selector.

        * inspector/front-end/resourcesPanel.css:
        (.storage-view .data-grid): Fixed selector.

2013-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Migrate FileSystem inspection support to ResourceTreeModel's SecurityOriginAdded/Removed events.
        https://bugs.webkit.org/show_bug.cgi?id=110878

        Reviewed by Alexander Pavlov.

        Recently added SecurityOriginAdded/Removed events support was essentially duplicated in
        FileSystemModel. This patch migrates FileSystem inspection support to new events.

        * inspector/front-end/FileSystemModel.js:
        (WebInspector.FileSystemModel):
        (WebInspector.FileSystemModel.prototype._reset):
        (WebInspector.FileSystemModel.prototype._securityOriginAdded):
        (WebInspector.FileSystemModel.prototype._securityOriginRemoved):
        (WebInspector.FileSystemModel.prototype._addOrigin):
        (WebInspector.FileSystemModel.prototype._removeOrigin):
        (WebInspector.FileSystemModel.prototype.refreshFileSystemList):

2013-02-26  Antoine Quint  <graouts@apple.com>

        Web Inspector: Cannot deep expand an element that has previously been partially expanded
        https://bugs.webkit.org/show_bug.cgi?id=110424

        In the case where the children from the provided node have already been pushed, traverse
        children at the depth provided until we find children that have not been pushed yet.

        Reviewed by Pavel Feldman.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):

2013-02-26  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed, rolling out r144041, r144044, and r144048.
        http://trac.webkit.org/changeset/144041
        http://trac.webkit.org/changeset/144044
        http://trac.webkit.org/changeset/144048
        https://bugs.webkit.org/show_bug.cgi?id=105796

        Broke build

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorClient.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorTimelineAgent.cpp:
        (TimelineRecordType):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::didBeginFrame):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore):
        (InspectorTimelineAgent):
        * inspector/TimelineRecordFactory.cpp:
        * inspector/TimelineRecordFactory.h:
        * inspector/TimelineTraceEventProcessor.cpp: Removed.
        * inspector/TimelineTraceEventProcessor.h: Removed.
        * inspector/front-end/TimelineModel.js:
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel._initRecordStyles):

2013-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Migrate IndexedDB support to ResourceTreeModel's SecurityOriginAdded/Removed events.
        https://bugs.webkit.org/show_bug.cgi?id=110863

        Reviewed by Alexander Pavlov.

        Recently added SecurityOriginAdded/Removed events support was essentially duplicated in
        IndexedDBModel. This patch migrates IndexedDB support to new events.

        * inspector/Inspector.json:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorIndexedDBAgent.h:
        (InspectorIndexedDBAgent):
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel):
        (WebInspector.IndexedDBModel.prototype._reset):
        (WebInspector.IndexedDBModel.prototype.refreshDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._securityOriginAdded):
        (WebInspector.IndexedDBModel.prototype._securityOriginRemoved):
        (WebInspector.IndexedDBModel.prototype._addOrigin):
        (WebInspector.IndexedDBModel.prototype._removeOrigin):
        (WebInspector.IndexedDBModel.prototype._updateOriginDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._loadDatabaseNames):
        (WebInspector.IndexedDBModel.prototype._loadDatabase):
        (WebInspector.IndexedDBModel.prototype.):
        (WebInspector.IndexedDBModel.prototype._requestData):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.securityOrigins):

2013-02-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: in protocol make field "securityOrigin" in type Page.Frame mandatory
        https://bugs.webkit.org/show_bug.cgi?id=80857

        Reviewed by Vsevolod Vlasov.

        Frame.securityOrigin has always been set to a valid value, so this change just fixes
        the protocol flaw.

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeFrame):
        (WebInspector.ResourceTreeFrame.prototype._navigate):

2013-02-26  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed build fix following r144041.

        * inspector/TimelineTraceEventProcessor.h:
        (WebCore::TimelineTraceEventProcessor::TraceEvent::TraceEvent):

2013-02-26  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: DataGrid should reveal and select next/previous DataGridNode upon deletion of selected node
        https://bugs.webkit.org/show_bug.cgi?id=110862

        Reviewed by Alexander Pavlov.

        While deleting entries in the DataGrid, deleting of selected node should trigger selection of
        next possible (backward/forward) DataGridNode.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._keyDown):
        (WebInspector.DataGridNode.prototype.get leftPadding):
        (WebInspector.DataGridNode.prototype.isEventWithinDisclosureTriangle):

2013-02-26  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: show raster tasks on Timeline
        https://bugs.webkit.org/show_bug.cgi?id=105851

        - add PaintLayer, Paint & RasterTask trace events handling to trace event processor;
        - upon begin frame, emit aggregated background event for all raster tasks related to the inspected page.

        Reviewed by Pavel Feldman.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (InstrumentationEvents):
        (InstrumentationEventArguments):
        * inspector/InspectorInstrumentation.h:
        (InstrumentationEvents):
        (WebCore):
        (InstrumentationEventArguments):
        * inspector/InspectorTimelineAgent.cpp:
        (TimelineRecordType):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::didBeginFrame):
        * inspector/InspectorTimelineAgent.h:
        (TimelineRecordType):
        (WebCore):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createRasterData):
        (WebCore):
        * inspector/TimelineRecordFactory.h:
        (TimelineRecordFactory):
        * inspector/TimelineTraceEventProcessor.cpp:
        (WebCore::TimelineTraceEventProcessor::TimelineTraceEventProcessor):
        (WebCore::TimelineTraceEventProcessor::~TimelineTraceEventProcessor):
        (WebCore):
        (WebCore::TimelineTraceEventProcessor::registerHandler):
        (WebCore::TimelineTraceEventProcessor::shutdown):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::findParameter):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::parameter):
        (WebCore::TimelineTraceEventProcessor::processEventOnAnyThread):
        (WebCore::TimelineTraceEventProcessor::onBeginFrame):
        (WebCore::TimelineTraceEventProcessor::onPaintLayerBegin):
        (WebCore::TimelineTraceEventProcessor::onPaintLayerEnd):
        (WebCore::TimelineTraceEventProcessor::onRasterTaskBegin):
        (WebCore::TimelineTraceEventProcessor::onRasterTaskEnd):
        (WebCore::TimelineTraceEventProcessor::onLayerDeleted):
        (WebCore::TimelineTraceEventProcessor::onPaint):
        (WebCore::TimelineTraceEventProcessor::flushRasterizerStatistics):
        (WebCore::TimelineTraceEventProcessor::sendTimelineRecord):
        (WebCore::TimelineTraceEventProcessor::processBackgroundEvents):
        * inspector/TimelineTraceEventProcessor.h:
        (WebCore::TimelineTraceEventProcessor::TraceEvent::TraceEvent):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::id):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asBool):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asInt):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asUInt):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asDouble):
        (TimelineTraceEventProcessor):
        * inspector/front-end/TimelineModel.js:
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel._initRecordStyles):

2013-02-26  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Work around a MSVC 2012 Update 1 bug causing a crash on x86
        https://bugs.webkit.org/show_bug.cgi?id=110488

        Reviewed by Anders Carlsson.

        The crash happens when building with /O2, where TextEncodingNameHash::equal is
        incorrectly optimized with the inlined toASCIILower and uses a register already in use.
        The function returns false incorrectly, causing a mismatch of text encoding name which
        then results in a null pointer access.

        Slightly rewording the use of the inline function lets the compiler produce correct code.

        The bug has already been reported and should be fixed in the next release of MSVS later this year.
        https://connect.microsoft.com/VisualStudio/feedback/details/777533/vs2012-c-optimizing-bug-when-using-inline-and-char-return-type-x86-target-only

        * platform/text/TextEncodingRegistry.cpp:

2013-02-01  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: plumb trace events to Timeline agent
        https://bugs.webkit.org/show_bug.cgi?id=105796

        Reviewed by Pavel Feldman.

        - plumb trace events to Timeline;
        - add TimelineTraceEventProcessor to process selected trace events;
        - emit timeline events from TimelineTraceEventProcessor.

        Note that actual event processing logic is a separate change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorClient.h:
        (InspectorClient):
        (WebCore::InspectorClient::setTraceEventCallback):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::appendBackgroundThreadRecord):
        (WebCore):
        (WebCore::InspectorTimelineAgent::page):
        * inspector/InspectorTimelineAgent.h:
        (WebCore):
        (InspectorTimelineAgent):
        * inspector/TimelineTraceEventProcessor.cpp: Added.
        (WebCore::TimelineTraceEventProcessor::TimelineTraceEventProcessor):
        (WebCore):
        (WebCore::TimelineTraceEventProcessor::~TimelineTraceEventProcessor):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::parameter):
        (WebCore::TimelineTraceEventProcessor::processEventOnAnyThread):
        (WebCore::TimelineTraceEventProcessor::processEvent):
        (WebCore::TimelineTraceEventProcessor::sendTimelineRecord):
        (WebCore::TimelineTraceEventProcessor::processBackgroundEvents):
        * inspector/TimelineTraceEventProcessor.h: Added.
        (WebCore):
        (TimelineTraceEventProcessor):
        (TraceEvent):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::TraceEvent):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::timestamp):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::phase):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::name):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::threadIdentifier):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::argumentCount):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asBool):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asInt):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asUInt):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asDouble):
        (WebCore::TimelineTraceEventProcessor::TraceEvent::asString):
        (WebCore::TimelineTraceEventProcessor::EventTypeEntry::EventTypeEntry):
        (EventTypeEntry):
        * inspector/front-end/TimelineFrameController.js:
        (WebInspector.TimelineFrameController.prototype._addRecord):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record):
        (WebInspector.TimelinePresentationModel.insertRetrospecitveRecord):
        (WebInspector.TimelinePresentationModel.Record.prototype.get isBackground):
        * inspector/front-end/timelinePanel.css:
        (.timeline-tree-item.background .timeline-tree-icon):
        (.timeline-graph-side.background .timeline-graph-bar):

2013-02-01  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: display background events on Timeline
        https://bugs.webkit.org/show_bug.cgi?id=108599

        Reviewed by Pavel Feldman.

        - add optional `thread' field to timeline event;
        - if thread field is present, display the event as 'background' (hollow bar / list icon), align to nearest foreground event;
        - do not account background events in Frame mode of overview.

        * inspector/Inspector.json:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::appendBackgroundThreadRecord):
        (WebCore):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        * inspector/front-end/TimelineFrameController.js:
        (WebInspector.TimelineFrameController.prototype._addRecord):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record):
        (WebInspector.TimelinePresentationModel.insertRetrospecitveRecord):
        (WebInspector.TimelinePresentationModel.Record.prototype.get isBackground):
        * inspector/front-end/timelinePanel.css:
        (.timeline-tree-item.background .timeline-tree-icon):
        (.timeline-graph-side.background .timeline-graph-bar):

2013-02-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename BatchedCallback to BatchedMethod
        https://bugs.webkit.org/show_bug.cgi?id=110791

        Reviewed by Adam Barth.

        Now 'Callback' is used to refer to functions that are called back
        by V8. DOM methods should be referred to as 'Method's.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        (WebCore::ConfigureV8Float64ArrayTemplate):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestCustomNamedGetterTemplate):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestEventTargetTemplate):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestInterfaceTemplate):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore):
        (WebCore::ConfigureV8TestTypedefsTemplate):
        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::batchConfigureCallbacks):
        (WebCore::V8DOMConfiguration::configureTemplate):
        * bindings/v8/V8DOMConfiguration.h:
        (V8DOMConfiguration):

2013-02-26  Takashi Toyoshima  <toyoshim@chromium.org>

        Add User-Agent header in opening handshake headers.
        https://bugs.webkit.org/show_bug.cgi?id=110601

        Reviewed by Alexey Proskuryakov.

        RFC-6455 doesn't require to send User-Agent header, but allow it.
        Many web application developers want to have it, and Firefox already
        did it. This patch adds User-Agent header in opening handshake also in
        WebKit ports.

        Test: http/tests/websocket/tests/hybi/useragent-in-openinghandshake.html

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage):
        (WebCore::WebSocketHandshake::clientHandshakeRequest):

2013-02-26  Mike West  <mkwst@chromium.org>

        XSSAuditor: Don't rely on implicit casting when copying the document's KURL to String.
        https://bugs.webkit.org/show_bug.cgi?id=110859

        Reviewed by Jochen Eisinger.

        XSSAuditor::init should explicitly make a thread-safe copy of the
        document's URL as a String rather than relying on implicit casting from
        a copy of the KURL.

        This shouldn't change any visible behavior; all existing XSSAuditor
        tests should continue to pass. They'll now just be a bit more smug while
        doing so.

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):

2013-02-26  Takashi Sakamoto  <tasak@google.com>

        Shadow DOM styles appear to be over-eagerly shared
        https://bugs.webkit.org/show_bug.cgi?id=110797

        Reviewed by Dimitri Glazkov.

        A style of a distributed node should not be shared, because the node
        might be affected by styles in a shadow dom tree, i.e. :distributed
        or something.

        Test: fast/dom/shadow/no-style-sharing-with-distributed-nodes.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::locateCousinList):
        Skip shadow hosts, because children of shadow hosts are distributed
        nodes and cannot share their styles.

2013-02-26  Adam Klein  <adamk@chromium.org>

        Remove unused conditional includes of {MathML,SVG}Names.h
        https://bugs.webkit.org/show_bug.cgi?id=110809

        Reviewed by Eric Seidel.

        * html/parser/HTMLConstructionSite.cpp:

2013-02-26  Eric Seidel  <eric@webkit.org>

        Threaded HTML parser fails fast/loader/stateobjects/state-attribute-history-getter.html
        https://bugs.webkit.org/show_bug.cgi?id=110801

        Reviewed by Adam Barth.

        This causes 6 more tests to pass for the threaded parser,
        an solves all of our timeout issues.

        These tests which were failing were racy, we just were never
        hitting the race due to using file urls.  This change fixes
        the threaded parser to emulate one more of the EOF quirks from
        the loader/main-thread-parser interaction.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):

2013-02-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: CSSAgent.setStyleSheetText crashes on inline styles
        https://bugs.webkit.org/show_bug.cgi?id=110359

        Reviewed by Pavel Feldman.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::undo): Pass ExceptionCode into setText().
        (WebCore::InspectorCSSAgent::SetStyleSheetTextAction::redo): Ditto.
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::setText): Make use of checkPageStyleSheet().
        (WebCore::InspectorStyleSheet::setRuleSelector): Ditto.
        (WebCore::InspectorStyleSheet::addRule): Ditto.
        (WebCore::InspectorStyleSheet::deleteRule): Ditto.
        (WebCore::InspectorStyleSheet::checkPageStyleSheet):
          Return NOT_SUPPORTED_ERR if no m_pageStyleSheet.
        (WebCore::InspectorStyleSheet::setStyleText): Check field directly.
        * inspector/InspectorStyleSheet.h:

2013-02-26  Tien-Ren Chen  <trchen@chromium.org>

        Implement coordinated scrollbar for subframes and overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=109560

        Reviewed by James Robinson.

        This patch obsoletes ScrollingCoordinatorPrivate for the Chromium
        implementation. Also removes the concept of a single main scrolling
        layer. Should use HashMap to keep track resources for multiple
        scrollable objects.

        Many of the callbacks are extended to support ScrollableArea instead
        of just FrameView. Now ScrollingCoordinatorChromium coordinates
        scrollbars for both subframes and overflow:scroll.

        Some drive-by change:
        1. Remove the GraphicsLayer parameter for layer change callbacks.
           Should be able to get the latest layer from the ScrollableArea anyway.
        2. Should start from main frame document when updating touch event target rects.

        New chromium test: ScrollingCoordinatorChromiumTest.iframeScrolling

        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        * page/FrameView.cpp:
        (WebCore::FrameView::prepareForDetach):
        (WebCore::FrameView::layerForScrolling):
        (WebCore):
        * page/FrameView.h:
        (FrameView):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollLayerForScrollableArea):
        (WebCore):
        (WebCore::ScrollingCoordinator::horizontalScrollbarLayerForScrollableArea):
        (WebCore::ScrollingCoordinator::verticalScrollbarLayerForScrollableArea):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::willDestroyScrollableArea):
        (WebCore::ScrollingCoordinator::scrollableAreaScrollLayerDidChange):
        (WebCore::ScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        (ScrollingCoordinator):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::scrollingWebLayerForGraphicsLayer):
        (WebCore::ScrollingCoordinatorChromium::scrollingWebLayerForScrollableArea):
        (WebCore::ScrollingCoordinatorChromium::ScrollingCoordinatorChromium):
        (WebCore::ScrollingCoordinatorChromium::~ScrollingCoordinatorChromium):
        (WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinatorChromium::touchEventTargetRectsDidChange):
        (WebCore::createScrollbarLayer):
        (WebCore::detachScrollbarLayer):
        (WebCore::setupScrollbarLayer):
        (WebCore::ScrollingCoordinatorChromium::willDestroyScrollableArea):
        (WebCore::ScrollingCoordinatorChromium::scrollableAreaScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinatorChromium::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinatorChromium::setTouchEventTargetRects):
        (WebCore::ScrollingCoordinatorChromium::setWheelEventHandlerCount):
        (WebCore::ScrollingCoordinatorChromium::setShouldUpdateScrollLayerPositionOnMainThread):
        (WebCore::ScrollingCoordinatorChromium::setLayerIsContainerForFixedPositionLayers):
        (WebCore::ScrollingCoordinatorChromium::setLayerIsFixedToContainerLayer):
        (WebCore::ScrollingCoordinatorChromium::scrollableAreaScrollLayerDidChange):
        (WebCore::ScrollingCoordinatorChromium::addWebScrollbarLayer):
        (WebCore):
        (WebCore::ScrollingCoordinatorChromium::getWebScrollbarLayer):
        (WebCore::ScrollingCoordinatorChromium::removeWebScrollbarLayer):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.h:
        (WebCore):
        (ScrollingCoordinatorChromium):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scrollableAreaScrollbarLayerDidChange):
        * platform/ScrollableArea.h:
        (ScrollableArea):
        (WebCore::ScrollableArea::layerForScrolling):
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        (WebCore::GraphicsLayer::setContentsToPlatformLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::layerForScrolling):
        (WebCore):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidScroll):
        (WebCore::RenderLayerCompositor::scrollingLayerDidChange):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2013-02-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Overloaded constructors don't need header declarations
        https://bugs.webkit.org/show_bug.cgi?id=110799

        Reviewed by Adam Barth.

        They are implemented as static functions in cpp files.
        Header declarations are not needed.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:

2013-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144016.
        http://trac.webkit.org/changeset/144016
        https://bugs.webkit.org/show_bug.cgi?id=110856

        Breaks compilation on chromium mac (Requested by vsevik on
        #webkit).

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2013-02-26  Glenn Adams  <glenn@skynav.com>

        Add support to -webkit-line-break property for CSS3 Text line-break property values and semantics.
        https://bugs.webkit.org/show_bug.cgi?id=89235

        Reviewed by Eric Seidel.

        This patch adds semantic support for the CSS3 line-break property (qua -webkit-line-break),
        and enables testing on (apple) mac ports. Follow on patches will enable these tests on
        other ports as they are incrementally verified.

        See also wiki documentation at:
        [1] http://trac.webkit.org/wiki/LineBreaking
        [2] http://trac.webkit.org/wiki/LineBreakingCSS3Mapping

        Tests: css3/line-break/line-break-auto-centered.html
               css3/line-break/line-break-auto-half-kana.html
               css3/line-break/line-break-auto-hyphens.html
               css3/line-break/line-break-auto-inseparables.html
               css3/line-break/line-break-auto-iteration-marks.html
               css3/line-break/line-break-auto-postfixes.html
               css3/line-break/line-break-auto-prefixes.html
               css3/line-break/line-break-auto-sound-marks.html
               css3/line-break/line-break-loose-centered.html
               css3/line-break/line-break-loose-half-kana.html
               css3/line-break/line-break-loose-hyphens.html
               css3/line-break/line-break-loose-inseparables.html
               css3/line-break/line-break-loose-iteration-marks.html
               css3/line-break/line-break-loose-postfixes.html
               css3/line-break/line-break-loose-prefixes.html
               css3/line-break/line-break-loose-sound-marks.html
               css3/line-break/line-break-normal-centered.html
               css3/line-break/line-break-normal-half-kana.html
               css3/line-break/line-break-normal-hyphens.html
               css3/line-break/line-break-normal-inseparables.html
               css3/line-break/line-break-normal-iteration-marks.html
               css3/line-break/line-break-normal-postfixes.html
               css3/line-break/line-break-normal-prefixes.html
               css3/line-break/line-break-normal-sound-marks.html
               css3/line-break/line-break-strict-centered.html
               css3/line-break/line-break-strict-half-kana.html
               css3/line-break/line-break-strict-hyphens.html
               css3/line-break/line-break-strict-inseparables.html
               css3/line-break/line-break-strict-iteration-marks.html
               css3/line-break/line-break-strict-postfixes.html
               css3/line-break/line-break-strict-prefixes.html
               css3/line-break/line-break-strict-sound-marks.html

        These tests were previously added in http://trac.webkit.org/changeset/143378, but skipped
        in generic TestExpectations. In this patch, they are marked as Pass for the (apple) mac ports.

        * platform/text/LineBreakIteratorPoolICU.h:
        (WebCore::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
        Add static function to construct ICU locale argument (also used as pool key) with additional
        break keyword.
        (LineBreakIteratorPool):
        (WebCore::LineBreakIteratorPool::take):
        (WebCore::LineBreakIteratorPool::put):
        Remove direct dependency from ICU library (and types), moving that dependency into
        new {open,close}LineBreakIterator() functions (defined in TextBreakIteratorICU.cpp).
        Update to take line break mode into account.
        Create (and cache) different break iterators depending on line break mode (in addition to locale),
        which entails expanding pool entry key format to optionally append "@break=" +
        "loose"|"normal"|"strict" keyword to locale string.

        * platform/text/TextBreakIterator.h:
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::isLooseCJKMode):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        (LazyLineBreakIterator):
        Define LineBreakIteratorMode enumeration for use in TextBreakIterator et al.
        Add state member to indicate line break mode.

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::acquireLineBreakIterator):
        Use new line break mode when making iterator from pool.
        Handle change of return type of LineBreakIteratorPool::take() to non-ICU type,
        i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
        (WebCore::releaseLineBreakIterator):
        Handle change of parameter type of LineBreakIteratorPool::put() to non-ICU type,
        i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
        (WebCore):
        (WebCore::isCJKLocale):
        New functions for determining if CJK rules apply.
        (WebCore::openLineBreakIterator):
        New function for abstracting opening of ICU style line break iterator. This is now
        used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.
        This function also takes into account the line break mode.
        (WebCore::closeLineBreakIterator):
        (WebCore::mapLineIteratorModeToRules):
        New function for abstracting closing of ICU style line break iterator. This is now
        used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):
        Pass line break iterator mode flag when reseting LazyLineBreakIterator.
        Add looseMode local variable to prevent need for computing under isBreakable().

        * rendering/RenderText.cpp:
        (WebCore::mapLineBreakToIteratorMode):
        Add implementation for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
        and RenderBlock::LineBreaker::nextLineBreak.
        (WebCore):
        (WebCore::RenderText::computePreferredLogicalWidths):
        Ensure (lazy line) breakIterator is initialized for line break mode.
        Ensure isBreakable() is passed loose mode flag to match behavior in RenderBlock::LineBreaker::nextLineBreak.

        * rendering/RenderText.h:
        (WebCore):
        Add declaration for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
        and RenderBlock::LineBreaker::nextLineBreak.

        * rendering/break_lines.cpp:
        (WebCore):
        Introduce (local) enum NBSPBehavior for expanding template on nextBreakablePosition.
        (WebCore::isBreakableSpace):
        Add externally specified loose mode parameter to prevent need to invoke line break iterator
        accessor method on each invocation. Use new loose mode flavors off NBP functions.
        (WebCore::needsLineBreakIterator):
        Use enum NBSP behavior template parameter rather than boolean.
        (WebCore::nextBreakablePositionNonLoosely):
        Extend name to distinguish from loose flavor of this function.
        (WebCore::nextBreakablePositionLoosely):
        Add loose flavor of NBP invoked only when loose mode applies, in which case ASCII shortcut
        table cannot be used.
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):
        Use (renamed) non-loose flavor of NBP.
        (WebCore::nextBreakablePositionLoose):
        (WebCore::nextBreakablePositionIgnoringNBSPLoose):
        Introduce loose flavor of NBP template expansions.

        * rendering/break_lines.h:
        (WebCore):
        (WebCore::isBreakable):
        Add externally specified loose mode parameter to prevent need to invoke line break iterator
        accessor method on each invocation.

2013-02-26  James Weatherall  <wez@chromium.org>

        keydown and keyup events have zero keycode for some numeric pad keys under Chromium on Linux
        https://bugs.webkit.org/show_bug.cgi?id=85642

        Add missing key mappings for GDK_KP_Begin, GDK_KP_Insert, GDK_KP_Delete and GDK_ISO_Level3_Shift.

        Reviewed by Ojan Vafai.

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2013-02-25  Adam Barth  <abarth@webkit.org>

        6% regression in intl1 page cycler on chromium-mac
        https://bugs.webkit.org/show_bug.cgi?id=110784

        Unreviewed.

        This patch restores the code that I rolled out in
        http://trac.webkit.org/changeset/143960 and
        http://trac.webkit.org/changeset/143983. Rolling out those patches did
        not heal the bot.

        * dom/Element.cpp:
        (WebCore::Element::addAttributeInternal):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::UniqueElementData::makeShareableCopy):
        (WebCore::UniqueElementData::addAttribute):
        (WebCore::UniqueElementData::removeAttribute):
        (WebCore::ElementData::reportMemoryUsage):
        (WebCore::UniqueElementData::getAttributeItem):
        (WebCore):
        (WebCore::UniqueElementData::attributeItem):
        * dom/Element.h:
        (ElementData):
        (UniqueElementData):
        (WebCore::isShadowHost):
        (WebCore::ElementData::length):
        (WebCore::ElementData::attributeItem):
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::resumeFrom):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore):
        (WebCore::CSSPreloadScanner::scanCommon):
        (WebCore::CSSPreloadScanner::scan):
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::tagIdFor):
        (WebCore):
        (WebCore::TokenPreloadScanner::initiatorFor):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (TokenPreloadScanner::StartTagScanner):
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        (WebCore::TokenPreloadScanner::createCheckpoint):
        (WebCore::TokenPreloadScanner::rewindTo):
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::TokenPreloadScanner::scanCommon):
        (WebCore::TokenPreloadScanner::updatePredictedBaseURL):
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLPreloadScanner.h:
        (TokenPreloadScanner):
        (WebCore::TokenPreloadScanner::isSafeToSendToAnotherThread):
        (WebCore::TokenPreloadScanner::Checkpoint::Checkpoint):
        (Checkpoint):

2013-02-25  Chris Rogers  <crogers@google.com>

        AudioDestinationChromium should pass in inputDeviceId when creating WebKit::WebAudioDevice
        https://bugs.webkit.org/show_bug.cgi?id=110796

        Reviewed by Kenneth Russell.

        * platform/audio/chromium/AudioDestinationChromium.cpp:
        (WebCore::AudioDestinationChromium::AudioDestinationChromium):

2013-02-25  Mark Lam  <mark.lam@apple.com>

        Need a more robust WebSQL disk usage computation.
        https://bugs.webkit.org/show_bug.cgi?id=110805.

        Reviewed by Geoffrey Garen.

        - Changed DatabaseTracker::usageForOrigin() to compute the disk usage
          for a specified origin by fetching database sizes from the file system
          instead of using cached file size values.

        - The OriginQuotaManager and OriginUsageRecord are no longer needed.
          Updated build files to reflect this.

        - Removed getMaxSizeForDatabase() from DatabaseManager, DatabaseServer,
          and AbstractDatabaseServer since it is only needed in the backend.

        - DatabaseTracker::getMaxSizeForDatabase() now calls usageForOrigin()
          to get the disk usage for its computation.

        - The performance difference for this changes is a 1.6% degradation
          per additional database whose size needs to be fetched. This is a
          worst case estimated based on the disk-stat-speed-test.html benchmark
          (attached to bugzilla). The benchmark writes an average of 16 bytes per
          transaction. Most real-world transactions will likely write more
          content than that. Since disk write IO time will dominate over memory
          read time for fetching the file size, the degradation ratio will only
          reduce with larger workloads.

        No layout test, but there is a quota-test.html attached to bugzilla.
        The test is a webpage that can be loaded into multiple tabs to
        consuming storage space. While the test is running, we can run a
        "du -k; du -k *" on the database directory to verify that the total
        disk usage does not far exceed the allowed quota (some small error
        is expected). Without this change, each database from each tab may
        exceed the quota by that same maginitude of error.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::maximumSize):
        * Modules/webdatabase/DatabaseManager.cpp:
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginQuotaManager.cpp: Removed.
        * Modules/webdatabase/OriginQuotaManager.h: Removed.
        * Modules/webdatabase/OriginUsageRecord.cpp: Removed.
        * Modules/webdatabase/OriginUsageRecord.h: Removed.
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::runCurrentStatementAndGetNextState):
        * Modules/webdatabase/SQLTransactionBackendSync.cpp:
        (WebCore::SQLTransactionBackendSync::executeSQL):
        * Modules/webdatabase/SQLTransactionClient.cpp:
        * Modules/webdatabase/SQLTransactionClient.h:
        * Modules/webdatabase/chromium/SQLTransactionClientChromium.cpp:
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-02-25  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [texmap] Rename TextureMapperGL::ClipStack::init to reset
        https://bugs.webkit.org/show_bug.cgi?id=110783

        Reviewed by Noam Rosenthal.

        Functions named init() are usually called inside ctor's to initialize
        member variables that were unable to be assigned on an initialization
        list, which is not the case, and also because reset() better reflects
        the behavior (clears the clip stack and assigns a value to the initial
        clip state).

        No behavior changes, thus covered by existing tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::ClipStack::reset):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::BitmapTextureGL::initializeDepthBuffer):
        * platform/graphics/texmap/TextureMapperGL.h:
        (ClipStack):

2013-02-25  Adam Barth  <abarth@webkit.org>

        Threaded HTML parser should pass fast/parser/iframe-sets-parent-to-javascript-url.html
        https://bugs.webkit.org/show_bug.cgi?id=110637

        Reviewed by Eric Seidel.

        With the main thread parser, we always parse the first chunk of content
        returned as the result of evaluating a JavaScript URL synchronously. In
        particular, if the first chunk has an inline script, we'll execute it
        synchronously.

        Previous to this patch, the threaded parser would always parse this
        content asynchronously. It's conceivable that there could be some
        content relying on the synchronous behavior, so this patch introduces
        the notion of "pinning" a parser to the main thread and uses that
        concept to force the result of JavaScript URLs to be parsed on the main
        thread (which is probably desirable anyway because they're likely to be
        quite short).

        This patch fixes fast/parser/iframe-sets-parent-to-javascript-url.html
        and fast/dom/javascript-url-crash-function.html with the threaded
        parser with --enable-threaded-html-parser.

        * dom/DocumentParser.h:
        (WebCore::DocumentParser::pinToMainThread):
        (DocumentParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore):
        (WebCore::HTMLDocumentParser::pinToMainThread):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::shouldUseThreading):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):

2013-02-25  Jessie Berlin  <jberlin@apple.com>

        Update the localizable strings file.

        Rubber-stamped by Anders Carlsson.

        * English.lproj/Localizable.strings:

2013-02-25  Xueqing Huang  <huangxueqing@baidu.com>

        Flexbox should ignore firstLetter pseudo element.
        https://bugs.webkit.org/show_bug.cgi?id=105126

        Reviewed by Tony Chang.

        The CSS WG decided that first-line and first-letter should not
        apply to flex containers.
        http://dev.w3.org/csswg/css3-flexbox/issue-cr-2012#issue-13

        tests:
        css3/flexbox/flexbox-ignore-firstLetter.html
        css3/flexbox/flexbox-ignore-container-firstLetter.html       

        * rendering/RenderBlock.cpp:
        (WebCore::findFirstLetterBlock):

2013-02-25  Simon Fraser  <simon.fraser@apple.com>

        Lots of unnecessary DidLayout notifications when scrolling zoomed page with iframes
        https://bugs.webkit.org/show_bug.cgi?id=110824

        Reviewed by Tim Horton.
        
        RenderWidget::setWidgetGeometry() compares the old and new frame rects to decide
        if the geometry changed. However, it use implicit IntRect->LayoutRect promotion in
        the comparison, and then roundedIntRect() in setting. Thus the code would think
        that the geometry changed, even when the final assigned frame did not.
        
        Fix by computing the new frame using roundedIntRect(), and using that to determine
        whether the geometry changed.

        No way to test DidLayout notifications in DRT/WTR.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):

2013-02-21  Jeffrey Pfau  <jpfau@apple.com>

        Optionally partition cache to prevent using cache for tracking
        https://bugs.webkit.org/show_bug.cgi?id=110269

        Reviewed by Maciej Stachowiak.

        Implement memory cache partitioning by passing the cache name through
        resource requests into a new version of resourceForURL.

        Test: http/tests/cache/partitioned-cache.html

        * Configurations/FeatureDefines.xcconfig: Add defines for cache partitioning and public suffix list usage
        * WebCore.exp.in: Export new functions for WKSI and test suite
        * WebCore.xcodeproj/project.pbxproj:
        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL): Retrofit for new resourceForRequest function
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource): Retrofit for new resourceForRequest function
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::replayXHR): Retrofit for new resourceForRequest function
        * loader/DocumentLoader.h:
        (DocumentLoader):
        (WebCore::DocumentLoader::recordMemoryCacheLoadForFutureClientNotification): Retrofit for new resourceForRequest function
        (WebCore::DocumentLoader::takeMemoryCacheLoadsForClientNotification): Retrofit for new resourceForRequest function
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache): Retrofit for new resourceForRequest function
        (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads): Retrofit for new resourceForRequest function
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Retrofit for new resourceForRequest function
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource):
        * loader/cache/CachedResource.h: Retrofit for new resourceForRequest function
        (CachedResource):
        (WebCore::CachedResource::cachePartition):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet): Retrofit for new resourceForRequest function
        (WebCore::CachedResourceLoader::requestResource): Retrofit for new resourceForRequest function
        (WebCore::CachedResourceLoader::loadResource): Retrofit for new resourceForRequest function
        * loader/cache/MemoryCache.cpp:
        (WebCore):
        (WebCore::partitionName): Add function for determining absolute partition name
        (WebCore::MemoryCache::add): Retrofit for partition mapping
        (WebCore::MemoryCache::revalidationSucceeded): Retrofit for partition mapping
        (WebCore::MemoryCache::resourceForURL): Call into new resourceForRequest
        (WebCore::MemoryCache::resourceForRequest): Retrofit for partition mapping
        (WebCore::MemoryCache::evict): Retrofit for partition mapping
        (WebCore::MemoryCache::removeResourcesWithOrigin): Retrofit for partition mapping
        (WebCore::MemoryCache::getOriginsWithCache): Retrofit for partition mapping
        (WebCore::MemoryCache::removeUrlFromCache): Retrofit for partition mapping
        (WebCore::MemoryCache::removeRequestFromCache): Retrofit for partition mapping
        (WebCore::MemoryCache::removeRequestFromCacheImpl): Retrofit for partition mapping
        (WebCore::MemoryCache::crossThreadRemoveRequestFromCache): Add function for calling removeRequestFromCacheImpl that takes a CrossThreadResourceRequestData
        (WebCore::MemoryCache::getStatistics): Retrofit for partition mapping
        (WebCore::MemoryCache::setDisabled): Retrofit for partition mapping
        * loader/cache/MemoryCache.h:
        (MemoryCache):
        * page/SecurityOrigin.cpp:
        (WebCore):
        (WebCore::SecurityOrigin::cachePartition): Add function for determining the cache partition name
        * page/SecurityOrigin.h:
        (SecurityOrigin):
        * platform/PublicSuffix.h: Added.
        (WebCore):
        * platform/mac/PublicSuffixMac.mm: Added.
        (WebCore):
        (WebCore::isPublicSuffix):
        (WebCore::topPrivatelyControlledDomain):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/cf/ResourceRequest.h:
        (ResourceRequest):
        (WebCore::ResourceRequest::cachePartition):
        (WebCore::ResourceRequest::setCachePartition):
        (CrossThreadResourceRequestData):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doPlatformCopyData): Pass through cache partition name
        (WebCore):
        (WebCore::ResourceRequest::doPlatformAdopt): Pass through cache partition name
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Pass through cache partition name
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Pass through cache partition name

2013-02-25  Jer Noble  <jer.noble@apple.com>

        Normalize ENABLE_ENCRYPTED_MEDIA definitions across all FeatureDefines files.
        https://bugs.webkit.org/show_bug.cgi?id=110806

        Reviewed by Alexey Proskuryakov.

        Ensure both ENCRYPTED_MEDIA and ENCRYPTED_MEDIA_V2 are enabled on macosx_1090.

        * Configurations/FeatureDefines.xcconfig:

        Fix some build errors which occurred when both ENCRYPTED_MEDIA and 
        ENCRYPTED_MEDIA_V2 were enabled:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitGenerateKeyRequest):
        (WebCore::HTMLMediaElement::webkitAddKey):
        * page/DOMWindow.idl:

2013-02-25  Adam Barth  <abarth@webkit.org>

        6% regression in intl1 page cycler on chromium-mac
        https://bugs.webkit.org/show_bug.cgi?id=110784

        Reviewed by Eric Seidel.

        This patch reverts http://trac.webkit.org/changeset/143014 to see if
        that's the cause of the PLT regression. If it's not the cause, I'll
        roll it back in.

        * dom/Element.cpp:
        (WebCore::Element::addAttributeInternal):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::UniqueElementData::makeShareableCopy):
        (WebCore::ElementData::addAttribute):
        (WebCore::ElementData::removeAttribute):
        (WebCore::ElementData::reportMemoryUsage):
        * dom/Element.h:
        (ElementData):
        (UniqueElementData):
        (WebCore::ElementData::mutableAttributeVector):
        (WebCore):
        (WebCore::ElementData::immutableAttributeArray):
        (WebCore::ElementData::length):
        (WebCore::ElementData::getAttributeItem):
        (WebCore::ElementData::attributeItem):

2013-02-25  Tim Horton  <timothy_horton@apple.com>

        Page::m_isInWindow is uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=110807

        Reviewed by Simon Fraser.

        Ideally m_isInWindow and m_isOnscreen would default to false, and be flipped to true
        when the Page is put in-window or on-screen. However, only the Mac port seems to ever
        call setIsInWindow/didMoveOnscreen. So, we have to default to true and flip it to false
        immediately after construction on Mac.

        This is just matching the behaviour of the existing m_isOnscreen.

        * page/Page.cpp:
        (WebCore::Page::Page): Initialize m_isInWindow to true.

2013-02-25  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix after r143965.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOverloadedConstructorCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::TestOverloadedConstructorsV8Internal::constructor):

2013-02-25  Gustavo Noronha Silva  <gns@gnome.org>

        Build fix for gtk2-based library.

        Reviewed by Martin Robinson.

        * platform/gtk/WidgetRenderingContext.cpp: move gtk2 check to after the config.h
        include, which is the one that includes autotoolsconfig.h, where the gtk2 define
        lives.

2013-02-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143936.
        http://trac.webkit.org/changeset/143936
        https://bugs.webkit.org/show_bug.cgi?id=110789

        Causes webkit_unit_tests failures on android dbg (Requested by
        vollick on #webkit).

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::decodingHalted):
        (WebCore):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        (GIFImageDecoder):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::doLZW):
        (GIFImageReader::read):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFFrameContext):
        (GIFFrameContext::GIFFrameContext):
        (GIFFrameContext::~GIFFrameContext):
        (GIFImageReader::GIFImageReader):
        (GIFImageReader::~GIFImageReader):
        (GIFImageReader):
        (GIFImageReader::globalColormap):
        (GIFImageReader::globalColormapSize):

2013-02-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Generate a wrapper function for method callbacks
        https://bugs.webkit.org/show_bug.cgi?id=110769

        Reviewed by Adam Barth.

        This is one of steps to insert TRACE_EVENT_STATE() macros
        into DOM bindings. This patch introduces an indirection
        function for xxxMethod(), like this:

        // For non-custom methods
        void xxxMethodCallback(...) {
          xxxMethod(...);
        }

        // For custom methods
        void xxxMethodCallback(...) {
          return xxxMethodCustom(...);
        }

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        (GenerateOverloadedFunction):
        (GenerateFunctionCallback):
        (GenerateFunction):
        (GenerateNonStandardFunction):
        (GenerateImplementation):
        (GenerateFunctionCallString):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooMethodCallback):
        (Float64ArrayV8Internal):
        (WebCore::Float64ArrayV8Internal::setMethodCallback):
        (WebCore):
        (WebCore::ConfigureV8Float64ArrayTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionMethodCallback):
        (TestActiveDOMObjectV8Internal):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageMethodCallback):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionMethodCallback):
        (TestCustomNamedGetterV8Internal):
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::itemMethodCallback):
        (TestEventTargetV8Internal):
        (WebCore::TestEventTargetV8Internal::addEventListenerMethodCallback):
        (WebCore::TestEventTargetV8Internal::removeEventListenerMethodCallback):
        (WebCore::TestEventTargetV8Internal::dispatchEventMethodCallback):
        (WebCore):
        (WebCore::ConfigureV8TestEventTargetTemplate):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalMethod1MethodCallback):
        (TestInterfaceV8Internal):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2MethodCallback):
        (WebCore::TestInterfaceV8Internal::supplementalMethod3MethodCallback):
        (WebCore::TestInterfaceV8Internal::supplementalMethod4MethodCallback):
        (WebCore):
        (WebCore::ConfigureV8TestInterfaceTemplate):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::TestMediaQueryListListenerV8Internal::methodMethodCallback):
        (TestMediaQueryListListenerV8Internal):
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::voidMethodMethodCallback):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::voidMethodWithArgsMethodCallback):
        (WebCore::TestObjV8Internal::longMethodMethodCallback):
        (WebCore::TestObjV8Internal::longMethodWithArgsMethodCallback):
        (WebCore::TestObjV8Internal::objMethodMethod):
        (WebCore::TestObjV8Internal::objMethodMethodCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsMethodCallback):
        (WebCore::TestObjV8Internal::methodWithSequenceArgMethodCallback):
        (WebCore::TestObjV8Internal::methodReturningSequenceMethodCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsMethodCallback):
        (WebCore::TestObjV8Internal::serializedValueMethodCallback):
        (WebCore::TestObjV8Internal::optionsObjectMethodCallback):
        (WebCore::TestObjV8Internal::methodWithExceptionMethodCallback):
        (WebCore::TestObjV8Internal::customMethodMethodCallback):
        (WebCore::TestObjV8Internal::customMethodWithArgsMethodCallback):
        (WebCore::TestObjV8Internal::addEventListenerMethodCallback):
        (WebCore::TestObjV8Internal::removeEventListenerMethodCallback):
        (WebCore::TestObjV8Internal::withScriptStateVoidMethodCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjMethodCallback):
        (WebCore::TestObjV8Internal::withScriptStateVoidExceptionMethodCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjExceptionMethodCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextMethodCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateMethodCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateObjExceptionMethodCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesMethodCallback):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackMethodCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalArgMethodCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndOptionalArgMethodCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndTwoOptionalArgsMethodCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringMethodCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsUndefinedMethodCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsNullStringMethodCallback):
        (WebCore::TestObjV8Internal::methodWithCallbackArgMethodCallback):
        (WebCore::TestObjV8Internal::methodWithNonCallbackArgAndCallbackArgMethodCallback):
        (WebCore::TestObjV8Internal::methodWithCallbackAndOptionalArgMethodCallback):
        (WebCore::TestObjV8Internal::conditionalMethod1MethodCallback):
        (WebCore::TestObjV8Internal::conditionalMethod2MethodCallback):
        (WebCore::TestObjV8Internal::conditionalMethod3MethodCallback):
        (WebCore::TestObjV8Internal::overloadedMethodMethodCallback):
        (WebCore::TestObjV8Internal::classMethodMethodCallback):
        (WebCore::TestObjV8Internal::classMethodWithOptionalMethodCallback):
        (WebCore::TestObjV8Internal::classMethod2MethodCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1MethodCallback):
        (WebCore::TestObjV8Internal::classMethodWithClampMethodCallback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod1MethodCallback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod2MethodCallback):
        (WebCore::TestObjV8Internal::enabledPerContextMethod1MethodCallback):
        (WebCore::TestObjV8Internal::enabledPerContextMethod2MethodCallback):
        (WebCore::TestObjV8Internal::stringArrayFunctionMethodCallback):
        (WebCore::TestObjV8Internal::domStringListFunctionMethodCallback):
        (WebCore::TestObjV8Internal::getSVGDocumentMethodCallback):
        (WebCore::TestObjV8Internal::convert1MethodCallback):
        (WebCore::TestObjV8Internal::convert2MethodCallback):
        (WebCore::TestObjV8Internal::convert4MethodCallback):
        (WebCore::TestObjV8Internal::convert5MethodCallback):
        (WebCore::TestObjV8Internal::mutablePointFunctionMethodCallback):
        (WebCore::TestObjV8Internal::immutablePointFunctionMethodCallback):
        (WebCore::TestObjV8Internal::orangeMethodCallback):
        (WebCore::TestObjV8Internal::strictFunctionMethodCallback):
        (WebCore::TestObjV8Internal::variadicStringMethodMethodCallback):
        (WebCore::TestObjV8Internal::variadicDoubleMethodMethodCallback):
        (WebCore::TestObjV8Internal::variadicNodeMethodMethodCallback):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::acceptTransferListMethodCallback):
        (TestSerializedScriptValueInterfaceV8Internal):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::multiTransferListMethodCallback):
        (WebCore):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::funcMethodCallback):
        (TestTypedefsV8Internal):
        (WebCore::TestTypedefsV8Internal::multiTransferListMethodCallback):
        (WebCore::TestTypedefsV8Internal::setShadowMethodCallback):
        (WebCore::TestTypedefsV8Internal::methodWithSequenceArgMethodCallback):
        (WebCore::TestTypedefsV8Internal::nullableArrayArgMethodCallback):
        (WebCore::TestTypedefsV8Internal::funcWithClampMethodCallback):
        (WebCore::TestTypedefsV8Internal::immutablePointFunctionMethodCallback):
        (WebCore::TestTypedefsV8Internal::stringArrayFunctionMethodCallback):
        (WebCore::TestTypedefsV8Internal::stringArrayFunction2MethodCallback):
        (WebCore::TestTypedefsV8Internal::methodWithExceptionMethodCallback):
        (WebCore):
        (WebCore::ConfigureV8TestTypedefsTemplate):

2013-02-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Generate a wrapper method for constructor callbacks
        https://bugs.webkit.org/show_bug.cgi?id=110765

        Reviewed by Adam Barth.

        This is one of steps to insert TRACE_EVENT_STATE() macros
        into DOM bindings. This patch introduces an indirection
        function for constructor(), like this:

        // For non-custom constructors
        void constructorCallback(...) {
          return constructor(...);
        }

        // For custom constructors
        void constructorCallback(...) {
          return constructorCustom(...);
        }

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateOverloadedConstructorCallback):
        (GenerateSingleConstructorCallback):
        (GenerateConstructorCallback):
        (GenerateConstructor):
        (GenerateEventConstructor):
        (GenerateTypedArrayConstructor):
        (GenerateNamedConstructor):
        (GenerateConstructorHeader):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::constructor):
        (Float64ArrayV8Internal):
        (WebCore::V8Float64Array::constructorCallback):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::TestEventConstructorV8Internal::constructor):
        (WebCore):
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::constructor):
        (TestInterfaceV8Internal):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::TestNodeV8Internal::constructor):
        (TestNodeV8Internal):
        (WebCore::V8TestNode::constructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::constructor):
        (TestObjV8Internal):
        (WebCore::V8TestObj::constructorCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::TestOverloadedConstructorsV8Internal::constructor1):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor2):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor3):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor4):
        (WebCore::TestOverloadedConstructorsV8Internal::constructor):
        (WebCore):
        (WebCore::V8TestOverloadedConstructors::constructorCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::constructor):
        (TestSerializedScriptValueInterfaceV8Internal):
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::constructor):
        (TestTypedefsV8Internal):
        (WebCore::V8TestTypedefs::constructorCallback):

2013-02-24  Kentaro Hara  <haraken@chromium.org>

        [V8] Generate xxxAttrSetterCallback()
        https://bugs.webkit.org/show_bug.cgi?id=110726

        Reviewed by Adam Barth.

        This is one of steps to insert TRACE_EVENT_STATE() macros into DOM bindings.
        This patch introduces an indirection function for xxxAttrSetter(), like this:

        // For non-custom setters
        void xxxAttrSetterCallback(...) {
          xxxAttrSetter(...);
        }

        // For custom setters.
        void xxxAttrSetterCallback(...) {
          return xxxAttrSetterCustom(...);
        }

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetterCallback):
        (GenerateNormalAttrSetter):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrSetterCallback):
        (TestInterfaceV8Internal):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrSetterCallback):
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrSetterCallback):
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrSetterCallback):
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::staticStringAttrAttrSetterCallback):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::enumAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::shortAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::unsignedShortAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::longAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::longLongAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::unsignedLongLongAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::stringAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::testObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::testObjAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::createAttrSetterCallback):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::reflectedIntegralAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::reflectedUnsignedIntegralAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::reflectedBooleanAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::reflectedCustomIntegralAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::reflectedCustomBooleanAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrSetterCallback):
        (WebCore::TestObjV8Internal::attrWithSetterExceptionAttrSetterCallback):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrSetterCallback):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrSetterCallback):
        (WebCore::TestObjV8Internal::customAttrAttrSetterCallback):
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrSetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrSetterCallback):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrSetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetterCallback):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrSetterCallback):
        (WebCore::TestObjV8Internal::conditionalAttr1AttrSetterCallback):
        (WebCore::TestObjV8Internal::conditionalAttr2AttrSetterCallback):
        (WebCore::TestObjV8Internal::conditionalAttr3AttrSetterCallback):
        (WebCore::TestObjV8Internal::anyAttributeAttrSetterCallback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr1AttrSetterCallback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr2AttrSetterCallback):
        (WebCore::TestObjV8Internal::enabledPerContextAttr1AttrSetterCallback):
        (WebCore::TestObjV8Internal::enabledPerContextAttr2AttrSetterCallback):
        (WebCore::TestObjV8Internal::floatArrayAttrSetterCallback):
        (WebCore::TestObjV8Internal::doubleArrayAttrSetterCallback):
        (WebCore::TestObjV8Internal::mutablePointAttrSetterCallback):
        (WebCore::TestObjV8Internal::immutablePointAttrSetterCallback):
        (WebCore::TestObjV8Internal::strawberryAttrSetterCallback):
        (WebCore::TestObjV8Internal::strictFloatAttrSetterCallback):
        (WebCore::TestObjV8Internal::idAttrSetterCallback):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::valueAttrSetterCallback):
        (TestSerializedScriptValueInterfaceV8Internal):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrSetterCallback):
        (WebCore):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::unsignedLongLongAttrAttrSetterCallback):
        (TestTypedefsV8Internal):
        (WebCore::TestTypedefsV8Internal::immutableSerializedScriptValueAttrSetterCallback):
        (WebCore::TestTypedefsV8Internal::attrWithGetterExceptionAttrSetterCallback):
        (WebCore::TestTypedefsV8Internal::attrWithSetterExceptionAttrSetterCallback):
        (WebCore::TestTypedefsV8Internal::stringAttrWithGetterExceptionAttrSetterCallback):
        (WebCore::TestTypedefsV8Internal::stringAttrWithSetterExceptionAttrSetterCallback):
        (WebCore):

2013-02-25  Adam Barth  <abarth@webkit.org>

        Build fix for Debug.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::startBackgroundParser):

2013-02-25  Adam Barth  <abarth@webkit.org>

        6% regression in intl1 page cycler on chromium-mac
        https://bugs.webkit.org/show_bug.cgi?id=110784

        Reviewed by Eric Seidel.

        This patch attempts to heal the regression by reverting all the changes
        to the preload scanner up to (and including)
        http://trac.webkit.org/changeset/143020/.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::resumeFrom):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::scan):
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::isStartTag):
        (WebCore):
        (WebCore::isStartOrEndTag):
        (WebCore::TokenPreloadScanner::identifierFor):
        (WebCore::TokenPreloadScanner::inititatorFor):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        (WebCore::TokenPreloadScanner::processPossibleTemplateTag):
        (WebCore::TokenPreloadScanner::processPossibleStyleTag):
        (WebCore::TokenPreloadScanner::processPossibleBaseTag):
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLPreloadScanner.h:
        (TokenPreloadScanner):

2013-02-25  Mark Lam  <mark.lam@apple.com>

        Changed DatabaseTracker::getMaxSizeForDatabase() to return the previous
        database size instead of 0 when the quota limit has been reached.
        https://bugs.webkit.org/show_bug.cgi?id=110557.

        Reviewed by Geoffrey Garen.

        Testing of concurrent multi-process consumption of database quota shows that
        returning a value of 0 when the quota is exceeded still allows some databases
        to run away with unbounded growth. However, if getMaxSizeForDatabase() returns
        the existing database size, the underlying sqlite3 database will successfully
        reject new growth.

        The value returned by DatabaseTracker::getMaxSizeForDatabase() is used to set
        the SQLite3 database size using a sql command "PRAGMA max_page_count = <size>".
        The SQLite3 documentation on this pragma says, "The maximum page count cannot
        be reduced below the current database size."

        It is undefined what setting it to a reduced size will do. So, we're changing
        getMaxSizeForDatabase() to return the existing size instead.

        No new tests.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):

2013-02-25  Tony Chang  <tony@chromium.org>

        Refactor logic for relaying out children out of RenderBlock::styleDidChange
        https://bugs.webkit.org/show_bug.cgi?id=110661

        Reviewed by David Hyatt.

        Instead of having styleDidChange need to know which children to mark as needing layout,
        use a bool to keep track of border and padding width changes so at layout time, we know
        we need to set relayoutChildren=true.

        We steal a bit from m_lineHeight reducing the possible line height from around 500 million pixels
        to 250 million pixels.

        No new tests, this should be covered by fast/block/positioning/border-change-relayout-test.html and
        fast/block/dynamic-padding-border.html.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock): Fix indent and initialize m_hasBorderOrPaddingLogicalWidthChanged.
        (WebCore::RenderBlock::styleDidChange): Remove logic for setting children as needing layout.
        (WebCore::RenderBlock::updateLogicalWidthAndColumnWidth): Return true if border or padding width changed.
        * rendering/RenderBlock.h:
        (RenderBlock): Steal a bit from m_lineHeight and give it to m_hasBorderOrPaddingLogicalWidthChanged.

2013-02-25  Alexis Menard  <alexis@webkit.org>

        transition-property property doesn't accept "all, <IDENT>".
        https://bugs.webkit.org/show_bug.cgi?id=110074

        Reviewed by Dean Jackson.

        http://dev.w3.org/csswg/css3-transitions/#transition-property-property
        allows all, <IDENT> as a value for the transition-property property. In
        fact thanks to http://trac.webkit.org/changeset/143019 we correctly
        implemented that behavior for transition shorthand property while
        fixing bugs on the previous implementation. We did introduce a
        AnimationParseContext to track whether the parsing of the
        transition-property was finished or not in relation to the keyword.
        This patch extend that mechanism to the longhand by renaming the
        boolean and the functions to use it in the context class and set it
        correctly while parsing the longhand property.

        Test: LayoutTests/transitions/transitions-parsing.html

        * css/CSSParser.cpp:
        (WebCore::AnimationParseContext::AnimationParseContext):
        (WebCore::AnimationParseContext::commitAnimationPropertyKeyword):
        (WebCore::AnimationParseContext::animationPropertyKeywordAllowed):
        (AnimationParseContext):
        (WebCore::CSSParser::parseAnimationShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseAnimationProperty): We can remove the
        condition inShorthand() here, if 'none' is parsed then no more keyword
        can appear, if 'all' is parsed then we can continue the parsing but
        invalidate the property if another keyword is encountered. These
        conditions are valid for the shorthand and the longhand.

2013-02-25  No'am Rosenthal  <noam@webkit.org>

        [Texmap] LayoutTests/compositing/animation/state-at-end-event-transform-layer.html shows a red square where it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=110685

        Reviewed by Martin Robinson.

        Removed m_shouldUpdateCurrentTransformFromGraphicsLayer etc., as they don't do
        what they're supposed to do. No flickers observed.

        LayoutTests/compositing/animation/state-at-end-event-transform-layer.html now works correctly.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setAnimatedTransform):
        (WebCore::TextureMapperLayer::setAnimatedOpacity):
        (WebCore::TextureMapperLayer::setAnimatedFilters):
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::TextureMapperLayer):
        (TextureMapperLayer):

2013-02-25  Jer Noble  <jer.noble@apple.com>

        AVFoundation.framework and QTKit.framework are lazy-loaded on every WebProcess launch
        https://bugs.webkit.org/show_bug.cgi?id=110725

        Reviewed by Eric Carlson.

        When settings are changed, do not re-query the media engines (which causes their respective
        frameworks to load). Instead, merely clear any previously loaded media engines so that
        the media engine list will be re-queried the next time installedMediaEngines() is called.

        (WebCore::MediaPlayer::resetMediaEngines): Renamed from requeryMediaEngines.
        * platform/graphics/MediaPlayer.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::resetMediaEngines): Ditto.
        * html/HTMLMediaElement.h:
        * page/Settings.cpp:
        (WebCore::Settings::setAVFoundationEnabled): Call renamed method.
        (WebCore::Settings::setQTKitEnabled):  Ditto.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Only clear out previously queried engines.

2013-02-25  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the Windows gyp build after r143937

        * WebCore.gypi: Update the filename in the source list.

2013-02-25  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Refactor RenderStyle's grid position storage in preparation to supporting spanning
        https://bugs.webkit.org/show_bug.cgi?id=110651

        Reviewed by Ojan Vafai.

        The current code stores grid-{row|column} as a single GridPosition value. While this works well currently,
        we want to be able to handle 2 GridPosition as this enables row / column spanning.

        That's what this refactoring achieves: it replaces the internal storage by a GridPositions that contains a 
        single GridPosition for now. The rest is mechanical updates.

        Refactoring covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridPositions):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Added the simple wrapper valueForGridPositions and updated the rest of the code.

        * css/StyleResolver.cpp:
        (WebCore::createGridPositions):
        (WebCore::StyleResolver::applyProperty):
        Ditto with createGridPositions.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::maximumIndexInDirection):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        (WebCore::RenderGrid::autoPlacementMajorAxisPositionsForChild):
        (WebCore::RenderGrid::autoPlacementMinorAxisPositionsForChild):
        Updated the code after adding the indirection: s/GridPosition/GridPositions/ and
        use the firstPosition helper.

        * rendering/RenderGrid.h:
        * rendering/style/GridPosition.h:
        (WebCore::GridPositions::GridPositions):
        (WebCore::GridPositions::firstPosition):
        (WebCore::GridPositions::operator==):
        Added this class to add the indirection. For now, it only wraps the single GridPosition.

        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridItemData.h:
        Updated to store / take / return a GridPositions.

2013-02-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Revert r143840 because it caused flaky crashes.
        https://bugs.webkit.org/show_bug.cgi?id=110766

2013-02-25  Alexey Proskuryakov  <ap@apple.com>

        Remove an obsolete workaround for relaxing 3rd party cookie policy
        https://bugs.webkit.org/show_bug.cgi?id=110664

        Reviewed by Benjamin Poulain.

        Removed shouldRelaxThirdPartyCookiePolicy(). This workaround is no longer needed,
        because CFNetwork performs the same check starting with 10.6.8.

        Also, the workaround was not quite correct and harmful for performance, as it
        was always changing main document URL to an untrue value, which caused ResourceRequest
        regeneration.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):

2013-02-25  Vsevolod Vlasov  <vsevik@chromium.org>

        WebInspector: Do not keep track of resources unless they have a valid loader identifier.
        https://bugs.webkit.org/show_bug.cgi?id=110761

        Reviewed by Pavel Feldman.

        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::responseReceived):
        (WebCore::NetworkResourcesData::setResourceType):
        (WebCore::NetworkResourcesData::resourceType):
        (WebCore::NetworkResourcesData::setResourceContent):
        (WebCore::NetworkResourcesData::maybeAddResourceData):
        (WebCore::NetworkResourcesData::maybeDecodeDataToContent):
        (WebCore::NetworkResourcesData::addCachedResource):
        (WebCore::NetworkResourcesData::addResourceSharedBuffer):
        (WebCore::NetworkResourcesData::data):
        (WebCore::NetworkResourcesData::xhrReplayData):
        (WebCore::NetworkResourcesData::setXHRReplayData):
        (WebCore::NetworkResourcesData::reuseXHRReplayData):
        (WebCore::NetworkResourcesData::resourceDataForRequestId):
        (WebCore::NetworkResourcesData::ensureNoDataForRequestId):
        (WebCore::NetworkResourcesData::ensureFreeSpace):
        * inspector/NetworkResourcesData.h:
        (NetworkResourcesData):

2013-02-25  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        [EFL][GTK] Move text selection/focus notification for a11y from gtk to atk directory
        https://bugs.webkit.org/show_bug.cgi?id=110221

        Reviewed by Martin Robinson.

        Share implementation between efl and gtk.
        Update build with changes made.

        * GNUmakefile.list.am: Change WebCore/editing/gtk/FrameSelectionGtk.cpp to WebCore/editing/atk/FrameSelectionAtk.cpp to build.
        * PlatformEfl.cmake: Add WebCore/editing/atk to include directories, add Webcore/editing/atk/FrameSelectionAtk.cpp to build.
        * editing/FrameSelection.h: Omit notifyAccessibilityForSelectionChange() stub for EFL port.
        (WebCore):
        * editing/atk/FrameSelectionAtk.cpp: Renamed from Source/WebCore/editing/gtk/FrameSelectionGtk.cpp.
        (WebCore):
        (WebCore::emitTextSelectionChange):
        (WebCore::maybeEmitTextFocusChange):
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):

2013-02-25  Alpha Lam  <hclam@chromium.org>

        GIFImageReader to read from source data directly
        https://bugs.webkit.org/show_bug.cgi?id=109662

        Reviewed by Stephen White.

        This is the first patch to improve GIF image decoding.

        GIFImageReader has an internal 256 bytes buffer to saving incoming
        bytes. This mechanism is out-dated because WebKit holds the entire
        file in memory and it is not necessary to hold data in an intermediate
        buffer.

        This is also a blocker for later work to parse and decode GIF
        incrementally.

        This change removed the imtermediate 'hold' buffer and uses an index
        for data position to keep track of parsing of the GIF file. Buffer for
        global colormap and local colormap are also removed because they can be
        referenced from the data stream.

        This change is tested by:

        Layout tests
        All tests passed under fast/images.

        Unit tests
        Added GIFImageDecoderTest for Chromium.

        Local testing
        I tested this implementation against a set of 50k GIF images and
        there's no crashes and produces bit-exact results as previous code.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::doLZW):
        (GIFImageReader::decode):
        (GIFImageReader::decodeInternal):
        (GIFImageReader::setRemainingBytes):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFFrameContext):
        (GIFFrameContext::GIFFrameContext):
        (GIFFrameContext::~GIFFrameContext):
        (GIFImageReader::GIFImageReader):
        (GIFImageReader::~GIFImageReader):
        (GIFImageReader::setData):
        (GIFImageReader):
        (GIFImageReader::globalColormap):
        (GIFImageReader::localColormap):
        (GIFImageReader::localColormapSize):
        (GIFImageReader::data):
        (GIFImageReader::colormap):

2013-02-25  Sergio Villar Senin  <svillar@igalia.com>

        [soup] "Too many redirects" error loading chat in plus.google.com
        https://bugs.webkit.org/show_bug.cgi?id=64575

        Reviewed by Martin Robinson.

        Set the firstPartyForCookies for the new request on redirects to
        the URL used for redirection.

        Test: http/tests/cookies/set-cookie-on-redirect.html

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

2013-02-25  Andreas Kling  <akling@apple.com>

        Reduce amount of code that includes StylePropertySet.h
        <http://webkit.org/b/101149>

        Reviewed by Antti Koivisto.

        StylePropertySet.h and dependents were getting included by the majority of WebKit
        through either StyledElement.h or CSSStyleDeclaration.h. This change removes those includes
        and moves inclusion to .cpp files instead. After this change, it's possible to hack most
        of WebCore/css/ and rebuild <100 files instead of >1000.

        The only real code change in here is changing CSSStyleDeclaration::cssPropertyMatches()
        to take a CSSPropertyID/CSSValue* combo instead of a StylePropertySet::Reference.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::cssPropertyMatches):
        * css/CSSComputedStyleDeclaration.h:
        (CSSComputedStyleDeclaration):
        * css/CSSStyleDeclaration.h:
        (CSSStyleDeclaration):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::cssPropertyMatches):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/SelectorChecker.h:
        * css/SelectorCheckerFastPath.cpp:
        * css/SelectorFilter.cpp:
        * css/SelectorFilter.h:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::propertyMatches):
        (WebCore::StylePropertySet::removeEquivalentProperties):
        * css/StylePropertySet.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchedProperties::MatchedProperties):
        (WebCore::StyleResolver::MatchedProperties::~MatchedProperties):
        * css/StyleResolver.h:
        (MatchedProperties):
        * css/StyleRule.cpp:
        * css/ViewportStyleResolver.cpp:
        (WebCore::ViewportStyleResolver::~ViewportStyleResolver):
        * css/ViewportStyleResolver.h:
        (ViewportStyleResolver):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::StyleKeyframe):
        (WebCore::StyleKeyframe::~StyleKeyframe):
        * css/WebKitCSSKeyframeRule.h:
        (StyleKeyframe):
        * dom/Attr.cpp:
        * dom/Document.cpp:
        * dom/Element.cpp:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addPropertyToPresentationAttributeStyle):
        * dom/StyledElement.h:
        (StyledElement):
        * editing/FrameSelection.cpp:
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::~RemoveCSSPropertyCommand):
        * editing/RemoveCSSPropertyCommand.h:
        (RemoveCSSPropertyCommand):
        * editing/RemoveFormatCommand.cpp:
        * html/HTMLBodyElement.cpp:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::addHTMLLengthToStyle):
        (WebCore::HTMLElement::addHTMLColorToStyle):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/HTMLFontElement.cpp:
        * html/HTMLHRElement.cpp:
        * html/HTMLPreElement.cpp:
        * html/HTMLTableElement.cpp:
        * html/HTMLTablePartElement.cpp:
        * html/canvas/CanvasStyle.cpp:
        * html/shadow/MediaControlElementTypes.cpp:
        * inspector/InspectorStyleSheet.cpp:
        * page/PageSerializer.cpp:
        * rendering/RenderTableCell.cpp:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGElementRareData.h:
        * svg/SVGFontFaceElement.cpp:

2013-02-25  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Remove CPU profile from a group causes exception
        https://bugs.webkit.org/show_bug.cgi?id=110466

        Reviewed by Yury Semikhatsky.

        WebInspector.ProfilesPanel._removeProfileHandle did not handle
        profile removal from a group. The fix takes care of this case.

        Test: inspector/profiler/cpu-profiler-profile-removal.html

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):

2013-02-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: replace String with const char* in MemoryObjectInfo
        https://bugs.webkit.org/show_bug.cgi?id=110599

        Reviewed by Yury Semikhatsky.

        Due to potentially dynamic nature of names and classNames we need to make a copy of the strings
        that were given us via MemoryInstrumentation calls.
        So I extended client api with registerString method that pushes the strings
        down to the serializer.

        * css/InspectorCSSOMWrappers.h:
        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::reportNodeImpl):
        (WebCore::HeapGraphSerializer::reportEdgeImpl):
        (WebCore::HeapGraphSerializer::registerString):
        (WebCore::HeapGraphSerializer::registerTypeString):
        (WebCore::HeapGraphSerializer::addRootNode):
        * inspector/HeapGraphSerializer.h:
        (HeapGraphSerializer):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::registerString):
        (WebCore):
        * inspector/MemoryInstrumentationImpl.h:
        (MemoryInstrumentationClientImpl):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::reportMemoryUsage):

2013-02-25  Keishi Hattori  <keishi@webkit.org>

        Add a scrollbar class for the new calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=110589

        Reviewed by Kent Tamura.

        Adding a scrollbar to be used in the new calendar picker (Bug 109439).

        No new tests. Code is not used yet.

        * Resources/pagepopups/calendarPicker.js:
        (ScrubbyScrollBar):
        (ScrubbyScrollBar.prototype.height):
        (ScrubbyScrollBar.prototype.setHeight):
        (ScrubbyScrollBar.prototype.setThumbHeight): Sets the height of the scroll bar thumb.
        (ScrubbyScrollBar.prototype._setThumbPositionFromEvent): Sets the thumb position from a mouse event.
        (ScrubbyScrollBar.prototype.onMouseDown):
        (ScrubbyScrollBar.prototype.onWindowMouseMove):
        (ScrubbyScrollBar.prototype.onWindowMouseUp):
        (ScrubbyScrollBar.prototype.onThumbStyleTopAnimationStep): Animates the thumb back to the center position.
        (ScrubbyScrollBar.prototype.onScrollTimer): Fires repeatedly while the thumb is being dragged.

2013-02-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Fix of closure type annotations.

        * inspector/front-end/UISourceCode.js:
        * inspector/front-end/utilities.js:

2013-02-25  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Timeline bars and dividers are positioned in different coordinate systems.
        https://bugs.webkit.org/show_bug.cgi?id=109943

        Reviewed by Pavel Feldman.

        Look at network log: red bar (on load) is positioned to the right of
        the last required load.
        
        This is incorrect. For exmaple, in case of short event it should be
        positioned in the center of the bar.

        * inspector/front-end/DataGrid.js:
        Fix - hidden columns can have non-zero width.
        * inspector/front-end/NetworkPanel.js: Use correct width for calculator.
        * inspector/front-end/networkLogView.css: Removed parasite paddinds.
        Extracted common absolute "paddings".

2013-02-25  Keishi Hattori  <keishi@webkit.org>

        Add list view for new calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=110140

        Reviewed by Kent Tamura.

        Adding list view class to be used in the new calendar picker (Bug 109439).

        No new tests. Code is not yet used.

        * Resources/pagepopups/calendarPicker.js:
        (ListCell): One row inside the list view. We reuse
        list cells to avoid animation hiccups caused by memory allocation.
        (ListCell.prototype._recycleBin): Returns array to
        store thrown away list cells so we can reuse them.
        (ListCell.prototype.throwAway): Hides the cell and puts it in the recycle bin.
        (ListCell.prototype.show):
        (ListCell.prototype.hide): Hide the cell when we don't need the cell any more.
        (ListCell.prototype.width):
        (ListCell.prototype.setWidth):
        (ListCell.prototype.position):
        (ListCell.prototype.setPosition): Sets the CSS transform to position the cell.
        (ListCell.prototype.setSelected): Adds selected CSS class.
        (ListView): Shows a scrolling list.
        (ListView.prototype.onAnimationFrameWillFinish): Calls updateCells if the cells need to be updated.
        (ListView.prototype.setNeedsUpdateCells): Mark the cells as need to be updated.
        (ListView.prototype.cellAtRow): Returns the cell at a given row. If the cell is not visible and doesn't exist, returns undefined.
        (ListView.prototype.rowAtScrollOffset): The row that is displayed at the given scroll offset.
        (ListView.prototype.scrollOffsetForRow): The scroll offset for the top of a given row.
        (ListView.prototype.addCellIfNecessary): Adds the cell for a given row.
        (ListView.prototype.prepareNewCell): Prepares a new or recycled cell for a given row.
        (ListView.prototype.throwAwayCell): Throws a way a cell.
        (ListView.prototype.firstVisibleRow): The first visible row at the top of the view.
        (ListView.prototype.lastVisibleRow): The last visible row at the bottom of the view.
        (ListView.prototype.scrollViewDidChangeContentOffset):
        (ListView.prototype.scrollViewDidChangeHeight):
        (ListView.prototype.scrollViewDidChangePartition):
        (ListView.prototype.updateCells): Updates all the cells that are visible.
        (ListView.prototype.width):
        (ListView.prototype.setWidth):
        (ListView.prototype.height):
        (ListView.prototype.setHeight):
        (ListView.prototype.onClick): Clicking on a row selects it.
        (ListView.prototype.select):
        (ListView.prototype.deselect):
        (ListView.prototype.scrollToRow): Scrolls to a given row.

2013-02-25  Alexei Filippov  <alph@chromium.org>

        Web Inspector: move profile type specific code out of ProfilesPanel (refactor)
        https://bugs.webkit.org/show_bug.cgi?id=110597

        Reviewed by Yury Semikhatsky.

        Move profile type specific functionality out of ProfilesPanel class.
        This is a first part of WebInspector.ProfilesPanel refactoring.

        No new tests as the functionality isn't changed.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileType):
        (WebInspector.CPUProfileType.prototype.addProfileHeader):
        (WebInspector.CPUProfileType.prototype.removeProfile):
        (WebInspector.CPUProfileType.prototype._requestProfilesFromBackend):
        (WebInspector.CPUProfileType.prototype.resetProfiles):
        (WebInspector.CPUProfileType.prototype.addHeapSnapshotChunk):
        (WebInspector.CPUProfileType.prototype.finishHeapSnapshot):
        (WebInspector.CPUProfileType.prototype.reportHeapSnapshotProgress):
        * inspector/front-end/CSSSelectorProfileView.js:
        (WebInspector.CSSSelectorProfileType.prototype.buttonClicked):
        (WebInspector.CSSSelectorProfileType.prototype._startRecordingProfile):
        (WebInspector.CSSSelectorProfileType.prototype._stopRecordingProfile):
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileType.prototype.buttonClicked):
        (WebInspector.CanvasProfileType.prototype._runSingleFrameCapturing):
        (WebInspector.CanvasProfileType.prototype._startFrameCapturing):
        (WebInspector.CanvasProfileType.prototype._didStartCapturingFrame):
        (WebInspector.CanvasProfileType.prototype._reset):
        (WebInspector.CanvasProfileType.prototype.removeProfile):
        (WebInspector.CanvasProfileHeader.prototype.dispose):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._profiles):
        (WebInspector.HeapSnapshotProfileType):
        (WebInspector.HeapSnapshotProfileType.prototype.buttonClicked):
        (WebInspector.HeapSnapshotProfileType.prototype.addProfileHeader):
        (WebInspector.HeapSnapshotProfileType.prototype.addHeapSnapshotChunk):
        (WebInspector.HeapSnapshotProfileType.prototype.finishHeapSnapshot):
        (WebInspector.HeapSnapshotProfileType.prototype.reportHeapSnapshotProgress):
        (WebInspector.HeapSnapshotProfileType.prototype.resetProfiles):
        (WebInspector.HeapSnapshotProfileType.prototype.removeProfile):
        (WebInspector.HeapSnapshotProfileType.prototype._requestProfilesFromBackend):
        (WebInspector.HeapProfileHeader.prototype._updateTransferProgress):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotProfileType):
        (WebInspector.NativeSnapshotProfileType.prototype.addNativeSnapshotChunk):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType):
        (WebInspector.ProfileType.prototype.buttonClicked):
        (WebInspector.ProfileType.prototype.get description):
        (WebInspector.ProfileType.prototype.getProfiles):
        (WebInspector.ProfileType.prototype.getProfile):
        (WebInspector.ProfileType.prototype._makeKey):
        (WebInspector.ProfileType.prototype.addProfile):
        (WebInspector.ProfileType.prototype.removeProfile):
        (WebInspector.ProfileType.prototype.findTemporaryProfile):
        (WebInspector.ProfileType.prototype._reset):
        (WebInspector.ProfileType.prototype._requestProfilesFromBackend):
        (WebInspector.ProfileHeader):
        (WebInspector.ProfileHeader.prototype.dispose):
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype._loadFromFile):
        (WebInspector.ProfilesPanel.prototype.toggleRecordButton):
        (WebInspector.ProfilesPanel.prototype._populateAllProfiles):
        (WebInspector.ProfilesPanel.prototype.wasShown):
        (WebInspector.ProfilesPanel.prototype._profilerWasEnabled):
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype._registerProfileType.onAddProfileHeader):
        (WebInspector.ProfilesPanel.prototype._registerProfileType.onRemoveProfileHeader):
        (WebInspector.ProfilesPanel.prototype._registerProfileType.onProgressUpdated):
        (WebInspector.ProfilesPanel.prototype._registerProfileType):
        (WebInspector.ProfilesPanel.prototype._addProfileHeader):
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):
        (WebInspector.ProfilesPanel.prototype._createTemporaryProfile):
        (WebInspector.ProfilesPanel.prototype._removeTemporaryProfile):
        (WebInspector.ProfilesPanel.prototype.getProfile):
        (WebInspector.ProfilesPanel.prototype.showProfile):
        (WebInspector.ProfilesPanel.prototype._getAllProfiles):
        (WebInspector.ProfilesPanel.prototype._searchableViews):
        (WebInspector.ProfilesPanel.prototype.searchCanceled):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype._reportProfileProgress):

2013-02-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed fix of type annotation for this._liveLocations.

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

2013-02-25  Kent Tamura  <tkent@chromium.org>

        Fix style errors in WebCore/editing/{htmlediting,markup,visible_units}.*
        https://bugs.webkit.org/show_bug.cgi?id=110721

        Reviewed by Ryosuke Niwa.

        No new tests. This should not make any bahevior changes.

        * editing/htmlediting.cpp:
        (WebCore::lowestEditableAncestor):
        (WebCore):
        (WebCore::isSpecialElement):
        (WebCore::enclosingListChild):
        (WebCore::canMergeLists):
        (WebCore::tabSpanNode):
        (WebCore::isNodeRendered):
        (WebCore::caretMaxOffset):
        * editing/htmlediting.h:
        (WebCore):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement):
        * editing/markup.h:
        (WebCore):
        * editing/visible_units.cpp:
        (WebCore::previousRootInlineBoxCandidatePosition):
        (WebCore::nextRootInlineBoxCandidatePosition):
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::previousBoundary):
        (WebCore::endOfLine):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        (WebCore::nextSentencePositionBoundary):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):

2013-02-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Improve speed of Linkifier.reset operation.
        https://bugs.webkit.org/show_bug.cgi?id=110696

        Reviewed by Yury Semikhatsky.

        Linkifier calls Location.dispose N times and each dispose method calls Array.remove
        which scans entire array and does splice. So the complexity of Linkifier.reset
        is O(N^2). I replaced the arrays with Set and got O(N) complexity.

        Drive by fix: The identifier generator was slightly changed.
        Now it produces identifiers that couldn't be converted into a number.
        So the engine will never convert Set/Map object into an array.

        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.updateLocations):
        (WebInspector.Script.prototype.createLiveLocation):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.addLiveLocation):
        (WebInspector.UISourceCode.prototype.updateLiveLocations):
        * inspector/front-end/utilities.js:

2013-02-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143797.
        http://trac.webkit.org/changeset/143797
        https://bugs.webkit.org/show_bug.cgi?id=110724

        Causes assertion failures in multiple tests. (Requested by
        vsevik on #webkit).

        * dom/DocumentParser.h:
        (DocumentParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::shouldUseThreading):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):

2013-02-24  Hajime Morrita  <morrita@google.com>

        Rollout r143556, it regressed html5-full-render perf.
        https://bugs.webkit.org/show_bug.cgi?id=110719

        Unreviewed rollout.
        
        * css/BasicShapeFunctions.cpp:
        (WebCore::convertToLength):
        (WebCore::basicShapeForValue):
        * css/BasicShapeFunctions.h:
        (WebCore):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::gradientWithStylesResolved):
        * css/CSSGradientValue.h:
        (CSSGradientValue):
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::style):
        (WebCore::CSSToStyleMap::rootElementStyle):
        (WebCore::CSSToStyleMap::useSVGZoomRules):
        (WebCore::CSSToStyleMap::styleImage):
        * css/CSSToStyleMap.h:
        (WebCore):
        (WebCore::CSSToStyleMap::CSSToStyleMap):
        (CSSToStyleMap):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyExpanding::applyInheritValue):
        (WebCore::ApplyPropertyExpanding::applyInitialValue):
        (WebCore::ApplyPropertyExpanding::applyValue):
        (WebCore::ApplyPropertyDefaultBase::applyInheritValue):
        (WebCore::ApplyPropertyDefaultBase::applyInitialValue):
        (WebCore::ApplyPropertyDefaultBase::applyValue):
        (WebCore::ApplyPropertyDefault::applyValue):
        (WebCore::ApplyPropertyNumber::applyValue):
        (WebCore::ApplyPropertyStyleImage::applyValue):
        (WebCore::ApplyPropertyAuto::applyInheritValue):
        (WebCore::ApplyPropertyAuto::applyInitialValue):
        (WebCore::ApplyPropertyAuto::applyValue):
        (WebCore::ApplyPropertyClip::convertToLength):
        (WebCore::ApplyPropertyClip::applyInheritValue):
        (WebCore::ApplyPropertyClip::applyInitialValue):
        (WebCore::ApplyPropertyClip::applyValue):
        (WebCore::ApplyPropertyColor::applyInheritValue):
        (WebCore::ApplyPropertyColor::applyInitialValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::ApplyPropertyColor::applyColorValue):
        (WebCore::ApplyPropertyDirection::applyValue):
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyString::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFillLayer::applyInheritValue):
        (WebCore::ApplyPropertyFillLayer::applyInitialValue):
        (WebCore::ApplyPropertyFillLayer::applyValue):
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyFont::applyInheritValue):
        (WebCore::ApplyPropertyFont::applyInitialValue):
        (WebCore::ApplyPropertyFont::applyValue):
        (WebCore::ApplyPropertyFontSize::applyInheritValue):
        (WebCore::ApplyPropertyFontSize::applyInitialValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyFontWeight::applyValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInheritValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInitialValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue):
        (WebCore::ApplyPropertyBorderImage::applyValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInheritValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyValue):
        (WebCore::ApplyPropertyBorderImageSource::applyValue):
        (WebCore::ApplyPropertyCounter::emptyFunction):
        (WebCore::ApplyPropertyCounter::applyInheritValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        (WebCore::ApplyPropertyCursor::applyInheritValue):
        (WebCore::ApplyPropertyCursor::applyInitialValue):
        (WebCore::ApplyPropertyCursor::applyValue):
        (WebCore::ApplyPropertyTextAlign::applyValue):
        (WebCore::ApplyPropertyTextDecoration::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyPageSize::applyInheritValue):
        (WebCore::ApplyPropertyPageSize::applyInitialValue):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInheritValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInitialValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue):
        (WebCore::ApplyPropertyAnimation::map):
        (WebCore::ApplyPropertyAnimation::applyInheritValue):
        (WebCore::ApplyPropertyAnimation::applyInitialValue):
        (WebCore::ApplyPropertyAnimation::applyValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInheritValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInitialValue):
        (WebCore::ApplyPropertyOutlineStyle::applyValue):
        (WebCore::ApplyPropertyResize::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue):
        (WebCore::ApplyPropertyAspectRatio::applyInitialValue):
        (WebCore::ApplyPropertyAspectRatio::applyValue):
        (WebCore::ApplyPropertyZoom::resetEffectiveZoom):
        (WebCore::ApplyPropertyZoom::applyInheritValue):
        (WebCore::ApplyPropertyZoom::applyInitialValue):
        (WebCore::ApplyPropertyZoom::applyValue):
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        (WebCore::ApplyPropertyDisplay::applyInheritValue):
        (WebCore::ApplyPropertyDisplay::applyInitialValue):
        (WebCore::ApplyPropertyDisplay::applyValue):
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyExclusionShape::applyValue):
        (WebCore::ApplyPropertyImageResolution::applyInheritValue):
        (WebCore::ApplyPropertyImageResolution::applyInitialValue):
        (WebCore::ApplyPropertyImageResolution::applyValue):
        * css/StyleBuilder.h:
        (WebCore):
        (PropertyHandler):
        (WebCore::PropertyHandler::applyInheritValue):
        (WebCore::PropertyHandler::applyInitialValue):
        (WebCore::PropertyHandler::applyValue):
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::styleSharingCandidateMatchesHostRules):
        (WebCore::StyleResolver::matchHostRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::sortMatchedRules):
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::initElement):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::canShareStyleWithControl):
        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::findSiblingForStyleSharing):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::defaultStyleForElement):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::updateFont):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::ruleMatches):
        (WebCore::StyleResolver::checkRegionSelector):
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::isLeftPage):
        (WebCore::StyleResolver::applyPropertyToStyle):
        (WebCore::StyleResolver::applyPropertyToCurrentStyle):
        (WebCore::StyleResolver::useSVGZoomRules):
        (WebCore::StyleResolver::resolveVariables):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::styleImage):
        (WebCore::StyleResolver::cachedOrPendingFromValue):
        (WebCore::StyleResolver::generatedOrPendingFromValue):
        (WebCore::StyleResolver::setOrPendingFromValue):
        (WebCore::StyleResolver::cursorOrPendingFromValue):
        (WebCore::StyleResolver::checkForTextSizeAdjust):
        (WebCore::StyleResolver::checkForZoomChange):
        (WebCore::StyleResolver::checkForGenericFamilyChange):
        (WebCore::StyleResolver::initializeFontStyle):
        (WebCore::StyleResolver::setFontSize):
        (WebCore::StyleResolver::colorFromPrimitiveValue):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::styleShader):
        (WebCore::StyleResolver::cachedOrPendingStyleShaderFromValue):
        (WebCore::StyleResolver::loadPendingShaders):
        (WebCore::StyleResolver::parseCustomFilterTransformParameter):
        (WebCore::StyleResolver::parseCustomFilterParameter):
        (WebCore::StyleResolver::parseCustomFilterParameterList):
        (WebCore::StyleResolver::createCustomFilterOperationWithInlineSyntax):
        (WebCore::StyleResolver::createCustomFilterOperation):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::loadPendingImage):
        (WebCore::StyleResolver::loadPendingImages):
        (WebCore::StyleResolver::loadPendingResources):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::style):
        (WebCore::StyleResolver::parentStyle):
        (WebCore::StyleResolver::rootElementStyle):
        (WebCore::StyleResolver::element):
        (WebCore::StyleResolver::hasParentNode):
        (StyleResolver):
        (WebCore::StyleResolver::isRightPage):
        (WebCore::StyleResolver::State::State):
        (WebCore::StyleResolver::State::document):
        (State):
        (WebCore::StyleResolver::applyPropertyToRegularStyle):
        (WebCore::StyleResolver::applyPropertyToVisitedLinkStyle):
        (WebCore::StyleResolver::styleMap):
        (WebCore::StyleResolver::fontDescription):
        (WebCore::StyleResolver::parentFontDescription):
        (WebCore::StyleResolver::setFontDescription):
        (WebCore::StyleResolver::setZoom):
        (WebCore::StyleResolver::setEffectiveZoom):
        (WebCore::StyleResolver::setTextSizeAdjust):
        (WebCore::StyleResolver::setWritingMode):
        (WebCore::StyleResolver::setTextOrientation):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):

2013-02-24  Eric Carlson  <eric.carlson@apple.com>

        [Mac] cleanup MediaPlayerPrivateAVFoundation and InbandTextTrackPrivateAVF
        https://bugs.webkit.org/show_bug.cgi?id=110716

        Reviewed by Alexey Proskuryakov.

        No new tests, no functionality changed.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::InbandTextTrackPrivateAVF): Take AVFInbandTrackParent*
            instead of MediaPlayerPrivateAVFoundation*.
        (WebCore::InbandTextTrackPrivateAVF::processCue): Pass new cues directly to the client.
        (WebCore::InbandTextTrackPrivateAVF::disconnect): m_player -> m_owner.
        (WebCore::InbandTextTrackPrivateAVF::setMode):  m_player -> m_owner.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::addGenericCue): Delete, no longer needed.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: Don't include 
            CachedResourceClient.h, it isn't needed.

2013-02-24  Kihong Kwon  <kihong.kwon@samsung.com>

        Add an ASSERT to didChangeDeviceProximity
        https://bugs.webkit.org/show_bug.cgi?id=110317

        Reviewed by Hajime Morrita.

        Add An ASSERT to didChangeDeviceProximity function to check range of value.

        Change exist test cases.

        * Modules/proximity/DeviceProximityController.cpp:
        (WebCore::DeviceProximityController::didChangeDeviceProximity):

2013-02-24  Alexey Proskuryakov  <ap@apple.com>

        Clarify meaning of default default encoding localizable string
        https://bugs.webkit.org/show_bug.cgi?id=110714

        Reviewed by Eric Carlson.

        * English.lproj/Localizable.strings: This string is only used on Windows, and it's
        very confusing to everyone involved.

2013-02-24  Mike West  <mkwst@chromium.org>

        CSP 1.1: Experiment with 'reflected-xss' directive.
        https://bugs.webkit.org/show_bug.cgi?id=104479

        Reviewed by Adam Barth.

        Content Security Policy 1.1 defines a 'reflected-xss' directive that
        works in much the same way as WebKit's current 'X-XSS-Protection'
        header[1]. This patch implements the new directive by parsing it
        inside ContentSecurityPolicy, and exposing that state to XSSAuditor.

        XSSAuditor now grabs the CSP directive's state, and mixes it with the
        X-XSS-Protection header's state to determine how the page should be
        handled. Moreover, both headers' states are now expressed in terms of
        ContentSecurityPolicy::ReflectedXSSDisposition.

        [1]: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#reflected-xss--experimental

        Tests: http/tests/security/contentSecurityPolicy/1.1/reflected-xss-allow.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-allow.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-block.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-filter.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-invalid.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-allow-unset.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-allow.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-block.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-filter.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-invalid.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-block-unset.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-allow.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-block.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-filter.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-invalid.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-filter-unset.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-allow.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-block.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-filter.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-invalid.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-invalid-unset.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-allow.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-block.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-filter.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-invalid.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-and-xss-protection-unset-unset.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-block.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-empty.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-filter.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-invalid.html
               http/tests/security/contentSecurityPolicy/1.1/reflected-xss-parsing.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::combineXSSProtectionHeaderAndCSP):
            Given both headers' states, return the state which the XSSAuditor
            should use when parsing a page. Blocking overrides filtering, which
            overrides disabling.
        (WebCore):
        (WebCore::XSSAuditor::init):
            Process the 'X-XSS-Protection' header before grabbing the CSP
            header's state. Both are passed into the new
            combineXSSProtectionHeaderAndCSP method to generate the final
            state that ought to be used.
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
            Switch to ContentSecurityPolicy::ReflectedXSSDisposition internally
            in XSSAuditor.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::reflectedXSSDisposition):
            Enum defining the possible state of the 'reflected-xss' CSP directive.
        (CSPDirectiveList):
        (WebCore::CSPDirectiveList::CSPDirectiveList):
        (WebCore::CSPDirectiveList::parseReflectedXSS):
            Given a 'reflected-xss' directive's value, set the
            ReflectedXSSDisposition into a new property on the CSPDirectiveList.
        (WebCore):
        (WebCore::CSPDirectiveList::addDirective):
            Accept 'reflected-xss' as a valid directive if we're in
            experimental mode.
        (WebCore::ContentSecurityPolicy::reflectedXSSDisposition):
            Expose the directive's state via the public API.
        (WebCore::ContentSecurityPolicy::reportInvalidReflectedXSS):
            Generate console errors when invalid reflected-xss directive values
            are encounted during parsing.
        * page/ContentSecurityPolicy.h:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseXSSProtectionHeader):
        * platform/network/HTTPParsers.h:
        (WebCore):
            Start using ContentSecurityPolicy::ReflectedXSSDisposition rather
            than the XSSProtectionDisposition enum.

2013-02-24  Zan Dobersek  <zdobersek@igalia.com>

        Updating GObject bindings baselines after r143863.

        Unreviewed.

        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:

2013-02-24  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Stop generating UserAgentGtk.h
        https://bugs.webkit.org/show_bug.cgi?id=110582

        Reviewed by Martin Robinson.

        No new tests - no new functionality.

        * GNUmakefile.list.am: Move the UserAgentGtk.h build target from the derived sources list to
        the list of the WebCore platform sources.
        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::standardUserAgent): Rename WEBKIT_USER_AGENT_(MAJOR|MINOR)_VERSION to
        USER_AGENT_GTK_(MAJOR|MINOR)_VERSION.
        * platform/gtk/UserAgentGtk.h: Renamed from Source/WebCore/platform/gtk/UserAgentGtk.h.in.
        Same as the input file expect for removed WEBKIT_USER_AGENT_(MAJOR|MINOR)_VERSION defines that
        are now replaced by using the USER_AGENT_GTK_(MAJOR|MINOR)_VERSION defines placed in autotoolsconfig.h.

2013-02-24  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] GTK+ 2 build broken since GTK_API_VERSION_2 moved to autoconfig.h
        https://bugs.webkit.org/show_bug.cgi?id=110702

        Reviewed by Martin Robinson.

        No tests. Build fix, no behaviour change.

        * platform/gtk/GtkVersioning.h: include the autotoolsconfig.h header,
        which contains the GTK_API_VERSION_2 define now.

2013-02-24  Andreas Kling  <akling@apple.com>

        StyledElement: Don't expose a mutable direct interface to the inline style.
        <http://webkit.org/b/110711>

        Reviewed by Antti Koivisto.

        Remove the ability to grab at a mutable StylePropertySet* for a StyledElement's inline style
        from the outside world. It's now private and returns MutableStylePropertySet* for future convenience.

        Three paths to changing the inline style remain:

            - Setting the "style" attribute
            - Via CSSOM (element.style)
            - setInlineStyleProperty/removeInlineStyleProperty helpers

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::ensureMutableInlineStyle):
        * dom/StyledElement.h:
        (StyledElement):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::copyStyleOrCreateEmpty):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::currentColor):

2013-02-24  Keishi Hattori  <keishi@webkit.org>

        Add methods to date types for new calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=110454

        Reviewed by Kent Tamura.

        Adding some methods to date types as part of the calendar picker redesign (Bug 109439).

        Test: platform/chromium/fast/forms/calendar-picker/calendar-picker-date-types.html

        * Resources/pagepopups/calendarPicker.js:
        (createUTCDate):
        (DateType): Base class for Day, Week and Month.
        (Day): Simplified constructor to only accept year, month, date.
        (Day.createFromValue): Creates a new Day from a value.
        (Day.createFromDate): Throw an error if the given date is invalid.
        (Day.createFromDay):
        (Day.prototype.equals): Accept non Day objects.
        (Day.prototype.previous): Modified to take an offset value.
        (Day.prototype.next): Ditto.
        (Day.prototype.firstDay): Returns the first day in the range. For Day's case, returns itself.
        (Day.prototype.middleDay): Returns the middle day in the range. For Day's case, returns itself.
        (Day.prototype.lastDay): Returns the middle day in the range. For Day's case, returns itself.
        (Day.prototype.valueOf):
        (Day.prototype.weekDay): Returns the week day.
        (Week): Simplified constructor to only accept year, month, date.
        (Week.createFromValue):
        (Week.createFromDate):
        (Week.createFromDay):
        (Week.weekOneStartDateForYear):
        (Week.weekOneStartDayForYear):
        (Week._numberOfWeeksSinceDate):
        (Week.prototype.equals):
        (Week.prototype.previous):
        (Week.prototype.next):
        (Week.prototype.firstDay): Returns the first day in the week.
        (Week.prototype.middleDay): Returns the the day for Thursday.
        (Week.prototype.lastDay): Returns the last day in the week.
        (Week.prototype.valueOf):
        (Month):
        (Month.createFromValue):
        (Month.createFromDate):
        (Month.createFromDay):
        (Month.prototype.containsDay):
        (Month.prototype.equals):
        (Month.prototype.previous):
        (Month.prototype.next):
        (Month.prototype.firstDay): Returns the first day in the month.
        (Month.prototype.middleDay): Returns the middle day in the month.
        (Month.prototype.lastDay): Returns the last day in the month.
        (Month.prototype.valueOf):
        (Month.prototype.toLocaleString): Moved location.
        (Month.prototype.toShortLocaleString): Returns the month string in short format.
        (CalendarPicker): Use createFromValue.
        (YearMonthController.prototype.setMonth): Ditto.
        (YearMonthController.prototype.moveRelatively): Ditto.

2013-02-24  Hajime Morrita  <morrita@google.com>

        [Custom Elements] Implement bare-bone document.register()
        https://bugs.webkit.org/show_bug.cgi?id=100229

        Reviewed by Adam Barth.

        This change implements a prefixed version of document.register(), with minimal feature support.
        - The feature is guarded by ENABLE(CUSTOM_ELEMENTS) and RuntimeEnabledFeatures::customDOMElementsEnabled().
        - This bare-bone version only recognizes "name" and "prototype" parameters. It doesn't support default value of "prototype" parameter.
        - Currently only V8 is supported. JSC binding needs its own binding implementation.

        = Major new classes under dom/:

        The dom module gets two new classes:
        - CustomElementConstructor: A return value of document.register()
          which holds the custom element definition.
        - CustomElementRegistry: A collection of CustomElementConstructor objects.
          CustomElementRegistry instance is created per Document and is owned by the Document.

        CustomElementConstructor knows the definition of each custom
        element, which is registered by document.register(). The name and
        other options are held by this object. CustomElementRegistry owns a set
        of the registered constructors. The registry guarantees invariants
        like validity and uniqueness of the element names.

        = A change on make_names.pl

        This change tweaks make_names.pl (or generated HTMLElementFactory)
        to hook the creations of unknown elements. Some of element names
        which come to the fallback path can be one of registered custom
        element.

        = [V8WrapAsFunction] extended attribute:

        The document.register() API returns a constructor
        function. However, the V8 binding currently doesn't support it. To
        make it possible, this change introduces "V8WrapAsFunction"
        extended attribute for annotating CustomElementConstructor IDL
        interface.

        V8WrapAsFunction wraps the annotated interface with a JavaScript
        function, which calls the original object as a function, or as a
        constructor depends on the context.

        With this wrapper function, there are two levels of indirection
        between native C++ object and author-visible JS function:

        [JS Adaptor Function] <-(hidden property)-> [JS Wrapper Object] -(internal field)-> [C++ Native object]

        The code generator generates the binding code which deals with
        this indirection.  Also, there is a set of helper functions in
        V8AdaptorFunction.h/cpp which takes care of this indirection.
        V8DOMWrapper.cpp/h works as a facade for these APIs and is used from
        the generated code.

        This redundancy comes from limitations of both V8 bindings and V8
        embedding API. See bug 108138 for details.

        = V8HTMLCustomElement

        Unlike built-in HTML elements, any custom element has no
        corresponding C++ class. Instead, document.register() should allow
        passing a prototype object for the elements being registered.

        V8HTMLCustomElement handles this lack of native class.  It behaves
        like a native side proxy of non-native HTMLElement subclasses.  It
        connects each custom element to an appropriate native element,
        which is HTMLElement at this time. This restriction will be
        relaxed later. See Bug 110436 for details.

        = Custom DOM elements and multiple worlds

        In this patch, custom element registration and instantiation is not allowed
        in non-main world and document.register() API just fails there.

        Reviewed by Adam Barth.

        Tests: fast/dom/custom/document-register-basic.html
               fast/dom/custom/document-register-reentrant-null-constructor.html
               fast/dom/custom/document-register-reentrant-returning-fake.html
               fast/dom/custom/document-register-reentrant-throwing-constructor.html

        * DerivedSources.make:
        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::customDOMElementsEnabled):
        (WebCore::RuntimeEnabledFeatures::setCustomDOMElements):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/v8/CustomElementHelpers.cpp: Added.
        (WebCore::CustomElementHelpers::initializeConstructorWrapper):
        (WebCore::hasNoBuiltinsInPrototype):
        (WebCore::CustomElementHelpers::isValidPrototypeParameter):
        (WebCore::CustomElementHelpers::isFeatureAllowed):
        * bindings/v8/CustomElementHelpers.h: Copied from Source/WebCore/bindings/v8/V8HiddenPropertyName.h.
        (CustomElementHelpers):
        * bindings/v8/V8AdaptorFunction.cpp: Added.
        (WebCore::V8AdaptorFunction::getTemplate):
        (WebCore::V8AdaptorFunction::configureTemplate):
        (WebCore::V8AdaptorFunction::invocationCallback):
        (WebCore::V8AdaptorFunction::wrap):
        * bindings/v8/V8AdaptorFunction.h: Added.
        (V8AdaptorFunction):
        (WebCore::V8AdaptorFunction::unwrap):
        (WebCore::V8AdaptorFunction::get):
        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::configureTemplate):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::toFunction):
        (WebCore::V8DOMWrapper::fromFunction):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        * bindings/v8/V8HTMLCustomElement.cpp: Added.
        (WebCore::V8HTMLCustomElement::createWrapper):
        * bindings/v8/V8HTMLCustomElement.h: Copied from Source/WebCore/bindings/v8/V8HiddenPropertyName.h.
        (V8HTMLCustomElement):
        (WebCore::V8HTMLCustomElement::toV8):
        (WebCore::HTMLCustomElement::toV8):
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/custom/V8CustomElementConstructorCustom.cpp: Added.
        (WebCore::V8CustomElementConstructor::callAsFunctionCallback):
        * dom/CustomElementConstructor.cpp: Copied from Source/WebCore/bindings/v8/V8HiddenPropertyName.h.
        (WebCore::CustomElementConstructor::create):
        (WebCore::CustomElementConstructor::CustomElementConstructor):
        (WebCore::CustomElementConstructor::~CustomElementConstructor):
        (WebCore::CustomElementConstructor::createElement):
        * dom/CustomElementConstructor.h: Copied from Source/WebCore/bindings/v8/V8HiddenPropertyName.h.
        (CustomElementConstructor):
        (WebCore::CustomElementConstructor::document):
        (WebCore::CustomElementConstructor::tagName):
        (WebCore::CustomElementConstructor::name):
        * dom/CustomElementConstructor.idl: Added.
        * dom/CustomElementRegistry.cpp: Added.
        (WebCore::CustomElementRegistry::CustomElementRegistry):
        (WebCore::CustomElementRegistry::~CustomElementRegistry):
        (WebCore::CustomElementRegistry::constructorOf):
        (WebCore::CustomElementRegistry::isValidName):
        (WebCore::CustomElementRegistry::registerElement):
        (WebCore::CustomElementRegistry::find):
        (WebCore::CustomElementRegistry::createElement):
        (WebCore::CustomElementRegistry::document):
        * dom/CustomElementRegistry.h: Added.
        (CustomElementRegistry):
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::registerElement):
        (WebCore::Document::registry):
        * dom/Document.h:
        (Document):
        * dom/make_names.pl:
        (printWrapperFactoryCppFile):
        * html/HTMLDocument.idl:

2013-02-24  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Timeline] Shrink CPU bars to make it easier to see frame information popup.
        https://bugs.webkit.org/show_bug.cgi?id=110561

        Reviewed by Pavel Feldman.

        Area that causes frame information popup is overly "shaded" by CPU bars.

        * inspector/front-end/timelinePanel.css:
        (.timeline-cpu-bars .timeline-graph-bar): Reduce height and opacity.

2013-02-24  Andreas Kling  <akling@apple.com>

        Reduce include graph of JSDOMBinding.h
        <http://webkit.org/b/110709>

        Reviewed by Antti Koivisto.

        Move WebCore::root(Foo*) to the custom JSFooCustom.h headers.
        This reduces the number of headers pulled in by JSDOMBinding.h.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSRuleCustom.h: Added.
        (WebCore::root):
        * bindings/js/JSCSSRuleListCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.h:
        (WebCore::root):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSMediaListCustom.h: Added.
        (WebCore::root):
        * bindings/js/JSMutationObserverCustom.cpp:
        * bindings/js/JSNodeCustom.h:
        (WebCore::root):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        * bindings/js/JSStyleSheetCustom.h: Added.
        (WebCore::root):
        * bindings/js/JSTextTrackCustom.h:
        * bindings/js/JSTextTrackListCustom.cpp:
        * bindings/js/JSXPathResultCustom.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (Generate):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (AddIncludesForType):
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/MediaList.idl:
        * css/StyleSheet.idl:
        * editing/mac/EditorMac.mm:

2013-02-23  Alexey Proskuryakov  <ap@apple.com>

        ResourceRequestBase unnecessarily updates when nothing changes
        https://bugs.webkit.org/show_bug.cgi?id=110665

        Reviewed by Dan Bernstein.

        Don't mark platform data for update if nothing really changed. This avoids ever doing
        doUpdatePlatformRequest() in NetworkProcess during normal browsing for me, which is
        good for performance.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::removeCredentials):
        (WebCore::ResourceRequestBase::setCachePolicy):
        (WebCore::ResourceRequestBase::setTimeoutInterval):
        (WebCore::ResourceRequestBase::setFirstPartyForCookies):
        (WebCore::ResourceRequestBase::setHTTPMethod):
        (WebCore::ResourceRequestBase::clearHTTPAuthorization):
        (WebCore::ResourceRequestBase::setAllowCookies):
        (WebCore::ResourceRequestBase::setPriority):

2013-02-23  Philip Rogers  <pdr@google.com>

        Prevent crash in animated transform lists
        https://bugs.webkit.org/show_bug.cgi?id=110704

        Reviewed by Abhishek Arya.

        This change prevents accessing values off the end of toAtEndOfDuration by adding a check
        for this case. Similar checks were added in r116458 but the author failed to catch this
        case. WK110706 has been filed to handle this case in general.

        This change also makes a trivial change that marks effectiveFrom as const.

        Test: svg/animations/animateTransform-list-crash.html

        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):

2013-02-23  Dimitri Glazkov  <dglazkov@chromium.org>

        SelectorChecker should not know about SelectorCheckerFastPath.
        https://bugs.webkit.org/show_bug.cgi?id=110663

        Both SelectorChecker and it's speedy cousin unfortunately include each other.
        Luckily, the particular way in which SelectorQuery uses SelectorChecker yields
        to a fairly simple decoupling. Now only the cousin knows of SelectorChecker.

        Reviewed by Antti Koivisto.

        No new functionality, covered by existing tests.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matches): Removed.
        * css/SelectorChecker.h:
        (SelectorChecker): Updated the decls to remove fast-path flag.
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches): Added a helper just for SelectorQuery.
        (WebCore::SelectorDataList::matches): Changed the callsite to use new helper.
        (WebCore::SelectorDataList::execute): Ditto.
        * dom/SelectorQuery.h:
        (SelectorDataList): Updated decls.

2013-02-23  Eric Carlson  <eric.carlson@apple.com>

        [Mac] user preference caption style applied incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=110707
        <rdar://problem/13281096>

        Reviewed by Maciej Stachowiak.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::textTrackContainerElementShadowPseudoId): New
            static function so the pseudo ID is available.
        (WebCore::MediaControlTextTrackContainerElement::shadowPseudoId): Call textTrackContainerElementShadowPseudoId.
        * html/shadow/MediaControlElements.h:

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::captionsStyleSheetOverride): Style the text track container
            element for cue color, edge style, and font name.

2013-02-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Generate xxxAttrGetterCallback()
        https://bugs.webkit.org/show_bug.cgi?id=110676

        Reviewed by Adam Barth.

        This is one of steps to insert TRACE_EVENT_STATE() macros
        into DOM bindings. This patch introduces an indirection
        function for xxxAttrGetter(), like this:

        // For non-custom getters
        Handle<Value> xxxAttrGetterCallback(...) {
          return xxxAttrGetter(...);
        }

        // For custom getters.
        Handle<Value> xxxAttrGetterCallback(...) {
          return xxxAttrGetterCustom(...);
        }

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        (GenerateNormalAttrGetterCallback):
        (GenerateNormalAttrGetter):
        (GenerateSingleBatchedAttribute):
        (GenerateNonStandardFunction):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingAttrAttrGetterCallback):
        (TestActiveDOMObjectV8Internal):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetterCallback):
        (WebCore):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::TestEventConstructorV8Internal::attr1AttrGetterCallback):
        (TestEventConstructorV8Internal):
        (WebCore::TestEventConstructorV8Internal::attr2AttrGetterCallback):
        (WebCore):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::TestExceptionV8Internal::nameAttrGetterCallback):
        (TestExceptionV8Internal):
        (WebCore):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticReadOnlyAttrAttrGetterCallback):
        (TestInterfaceV8Internal):
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrGetterCallback):
        (WebCore::TestInterfaceV8Internal::supplementalStr1AttrGetterCallback):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrGetterCallback):
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrGetterCallback):
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrGetterCallback):
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyLongAttrAttrGetterCallback):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::readOnlyStringAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::readOnlyTestObjAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::staticReadOnlyLongAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::staticStringAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::enumAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::shortAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::unsignedShortAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::longAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::longLongAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::unsignedLongLongAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::stringAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::testObjAttrAttrGetter):
        (WebCore::TestObjV8Internal::testObjAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::createAttrGetterCallback):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::reflectedIntegralAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::reflectedUnsignedIntegralAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::reflectedBooleanAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::reflectedCustomIntegralAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::reflectedCustomBooleanAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::attrWithGetterExceptionAttrGetterCallback):
        (WebCore::TestObjV8Internal::attrWithSetterExceptionAttrGetterCallback):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetterCallback):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrGetterCallback):
        (WebCore::TestObjV8Internal::customAttrAttrGetterCallback):
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrGetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrGetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrGetterCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::conditionalAttr1AttrGetterCallback):
        (WebCore::TestObjV8Internal::conditionalAttr2AttrGetterCallback):
        (WebCore::TestObjV8Internal::conditionalAttr3AttrGetterCallback):
        (WebCore::TestObjV8Internal::cachedAttribute1AttrGetterCallback):
        (WebCore::TestObjV8Internal::cachedAttribute2AttrGetterCallback):
        (WebCore::TestObjV8Internal::anyAttributeAttrGetterCallback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr1AttrGetterCallback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeAttr2AttrGetterCallback):
        (WebCore::TestObjV8Internal::enabledPerContextAttr1AttrGetterCallback):
        (WebCore::TestObjV8Internal::enabledPerContextAttr2AttrGetterCallback):
        (WebCore::TestObjV8Internal::floatArrayAttrGetterCallback):
        (WebCore::TestObjV8Internal::doubleArrayAttrGetterCallback):
        (WebCore::TestObjV8Internal::contentDocumentAttrGetterCallback):
        (WebCore::TestObjV8Internal::mutablePointAttrGetterCallback):
        (WebCore::TestObjV8Internal::immutablePointAttrGetterCallback):
        (WebCore::TestObjV8Internal::strawberryAttrGetterCallback):
        (WebCore::TestObjV8Internal::strictFloatAttrGetterCallback):
        (WebCore::TestObjV8Internal::descriptionAttrGetterCallback):
        (WebCore::TestObjV8Internal::idAttrGetterCallback):
        (WebCore::TestObjV8Internal::hashAttrGetterCallback):
        (WebCore::TestObjV8Internal::replaceableAttributeAttrGetterCallback):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::valueAttrGetterCallback):
        (TestSerializedScriptValueInterfaceV8Internal):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::readonlyValueAttrGetterCallback):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrGetterCallback):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::portsAttrGetterCallback):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedReadonlyValueAttrGetterCallback):
        (WebCore):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::unsignedLongLongAttrAttrGetterCallback):
        (TestTypedefsV8Internal):
        (WebCore::TestTypedefsV8Internal::immutableSerializedScriptValueAttrGetterCallback):
        (WebCore::TestTypedefsV8Internal::attrWithGetterExceptionAttrGetterCallback):
        (WebCore::TestTypedefsV8Internal::attrWithSetterExceptionAttrGetterCallback):
        (WebCore::TestTypedefsV8Internal::stringAttrWithGetterExceptionAttrGetterCallback):
        (WebCore::TestTypedefsV8Internal::stringAttrWithSetterExceptionAttrGetterCallback):
        (WebCore):

2013-02-23  Kentaro Hara  <haraken@chromium.org>

        WebCore fails to link in Chromium official build
        https://bugs.webkit.org/show_bug.cgi?id=110701

        Reviewed by Abhishek Arya.

        This is a follow-up fix for r143853. In WebCore.gyp, we need to
        increase the shard of 'webcore_rendering' as well.

        No tests. No change in behavior.

        * WebCore.gyp/WebCore.gyp:

2013-02-23  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r143844.
        http://trac.webkit.org/changeset/143844
        https://bugs.webkit.org/show_bug.cgi?id=110241

        It broke Chromium Mac Release Build

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/WebCoreGTK.gyp: Removed.
        * WebCore.gypi:

2013-02-23  Adam Barth  <abarth@webkit.org>

        WebCore fails to link in Chromium official build
        https://bugs.webkit.org/show_bug.cgi?id=110697

        Reviewed by Eric Seidel.

        Apparently we need to use more shards to work around linker limitations
        on Windows again.

        * WebCore.gyp/WebCore.gyp:

2013-02-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename constructorCallbackCustom() to constructorCustom()
        https://bugs.webkit.org/show_bug.cgi?id=110671

        Reviewed by Adam Barth.

        his is one of steps to insert TRACE_EVENT_STATE() macros
        into DOM bindings.
        See https://bugs.webkit.org/show_bug.cgi?id=110667#c0

        In the new world, "Callback" is used to indicate that it
        is a function called back by V8. Currently "Callback" is
        used for both V8 callbacks, DOM methods and DOM constructors.
        This patch fixes the inconsistency.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateCustomConstructorCallback):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCustom):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCustom):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCustom):
        * bindings/v8/custom/V8MessageChannelCustom.cpp:
        (WebCore::V8MessageChannel::constructorCustom):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCustom):
        * bindings/v8/custom/V8WebKitPointCustom.cpp:
        (WebCore::V8WebKitPoint::constructorCustom):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::constructorCustom):

2013-02-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename xxxCallback() to xxxMethod(), and xxxCallbackCustom() to xxxMethodCustom()
        https://bugs.webkit.org/show_bug.cgi?id=110669

        Reviewed by Adam Barth.

        This is one of steps to insert TRACE_EVENT_STATE()
        macros into DOM bindings.
        See https://bugs.webkit.org/show_bug.cgi?id=110667#c0

        In the new world, "Callback" is used to refer that it
        is a function called back by V8. Currently "Callback" is
        used for both V8 callbacks, DOM methods and DOM constructors.
        This patch fixes the inconsistency.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateOverloadedFunctionCallback):
        (GenerateFunctionCallback):
        (GenerateNonStandardFunction):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooMethod):
        (WebCore::Float64ArrayV8Internal::setMethod):
        (WebCore):
        (WebCore::ConfigureV8Float64ArrayTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionMethod):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageMethod):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionMethod):
        (WebCore):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::itemMethod):
        (WebCore::TestEventTargetV8Internal::addEventListenerMethod):
        (WebCore::TestEventTargetV8Internal::removeEventListenerMethod):
        (WebCore::TestEventTargetV8Internal::dispatchEventMethod):
        (WebCore):
        (WebCore::ConfigureV8TestEventTargetTemplate):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalMethod1Method):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Method):
        (WebCore::TestInterfaceV8Internal::supplementalMethod3Method):
        (WebCore::TestInterfaceV8Internal::supplementalMethod4Method):
        (WebCore):
        (WebCore::ConfigureV8TestInterfaceTemplate):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::TestMediaQueryListListenerV8Internal::methodMethod):
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::voidMethodMethod):
        (WebCore::TestObjV8Internal::voidMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::longMethodMethod):
        (WebCore::TestObjV8Internal::longMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::objMethodMethod):
        (WebCore::TestObjV8Internal::objMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::methodWithSequenceArgMethod):
        (WebCore::TestObjV8Internal::methodReturningSequenceMethod):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsMethod):
        (WebCore::TestObjV8Internal::serializedValueMethod):
        (WebCore::TestObjV8Internal::optionsObjectMethod):
        (WebCore::TestObjV8Internal::methodWithExceptionMethod):
        (WebCore::TestObjV8Internal::customMethodMethod):
        (WebCore::TestObjV8Internal::customMethodWithArgsMethod):
        (WebCore::TestObjV8Internal::addEventListenerMethod):
        (WebCore::TestObjV8Internal::removeEventListenerMethod):
        (WebCore::TestObjV8Internal::withScriptStateVoidMethod):
        (WebCore::TestObjV8Internal::withScriptStateObjMethod):
        (WebCore::TestObjV8Internal::withScriptStateVoidExceptionMethod):
        (WebCore::TestObjV8Internal::withScriptStateObjExceptionMethod):
        (WebCore::TestObjV8Internal::withScriptExecutionContextMethod):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateMethod):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateObjExceptionMethod):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesMethod):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackMethod):
        (WebCore::TestObjV8Internal::methodWithOptionalArgMethod):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndOptionalArgMethod):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndTwoOptionalArgsMethod):
        (WebCore::TestObjV8Internal::methodWithOptionalStringMethod):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsUndefinedMethod):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsNullStringMethod):
        (WebCore::TestObjV8Internal::methodWithCallbackArgMethod):
        (WebCore::TestObjV8Internal::methodWithNonCallbackArgAndCallbackArgMethod):
        (WebCore::TestObjV8Internal::methodWithCallbackAndOptionalArgMethod):
        (WebCore::TestObjV8Internal::conditionalMethod1Method):
        (WebCore::TestObjV8Internal::conditionalMethod2Method):
        (WebCore::TestObjV8Internal::conditionalMethod3Method):
        (WebCore::TestObjV8Internal::overloadedMethod1Method):
        (WebCore::TestObjV8Internal::overloadedMethod2Method):
        (WebCore::TestObjV8Internal::overloadedMethod3Method):
        (WebCore::TestObjV8Internal::overloadedMethod4Method):
        (WebCore::TestObjV8Internal::overloadedMethod5Method):
        (WebCore::TestObjV8Internal::overloadedMethod6Method):
        (WebCore::TestObjV8Internal::overloadedMethod7Method):
        (WebCore::TestObjV8Internal::overloadedMethod8Method):
        (WebCore::TestObjV8Internal::overloadedMethod9Method):
        (WebCore::TestObjV8Internal::overloadedMethod10Method):
        (WebCore::TestObjV8Internal::overloadedMethod11Method):
        (WebCore::TestObjV8Internal::overloadedMethodMethod):
        (WebCore::TestObjV8Internal::classMethodMethod):
        (WebCore::TestObjV8Internal::classMethodWithOptionalMethod):
        (WebCore::TestObjV8Internal::classMethod2Method):
        (WebCore::TestObjV8Internal::overloadedMethod12Method):
        (WebCore::TestObjV8Internal::classMethodWithClampMethod):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod1Method):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod2Method):
        (WebCore::TestObjV8Internal::enabledPerContextMethod1Method):
        (WebCore::TestObjV8Internal::enabledPerContextMethod2Method):
        (WebCore::TestObjV8Internal::stringArrayFunctionMethod):
        (WebCore::TestObjV8Internal::domStringListFunctionMethod):
        (WebCore::TestObjV8Internal::getSVGDocumentMethod):
        (WebCore::TestObjV8Internal::convert1Method):
        (WebCore::TestObjV8Internal::convert2Method):
        (WebCore::TestObjV8Internal::convert4Method):
        (WebCore::TestObjV8Internal::convert5Method):
        (WebCore::TestObjV8Internal::mutablePointFunctionMethod):
        (WebCore::TestObjV8Internal::immutablePointFunctionMethod):
        (WebCore::TestObjV8Internal::orangeMethod):
        (WebCore::TestObjV8Internal::strictFunctionMethod):
        (WebCore::TestObjV8Internal::variadicStringMethodMethod):
        (WebCore::TestObjV8Internal::variadicDoubleMethodMethod):
        (WebCore::TestObjV8Internal::variadicNodeMethodMethod):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::acceptTransferListMethod):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::multiTransferListMethod):
        (WebCore):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::funcMethod):
        (WebCore::TestTypedefsV8Internal::multiTransferListMethod):
        (WebCore::TestTypedefsV8Internal::setShadowMethod):
        (WebCore::TestTypedefsV8Internal::methodWithSequenceArgMethod):
        (WebCore::TestTypedefsV8Internal::nullableArrayArgMethod):
        (WebCore::TestTypedefsV8Internal::funcWithClampMethod):
        (WebCore::TestTypedefsV8Internal::immutablePointFunctionMethod):
        (WebCore::TestTypedefsV8Internal::stringArrayFunctionMethod):
        (WebCore::TestTypedefsV8Internal::stringArrayFunction2Method):
        (WebCore::TestTypedefsV8Internal::methodWithExceptionMethod):
        (WebCore):
        (WebCore::ConfigureV8TestTypedefsTemplate):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::clearDataMethodCustom):
        (WebCore::V8Clipboard::setDragImageMethodCustom):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceMethodCustom):
        (WebCore::V8Console::assertMethodCustom):
        (WebCore::V8Console::profileMethodCustom):
        (WebCore::V8Console::profileEndMethodCustom):
        * bindings/v8/custom/V8CryptoCustom.cpp:
        (WebCore::V8Crypto::getRandomValuesMethodCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::appendMethodCustom):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerMethodCustom):
        (WebCore::V8DOMWindow::removeEventListenerMethodCustom):
        (WebCore::V8DOMWindow::postMessageMethodCustom):
        (WebCore::V8DOMWindow::toStringMethodCustom):
        (WebCore::V8DOMWindow::releaseEventsMethodCustom):
        (WebCore::V8DOMWindow::captureEventsMethodCustom):
        (WebCore::V8DOMWindow::showModalDialogMethodCustom):
        (WebCore::V8DOMWindow::openMethodCustom):
        (WebCore::V8DOMWindow::setTimeoutMethodCustom):
        (WebCore::V8DOMWindow::setIntervalMethodCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::getInt8MethodCustom):
        (WebCore::V8DataView::getUint8MethodCustom):
        (WebCore::V8DataView::setInt8MethodCustom):
        (WebCore::V8DataView::setUint8MethodCustom):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::V8DedicatedWorkerContext::postMessageMethodCustom):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventMethodCustom):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventMethodCustom):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateMethodCustom):
        (WebCore::V8Document::createTouchListMethodCustom):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::V8Geolocation::getCurrentPositionMethodCustom):
        (WebCore::V8Geolocation::watchPositionMethodCustom):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::V8HTMLAllCollection::itemMethodCustom):
        (WebCore::V8HTMLAllCollection::namedItemMethodCustom):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextMethodCustom):
        (WebCore::V8HTMLCanvasElement::toDataURLMethodCustom):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::writeMethodCustom):
        (WebCore::V8HTMLDocument::writelnMethodCustom):
        (WebCore::V8HTMLDocument::openMethodCustom):
        * bindings/v8/custom/V8HTMLFormControlsCollectionCustom.cpp:
        (WebCore::V8HTMLFormControlsCollection::namedItemMethodCustom):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorMethodCustom):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::V8HTMLInputElement::setSelectionRangeMethodCustom):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::namedItemMethodCustom):
        (WebCore::V8HTMLOptionsCollection::removeMethodCustom):
        (WebCore::V8HTMLOptionsCollection::addMethodCustom):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::V8HTMLSelectElement::removeMethodCustom):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateMethodCustom):
        (WebCore::V8History::replaceStateMethodCustom):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectedObjectMethodCustom):
        (WebCore::V8InjectedScriptHost::internalConstructorNameMethodCustom):
        (WebCore::V8InjectedScriptHost::isHTMLAllCollectionMethodCustom):
        (WebCore::V8InjectedScriptHost::typeMethodCustom):
        (WebCore::V8InjectedScriptHost::functionDetailsMethodCustom):
        (WebCore::V8InjectedScriptHost::getInternalPropertiesMethodCustom):
        (WebCore::V8InjectedScriptHost::getEventListenersMethodCustom):
        (WebCore::V8InjectedScriptHost::inspectMethodCustom):
        (WebCore::V8InjectedScriptHost::databaseIdMethodCustom):
        (WebCore::V8InjectedScriptHost::storageIdMethodCustom):
        (WebCore::V8InjectedScriptHost::evaluateMethodCustom):
        (WebCore::V8InjectedScriptHost::setFunctionVariableValueMethodCustom):
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::platformMethodCustom):
        (WebCore::V8InspectorFrontendHost::portMethodCustom):
        (WebCore::V8InspectorFrontendHost::showContextMenuMethodCustom):
        (WebCore::V8InspectorFrontendHost::recordActionTakenMethodCustom):
        (WebCore::V8InspectorFrontendHost::recordPanelShownMethodCustom):
        (WebCore::V8InspectorFrontendHost::recordSettingChangedMethodCustom):
        * bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp:
        (WebCore::V8JavaScriptCallFrame::evaluateMethodCustom):
        (WebCore::V8JavaScriptCallFrame::restartMethodCustom):
        (WebCore::V8JavaScriptCallFrame::setVariableValueMethodCustom):
        (WebCore::V8JavaScriptCallFrame::scopeTypeMethodCustom):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):
        (WebCore::V8Location::reloadMethodCustom):
        (WebCore::V8Location::replaceMethodCustom):
        (WebCore::V8Location::assignMethodCustom):
        (WebCore::V8Location::valueOfMethodCustom):
        (WebCore::V8Location::toStringMethodCustom):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventMethodCustom):
        (WebCore::V8MessageEvent::webkitInitMessageEventMethodCustom):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::V8MessagePort::postMessageMethodCustom):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::insertBeforeMethodCustom):
        (WebCore::V8Node::replaceChildMethodCustom):
        (WebCore::V8Node::removeChildMethodCustom):
        (WebCore::V8Node::appendChildMethodCustom):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::requestPermissionMethodCustom):
        * bindings/v8/custom/V8NotificationCustom.cpp:
        (WebCore::V8Notification::requestPermissionMethodCustom):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::V8SQLResultSetRowList::itemMethodCustom):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlMethodCustom):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlMethodCustom):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::convertToSpecifiedUnitsMethodCustom):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getAttachedShadersMethodCustom):
        (WebCore::V8WebGLRenderingContext::getBufferParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getExtensionMethodCustom):
        (WebCore::V8WebGLRenderingContext::getFramebufferAttachmentParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getProgramParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getRenderbufferParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getShaderParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getSupportedExtensionsMethodCustom):
        (WebCore::V8WebGLRenderingContext::getTexParameterMethodCustom):
        (WebCore::V8WebGLRenderingContext::getUniformMethodCustom):
        (WebCore::V8WebGLRenderingContext::getVertexAttribMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniform1fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniform1ivMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniform2fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniform2ivMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniform3fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniform3ivMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniform4fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniform4ivMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniformMatrix2fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniformMatrix3fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::uniformMatrix4fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::vertexAttrib1fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::vertexAttrib2fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::vertexAttrib3fvMethodCustom):
        (WebCore::V8WebGLRenderingContext::vertexAttrib4fvMethodCustom):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::importScriptsMethodCustom):
        (WebCore::V8WorkerContext::setTimeoutMethodCustom):
        (WebCore::V8WorkerContext::setIntervalMethodCustom):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::V8Worker::postMessageMethodCustom):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::openMethodCustom):
        (WebCore::V8XMLHttpRequest::sendMethodCustom):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::V8XSLTProcessor::setParameterMethodCustom):
        (WebCore::V8XSLTProcessor::getParameterMethodCustom):
        (WebCore::V8XSLTProcessor::removeParameterMethodCustom):

2013-02-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Scrollbar style resolution arguments should not passed via statics.
        https://bugs.webkit.org/show_bug.cgi?id=110690

        Use PseudoStyleRequest to pass scrollbar params for style resolve.

        Reviewed by Eric Seidel.

        No change in functionality, covered by existing tests.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match): Changed to use context params, rather than statics.
        (WebCore::SelectorChecker::checkOne): Changed to pass context to checkScrollbarPseudoClass.
        (WebCore::SelectorChecker::checkScrollbarPseudoClass): Changed to use context params, rather than statics.
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext): Added scrollbar style args.
        (SelectorCheckingContext): Ditto.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList): Changed to use PseudoStyleRequest.
        (WebCore::StyleResolver::State::initForStyleResolve): Ditto.
        (WebCore::StyleResolver::pseudoStyleForElement): Ditto.
        (WebCore::StyleResolver::ruleMatches): Ditto and added stuffing scrollbar style resolve args into SelectorCheckingContext.
        * css/StyleResolver.h:
        (PseudoStyleRequest): Added.
        (State): Changed to hold and use PseudoStyleRequest instead of just PseudoId
        * dom/Element.cpp:
        (WebCore::Element::pseudoStyleCacheIsInvalid): Changed to use PseudoStyleRequest.
        * page/FrameView.cpp: Ditto.
        (WebCore::FrameView::updateScrollCorner): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollCornerStyle): Ditto.
        (WebCore::RenderLayer::updateResizerStyle): Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor): Ditto.
        (WebCore::RenderObject::selectionColor): Ditto.
        (WebCore::firstLineStyleForCachedUncachedType): Ditto.
        (WebCore::RenderObject::getCachedPseudoStyle): Ditto.
        (WebCore::RenderObject::getUncachedPseudoStyle): Ditto.
        * rendering/RenderObject.h:
        (RenderObject): Ditto.
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle): Ditto.
        * rendering/RenderScrollbar.h:
        (RenderScrollbar): Removed static members that are now obsolete.

2013-02-23  Adam Barth  <abarth@webkit.org>

        Threaded HTML parser should pass fast/parser/parser-yield-timing.html
        https://bugs.webkit.org/show_bug.cgi?id=110647

        Reviewed by Eric Seidel.

        Previously, the threaded HTML parser would run for an arbitrary amount
        of time without yielding after speculation succeeded. This might be the
        cause of the good DOMContentLoaded numbers.

        Note: This patch also demonstrates that the ParseHTML_max numbers
        aren't correct currently because they're measuring the interior of this
        loop instead of all the time spent in the loop. We should move the
        instrumentation in a followup patch.

         * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield):
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):
        (WebCore):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        * html/parser/HTMLParserScheduler.cpp:

2013-02-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Allow sharing the WebCore include list with the Chromium build
        https://bugs.webkit.org/show_bug.cgi?id=110241

        Reviewed by Dirk Pranke.

        * WebCore.gyp/WebCore.gyp: Moved shared include directories to
        WebCore.gypi.
        * WebCore.gyp/WebCoreGTK.gyp: Added. A skeleton gyp file for WebCoreGTK+.
        * WebCore.gypi: Added shared include directories.

2013-02-23  Andreas Kling  <akling@apple.com>

        StyledElement: Tweak signature of collectStyleForPresentationAttribute().
        <http://webkit.org/b/110687>

        Reviewed by Antti Koivisto.

        Out with the old:
            collectStyleForPresentationAttribute(const Attribute&, StylePropertySet*)

        In with the new:
            collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStylePropertySet*)

        This is primarily about switching to using MutableStylePropertySet* in preparation for
        removing mutating functions from the StylePropertySet base class.

2013-02-23  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Refactor GLPlatformSurface.
        https://bugs.webkit.org/show_bug.cgi?id=110616

        Reviewed by Kenneth Rohde Christiansen.

        Covered by existing WebGL tests.
 
        With recent changes, there is a clear separation between 
        transport surface and off-screen surface. PlatformSurface 
        has the logic to render content to transport surface. 
        We currently rely on EXT_framebuffer_blit for this. This 
        extension is not exposed on GLES2.0. PlatformSurface was 
        supposed to be an abstraction layer without any knowledge 
        of the type of surface. This patch addresses the issues 
        in PlatformSurface class. We use shaders to draw texture 
        content to the surface. Any transport surface related 
        code in PlatformSurface is moved to GLTransportSurface class.

        * PlatformEfl.cmake:
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::didResizeCanvas):
        * platform/graphics/surfaces/GLTransportSurface.cpp: Added.
        (WebCore):
        (WebCore::GLTransportSurface::GLTransportSurface):
        (WebCore::GLTransportSurface::~GLTransportSurface):
        (WebCore::GLTransportSurface::updateContents):
        (WebCore::GLTransportSurface::setGeometry):
        (WebCore::GLTransportSurface::destroy):
        (WebCore::GLTransportSurface::draw):
        (WebCore::GLTransportSurface::bindArrayBuffer):
        (WebCore::GLTransportSurface::updateTransformationMatrix):
        (WebCore::GLTransportSurface::initializeShaderProgram):
        * platform/graphics/surfaces/GLTransportSurface.h:
        (WebCore):
        (GLTransportSurface):
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLWindowTransportSurface::EGLWindowTransportSurface):
        (WebCore::EGLWindowTransportSurface::destroy):
        (WebCore::EGLWindowTransportSurface::setGeometry):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXTransportSurface::setGeometry):
        (WebCore::GLXTransportSurface::destroy):
        (WebCore::GLXOffScreenSurface::freeResources):
        * platform/graphics/surfaces/glx/GLXSurface.h:

2013-02-23  Hajime Morrita  <morrita@google.com>

        ShadowRoot needs guardRef() and guardDeref()
        https://bugs.webkit.org/show_bug.cgi?id=109777

        Reviewed by Dimitri Glazkov.

        This change moves m_guardRefCount from Document to TreeScope,
        which allows ShadowRoot to be guarded by guardRef() mechanism as
        Document. After r137524, Node referes TreeScope instead of
        Document. This is natural consequence of the change: It no longer
        makes sense to guardRef() Document pointer from Node.

        Detail:

        - Document::m_guardRefCount and related funcdtions are moved to TreeScope
        - Document::removedLastRef is factored out into TreeScope::removedLastRefToScope(),
          TreeScope::dispose() and Docuent::dispose(). ShadowRoot also got its own dispose() implementation.
        - Moved guardRef() and guardDeref() calls to TreeScope and Node.
          Note that there are two "guarded" TreeScope references. One is
          Node::m_treeScope and another is TreeScope::m_parentTreeScope.
          The guarded-ref management is now encapsulated in these two classes.

        No new tests. Covered by existing tests.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::dispose): Extracted from removedLastRef()
        * dom/Document.h:
        (WebCore::Node::isTreeScope):
        (WebCore::Node::Node):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::DocumentFragment): Remove ASSERT() and move it to ...
        (WebCore::DocumentFragment::create): ... here, to allow NULL document from ShadowRoot.
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::removedLastRef):
        * dom/Node.h:
        (WebCore::Node::setTreeScope):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot): Passed NULL document to superclass. This aligns what Document is doing.
        (WebCore::ShadowRoot::dispose): Added.
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/TreeScope.cpp:
        (SameSizeAsTreeScope):
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::~TreeScope):
        (WebCore::TreeScope::dispose): Added.
        (WebCore::TreeScope::setParentTreeScope):
        (WebCore::TreeScope::deletionHasBegun):
        (WebCore::TreeScope::beginDeletion):
        (WebCore::TreeScope::refCount): Added.
        * dom/TreeScope.h: Turned m_rootNode to Node* from ContainerNode* for Node::isTreeScope to be inlined.
        (WebCore::TreeScope::guardRef): Pulled up from Document.
        (WebCore::TreeScope::guardDeref): Ditto.
        (WebCore::TreeScope::hasGuardRefCount): Added to hide m_guardRefCount.
        (WebCore::TreeScope::deletionHasBegun): Added.
        (WebCore::TreeScope::beginDeletion): Added.
        (WebCore::TreeScope::removedLastRefToScope): Pulled up from Document.
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):

2013-02-23  Alexey Proskuryakov  <ap@apple.com>

        Don't include ResourceHandle.h in ResourceLoaderOptions.h
        https://bugs.webkit.org/show_bug.cgi?id=110662

        Reviewed by Tim Horton.

        * loader/ResourceLoaderOptions.h: Include ResourceHandleTypes.h instead.

2013-02-23  Jason Anderssen  <janderssen@gmail.com>

        Move setAutofilled from TestRunner to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=110521

        Reviewed by Benjamin Poulain.

        * testing/Internals.cpp:
        (WebCore):
        (WebCore::Internals::setAutofilled):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-02-22  Andreas Kling  <akling@apple.com>

        Attr: Simplify modification callbacks.
        <http://webkit.org/b/110598>

        Reviewed by Antti Koivisto.

        Instead of Attr being a friend of Element and grabbing at various internal storage and callbacks,
        let Attr simply call Element::setAttribute() when its value is changed, and do all that business
        from Element.

        * dom/Element.h:
        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):

            Call Attr::recreateTextChildAfterAttributeValueChanged() after modifying an attribute value instead
            of doing the modification through the Attr node.

        * dom/Attr.h:
        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        (WebCore::Attr::childrenChanged):

            Added an m_inChildrenChanged flag so we can prevent infinite callback recursion in childrenChanged().

        (WebCore::Attr::setValue):

            Call Element::setAttribute() instead of modifying the attribute storage directly.

        (WebCore::Attr::recreateTextChildAfterAttributeValueChanged):

            Factored out the "remove all children / create a new text child with attribute value" logic into
            a separate function.

2013-02-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Use EINA_LOG instead of fprintf 
        https://bugs.webkit.org/show_bug.cgi?id=110313

        Reviewed by Laszlo Gombos.

        Replace fprintf with EINA_LOG.

        * platform/efl/NetworkInfoProviderEfl.cpp:
        (WebCore::NetworkInfoProviderEfl::startUpdating):
        * platform/graphics/efl/CairoUtilitiesEfl.cpp:
        (WebCore::evasObjectFromCairoImageSurface):

2013-02-22  Tony Gentilcore  <tonyg@chromium.org>

        Threaded HTML parser fails resources/plain-text-unsafe.dat
        https://bugs.webkit.org/show_bug.cgi?id=110538

        Reviewed by Eric Seidel.

        With this patch, the background HTML parser passes all tests in plain-text-unsafe.dat.

        No new tests because covered by existing tests.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::tokenExitsSVG):
        (WebCore):
        (WebCore::tokenExitsMath):
        (WebCore::BackgroundHTMLParser::simulateTreeBuilder):

2013-02-22  Tony Gentilcore  <tonyg@chromium.org>

        Correct InspectorInstrumentation for background HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=110678

        Reviewed by Adam Barth.

        resumeParsingAfterScriptExecution potentially calls processParsedChunkFromBackgroundParser multiple times
        without yielding. So it is not correct to count each of those as a separate ParseHTML event.

        This patch moves the instrumentation outside of the loop.

        No new tests because no new functionality.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):

2013-02-22  Aaron Colwell  <acolwell@chromium.org>

        Factor MediaSource methods out of MediaPlayer & MediaPlayerPrivate and into a new MediaSourcePrivate interface.
        https://bugs.webkit.org/show_bug.cgi?id=109857

        Reviewed by Adam Barth.

        This is a simple refactor that moves MediaSource related methods out of MediaPlayer & MediaPlayerPrivate
        so that the MediaSource implementation can be updated without further polluting these interfaces.
        MediaSourcePrivate is the new WebCore interface that ports must implement to support the MediaSource API.

        No new tests. No user visible behavior has changed.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::MediaSource):
        (WebCore::MediaSource::duration):
        (WebCore::MediaSource::setDuration):
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::removeSourceBuffer):
        (WebCore::MediaSource::setReadyState):
        (WebCore::MediaSource::endOfStream):
        (WebCore::MediaSource::buffered):
        (WebCore::MediaSource::append):
        (WebCore::MediaSource::abort):
        (WebCore::MediaSource::setTimestampOffset):
        (WebCore::MediaSource::setPrivateAndOpen):
        (WebCore):
        (WebCore::MediaSource::hasPendingActivity):
        (WebCore::MediaSource::stop):
        * Modules/mediasource/MediaSource.h:
        (MediaSource):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        (WebCore::HTMLMediaElement::reportMemoryUsage):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * platform/graphics/MediaPlayer.cpp:
        (NullMediaPlayerPrivate):
        (WebCore::NullMediaPlayerPrivate::load):
        (WebCore::MediaPlayer::load):
        (WebCore):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        * platform/graphics/MediaPlayer.h:
        (WebCore):
        (MediaPlayerClient):
        (MediaPlayer):
        * platform/graphics/MediaPlayerPrivate.h:
        (MediaPlayerPrivateInterface):
        * platform/graphics/MediaSourcePrivate.h: Added.
        (WebCore):
        (MediaSourcePrivate): Contains the MediaSource methods extracted from MediaPlayer.
        (WebCore::MediaSourcePrivate::MediaSourcePrivate):
        (WebCore::MediaSourcePrivate::~MediaSourcePrivate):

2013-02-22  Beth Dakin  <bdakin@apple.com>

        RenderLayer::scrollTo() should call FrameLoaderClient::didChangeScrollOffset()
        https://bugs.webkit.org/show_bug.cgi?id=110673
        -and corresponding-
        <rdar://problem/13258596>

        Reviewed by Sam Weinig.

        FrameLoaderClient::didChangeScrollOffset() doesn't get called for web pages that
        have overflow on the body. We can easily address this by calling it at the 
        end of RenderLayer::scrollTo().

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

2013-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit can erroneously strip font-size CSS property from font element with size attribute
        https://bugs.webkit.org/show_bug.cgi?id=110657

        Reviewed by Justin Garcia.

        The bug was caused by ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline
        erroneously removing style attributes even on an element such as font that implicitly adds
        editing style.

        Fixed the bug by removing these elements or attributes when they conflict with the inline
        style of the element. This is always safe because implicit style of an element is always
        overridden by that of inline style.

        Note that when the font element becomes "empty" (i.e. doesn't have any attributes), then
        we also want to delete this font element as it doesn't contribute anything to the style.

        Test: editing/pasteboard/insert-u-with-text-decoration-none.html
              editing/pasteboard/insert-font-with-size-and-css.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::isEmptyFontTag): Added ShouldStyleAttributeBeEmpty as an argument. This will
        allow removeRedundantStylesAndKeepStyleSpanInline to ignore style attribute when we know
        the attribute can be removed.

        * editing/ApplyStyleCommand.h: Expose isEmptyFontTag and ShouldStyleAttributeBeEmpty.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::InsertedNodes::didReplaceNode): Added.
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline): See above.
        * editing/ReplaceSelectionCommand.h:
        (InsertedNodes): Added a declaration of didReplaceNode.

2013-02-22  Laszlo Gombos  <l.gombos@samsung.com>

        Remove unused make variable from DerivedSources.make
        https://bugs.webkit.org/show_bug.cgi?id=110306

        Reviewed by Alexey Proskuryakov.

        r107026 removed the last piece of logic that was guarded with
        ENABLE_DASHBOARD_SUPPORT, so now it can be removed from
        DerivedSources.make. 

        Also combined the way ENABLE_ORIENTATION_EVENTS is set to 0
        to make it more readable.

        No new tests, no new functionality.

        * DerivedSources.make:

2013-02-22  Dimitri Glazkov  <dglazkov@chromium.org>

        REGRESSION(r130089): Scrollbar thumb no longer re-rendered on hover
        https://bugs.webkit.org/show_bug.cgi?id=109230

        In r130089, I accidentally removed the extra check that made scrollbar
        parts styles sad. I put it back and made them happy.

        Reviewed by Eric Seidel.

        Test: fast/css/pseudo-element-selector-scrollbar-hover.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match): Added the check back.

2013-02-22  Tim Horton  <timothy_horton@apple.com>

        [WK2] The root and page overlay layers should be the size of the view, not the content
        https://bugs.webkit.org/show_bug.cgi?id=110660
        <rdar://problem/13096456>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:

2013-02-22  Anders Carlsson  <andersca@apple.com>

        pluginLoadStrategy should take a WKDictionaryRef for extensibility
        https://bugs.webkit.org/show_bug.cgi?id=110656
        <rdar://problem/13265303>

        Reviewed by Jessie Berlin.

        Export a symbol needed by WebKit2.

        * WebCore.exp.in:

2013-02-22  Levi Weintraub  <leviw@chromium.org>

        Add descriptive names for different addMidpoint use cases
        https://bugs.webkit.org/show_bug.cgi?id=110644

        Reviewed by Ryosuke Niwa.

        Midpoints are used to delineate ranges where we don't add line boxes for contents (collapsed spaces),
        and to explicitly split a RenderText into multiple text runs so that text paragraph seperators get
        their own line boxes. This patch encapsulates the different cases where midpoints are added to
        lineMidpointState into 4 helper functions to make it clearer what's going on in each case.

        No new tests. No change in functionality.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::deprecatedAddMidpoint): Original function simply adds a midpoint to the lineMidpointState.
        Renaming to deprecated to discourage callers.
        (WebCore::startIgnoringSpaces): Adds a midpoint to start collapsing subsequent spaces. Asserts that
        we have an even number of midpoints.
        (WebCore::stopIgnoringSpaces): Adds the corresponding midpoint from startIgnoringSpaces and asserts
        that it's an odd number.
        (WebCore::ensureLineBoxInsideIgnoredSpaces): When ignoring spaces and we come across a RenderInline
        that needs a line box, this function adds a pair of midpoints which ensures we'll later add a line
        box for it.
        (WebCore::ensureCharacterGetsLineBox): Adds a pair of midpoints in a text renderer to mark that
        the current character needs its own line box. This is used by svg for absolutely positioned
        characters, or for text paragraph seperators.

2013-02-22  Justin Schuh  <jschuh@chromium.org>

        RenderArena masking has low entropy
        https://bugs.webkit.org/show_bug.cgi?id=110394

        Reviewed by Oliver Hunt.

        No new tests. This is a hardening measure.

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

2013-02-22  Min Qin  <qinmin@chromium.org>

        Fix the overlay play button position on android
        https://bugs.webkit.org/show_bug.cgi?id=110638

        Reviewed by Ojan Vafai.

        Because we are using flex box, specifying the height is not necessary.
        Setting height to 100% will make the enclosure go outside the control panel.
        There are no media layout test expecations for android, will do that in another patch.

        * css/mediaControlsChromiumAndroid.css:
        (video::-webkit-media-controls-overlay-enclosure):

2013-02-22  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix. Added missing #if PLATFORM(CHROMIUM).

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2013-02-22  Kentaro Hara  <haraken@chromium.org>

        Document::styleRecalc() and FrameView::layout() should be traced
        https://bugs.webkit.org/show_bug.cgi?id=110646

        Reviewed by Ojan Vafai.

        Document::styleRecalc() and FrameView::layout() are key factors
        for web page rendering performance. We should add TRACE_EVENT()
        macros to these functions.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2013-02-22  Eric Seidel  <eric@webkit.org>

        Teach the html5lib tests how to test the threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=110643

        Reviewed by Adam Barth.

        This adds a way to force data: url parsing to go through
        the threaded parser, to enable us to test the threaded parser
        using the html5lib test harness.

        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * page/Settings.in:

2013-02-21  Ojan Vafai  <ojan@chromium.org>

        Increase the max preferred width of tables to 1000000
        https://bugs.webkit.org/show_bug.cgi?id=110545

        Reviewed by Emil A Eklund.

        Test: fast/table/large-shrink-wrapped-width.html

        The old limit of 15000 was picked arbitrarily to avoid overflow.
        No need to pick such a small number.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computeInstrinsicLogicalWidths):
        As best I can tell, this code is just wrong. Removing this makes the
        new test pass and doesn't cause any test failure. While we have many
        tests that hit this codepath, this code would only
        show a difference in the cases where the available container width is
        greater then 15000, and I don't think we have any tests that hit that case
        other than this new one.
        * rendering/TableLayout.h:

2013-02-22  Adam Barth  <abarth@webkit.org>

        Threaded HTML parser should pass fast/parser/iframe-sets-parent-to-javascript-url.html
        https://bugs.webkit.org/show_bug.cgi?id=110637

        Reviewed by Eric Seidel.

        With the main thread parser, we always parse the first chunk of content
        returned as the result of evaluating a JavaScript URL synchronously. In
        particular, if the first chunk has an inline script, we'll execute it
        synchronously.

        Previous to this patch, the threaded parser would always parse this
        content asynchronously. It's conceivable that there could be some
        content relying on the synchronous behavior, so this patch introduces
        the notion of "pinning" a parser to the main thread and uses that
        concept to force the result of JavaScript URLs to be parsed on the main
        thread (which is probably desirable anyway because they're likely to be
        quite short).

        This patch fixes fast/parser/iframe-sets-parent-to-javascript-url.html
        and fast/dom/javascript-url-crash-function.html with the threaded
        parser with --enable-threaded-html-parser.

        * dom/DocumentParser.h:
        (WebCore::DocumentParser::pinToMainThread):
        (DocumentParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore):
        (WebCore::HTMLDocumentParser::pinToMainThread):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::shouldUseThreading):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):

2013-02-22  Joe Mason  <jmason@rim.com>

        [BlackBerry] Reread cookies when retrying a request with new auth credentials
        https://bugs.webkit.org/show_bug.cgi?id=110628

        Reviewed by George Staikos.

        Internal PR: 298805
        Internally Reviewed By: Leo Yang

        The "isRedirect" parameter of initializePlatformRequest is only used to decide whether to
        reread cookies. Since we must reread cookies when resending a request with new auth
        credentials as well, rename this to "rereadCookies".

        The only caller which sets this parameter rather than using the default value is
        NetworkManager::startJob, which also has other processing on redirect. So add a new
        "rereadCookies" parameter to startJob and ensure it is always set to true on a redirect, but
        can also be set to true on a non-redirect. And when startJob is called due to new auth
        credentials, set it to true.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::startNewJobWithRequest): Add rereadCookies parameter, pass it to
        startJob.
        (WebCore::NetworkJob::handleRedirect): Set new rereadCookies param of startNewJob to true.
        (WebCore::NetworkJob::notifyChallengeResult): Set new rereadCookies param of startNewJob to
        true.
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob): Add rereadCookies parameter to startNewJobWithRequest.
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob): Add rereadCookies parameter, pass it instead of
        redirectCount to initializePlatformRequest.
        * platform/network/blackberry/NetworkManager.h:
        (NetworkManager): Add rereadCookies parameter to startJob.
        * platform/network/blackberry/ResourceRequest.h:
        (ResourceRequest): Rename isRedirect parameter to rereadCookies.
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest): Rename isRedirect to rereadCookies.

2013-02-22  Benjamin Poulain  <bpoulain@apple.com>

        Use CFNotificationCenter instead of NSNotificationCenter for SharedTimerIOS
        https://bugs.webkit.org/show_bug.cgi?id=110544

        Reviewed by Daniel Bates.

        Previously, we were instantiating the Obj-C object WebCoreResumeNotifierIOS
        with the only purpose of forwarding one notification to a C function.

        This patch updates the code to use CFNotificationCenter to dispatch the notification
        without the intermediary object.

        * platform/ios/SharedTimerIOS.mm:
        (WebCore::applicationDidBecomeActive):
        (WebCore::setSharedTimerFireInterval):

2013-02-22  Kenneth Russell  <kbr@google.com>

        Uint8ClampedArray constructor is wrong in WorkerContext.idl
        https://bugs.webkit.org/show_bug.cgi?id=110634

        Reviewed by Adam Barth.

        Tests: fast/canvas/webgl/typed-arrays-in-workers.html
               webgl/conformance/typedarrays/typed-arrays-in-workers.html

        * workers/WorkerContext.idl:

2013-02-21  Mark Lam  <mark.lam@apple.com>

        Add some checks to DatabaseTracker::getMaxSizeForDatabase() to ensure
        that it returns a sane value.
        https://bugs.webkit.org/show_bug.cgi?id=110557.

        Reviewed by Geoffrey Garen.

        No layout test, but there is a quota-test.html attached to bugzilla.
        The test is a webpage that can be loaded into multiple tabs to
        consuming storage space. Once the test webpages are loaded, you will
        need to monitor the database directory and its files to confirm that
        growth is bounded. Also try reloading the test in the tabs. At no
        time should any database file ever exceed the quota.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):

2013-02-22  James Simonsen  <simonjam@chromium.org>

        Preloads should be cleared when JavaScript cancels loading prematurely.
        https://bugs.webkit.org/show_bug.cgi?id=110388

        Reviewed by Antti Koivisto.

        If a page preloads a resource, but JavaScript aborts parsing for any reason (for example, a
        redirect or document.write()), the resource is forever marked a preload and won't be reloaded
        even if it's explicitly marked no-cache and the page is reloaded.

        Test: http/tests/cache/preload-cleared-after-parrsing-canceled-by-js.html

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

2013-02-22  Antoine Quint  <graouts@apple.com>

        Expose a list of all reasons that qualify a RenderLayer to be composited
        https://bugs.webkit.org/show_bug.cgi?id=110505

        Expose the various reasons that can qualify a RenderLayer to be composited
        via a new bitmask returned by the reasonForCompositing() method on
        RenderLayerCompositor. This method already existed and was used for logging
        purposes, but the previous functionality is now accessed via the
        logReasonForCompositing() method.

        This will allow the the InspectorLayerTreeAgent to provide this information
        to the front-end on a per-layer basis as requested by the front-end.

        Reviewed by Simon Fraser.

        No new tests.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore):
        (WebCore::RenderLayerCompositor::logReasonsForCompositing):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-02-22  Beth Dakin  <bdakin@apple.com>

        ScrollingStateTree::rootStateNode() should be null-checked since it can be null
        https://bugs.webkit.org/show_bug.cgi?id=110631

        Reviewed by Simon Fraser.

        This is a speculative fix for <rdar://problem/13233090> and 
        <rdar://problem/12519348>. It is totally possible for rootStateNode() to be null, 
        so we should null-check it.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::setShouldUpdateScrollLayerPositionOnMainThread):
        (WebCore::ScrollingCoordinatorMac::syncChildPositions):

2013-02-22  Mike Reed  <reed@google.com>

        Check for null-device when calling createCompatibleDevice
        https://bugs.webkit.org/show_bug.cgi?id=107981

        Reviewed by James Robinson.

        No new tests. Current tests provided coverage. Site in the wild triggered the failure
        (cairo failed to allocate a huge surface).

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2013-02-22  Chris Rogers  <crogers@google.com>

        AudioDestination::create() needs extra device identification information for live/local input streams
        https://bugs.webkit.org/show_bug.cgi?id=109494

        Reviewed by James Robinson.

        AudioDestination::create() supports live/local audio input.  But, since there may be multiple
        audio input devices available, an identifier for the requested input device needs to be
        passed in.  The embedder may then use this information so that the proper audio hardware is
        accessed.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource):
        * Modules/webaudio/AudioDestinationNode.h:
        (AudioDestinationNode):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::initialize):
        (WebCore::DefaultAudioDestinationNode::createDestination):
        (WebCore::DefaultAudioDestinationNode::enableInput):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        (DefaultAudioDestinationNode):
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * platform/audio/AudioDestination.h:
        (AudioDestination):
        * platform/audio/chromium/AudioDestinationChromium.cpp:
        (WebCore::AudioDestination::create):
        (WebCore::AudioDestinationChromium::AudioDestinationChromium):
        * platform/audio/chromium/AudioDestinationChromium.h:
        (AudioDestinationChromium):
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestination::create):
        * platform/chromium/support/WebMediaStreamSource.cpp:
        (WebKit::WebMediaStreamSource::deviceId):
        (WebKit):
        (WebKit::WebMediaStreamSource::setDeviceId):
        * platform/mediastream/MediaStreamSource.h:
        (WebCore::MediaStreamSource::deviceId):
        (WebCore::MediaStreamSource::setDeviceId):
        (MediaStreamSource):

2013-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Binding tests rebaseline after r143737.

        * bindings/scripts/test/V8/V8Float64Array.cpp:
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        * bindings/scripts/test/V8/V8TestException.cpp:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        * bindings/scripts/test/V8/V8TestNode.cpp:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:

2013-02-22  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Unable to enter "24" to hour field
        https://bugs.webkit.org/show_bug.cgi?id=110431

        Reviewed by Kent Tamura.

        Fixed a bug that hour-field does not accept "24" as a valid input when hour format is 1-24.
        To test <input> against different time formats, added "pattern" attribute to DateTimeEditElement.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue): Overwrites layoutParameters.dateTimeFormat by pattern attribute of DateTimeEditElement (if exists).
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeHourFieldElement::populateDateTimeFieldsState): Fixed a bug where AM/PM value was passed to setHour().
        (WebCore::DateTimeHourFieldElement::setValueAsInteger): Clamps the given value to 0-24 when the range of the field is 1-12 or 1-24. Renamed the parameter as it may not be an hour23 value (0-23).

2013-02-21  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions] Region boxes should respect -shape-inside CSS property
        https://bugs.webkit.org/show_bug.cgi?id=107880

        Reviewed by David Hyatt.

        The shape-inside CSS property modifies the shape of the inner inline flow content from rectangular content box
        to an arbitrary geometry. The detailed documentation is located in the CSS-Exclusions specification:
        http://dev.w3.org/csswg/css3-exclusions/#shape-inside-property. This change adds support for the shape-inside property
        on CSS Regions.

        Test: fast/regions/shape-inside-on-regions.html

        * rendering/ExclusionShapeInfo.cpp:
        (WebCore):
        (WebCore::::logicalTopOffset): Shape dimension should be relative to the current region.
        * rendering/ExclusionShapeInfo.h:
        (ExclusionShapeInfo):
        (WebCore::::logicalTopOffset): Move the implementation to ExclusionShapeInfo.cpp.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::logicalHeightForLine): Move the function prior to layoutExclusionShapeInsideInfo, since we need to use it there.
        (WebCore):
        (WebCore::layoutExclusionShapeInsideInfo): Add support for cases when shape-inside is a region-block property.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Update the exclusion shape information for every line, since the content
        could flow through several region containers which can have different shape-inside properties.

2013-02-21  Ojan Vafai  <ojan@chromium.org>

        Add computeInstrinsicLogicalWidths functions to TableLayout subclasses
        https://bugs.webkit.org/show_bug.cgi?id=110520

        Reviewed by Tony Chang.

        This is just a refactor in preparation for adding RenderTable::computeIntinsicLogicalWidths.
        No change in behavior.

        Split the computePreferredLogicalWidths functions into a computeIntinsicLogicalWidths
        and a applyPreferredLogicalWidthQuirks. Also, move the addition of bordersPaddingAndSpacing
        into RenderTable since both TableLayout subclasses need this.

        This has the added readability benefit of better isolating the quirks that each table layout
        mode requires.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths):
        (WebCore::AutoTableLayout::applyPreferredLogicalWidthQuirks):
        * rendering/AutoTableLayout.h:
        (AutoTableLayout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::computeIntrinsicLogicalWidths):
        (WebCore::FixedTableLayout::applyPreferredLogicalWidthQuirks):
        * rendering/FixedTableLayout.h:
        (FixedTableLayout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computePreferredLogicalWidths):
        * rendering/TableLayout.h:
        (TableLayout):

2013-02-22  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Correctly track whether or not a layer is paginated.
        https://bugs.webkit.org/show_bug.cgi?id=110625.

        Taking the first step towards implementing the correct spec-compliant painting
        model for the new multi-column layout. Add code to make sure the paginated
        bits in RenderLayer get propagated correctly for the new layout.
        
        The main difference in bit propagation between the old multicolumn layout and
        the new multicolumn layout is that the old layout only tracked pagination "roots",
        since it has a broken layer painting model. It incorrectly treats a pagination
        "root" inside a multi-column block as establishing a stacking context in each
        column. This is incorrect.
        
        The new multicolumn code is going to paint each paginated layer individually,
        and this means the bits can't just be about roots. Instead they have to be set
        on every layer that may be split across columns, without regard for whether parent
        layers are also split or not. This is actually a simpler bit propagation model
        than the old code.

        Reviewed by Beth Dakin.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        Add code to set the m_isPaginated bit for in-flow RenderFlowThreads. This includes
        only RenderMultiColumnFlowThread for now, but eventually it will also include
        RenderPageFlowThread.

        (WebCore::RenderLayer::useRegionBasedColumns):
        Add a helper method to check if region-based columns are turned on, since we're
        not attempting to alter the old column pagination model.

        (WebCore::RenderLayer::updatePagination):
        Added the code to propagate bits under the new model. Whether or not you're paginated
        just depends on whether or not your enclosing layer along the containing block chain
        is paginated.

        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::hitTestList):
        Add code that avoids the old multi-column pagination model when the new column model
        is enabled. For now there is no code in the new model that does anything with the bits,
        but we're avoiding calling the old code, since it is broken for the new columns.

        * rendering/RenderLayer.h:
        (RenderLayer):
        Added the useRegionBasedColumns method to check the Setting.

        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isInFlowRenderFlowThread):
        (RenderObject):
        Implement isInFlowRenderFlowThread, a virtual function for asking if a renderer is
        an in-flow RenderFlowThread, which means that it is going to need paginated layers
        because the flow thread has to split across "pages" that do not establish stacking
        contexts.

2013-02-22  Bem Jones-Bey  <bjonesbe@adobe.com>

        text-overflow:ellipsis is not applied when the block contains nested blocks
        https://bugs.webkit.org/show_bug.cgi?id=101879

        Reviewed by Eric Seidel.

        Since text-overflow is not an inherited property, the anonymous blocks
        don't know they should ellipse. This causes the anonymous blocks
        created in the nested block situation to check their parent to find
        out if they should ellipse.

        Test: fast/css/text-overflow-ellipsis-anonymous-blocks.html

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

2013-02-22  Eric Seidel  <eric@webkit.org>

        REGRESSION(r143664, r143681): http/tests/security/feed-urls-from-remote.html fails
        https://bugs.webkit.org/show_bug.cgi?id=110554

        Reviewed by Adam Barth.

        Will fix http/tests/security/feed-urls-from-remote.html for Mac WK1.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):

2013-02-22  Mark Rowe  <mrowe@apple.com>

        Build fix after r143637.

        * WebCore.exp.in: Unconditionally export ScriptController::javaScriptContext.
        * bindings/js/ScriptController.h: Unconditionally define javaScriptContext for Mac builds.
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::javaScriptContext): Move the #if inside the function, and return 0 when false.

2013-02-22  Anton Vayvod  <avayvod@chromium.org>

        [TextAutosizing] Refactoring to eliminate boolean parameter.
        https://bugs.webkit.org/show_bug.cgi?id=110490

        Reviewed by Julien Chaffraix.

        A follow-up to the recent change that introduced a boolean parameter to
        processClusterInternal method of TextAutosizer. Boolean parameters are discouraged by the
        WebKit style guide. See http://trac.webkit.org/changeset/142866

        Refactoring so no new tests.

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::clusterMultiplier):

                Calculates the font size multiplier for the specified cluster.

        (WebCore::TextAutosizer::processClusterInternal):

                Accepts the font size multiplier instead of |shouldBeAutosized|.

        (WebCore::TextAutosizer::processCluster):
        (WebCore::TextAutosizer::processCompositeCluster):

                Both methods above now calculate the multiplier and then pass it to
                processClusterInternal.

        * rendering/TextAutosizer.h:

                Updated method declarations.

2013-02-22  Carlos Garcia Campos  <cargarcia@rim.com>

        [BlackBerry] Use KURL::protocolIsInHTTPFamily instead of KURL::protocolInHTTPFamily
        https://bugs.webkit.org/show_bug.cgi?id=110581

        Reviewed by Rob Buis.

        KURL::protocolInHTTPFamily() was removed in r109670.

        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::clearHTTPContentLength):
        (WebCore::ResourceRequest::clearHTTPContentType):

2013-02-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Unreviewed build-fix after r143744.

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

2013-02-22  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] throttle replayTraceLog messages to backend
        https://bugs.webkit.org/show_bug.cgi?id=110591

        Reviewed by Pavel Feldman.

        The replayTraceLog message may be quite expensive. So, while such a request is processed by the
        backend, user may well generate a dozen of new ones simply by walking through the DataGrid.
        We should actually send to the backend only the last event from the queue.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView.prototype._replayTraceLog.didReplayTraceLog):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog):

2013-02-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Multiple Layout Test crashes (ASSERT) on chromium linux debug after r143727
        https://bugs.webkit.org/show_bug.cgi?id=110609

        Reviewed by Antonio Gomes.

        Revert r128869. InnerNode may now again be from a child document, 
        and should be handled and not asserted against.

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

2013-02-22  Andreas Kling  <akling@apple.com>

        Element: Make updateName/updateId/updateLabel private.
        <http://webkit.org/b/110603>

        Reviewed by Antti Koivisto.

        These methods are only called from inside Element so make them private and
        move them to the .cpp file.

        * dom/Element.cpp:
        (WebCore::Element::updateName):
        (WebCore::Element::updateId):
        * dom/Element.h:

2013-02-21  Zhenyao Mo  <zmo@google.com>

        Roll ANGLE to r1833
        https://bugs.webkit.org/show_bug.cgi?id=110513

        Reviewed by Kenneth Russell.

        * CMakeLists.txt:
        * GNUmakefile.list.am:

2013-02-22  Carlos Garcia Campos  <cargarcia@rim.com>

        [BlackBerry] Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=110577

        Reviewed by Rob Buis.

        Iterators were renamed to key/value in r130612.

        * platform/blackberry/AuthenticationChallengeManager.cpp:
        (WebCore::AuthenticationChallengeManager::pageVisibilityChanged):
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleNotifyMultipartHeaderReceived):

2013-02-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Add comments to checkTypeOrDieTrying()
        https://bugs.webkit.org/show_bug.cgi?id=110553

        Reviewed by Adam Barth.

        It is mysterious how the check is helpful. We need comments.

        No tests. Just added comments.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):
        * bindings/v8/ScriptWrappable.h:
        (ScriptWrappable):

2013-02-22  Jessie Berlin  <jberlin@apple.com>

        32-bit build fix after r143706

        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didReceiveData):

2013-02-22  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] do no show a single frame node in data grid
        https://bugs.webkit.org/show_bug.cgi?id=110473

        Reviewed by Pavel Feldman.

        In a single canvas frame capture mode do not show the single "Frame #1" node.
        Drive-by: Fix a wrong "this" pointer.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView.prototype._didReceiveTraceLog):
        (WebInspector.CanvasProfileView.prototype.appendDrawCallGroup):
        (WebInspector.CanvasProfileView.prototype._flattenSingleFrameNode):

2013-02-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Multiple Layout Test crashes (ASSERT) on chromium linux debug after r143727
        https://bugs.webkit.org/show_bug.cgi?id=110609

        Reviewed by Antonio Gomes.

        Point based hit tests should not append but assign HitTestResults.

        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::nodeAtPoint):

2013-02-22  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: show source location after drawer views
        https://bugs.webkit.org/show_bug.cgi?id=110156

        Reviewed by Pavel Feldman.

        - Add statusBarText method
        - Add #drawer-view-anchor, which determines layout position of
        drawerView
        - Fix layout in #panel-status-bar to avoid floating elements.

        No new tests.

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.wasShown): Add statusBarItems before
        drawer-view-anchor and statusBarText after.
        (WebInspector.Panel.prototype.willHide): Remove statusBarText from DOM in the
        way it's done for statusBarItems
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.statusBarText): Added.
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.statusBarText): Added.
        (WebInspector.SourceFrame.prototype.statusBarItems):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        * inspector/front-end/View.js:
        (WebInspector.View.prototype.statusBarText):
        * inspector/front-end/inspector.css:
        (#drawer-view-anchor):
        (.source-frame-cursor-position):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.showViewInDrawer):
        * inspector/front-end/timelinePanel.css:
        (.timeline-records-stats):
        (.timeline-records-stats-container):

2013-02-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Allow child-frame content in hit-tests.
        https://bugs.webkit.org/show_bug.cgi?id=95204

        Reviewed by Julien Chaffraix.

        Refactors how EventHandler::hitTestResultAtPoint handles child-frame content,
        it is now handled by the hit test itself controlled by the AllowChildFrameContent
        flag in HitTestRequest.

        This means that area-based hit-tests can now return elements from all the child frames
        they intersect instead of just the one frame containing the center point. The improved
        results from area-based hit-tests will among other things also improve touch adjustment
        near frame boundaries.

        Tests: fast/dom/nodesFromRect/nodesFromRect-child-frame-content.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
            Recursion into child-frames have been moved to RenderFrameBase::nodeAtPoint, so
            now hitTestResultAtPoint just needs to set AllowChildFrameContent.
        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::parentShadowHostOrOwner):
            New function to iterate up across frame boundaries.
        (WebCore::TouchAdjustment::compileSubtargetList):
            We need to iterate up across frame boundaries to avoid iframes competing with their
            own content for touch adjustment.
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::allowsChildFrameContent):
        (WebCore::HitTestRequest::isChildFrameHitTest):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        (WebCore::HitTestResult::append):
        (WebCore::HitTestResult::dictationAlternatives):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::pointInMainFrame):
        (WebCore::HitTestResult::pointInInnerNodeFrame):
        (HitTestResult):
            m_hitTestLocation is now in main frame coordinates, which make m_pointInMainFrame
            unnecessary, but requires the introduction of m_pointInInnerFrame, to remember
            the coordinates of inner-node in its own frame.
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::nodeAtPoint):
            The recursion into child-frames is now handled here instead of in hitTestResultAtPoint, this
            allows us to recurse into multiple frames, instead of just one.
        * rendering/RenderFrameBase.h:
        (RenderFrameBase):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):
            RenderLayer should not lie about being hit if the request is child-frame request.
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:
            Extended so nodesFromRect with child-frame content can be tested.

2013-02-22  Andreas Kling  <akling@apple.com>

        ShareableElementData should use zero-length array for storage.
        <http://webkit.org/b/109959>

        Reviewed by Anders Carlsson.

        Use a zero-length Attribute array instead of always casting from void* to an array.
        It was done this way originally because I didn't know we could sidestep the MSVC
        build error with some #pragma hackery and a default constructor for Attribute.

        * dom/Attribute.cpp:
        (WebCore::Attribute::Attribute):
        * dom/DocumentSharedObjectPool.cpp:
        (WebCore::DocumentSharedObjectPool::cachedShareableElementDataWithAttributes):
        * dom/Element.cpp:
        (WebCore::sizeForShareableElementDataWithAttributeCount):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::ShareableElementData::~ShareableElementData):
        (WebCore::UniqueElementData::UniqueElementData):
        * dom/Element.h:
        (ShareableElementData):
        (WebCore::ElementData::attributeItem):

2013-02-22  Andreas Kling  <akling@apple.com>

        Remove unused declaration: Element::removeCachedHTMLCollection()

        Not reviewed by Antti Koivisto.

        * dom/Element.h:
        (Element):

2013-02-22  Keishi Hattori  <keishi@webkit.org>

        Add scroll view for new calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=110137

        Reviewed by Kent Tamura.

        Adding a scroll view class as part of the new calendar picker (Bug 109439).

        No new tests. Code not yet used.

        * Resources/pagepopups/calendarPicker.js:
        (View):
        (View.prototype.offsetRelativeTo): Returns the offset position of this view relative to the given ancestor element.
        (View.prototype.attachTo): Attaches view to a node or view.
        (View.prototype.bindCallbackMethods): Binds all methods starting with "on" to this.
        (ScrollView): A custom scroll view that can contain extremely long content. CSS values have a limit. This can go beyond that.
        (ScrollView.prototype.setWidth): Sets the view width.
        (ScrollView.prototype.width):
        (ScrollView.prototype.setHeight):Sets the view height.
        (ScrollView.prototype.height):
        (ScrollView.prototype.onScrollAnimatorStep): Callback for scroll animator step.
        (ScrollView.prototype.scrollTo): Scrolls to a certain offset.
        (ScrollView.prototype.scrollBy): Scrolls by a certain amount.
        (ScrollView.prototype.contentOffset): Current content offset.
        (ScrollView.prototype.onMouseWheel): Scroll with the mouse wheel.
        (ScrollView.prototype.setContentOffset): Sets the content offset.
        (ScrollView.prototype.contentPositionForContentOffset): Returns where the content element should be positioned.

2013-02-22  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: InspectorPageAgent::disable() should not update view metrics regardless of the override state
        https://bugs.webkit.org/show_bug.cgi?id=110593

        Reviewed by Vsevolod Vlasov.

        InspectorPageAgent::disable() now checks if the device metrics are overridden before
        telling the client to disable the override.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::setDeviceMetricsOverride):
        (WebCore::InspectorPageAgent::deviceMetricsChanged):
        * inspector/InspectorPageAgent.h:
        (InspectorPageAgent):

2013-02-22  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, rolling out r143695.
        http://trac.webkit.org/changeset/143695
        https://bugs.webkit.org/show_bug.cgi?id=110554

        Crashes in DocumentLoader::checkLoadComplete on AppleMac WK1, EFL, GTK.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):

2013-02-22  Balazs Kelemen  <kbalazs@webkit.org>

        [CoordGfx] Minor cleanup in CoordinatedGraphicsScene::paintToGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=109824

        Reviewed by Andreas Kling.

        Avoid ugly ifdefs by using PlatformGraphicsContext.

        No new tests, only refactoring.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::paintToGraphicsContext):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        (CoordinatedGraphicsScene):

2013-02-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add CodeGeneratorInspectorStrings.py to
        EXTRA_DIST.

2013-02-22  Andreas Kling  <akling@apple.com>

        GlyphPage: ALWAYS_INLINE all performance-relevant getters.

        REGRESSION(r143125): ~5% performance hit on Chromium's intl2 page cycler
        <http://webkit.org/b/108835>

        Reviewed by Antti Koivisto.

        Unreviewed desperate hack. Since I can't reproduce the problem and it's only showing
        up on two bots, one Linux and one Snow Leopard, I'm thinking it may be GCC related.
        Let's see what happens if we tell it to force inline all the GlyphPage getters.

        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::indexForCharacter):
        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::glyphAt):
        (WebCore::GlyphPage::fontDataForCharacter):

2013-02-22  Zach Kuznia  <zork@chromium.org>

        Update FileReaderLoader to allow specifying a range and reading as a blob.
        https://bugs.webkit.org/show_bug.cgi?id=110556

        This is part of a series of patches to implement Stream support.  See:
        https://bugs.webkit.org/show_bug.cgi?id=110194

        Reviewed by Hajime Morrita.

        Tests: will be added when js binding is added.

        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderLoader.h:

2013-02-22  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [WebGL][EFL] Support for creating surface with alpha disabled.
        https://bugs.webkit.org/show_bug.cgi?id=110067

        Reviewed by Kenneth Rohde Christiansen.

        Covered by compositing/webgl/webgl-no-alpha.html

        We currently always create a surface supporting alpha channel. 
        With this patch we create the surface with alpha only if
        required.

        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::initialize):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createOffScreenSurface):
        (WebCore::GLPlatformSurface::createTransportSurface):
        (WebCore::GLPlatformSurface::GLPlatformSurface):
        (WebCore::GLPlatformSurface::attributes):
        (WebCore):
        * platform/graphics/opengl/GLPlatformSurface.h:
        * platform/graphics/surfaces/egl/EGLConfigSelector.cpp:
        (WebCore):
        (WebCore::EGLConfigSelector::EGLConfigSelector):
        (WebCore::EGLConfigSelector::pBufferContextConfig):
        (WebCore::EGLConfigSelector::surfaceContextConfig):
        * platform/graphics/surfaces/egl/EGLConfigSelector.h:
        (EGLConfigSelector):
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLWindowTransportSurface::EGLWindowTransportSurface):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        (EGLWindowTransportSurface):
        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        (WebCore):
        (WebCore::GLXConfigSelector::GLXConfigSelector):
        (WebCore::GLXConfigSelector::pixmapContextConfig):
        (WebCore::GLXConfigSelector::surfaceContextConfig):
        (WebCore::GLXConfigSelector::surfaceClientConfig):
        (WebCore::GLXConfigSelector::validateAttributes):
        (WebCore::GLXConfigSelector::findMatchingConfig):
        (WebCore::GLXConfigSelector::findMatchingConfigWithVisualId):
        (GLXConfigSelector):
        * platform/graphics/surfaces/glx/GLXContext.cpp:
        (WebCore::GLXOffScreenContext::initialize):
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXOffScreenSurface::GLXOffScreenSurface):
        (WebCore::GLXOffScreenSurface::initialize):
        * platform/graphics/surfaces/glx/GLXSurface.h:
        (GLXTransportSurface):
        (GLXOffScreenSurface):
        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createPixmap):

2013-02-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: allow opting out from vertical split in the dock-to-right mode
        https://bugs.webkit.org/show_bug.cgi?id=110564

        Reviewed by Vsevolod Vlasov.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._splitVertically):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):

2013-02-21  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Control+Shift+Up/Down selection works backwards
        https://bugs.webkit.org/show_bug.cgi?id=110459

        Reviewed by Martin Robinson.

        * platform/gtk/KeyBindingTranslator.cpp:
        (WebCore): The translation table for paragraph selection
        commands is backwards, fix it.

2013-02-21  Eric Seidel  <eric@webkit.org>

        REGRESSION(r143664, r143681): http/tests/security/feed-urls-from-remote.html fails
        https://bugs.webkit.org/show_bug.cgi?id=110554

        Reviewed by Ryosuke Niwa.

        Will fix http/tests/security/feed-urls-from-remote.html for Mac WK1.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):

2013-02-21  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Implement SharedBuffer version of put() / onSuccess()
        https://bugs.webkit.org/show_bug.cgi?id=110398

        Reviewed by Tony Chang.

        This avoids all unnecessary data copies within the context of
        IndexedDB proper, and removes all references to
        SerializedScriptValue from the IndexedDB "backend".

        No new tests because this is just a refactor.

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValueBuffer): New version of deserializeIDBValue which takes SharedBuffer.

2013-02-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143691.
        http://trac.webkit.org/changeset/143691
        https://bugs.webkit.org/show_bug.cgi?id=110559

        Breaks compilation on mac. (Requested by vsevik on #webkit).

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore):
        (WebCore::RenderLayerCompositor::reasonForCompositing):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-02-21  Philip Rogers  <pdr@google.com>

        Remove deep copy of ImageBuffer in tiled SVG backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=110549

        Reviewed by Dirk Schulze.

        SVGImage::drawPatternForContainer creates a temporary ImageBuffer for stamping out tiled
        backgrounds. Previously this ImageBuffer was unnecessarily deep-copied! This patch uses a
        shallow copy, taking advantage of the fact that the temporary ImageBuffer is never modified.

        This patch is covered with existing tests.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):

2013-02-21  Antoine Quint  <graouts@apple.com>

        Expose a list of all reasons that qualify a RenderLayer to be composited
        https://bugs.webkit.org/show_bug.cgi?id=110505

        Expose the various reasons that can qualify a RenderLayer to be composited
        via a new bitmask returned by the reasonForCompositing() method on
        RenderLayerCompositor. This method already existed and was used for logging
        purposes, but the previous functionality is now accessed via the
        logReasonForCompositing() method.

        This will allow the the InspectorLayerTreeAgent to provide this information
        to the front-end on a per-layer basis as requested by the front-end.

        Reviewed by Simon Fraser.

        No new tests.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore):
        (WebCore::RenderLayerCompositor::logReasonsForCompositing):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-02-21  Takashi Sakamoto  <tasak@google.com>

        RenderTable::paintBoxDecorations sometimes draws box-shadow twice.
        https://bugs.webkit.org/show_bug.cgi?id=110196

        Reviewed by Simon Fraser.

        When RenderTable::paintBoxDecorations draws box-shadow, paintBackground
        should not draw box-shadow. So we have to provide bleedAvoidance
        parameter for RenderBox::paintBackground.

        Test: fast/css/table-border-radius-with-box-shadow.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        Provide bleedAvoidance, which determineBackgroundBleedAvoidance
        returns, for paintBackground.

2013-02-21  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Allow to retrieve the request data from abstract TextCheckingRequest to be accessible for WK2
        https://bugs.webkit.org/show_bug.cgi?id=110208

        Reviewed by Hajime Morrita.

        The WebCore changes are required to implement asynchronous spell checking in WK2.
        The idea of asynchronous spell checking in WK1 is to pass the pointer to the abstract object
        to the client who is able to verify the given text and notify the WebCore about results.
        WK2 will extract the request data and pass it (with additional information) to the UIProcess.

        No new tests, covered by editing/spelling tests.

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):
        Extract the request data as it is the member of 'TextCheckingRequest'.

        * editing/SpellChecker.cpp:
        (WebCore):
        (WebCore::SpellCheckRequest::didCancel):
        (WebCore::SpellCheckRequest::setCheckerAndSequence):
        (WebCore::SpellChecker::requestCheckingFor):
        (WebCore::SpellChecker::enqueueRequest):
        (WebCore::SpellChecker::didCheck):
        (WebCore::SpellChecker::didCheckSucceed):
        * platform/text/TextChecking.h:
        (WebCore):
        (TextCheckingRequestData):
        Introduce a new 'TextCheckingRequestData' class to keep the request data and to
        easy extract it from the 'TextCheckingRequest'.

        (WebCore::TextCheckingRequestData::TextCheckingRequestData):
        (TextCheckingRequest):
        (WebCore::TextCheckingRequest::~TextCheckingRequest):

2013-02-21  Brady Eidson  <beidson@apple.com>

        Move fastlog2() to WTF/MathExtras.h so it can be used from multiple projects.

        Rubberstamped by Geoff Garen.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::lruListFor): Remove the inline fastlog2 and use WTF::fastlog2.

2013-02-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Split SelectorChecker's fast-checking logic into its own class.
        https://bugs.webkit.org/show_bug.cgi?id=106860

        Reviewed by Antti Koivisto.

        No functional changes, covered by existing tests.

        * CMakeLists.txt: Added new class to existing build system.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSAllInOne.cpp: Ditto.
        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData): Changed to use SelectorCheckerFastPath.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matches): Ditto.
        * css/SelectorChecker.h:
        (SelectorChecker): Move fast path code into SelectorCheckerFastPath.
        * css/SelectorCheckerFastPath.cpp: Added.
        * css/SelectorCheckerFastPath.h: Added.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::ruleMatches): Changed to use SelectorCheckerFastPath.
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::initialize): Ditto.

2013-02-21  Tony Gentilcore  <tonyg@chromium.org>

        Invalidate outstanding checkpoints for the background input stream and preload scanner
        https://bugs.webkit.org/show_bug.cgi?id=110537

        Reviewed by Adam Barth.

        fast/tokenizer/write-before-load.html caused duplicate didFailSpeculation() calls for the same checkpoint.
        One was triggered by processParsedChunkFromBackgroundParser and the other by resumeParsingAfterScriptExecution.
        This change ensures that after we send a checkpoint, it is cleared so it won't be sent again until the next
        processParsedChunkFromBackgroundParser().

        No new tests because no new functionality.

        * html/parser/BackgroundHTMLInputStream.cpp:
        (WebCore::BackgroundHTMLInputStream::rewindTo):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didFailSpeculation):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::rewindTo):

2013-02-21  Dean Jackson  <dino@apple.com>

        Followup commit for https://bugs.webkit.org/show_bug.cgi?id=110541
        from a comment by Jon Lee.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Logic
        in conditional was unnecessarily complex.

2013-02-21  Ojan Vafai  <ojan@chromium.org>

        Clean up computePreferredLogicalWidths functions in TableLayout subclasses
        https://bugs.webkit.org/show_bug.cgi?id=110515

        Reviewed by Tony Chang.

        No change in behavior. This is just a cleanup in preparation for other
        refactoring to this code.

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        Move a FIXME here from computePreferredLogicalWidths. It makes more sense here.
        (WebCore::FixedTableLayout::computePreferredLogicalWidths):
        -Remove outdated or unhelpful comments.
        -Isolate the fixed width codepath to make it a bit less convoluted.
        (WebCore::FixedTableLayout::layout):
        * rendering/FixedTableLayout.h:
        The argument to calcWidthArray is never used. Remove it.

2013-02-21  Eric Seidel  <eric@webkit.org>

        LayoutTests/fast/encoding/parser-tests-*.html timeout with threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=109995

        Unreviewed speculative fix for Mac WK1.

        It appears that m_frame can be null for Mac WK1.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):

2013-02-21  Dean Jackson  <dino@apple.com>

        Better sizing model for Snapshotted plugins
        https://bugs.webkit.org/show_bug.cgi?id=110541

        Reviewed by Simon Fraser.

        Clarify the way we apply sizing rules to snapshotted plug-ins. In
        testing we've found that plug-ins smaller than 40px in either
        dimension should never be frozen. Also, larger plugins should
        be explicitly marked, because often they are the single dominant
        element on the page.

        As a drive-by, I removed the flag that indicated whether or not
        the label should show automatically. It wasn't being used. This is
        all determined from the shadow root and its CSS now.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): New values for size thresholds.
        (WebCore::HTMLPlugInImageElement::createRenderer): Remove call to setShouldShowSnapshotLabelAutomatically.
        (WebCore::classNameForShadowRoot): Remove logging and clearly assign sizing classes.
        (WebCore::HTMLPlugInImageElement::updateSnapshotInfo): We don't need the page size any more.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Use new constant names.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): Remove setShouldShowSnapshotLabelAutomatically.

2013-02-21  Benjamin Poulain  <benjamin@webkit.org>

        Fix the build after r143664.

        Unreviewed.

        * WebCore.exp.in:

2013-02-21  Eric Seidel  <eric@webkit.org>

        tables/mozilla/bugs/bug8950.html fails with threaded parser due to attribute duplication
        https://bugs.webkit.org/show_bug.cgi?id=110532

        Reviewed by Adam Barth.

        This is a very basic failure which we should have caught earlier with the html5lib parser
        tests, except those use document.write and thus avoid the threaded parser.

        AtomicHTMLToken expects its attributes to be unique.  We were not doing that for the
        CompactHTMLToken path, and this ancient mozilla table test caught that.

        Fixes tables/mozilla/bugs/bug8950.html.

        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::initializeAttributes):

2013-02-21  Adam Barth  <abarth@webkit.org>

        Threaded HTML Parser fails fast/dom/Document/readystate.html
        https://bugs.webkit.org/show_bug.cgi?id=110529

        Reviewed by Eric Seidel.

        We need to create the tokenizer even when we finish a script-created
        parser. Most of the time, the tokenizer has already been created at
        this point because it is created by calls to document.write.

        Test: fast/parser/body-should-exist-after-open-close.html

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::finish):

2013-02-21  Emil A Eklund  <eae@chromium.org>

        Lots of LayoutUnit assertions when loading a Wikipedia article
        https://bugs.webkit.org/show_bug.cgi?id=110270

        Reviewed by Levi Weintraub.
        
        Change RenderBlock::adjustRectForColumns to ensure that the
        endColumn calculation does not overflow.

        No new tests, covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustRectForColumns):
        Make the endOffset value be no less than the beforeBorderPadding
        value to ensure that endColumn is not negative.

2013-02-21  Eric Seidel  <eric@webkit.org>

        LayoutTests/fast/encoding/parser-tests-*.html timeout with threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=109995

        Reviewed by Adam Barth.

        In the case where during main document onload, we
        load a new iframe, and then from within that iframe
        we run script to remove the iframe and call testRunner.notifyDone()
        the notifyDone() will not correctly dump because
        the testRunner does not yet realize that the main resource
        has completed loading.

        In the main-thread parser, the testRunner does correctly know
        that the main thread has completed, because removing the iframe
        causes a didFailLoad callback to the embedder, because when
        the iframe is being removed, the DocumentLoader for that iframe
        is still on the stack and believe's its loading
        (because it has a MainResourceLoader which is also on the stack
        delivering us the bytes which contain this inline script).

        In the threaded-parser case, the DocumentLoader and MainResourceLoader
        are no longer on the stack, as we are parsing the iframe asynchronously
        after all the bytes have been delivered, and the MainResourceLoader destroyed.
        Thus when DocumentLoader::stopLoading() is called, loading() returns
        false, and it returns early.  One might argue that we should remove that
        early return entirely, but it seemed safer to extend the idea of
        when we're loading to include the time when the parser is active.

        This patch solves this by teaching the DocumentLoader that it is still
        "loading" so long as the parser is still active.

        Also added a call to DocumentLoader::checkLoadComplete from
        Document::decrementActiveParserCount which seemed to cause
        http/tests/multipart/policy-ignore-crash.php to pass.

        This causes http/tests/security/feed-urls-from-remote.html to timeout
        on chromium (but no other platforms that I'm aware of).  I believe this
        is due to a bug in our DRT implementation in the policyDelegate case
        (which AFAIK is not a codepath which Chromium actually uses in the wild).
        The test already times out on TOT if you remove the setCustomPolicyDelegate calls!

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):
        (WebCore):
        * loader/DocumentLoader.h:
        (DocumentLoader):

2013-02-21  Erik Arvidsson  <arv@chromium.org>

        Nodes should not have attributes property
        https://bugs.webkit.org/show_bug.cgi?id=110510

        Reviewed by Adam Barth.

        According to http://dom.spec.whatwg.org/ attributes and hasAttributes
        should be defined on Element and not on Node.

        Test: fast/dom/Text/text-should-not-have-attributes.html

        * dom/Element.idl:
        * dom/Node.idl:

2013-02-21  Tony Gentilcore  <tonyg@chromium.org>

        Make BackgroundHTMLParser rewind the preload scanner instead of clear it
        https://bugs.webkit.org/show_bug.cgi?id=110517

        Reviewed by Adam Barth.

        No new tests becuase no new functionality.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::resumeFrom):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        * html/parser/BackgroundHTMLParser.h:
        (Checkpoint):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didFailSpeculation):
        * html/parser/HTMLDocumentParser.h:
        (ParsedChunk):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::createCheckpoint):
        (WebCore):
        (WebCore::TokenPreloadScanner::rewindTo):
        * html/parser/HTMLPreloadScanner.h:
        (WebCore):
        (TokenPreloadScanner):
        (WebCore::TokenPreloadScanner::Checkpoint::Checkpoint):
        (Checkpoint):

2013-02-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143536.
        http://trac.webkit.org/changeset/143536
        https://bugs.webkit.org/show_bug.cgi?id=110523

        Causing a bunch of tests to fail on Windows, requires
        rebaselining (Requested by rfong on #webkit).

        * config.h:
        * page/Settings.cpp:
        (WebCore):
        (WebCore::Settings::setShouldPaintNativeControls):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::shouldPaintNativeControls):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore):
        * rendering/RenderThemeWin.cpp:
        (WebCore):

2013-02-21  Simon Fraser  <simon.fraser@apple.com>

        Don't make an overhang shadow layer when the WKView has a transparent background
        https://bugs.webkit.org/show_bug.cgi?id=110429

        Reviewed by Anders Carlsson.

        When in coordinated scrolling mode, RenderLayerCompositor makes a layer to show
        the shadow around the content when rubber-banding. However, if the view is
        transparent, we don't want to make this layer, since it darkens the entire view.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateRootLayerConfiguration): Code was moved
        into viewHasTransparentBackground(), so just call that here.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresContentShadowLayer): Don't make
        a shadow layer when the view is transparent.
        (WebCore::RenderLayerCompositor::viewHasTransparentBackground): Return
        true if the view is transparent or has a non-opaque background color,
        and optionally return that color.
        * rendering/RenderLayerCompositor.h:

2013-02-21  Simon Fraser  <simon.fraser@apple.com>

        [Safari] Crash with opacity + drop shadow filter + child element extending beyond filter outsets
        https://bugs.webkit.org/show_bug.cgi?id=107467

        Reviewed by Dean Jackson.
        
        The filter code plays games with the current GraphicsContext, replacing the current
        context with one which will get filtered.
        
        This doesn't play nicely with the RenderLayer code which lazily starts transparency
        layers. If we don't start a transparency layer until painting a child of the filtered
        layer, then the transparency layer is started using the wrong context.
        
        Fix by eagerly starting transparency layers if we have both a filter and opacity.

        Test: css3/filters/filter-with-opacity-and-children.html

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

2013-02-21  Tony Chang  <tony@chromium.org>

        Autogenerate Settings that call setNeedsRecalcStyleInAllFrames when set
        https://bugs.webkit.org/show_bug.cgi?id=109989

        Reviewed by Ryosuke Niwa.

        Start generating the code for settings that call m_page->setNeedsRecalcStyleInAllFrames()
        when the value is changed. This allows us to generate 10 more settings. As a follow up, we
        can remove some methods from DRT/WTR after this.

        No new tests, this is a build refactor and should not impact any test results.

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Remove member variables. Add SETTINGS_SETTER_BODIES macro that
        has the generated setter bodies.
        * page/Settings.h:
        (Settings): Remove code that is now generated.
        * page/Settings.in: Add new entries with setNeedsStyleRecalcWhenSetting=1
        * page/make_settings.pl:
        (defaultItemFactory): Add setNeedsStyleRecalcWhenSetting flag.
        (generateSettingsMacrosHeader): Print macro for setter bodies.
        (printConditionalMacros): Add setter body code.
        (printGettersAndSetters): Pass in setNeedsStyleRecalcWhenSetting so we know whether to inline the
        setter in the header or not.
        (printGetterAndSetter): Ditto.
        (printSetterBodies): Print macro for setter bodies.
        (printSetterBody): Print setter body for a single setting.

2013-02-21  Dean Jackson  <dino@apple.com>

        Plug-in snapshotting code always accepts first snapshot
        https://bugs.webkit.org/show_bug.cgi?id=110495

        Reviewed by Tim Horton.

        When we detect a plugin that can be snapshotted we start capturing
        images until we find one that we believe isn't blank, or we timeout.
        I introduced a regression recently where we swap renderers as
        soon as the snapshot arrives, whether or not is is blank.

        The fix was to have the embedder (currently only WK2) be the one
        who tells the HTMLPlugInElement to start displaying snapshots.

        I also reduced the number of snapshot attempts we will make before
        giving up. We don't want to sit around for 66 seconds displaying nothing.

        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::setDisplayState): Make this a virtual function.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::setDisplayState): Override to call the
            base class version, but swap renderers if we should move to the snapshot.
        (WebCore::HTMLPlugInImageElement::updateSnapshot): Don't swap renderers here any more.
        * html/HTMLPlugInImageElement.h: New virtual version of setDisplayState.

2013-02-21  Tony Gentilcore  <tonyg@chromium.org>

        Tune BackgroundHTMLParser's pendingTokenLimit based on a benchmark
        https://bugs.webkit.org/show_bug.cgi?id=110408

        Reviewed by Adam Barth.

        This constant was tuned by running the top 25 sites in Telemetry on a Nexus 7 device.
        The new value decreases the maximum time spent parsing by 40% without significantly impacting total parse time or DOMContentLoaded.

        No new tests because no new functionality.

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

2013-02-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143419.
        http://trac.webkit.org/changeset/143419
        https://bugs.webkit.org/show_bug.cgi?id=110507

        Broke border-image on Mac (Requested by jpfau on #webkit).

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (Image):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):

2013-02-21  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor should block pages by redirecting to a sandboxed data: URL.
        https://bugs.webkit.org/show_bug.cgi?id=110406

        Reviewed by Adam Barth.

        Patch originally by mkwst@chromium.org. 
        Tests: http/tests/security/xssAuditor/block-does-not-leak-location.html
               http/tests/security/xssAuditor/block-does-not-leak-referrer.html
               http/tests/security/xssAuditor/full-block-script-tag-cross-domain.html

        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
            When blocking entire pages via the XSSAuditor, redirect to a data:
            URL to ensure that requests for properties don't leak information.
        
2013-02-21  Christian Biesinger  <cbiesinger@chromium.org>

        Convert buttons from DeprecatedFlexBox to nondeprecated FlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=109994

        Reviewed by Ojan Vafai.

        Covered by existing tests for <button> and <input
        type="button|submit|reset">

        * css/html.css:
        (input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button):
        Convert from box-align to align-items. We are using flex-start here in
        conjunction with an auto margin for correct centering. See
        RenderButton.cpp below for the margin & more explanation.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
        Add a case for creating a non-deprecated flex box.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::RenderButton):
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::removeChild):
        Forward to new base class
        (WebCore::RenderButton::styleWillChange):
        (WebCore::RenderButton::setupInnerStyle):
        We are now using flexbox properties.
        - min-width is needed for correct shrinking of the contents
        - margin-top and margin-bottom are used for correct centering. We
        can't use align-items: center because results are incorrect when the
        content overflows. See LayoutTests/fast/forms/control-clip.html

        * rendering/RenderButton.h:
        Inherit from RenderFlexibleBox

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::createAnonymous):
        (WebCore):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):
        Add a createAnonymous function to RenderFlexibleBox.

2013-02-21  John Mellor  <johnme@chromium.org>

        [chromium] Simplify computation of screenRect/windowRect.
        https://bugs.webkit.org/show_bug.cgi?id=110456

        Reviewed by Adam Barth.

        This patch removes applyDeviceScaleFactorInCompositor checks
        added by http://trac.webkit.org/changeset/139356 because
        Chrome for Android now sizes its screen and window in DIP
        units (like other platforms), so they are no longer necessary.

        No new tests, since this is just removing an unused codepath.

        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processSubtree):

2013-02-21  Beth Dakin  <bdakin@apple.com>

        Out-of-view fixed position check should not be affected by page scale at all on Mac
        https://bugs.webkit.org/show_bug.cgi?id=110294
        -and corresponding-
        <rdar://problem/13247582>

        Reviewed by Simon Fraser.

        Don't scale the layerBounds. Generally, the layerBounds should be relative to the 
        viewBounds which are also unscaled. Chromium used to want this behavior, but it is 
        covered by their pageScaleFactorAppliedInCompositor implementation now.

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

2013-02-21  Philip Rogers  <pdr@google.com>

        Stop starting animations when leaving a page
        https://bugs.webkit.org/show_bug.cgi?id=110257

        Reviewed by Stephen Chenney.

        SVGImage::resetAnimation() incorrectly started animations which could cause a crash
        when leaving the page. This patch fixes resetAnimation to only stop the animation,
        similar to BitmapImage::resetAnimation().

        Additionally, this patch removes an unneeded call to Document::updateStyleForAllDocuments()
        that was present in the animation loop. This makes the animation code more resistant to
        similar bugs in the future.

        Both of these changes are functionally covered with existing tests.

        Test: svg/animations/reset-animation-crash.html

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::resetAnimation):

2013-02-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        Objective-C API: Need a way to use the Objective-C JavaScript API with WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106059

        Reviewed by Geoffrey Garen.

        * WebCore.exp.in:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow): Since we're basically abandoning a JSDOMWindow here, we call
        garbageCollectSoon().
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/ScriptController.h: New function to get the JSContext for the global object of the current main world.
        * bindings/js/ScriptControllerMac.mm: 
        (WebCore::ScriptController::javaScriptContext): Ditto.
        * bindings/objc/WebScriptObject.h: Added ifdef guards. Also new convenience conversion function for the JSC Obj-C API.
        * bindings/objc/WebScriptObject.mm: JSC::JSValue and JSValue conflict with one another, so we have to be more specific.
        (-[WebScriptObject _globalContextRef]): Useful helper function for getting the JSGlobalContextRef of a particular WebScriptObject.
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        (-[WebScriptObject JSValue]): Implementation of convenience WebScriptObject conversion function to new Objective-C API.
        * bindings/objc/WebScriptObjectPrivate.h:

2013-02-21  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename add{Node,Object}ToGroup() to add{Node,Object}WrapperToGroup()
        https://bugs.webkit.org/show_bug.cgi?id=110404

        Reviewed by Adam Barth.

        The current function name is confusing
        (See discussion in bug 110396). We should rename the functions
        so that it becomes clear that "Node"/"Object" refers to a type
        of a wrapper in the second argument.

        No tests. No change in behavior.

        * bindings/v8/V8GCController.cpp:
        (WebCore::WrapperGrouper::addObjectWrapperToGroup):
        (WebCore::WrapperGrouper::addNodeWrapperToGroup):

2013-02-21  Vivek Galatage  <vivek.vg@samsung.com>

        [JS Binding] ScriptObject default constructor should initialize the Script State to 0
        https://bugs.webkit.org/show_bug.cgi?id=110177

        Reviewed by Geoffrey Garen.

        Adding the initialization of ScriptState to 0.

        * bindings/js/ScriptObject.h:
        (WebCore::ScriptObject::ScriptObject):

2013-02-21  Nate Chapin  <japhet@chromium.org>

        REGRESSION: Crash in MainResourceLoader::setDataBufferingPolicy when sharing an html5 video via email
        https://bugs.webkit.org/show_bug.cgi?id=110075

        Reviewed by Alexey Proskuryakov.

        Test: webarchive/loading/video-in-webarchive.html

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy): isStopping()
            isn't accurate to determine whether a SubstituteData load should
            continue, as this point in the code shouldn't be reachable from any point
            where isStopping() would return true. DocumentLoader might have completely
            stopped and believe that MainResourceLoader is complete, though. Don't
            continue in that case. 
        (WebCore::MainResourceLoader::setDataBufferingPolicy): m_resource can be null
            in a reasonable case, handle it rather than asserting that it can't be null.

2013-02-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143616.
        http://trac.webkit.org/changeset/143616
        https://bugs.webkit.org/show_bug.cgi?id=110491

        Caused a test failure on Chromium Mac. (Requested by vollick
        on #webkit).

        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:
        (FrameView):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):

2013-02-21  Robert Hogan  <robert@webkit.org>

        Overflow can be cleared just before it is computed
        https://bugs.webkit.org/show_bug.cgi?id=110361

        Reviewed by David Hyatt.

        Overflow can be cleared just before it is computed in a lot of places because overflow computation happens all at once
        now rather than cumulatively during layout. Any object that doesn't use computeOverflow() will still need to clear it manually
        though.

        No new tests, refactoring.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):

2013-02-21  Alok Priyadarshi  <alokp@chromium.org>

        Mark GraphicsLayers as opaque when possible
        https://bugs.webkit.org/show_bug.cgi?id=70634

        Reviewed by Simon Fraser.

        Mark layers as opaque in a very simple case - the main renderer has an
        opaque background and covers the entire composited bounds.
        RenderLayer::contentsOpaqueInRect has been implemented conservatively,
        i.e. it errs towards returning false negative.

        Tests: compositing/contents-opaque/contents-opaque-background-clip.html
               compositing/contents-opaque/contents-opaque-background-color.html
               compositing/contents-opaque/contents-opaque-layer-opacity.html
               compositing/contents-opaque/contents-opaque-layer-transform.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::backgroundIsOpaqueInRect):
        (WebCore):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::backgroundIsOpaqueInRect):
        (WebCore::RenderBoxModelObject::foregroundIsOpaqueInRect):
        (RenderBoxModelObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::contentsOpaqueInRect):
        (WebCore):
        (WebCore::RenderLayer::listContentsOpaqueInRect):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerModelObject.h:
        (RenderLayerModelObject):

2013-02-21  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Implement grid growth during auto placement
        https://bugs.webkit.org/show_bug.cgi?id=110418

        Reviewed by Ojan Vafai.

        This change implements the last remaining piece of the auto placement algorithm:
        growing the grid mid-placement. With that landed, we should handle all cases properly.

        Change covered by : fast/css-grid-layout/grid-item-addition-auto-placement.html
                            fast/css-grid-layout/grid-item-removal-auto-placement.html


        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::growGrid):
        Added this helper function to grow the grid one item in a direction.

        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        Updated this function to grow in the minor axis direction and insert in the
        newly created grid area.

        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        Updated this function to grow in the major axis direction and insert in the
        newly create grid area. Unfortunately this code cannot use the iterator to find
        the new position as the (auto, auto) case iterates orthogonally to the major axis
        direction, which we just grew.

        * rendering/RenderGrid.h:
        Added growGrid.

2013-02-21  Martin Robinson  <mrobinson@igalia.com>

        A couple more 'make dist' fixes for WebKitGTK+.

        * GNUmakefile.list.am: Add a missing file to the source list.

2013-02-21  Andrei Bucur  <abucur@adobe.com>

        -webkit-margin-collapse: separate doesn't work correctly for before margins
        https://bugs.webkit.org/show_bug.cgi?id=109956

        Reviewed by David Hyatt.

        The collapsing code for "-webkit-margin-collapse: separate" assumed the margin value inside
        marginInfo always contributes to the position of the child. This is valid only if the collapse
        doesn't happen at the before side of the container. In that case, the child needs to be positioned 
        at the margin value specified in the style sheet.

        Test: fast/block/margin-collapse/webkit-margin-collapse-separate-position.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):

2013-02-21  Tien-Ren Chen  <trchen@chromium.org>

        Need to re-layout fixed position elements after scale when using settings()->fixedElementsLayoutRelativeToFrame()
        https://bugs.webkit.org/show_bug.cgi?id=105486

        Reviewed by James Robinson.

        In settings()->fixedElementsLayoutRelativeToFrame() mode, fixed-position
        elements are layout relative to the current visible viewport, which can
        be different from the layout viewport when using fixed-layout mode.
        We need to re-layout fixed-position elements in case of visible content
        size changes.

        The test is currently chromium-specific due to difficulties to make this
        test works on Mac. The mac port seems to work very differently with
        visible content size when a page is scaled. And there is no reliable way
        to hide scrollbars in mac-wk1 that doesn't cause a side effect.

        Test: platform/chromium/fast/repaint/relayout-fixed-position-after-scale.html

        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:
        (FrameView):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):

2013-02-21  Xan Lopez  <xlopez@rim.com>

        [BlackBerry] LayerFilterRenderer: fix inclusion of Vector.h
        https://bugs.webkit.org/show_bug.cgi?id=110476

        Reviewed by Rob Buis.

        Added in r124242. The include line should be wtf/Vector.h

        * platform/graphics/blackberry/LayerFilterRenderer.cpp:

2013-02-21  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Remove unneeded layout method in RenderMultiColumnFlowThread.
        https://bugs.webkit.org/show_bug.cgi?id=110477.

        Reviewed by Antti Koivisto.

        I forgot that both the sets and the flow thread lay out before the containing
        RenderMultiColumnBlock has finished. That means it hasn't computed its overflow yet.
        Therefore there is no need to force it to compute its overflow from inside
        RenderMultiColumnFlowThread::layout, because the minute RenderMultiColumnFlowThread
        finishes its layout, the block will compute its overflow anyway.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore):
        * rendering/RenderMultiColumnFlowThread.h:
        (RenderMultiColumnFlowThread):

2013-02-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Move feature overriding to the configure phase
        https://bugs.webkit.org/show_bug.cgi?id=110293

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: No longer include GNUmakefile.features.am. We don't
        have to process the result of this file or do any modification of
        feature_defines_override, because this variable is gone.

2013-02-21  Andrey Adaikin  <aandrey@chromium.org>

        Unreviewed. Rolling out an unindented change from r143580.

        * inspector/Inspector.json:

2013-02-21  Andreas Kling  <akling@apple.com>

        GlyphPage: Bake per-glyph font data array into same allocation as GlyphPage.

        A hopeful fix for REGRESSION(r143125): ~5% performance hit on Chromium's intl2 page cycler
        <http://webkit.org/b/108835>

        Reviewed by Antti Koivisto.

        Rewire GlyphPage so that we have to decide at creation time whether there will be a per-glyph
        array of SimpleFontData* or not. This removes one allocation and one step of indirection for
        pages with glyphs from mixed fonts.

        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::createForMixedFontData):
        (WebCore::GlyphPage::createForSingleFontData):
        (WebCore::GlyphPage::createCopiedSystemFallbackPage):
        (WebCore::GlyphPage::~GlyphPage):
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::fontDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        (WebCore::GlyphPage::removeFontDataFromSystemFallbackPage):
        (WebCore::GlyphPage::GlyphPage):
        (WebCore::GlyphPage::hasPerGlyphFontData):
        (GlyphPage):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):

2013-02-21  Xan Lopez  <xlopez@rim.com>

        [BlackBerry] MediaPlayerPrivateBlackBerry: include Logging.h
        https://bugs.webkit.org/show_bug.cgi?id=110455

        Reviewed by Eric Carlson.

        LOG is used in this file, so it is needed.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:

2013-02-21  Keishi Hattori  <keishi@webkit.org>

        Add animation class for new calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=110132

        Reviewed by Kent Tamura.

        Adding animation related classes as part of the calendar picker
        redesign(Bug 109439).

        No new tests. Code is not used yet.

        * Resources/pagepopups/calendarPicker.js:
        (AnimationTimingFunction.Linear): Parameter t should be a number between 0 and 1.
        (AnimationTimingFunction.EaseInOut): Ditto.
        (AnimationManager): All animators are managed by this class so we
        can dispatch "animationFrameWillFinish" event after all the updates.
        (AnimationManager.prototype._startAnimation):
        (AnimationManager.prototype._stopAnimation):
        (AnimationManager.prototype.add): Adds an animator to the list of running animators.
        (AnimationManager.prototype.remove): Removes an animator.
        (AnimationManager.prototype._animationFrameCallback): Callback for requestAnimationFrame.
        (AnimationManager.prototype._needsAnimationFrame): Returns true if we should request the next animation frame.
        (AnimationManager.prototype.on): If we add a callback, request animation frame.
        (AnimationManager.prototype.removeListener):
        (Animator): Animates between the from value and to value.
        (Animator.prototype.setFrom): Sets the from value.
        (Animator.prototype.setTo): Sets the to value.
        (Animator.prototype.start):
        (Animator.prototype.stop):
        (Animator.prototype.onAnimationFrame): Called by AnimationManager.

2013-02-21  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] UI: more intuitive control buttons
        https://bugs.webkit.org/show_bug.cgi?id=110327

        Reviewed by Pavel Feldman.

        Tweaks to the CanvasProfiler replay control buttons.
        - NextDrawCall forward button (StepOver) should jump up to the last expanded node, otherwise a noop is not intuitive unless the last node is selected.
        - NextDrawCall/PrevDrawCall buttons should not skip draw call nodes themselves.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView.prototype._onReplayDrawingCallClick):

2013-02-21  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Make SpellCheckRequest's constructor private.
        https://bugs.webkit.org/show_bug.cgi?id=110462

        Reviewed by Antonio Gomes.

        It's no need to expose SpellCheckRequest's constructor.
        There is SpellCheckRequest::create() method which is
        responsible for creating SpellCheckRequest object.

        No new tests, no behavior change.

        * editing/SpellChecker.h:
        (SpellCheckRequest):

2013-02-21  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] Remove arrays of DataGrid nodes from the View
        https://bugs.webkit.org/show_bug.cgi?id=110325

        Reviewed by Pavel Feldman.

        Remove arrays of DataGrid nodes from the CanvasProfileView and use live DataGrid instead.
        This is a prerequisite to support a non-fixed layered tree in the grid (for example, to hide
        a single frame group node, or to combine several draw call groups into a pattern group).
        Drive-by: added an assert to injected canvas module.

        * inspector/InjectedScriptCanvasModuleSource.js:
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype.dispose):
        (WebInspector.CanvasProfileView.prototype._didReceiveTraceLog):
        (WebInspector.CanvasProfileView.prototype._requestTraceLog):
        (WebInspector.CanvasProfileView.prototype._selectedCallIndex):
        (WebInspector.CanvasProfileView.prototype._peekLastRecursively):
        (WebInspector.CanvasProfileView.prototype._appendCallNodes):
        (WebInspector.CanvasProfileView.prototype.):
        (WebInspector.CanvasProfileView.prototype.splitDrawCallGroup):
        (WebInspector.CanvasProfileView.prototype._appendCallNodesToFrameNode):

2013-02-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Local/session storage tree items in the Resources panel after page refresh are not shown
        Re-landing r143581 with a build fix for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=109572

        Reviewed by Vsevolod Vlasov.

        This is a complete rework of the DOMStorage domain of the Web Inspector protocol. The most notable changes:
        - Session and local DOM storages are considered to implicitly exist for each SecurityOrigin in the page
          (previously, only those that were lazily created by DOMWindow would exist).
        - Consequently, the addDOMStorage event is gone.
        - StorageId is now an object rather than an opaque numeric identifier.
        - DOM storage modifiers no longer return a boolean indicating if the operation was successful.
          Clients should rely on the returned error message instead.

        Implementation changes:
        - InspectorDOMStorageResource would rely on the frame for which it was created throughout its lifetime.
          As such, the frame removal from the page would break the respective DOM storage inspection.
          Since this concept was entirely flawed, InspectorDOMStorageResource has been removed. Instead, a StorageArea
          is retrieved based on the security origin specified by the client.
        - DOM storages can now be dynamically removed (upon the respective SecurityOrigin removal) in the frontend.

        * CMakeLists.txt: Remove InspectorDOMStorageResource.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.order: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/WebCoreMemoryInstrumentation.cpp: Ditto.
        * dom/WebCoreMemoryInstrumentation.h: Ditto.
        * inspector/InjectedScriptSource.js: Account for the structured StorageId.
        * inspector/Inspector.json: Update structures and API methods.
          Do not return boolean success flag and make use of the error message instead.
        * inspector/InspectorAllInOne.cpp: Remove InspectorDOMStorageResource.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController): Add InspectorPageAgent into InspectorDOMStorageAgent.
        * inspector/InspectorDOMStorageAgent.cpp: Mostly remove InspectorDOMStorageResource usages.
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::clearFrontend):
        (WebCore::InspectorDOMStorageAgent::isEnabled):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems): Renamed.
        (WebCore::toErrorString): Stringify ExceptionCode.
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::storageId): Make it structured rather than a plain string.
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        (WebCore::InspectorDOMStorageAgent::findStorageArea): Added.
        (WebCore::InspectorDOMStorageAgent::reportMemoryUsage): Remove InspectorDOMStorageResource map.
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create): Update signature.
        (InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageResource.cpp: Removed.
        * inspector/InspectorDOMStorageResource.h: Removed.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl): Do not call the removed clearResources().
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::findFrameWithSecurityOrigin): Added.
        * inspector/InspectorPageAgent.h:
        (InspectorPageAgent):
        * inspector/front-end/DOMStorage.js: Entirely reworked to use the SecurityOriginAdded/Removed events.
        (WebInspector.DOMStorage):
        (WebInspector.DOMStorage.storageId):
        (WebInspector.DOMStorage.prototype.get id):
        (WebInspector.DOMStorage.prototype.get securityOrigin):
        (WebInspector.DOMStorage.prototype.getItems):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        (WebInspector.DOMStorageModel):
        (WebInspector.DOMStorageModel.prototype._securityOriginAdded):
        (WebInspector.DOMStorageModel.prototype._securityOriginRemoved):
        (WebInspector.DOMStorageModel.prototype._storageKey):
        (WebInspector.DOMStorageModel.prototype._domStorageItemsCleared):
        (WebInspector.DOMStorageModel.prototype._domStorageItemRemoved):
        (WebInspector.DOMStorageModel.prototype._domStorageItemAdded):
        (WebInspector.DOMStorageModel.prototype.storageForId):
        (WebInspector.DOMStorageModel.prototype.storages):
        * inspector/front-end/DOMStorageItemsView.js: Rename Entries -> Items to avoid confusion.
        (WebInspector.DOMStorageItemsView.prototype._update):
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageItems):
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageItems):
        * inspector/front-end/ResourcesPanel.js: Follow the updated DOMStorage model.
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype._initialize):
        (WebInspector.ResourcesPanel.prototype._domStorageAdded):
        (WebInspector.ResourcesPanel.prototype._domStorageRemoved):
        (WebInspector.ResourcesPanel.prototype._populateDOMStorageTree):
        (WebInspector.DOMStorageTreeElement):
        (WebInspector.DOMStorageTreeElement.prototype.get itemURL):
        * page/DOMWindow.cpp: Remove instrumentation calls.
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):

2013-02-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files to compilation.

2013-02-21  Alberto Garcia  <albgarcia@rim.com>

        [BlackBerry] Fix access to ResourceHandle::context
        https://bugs.webkit.org/show_bug.cgi?id=110443

        Reviewed by Carlos Garcia Campos.

        This changed in r141981.

        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::ResourceHandle::start):

2013-02-21  Alberto Garcia  <albgarcia@rim.com>

        [BlackBerry] GraphicsLayerBlackBerry: rename showDebugBorder to isShowingDebugBorder
        https://bugs.webkit.org/show_bug.cgi?id=110453

        Reviewed by Carlos Garcia Campos.

        This changed in r133517.

        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp:
        (WebCore::GraphicsLayerBlackBerry::setupContentsLayer):

2013-02-21  Peter Rybin  <prybin@chromium.org>

        Web Inspector: take large strings out of CodeGeneratorInspector.py
        https://bugs.webkit.org/show_bug.cgi?id=110159

        Reviewed by Yury Semikhatsky.

        Python script is refactored.

        * inspector/CodeGeneratorInspector.py:
        * inspector/CodeGeneratorInspectorStrings.py: Added.
        (InspectorFrontend_h):
        (InspectorFrontendChannel):
        (InspectorArray):
        (InspectorObject):
        (String):
        (InspectorFrontend):
        (InspectorBackendDispatcher_h):
        (InspectorAgent):
        (InspectorBackendDispatcherImpl):
        (InspectorBackendDispatcher):
        (CallbackBase):
        (void):
        (HashMap):
        (OptOutput):
        (ExactlyInt):
        (RuntimeCastHelper):
        (provides):
        (typename):
        (Array):
        (Builder):

2013-02-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143581.
        http://trac.webkit.org/changeset/143581
        https://bugs.webkit.org/show_bug.cgi?id=110457

        Breaks Windows builds (compile + link) (Requested by apavlov
        on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryTypes):
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::clearFrontend):
        (WebCore::InspectorDOMStorageAgent::restore):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        (WebCore::InspectorDOMStorageAgent::didUseDOMStorage):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        (WebCore::InspectorDOMStorageAgent::clearResources):
        (WebCore::InspectorDOMStorageAgent::reportMemoryUsage):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore):
        (WebCore::InspectorDOMStorageAgent::create):
        (InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageResource.cpp: Added.
        (WebCore):
        (WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):
        (WebCore::InspectorDOMStorageResource::isSameOriginAndType):
        (WebCore::InspectorDOMStorageResource::bind):
        (WebCore::InspectorDOMStorageResource::unbind):
        (WebCore::InspectorDOMStorageResource::reportMemoryUsage):
        * inspector/InspectorDOMStorageResource.h: Added.
        (WebCore):
        (InspectorDOMStorageResource):
        (WebCore::InspectorDOMStorageResource::create):
        (WebCore::InspectorDOMStorageResource::id):
        (WebCore::InspectorDOMStorageResource::storageArea):
        (WebCore::InspectorDOMStorageResource::frame):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::didUseDOMStorageImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::didUseDOMStorage):
        (WebCore):
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        (InspectorPageAgent):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage):
        (WebInspector.DOMStorage.prototype.get id):
        (WebInspector.DOMStorage.prototype.get domain):
        (WebInspector.DOMStorage.prototype.getEntries):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        (WebInspector.DOMStorageModel):
        (WebInspector.DOMStorageModel.prototype._addDOMStorage):
        (WebInspector.DOMStorageModel.prototype._domStorageItemsCleared):
        (WebInspector.DOMStorageModel.prototype._domStorageItemRemoved):
        (WebInspector.DOMStorageModel.prototype._domStorageItemAdded):
        (WebInspector.DOMStorageModel.prototype.storageForId):
        (WebInspector.DOMStorageModel.prototype.storages):
        (WebInspector.DOMStorageDispatcher.prototype.addDOMStorage):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._update):
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype._initialize):
        (WebInspector.ResourcesPanel.prototype._domStorageAdded):
        (WebInspector.ResourcesPanel.prototype._addDOMStorage):
        (WebInspector.DOMStorageTreeElement):
        (WebInspector.DOMStorageTreeElement.prototype.get itemURL):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):

2013-02-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Get rid of parsedURL in uiSourceCode, use name and path for displayName instead.
        https://bugs.webkit.org/show_bug.cgi?id=110335

        Reviewed by Alexander Pavlov.

        Replaced UISourceCode.parsedURL with UISourceCode.displayName().

        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype._updateScriptTitle):
        (WebInspector.NavigatorView.prototype.getOrCreateFolderTreeElement):
        (WebInspector.NavigatorFolderTreeElement):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.displayNameForURL):
        * inspector/front-end/RevisionHistoryView.js:
        (WebInspector.RevisionHistoryView.prototype._createUISourceCodeItem):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.displayName):
        (WebInspector.UISourceCode.prototype.urlChanged):

2013-02-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Local/session storage tree items in the Resources panel after page refresh are not shown
        https://bugs.webkit.org/show_bug.cgi?id=109572

        Reviewed by Vsevolod Vlasov.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryTypes):
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::clearFrontend):
        (WebCore::InspectorDOMStorageAgent::isEnabled):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::toErrorString):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        (WebCore::InspectorDOMStorageAgent::reportMemoryUsage):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore):
        (WebCore::InspectorDOMStorageAgent::create):
        (InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageResource.cpp: Removed.
        * inspector/InspectorDOMStorageResource.h: Removed.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::findFrameWithSecurityOrigin):
        (WebCore):
        * inspector/InspectorPageAgent.h:
        (InspectorPageAgent):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage):
        (WebInspector.DOMStorage.storageId):
        (WebInspector.DOMStorage.prototype.get id):
        (WebInspector.DOMStorage.prototype.get securityOrigin):
        (WebInspector.DOMStorage.prototype.getItems):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        (WebInspector.DOMStorageModel):
        (WebInspector.DOMStorageModel.prototype._securityOriginAdded):
        (WebInspector.DOMStorageModel.prototype._securityOriginRemoved):
        (WebInspector.DOMStorageModel.prototype._storageKey):
        (WebInspector.DOMStorageModel.prototype._domStorageItemsCleared):
        (WebInspector.DOMStorageModel.prototype._domStorageItemRemoved):
        (WebInspector.DOMStorageModel.prototype._domStorageItemAdded):
        (WebInspector.DOMStorageModel.prototype.storageForId):
        (WebInspector.DOMStorageModel.prototype.storages):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._update):
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageItems):
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageItems):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype._initialize):
        (WebInspector.ResourcesPanel.prototype._domStorageAdded):
        (WebInspector.ResourcesPanel.prototype._domStorageRemoved):
        (WebInspector.ResourcesPanel.prototype._populateDOMStorageTree):
        (WebInspector.DOMStorageTreeElement):
        (WebInspector.DOMStorageTreeElement.prototype.get itemURL):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):

2013-02-19  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Console] Add console API message types for profile/profileEnd.
        https://bugs.webkit.org/show_bug.cgi?id=109790

        Reviewed by Pavel Feldman.

        With profile/profileEnd message types we will gain more control over
        output messages.

        * English.lproj/localizedStrings.js: Added corresponging strings.
        * inspector/ConsoleAPITypes.h: Added enum members.
        * inspector/Inspector.json: Ditto.
        * inspector/front-end/ConsoleModel.js: Ditto.
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageTypeValue): Added cases.
        * inspector/InspectorProfilerAgent.cpp: Adopted changes.
        * inspector/front-end/inspector.js: Ditto.
        * inspector/front-end/ConsoleMessage.js:
        Added message generators for introduced message types.
        * inspector/front-end/ProfilesPanel.js:
        Turned showProfileForURL(url) to showProfile(typeId, uid).
        * inspector/front-end/ProfilesPanelDescriptor.js:
        (WebInspector.ProfilesPanelDescriptor.resolveProfileTitle): Added.
        * inspector/front-end/ResourceUtils.js: Removed linkifier plugins.

2013-02-21  Tamas Czene  <tczene@inf.u-szeged.hu>

        OpenCL implementation of FEMerge filter.
        https://bugs.webkit.org/show_bug.cgi?id=110193

        Reviewed by Zoltan Herczeg.

        In case of odd number of parameters the first parameter is copied to the destination image and
        the rest of the parameters are merged in pairs.

        * Target.pri:
        * platform/graphics/filters/FEMerge.h:
        (FEMerge):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.h:
        (WebCore::FilterContextOpenCL::FilterContextOpenCL):
        (FilterContextOpenCL):
        * platform/graphics/gpu/opencl/OpenCLFEMerge.cpp: Added.
        (WebCore):
        (WebCore::FilterContextOpenCL::compileFEMerge):
        (WebCore::FilterContextOpenCL::copy): This is a simple copy method.
        (WebCore::FilterContextOpenCL::applyFEMerge):
        (WebCore::FEMerge::platformApplyOpenCL):

2013-02-21  Keishi Hattori  <keishi@webkit.org>

        Add event dispatch class for the new calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=110131

        Reviewed by Kent Tamura.

        Adding event dispatcher class as part of the new calendar picker patch at Bug 109439.

        No new tests. Code is not yet used.

        * Resources/pagepopups/calendarPicker.js:
        (EventEmitter):
        (EventEmitter.prototype.on): Adds a callback for an event.
        (EventEmitter.prototype.hasListener): Returns true if more than one listeners exist for an event type.
        (EventEmitter.prototype.removeListener): Removes an event listener.
        (EventEmitter.prototype.dispatchEvent): Dispatches an event to all callbacks. Takes variable number of arguments.

2013-02-21  Ken Kania  <kkania@chromium.org>

        Web Inspector: Add command for selecting files for file input element
        https://bugs.webkit.org/show_bug.cgi?id=109308

        Reviewed by Pavel Feldman.

        Test: inspector-protocol/dom/setFileInputFiles.html

        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::canSetFileInputFiles):
        (InspectorClient):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFileInputFiles):
        (WebCore):
        * inspector/InspectorDOMAgent.h:
        (WebCore):
        (WebCore::InspectorDOMAgent::create):
        (InspectorDOMAgent):

2013-02-21  Pan Deng  <pan.deng@intel.com>

        [Web Inspector]Add WebSocket networking events in Timeline panel.
        https://bugs.webkit.org/show_bug.cgi?id=105527.

        Reviewed by Pavel Feldman.

        This patch add four WebSocket networking events in Timeline panel. The Events
        are CreateWebSocket, SendWebSocketHandshakeRequest, ReceiveWebSocketHandShakeResponse
        and DestoryWebSocket. Thanks to Kitamura san's previous work.

        Test: http/tests/inspector/websocket/timeline-websocket-event.html

        * English.lproj/localizedStrings.js:
        * Modules/websockets/WebSocketChannel.cpp: Add protocol information
        (WebCore::WebSocketChannel::connect):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl): Add Timeline agent instrumentation for websocket
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl): Ditto
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl): Ditto
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl): Ditto
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        * inspector/InspectorTimelineAgent.cpp:
        (TimelineRecordType):
        (WebCore):
        (WebCore::InspectorTimelineAgent::didCreateWebSocket): Add Timeline record for websocket create
        (WebCore::InspectorTimelineAgent::addWebSocketRecord): Add general websocket record
        (WebCore::InspectorTimelineAgent::willSendWebSocketHandshakeRequest): Add Timeline record for websocket handshake request send
        (WebCore::InspectorTimelineAgent::didReceiveWebSocketHandshakeResponse): Add Timeline record for websocket handshake response receive
        (WebCore::InspectorTimelineAgent::didDestroyWebSocket): Add Timeline record for websocket destroy
        * inspector/InspectorTimelineAgent.h:
        (WebCore):
        (InspectorTimelineAgent):
        * inspector/TimelineRecordFactory.h:
        (TimelineRecordFactory):
        (WebCore::TimelineRecordFactory::createWebSocketCreateData):
        (WebCore::TimelineRecordFactory::createGenericWebSocketData):
        * inspector/front-end/TimelineModel.js: Add Timeline record type for websocket
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel._initRecordStyles):
        (WebInspector.TimelinePresentationModel.prototype.reset): Add slot to store WebSocket Create record
        (WebInspector.TimelinePresentationModel.Record):
        (WebInspector.TimelinePresentationModel.Record.prototype._generatePopupContentWithImagePreview): Add PopupContent for websocket record, including url and protocol

2013-02-21  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] Fix pkg-config dependencies of QtWebKit itself

        Reviewed by Simon Hausmann.

        Don't override QMAKE_PKGCONFIG_REQUIRES needlessly.

        * WebCore.pri:

2013-02-21  Nils Barth  <nbarth@google.com>

        File upload control doesn't apply CSS vertical padding or border to file name
        https://bugs.webkit.org/show_bug.cgi?id=109011

        Reviewed by Hajime Morrita.

        Test: fast/forms/file/file-vertical-padding-border.html

        * rendering/RenderFileUploadControl.cpp:
            Add borderTop() and paddingTop() when computing position.
        (WebCore::RenderFileUploadControl::paintObject):

2013-02-20  Alexey Proskuryakov  <ap@apple.com>

        Stop hardcoding knowledge about blob protocol in ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=110382

        Reviewed by Anders Carlsson.

        * platform/network/BlobRegistry.h:
        * platform/network/chromium/BlobRegistryProxy.h:
        Removed loadResourceSynchronously(). Chromium did not even implement it, and
        cross-platform code doesn't need it any more either.

        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::loadResourceSynchronously): A function to load a blob synchronously,
        suitable for being in a ResourceHandle map.
        (WebCore::registerBlobResourceHandleConstructor): Register loadResourceSynchronously too.
        (WebCore::BlobRegistryImpl::createResourceHandle): Don't make policy decisions here,
        it's just a registry. Moved code for checking request method down to BlobResourceHandle.

        * platform/network/BlobRegistryImpl.h: Removed BlobRegistryImpl::loadResourceSynchronously().
        A registry shouldn't load resources, and it already has enough accessors to implement
        this externally.

        * platform/network/BlobResourceHandle.h:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::createAsync): Renamed from create(), to make it clear
        that it's not OK to call from synchronous loader. Moved method check here.
        (WebCore::BlobResourceHandle::loadResourceSynchronously): Moved method check here.
        We used to fall through to NSURLConnection based loader when method was not GET,
        which of course resulted in an error eventually, but was just wrong.

        * platform/network/ResourceHandle.cpp:
        (WebCore::builtinResourceHandleSynchronousLoaderMap): Added a map for synchronous case.
        (WebCore::ResourceHandle::registerBuiltinSynchronousLoader): Ditto.
        (WebCore::ResourceHandle::loadResourceSynchronously): We no longer need to hardcode
        knowledge about blobRegistry and blobs here.

        * platform/network/ResourceHandle.h: Added registerBuiltinSynchronousLoader().

        * platform/network/chromium/ResourceHandle.h: Removed loadResourceSynchronously(),
        which was not implemented for Chromium.

2013-02-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TabbedEditorContainer and OpenResourceDialog should show uiSourceCode path and name instead of parsedURL
        https://bugs.webkit.org/show_bug.cgi?id=110334

        Reviewed by Alexander Pavlov.

        Introduced uiSourceCode.name() that returns a name based on uiSourceCode path.
        OpenResourceDialog now shows uiSourceCode workspace path as a subtitle.
        TabbedEditorContainer now shows uiSourceCode name in the tab header.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.OpenResourceDialog.filterOutEmptyURLs):
        (WebInspector.OpenResourceDialog):
        (WebInspector.OpenResourceDialog.prototype.itemTitleAt):
        (WebInspector.OpenResourceDialog.prototype.itemSubtitleAt):
        (WebInspector.OpenResourceDialog.prototype.itemKeyAt):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype._updateScriptTitle):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype._titleForFile):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.name):

2013-02-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: debugger buttons are scrolled along with the sidebar content.
        https://bugs.webkit.org/show_bug.cgi?id=110434

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/scriptsPanel.css:
        (div.sidebar-pane-stack#scripts-debug-sidebar-contents, #scripts-sidebar-stack-pane):

2013-02-20  Wei James  <james.wei@intel.com>

        ChannelMergerNode may need check for deferred updating of output channels
        https://bugs.webkit.org/show_bug.cgi?id=108863

        There can in rare cases be a slight delay before the output bus is updated
        to the new number of channels because of tryLocks() in the context's
        updating system. So need to check the channel number before processing.

        Reviewed by Chris Rogers.

        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        (WebCore::ChannelMergerNode::process):
        (WebCore::ChannelMergerNode::checkNumberOfChannelsForInput):
        * Modules/webaudio/ChannelMergerNode.h:
        (ChannelMergerNode):

2013-02-20  Pan Deng  <pan.deng@intel.com>

        [Web Inspector] Fix Sort by Initiator functionality of Network Panel.
        https://bugs.webkit.org/show_bug.cgi?id=109135.

        Reviewed by Pavel Feldman.

        A refactor for request initiator types, and the sort by Initiator functionality 
        was changed to sort by url and line number that displayed in initiator cell.

        No new tests.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshInitiatorCell): save initiator displayedURL and displayedLineNumber
        (WebInspector.NetworkDataGridNode.InitiatorComparator):
        * inspector/front-end/NetworkRequest.js:

2013-02-20  Eric Seidel  <eric@webkit.org>

        WebVTTParser copies character buffer more often than necessary
        https://bugs.webkit.org/show_bug.cgi?id=103319

        Reviewed by Eric Carlson.

        Previously this codepath was creating a String just to parse the timestamp
        and then if the timestamp was valid, was creating a second string.
        I've fixed it to only create one string and use it in both places.
        I also fixed this codepath to use 8bit strings when possible, per the FIXME.

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::constructTreeFromToken):

2013-02-20  Mike West  <mkwst@chromium.org>

        Mouseup event does not fire on Scroll Bar
        https://bugs.webkit.org/show_bug.cgi?id=25811

        Reviewed by Tony Chang.

        Currently, clicking on a scrollbar fires a mousedown event, but not a
        mouseup event. This causes problems for code like jQuery UI's
        draggable[1], as the drag starts, but is never cancelled. Other use
        cases are noted in the slightly old Chromium bug[2].

        If a mouseup event is received after a mousedown event on a scrollbar,
        this patch dispatches a mouseup event on the same node the mousedown
        event dispatched on. This matches Gecko's behavior.

        [1]: http://bugs.jqueryui.com/ticket/6925
        [2]: http://crbug.com/14204

        Tests: fast/scrolling/scrollbar-mousedown-mouseup.html
               fast/scrolling/scrollbar-mousedown-move-mouseup.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):
            If a mouseup event follow a mousedown event on a scrollbar,
            dispatch an event on the same node from which the mousedown event
            was triggered.

2013-02-20  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] Make m_state an on-stack object
        https://bugs.webkit.org/show_bug.cgi?id=109909

        Reviewed by Antti Koivisto.

        Mode m_state, an instance of StyleResolver::State, an on-stack object.
        The state is only required in styleForElement, styleForKeyframe and
        so on. No need to keep the state outside of those methods.

        No new tests, because just refactoring.

        * css/BasicShapeFunctions.cpp:
        (WebCore::convertToLength):
        (WebCore::basicShapeForValue):
        * css/BasicShapeFunctions.h:
        (WebCore):
        Replaced StyleResolver* with StyleResolver::State&.
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::gradientWithStylesResolved):
        * css/CSSGradientValue.h:
        (CSSGradientValue):
        Replaced StyleResolver* with StyleResolver::State&.
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::style):
        (WebCore::CSSToStyleMap::rootElementStyle):
        (WebCore::CSSToStyleMap::useSVGZoomRules):
        (WebCore::CSSToStyleMap::styleImage):
        * css/CSSToStyleMap.h:
        (WebCore):
        (WebCore::CSSToStyleMap::CSSToStyleMap):
        (CSSToStyleMap):
        Replaced StyleResolver* with StyleResolver::State&.
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        Replaced m_state with state which is given as an argument of
        applySVGProperty.
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyExpanding::applyInheritValue):
        (WebCore::ApplyPropertyExpanding::applyInitialValue):
        (WebCore::ApplyPropertyExpanding::applyValue):
        (WebCore::ApplyPropertyDefaultBase::applyInheritValue):
        (WebCore::ApplyPropertyDefaultBase::applyInitialValue):
        (WebCore::ApplyPropertyDefaultBase::applyValue):
        (WebCore::ApplyPropertyDefault::applyValue):
        (WebCore::ApplyPropertyNumber::applyValue):
        (WebCore::ApplyPropertyStyleImage::applyValue):
        (WebCore::ApplyPropertyAuto::applyInheritValue):
        (WebCore::ApplyPropertyAuto::applyInitialValue):
        (WebCore::ApplyPropertyAuto::applyValue):
        (WebCore::ApplyPropertyClip::convertToLength):
        (WebCore::ApplyPropertyClip::applyInheritValue):
        (WebCore::ApplyPropertyClip::applyInitialValue):
        (WebCore::ApplyPropertyClip::applyValue):
        (WebCore::ApplyPropertyColor::applyInheritValue):
        (WebCore::ApplyPropertyColor::applyInitialValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::ApplyPropertyColor::applyColorValue):
        (WebCore::ApplyPropertyDirection::applyValue):
        (WebCore::ApplyPropertyLength::applyValue):
        (WebCore::ApplyPropertyString::applyValue):
        (WebCore::ApplyPropertyBorderRadius::applyValue):
        (WebCore::ApplyPropertyFillLayer::applyInheritValue):
        (WebCore::ApplyPropertyFillLayer::applyInitialValue):
        (WebCore::ApplyPropertyFillLayer::applyValue):
        (WebCore::ApplyPropertyComputeLength::applyValue):
        (WebCore::ApplyPropertyFont::applyInheritValue):
        (WebCore::ApplyPropertyFont::applyInitialValue):
        (WebCore::ApplyPropertyFont::applyValue):
        (WebCore::ApplyPropertyFontSize::applyInheritValue):
        (WebCore::ApplyPropertyFontSize::applyInitialValue):
        (WebCore::ApplyPropertyFontSize::applyValue):
        (WebCore::ApplyPropertyFontWeight::applyValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInheritValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInitialValue):
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue):
        (WebCore::ApplyPropertyBorderImage::applyValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInheritValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):
        (WebCore::ApplyPropertyBorderImageModifier::applyValue):
        (WebCore::ApplyPropertyBorderImageSource::applyValue):
        (WebCore::ApplyPropertyCounter::emptyFunction):
        (WebCore::ApplyPropertyCounter::applyInheritValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        (WebCore::ApplyPropertyCursor::applyInheritValue):
        (WebCore::ApplyPropertyCursor::applyInitialValue):
        (WebCore::ApplyPropertyCursor::applyValue):
        (WebCore::ApplyPropertyTextAlign::applyValue):
        (WebCore::ApplyPropertyTextDecoration::applyValue):
        (WebCore::ApplyPropertyLineHeight::applyValue):
        (WebCore::ApplyPropertyPageSize::applyInheritValue):
        (WebCore::ApplyPropertyPageSize::applyInitialValue):
        (WebCore::ApplyPropertyPageSize::applyValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInheritValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInitialValue):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue):
        (WebCore::ApplyPropertyAnimation::map):
        (WebCore::ApplyPropertyAnimation::applyInheritValue):
        (WebCore::ApplyPropertyAnimation::applyInitialValue):
        (WebCore::ApplyPropertyAnimation::applyValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInheritValue):
        (WebCore::ApplyPropertyOutlineStyle::applyInitialValue):
        (WebCore::ApplyPropertyOutlineStyle::applyValue):
        (WebCore::ApplyPropertyResize::applyValue):
        (WebCore::ApplyPropertyVerticalAlign::applyValue):
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue):
        (WebCore::ApplyPropertyAspectRatio::applyInitialValue):
        (WebCore::ApplyPropertyAspectRatio::applyValue):
        (WebCore::ApplyPropertyZoom::resetEffectiveZoom):
        (WebCore::ApplyPropertyZoom::applyInheritValue):
        (WebCore::ApplyPropertyZoom::applyInitialValue):
        (WebCore::ApplyPropertyZoom::applyValue):
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        (WebCore::ApplyPropertyDisplay::applyInheritValue):
        (WebCore::ApplyPropertyDisplay::applyInitialValue):
        (WebCore::ApplyPropertyDisplay::applyValue):
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyExclusionShape::applyValue):
        (WebCore::ApplyPropertyImageResolution::applyInheritValue):
        (WebCore::ApplyPropertyImageResolution::applyInitialValue):
        (WebCore::ApplyPropertyImageResolution::applyValue):
        * css/StyleBuilder.h:
        (WebCore):
        (PropertyHandler):
        (WebCore::PropertyHandler::applyInheritValue):
        (WebCore::PropertyHandler::applyInitialValue):
        (WebCore::PropertyHandler::applyValue):
        Replaced StyleResolver* with StyleResolver::State&.
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::StyleResolver):
        Removed m_styleMap. Now m_styleMap is an on-stack object.
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::styleSharingCandidateMatchesHostRules):
        (WebCore::StyleResolver::matchHostRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::sortMatchedRules):
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::initElement):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::canShareStyleWithControl):
        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::findSiblingForStyleSharing):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::defaultStyleForElement):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::updateFont):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::ruleMatches):
        (WebCore::StyleResolver::checkRegionSelector):
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::isLeftPage):
        (WebCore::StyleResolver::applyPropertyWithNullCheck):
        (WebCore::StyleResolver::applyFontPropertyToStyle):
        (WebCore::StyleResolver::resolveVariables):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::styleImage):
        (WebCore::StyleResolver::cachedOrPendingFromValue):
        (WebCore::StyleResolver::generatedOrPendingFromValue):
        (WebCore::StyleResolver::setOrPendingFromValue):
        (WebCore::StyleResolver::cursorOrPendingFromValue):
        (WebCore::StyleResolver::checkForTextSizeAdjust):
        (WebCore::StyleResolver::checkForZoomChange):
        (WebCore::StyleResolver::checkForGenericFamilyChange):
        (WebCore::StyleResolver::initializeFontStyle):
        (WebCore::StyleResolver::setFontSize):
        (WebCore::StyleResolver::colorFromPrimitiveValue):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::styleShader):
        (WebCore::StyleResolver::cachedOrPendingStyleShaderFromValue):
        (WebCore::StyleResolver::loadPendingShaders):
        (WebCore::StyleResolver::parseCustomFilterTransformParameter):
        (WebCore::StyleResolver::parseCustomFilterParameter):
        (WebCore::StyleResolver::parseCustomFilterParameterList):
        (WebCore::StyleResolver::createCustomFilterOperationWithInlineSyntax):
        (WebCore::StyleResolver::createCustomFilterOperation):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::loadPendingImage):
        (WebCore::StyleResolver::loadPendingImages):
        (WebCore::StyleResolver::loadPendingResources):
        Just replaced m_state with state and added one more parameter to
        provide the state.
        (WebCore::StyleResolver::reportMemoryUsage):
        Since m_state was removed, removed a code for reporting m_state's
        memory usage.
        * css/StyleResolver.h:
        (StyleResolver):
        (WebCore::StyleResolver::isRightPage):
        (WebCore::StyleResolver::State::State):
        (WebCore::StyleResolver::State::document):
        Since State::m_element is not always available (sometimes, 0),
        added m_document to State and modified to return the m_document.
        (WebCore::StyleResolver::State::useSVGZoomRules):
        Moved StyleResolver to State.
        (State):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        Moved the code, updating a style by using a given StylePropertySet,
        to StyleResolver.

2013-02-20  Ojan Vafai  <ojan@chromium.org>

        AutoTableLayout applies min-width redundantly with RenderTable
        https://bugs.webkit.org/show_bug.cgi?id=110426

        Reviewed by Emil A Eklund.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):
        This code used to do something, but has since been superceded by
        code in RenderTable::computePreferredLogicalWidths.

2013-02-20  Dirk Schulze  <krit@webkit.org>

        Enable CANVAS_PATH flag
        https://bugs.webkit.org/show_bug.cgi?id=108508

        Uneviewed attempt to fix Qt minimal build.

        * html/canvas/DOMPath.h:
        (WebCore::DOMPath::DOMPath):

\2013-02-20  Mark Lam  <mark.lam@apple.com>

        Rename DatabaseBackendAsync to DatabaseBackend.
        https://bugs.webkit.org/show_bug.cgi?id=110422.

        Reviewed by Geoffrey Garen.

        This is a purely cosmetic change to make the naming consistent with
        the front-end Database.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::performPreflight):
        (WebCore::ChangeVersionWrapper::performPostflight):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::from):
        (WebCore::Database::backend):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackend.cpp: Copied from Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.cpp.
        (WebCore::DatabaseBackend::DatabaseBackend):
        (WebCore::DatabaseBackend::openAndVerifyVersion):
        (WebCore::DatabaseBackend::performOpenAndVerify):
        (WebCore::DatabaseBackend::close):
        (WebCore::DatabaseBackend::runTransaction):
        (WebCore::DatabaseBackend::inProgressTransactionCompleted):
        (WebCore::DatabaseBackend::scheduleTransaction):
        (WebCore::DatabaseBackend::scheduleTransactionStep):
        (WebCore::DatabaseBackend::transactionClient):
        (WebCore::DatabaseBackend::transactionCoordinator):
        * Modules/webdatabase/DatabaseBackend.h: Copied from Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.h.
        * Modules/webdatabase/DatabaseBackendAsync.cpp: Removed.
        * Modules/webdatabase/DatabaseBackendAsync.h: Removed.
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::~DatabaseBackendBase):
        * Modules/webdatabase/DatabaseManager.cpp:
        * Modules/webdatabase/DatabaseServer.cpp:
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseTask::DatabaseTask):
        (WebCore::DatabaseBackend::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseBackend::DatabaseOpenTask::doPerformTask):
        (WebCore::DatabaseBackend::DatabaseOpenTask::debugTaskName):
        (WebCore::DatabaseBackend::DatabaseCloseTask::DatabaseCloseTask):
        (WebCore::DatabaseBackend::DatabaseCloseTask::doPerformTask):
        (WebCore::DatabaseBackend::DatabaseCloseTask::debugTaskName):
        (WebCore::DatabaseBackend::DatabaseTransactionTask::DatabaseTransactionTask):
        (WebCore::DatabaseBackend::DatabaseTransactionTask::~DatabaseTransactionTask):
        (WebCore::DatabaseBackend::DatabaseTransactionTask::doPerformTask):
        (WebCore::DatabaseBackend::DatabaseTransactionTask::debugTaskName):
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::DatabaseTableNamesTask):
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::doPerformTask):
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::debugTaskName):
        * Modules/webdatabase/DatabaseTask.h:
        (WebCore::DatabaseTask::database):
        (DatabaseTask):
        (WebCore::DatabaseBackend::DatabaseOpenTask::create):
        (DatabaseBackend::DatabaseOpenTask):
        (WebCore::DatabaseBackend::DatabaseCloseTask::create):
        (DatabaseBackend::DatabaseCloseTask):
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::create):
        (DatabaseBackend::DatabaseTableNamesTask):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::recordDatabaseOpen):
        (WebCore::DatabaseThread::recordDatabaseClosed):
        (WebCore::SameDatabasePredicate::SameDatabasePredicate):
        (SameDatabasePredicate):
        (WebCore::DatabaseThread::unscheduleDatabaseTasks):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::execute):
        (WebCore::SQLStatementBackend::setDatabaseDeletedError):
        (WebCore::SQLStatementBackend::setVersionMismatchedError):
        (WebCore::SQLStatementBackend::setFailureDueToQuota):
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::create):
        (WebCore::SQLTransactionBackend::SQLTransactionBackend):
        * Modules/webdatabase/SQLTransactionBackend.h:
        (WebCore::SQLTransactionBackend::database):
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::getDatabaseIdentifier):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-02-20  David Kilzer  <ddkilzer@apple.com>

        Upstream SharedTimerIOS.mm
        <http://webkit.org/b/110161>

        Reviewed by Benjamin Poulain.

        * Configurations/WebCore.xcconfig:
        (EXCLUDED_SOURCE_FILE_NAMES_iphoneos): Add SharedTimerMac.mm.
        * WebCore.xcodeproj/project.pbxproj: Add SharedTimerIOS.mm.
        * platform/ios/SharedTimerIOS.mm: Add.
        (WebCore):
        (-[WebCoreResumeNotifierIOS init]):
        (-[WebCoreResumeNotifierIOS dealloc]):
        (-[WebCoreResumeNotifierIOS didWake]):
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::timerFired):
        (WebCore::setSharedTimerFireInterval):
        (WebCore::stopSharedTimer):

2013-02-20  Ojan Vafai  <ojan@chromium.org>

        Speculative fix for EFL and Windows compilers not realizing
        that all possible cases have a return value from this switch.

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

2013-02-20  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Fix overflow computation for column blocks.
        https://bugs.webkit.org/show_bug.cgi?id=110392.

        Reviewed by Simon Fraser.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addOverflowFromChild):
        Exclude in-flow RenderFlowThreads from overflow propagation.

        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::shouldHaveAutoLogicalHeight):
         * rendering/RenderRegionSet.h:
        (RenderRegionSet):
        Override shouldHaveAutoLogicalHeight to always be false
        for region sets and for columns. Eventually we're going to try
        to leverage this code to do column balancing, and that's why
        RenderMultiColumnSet has a unique override.

2013-02-20  Brandon Jones  <bajones@google.com>
 
        Printing WebGL canvases in Chrome uses stale data after first print
        https://bugs.webkit.org/show_bug.cgi?id=110003
 
        Reviewed by Kenneth Russell.
 
        Unable to validate printed content automatically. No regression in existing WebGL tests.
 
         * html/canvas/WebGLRenderingContext.cpp:
         (WebCore):
         (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):

2013-02-20  Christian Biesinger  <cbiesinger@chromium.org>

        Incorrect rendering for flex boxes with percentage height in a table cell
        https://bugs.webkit.org/show_bug.cgi?id=110389

        Reviewed by Tony Chang.

        Tests: css3/flexbox/flex-percentage-height-in-table-standards-mode.html
               css3/flexbox/flex-percentage-height-in-table.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        Always update the logical height of the flex box, not just when it is
        auto. If necessary, the later updateLogicalHeight() call will adjust
        it.

2013-02-20  Philip Rogers  <pdr@google.com>

        Account for transform in SVG background images
        https://bugs.webkit.org/show_bug.cgi?id=110295

        Reviewed by Dirk Schulze.

        Tiled SVG background images are rendererd by drawing the SVG content into a temporary
        image buffer, then stamping out a tiled pattern using this buffer. Previously the
        image buffer did not account for CSS transforms which could result in pixelated backgrounds.

        This patch takes advantage of the context's transform when sizing the temporary tiling
        image buffer. Because the context's transform also includes scale, this patch simplifies
        the SVG image code to no longer track scale.

        Test: svg/as-background-image/svg-transformed-background.html

        * loader/cache/CachedImage.cpp:
        (WebCore):
        (WebCore::CachedImage::imageForRenderer):

            CachedImage::lookupOrCreateImageForRenderer no longer creates images so it has been
            refactored into just "imageForRenderer". Previously there were two versions of
            lookupOrCreateImageForRenderer; these have been folded into imageForRenderer.

        * loader/cache/CachedImage.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):

            To create the temporary tiling image buffer, the final size in screen coordinates is
            needed. This is now computed using the current context's CTM. Because the CTM
            already includes the page scale, all page scale tracking can be removed.

            The adjustments to srcRect and the pattern transform are the same as before, just
            refactored to use imageBufferScale which has x and y components.

        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::setContainerSizeForRenderer):

            Because the page scale needed to be cached between calls to
            setContainerSizeForRenderer, this function was written to modify an existing cache
            entry. Because the page scale no longer needs to be tracked, this code has been
            simplified to re-write any existing cache entry.

        (WebCore::SVGImageCache::imageSizeForRenderer):

            This function has been simplified by calling SVGImageForContainer::size() instead
            of computing this value manually. The value returned remains the same, containing
            the container size multiplied by zoom.

        (WebCore::SVGImageCache::imageForRenderer):

            Previously we set the page scale on every call to imageForRenderer. Because page scale
            no longer needs to be tracked, this function has been simplified to simply return
            the cached SVGImageForContainer.

        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern):
        * svg/graphics/SVGImageForContainer.h:
        (WebCore::SVGImageForContainer::create):
        (WebCore::SVGImageForContainer::SVGImageForContainer):
        (SVGImageForContainer):

2013-02-20  Jer Noble  <jer.noble@apple.com>

        Crash in com.apple.WebKit2.WebProcessService at com.apple.avfoundation: __73-[AVAssetResourceLoader _attemptDelegateHandlingOfRequestWithDictionary:]_block_invoke + 51
        https://bugs.webkit.org/show_bug.cgi?id=110385

        Reviewed by Eric Carlson.

        Ensure AVFoundation does not attempt to message a dead object by explicitly disassociating
        the AVAssetResourceLoaderDelegate on MediaPlayerPrivateAVFoundationObjC destruction.

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

2013-02-20  Ojan Vafai  <ojan@chromium.org>

        Positioned, replaced elements with intrinsic width keywords compute the wrong width
        https://bugs.webkit.org/show_bug.cgi?id=110393

        Reviewed by Emil A Eklund.

        Test: fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        Add the intrinsic size keywords to the switch. Confusingly, we have to
        subtract the border and padding since the callers expect the content width.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        Don't do the intrinsic ratio calculation if the width is an
        intrinsic width keyword, as per, http://dev.w3.org/csswg/css3-sizing/#replaced-intrinsic.

        (WebCore::RenderReplaced::computeIntrinsicLogicalWidths):
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        The old code was trying to apply the intrinsic ratio calculation to
        the intrinsic width, which is wrong per spec.

2013-02-20  Alec Flett  <alecflett@chromium.org>

        LevelDB: Remove excess vector copy
        https://bugs.webkit.org/show_bug.cgi?id=110399

        Reviewed by Tony Chang.

        Remove an extra copy introduced by the makeVector function.

        No new tests, this is covered by existing tests.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::safeGet):

2013-02-20  Simon Fraser  <simon.fraser@apple.com>

        Zoomed, slow-scrolling pages keep recreating tiles when scrolled
        https://bugs.webkit.org/show_bug.cgi?id=110379

        Reviewed by Tim Horton.

        On slow-scrolling pages the TileCache makes the tiles the size of
        the visible rect to minimize per-tile painting overhead. If the size
        of that rect changes, the TileCache re-creates all the tiles.
        
        This was a problem whem zoomed, because mapping the visible rect
        through the scale transform and then rounding it would cause the
        size to keep changing, causing lots of tile re-creation.
        
        Fix by carrying the visibleRect around as a FloatRect, and doing
        the same for the exposedRect. We then only expand to integers
        when computing the tile size. This also fixes an issue where we could
        sometimes make extra tiles because of fractional bits of tiles at the edges,
        as shown by the test result change.

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateVisibleRect):
        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setVisibleRect):
        (WebCore::TileCache::setExposedRect):
        (WebCore::TileCache::prepopulateRect):
        (WebCore::TileCache::computeTileCoverageRect):
        (WebCore::TileCache::tileSizeForCoverageRect):
        (WebCore::TileCache::blankPixelCountForTiles):
        (WebCore::TileCache::revalidateTiles):
        (WebCore::TileCache::ensureTilesForRect):
        * platform/graphics/ca/mac/WebTileLayer.mm:
        (-[WebTileLayer logFilledFreshTile]):

2013-02-20  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Implement the auto-placement algorithm without grid growth
        https://bugs.webkit.org/show_bug.cgi?id=110277

        Reviewed by Tony Chang.

        Tests: fast/css-grid-layout/grid-item-addition-auto-placement-update.html
               fast/css-grid-layout/grid-item-removal-auto-placement-update.html
               fast/css-grid-layout/grid-auto-flow-resolution.html (extended to cover more cases)

        This change implements most of the auto-placement algorithm per
        http://dev.w3.org/csswg/css3-grid-layout/#auto-placement-algo

        To limit the size of the code change, it doesn't implement growing the grid if there
        are no empty grid areas. If we don't find any empty grid areas, we just insert in the first
        one, like what grid-auto-flow: none would do (which explains the test failures).

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::nextEmptyGridArea):
        Added this function to return the GridCoordinate of the next empty grid area along
        the iterator's direction.

        (WebCore::RenderGrid::placeItemsOnGrid):
        Split this function into the different steps below. For efficiency, collect the auto vs specified
        major axis grid items in different Vectors.

        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        Added this function that implements part of step 1 of the algorithm (the grid items without
        auto row / column are already handled in placeItemsOnGrid).

        (WebCore::RenderGrid::placeAutoMajorAxisItemsOnGrid):
        Added this function that iterates over the auto grid items and call placeAutoMajorAxisItemOnGrid.

        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        Added this method to handle the step 4 of the algorithm. Based on the minor axis's position,
        it either walks along the major axis once or several times until it finds an empty grid area
        for the grid item.

        (WebCore::RenderGrid::autoPlacementMajorAxisPositionForChild):
        (WebCore::RenderGrid::autoPlacementMinorAxisPositionForChild):
        (WebCore::RenderGrid::autoPlacementMajorAxisDirection):
        (WebCore::RenderGrid::autoPlacementMinorAxisDirection):
        Added these helper functions that return minor / major axis positions & direction.

        * rendering/RenderGrid.h:
        Added the previous new RenderGrid functions.

2013-02-20  Vincent Scheib  <scheib@chromium.org>

        Accept 'allowfullscreen' in addition to 'webkitallowfullscreen'.
        https://bugs.webkit.org/show_bug.cgi?id=110374

        Reviewed by Adam Barth.

        The fullscreen API also includes a new HTML attribute for iframes
        which permits its use. That attribute, 'allowfullcreen' is now
        included in the HTML specification [1] and is stable enough
        to remove the webkit prefix.

        [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-allowfullscreen

        Tests: fullscreen/full-screen-enabled-prefixed.html
               fullscreen/full-screen-iframe-allowed-prefixed.html
               fullscreen/full-screen-iframe-with-mixed-allow-webkitallow-attribute.html

        * dom/Document.cpp:
        (WebCore::isAttributeOnAllOwners):
        (WebCore::Document::fullScreenIsAllowedForElement):
        (WebCore::Document::webkitFullscreenEnabled):
        * html/HTMLAttributeNames.in:

2013-02-20  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Remove references to SAFARI_THEME from Windows Solution.
        <rdar://problem/13258710>

        * config.h:
        * page/Settings.cpp:
        * page/Settings.h:
        * platform/win/ScrollbarThemeWin.cpp:
        * rendering/RenderThemeWin.cpp:

2013-02-20  Roger Fong  <roger_fong@apple.com>

        Get VS2010 Solution B&I ready.
        <rdar://problem/1322988>

        Rubberstamped by Timothy Horton.

        Add Production configuration. 
        Add a WebCore submit solution with a DebugSuffix configuration. 
        Modify WebCore.make as necessary.
        
        * DerivedSources.make:
        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCommon.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinProduction.props: Added.
        * WebCore.vcxproj/QTMovieWin/QTMovieWinRelease.props:
        * WebCore.vcxproj/WebCore.make: Added.
        * WebCore.vcxproj/WebCore.sln: Removed.
        * WebCore.vcxproj/WebCore.submit.sln: Copied from Source/WebCore/WebCore.vcxproj/WebCore.sln.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreGenerated.vcxproj:
        * WebCore.vcxproj/WebCoreGeneratedProduction.props: Added.
        * WebCore.vcxproj/WebCoreGeneratedRelease.props:
        * WebCore.vcxproj/WebCoreProduction.props: Added.
        * WebCore.vcxproj/WebCoreRelease.props:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:

2013-02-20  Adam Klein  <adamk@chromium.org>

        [v8] Fix an erroneous WrapperGrouper call in preparation for refactoring
        https://bugs.webkit.org/show_bug.cgi?id=110396

        Reviewed by Kentaro Hara.

        This is in preparation for a refactor to expose a simplified
        WrapperGrouper interface to V8 wrapper classes enabling them to
        specify multiple roots per wrapper object. 

        * bindings/v8/V8GCController.cpp: Since MutationObservers are not Nodes, the correct call here is addObjectToGroup, as it is for all other non-Node wrappers.

2013-02-20  Levi Weintraub  <leviw@chromium.org>

        Line layout (but not pref widths) double-counts word spacing when between inlines
        https://bugs.webkit.org/show_bug.cgi?id=110381

        Reviewed by Emil A Eklund.

        When a word break with a space occurs between inlines and word-spacing is non-zero,
        line layout incorrectly committed the word-spacing value to the line twice, causing
        wrapping in inline-blocks. To fix this, clear the word-spacing value when between
        words and ignoring spaces, as we will already have added the word-spacing to the
        line.

        Test: fast/text/word-space-between-inlines.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):

2013-02-20  Nate Chapin  <japhet@chromium.org>

        Crash in WebCore::FrameLoader::checkCompleted()
        https://bugs.webkit.org/show_bug.cgi?id=110237

        Reviewed by Abhishek Arya.

        Test: http/tests/misc/delete-frame-during-readystatechange.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted): Protect before setReadyState() is called.

2013-02-20  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Limit LevelDB's max open files
        https://bugs.webkit.org/show_bug.cgi?id=109993

        Reviewed by Tony Chang.

        LevelDB keeps up to 1000 (by default) data files open at a time to
        avoid having to open() them. This has caused chromium to hit the
        process-wide open file limit. This patch changes max_open_files to 20,
        as that's the minimum permitted by LevelDB and we have no reason to
        think that performance will suffer because of the extra open calls.

        No new tests - a chromium browser test that tracks the open LevelDB
        files is plausible but is blocked on http://crbug.com/177249/.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::openDB):

2013-02-20  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Resize RenderMultiColumnSets around their columns.
        https://bugs.webkit.org/show_bug.cgi?id=110378.

        Reviewed by Dirk Schulze.

        Test: fast/multicol/newmulticol/positioned-with-constrained-height.html.

        * rendering/RenderBlock.h:
        (RenderBlock):
        Make computeOverflow public so that RenderMultiColumnFlowThread can
        access it.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::layout):
        Subclass layout to recompute the overflow for RenderMultiColumnBlock
        after the flow thread has finished layout. This way it can account
        for changes in RenderMultiColumnSets without having to do a second
        layout pass.

        * rendering/RenderMultiColumnFlowThread.h:
        (RenderMultiColumnFlowThread):
        Override layout().

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnCount):
        Clean up a comment that referred to portions as region rects still.

        (WebCore::RenderMultiColumnSet::setFlowThreadPortionRect):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::setFlowThreadPortionRect):
        Make setFlowThreadPortionRect virtual and actually mutate the size
        and position of RenderMultiColumnSets so that they enclose their
        column rects.

2013-02-20  Dirk Schulze  <krit@webkit.org>

        Enable CANVAS_PATH flag
        https://bugs.webkit.org/show_bug.cgi?id=108508

        Reviewed by Simon Fraser.

        Enable CANVAS_PATH flag on trunk.

        Existing tests cover the feature.

        * Configurations/FeatureDefines.xcconfig:

2013-02-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143441.
        http://trac.webkit.org/changeset/143441
        https://bugs.webkit.org/show_bug.cgi?id=110376

        May be causing chromium content_browsertests failures.
        (Requested by vollick on #webkit).

        * bindings/v8/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore::ScriptValue::getString):
        (WebCore::ScriptValue::toString):
        (WebCore::ScriptValue::toInspectorValue):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::operator=):
        (WebCore::ScriptValue::operator==):
        (WebCore::ScriptValue::isEqual):
        (WebCore::ScriptValue::isFunction):
        (WebCore::ScriptValue::isNull):
        (WebCore::ScriptValue::isUndefined):
        (WebCore::ScriptValue::isObject):
        (WebCore::ScriptValue::hasNoValue):
        (WebCore::ScriptValue::clear):
        (WebCore::ScriptValue::v8Value):
        (ScriptValue):
        * bindings/v8/SharedPersistent.h:
        (WebCore):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAttrGetterCustom):

2013-02-15  Dirk Schulze  <krit@webkit.org>

        [Chromium] Add runtime flag for CanvasPath
        https://bugs.webkit.org/show_bug.cgi?id=109997

        Reviewed by Adam Barth.

        Add runtime flag for Chromium.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::setCanvasPathEnabled):
        (WebCore::RuntimeEnabledFeatures::canvasPathEnabled):
        * html/canvas/DOMPath.idl:
        * page/DOMWindow.idl:

2013-02-20  Laszlo Gombos  <l.gombos@samsung.com>

        Remove unnecessary includes for Platform.h from headers
        https://bugs.webkit.org/show_bug.cgi?id=110300

        Reviewed by Alexey Proskuryakov.

        wtf/Platform.h only need to be included in a few places directly
        as it is included in config.h. Remove the unnecessay duplicate as
        it can be confusing.

        No new tests, no change in functionality.

        * platform/SecureTextInput.h:
        * platform/audio/Biquad.h:
        * platform/audio/FFTFrame.h:
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        * platform/graphics/cpu/arm/filters/NEONHelpers.h:
        * platform/graphics/filters/FELighting.h:

2013-02-20  Florin Malita  <fmalita@chromium.org>

        [SVG] Update of element referenced by multiple 'use' nodes is absurdly slow
        https://bugs.webkit.org/show_bug.cgi?id=97905

        Reviewed by Dirk Schulze.

        Rebuilding the shadow and instance trees of dependent use nodes recursively can be
        extremely inefficient with non-trivial dependency graphs (the trees are not constructed
        in topological order).

        To avoid redundant buildShadowAndInstanceTree() invokations, separate the invalidation
        phase from the actual tree (re)building phase, and only descend into the dependency DAG
        during the invalidation phase (recursion also stops at nodes that have been previously
        invalidated).

        No new tests: functional coverage provided by existing tests, perfomance tracked by
        PerformanceTests/SVG/SvgNestedUse.html.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree):
        (WebCore::SVGUseElement::invalidateShadowTree):
        (WebCore):
        (WebCore::SVGUseElement::invalidateDependentShadowTrees):
        * svg/SVGUseElement.h:
        (SVGUseElement):

2013-02-20  Tim Horton  <timothy_horton@apple.com>

        RenderLayerBacking should initialize TiledBacking's isInWindow state with Page's isInWindow, not isOnscreen
        https://bugs.webkit.org/show_bug.cgi?id=110370
        <rdar://problem/13254006>

        Reviewed by Simon Fraser.

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

2013-02-20  Mark Lam  <mark.lam@apple.com>

        Cleanup the SQLTransaction and SQLTransactionBackend state dispatch
        to only honor a state transition request if the associated database
        hasn't been interrupted.
        https://bugs.webkit.org/show_bug.cgi?id=110247.

        Reviewed by Antti Koivisto.

        No new tests.

        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::performPendingCallback):
        (WebCore::SQLTransaction::computeNextStateAndCleanupIfNeeded):
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::computeNextStateAndCleanupIfNeeded):
        (WebCore::SQLTransactionBackend::performNextStep):
        * Modules/webdatabase/SQLTransactionBackend.h:

2013-02-20  Alexey Proskuryakov  <ap@apple.com>

        ResourceHandle::loadResourceSynchronously should have blob support in cross-platform code
        https://bugs.webkit.org/show_bug.cgi?id=110364

        Reviewed by Anders Carlsson.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandle.cpp: (WebCore::ResourceHandle::loadResourceSynchronously):
        Added a cross-platform version to keep blob-related logic in one place.

        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Renamed loadResourceSynchronously to platformLoadResourceSynchronously,
        removed blob handling from platforms that had it.

2013-02-20  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] RenderMultiColumnFlowThreads should establish a BFC.
        https://bugs.webkit.org/show_bug.cgi?id=110366.

        Reviewed by Antti Koivisto.

        RenderFlowThreads should establish a block formatting context always.
        CSS Regions have named flow thread that they absolutely position, and so
        they got this for free by being absolutely positioned.
        
        RenderMultiColumnFlowThreads, however, are relative positioned, so we need
        to just add an isRenderFlowThread case specifically so we're not dependent
        on the positioning scheme used for the flow thread to establish the BFC.
        
        Test: fast/multicol/newmulticol/float-*.html.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):

2013-02-20  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Column gap is computed incorrectly.
        https://bugs.webkit.org/show_bug.cgi?id=110360.

        Reviewed by Simon Fraser.

        Test: fast/multicol/newmulticol/layers-split-across-columns.html.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnGap):
        Make sure we ask the RenderMultiColumnBlock for the gap rather than our
        own style, since we don't actually have the gap value in our style.
        
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        * rendering/RenderMultiColumnSet.h:
        Fix another spot where the columnGap was an int. It should be a LayoutUnit.

2013-02-20  Robert Hogan  <robert@webkit.org>

        No caret on empty contenteditable element with negative text-indent
        https://bugs.webkit.org/show_bug.cgi?id=108633

        Reviewed by Ryosuke Niwa.

        Test: fast/repaint/paint-caret-in-div-with-negative-indent.html

        When an editable element has a negative text indent we won't paint the caret when the
        element is empty because it falls outside the element's border box. To ensure the caret is painted,
        account for any negative indent with our overflow.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow):

2013-02-20  Ojan Vafai  <ojan@chromium.org>

        Remove stretchesToMinIntrinsicLogicalWidth
        https://bugs.webkit.org/show_bug.cgi?id=110266

        Reviewed by Emil Eklund.

        This was only used by fieldsets and now we have a way to express this
        concept in CSS.

        * WebCore.order:
        * css/html.css:
        Make fieldsets min-width: -webkit-min-content.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        * rendering/RenderBox.h:
        Remove all calls to stretchesToMinIntrinsicLogicalWidth.

2013-02-20  Ojan Vafai  <ojan@chromium.org>

        Make intrinsic width values work for positioned elements
        https://bugs.webkit.org/show_bug.cgi?id=110264

        Reviewed by Tony Chang.

        Tests: fast/css-intrinsic-dimensions/intrinsic-sized-absolutes.html
               fast/css-intrinsic-dimensions/width-shrinks-avoid-floats.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        Move the computation of intrinsic widths out into a helper function so that
        computePositionedLogicalWidthUsing can use it. As per the current spec,
        fill-available measures shrink to avoid floats. http://dev.w3.org/csswg/css3-sizing/

        (WebCore::RenderBox::computePositionedLogicalWidth):
        Compute intrinsic min-widths in addition to non-zero ones. Intrinsic widths
        return true for isZero. width and max-width don't need modifying since they already
        call computePositionedLogicalWidthUsing for intrinsic widths.

        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        Compute intrinsic widths and use a Fixed length for the rest of the positioned width
        computation. Doesn't include bordersPlusPadding because the caller, expected the content
        width and adds in the bordersPlusPadding later.

        * rendering/RenderBox.h:

2013-02-20  Robert Hogan  <robert@webkit.org>

        input element with placeholder text and width set to 100% on focus causes overflow even after losing focus
        https://bugs.webkit.org/show_bug.cgi?id=109020

        Reviewed by David Hyatt.

        Tests: fast/forms/input-placeholder-layout-view.html
               fast/forms/textarea-placeholder-layout-view.html

        Placeholder elements don't affect layout so shouldn't contribute overflow either.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):

2013-02-20  Mark Lam  <mark.lam@apple.com>

        Rename DatabaseBackend to DatabaseBackendBase.
        https://bugs.webkit.org/show_bug.cgi?id=110303.

        Rubber stamped by Alexey Proskuryakov.

        This is a purely cosmetic change to make the naming consistent with
        the front-end DatabaseBase.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::create):
        (WebCore::Database::version):
        * Modules/webdatabase/Database.h:
        (Database):
        * Modules/webdatabase/DatabaseBackend.cpp: Removed.
        * Modules/webdatabase/DatabaseBackend.h: Removed.
        * Modules/webdatabase/DatabaseBackendAsync.cpp:
        (WebCore::DatabaseBackendAsync::DatabaseBackendAsync):
        (WebCore::DatabaseBackendAsync::performOpenAndVerify):
        * Modules/webdatabase/DatabaseBackendAsync.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp: Copied from Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp.
        (WebCore::DatabaseBackendBase::databaseInfoTableName):
        (WebCore::DatabaseBackendBase::DatabaseBackendBase):
        (WebCore::DatabaseBackendBase::~DatabaseBackendBase):
        (WebCore::DatabaseBackendBase::closeDatabase):
        (WebCore::DatabaseBackendBase::version):
        (WebCore::DoneCreatingDatabaseOnExitCaller::DoneCreatingDatabaseOnExitCaller):
        (DoneCreatingDatabaseOnExitCaller):
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::securityOrigin):
        (WebCore::DatabaseBackendBase::stringIdentifier):
        (WebCore::DatabaseBackendBase::displayName):
        (WebCore::DatabaseBackendBase::estimatedSize):
        (WebCore::DatabaseBackendBase::fileName):
        (WebCore::DatabaseBackendBase::details):
        (WebCore::DatabaseBackendBase::getVersionFromDatabase):
        (WebCore::DatabaseBackendBase::setVersionInDatabase):
        (WebCore::DatabaseBackendBase::setExpectedVersion):
        (WebCore::DatabaseBackendBase::getCachedVersion):
        (WebCore::DatabaseBackendBase::setCachedVersion):
        (WebCore::DatabaseBackendBase::getActualVersionForTransaction):
        (WebCore::DatabaseBackendBase::disableAuthorizer):
        (WebCore::DatabaseBackendBase::enableAuthorizer):
        (WebCore::DatabaseBackendBase::setAuthorizerReadOnly):
        (WebCore::DatabaseBackendBase::setAuthorizerPermissions):
        (WebCore::DatabaseBackendBase::lastActionChangedDatabase):
        (WebCore::DatabaseBackendBase::lastActionWasInsert):
        (WebCore::DatabaseBackendBase::resetDeletes):
        (WebCore::DatabaseBackendBase::hadDeletes):
        (WebCore::DatabaseBackendBase::resetAuthorizer):
        (WebCore::DatabaseBackendBase::maximumSize):
        (WebCore::DatabaseBackendBase::incrementalVacuumIfNeeded):
        (WebCore::DatabaseBackendBase::interrupt):
        (WebCore::DatabaseBackendBase::isInterrupted):
        (WebCore::DatabaseBackendBase::reportOpenDatabaseResult):
        (WebCore::DatabaseBackendBase::reportChangeVersionResult):
        (WebCore::DatabaseBackendBase::reportStartTransactionResult):
        (WebCore::DatabaseBackendBase::reportCommitTransactionResult):
        (WebCore::DatabaseBackendBase::reportExecuteStatementResult):
        (WebCore::DatabaseBackendBase::reportVacuumDatabaseResult):
        * Modules/webdatabase/DatabaseBackendBase.h: Copied from Source/WebCore/Modules/webdatabase/DatabaseBackend.h.
        (DatabaseBackendBase):
        * Modules/webdatabase/DatabaseBackendSync.cpp:
        (WebCore::DatabaseBackendSync::DatabaseBackendSync):
        * Modules/webdatabase/DatabaseBackendSync.h:
        * Modules/webdatabase/DatabaseBase.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseManager::openDatabaseSync):
        (WebCore::DatabaseManager::getMaxSizeForDatabase):
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::openDatabase):
        (WebCore::DatabaseServer::createDatabase):
        (WebCore::DatabaseServer::getMaxSizeForDatabase):
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::DatabaseSync::create):
        * Modules/webdatabase/DatabaseSync.h:
        (DatabaseSync):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::databaseChanged):
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * Modules/webdatabase/DatabaseTracker.h:
        (DatabaseTracker):
        * Modules/webdatabase/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::markDatabase):
        * Modules/webdatabase/OriginQuotaManager.h:
        (OriginQuotaManager):
        * Modules/webdatabase/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * Modules/webdatabase/SQLTransactionClient.h:
        (SQLTransactionClient):
        * Modules/webdatabase/chromium/DatabaseObserver.h:
        (DatabaseObserver):
        * Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::NotifyDatabaseObserverOnCloseTask::create):
        (WebCore::NotifyDatabaseObserverOnCloseTask::NotifyDatabaseObserverOnCloseTask):
        (NotifyDatabaseObserverOnCloseTask):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::prepareToOpenDatabase):
        (WebCore::DatabaseTracker::failedToOpenDatabase):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::CloseOneDatabaseImmediatelyTask::create):
        (WebCore::DatabaseTracker::CloseOneDatabaseImmediatelyTask::CloseOneDatabaseImmediatelyTask):
        (DatabaseTracker::CloseOneDatabaseImmediatelyTask):
        (WebCore::DatabaseTracker::closeOneDatabaseImmediately):
        * Modules/webdatabase/chromium/SQLTransactionClientChromium.cpp:
        (WebCore::NotifyDatabaseChangedTask::create):
        (WebCore::NotifyDatabaseChangedTask::NotifyDatabaseChangedTask):
        (NotifyDatabaseChangedTask):
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-02-20  Eric Carlson  <eric.carlson@apple.com>

        iOS does not use CaptionUserPreferencesMac
        https://bugs.webkit.org/show_bug.cgi?id=110259

        Reviewed by Dean Jackson.

        * page/CaptionUserPreferencesMac.h: Add PLATFORM(IOS) guard
        * page/CaptionUserPreferencesMac.mm: Ditto.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferences): Ditto.

2013-02-19  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Make layers paint properly in columns.
        https://bugs.webkit.org/show_bug.cgi?id=110296.

        Reviewed by Sam Weinig.

        Construct the style for the RenderMultiColumnFlowThread such that it
        establishes a stacking context (by being position:relative
        with a z-index of 0). This causes the layer collection code
        to correctly ignore the RenderFlowThread layers during normal
        painting.
        
        Fix more clipping bugs to eliminate subpixel layout differences
        between old and new multicolumn.

        Test: fast/multicol/newmulticol/layers-in-multicol.html

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::createMultiColumnFlowThreadStyle):
        (WebCore):
        (WebCore::RenderMultiColumnBlock::addChild):
        Use a custom style (similar to what normal RenderFlowThreads do)
        for the RenderMultiColumnFlowThread that makes it a stacking
        context.
        
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        Fix the overflow calculations out the leftmost and rightmost
        columns to actually look at the physical placement of the columns.
        The old code was backwards for RTL.
        
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        Fix the clipping done by overflowRectForFlowThreadPortion to min
        and max with the passed-in portion rect so that subclasses that
        inflate the rect prior to passing it into the method don't have that
        inflation discarded.

2013-02-20  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: CSSProperty.status defaults to "style" not "active"
        https://bugs.webkit.org/show_bug.cgi?id=110348

        Reviewed by Timothy Hatcher.

        * inspector/Inspector.json: Fix the default property status to be "style" in the description.

2013-02-20  Dan Carney  <dcarney@google.com>

        [v8] potentially disposed handle returned for npapi object
        https://bugs.webkit.org/show_bug.cgi?id=110331

        Reviewed by Kentaro Hara.

        No new tests. No change in functionality.

        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertNPVariantToV8Object):

2013-02-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>  and  Martin Robinson  <mrobinson@igalia.com>

        [Gtk] HTML5 Media controls require a design refresh
        https://bugs.webkit.org/show_bug.cgi?id=83869

        Created new controls that depend less on Gtk and more in CSS.

        Reviewed by Philippe Normand.

        * GNUmakefile.list.am: Added compilation for MediaControlsGtk.cpp
        and MediaControlsGtk.h
        * css/mediaControlsGtk.css: Taken from Chromium and adapted for
        WebKitGtk+.
        * html/shadow/MediaControlsGtk.cpp: Added.
        (WebCore): Added MediaControlsGtk class.
        (WebCore::MediaControlsGtk::MediaControlsGtk): Class constructor
        (WebCore::MediaControls::create): Creates the Gtk+ controls
        components.
        (WebCore::MediaControlsGtk::createControls): Creates the Gtk+
        controls components.
        (WebCore::MediaControlsGtk::initializeControls): Initializes all
        media controls.
        (WebCore::MediaControlsGtk::setMediaController): Sets the media
        controller.
        (WebCore::MediaControlsGtk::reset): Resets the controllers.
        (WebCore::MediaControlsGtk::playbackStarted): Invoked when the
        playback starts
        (WebCore::MediaControlsGtk::updateCurrentTimeDisplay): Updates the
        controls when the current time shall be updated.
        (WebCore::MediaControlsGtk::changedMute): Updates the controls
        then the mute changes.
        (WebCore::MediaControlsGtk::showVolumeSlider): Invoked when the
        volume slider is meant to be shown.
        (WebCore::MediaControlsGtk::createTextTrackDisplay): Creates the
        track display. Though it is not used by us, it needs to be created
        to prevent immediate crashes when loading a video.
        * html/shadow/MediaControlsGtk.h: Added.
        (WebCore): Added the MediaControlsGtk class.
        (MediaControlsGtk): Added the MediaControlsGtk class.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore): Added getStockSymbolicIconForWidgetType function
        signature to load symbolic icons.
        (WebCore::supportsFocus): Added media control widgets to support
        focus so that the focus ring is not painted by WebCore.
        (WebCore::RenderThemeGtk::paintMediaButton): Added the symbolic
        icon support. It supports now normal and symbolic icons at the
        same time.
        (WebCore::RenderThemeGtk::paintMediaFullscreenButton): Added the
        symbolic icon support.
        (WebCore::RenderThemeGtk::paintMediaMuteButton): Added the
        symbolic icon support.
        (WebCore::RenderThemeGtk::paintMediaPlayButton): Added the
        symbolic icon support.
        (WebCore::RenderThemeGtk::paintMediaSeekBackButton): Added the
        symbolic icon support.
        (WebCore::RenderThemeGtk::paintMediaSeekForwardButton): Added the
        symbolic icon support.
        (WebCore::borderRadiiFromStyle): Created the radii info from the
        style.
        (WebCore::RenderThemeGtk::paintMediaSliderTrack): Removed the
        background and the Gtk widget support as it is painted with
        CSS. Also paint the time ranges with the CSS style.
        (WebCore::RenderThemeGtk::paintMediaSliderThumb): Paint slider
        thumb according to the CSS parameters.
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderContainer):
        Delegates in the CSS.
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderTrack): Fills the
        track up to the volume level and delegates the border in the CSS.
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderThumb): Delegates
        in the paintMediaSliderThumb method so the thumb is painted the
        same with the CSS parameters.
        (WebCore::RenderThemeGtk::paintMediaCurrentTime): Removed the Gtk
        background to use only CSS.
        * platform/gtk/RenderThemeGtk.h:
        (RenderThemeGtk): Changed paintMediaButton to support the symbolic
        and normal icons at the same time.
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::adjustSliderThumbSize): Not adjusting
        the thumb size and letting the CSS decide that for media slider.
        (WebCore::getStockSymbolicIconForWidgetType): Implemented as a
        fallback to the normal stock icons.
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore):
        (WebCore::RenderThemeGtk::adjustSliderThumbSize): Not adjusting
        the thumb size and letting the CSS decide that for the media
        sliders.
        (WebCore::getStockSymbolicIconForWidgetType): Added this function
        to load symbolic icons. It falls back to normal icons if the
        symbolic is not found.

2013-02-20  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Rename AncestorChainWalker.h to EventPathWalker.h in the project file.

        Unreviewed gardening.

        AncestorChainWalker has been renamed to EventPathWalker in r143422.
        Rename the header in the project file as well so that it shows up in QtCreator.

        No new tests needed.

        * Target.pri:

2013-02-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: fix for frontend closure compile errors.
        https://bugs.webkit.org/show_bug.cgi?id=110329

        Reviewed by Vsevolod Vlasov.

        It has no tests because it has no code changes.

        * inspector/front-end/HeapSnapshot.js:
        (HeapSnapshotMetainfo):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotProfileType.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeSnapshotProfileType.prototype.buttonClicked):

2013-02-20  Florin Malita  <fmalita@chromium.org>

        Clear SVGPathSeg role on removal.
        https://bugs.webkit.org/show_bug.cgi?id=110058

        Reviewed by Dirk Schulze.

        SVGPathSegListPropertyTearOff::initialize() and SVGPathSegListPropertyTearOff::replaceItem()
        need to clear the context and role for segments being expunged from the list, similarly to
        removeItem(). Otherwise, processIncomingListItemValue() can get confused and attempt to
        remove stale segments.

        Test: svg/dom/SVGPathSegList-crash.html

        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        (WebCore::SVGPathSegListPropertyTearOff::clearContextAndRoles):
        (WebCore::SVGPathSegListPropertyTearOff::clear):
        (WebCore::SVGPathSegListPropertyTearOff::replaceItem):
        (WebCore):
        * svg/properties/SVGPathSegListPropertyTearOff.h:
        (WebCore::SVGPathSegListPropertyTearOff::initialize):
        (SVGPathSegListPropertyTearOff):

2013-02-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143434.
        http://trac.webkit.org/changeset/143434
        https://bugs.webkit.org/show_bug.cgi?id=110326

        added reftest fails on chromium mac 10.6 (Requested by
        toyoshim on #webkit).

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):

2013-02-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Make UISourceCode.path() an array of path segments.
        https://bugs.webkit.org/show_bug.cgi?id=110229

        Reviewed by Pavel Feldman.

        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate.prototype._filePathForPath):
        (WebInspector.FileSystemProjectDelegate.prototype.innerCallback):
        (WebInspector.FileSystemProjectDelegate.prototype.requestFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype._contentTypeForPath):
        (WebInspector.FileSystemProjectDelegate.prototype.populate.filesLoaded):
        (WebInspector.FileSystemProjectDelegate.prototype.populate):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleProjectDelegate.prototype.requestFileContent):
        (WebInspector.SimpleProjectDelegate.prototype.searchInFileContent):
        (WebInspector.SimpleProjectDelegate.prototype.addFile):
        (WebInspector.SimpleProjectDelegate.prototype._ensureUniquePath):
        (WebInspector.SimpleProjectDelegate.prototype.removeFile):
        (WebInspector.SimpleWorkspaceProvider.pathForSplittedURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.addFileByName):
        (WebInspector.SimpleWorkspaceProvider.prototype.removeFileByName):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.uri):
        * inspector/front-end/Workspace.js:
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):
        (WebInspector.Project.prototype.uiSourceCode):
        (WebInspector.Workspace.prototype.uiSourceCodeForURL):
        (WebInspector.Workspace.prototype.urlForPath):

2013-02-20  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: fix message for non-existent domain warning
        https://bugs.webkit.org/show_bug.cgi?id=110315

        Reviewed by Alexander Pavlov.

        Only send (Heap)Profiler.resetProfiles event if the client has
        requested profile headers before.

        * inspector/InspectorHeapProfilerAgent.cpp:
        (HeapProfilerAgentState):
        (WebCore):
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorHeapProfilerAgent::clearFrontend):
        (WebCore::InspectorHeapProfilerAgent::restore):
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        * inspector/InspectorHeapProfilerAgent.h:
        (InspectorHeapProfilerAgent):
        * inspector/InspectorProfilerAgent.cpp:
        (ProfilerAgentState):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore):
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorProfilerAgent::restore):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent):

2013-02-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Move workspace specific code from FileMapping to workspace.
        https://bugs.webkit.org/show_bug.cgi?id=110219

        Reviewed by Pavel Feldman.

        Extracted workspace specific code from FileMapping to Workspace.
        This allows to reduce usage of uri and eventually make UISourceCode.path an array of path segments.

        Test: inspector/workspace-mapping.html

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.rawLocationToUILocation):
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.CompilerScriptMapping.prototype.get addScript.get this):
        (WebInspector.CompilerScriptMapping.prototype.get addScript):
        * inspector/front-end/FileMapping.js:
        (WebInspector.FileMapping):
        (WebInspector.FileMapping.prototype.mappingEntryForURL):
        (WebInspector.FileMapping.prototype.mappingEntryForPath):
        * inspector/front-end/FileSystemMapping.js:
        (WebInspector.FileSystemMapping.prototype.fileSystemPathForPrefix):
        (WebInspector.FileSystemMappingImpl.prototype.addFileSystemMapping):
        (WebInspector.FileSystemMappingImpl.prototype.removeFileSystemMapping):
        (WebInspector.FileSystemMappingImpl.prototype.fileSystemPathForPrefix):
        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate):
        (WebInspector.FileSystemProjectDelegate.prototype.populate.filesLoaded):
        (WebInspector.FileSystemProjectDelegate.prototype.populate):
        (WebInspector.FileSystemWorkspaceProvider):
        (WebInspector.FileSystemWorkspaceProvider.prototype._fileSystemAdded):
        * inspector/front-end/IsolatedFileSystemManager.js:
        (WebInspector.IsolatedFileSystemManager):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider):
        (WebInspector.NetworkUISourceCodeProvider.prototype._addFile):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._workspaceUISourceCodeForScript):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.displayNameForURL):
        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping.prototype._reloadCSS):
        (WebInspector.SASSSourceMapping.prototype._bindUISourceCode):
        (WebInspector.SASSSourceMapping.prototype.rawLocationToUILocation):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.canShowAnchorLocation):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleWorkspaceProvider.pathForSplittedURL):
        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFileForURL):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping.prototype.rawLocationToUILocation):
        (WebInspector.StylesSourceMapping.prototype._resourceAdded):
        (WebInspector.StylesSourceMapping.prototype._mainFrameCreatedOrNavigated):
        (WebInspector.StyleContentBinding):
        (WebInspector.StyleContentBinding.prototype._innerStyleSheetChanged):
        * inspector/front-end/Workspace.js:
        (WebInspector.Workspace):
        (WebInspector.Workspace.prototype.hasMappingForURL):
        (WebInspector.Workspace.prototype._fileSystemPathForEntry):
        (WebInspector.Workspace.prototype.uiSourceCodeForURL):
        (WebInspector.Workspace.prototype.urlForPath):
        * inspector/front-end/inspector.js:

2013-02-20  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Introduce SecurityOriginAdded and SecurityOriginRemoved events into ResourceTreeModel
        https://bugs.webkit.org/show_bug.cgi?id=110232

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._addFrame):
        (WebInspector.ResourceTreeModel.prototype._addSecurityOrigin): Added.
        (WebInspector.ResourceTreeModel.prototype._removeSecurityOrigin): Added.
        (WebInspector.ResourceTreeModel.prototype._handleMainFrameDetached): Added.
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._frameDetached):

2013-02-20  Dan Carney  <dcarney@google.com>

        [v8] ScriptValue has dangerous copy semantics
        https://bugs.webkit.org/show_bug.cgi?id=110206

        Reviewed by Kentaro Hara.

        Update ScriptValue to used a SharedPersistent,
        making it impossible to return dead references.

        No new tests. No change in functionality.

        * bindings/v8/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore::ScriptValue::getString):
        (WebCore::ScriptValue::toString):
        (WebCore::ScriptValue::toInspectorValue):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::operator=):
        (WebCore::ScriptValue::operator==):
        (WebCore::ScriptValue::isEqual):
        (WebCore::ScriptValue::isFunction):
        (WebCore::ScriptValue::isNull):
        (WebCore::ScriptValue::isUndefined):
        (WebCore::ScriptValue::isObject):
        (WebCore::ScriptValue::hasNoValue):
        (WebCore::ScriptValue::clear):
        (ScriptValue):
        (WebCore::ScriptValue::v8Value):
        (WebCore::ScriptValue::v8ValueRaw):
        * bindings/v8/SharedPersistent.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAttrGetterCustom):

2013-02-20  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: highlight undefined word in JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=109585

        Reviewed by Vsevolod Vlasov.

        Test enhancement: inspector/syntax-highlight-javascript.html

        Add global object value properties to tokenizer and add a css style
        class to highlight "undefined" with gray color.

        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer.prototype.nextToken):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:
        * inspector/front-end/inspectorSyntaxHighlight.css:
        (.webkit-javascript-undef):

2013-02-20  Mike West  <mkwst@chromium.org>

        Use EventPathWalker rather than parentNode() to normalize event targets in EventHandler.
        https://bugs.webkit.org/show_bug.cgi?id=110037

        Reviewed by Ryosuke Niwa.

        We need to teach EventHandler about Shadow DOM in a few places in order
        to ensure that we properly target events dispatched upon text nodes.
        Rather than naively grabbing the text node's direct parent via
        parentNode(), we need to account for the case in which the text node is
        distributed[1] to an insertion point inside a shadow host.
        EventPathWalker::parent understands these relationships, and should
        be used when dealing with mouse, drag, and touch events.

        [1]: http://www.w3.org/TR/shadow-dom/#dfn-distribution

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::handleTouchEvent):
        (WebCore::EventHandler::passGestureEventToWidgetIfPossible):
        (WebCore::EventHandler::updateDragAndDrop):
            Refactor parentNode callsites to use EventPathWalker::parent().

2013-02-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Search in ProfilesPanel is broken
        https://bugs.webkit.org/show_bug.cgi?id=110312

        Reviewed by Pavel Feldman.

        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileView.prototype.matchesQuery):
        (WebInspector.CPUProfileView.prototype.performSearch):

2013-02-20  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: View.markAsRoot should never be invoked on attached view.
        https://bugs.webkit.org/show_bug.cgi?id=110224

        Reviewed by Pavel Feldman.

        This will cause CSS loading problems after "show".

        * inspector/front-end/Drawer.js:
        Ensure child view is detached before marked as root.
        * inspector/front-end/View.js:
        (WebInspector.View.prototype.markAsRoot): Added assertion.

2013-02-20  Nils Barth  <nbarth@google.com>

        File upload control doesn't apply CSS vertical padding or border to file name
        https://bugs.webkit.org/show_bug.cgi?id=109011

        Reviewed by Hajime Morrita.

        Test: fast/forms/file/file-vertical-padding-border.html

        * rendering/RenderFileUploadControl.cpp:
            Add borderTop() and paddingTop() when computing position.
        (WebCore::RenderFileUploadControl::paintObject):

2013-02-19  Andrey Adaikin  <aandrey@chromium.org>

        Few methods in WebGLRenderingContext.idl have incorrect signatures
        https://bugs.webkit.org/show_bug.cgi?id=110305

        Reviewed by Kentaro Hara.

        * html/canvas/WebGLRenderingContext.idl:

2013-02-19  Tim Horton  <timothy_horton@apple.com>

        Clarify isInWindow vs. isVisible path through to RenderLayerCompositor
        https://bugs.webkit.org/show_bug.cgi?id=110261
        <rdar://problem/13196122>

        Reviewed by Simon Fraser.

        Remove RenderLayerCompositor::willMoveOffscreen/didMoveOnscreen.
        Add RenderLayerCompositor::setIsInWindow, and pipe in-window changes through from Page::setIsInWindow.
        Adjust a few Document functions that previously called RenderView::didMoveOnscreen/willMoveOffscreen to use setIsInWindow instead, since in-window state changes are occurring when attaching and detaching documents.

        * WebCore.exp.in: Export Page::setIsInWindow.
        * dom/Document.cpp:
        (WebCore::Document::attach): Use setIsInWindow instead of didMoveOnscreen.
        (WebCore::Document::documentWillBecomeInactive): Use setIsInWindow instead of willMoveOffscreen.
        (WebCore::Document::documentDidResumeFromPageCache): Use setIsInWindow instead of didMoveOnscreen.
        * page/FrameView.cpp:
        (WebCore::FrameView::didMoveOnscreen):
        (WebCore::FrameView::willMoveOffscreen):
        RenderView doesn't care about moving on/offscreen, just in-window state.
        (WebCore::FrameView::setIsInWindow): Added. Forward isInWindow changes to our RenderView.
        * page/FrameView.h:
        (FrameView): Add setIsInWindow.
        * page/Page.cpp:
        (WebCore::Page::setIsInWindow): Added. Forward isInWindow changes to the Page's FrameViews.
        * page/Page.h:
        (Page): Add setIsInWindow.
        (WebCore::Page::isInWindow):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::setIsInWindow): Added. Replace willMoveOffscreen/didMoveOnscreen with setIsInWindow,
        since that's the only change we actually care about.
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor): Add setIsInWindow.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setIsInWindow): Added. Replace willMoveOffscreen/didMoveOnscreen with setIsInWindow,
        since that's the only change RenderLayerCompositor actually cares about.
        * rendering/RenderView.h:
        (RenderView): Add setIsInWindow.

2013-02-19  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Cleanup and add JSDocs to SuggestBox
        https://bugs.webkit.org/show_bug.cgi?id=110202

        Reviewed by Pavel Feldman.

        SuggestBox contains some obsolete/unused code and not fully
        covered with JSDocs.

        * inspector/front-end/SuggestBox.js:
        (WebInspector.SuggestBox.prototype.visible):
        Replaced getter with function.
        (WebInspector.SuggestBox.prototype._onScrollOrResize):
        Use camel-case for function names.
        (WebInspector.SuggestBox.prototype._onBoxMouseDown): Ditto.
        (WebInspector.SuggestBox.prototype.updateSuggestions):
        Removed unused code.
        (WebInspector.SuggestBox.prototype.hide): Adopt changes.
        (WebInspector.SuggestBox.prototype._applySuggestion): Ditto.
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.isSuggestBoxVisible): Ditto.

2013-02-19  Hayato Ito <hayato@chromium.org>

        Calculate EventPath in EventDispatcher's constructor.
        https://bugs.webkit.org/show_bug.cgi?id=109905

        Reviewed by Dimitri Glazkov.

        This patch calculates an EventPath in EventDispatcher's
        constructor and removes EventDispatcher::ensureEventPath().
        We don't have any reason to initialize an EventPath lazily.

        No tests. No change in behavior.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::EventDispatcher):
        (WebCore::EventDispatcher::dispatch):
        * dom/EventDispatcher.h:
        (WebCore::EventDispatcher::eventPath):
        (EventDispatcher):
        * dom/FocusEvent.cpp:
        (WebCore::FocusEventDispatchMediator::dispatchEvent):
        (WebCore::BlurEventDispatchMediator::dispatchEvent):
        (WebCore::FocusInEventDispatchMediator::dispatchEvent):
        (WebCore::FocusOutEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):

2013-02-19  Simon Fraser  <simon.fraser@apple.com>

        Fix TileCache tile size when zoomed on slow-scrolling site
        https://bugs.webkit.org/show_bug.cgi?id=110289

        Reviewed by Tim Horton.
        
        In slow scrolling mode, we use the tile coverage rect as the tile size
        (so a single tile covers the viewport). When zoomed, the tile coverage rect
        shrinks relative to the TileCache, so scale the tile size back up.

        Test: platform/mac-wk2/tiled-drawing/tile-size-slow-zoomed.html

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::tileSizeForCoverageRect):

2013-02-19  Hayato Ito  <hayato@chromium.org>

        Rename AncestorChainWalker.
        https://bugs.webkit.org/show_bug.cgi?id=110146

        Reviewed by Dimitri Glazkov.

        Rename AncestorChainWalker to EventPathWalker.
        The term of EventPath is used in DOM Core spec.  EventPath was
        already introduced into a EventContext.h in r112055. We should
        spread this term into the Walker class since they share the same
        purpose.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/EventDispatcher.cpp:
        * dom/EventPathWalker.cpp: Renamed from Source/WebCore/dom/AncestorChainWalker.cpp.
        (WebCore):
        (WebCore::EventPathWalker::EventPathWalker):
        (WebCore::EventPathWalker::parent): parent() is now a static function to cover simple use cases.
        (WebCore::EventPathWalker::moveToParent): Renamed from parent().
        * dom/EventPathWalker.h: Renamed from Source/WebCore/dom/AncestorChainWalker.h.
        (WebCore):
        (EventPathWalker):
        (WebCore::EventPathWalker::node):
        (WebCore::EventPathWalker::isVisitingInsertionPointInReprojection): Renamed from isCrossingInsertionPoint().
        * dom/EventRetargeter.cpp:
        (WebCore::EventRetargeter::calculateEventPath):
        (WebCore::EventRetargeter::buildRelatedNodeMap):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::focusedNode):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::attach):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::handleWheelEvent):

2013-02-19  Dean Jackson  <dino@apple.com>

        Snapshotted plugin label should not be selectable
        https://bugs.webkit.org/show_bug.cgi?id=110286

        Reviewed by Simon Fraser.

        Update the CSS to make it clear that you should click
        on a snapshot (use the finger pointer) and disable
        text selection.

        * css/plugIns.css:
        (embed::-webkit-snapshotted-plugin-content .snapshot-container .snapshot-label):

2013-02-19  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Enable shape-inside support for ellipses
        https://bugs.webkit.org/show_bug.cgi?id=109868

        Reviewed by Dirk Schulze.

        This change is very similar to the one recently made for circles:
        removed the test that disabled ellipse values for shape-inside.
        The remaining support for ellipses, which is based on rounded rectangles
        whose width/height is equal to their radiusX/radiusY, has not changed.

        Test: fast/exclusions/shape-inside/shape-inside-ellipse.html

        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::isEnabledFor): No longer disallows any BasicShape type.

2013-02-19  Uday Kiran  <udaykiran@motorola.com>

        'round' not implemented in border-image
        https://bugs.webkit.org/show_bug.cgi?id=14185

        Reviewed by David Hyatt.

        Add rendering support for 'round' keyword of border-image-repeat CSS property
        http://dev.w3.org/csswg/css3-background/#border-image-repeat
        Rebased original patch by Benjamin Otte <otte@gnome.org> and made few fixes.

        Test: fast/borders/border-image-02.html

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (Image):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage): For 'round' keyword,
        the image is tiled (repeated) to fill the area. If it does not fill the area
        with a whole number of tiles, the image is rescaled so that it does.

2013-02-19  Conrad Shultz  <conrad_shultz@apple.com>

        Allow UI clients to handle vertical wheel events.
        https://bugs.webkit.org/show_bug.cgi?id=110006

        Reviewed by Tim Horton.

        Add API to allow matching changes in WebKit2 to control rubber-banding behavior at vertical page extrema.
        If rubber-banding is disabled during a scroll event that would otherwise trigger rubber-banding, dispatch
        didNotHandleWheelEvent() to the page UI client.

        * WebCore.exp.in:
        Export new rubber-banding API.

        * page/Page.cpp:
        (WebCore):
        (WebCore::Page::rubberBandsAtBottom):
        Proxy for the corresponding function in ScrollingCoordinator.
        (WebCore::Page::setRubberBandsAtBottom):
        Ditto.
        (WebCore::Page::rubberBandsAtTop):
        Ditto.
        (WebCore::Page::setRubberBandsAtTop):
        Ditto.

        * page/Page.h:
        (Page):
        Declare new rubber-banding API (above).

        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::rubberBandsAtBottom):
        Stub API implementation.
        (WebCore::ScrollingCoordinator::setRubberBandsAtBottom):
        Ditto.
        (WebCore::ScrollingCoordinator::rubberBandsAtTop):
        Ditto.
        (WebCore::ScrollingCoordinator::setRubberBandsAtTop):
        Ditto.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        Initialize new member variables.
        (WebCore::ScrollingTree::setMainFramePinState):
        Set top/bottom pinned states.
        (WebCore::ScrollingTree::rubberBandsAtBottom):
        New accessor function.
        (WebCore::ScrollingTree::setRubberBandsAtBottom):
        New mutator function.
        (WebCore::ScrollingTree::rubberBandsAtTop):
        New accessor function.
        (WebCore::ScrollingTree::setRubberBandsAtTop):
        New mutator function.
        (WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
        Start a vertical swipe event if the frame is pinned at the top or bottom and associated rubber-banding is disabled.

        * page/scrolling/ScrollingTree.h:
        (ScrollingTree):
        Declare new rubber-banding API and associated member variables.

        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):
        Declare API overrides.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::rubberBandsAtBottom):
        Method override; proxy to corresponding function in ScrollingTree.
        (WebCore::ScrollingCoordinatorMac::setRubberBandsAtBottom):
        Ditto.
        (WebCore::ScrollingCoordinatorMac::rubberBandsAtTop):
        Ditto.
        (WebCore::ScrollingCoordinatorMac::setRubberBandsAtTop):
        Ditto.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::pinnedInDirection):
        Remove trailing whitespace.
        (WebCore::ScrollingTreeScrollingNodeMac::updateMainFramePinState):
        Calculate and pass vertical pinning state to ScrollingTree::setMainFramePinState().

2013-02-19  Simon Fraser  <simon.fraser@apple.com>

        Rubber-banding should not affect the visibleRect of the TileCache
        https://bugs.webkit.org/show_bug.cgi?id=110278

        Reviewed by Beth Dakin.
        
        When rubber-banding a slow-scrolling page, or image document, we would constantly re-create
        the bottom tile because of the logic that adapts the tile size to the visible rect when slow
        scrolling.
        
        Avoid that by ensuring that the visibleRect is not affected by rubber-banding. This is done
        via a GraphicsLayerClient function that allows RenderLayerCompositor to provide a custom
        position for the scroll layer. We constrain that scroll position to remove the overhang that
        results from rubber-banding.

        I wasn't able to make a test for this, even with internals.setScrollViewPosition().

        * platform/graphics/GraphicsLayerClient.h:
        (GraphicsLayerClient):
        (WebCore::GraphicsLayerClient::customPositionForVisibleRectComputation):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::computeVisibleRect):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::customPositionForVisibleRectComputation):
        * rendering/RenderLayerCompositor.h:

2013-02-19  Tony Gentilcore  <tonyg@chromium.org>

        Fix crash in preloading scanning base tags with no href attribute for background parser
        https://bugs.webkit.org/show_bug.cgi?id=110276

        Reviewed by Eric Seidel.

        Previously a <base> tag without an href attribute (like the one in fast/dom/HTMLAnchorElement/set-href-attribute-rebase.html)
        would crash the background parser's preload scanner.

        To fix that, we only call stripLeadingAndTrailingHTMLSpaces() if the href attribute is non-null. This matches the main thread parser.

        Along with this, I decided to templatize updatePredictedBaseURL() so that the main and background parser can share the same impl.

        This required making CompactHTMLToken and HTMLToken a little more similar:
        1. Give HTMLToken a getAttributeItem() method.
        2. Move CompactAttribute to CompactHTMLToken::Attribute and make it a struct.

        No new tests because covered by existing tests.

        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/CompactHTMLToken.cpp:
        (SameSizeAsCompactHTMLToken):
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        (WebCore::CompactHTMLToken::getAttributeItem):
        (WebCore::CompactHTMLToken::isSafeToSendToAnotherThread):
        * html/parser/CompactHTMLToken.h:
        (WebCore::CompactHTMLToken::Attribute::Attribute):
        (Attribute):
        (WebCore::CompactHTMLToken::attributes):
        (CompactHTMLToken):
        (WebCore::CompactHTMLToken::publicIdentifier):
        (WebCore::CompactHTMLToken::systemIdentifier):
        * html/parser/HTMLParserIdioms.h:
        (WebCore):
        (WebCore::stripLeadingAndTrailingHTMLSpaces):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (WebCore):
        (WebCore::TokenPreloadScanner::updatePredictedBaseURL):
        * html/parser/HTMLPreloadScanner.h:
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::getAttributeItem):
        (HTMLToken):

2013-02-19  Mark Lam  <mark.lam@apple.com>

        Introducing AbstractSQLTransaction and AbstractSQLTransactionBackend.
        https://bugs.webkit.org/show_bug.cgi?id=110273.

        Reviewed by Anders Carlsson.

        This is part of the webdatabase refactoring for webkit2.
        - Also changed the frontend and backend to only refer to the
          abstract interface of each other.

        No new tests.

        * Modules/webdatabase/AbstractSQLTransaction.h: Added.
        (AbstractSQLTransaction):
        (WebCore::AbstractSQLTransaction::~AbstractSQLTransaction):
        * Modules/webdatabase/AbstractSQLTransactionBackend.h: Added.
        (AbstractSQLTransactionBackend):
        (WebCore::AbstractSQLTransactionBackend::~AbstractSQLTransactionBackend):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::hasCallback):
        (WebCore::SQLTransaction::hasSuccessCallback):
        (WebCore::SQLTransaction::hasErrorCallback):
        (WebCore::SQLTransaction::setBackend):
        * Modules/webdatabase/SQLTransaction.h:
        (SQLTransaction):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::create):
        (WebCore::SQLTransactionBackend::SQLTransactionBackend):
        * Modules/webdatabase/SQLTransactionBackend.h:
        (SQLTransactionBackend):
        * Modules/webdatabase/SQLTransactionStateMachine.h:

2013-02-19  Emil A Eklund  <eae@chromium.org>

        Change computeStickyPositionConstraints to use LayoutBoxExtent for margins
        https://bugs.webkit.org/show_bug.cgi?id=108872

        Reviewed by Levi Weintraub.
        
        Change RenderBoxModelObject::computeStickyPositionConstraints to
        use a LayoutBoxExtent to represent margins.

        No new tests, no change in functionality.

        * platform/graphics/LayoutRect.h:
        (WebCore::LayoutRect::contract):
        Add version contract methods that takes a LayoutBoxExtent object.
        
        * platform/graphics/LayoutSize.h:
        (WebCore::LayoutSize::shrink):
        Add shrink method.
        
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints):
        Change to use a LayoutBoxExtent object to represent margins.

2013-02-19  Tony Gentilcore  <tonyg@chromium.org>

        Disable ASSERT(!hasInsertionPoint()) for background parser
        https://bugs.webkit.org/show_bug.cgi?id=110251

        Reviewed by Adam Barth.

        The background parser crashes about 10 layout tests by hitting ASSERT(!hasInsertionPoint()).
        Now, finish() is the thing that closes the HTMLInputStream which removes the insertion point.
        In these tests, a document.open() calls insert() which clears the HTMLInputStream which causes
        there to be an insertion point again.

        With the main thread parser, insert() is called before finish() so the ASSERT passes.
        However, with the threaded parser, finish() is called before insert(), so we fail the ASSERT.

        This patch disables the ASSERT for the background parser because m_input isn't really relevant.
        This causes us to pass the tests. However, there is a risk that now hasInsertionPoint() may be incorrect
        and Document has a non-debug branch that tests hasInsertionPoint().

        No new tests because covered by existing tests.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd):

2013-02-19  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Enable shape-inside support for ellipses
        https://bugs.webkit.org/show_bug.cgi?id=109868

        Reviewed by Dirk Schulze.

        This change is very similar to the one recently made for circles:
        removed the test that disabled ellipse values for shape-inside.
        The remaining support for ellipses, which is based on rounded rectangles
        whose width/height is equal to their radiusX/radiusY, has not changed.

        Test: fast/exclusions/shape-inside/shape-inside-ellipse.html

        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::isEnabledFor): No longer disallows any BasicShape type.

2013-02-19  Simon Fraser  <simon.fraser@apple.com>

        Separate constraining for overhang from fixed-position zooming behavior in scrollOffsetForFixedPosition()
        https://bugs.webkit.org/show_bug.cgi?id=110267

        Reviewed by Beth Dakin.

        The static scrollOffsetForFixedPosition() function in ScrollingCoordinator did two things;
        it constrained the scroll position when rubber-banding, and applied the special scaling for
        fixed position when zoomed.
        
        Separate these out so that we can use the rubber-banding constrained elsewhere.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollOffsetForFixedPosition): The static function is here now.
        * page/FrameView.h:
        * page/scrolling/ScrollingCoordinator.cpp: Code moved to FrameView.
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition): scrollOffsetForFixedPosition()
        is now on FrameView.
        * platform/ScrollableArea.cpp:
        (WebCore::constrainedScrollPosition): Helper to constrain one axis for overhang.
        (WebCore::ScrollableArea::constrainScrollPositionForOverhang): Static function that
        can be called by FrameView::scrollOffsetForFixedPosition().
        * platform/ScrollableArea.h: Static function constrainScrollPositionForOverhang()
        so we can call it from another thread. Also a member fuction of the same name, which takes
        the scrollPosition as input (so we can feed it a layer position in a later patch).

2013-02-19  Tony Gentilcore  <tonyg@chromium.org>

        Fix checkThatTokensAreSafeToSendToAnotherThread() now that the preload scanner is enabled
        https://bugs.webkit.org/show_bug.cgi?id=110258

        Reviewed by Adam Barth.

        We were hitting this ASSERT on numerous tests with the background parser enabled. This copy fixes the assertion.

        No new tests becuase covered by existing tests.

        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::setCharset):

2013-02-19  Tony Gentilcore  <tonyg@chromium.org>

        Fix typo: inititatorFor->initiatorFor
        https://bugs.webkit.org/show_bug.cgi?id=110260

        Reviewed by Adam Barth.

        No new tests because no changed functionality.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::initiatorFor):
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        * html/parser/HTMLPreloadScanner.h:

2013-02-19  Tony Chang  <tony@chromium.org>

        Convert 3 settings to use Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=109875

        Reviewed by Ryosuke Niwa.

        Convert mediaEnabled, applicationChromeMode and DOMPasteAllowed to
        use Settings.in. They previously had inconsistently named setters.

        No new tests, this is a refactoring.

        * Source/WebCore/WebCore.exp.in: Remove symbols that are now inlined from exports.
        * Source/WebCore/WebCore.order: Remove symbols that no longer exist.
        * dom/make_names.pl:
        (printConstructorInterior): Rename isMediaEnabled to mediaEnabled.
        (printWrapperFunctions): Rename isMediaEnabled to mediaEnabled.
        * editing/EditorCommand.cpp:
        (WebCore::supportedPaste): Rename isDOMPasteAllowed to DOMPasteAllowed.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Remove custom code.
        * page/Settings.h:
        (Settings): Remove custom code.
        * page/Settings.in: Add entries for mediaEnabled, applicationChromeMode and DOMPasteAllowed.
        * page/make_settings.pl:
        (setterFunctionName): Expand uppercase rules to include DOM.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isDefault): Rename inApplicationChromeMode to applicationChromeMode.
        * rendering/RenderThemeWin.cpp:
        (WebCore::documentIsInApplicationChromeMode): Rename inApplicationChromeMode to applicationChromeMode.

2013-02-19  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Refactor the code in preparation of auto placement support
        https://bugs.webkit.org/show_bug.cgi?id=110244

        Reviewed by Ojan Vafai.

        Test: fast/css-grid-layout/grid-auto-flow-resolution.html

        In order to support auto placement, we need to iterate over the grid items with
        auto row / column several times. This changes makes us do that in a very simple,
        not-yet-conformant way. While touching this code, the distinction between grid-auto-flow
        none and row / column was better drawn (and enforced).

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionFromStyle):
        Made it illegal to call resolveGridPositionFromStyle if the grid track is auto and
        grid-auto-flow is not none. This would catch bad use of the function.

        (WebCore::RenderGrid::maximumIndexInDirection):
        Updated to bail out if the grid track is auto. Also improved the comment.

        (WebCore::RenderGrid::placeItemsOnGrid):
        Updated the function to do several iterations. Also handled the grid-auto-flow: none
        case differently as it shouldn't need the extra iteration(s).

2013-02-19  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] REGRESSION: RenderMultiColumnSets broken by the RenderRegion -> RenderBlock subclassing.
        https://bugs.webkit.org/show_bug.cgi?id=110239.

        Reviewed by Simon Fraser.

        Test: fast/multicol/newmulticol/column-rules-fixed-height.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::columnRectAt):
        Make sure the columnGap() in the old multicolumn code is always expressed as a LayoutUnit. This was the
        one place where it was still an int.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::paintFlowThreadPortionInRegion):
        Rework the painting of flow thread portions to account for the fact that regions paint at an integral
        translation. This means you have to construct clipping around that integral destination. Subpixel layout
        regions did not clip correctly as a result of this issue.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnRectAt):
        Fix the same bug with columnGap() that the old column code has, i.e., one spot where it was an int.

        (WebCore::RenderMultiColumnSet::paintObject):
        RenderMultiColumnSet should be using paintObject and not paint and it needs to check for visibility
        and phases now that it is a RenderBlock subclass.

        (WebCore::RenderMultiColumnSet::paintColumnRules):
        Fix the bug that Opera guys fixed in the old multi-column code. They didn't patch the new code, so this
        takes care of that.

        * rendering/RenderMultiColumnSet.h:
        (RenderMultiColumnSet):
        Change to use paintObject instead of paint.

2013-02-19  Branimir Lambov  <blambov@google.com>

        Fix 'slice' aspect ratio calculation
        https://bugs.webkit.org/show_bug.cgi?id=99984

        Reviewed by Dirk Schulze.

        Previously the calculation for the 'slice' aspect ratio would incorrectly calculate the
        source rect location based on the destination rect offset. This caused our source rect to be
        incorrect, and sometimes render outside the visible area completely. After this patch
        our implementation matches the implementation of both Gecko and Presto.

        The relevant spec section:
        http://www.w3.org/TR/SVG/single-page.html#coords-PreserveAspectRatioAttribute

        Tests: svg/as-image/image-preserveAspectRatio-all.svg
               svg/filters/feImage-preserveAspectRatio-all.svg

        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::transformRect):

2013-02-19  Kentaro Hara  <haraken@google.com>

        [V8] ScriptRunner::runCompiledScript() should return Handle<Value>() when OOM occurs
        https://bugs.webkit.org/show_bug.cgi?id=110254

        Reviewed by Adam Barth.

        Chromium bug: https://code.google.com/p/chromium/issues/detail?id=176951

        Currently ScriptRunner::runCompiledScript() calls
        ASSERT(script.IsEmpty()) when OOM occurs. The Chromium bug is
        hitting the ASSERT(). The ASSERT() does not make sense at all.
        Instead, we should return an empty handle when OOM occurs.

        No tests. The bug happens only when OOM occurs.

        * bindings/v8/ScriptRunner.cpp:
        (WebCore::ScriptRunner::runCompiledScript):

2013-02-19  Elliott Sprehn  <esprehn@chromium.org>

        Support both MutationObserver and WebKitMutationObserver
        https://bugs.webkit.org/show_bug.cgi?id=109776

        Reviewed by Ojan Vafai.

        We should allow new MutationObserver now that we support parser generated
        mutations. This leaves the old prefixed constructor in until we decide
        people don't depend on it.

        Test: fast/dom/MutationObserver/mutation-observer-prefix.html

        * page/DOMWindow.idl:

2013-02-19  Elliott Sprehn  <esprehn@chromium.org>

        Remove RenderText::updateText
        https://bugs.webkit.org/show_bug.cgi?id=109991

        Reviewed by Eric Seidel.

        There's no reason for the generic RenderText::updateText virtual hook
        anymore now that r143060 made RenderQuote stop setting dirty bits during
        layout since the hook is only used by RenderCounter.

        Instead add updateCounterIfNeeded and make it clear this is a hack for
        counters.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateCounterIfNeeded): Added, not handles the counter specific hack.
        (WebCore::dirtyLineBoxesForRenderer):
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::updateCounter):
        * rendering/RenderCounter.h:
        (RenderCounter):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::styleDidChange):
        (WebCore::RenderQuote::updateDepth):
        * rendering/RenderQuote.h:
        (RenderQuote):
        * rendering/RenderText.h:
        (RenderText):

2013-02-19  Tony Chang  <tony@chromium.org>

        Border changes on tables with collapsed borders doesn't relayout table cells
        https://bugs.webkit.org/show_bug.cgi?id=109774

        Reviewed by David Hyatt.

        Test: fast/table/border-collapsing/dynamic-border-width-change.html

        Changes to border top and border bottom on table rows also changes the size
        of the table cell causing a relayout to be needed.

        * rendering/RenderTableRow.cpp:
        (WebCore::borderWidthChanged): Also include border top and bottom.
        (WebCore::RenderTableRow::styleDidChange): Remove logical from the helper function name.

2013-02-19  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString):

2013-02-19  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Implement matrix transform animation with clutter ac backend
        https://bugs.webkit.org/show_bug.cgi?id=109848

        Reviewed by Gustavo Noronha Silva.

        Clutter 1.12 doesn't support additive transform animations yet, so the combination
        of two or more transformations(such as rotation after translation) runs unexpectedly.
        So we use a matrix transformation instead for the case.

        Covered by existing animation tests.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::getValueFunctionNameForTransformOperation):
        (WebCore::GraphicsLayerClutter::createTransformAnimationsFromKeyframes):
        * platform/graphics/clutter/PlatformClutterAnimation.cpp:
        (WebCore::toClutterActorPropertyString): Add actor property "transform"
        (WebCore::clutterMatrixProgress): Handle interpolation between two matrices instead of default clutter_matrix_progress.
        (WebCore):
        (WebCore::PlatformClutterAnimation::supportsAdditiveValueFunction):
        (WebCore::PlatformClutterAnimation::setFromValue): for TransformationMatrix.
        (WebCore::PlatformClutterAnimation::setToValue): ditto.
        (WebCore::PlatformClutterAnimation::addClutterTransitionForProperty):
        (WebCore::PlatformClutterAnimation::addTransformTransition):
        * platform/graphics/clutter/PlatformClutterAnimation.h:
        (PlatformClutterAnimation):
        * platform/graphics/clutter/TransformationMatrixClutter.cpp: Add copy constructor for CoglMatrix.
        (WebCore::TransformationMatrix::TransformationMatrix):
        (WebCore):
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix):

2013-02-19  Kassy Coan  <kassycoan@chromium.org>

        Update FeatureObserver on top level navigation in addition to page destruction.
        https://bugs.webkit.org/show_bug.cgi?id=109874

        Reviewed by Adam Barth.

        No new tests. Only effect is to histogram more frequently.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        * page/FeatureObserver.cpp:
        (WebCore::FeatureObserver::~FeatureObserver):
        (WebCore):
        (WebCore::FeatureObserver::updateMeasurements):
        (WebCore::FeatureObserver::didCommitLoad):
        * page/FeatureObserver.h:
        (FeatureObserver):

2013-02-19  Morten Stenshorne  <mstensho@opera.com>

        Remove unnecessary (and problematic) copy-constructor from LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=110121

        This copy constructor does what a default copy constructor would do, so
        it's not necessary. Furthermore, this copy constructor is the only
        reason why LayoutUnit becomes non-POD, and that triggers a gdb bug,
        making it impossible to do things like "print location()" when inside
        some RenderBlock, for instance.

        Gdb bug http://sourceware.org/bugzilla/show_bug.cgi?id=15154 reported.

        Reviewed by Benjamin Poulain.

        No tests. Apart from dealing with buggy debuggers, this is just code cleanup.

        * platform/LayoutUnit.h:

2013-02-19  Emil A Eklund  <eae@chromium.org>

        LayoutUnit::epsilon shouldn't be necessary to place floats
        https://bugs.webkit.org/show_bug.cgi?id=94000

        Reviewed by Levi Weintraub.
        
        Currently, to get float placement correct, we need to have an
        epsilon tolerance in RenderBlock::computeLogicalLocationForFloat
        for the width of the line to fit them on. This really shouldn't
        be necessary, and probably indicates we're losing precision
        elsewhere.
        
        Remove epsilon as it no longer appears to be needed. All layout
        tests pass without it.

        No new tests, covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeLogicalLocationForFloat):

2013-02-19  Tim Volodine  <timvolodine@chromium.org>

        Text Autosizing: prevent oscillation of font sizes during autosizing
        https://bugs.webkit.org/show_bug.cgi?id=108205

        Reviewed by Kenneth Rohde Christiansen.

        On some websites autosized font-sizes oscillate due to layouts caused by
        hovering or incremental page loading (and on other sites font sizes do
        eventually stabilize, but it takes many layouts before they reach a steady
        size). To prevent all these cases, we no longer allow the autosizing
        multiplier to change after it has been set (to a value other than 1).

        This won't always give exactly the same results, but testing on 2000 top
        sites shows that this makes little difference in practice, and it prevents
        these very jarring cases. As a happy side-effect, this speeds up layouts
        as font sizes change less.

        Test: fast/text-autosizing/oscillation-javascript-fontsize-change.html

        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        * page/Settings.cpp:
        (WebCore::Settings::setTextAutosizingFontScaleFactor):
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::recalculateMultipliers):
        (WebCore):
        (WebCore::TextAutosizer::processContainer):
        * rendering/TextAutosizer.h:
        (TextAutosizer):

2013-02-19  Youenn Fablet  <youennf@gmail.com>

        [EFL][DRT] http/tests/loading/307-after-303-after-post.html times out
        https://bugs.webkit.org/show_bug.cgi?id=93214

        Ensured that GET verb is consistently used for any request
        coming after a redirection that triggers switching to GET.

        Reviewed by Martin Robinson.

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

2013-02-19  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Fix compilation if Qt was configured with -no-rtti
        https://bugs.webkit.org/show_bug.cgi?id=110234

        Reviewed by Noam Rosenthal.

        Availability of dynamic_cast should be checked.

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

2013-02-18  Alexey Proskuryakov  <ap@apple.com>

        Unregistered blob URLs have incorrect MIME type
        https://bugs.webkit.org/show_bug.cgi?id=110166

        Reviewed by Sam Weinig.

        * page/SecurityOrigin.cpp: (WebCore::SecurityOrigin::shouldUseInnerURL): Added a FIXME.

        * platform/network/BlobResourceHandle.cpp: (WebCore::BlobResourceHandle::notifyResponseOnError):
        Pass an accurate MIME type (for a delegate to see).

2013-02-19  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: additional checks on LevelDB decoding
        https://bugs.webkit.org/show_bug.cgi?id=109711

        Reviewed by Tony Chang.

        Watch out for decoding errors caused by corrupted data, and exit various
        decode/compare operations earlier.

        Covered by existing LayoutTests and Chromium's webkit_unit_tests

        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::decodeStringWithLength): Bail if length is negative.
        (WebCore::IDBLevelDBCoding::compareEncodedStringsWithLength): Distinguish error case.
        (WebCore::IDBLevelDBCoding::extractEncodedIDBKey): Bail if length is negative.
        (WebCore::IDBLevelDBCoding::compareEncodedIDBKeys): Distinguish error case.
        (WebCore::IDBLevelDBCoding::compare): Plumb through "ok".
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::compare): Ditto.
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::compare): Ditto.
        (WebCore::IDBLevelDBCoding::IndexDataKey::compare): Ditto.
        * Modules/indexeddb/IDBLevelDBCoding.h: Updated method signatures.

2013-02-19  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Implement keyframe animations with clutter ac backend
        https://bugs.webkit.org/show_bug.cgi?id=110057

        Reviewed by Gustavo Noronha Silva.

        This patch brings accelerated keyframe animation with clutter to WebKitGtk+.
        Changes of GraphicsLayerClutter are based on GraphicsLayerCA. But major changes
        of PlatformClutterAnimation are implemented with clutter keyframe transition apis.
        See http://developer.gnome.org/clutter/stable/ClutterKeyframeTransition.html

        Covered by existing animation tests.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::createKeyframeAnimation):
        (WebCore::GraphicsLayerClutter::setTransformAnimationKeyframes):
        (WebCore::GraphicsLayerClutter::setAnimationKeyframes):
        * platform/graphics/clutter/PlatformClutterAnimation.cpp:
        (WebCore::toClutterActorPropertyString):
        (WebCore::PlatformClutterAnimation::PlatformClutterAnimation):
        (WebCore::PlatformClutterAnimation::setTimingFunction):
        (WebCore::PlatformClutterAnimation::setValues):
        (WebCore::PlatformClutterAnimation::setKeyTimes):
        (WebCore::PlatformClutterAnimation::setTimingFunctions):
        (WebCore::PlatformClutterAnimation::addClutterTransitionForProperty):
        (WebCore):
        (WebCore::PlatformClutterAnimation::addClutterKeyframeTransitionForProperty):
        (WebCore::PlatformClutterAnimation::addOpacityTransition):
        (WebCore::PlatformClutterAnimation::addTransformTransition):
        (WebCore::PlatformClutterAnimation::addAnimationForKey):
        (WebCore::PlatformClutterAnimation::removeAnimationForKey):
        * platform/graphics/clutter/PlatformClutterAnimation.h:
        (PlatformClutterAnimation):

2013-02-19  Claudio Saavedra  <csaavedra@igalia.com>

        [harfbuzz] Crash in harfbuzz related code
        https://bugs.webkit.org/show_bug.cgi?id=110145

        Reviewed by Martin Robinson.

        Patch by Behdad Esfahbod <behdad@google.com>

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns): Ask harfbuzz
        to guess the segment properties.

2013-02-19  Pavel Podivilov  <podivilov@chromium.org>

        Web Inspector: release backtrace object group on each step.
        https://bugs.webkit.org/show_bug.cgi?id=110223

        Reviewed by Pavel Feldman.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore):
        (WebCore::InspectorDebuggerAgent::stepOver):
        (WebCore::InspectorDebuggerAgent::stepInto):
        (WebCore::InspectorDebuggerAgent::stepOut):

2013-02-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142975.
        http://trac.webkit.org/changeset/142975
        https://bugs.webkit.org/show_bug.cgi?id=110225

        Introduces hard-to-reproduce crashes upon inspected page
        navigation on Mac (Requested by apavlov on #webkit).

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::clearFrontend):
        (WebCore::InspectorCSSAgent::enable):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        (WebCore::InspectorCSSAgent::bindStyleSheet):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        * inspector/InspectorCSSAgent.h:
        (InspectorCSSAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getViaInspectorResourceForRule):
        (WebInspector.CSSStyleModelResourceBinding.prototype.):
        (WebInspector.CSSStyleModelResourceBinding.prototype.requestStyleSheetIdForResource):
        (WebInspector.CSSStyleModelResourceBinding.prototype.requestResourceURLForStyleSheetId):
        (WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetIdForResource):
        (WebInspector.CSSStyleModelResourceBinding.prototype._loadStyleSheetHeaders):
        (WebInspector.CSSStyleModelResourceBinding.prototype.headersLoaded):
        (WebInspector.CSSStyleModelResourceBinding.prototype._requestViaInspectorResource):
        (WebInspector.CSSStyleModelResourceBinding.prototype._getOrCreateInspectorResource):
        (WebInspector.CSSStyleModelResourceBinding.prototype._reset):
        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping.prototype._styleSheetChanged.callback):
        (WebInspector.SASSSourceMapping.prototype._styleSheetChanged):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._createRuleOriginNode.callback):
        (WebInspector.StylePropertiesSection.prototype._createRuleOriginNode):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StyleContentBinding.prototype.callback):
        (WebInspector.StyleContentBinding.prototype.setStyleContent):
        (WebInspector.StyleContentBinding.prototype.):
        (WebInspector.StyleContentBinding.prototype._innerStyleSheetChanged):

2013-02-19  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderGrid::computedUsedBreadthOfGridTracks can read past m_grid's size
        https://bugs.webkit.org/show_bug.cgi?id=110126

        Reviewed by Ojan Vafai.

        The issue comes from how we store the column information inside m_grid.
        Because m_grid is a Vector of rows, we could lose the column information
        if we had no row, no grid item but some columns defined in CSS. As the
        logic would assume that our row / column size would be greater than what
        the style defines explicitely, we would access past our Vector's boundary.

        The fix is to ensure that we have at least a row so that we can store the
        column information in every case. This fix is overly broad as it also forces
        the grid to have one column, which shouldn't be an issue.

        Test: fast/css-grid-layout/grid-element-empty-row-column.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::maximumIndexInDirection):
        Forced this function to return at least one as the maximum index so that
        m_grid has at least one row / column.

        (WebCore::RenderGrid::placeItemsOnGrid):
        Added a ASSERT that m_grid is bigger than the explicit grid-rows / grid-columns.
        Also changed an existing ASSERT to use gridWasPopulated for consistency and changed
        the code not to call gridRowCount as it would ASSERT (we are in the middle of populating
        the grid).

        * rendering/RenderGrid.h:
        (WebCore::RenderGrid::gridWasPopulated):
        Added this helper function.

        (WebCore::RenderGrid::gridColumnCount):
        Replaced a now unneeded branch with an ASSERT. As placeItemsOnGrid should be called
        prior to read m_grid, this change should be fine.

        (WebCore::RenderGrid::gridRowCount):
        Added an ASSERT.

2013-02-19  Sergio Villar Senin  <svillar@igalia.com>

        [Soup] Use synchronous calls to close completely processed streams
        https://bugs.webkit.org/show_bug.cgi?id=107432

        Reviewed by Martin Robinson.

        There is no need to close already processed streams in asynchronous
        calls since they won't block. Using the synchronous call will save
        us some code and unnecessary asynchronous burden. This is kind of
        a code refactor so no new tests needed.

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

2013-02-19  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] use timeline's didBeginFrame for marking frame end calls
        https://bugs.webkit.org/show_bug.cgi?id=110130

        Reviewed by Pavel Feldman.

        In Web Inspector canvas profiler use timeline's didBeginFrame for marking frame end calls instead of an ad-hoc timeout-based solution.

        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::markFrameEnd):
        (WebCore):
        * inspector/InjectedScriptCanvasModule.h:
        (InjectedScriptCanvasModule):
        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::hasUninstrumentedCanvases):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::findFramesWithUninstrumentedCanvases):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didBeginFrame):
        (WebCore):
        * inspector/InspectorCanvasAgent.h:
        (InspectorCanvasAgent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didBeginFrame):

2013-02-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Decouple various file system project implementation parts for better testability and cover with tests.
        https://bugs.webkit.org/show_bug.cgi?id=110204

        Reviewed by Pavel Feldman.

        Extracted FileSystemWorkspaceProvider from IsolatedFileSystemManager to take care of managing workspace projects and projectDelegates.
        Replaced FileMapping.urlForURI with urlForPath method that does not need any information about workspace structure anymore.

        Test: inspector/file-system-project.html

        * inspector/front-end/FileMapping.js:
        (WebInspector.FileMapping.prototype.urlForPath):
        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate):
        (WebInspector.FileSystemProjectDelegate.prototype.populate.filesLoaded):
        (WebInspector.FileSystemProjectDelegate.prototype.populate):
        (WebInspector.FileSystemWorkspaceProvider):
        (WebInspector.FileSystemWorkspaceProvider.prototype._fileSystemAdded):
        (WebInspector.FileSystemWorkspaceProvider.prototype._fileSystemRemoved):
        * inspector/front-end/IsolatedFileSystem.js:
        (WebInspector.IsolatedFileSystem):
        (WebInspector.IsolatedFileSystem.prototype.name):
        (WebInspector.IsolatedFileSystem.prototype.rootURL):
        * inspector/front-end/IsolatedFileSystemManager.js:
        (WebInspector.IsolatedFileSystemManager):
        (WebInspector.IsolatedFileSystemManager.prototype._innerAddFileSystem):
        (WebInspector.IsolatedFileSystemManager.prototype._fileSystemRemoved):
        (WebInspector.IsolatedFileSystemManager.prototype._isolatedFileSystem):
        (WebInspector.IsolatedFileSystemManager.prototype.requestDOMFileSystem):
        * inspector/front-end/inspector.js:

2013-02-19  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] do not replace replay image with spinner icon
        https://bugs.webkit.org/show_bug.cgi?id=110213

        Reviewed by Pavel Feldman.

        Otherwise it's visually hard to see changes in the replay image. Instead show a small spinner icon in the bottom right corner.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype._enableWaitIcon):
        * inspector/front-end/canvasProfiler.css:
        (#canvas-replay-image-container):
        (.canvas-debug-info):
        (.canvas-spinner-icon):

2013-02-19  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] UI: tweak replay control buttons behavior
        https://bugs.webkit.org/show_bug.cgi?id=110207

        Reviewed by Pavel Feldman.

        New behavior for control buttons in the Canvas profiler.
        - The NextCall button (~StepInto) on a node group should expand it and move into its first child (instead of expanding and moving into the next node group)
        - The NextDrawCall button (~StepOver) should move to a next node that has children (instead of just iterating call group nodes, ignoring frame nodes).
        - The ReplayLast button should select the last expanded node (instead of always selecting last frame group node).

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView.prototype._onReplayStepClick):
        (WebInspector.CanvasProfileView.prototype._onReplayDrawingCallClick):
        (WebInspector.CanvasProfileView.prototype._onReplayLastStepClick):

2013-02-19  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Assertion in RenderFlowThread::removeRenderBoxRegionInfo
        https://bugs.webkit.org/show_bug.cgi?id=109914

        Reviewed by David Hyatt.

        This patch moves a part of the invalidation operations inside the RenderFlowThread::invalidateRegions call. The maps
        are cleared anyway at layout time but doing this earlier makes sure the flow thread is in a more consistent state
        (the RenderFlowThread object has both the region chain invalidated and the regions information cleared).

        RenderFlowThread::removeRenderBoxRegionInfo will check if the region chain is invalidated. If true, it means the
        flow thread has a layout scheduled and the regions information is not yet reliable. In this case we just return from the
        function and wait for the layout to cleanup the box information.

        Test: fast/regions/remove-box-info-assert.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeRegionFromThread):
        (WebCore::RenderFlowThread::invalidateRegions):
        (WebCore):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::removeRegionFromThread):

2013-02-19  Alberto Garcia  <agarcia@igalia.com>

        Fix build broekn by r142988.
        https://bugs.webkit.org/show_bug.cgi?id=109530

        Unreviewed. Build fix.

        Properly add shortMonthFormat() to the LocaleNone class.

        * platform/text/LocaleNone.cpp:
        (LocaleNone):
        (WebCore::LocaleNone::shortMonthFormat):

2013-02-19  Anton Vayvod  <avayvod@chromium.org>

        [Text Autosizing] Combine narrow descendants of a cluster into groups that should be autosized with the same multiplier.
        https://bugs.webkit.org/show_bug.cgi?id=109825

        Enhancement of the approach introduced in https://bugs.webkit.org/show_bug.cgi?id=109573.
        Instead of using the same text size multiplier for all narrow descendants of any autosizing
        cluster, group the descendants by how much narrower they are than the cluster's
        |blockContainingAllText| and process each group separately with a different multiplier for
        each one.
        For example, we want nested comments on the page to be autosized as a group but separately
        from a sidebar on the same page.

        Reviewed by Kenneth Rohde Christiansen.

        Updated the existing test to verify the patch.

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processClusterInternal):

            Splits the narrow descendants of the autosizing cluster into groups before processing
            each group individually.

        (WebCore::TextAutosizer::getNarrowDescendantsGroupedByWidth):

            Sorts the narrow descendants of the given cluster into groups, combining them by the
            difference between their content widths. If sorted by width, two consecutive nodes
            belong to the same group if their width difference is no greater than 100 CSS units.

        * rendering/TextAutosizer.h:

            New method definitions.

2013-02-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: show user provided name property of the heap snapshot node.
        https://bugs.webkit.org/show_bug.cgi?id=110124

        Reviewed by Yury Semikhatsky.

        Publish userProvidedName into grid node.

        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype._createObjectCell):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker):
        * inspector/front-end/NativeHeapSnapshot.js:
        (WebInspector.NativeHeapSnapshotNode.prototype.serialize):

2013-02-19  Arpita Bahuguna  <a.bah@samsung.com>

        Caret is not displayed when trying to focus inside a contenteditable element containing an empty block.
        https://bugs.webkit.org/show_bug.cgi?id=108053

        Reviewed by Ryosuke Niwa.

        Test: editing/selection/caret-in-div-containing-empty-block.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):
        When trying to compute the caret rect for the contenteditable div, the
        border and the padding were not considered. Because of this, for the
        given test case, which had a border defined on the containing div, the
        caret was being painted just atop the border, thereby masking it.

        Have modified the code to ensure that the computed caret rect takes
        into account the border and padding (if any) specified on the box, but only
        if the node doesn't have content that shall be skipped for editing.

        We do not add border and padding while computing the caret rect for any
        element that either has no content or has content that shall be skipped
        for editing purposes. This holds true for table elements as well.

        This helps avoid the caret displacement previsouly observed before/after
        any controls placed within the contenteditable box, when considering
        border and padding in computation of the caret rect.

2013-02-19  Mihnea Ovidenie  <mihnea@adobe.com>

        CSSRegions: crash positioned object with inline containing block in flow thread
        https://bugs.webkit.org/show_bug.cgi?id=108307

        Reviewed by David Hyatt.

        The fix for https://bugs.webkit.org/show_bug.cgi?id=69896 allowed positioned blocks work
        with variable width regions. However, the information needed for that is available only
        when the container used for positioning is a block.

        This patch ensures we are using this solution only when the container used for positioning
        is a block. This needs to be revisited when we will extend support for other types of boxes
        as mentioned in RenderBox::renderBoxRegionInfo.

        Test: fast/regions/positioned-object-inline-cb-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::renderBoxRegionInfo):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidth): Make sure we are using containerBlocks
        that are blocks. Add an assert that the type of containerBlock we are using can have
        computed RenderBoxRegionInfo.
        (WebCore::RenderBox::computePositionedLogicalHeight):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::canHaveBoxInfoInRegion): This helper method
        will return the boxes that may have computed RenderBoxRegionInfo. Currently,
        returns true for blocks only.

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

        Yet anther JSC build fix after r143304.

        * bindings/js/JSDOMBinding.h:
        (WebCore::argumentOrNull):

2013-02-19  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix. Fixed warning caused by r143305.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):

2013-02-19  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix after r143304.

        * bindings/js/JSDOMBinding.h:
        (WebCore::argumentOrNull):

2013-02-19  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove redundant usage of MAYBE_MISSING_PARAMETER() macro
        https://bugs.webkit.org/show_bug.cgi?id=109899

        Reviewed by Adam Barth.

        Currently:

        - MAYBE_MISSING_PARAMETER(args, index, DefaultIsUndefined) returns args[index].
        - MAYBE_MISSING_PARAMETER(args, index, DefaultIsNullString) returns Local<Value>()
        if args[index] is missing (i.e. the length of |args| is less than |index|).
        It returns args[index] otherwise.

        No one other than CodeGeneratorV8.pm uses
        MAYBE_MISSING_PARAMETER(args, index, DefaultIsUndefined). Instead, we simply use
        args[index]. We should remove the redundant usage from CodeGeneratorV8.pm too.
        The long-name macro has been making generated code less readable.

        In addition, we can rename MAYBE_MISSING_PARAMETER() to argumentOrNull().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooCallback):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionCallback):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::itemCallback):
        (WebCore::TestEventTargetV8Internal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::TestMediaQueryListListenerV8Internal::methodCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::voidMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::longMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodWithSequenceArgCallback):
        (WebCore::TestObjV8Internal::methodReturningSequenceCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::optionsObjectCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsUndefinedCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsNullStringCallback):
        (WebCore::TestObjV8Internal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        (WebCore::TestObjV8Internal::overloadedMethod2Callback):
        (WebCore::TestObjV8Internal::overloadedMethod3Callback):
        (WebCore::TestObjV8Internal::overloadedMethod4Callback):
        (WebCore::TestObjV8Internal::overloadedMethod6Callback):
        (WebCore::TestObjV8Internal::overloadedMethod7Callback):
        (WebCore::TestObjV8Internal::overloadedMethod8Callback):
        (WebCore::TestObjV8Internal::overloadedMethod9Callback):
        (WebCore::TestObjV8Internal::overloadedMethod10Callback):
        (WebCore::TestObjV8Internal::overloadedMethod11Callback):
        (WebCore::TestObjV8Internal::classMethodWithOptionalCallback):
        (WebCore::TestObjV8Internal::overloadedMethod12Callback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod1Callback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod2Callback):
        (WebCore::TestObjV8Internal::enabledPerContextMethod1Callback):
        (WebCore::TestObjV8Internal::enabledPerContextMethod2Callback):
        (WebCore::TestObjV8Internal::stringArrayFunctionCallback):
        (WebCore::TestObjV8Internal::domStringListFunctionCallback):
        (WebCore::TestObjV8Internal::convert1Callback):
        (WebCore::TestObjV8Internal::convert2Callback):
        (WebCore::TestObjV8Internal::convert4Callback):
        (WebCore::TestObjV8Internal::convert5Callback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        (WebCore::TestObjV8Internal::variadicStringMethodCallback):
        (WebCore::TestObjV8Internal::variadicDoubleMethodCallback):
        (WebCore::TestObjV8Internal::variadicNodeMethodCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructor1Callback):
        (WebCore::V8TestOverloadedConstructors::constructor2Callback):
        (WebCore::V8TestOverloadedConstructors::constructor3Callback):
        (WebCore::V8TestOverloadedConstructors::constructor4Callback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::funcCallback):
        (WebCore::TestTypedefsV8Internal::setShadowCallback):
        (WebCore::TestTypedefsV8Internal::methodWithSequenceArgCallback):
        (WebCore::TestTypedefsV8Internal::nullableArrayArgCallback):
        (WebCore::TestTypedefsV8Internal::stringArrayFunctionCallback):
        (WebCore::TestTypedefsV8Internal::stringArrayFunction2Callback):
        (WebCore::V8TestTypedefs::constructorCallback):
        * bindings/v8/V8BindingMacros.h:
        (WebCore):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallbackCustom):
        (WebCore::V8History::replaceStateCallbackCustom):

2013-02-19  Kentaro Hara  <haraken@chromium.org>

        [JSC] MAYBE_MISSING_PARAMETER(..., DefaultIsNullString) macro is redundant
        https://bugs.webkit.org/show_bug.cgi?id=109902

        Reviewed by Adam Barth.

        Currently:

        - MAYBE_MISSING_PARAMETER(exec, index, DefaultIsUndefined)
          returns exec->argument(index).
        - MAYBE_MISSING_PARAMETER(exec, index, DefaultIsNullString)
          returns JSValue() if exec->argument(index) is missing
          (i.e. the length of the argument is less than index).
          It returns exec->argument(index) otherwise.

        No one other than CodeGeneratorJS.pm uses
        MAYBE_MISSING_PARAMETER(exec, index, DefaultIsUndefined).
        Instead, we simply use exec->argument(index). We should remove
        the redundant usage in CodeGeneratorJS.pm too. The long-name macro
        has been making generated code less readable.

        In addition, we can rename MAYBE_MISSING_PARAMETER() to argumentOrNull().

        c.f. corresponding V8 bug: https://bugs.webkit.org/show_bug.cgi?id=109899

        No tests. No change in behavior.

        * bindings/js/JSDOMBinding.h:
        (WebCore):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::jsFloat64ArrayPrototypeFunctionFoo):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod8):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11):
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod11):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunction):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethod):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors1):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors2):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors3):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors4):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionAcceptTransferList):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionMultiTransferList):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::constructJSTestTypedefs):
        (WebCore::jsTestTypedefsPrototypeFunctionFunc):
        (WebCore::jsTestTypedefsPrototypeFunctionMultiTransferList):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadow):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableArrayArg):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction2):

2013-02-18  Hayato Ito  <hayato@chromium.org>

        Make EventDispatcher take an Event object in its constructor.
        https://bugs.webkit.org/show_bug.cgi?id=109898

        Reviewed by Dimitri Glazkov.

        Re-landing r143145, which caused a crash when deltaX and deltaY of a PlatformWheelEvent are both zero.

        Fixed a crash by early exiting in EventDispatcher::dispatchEvent(Node*, PassRefPtr<EventDispatcher*>)
        if mediator's event() returns null.

        Also Added a layout test to catch this kind of crash in the future.

        Test: fast/events/platform-wheelevent-with-delta-zero-crash.html

        * dom/EventDispatchMediator.cpp:
        (WebCore::EventDispatchMediator::dispatchEvent):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventDispatcher::EventDispatcher):
        (WebCore::EventDispatcher::ensureEventPath):
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        (WebCore::EventDispatcher::dispatch):
        (WebCore::EventDispatcher::dispatchEventPreProcess):
        (WebCore::EventDispatcher::dispatchEventAtCapturing):
        (WebCore::EventDispatcher::dispatchEventAtTarget):
        (WebCore::EventDispatcher::dispatchEventAtBubbling):
        (WebCore::EventDispatcher::dispatchEventPostProcess):
        * dom/EventDispatcher.h:
        (EventDispatcher):
        (WebCore::EventDispatcher::node):
        (WebCore::EventDispatcher::event):
        * dom/FocusEvent.cpp:
        (WebCore::FocusEventDispatchMediator::dispatchEvent):
        (WebCore::BlurEventDispatchMediator::dispatchEvent):
        (WebCore::FocusInEventDispatchMediator::dispatchEvent):
        (WebCore::FocusOutEventDispatchMediator::dispatchEvent):
        * dom/GestureEvent.cpp:
        (WebCore::GestureEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEventDispatchMediator::dispatchEvent):
        Assert event() rather than an early exit since this code path should be hit only when event() is non-null.

2013-02-18  Takashi Sakamoto  <tasak@google.com>

        :before/:after pseudo elements do not always apply to the proper element
        https://bugs.webkit.org/show_bug.cgi?id=93925

        Reviewed by Dimitri Glazkov.

        Disable sharing a style with siblings if :after or :before pseudo style
        is unique.

        Test: fast/css/before-after-pseudo-class.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement):
        Added a new condition, hasUniquePseudoStyle.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::hasUniquePseudoStyle):
        Added to check whether any pseudo style has unique bit or not.
        (WebCore):
        * rendering/style/RenderStyle.h:

2013-02-18  Andy Estes  <aestes@apple.com>

        Focusing a new frame (via window.focus()) should blur the active element in the current frame
        https://bugs.webkit.org/show_bug.cgi?id=110172

        Reviewed by Ryosuke Niwa.

        When a change in the focused node crosses a frame boundary, WebKit
        doesn't always succeed in blurring the old focused node before focusing
        the new one.

        Each document remembers its focused node, and a Page-scoped
        FocusController remembers the focused frame. If a new focused node is
        in a different frame than the focused frame, FocusController tells the
        old frame's document to clear its focused node before focusing the new
        one (and remembering the new frame).

        Unfortunately, web content can confuse FocusController by calling
        window.focus() at the wrong time. Since window.focus() changes
        FocusController's focused frame without focusing a new node,
        FocusController won't think that a frame boundary is being crossed if a
        node in this frame is later focused. Therefore it won't clear the old
        frame's focused node (it won't even know which frame contained the old
        focused node), causing at least two bugs:

        1) The node in the old frame will not receive a blur event.
        2) Calling document.activeElement on the main frame will return the
           previously focused node, but the HTML5 spec says it should return
           the frame owner element if a subframe has focus.

        Fix both of these bugs by explicitly clearing the current frame's
        focused node if window.focus() changes the focused frame. This fix
        carries some compatibility risk by changing a long-standing behavior
        of the engine (we've had this bug since the beginning of the project,
        AFAICT). On the upside, it matches the behavior of both Firefox and IE,
        matches what HTML5 says about subframe focus, and fixes at least one
        well-known enterprise web app.

        Tests: fast/dom/HTMLDocument/active-element-frames.html
               fast/frames/frame-focus-blurs-active-element.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::focus): If the frame being focused is not the same
        as the currently focused frame, clear the currently focused frame's
        focused node.

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

        Clean up the boolean argument to visibleContentRect
        https://bugs.webkit.org/show_bug.cgi?id=110167

        Reviewed by Simon Fraser.

        Replace the boolean argument to visibleContentRect() with
        an enum.

        No behavior change.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::viewportSize):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::windowClipRect):
        * page/SpatialNavigation.cpp:
        (WebCore::canScrollInDirection):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::layoutSize):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::visibleContentRect):
        * platform/ScrollableArea.h:
        * rendering/RenderDialog.cpp:
        (WebCore::RenderDialog::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::maximumScrollPosition):
        (WebCore::RenderLayer::visibleContentRect):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):

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

        That didn't work either. Just make it public. This is why I hate nested classes. They just don't work.

        * rendering/RenderBlock.h:
        (RenderBlock):

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

        Windows build fix. Apparently Visual Studio still has a lot of bugs with respect to nested classes.
        Work around it by directly instantiating the class inside createFloatingObjects.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createFloatingObjects): Directly instantiate FloatingObjects.
        * rendering/RenderBlock.h:
        (RenderBlock): Moved the declaration of createFloatingObjects up.
        (FloatingObjects::FloatingObjects):

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

        Merge handleSpecialChild into layoutBlockChildren
        https://bugs.webkit.org/show_bug.cgi?id=110165

        Reviewed by Darin Adler.

        Merge handleSpecialChild, handlePositionedChild, and handleFloatingChild into layoutBlockChildren
        to make the semantics of the code clear and to get rid of the outdated comment about how there are
        four types of four types of special children.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        * rendering/RenderBlock.h:
        (RenderBlock):

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

        Encapsulate FloatingObject's constructor inside create
        https://bugs.webkit.org/show_bug.cgi?id=110169

        Reviewed by Darin Adler.

        Added FloatingObject::create and made FloatingObject's constructor private.
        Also added RenderBlock::ensureFloatingObjects to help lazily creating FloatingObjects.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::ensureFloatingObjects):
        (WebCore::RenderBlock::FloatingObjects::create):
        (WebCore::RenderBlock::FloatingObjects::FloatingObjects):
        * rendering/RenderBlock.h:
        (FloatingObjects):
        (RenderBlock):

2013-02-18  Anders Carlsson  <andersca@apple.com>

        Add a DefaultHash for RefPtr<SecurityOrigin>
        https://bugs.webkit.org/show_bug.cgi?id=110170

        Reviewed by Andreas Kling.

        Remove all explicit uses of SecurityOriginHash.

        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginQuotaManager.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        * loader/cache/MemoryCache.h:
        * page/SecurityOriginHash.h:
        * storage/StorageNamespaceImpl.h:
        (StorageNamespaceImpl):

2013-02-18  David Hyatt  <hyatt@apple.com>

        Padding and border changes don't trigger the relayout of children in some cases.
        https://bugs.webkit.org/show_bug.cgi?id=109639.

        Reviewed by Ryosuke Niwa.

        The fix for this bug was way too general and involved putting code into RenderBox. Since
        RenderBox makes no assumptions about what kind of layout system might derive from it, it
        was incorrect to just mark all children as needing layout whenever borders and padding
        changed widths.
        
        This patch takes the two cases handled by the original code and makes them more
        specialized down in subclasses, i.e., RenderBlock and RenderTableRow. RenderBlock has
        been refined to only check if children aren't inline and to also not invalidate
        floats or irrelevant positioned objects that might not even have this block as their
        containing block.
        
        The RenderTableRow code is specialized to only care about collapsing borders and
        to only check borders rather than padding. It also requires that a child be a cell
        in order to do the invalidation.

        Covered by existing tests, since this is just specializing the code to more precisely
        cover the test cases that have already been written.

        Longer term, it should be layout code that figures this stuff out rather than style
        change code, but that involves more dramatic changes that can wait.

        Test: fast/block/positioning/border-change-relayout-test.html

        * rendering/RenderBlock.cpp:
        (WebCore::borderOrPaddingLogicalWidthChanged):
        (WebCore):
        (WebCore::RenderBlock::styleDidChange):
        * rendering/RenderBox.cpp:
        (WebCore):
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderTableRow.cpp:
        (WebCore::borderLogicalWidthChanged):
        (WebCore):
        (WebCore::RenderTableRow::styleDidChange):

2013-02-18  Mark Lam  <mark.lam@apple.com>

        Small follow up to r143271: Fix SQLTransaction leak.
        https://bugs.webkit.org/show_bug.cgi?id=110052.

        Reviewed by Geoffrey Garen.

        Applied Geoff's suggestion nullify m_frontend sooner for greater
        code clarity. Also added some comments about m_frontend.

        No new tests.

        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        * Modules/webdatabase/SQLTransactionBackend.h:
        (SQLTransactionBackend):

2013-02-18  Geoffrey Garen  <ggaren@apple.com>

        Shrank the SourceProvider cache
        https://bugs.webkit.org/show_bug.cgi?id=110158

        Reviewed by Oliver Hunt.

        Test: fast/js/regress/nested-function-parsing.html

        No need to keep statistics on cache size, since we're going to throw it
        away no matter what.

        * WebCore.order:
        * bindings/js/CachedScriptSourceProvider.h:
        (CachedScriptSourceProvider):
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::destroyDecodedData):
        (WebCore):
        (WebCore::CachedScript::reportMemoryUsage):
        * loader/cache/CachedScript.h:
        (CachedScript):

2013-02-18  peavo@outlook.com  <peavo@outlook.com>

        [Curl] The function cookiesForDOM() does not behave correctly.
        https://bugs.webkit.org/show_bug.cgi?id=109923

        Reviewed by Brent Fulgham.

        The cookiesForDOM() function should return a list of matching cookies, both persistent and session cookies.

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::readCurlCookieToken): Added function to read next token from Curl cookie string.
        (WebCore::addMatchingCurlCookie): Added function to add matching cookies to cookie list.
        (WebCore::setCookiesFromDOM): Add domain and path from url to cookie if not already set.
        (WebCore::cookiesForDOM): Return a list of matching cookies, both session and persistent cookies.

2013-02-17  Mark Lam  <mark.lam@apple.com>

        Fix SQLTransaction leak.
        https://bugs.webkit.org/show_bug.cgi?id=110052.

        Reviewed by Geoffrey Garen.

        With https://bugs.webkit.org/show_bug.cgi?id=104750, there is now a circular
        reference between SQLTransaction and its backend. The clean up process needs
        to be fixed to explicitly break this reference cycle.

        The 5 phases of the SQLTransaction (and backend) phases and their clean up
        actions are:

        Phase 1. After Birth, before scheduling
        - During shutdown, DatabaseThread::databaseThread() calls
          DatabaseBackendAsync::close(). DatabaseBackendAsync::close() iterates
          DatabaseBackendAsync::m_transactionQueue and calls
          SQLtransactionBackend::notifyDatabaseThreadIsShuttingDown() on each
          transaction there.

        Phase 2. After scheduling, before state AcquireLock
        - ~DatabaseTask() calls SQLtransactionBackend's
          notifyDatabaseThreadIsShuttingDown().

        Phase 3. After state AcquireLock, before "lockAcquired"
        - During shutdown, DatabaseThread::databaseThread() calls
          SQLTransactionCoordinator::shutdown(), which calls
          SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown().

        Phase 4: After "lockAcquired", before state CleanupAndTerminate
        - Same as Phase 3.

        Phase 5: After state CleanupAndTerminate
        - state CleanupAndTerminate calls SQLTransactionBackend::doCleanup().

        See comment at the top of SQLTransactionBackend.cpp for more details.

        Other supporting changes:
        - Moved Database::close() to the DatabaseBackendAsync.
        - Moved the "if already cleaned up" check from SQLTransactionBackend's
          notifyDatabaseThreadIsShuttingDown() to doCleanup().
        - Added a check to prevent SQLTransactionCoordinator's releaseLock()
          from running when it's shutting down.

        No new tests.

        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackendAsync.cpp:
        (WebCore::DatabaseBackendAsync::close): Move from Database.cpp.
        * Modules/webdatabase/DatabaseBackendAsync.h:
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::DatabaseTransactionTask):
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::~DatabaseTransactionTask):
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::doPerformTask):
        * Modules/webdatabase/DatabaseTask.h:
        (DatabaseBackendAsync::DatabaseTransactionTask):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown):
        (WebCore::SQLTransactionBackend::cleanupAndTerminate):
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::SQLTransactionCoordinator):
        (WebCore::SQLTransactionCoordinator::acquireLock):
        (WebCore::SQLTransactionCoordinator::releaseLock):
        (WebCore::SQLTransactionCoordinator::shutdown):
        * Modules/webdatabase/SQLTransactionCoordinator.h:
        (SQLTransactionCoordinator):

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

        Fix WebCore Xcode project

        * WebCore.xcodeproj/project.pbxproj: Fix path for CDMPrivate.h.

2013-02-18  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Refactor grid position resolution code to support an internal grid representation
        https://bugs.webkit.org/show_bug.cgi?id=109718

        Reviewed by Ojan Vafai.

        In order to support auto placement (where we can't infer a grid item's position from its style),
        we need to have 2 code paths:
        - One that places the elements on the grid representation.
        - One that reuse the grid representation to return the position.

        This code path implements this split so that we can add auto placement in a follow-up patch(es).
        Also in order to avoid a O(n^2) behavior [walking over our grid to find a grid item's position],
        the cached position code path needed an efficient way to find the grid items -> position mapping.

        Refactoring, covered by existing tests.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::cachedGridCoordinate):
        (WebCore::RenderGrid::resolveGridPositionFromStyle):
        These methods implements the above split. The first one
        reuses our cached information whereas the other one is
        used to build the cache.

        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::layoutGridItems):
        Added some code to clear the grid items' position.

        (WebCore::RenderGrid::findChildLogicalPosition):
        (WebCore::RenderGrid::logicalContentHeightForChild):
        Updated these functions to use cachedGridPosition.

        (WebCore::RenderGrid::maximumIndexInDirection):
        Added a comment about why we don't use cachedGridPosition.

        (WebCore::RenderGrid::insertItemIntoGrid):
        Added this helper function to insert into the grid and
        cache the position in the reverse lookup map.

        (WebCore::RenderGrid::placeItemsOnGrid):
        Updated to call insertItemIntoGrid. Also added an ASSERT
        similar to m_grid.

        (WebCore::RenderGrid::clearGrid):
        Added this helper function to clear our grid structure.

        * rendering/RenderGrid.h:
        (GridCoordinate):
        (WebCore::RenderGrid::GridCoordinate::GridCoordinate):
        Added this POD to hold the coordinates in our reverse map.

2013-02-18  Stephen Chenney  <schenney@chromium.org>

        feFlood incorrectly applied color-interpolation-filters
        https://bugs.webkit.org/show_bug.cgi?id=109985

        Reviewed by Dirk Schulze.

        The SVG spec defines the color-interpolation-filters property for all
        filter effect elements in order to control cases where a color is
        based on some arithmetic computation on other colors. For example,
        when computing gradients or blending colors. feFlood simply fills a
        region with the given color, and that given color is always defined to
        be in sRGB space, so the feFlood result should always be sRGB.

        The new behavior matches both Opera and Firefox.

        Tests: svg/filters/feFlood-color-interpolation-expected.svg
               svg/filters/feFlood-color-interpolation.svg

        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware): Force the color mode to be
        sRGB before returning.

2013-02-18  Mark Lam  <mark.lam@apple.com>

        Introduced AbstractSQLStatement and AbstractSQLStatementBackend.
        https://bugs.webkit.org/show_bug.cgi?id=110148.

        Reviewed by Geoff Garen.

        This is part of the webdatabase refactoring for webkit2.
        - Also changed the frontend and backend to only refer to the
          abstract interface of each other.

        No new tests.

        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractSQLStatement.h: Added.
        (AbstractSQLStatement):
        (WebCore::AbstractSQLStatement::~AbstractSQLStatement):
        * Modules/webdatabase/AbstractSQLStatementBackend.h: Added.
        (AbstractSQLStatementBackend):
        (WebCore::AbstractSQLStatementBackend::~AbstractSQLStatementBackend):
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::setBackend):
        * Modules/webdatabase/SQLStatement.h:
        (SQLStatement):
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::create):
        (WebCore::SQLStatementBackend::SQLStatementBackend):
        (WebCore::SQLStatementBackend::frontend):
        * Modules/webdatabase/SQLStatementBackend.h:
        (SQLStatementBackend):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverStatementCallback):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::currentStatement):
        (WebCore::SQLTransactionBackend::executeSQL):
        * Modules/webdatabase/SQLTransactionBackend.h:
        (SQLTransactionBackend):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

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

        BUILD FIX (r143230): Fix renamed header and implementation of -[WebAccessibilityObjectWrapper accessibilityPostedNotification:]
        <http://webkit.org/b/110077>

        Fixes the following build failures:

            AccessibilityObjectIOS.mm:35:9: fatal error: 'AccessibilityObjectWrapperIOS.h' file not found
            #import "AccessibilityObjectWrapperIOS.h"
                    ^
            1 error generated.

            WebAccessibilityObjectWrapperIOS.mm:2051:35: error: use of undeclared identifier 'notificationString'; did you mean 'notificationType'?
                if (AXNotificationCallback && notificationString)
                                              ^~~~~~~~~~~~~~~~~~
                                              notificationType
            WebAccessibilityObjectWrapperIOS.mm:2049:81: note: 'notificationType' declared here
            - (void)accessibilityPostedNotification:(WebCore::AXObjectCache::AXNotification)notificationType
                                                                                            ^
            WebAccessibilityObjectWrapperIOS.mm:2052:38: error: use of undeclared identifier 'notificationString'; did you mean 'notificationType'?
                    AXNotificationCallback(self, notificationString, AXPostedNotificationContext);
                                                 ^~~~~~~~~~~~~~~~~~
                                                 notificationType
            WebAccessibilityObjectWrapperIOS.mm:2049:81: note: 'notificationType' declared here
            - (void)accessibilityPostedNotification:(WebCore::AXObjectCache::AXNotification)notificationType
                                                                                            ^
            WebAccessibilityObjectWrapperIOS.mm:2052:38: error: cannot initialize a parameter of type 'NSString *' with an lvalue of type 'WebCore::AXObjectCache::AXNotification'
                    AXNotificationCallback(self, notificationString, AXPostedNotificationContext);
                                                 ^~~~~~~~~~~~~~~~~~
            WebAccessibilityObjectWrapperIOS.mm:2049:81: error: conflicting parameter types in implementation of 'accessibilityPostedNotification:': 'NSString *' vs 'WebCore::AXObjectCache::AXNotification' [-Werror,-Wmismatched-parameter-types]
            - (void)accessibilityPostedNotification:(WebCore::AXObjectCache::AXNotification)notificationType
                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
            WebAccessibilityObjectWrapperBase.h:48:53: note: previous definition is here
            - (void)accessibilityPostedNotification:(NSString *)notificationName;
                                                     ~~~~~~~~~~ ^
            4 errors generated.

        * accessibility/ios/AccessibilityObjectIOS.mm: Fix name of
        included header.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPostedNotification:]):
        Fix implementation to match declaration.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        * accessibility/ios/AXObjectCacheIOS.mm:
        - Clean up #endif comments.

2013-02-18  Jer Noble  <jer.noble@apple.com>

        EME: Add a CDMPrivate implementation using AVFoundation.
        https://bugs.webkit.org/show_bug.cgi?id=109739

        Reviewed by Eric Carlson.

        Add a CDMPrivate implementation using AVFoundation, similar to the EME v1 implementation
        in MediaPlayerPrivateAVFoundationObjC. This requires passing the AVAssetResourceLoadingRequest
        from the MediaPlayerPrivateAVFoundationObjC instance to CDMSessionAVFoundation. To do so
        without adding platform-specific API to MediaPlayer, add a static map from MediaPlayer ->
        MediaPlayerPrivateAVFoundationObjC instances to be used to vend the AVAssetResourceLoadingRequest
        to CDMSessionAVFoundation.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::installedCDMFactories): Add the factory for CDMPrivateAVFoundation.
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMPrivateAVFoundation.h: Added.
        (WebCore::CDMPrivateAVFoundation::create): Simple factory method.
        (WebCore::CDMPrivateAVFoundation::~CDMPrivateAVFoundation): Simple virtual destructor.
        (WebCore::CDMPrivateAVFoundation::cdm): Simple getter.
        (WebCore::CDMPrivateAVFoundation::CDMPrivateAVFoundation): Simple constructor.
        * Modules/encryptedmedia/CDMPrivateAVFoundation.mm: Added.
        (WebCore::CDMSessionAVFoundation::~CDMSessionAVFoundation): Simple destructor.
        (WebCore::CDMPrivateAVFoundation::supportsKeySytem): Check whether the given key system is supported.
        (WebCore::CDMPrivateAVFoundation::supportsMIMEType): Check whether the given MIME type is supported.
        (WebCore::CDMPrivateAVFoundation::createSession): Return a new CDMSessionAVFoundation.
        (WebCore::CDMSessionAVFoundation::CDMSessionAVFoundation): Simple constructor.
        (WebCore::CDMSessionAVFoundation::generateKeyRequest): Retrieve the AVAssetResourceLoadingRequest
            from the MediaPlayer, and use it to generate a key request.
        (WebCore::CDMSessionAVFoundation::releaseKeys): No-op.
        (WebCore::CDMSessionAVFoundation::update): Add the passed in key to the AVAssetResourceLoadingRequest.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::playerToPrivateMap): Lazily instantiate static map.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Register with the playerToPrivateMap.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC): Unregister from same.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource): Also send keyNeeded event in ENCRYPTED_MEDIA_V2.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::extractKeyURIKeyIDAndCertificateFromInitData): Convert this 
            method from file-static to class static.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::takeRequestForPlayerAndKeyURI): Pull the AVAssetResourceLoadingRequest
            from m_keyURIToRequestMap and return it, if present.

2013-02-18  Philip Rogers  <pdr@google.com>

        Fix scaling of tiled SVG backgrounds on high-dpi displays
        https://bugs.webkit.org/show_bug.cgi?id=110047

        Reviewed by Dirk Schulze.

        This patch fixes the scaling of SVG when used for drawing patterns. Tiled/patterend SVG
        images are first drawn into an image buffer and then the image buffer is used to stamp
        out tiles. Because it is a raster source, the size of the image buffer needs to
        be scaled to the final resolution of the device. After scaling the image buffer, the
        source rect and pattern transforms need to be adjusted so they align in device pixel
        coordinates. This adjustment was not done before this patch, causing pixelated rendering.

        Additionally, a FIXME has been added due to webkit.org/b/110065 and the image buffer
        has been manually scaled (using "zoomedAndScaledContainerRect") instead of relying
        on the ImageBuffer's resolutionScale parameter.

        Test: svg/as-background-image/tiled-background-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):

            Note that fixing the FIXME does not change that the source rect and transform need
            to be adjusted for page scale.

2013-02-18  David Hyatt  <hyatt@apple.com>

        Make seamless iframes paginate properly in their enclosing document's pagination context.
        https://bugs.webkit.org/show_bug.cgi?id=106125
        <rdar://problem/12922720> Text in iframe is clipped while printing

        Reviewed by Simon Fraser.

        Added new tests in fast/multicol and fast/region.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clampToStartAndEndRegions):
        Don't clamp when the RenderView is the containing block of an object in a RenderFlowThread.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):
        Don't attempt any repaint container antics when we're in a seamless iframe, since the ancestor
        document will actually do the handoff into the flow thread.

        * rendering/RenderView.cpp:
        (WebCore::enclosingSeamlessRenderer):
        Heper function to test for an enclosing seamless iframe.
        
        (WebCore::RenderView::addChild):
        Subclass addChild on RenderView to properly set the inRenderFlowThread state for a seamless
        child document so thta it will check regions.

        (WebCore::RenderView::initializeLayoutState):
        New helper method for setting up the initial layout state of a RenderView. If inside a seamless
        paginated ancestor, set up the appropriate pagination information so the child document
        knows about it. This method will expand to inherit info about line grids and exclusions eventually
        also.

        (WebCore::RenderView::layout):
        Now calls initializeLayoutState to set up the layout state.

        * rendering/RenderView.h:
        (WebCore::RenderView::pageLogicalHeight):
        (WebCore::RenderView::setPageLogicalHeight):
        (RenderView):
        Fix the type of the page logical height methods to be LayoutUnit instead of unsigned.

2013-02-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143145.
        http://trac.webkit.org/changeset/143145
        https://bugs.webkit.org/show_bug.cgi?id=110143

        Causes frequent crashes. (Requested by eric_carlson on
        #webkit).

        * dom/EventDispatchMediator.cpp:
        (WebCore::EventDispatchMediator::dispatchEvent):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventDispatcher::EventDispatcher):
        (WebCore::EventDispatcher::ensureEventPath):
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        (WebCore::EventDispatcher::dispatchEventPreProcess):
        (WebCore::EventDispatcher::dispatchEventAtCapturing):
        (WebCore::EventDispatcher::dispatchEventAtTarget):
        (WebCore::EventDispatcher::dispatchEventAtBubbling):
        (WebCore::EventDispatcher::dispatchEventPostProcess):
        * dom/EventDispatcher.h:
        (EventDispatcher):
        (WebCore::EventDispatcher::node):
        (WebCore):
        * dom/FocusEvent.cpp:
        (WebCore::FocusEventDispatchMediator::dispatchEvent):
        (WebCore::BlurEventDispatchMediator::dispatchEvent):
        (WebCore::FocusInEventDispatchMediator::dispatchEvent):
        (WebCore::FocusOutEventDispatchMediator::dispatchEvent):
        * dom/GestureEvent.cpp:
        (WebCore::GestureEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):

2013-02-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Soup] Free cookies explicitly in loops instead of using GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=110103

        Reviewed by Martin Robinson.

        Free cookies explicitly in loops instead of using GOwnPtr for this.
        Until now, the code was mixing both styles. This patch makes the
        code consistent one way. Adopting list items with GOwnPtr for the
        sole purpose to free them makes the freeing less obvious and may
        lead to mistakes if someone refactors the code and calls "break;"
        to abort loop iteration.

        No new tests, no behavior change.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):

2013-02-18  Joseph Pecoraro  <pecoraro@apple.com>

        [JSC]: ASSERT in KURL(ParsedURLStringTag) under sourceMapURLForScript
        https://bugs.webkit.org/show_bug.cgi?id=109987

        Reviewed by Pavel Feldman.

        Improved an existing test to cover this.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        Remove the sourceURL parsing and script.url replacement from the JSC
        implementation of ScriptDebugServer. The WebCore inspector code that
        this was added for already does this, at a more appropriate time.

2013-02-18  Mike West  <mkwst@chromium.org>

        compareDocumentPosition reports disconnected nodes as following each other
        https://bugs.webkit.org/show_bug.cgi?id=108274

        Reviewed by Dimitri Glazkov.

        jQuery has had to implement their own sorting mechanism in Sizzle[1] due
        to Node::compareDocumentPosition always reporting disconnected nodes
        as following each other. According to spec[2], we should instead be
        indicating that the result is (a) disconnected, (b) implementation
        specific, and (c) deterministically ordered.

        [1]: https://github.com/jquery/sizzle/commit/1c8aec91284af8d8c14447976235d5dd72b0d75e
        [2]: http://dom.spec.whatwg.org/#dom-node-comparedocumentposition

        Test: fast/dom/compare-document-position-disconnected-nodes.html

        * dom/Node.cpp:
        (WebCore::Node::compareDocumentPosition):
            After walking the parentNode chain of both Nodes, compare the root.
            If the Nodes don't share a root, they're in distinct trees, and
            should return as described above. We determine which element
            "preceeds" the other in an arbitrary fashion via pointer comparison.

2013-02-18  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] fix replay log grouping by frames
        https://bugs.webkit.org/show_bug.cgi?id=110122

        Reviewed by Pavel Feldman.

        Bug: log grouping by frames did not work if a frame end call is not a draw call.
        Drive-by: Last draw call group may not contain a draw call. In this case merge it into the previous group.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView.prototype._appendCallNode):
        (WebInspector.CanvasProfileView.prototype._maybeMergeLastDrawCallGroups):

2013-02-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Soup] Superfluous HashMap check in SocketStreamHandleSoup::getHandleFromId()
        https://bugs.webkit.org/show_bug.cgi?id=110107

        Reviewed by Martin Robinson.

        Remove Superfluous HashMap::contains() call in SocketStreamHandleSoup::getHandleFromId()
        as HashMap::get() will already return 0 in this case anyway.

        No new tests, no behavior change.

        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore):
        (WebCore::getHandleFromId):

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

        Stop placing std::isfinite and std::signbit inside the global scope
        https://bugs.webkit.org/show_bug.cgi?id=109817

        Reviewed by Darin Adler.

        Prefix calls to the isfinite and signbit methods with std:: as the two
        methods are no longer being imported into the global scope.

        No new tests as there's no change in functionality.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::setWebkitLineDash):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsDateOrNull):
        * bindings/js/JSDOMBinding.h:
        (WebCore::finiteInt32Value):
        * bindings/v8/V8Binding.h:
        (WebCore::v8DateOrNull):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::parseToNumber):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValueAsNumber):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::setMin):
        (WebCore::HTMLMeterElement::setMax):
        (WebCore::HTMLMeterElement::setValue):
        (WebCore::HTMLMeterElement::setLow):
        (WebCore::HTMLMeterElement::setHigh):
        (WebCore::HTMLMeterElement::setOptimum):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::value):
        (WebCore::HTMLProgressElement::setValue):
        (WebCore::HTMLProgressElement::max):
        (WebCore::HTMLProgressElement::setMax):
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::valueAsDate):
        (WebCore::MonthInputType::defaultValueForStepUp):
        (WebCore::MonthInputType::parseToNumber):
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::typeMismatchFor):
        (WebCore::NumberInputType::sanitizeValue):
        (WebCore::NumberInputType::hasBadInput):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::typeMismatchFor):
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::defaultValueForStepUp):
        * html/canvas/CanvasPathMethods.cpp:
        (WebCore::CanvasPathMethods::moveTo):
        (WebCore::CanvasPathMethods::lineTo):
        (WebCore::CanvasPathMethods::quadraticCurveTo):
        (WebCore::CanvasPathMethods::bezierCurveTo):
        (WebCore::CanvasPathMethods::arcTo):
        (WebCore::CanvasPathMethods::arc):
        (WebCore::CanvasPathMethods::rect):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setLineWidth):
        (WebCore::CanvasRenderingContext2D::setMiterLimit):
        (WebCore::CanvasRenderingContext2D::setShadowOffsetX):
        (WebCore::CanvasRenderingContext2D::setShadowOffsetY):
        (WebCore::CanvasRenderingContext2D::setShadowBlur):
        (WebCore::lineDashSequenceIsValid):
        (WebCore::CanvasRenderingContext2D::setLineDashOffset):
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::validateRectForCanvas):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::isPointInStroke):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::createLinearGradient):
        (WebCore::CanvasRenderingContext2D::createRadialGradient):
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::putImageData):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseToDoubleForNumberType):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::setDuration):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::reset):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::reset):
        * html/shadow/MediaControlsBlackBerry.cpp:
        (WebCore::MediaControlFullscreenTimelineElement::setDuration):
        (WebCore::MediaControlsBlackBerry::reset):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorBasicValue::writeJSON):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::currentAge):
        (WebCore::CachedResource::freshnessLifetime):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::adjustWindowRect):
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::setMillisecondsSinceEpochForDate):
        (WebCore::DateComponents::setMillisecondsSinceEpochForDateTime):
        (WebCore::DateComponents::setMillisecondsSinceEpochForMonth):
        (WebCore::DateComponents::setMillisecondsSinceMidnight):
        (WebCore::DateComponents::setMonthsSinceEpoch):
        (WebCore::DateComponents::setMillisecondsSinceEpochForWeek):
        * platform/Decimal.cpp:
        (WebCore::Decimal::fromDouble):
        * platform/FileSystem.h:
        (WebCore::isValidFileTime):
        * platform/LocalizedStrings.cpp:
        (WebCore::localizedMediaTimeDescription):
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::drawPatternToCairoContext):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addArc):
        (WebCore::Path::contains):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::addArc):
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.cpp:
        (WebCore::FullscreenVideoControllerGStreamer::timeToString):
        * platform/graphics/openvg/PathOpenVG.cpp:
        (WebCore::Path::addArc):
        * platform/graphics/skia/SkiaUtils.h:
        (WebCore::WebCoreFloatToSkScalar):
        (WebCore::WebCoreDoubleToSkScalar):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::maxTimeSeekable):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::localizedMediaTimeDescription):
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (timeToString):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::parseDateValueInHeader):
        * platform/qt/LocalizedStringsQt.cpp:
        (WebCore::localizedMediaTimeDescription):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::formatChromiumMediaControlsTime):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::formatMediaControlsTime):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setFontSize):
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::decomposeArcToCubic):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunRound::round):
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toString):

2013-02-18  Chris Fleizach  <cfleizach@apple.com>

        AX: Make iOS wrapper use the WebAccessibilityObjectBase wrapper
        https://bugs.webkit.org/show_bug.cgi?id=110077

        Reviewed by David Kilzer.

        Make the iOS wrapper a subclass of the shared wrapper so that iOS can re-use code from the Mac.
        Rename the iOS file to reflect the class name.

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/ios/AccessibilityObjectWrapperIOS.h: Removed.
        * accessibility/ios/AccessibilityObjectWrapperIOS.mm: Removed.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h: Copied from Source/WebCore/accessibility/ios/AccessibilityObjectWrapperIOS.h.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: Copied from Source/WebCore/accessibility/ios/AccessibilityObjectWrapperIOS.mm.
        (-[WebAccessibilityObjectWrapper initWithAccessibilityObject:]):
        (-[WebAccessibilityObjectWrapper attachmentView]):
        (-[WebAccessibilityObjectWrapper accessibilityPostedNotification:WebCore::AXObjectCache::]):

2013-02-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143210.
        http://trac.webkit.org/changeset/143210
        https://bugs.webkit.org/show_bug.cgi?id=110128

        Still causing some test timeouts (Requested by anttik on
        #webkit).

        * platform/SharedTimer.h:
        (SharedTimer):
        (WebCore):
        (WebCore::MainThreadSharedTimer::stop):
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::fireTimersInNestedEventLoop):
        * platform/mac/SharedTimerMac.mm:
        (WebCore):
        (WebCore::PowerObserver::restartSharedTimer):
        (WebCore::setSharedTimerFireInterval):
        (WebCore::stopSharedTimer):

2013-02-18  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Disable hiding the debugger when it is below the source code
        https://bugs.webkit.org/show_bug.cgi?id=110106

        Reviewed by Pavel Feldman.

        When the "Split horizontally" option is checked in the Sources panel the button responsible for the sidebar
        visibility is hidden and the sidebar is force-shown. Also set the "Split sidebar" option default to true.

        No new tests.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/scriptsPanel.css:
        (.split-view-horizontal #scripts-debug-sidebar-resizer-widget):

2013-02-18  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions] Support outside-shape layout for shape-inside property
        https://bugs.webkit.org/show_bug.cgi?id=102571

        Reviewed by David Hyatt.

        A shape-inside value of 'outside-shape' should resolve to the value of
        the shape-outside property for layout. This patch introduces a helper
        method to resolve shape-inside in RenderStyle, and replaces calls to
        RenderStyle::shapeInside() when the resolved (layout) value should be
        used.

        Test: fast/exclusions/shape-inside/shape-inside-outside-shape.html

        * rendering/ExclusionShapeInfo.cpp:
        (WebCore::::computedShape): Use the resolved shape-inside getter.
        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::isEnabledFor): Ditto.
        (WebCore::ExclusionShapeInsideInfo::ExclusionShapeInsideInfo): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange): Ditto.
        (WebCore::RenderBlock::exclusionShapeInsideInfo): Ditto.
        * rendering/style/RenderStyle.h: Add the resolved shape inside getter.

2013-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: hide vertical-sidebar-split in dock-to-right mode behind single experimental flag.
        https://bugs.webkit.org/show_bug.cgi?id=110119

        Reviewed by Vsevolod Vlasov.

        Removed context menus, made it toggle automatically upon dock orientation change.

        * inspector/front-end/DockController.js:
        (WebInspector.DockController.prototype._toggleDockState):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._sidebarContextMenuEventFired):
        (WebInspector.ElementsPanel.prototype._dockSideChanged):
        (WebInspector.ElementsPanel.prototype._setVerticalSplit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._appendUISourceCodeItems):
        (WebInspector.ScriptsPanel.prototype._dockSideChanged):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/inspector.css:
        * inspector/front-end/scriptsPanel.css:
        (#scripts-sidebar-stack-pane):
        (div.sidebar-pane-stack#scripts-debug-sidebar-contents):
        * inspector/front-end/tabbedPane.css:
        (.tabbed-pane):

2013-02-18  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] Fix nits for configuration
        https://bugs.webkit.org/show_bug.cgi?id=110083

        Reviewed by Martin Robinson.

        Remove trailing white space. It has caused annoying warning while configuration.

        No new tests since no funtionality change.

        * GNUmakefile.list.am:

2013-02-18  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [WebGL][EFL] Refactor GraphicsContext3DPrivate to add support for SharedContext.
        https://bugs.webkit.org/show_bug.cgi?id=109988

        Reviewed by Kenneth Rohde Christiansen.

        Covered by existing WebGL tests.

        This patch refactors PlatformContext and GraphicsContext3DPrivate to
        add support for Shared Context. This would help share GL resources
        between transport surface and offscreen surface without having to worry
        about the context state. So far, we used the same drawable as transport
        surface and offscreen surface. After this patch we use pixmap surface as
        offscreen surface and use shared context to render texture content to
        transport surface. This would also align as to how shared surface is implemented
        on EFL and Qt ports.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::initialize):
        (WebCore::GraphicsContext3DPrivate::makeSharedContextCurrent):
        (WebCore::GraphicsContext3DPrivate::copyToGraphicsSurface):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore::GLPlatformContext::initialize):
        * platform/graphics/opengl/GLPlatformContext.h:
        Needed changes to take shared context into use.

        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createOffScreenSurface):
        (WebCore::GLPlatformSurface::updateContents):
        * platform/graphics/opengl/GLPlatformSurface.h:
        (GLPlatformSurface):
        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        (WebCore::GLXConfigSelector::GLXConfigSelector):
        (WebCore::GLXConfigSelector::visualInfo):
        (WebCore::GLXConfigSelector::pixmapContextConfig):
        (GLXConfigSelector):
        (WebCore::GLXConfigSelector::reset):
        * platform/graphics/surfaces/glx/GLXContext.cpp:
        Added support to query configiration supporting
        pixmap surface.

        (WebCore::GLXOffScreenContext::initialize):
        * platform/graphics/surfaces/glx/GLXContext.h:
        (GLXOffScreenContext):
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXTransportSurface::swapBuffers):
        (WebCore::GLXOffScreenSurface::GLXOffScreenSurface):
        (WebCore::GLXOffScreenSurface::~GLXOffScreenSurface):
        (WebCore::GLXOffScreenSurface::initialize):
        (WebCore::GLXOffScreenSurface::configuration):
        (WebCore::GLXOffScreenSurface::destroy):
        (WebCore::GLXOffScreenSurface::freeResources):
        (WebCore::GLXOffScreenSurface::setGeometry):
        Renamed GLXPBuffer surface as GLXOffScreenSurface.

        * platform/graphics/surfaces/glx/GLXSurface.h:
        (GLXTransportSurface):
        (GLXOffScreenSurface):
        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::createSurface):
        * platform/graphics/surfaces/glx/X11Helper.cpp:
        (WebCore::X11Helper::createPixmap):
        (WebCore):
        (WebCore::X11Helper::destroyPixmap):
        (WebCore::X11Helper::createOffScreenWindow):
        * platform/graphics/surfaces/glx/X11Helper.h:
        (X11Helper):
        Added functions to create and destroy pixmap.

2013-02-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: Generate meta information for HeapSnapshot parser.
        https://bugs.webkit.org/show_bug.cgi?id=110104

        Reviewed by Yury Semikhatsky.

        The format of Native heap snapshot is slightly different so it should provide its own meta information.


        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::finish):
        (WebCore::HeapGraphSerializer::reportMemoryUsage):
        (WebCore::HeapGraphSerializer::registerTypeString):
        (WebCore):
        * inspector/HeapGraphSerializer.h:
        (HeapGraphSerializer):
        * inspector/Inspector.json:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionImpl):
        * inspector/InspectorMemoryAgent.h:
        (InspectorMemoryAgent):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildPostOrderIndex):
        * inspector/front-end/NativeHeapSnapshot.js:
        (WebInspector.NativeHeapSnapshot):

2013-02-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Force single header includes in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=104676

        Reviewed by Xan Lopez.

        Only including <webkitdom/webkitdom.h> should be allowed from
        apps.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateHeader):
        * bindings/scripts/gobject-generate-headers.pl:
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.h:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:

2013-02-16  Antti Koivisto  <antti@apple.com>

        Reschedule shared CFRunLoopTimer instead of reconstructing it
        https://bugs.webkit.org/show_bug.cgi?id=109765

        Reviewed by Andreas Kling.

        Using CFRunLoopTimerSetNextFireDate is over 2x faster than deleting and reconstructing timers.

        * platform/SharedTimer.h:
        (WebCore::SharedTimer::willEnterNestedEventLoop):
        (WebCore):
        (MainThreadSharedTimer):
        (WebCore::MainThreadSharedTimer::willEnterNestedEventLoop):
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::fireTimersInNestedEventLoop):
        * platform/mac/SharedTimerMac.mm:
        (WebCore):
        (WebCore::PowerObserver::clearSharedTimer):
        (WebCore::ensurePowerObserver):
        (WebCore::sharedTimer):
        (WebCore::reinsertSharedTimer):
        
            Before entering nested runloop (used for inspector debugger mostly) reconstruct and reinsert the timer. For some reason
            the timer doesn't fire otherwise.

        (WebCore::setSharedTimerFireInterval):
        (WebCore::stopSharedTimer):

2013-02-18  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Resources] Only remember the tree element selection if explicitly made by user
        https://bugs.webkit.org/show_bug.cgi?id=110105

        Reviewed by Pavel Feldman.

        This change instructs the Resources panel to remember the selected tree element only if it has been
        selected by the user (not automatically, like selecting a parent when its child is removed).
        All onselect() overrides pass the selectedByUser argument value
        to BaseStorageTreeElement.prototype.onselect.
        Drive-by: Use === comparisons everywhere.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._reset): Do not detach [immutable] category views.
        (WebInspector.BaseStorageTreeElement.prototype.onselect): Remember itemURL on user gesture only.
        (WebInspector.StorageCategoryTreeElement.prototype.onselect):
        (WebInspector.FrameTreeElement.prototype.onselect):
        (WebInspector.FrameResourceTreeElement.prototype.onselect):
        (WebInspector.DatabaseTreeElement.prototype.onselect):
        (WebInspector.DatabaseTableTreeElement.prototype.onselect):
        (WebInspector.IDBDatabaseTreeElement.prototype.onselect):
        (WebInspector.IDBObjectStoreTreeElement.prototype.onselect):
        (WebInspector.IDBIndexTreeElement.prototype.onselect):
        (WebInspector.DOMStorageTreeElement):
        (WebInspector.DOMStorageTreeElement.prototype.onselect):
        (WebInspector.CookieTreeElement.prototype.onselect):
        (WebInspector.ApplicationCacheManifestTreeElement.prototype.onselect):
        (WebInspector.ApplicationCacheFrameTreeElement.prototype.onselect):
        (WebInspector.FileSystemTreeElement.prototype.onselect):
        (WebInspector.FileSystemTreeElement.prototype.clear):
        (WebInspector.ResourcesSearchController.prototype.nextSearchResult):

2013-02-18  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Color picker should not be available in Computed Styles pane
        https://bugs.webkit.org/show_bug.cgi?id=109697

        Reviewed by Pavel Feldman.

        Refactored PropertiesSection and TreeElement inheritors in StylesSidebarPane.js for cleaner separation
        of read-only and editable properties.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.ComputedStylePropertiesSection):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):
        (WebInspector.BlankStylePropertiesSection):
        (WebInspector.StylePropertyTreeElementBase):
        (WebInspector.StylePropertyTreeElementBase.prototype.node):
        (WebInspector.StylePropertyTreeElementBase.prototype.editablePane):
        (WebInspector.StylePropertyTreeElementBase.prototype.onattach):
        (WebInspector.StylePropertyTreeElementBase.prototype.updateTitle.linkifyURL):
        (WebInspector.StylePropertyTreeElementBase.prototype.updateTitle.):
        (WebInspector.StylePropertyTreeElementBase.prototype):
        (.event):
        (.isRevert):

2013-02-18  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] group replay log calls by frames
        https://bugs.webkit.org/show_bug.cgi?id=110101

        Reviewed by Pavel Feldman.

        Group canvas replay log by frames, then by draw calls.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype.dispose):
        (WebInspector.CanvasProfileView.prototype._appendCallNode):
        (WebInspector.CanvasProfileView.prototype._appendDrawCallGroup):

2013-02-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Soup] CookieJarSoup::deleteCookie() should stop looking for the cookie after it is removed
        https://bugs.webkit.org/show_bug.cgi?id=110100

        Reviewed by Kenneth Rohde Christiansen.

        CookieJarSoup::deleteCookie() retrieves the list of cookies that apply to a given URL, then
        iterates through the cookies to find the one with the right name and delete it. However, the
        current implementation keeps on comparing cookie names after the cookie was removed. This
        patch introduces a "wasDeleted" boolean to stop comparing cookie names after the cookie was
        deleted. Note that we cannot break as soon as the cookie is found as we need to keep iterating
        so that the cookies get freed by GOwnPtr.

        No new tests, no behavior change.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::deleteCookie):

2013-02-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Create separate project for each domain for UISourceCode based on browser resources.
        https://bugs.webkit.org/show_bug.cgi?id=109691

        Reviewed by Pavel Feldman.

        Separate project of certain type is now created for each domain.
        UISourceCode path represents a path in the project now.
        UISourceCode uri is now calculated based on project id and path.
        It is also possible to calculate path based on projectId and URI, which is used for uiSourceCodeForURI() methods.

        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate.prototype._filePathForPath):
        (WebInspector.FileSystemProjectDelegate.prototype.setFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype._populate.filesLoaded):
        (WebInspector.FileSystemProjectDelegate.prototype._populate):
        (WebInspector.FileSystemProjectDelegate.prototype._removeFile):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleProjectDelegate):
        (WebInspector.SimpleProjectDelegate.projectId):
        (WebInspector.SimpleProjectDelegate.prototype.id):
        (WebInspector.SimpleProjectDelegate.prototype.displayName):
        (WebInspector.SimpleProjectDelegate.prototype.addFile):
        (WebInspector.SimpleWorkspaceProvider):
        (WebInspector.SimpleWorkspaceProvider.splitURL):
        (WebInspector.SimpleWorkspaceProvider._pathForSplittedURL):
        (WebInspector.SimpleWorkspaceProvider.uriForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype._projectDelegate):
        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.addFileByName):
        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFile):
        (WebInspector.SimpleWorkspaceProvider.prototype.removeFileByName):
        (WebInspector.SimpleWorkspaceProvider.prototype.reset):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.uri):
        (WebInspector.UISourceCode.path):
        (WebInspector.UISourceCode.prototype.uri):
        * inspector/front-end/Workspace.js:
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):
        (WebInspector.Project.prototype.uiSourceCodeForURI):

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

        [EFL] Rebaseline failure media tests after r142947
        https://bugs.webkit.org/show_bug.cgi?id=109904

        Reviewed by Kenneth Rohde Christiansen.

        * css/mediaControlsEfl.css: Align time text vertically.
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):

2013-02-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract FileSystemUtils from FileSystemProjectDelegate as IsolatedFileSystem class.
        https://bugs.webkit.org/show_bug.cgi?id=110086

        Reviewed by Pavel Feldman.

        Extracted IsolatedFileSystem class that could be mocked for tests now.
        Renamed IsolatedFileSystemModel to IsolatedFileSystemManager.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate):
        (WebInspector.FileSystemProjectDelegate.prototype.id):
        (WebInspector.FileSystemProjectDelegate.prototype.displayName):
        (WebInspector.FileSystemProjectDelegate.prototype.setFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype._populate.filesLoaded):
        (WebInspector.FileSystemProjectDelegate.prototype._populate):
        * inspector/front-end/IsolatedFileSystem.js: Added.
        (WebInspector.IsolatedFileSystem):
        (WebInspector.IsolatedFileSystem.errorMessage):
        (WebInspector.IsolatedFileSystem.prototype.id):
        (WebInspector.IsolatedFileSystem.prototype.path):
        (WebInspector.IsolatedFileSystem.prototype._requestFileSystem):
        (WebInspector.IsolatedFileSystem.prototype.fileSystemLoaded):
        (WebInspector.IsolatedFileSystem.prototype.innerCallback):
        (WebInspector.IsolatedFileSystem.prototype.requestFilesRecursive):
        (WebInspector.IsolatedFileSystem.prototype.fileEntryLoaded):
        (WebInspector.IsolatedFileSystem.prototype.fileLoaded):
        (WebInspector.IsolatedFileSystem.prototype.readerLoadEnd):
        (WebInspector.IsolatedFileSystem.prototype.errorHandler):
        (WebInspector.IsolatedFileSystem.prototype.requestFileContent):
        (WebInspector.IsolatedFileSystem.prototype.fileWriterCreated.fileTruncated):
        (WebInspector.IsolatedFileSystem.prototype.fileWriterCreated):
        (WebInspector.IsolatedFileSystem.prototype.writerEnd):
        (WebInspector.IsolatedFileSystem.prototype.setFileContent):
        (WebInspector.IsolatedFileSystem.prototype.):
        (WebInspector.IsolatedFileSystem.prototype.toArray):
        (WebInspector.IsolatedFileSystem.prototype._readDirectory):
        (WebInspector.IsolatedFileSystem.prototype._requestEntries):
        * inspector/front-end/IsolatedFileSystemManager.js: Renamed from Source/WebCore/inspector/front-end/IsolatedFileSystemModel.js.
        (WebInspector.IsolatedFileSystemManager):
        (WebInspector.IsolatedFileSystemManager.prototype.mapping):
        (WebInspector.IsolatedFileSystemManager.prototype.supportsFileSystems):
        (WebInspector.IsolatedFileSystemManager.prototype._requestFileSystems):
        (WebInspector.IsolatedFileSystemManager.prototype.addFileSystem):
        (WebInspector.IsolatedFileSystemManager.prototype.removeFileSystem):
        (WebInspector.IsolatedFileSystemManager.prototype._fileSystemsLoaded):
        (WebInspector.IsolatedFileSystemManager.prototype._innerAddFileSystem):
        (WebInspector.IsolatedFileSystemManager.prototype._fileSystemPaths):
        (WebInspector.IsolatedFileSystemManager.prototype._processPendingFileSystemRequests):
        (WebInspector.IsolatedFileSystemManager.prototype._fileSystemAdded):
        (WebInspector.IsolatedFileSystemManager.prototype._fileSystemRemoved):
        (WebInspector.IsolatedFileSystemManager.prototype._isolatedFileSystem):
        (WebInspector.IsolatedFileSystemManager.prototype.requestDOMFileSystem):
        (WebInspector.IsolatedFileSystemDispatcher):
        (WebInspector.IsolatedFileSystemDispatcher.prototype.fileSystemsLoaded):
        (WebInspector.IsolatedFileSystemDispatcher.prototype.fileSystemRemoved):
        (WebInspector.IsolatedFileSystemDispatcher.prototype.fileSystemAdded):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.WorkspaceSettingsTab.prototype._createFileSystemsEditor):
        (WebInspector.WorkspaceSettingsTab.prototype._addFileSystemRow.removeFileSystemClicked):
        (WebInspector.WorkspaceSettingsTab.prototype._addFileSystemClicked):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2013-02-18  Huang Dongsung  <luxtella@company100.net>

        [EFL][WK2] compositing/layer-creation/fixed-position-out-of-view-scaled.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=110059

        Reviewed by Kenneth Rohde Christiansen.

        Remove the ASSERT check in TextureMapperLayer. This assertion seems
        valid because CoordinatedGraphicsScene::adjustPositionForFixedLayers() calls
        TextureMapperLayer::setScrollPositionDeltaIfNeeded() when the graphics
        layer is a fixed position layer. However, the assertion can be failed
        because it is possible that TextureMapperLayer is a non-fixed position
        layer when the graphics layer that holds the TextureMapperLayer is a
        fixed position layer. When CoordinatedGraphicsScene flushes,
        TextureMapperLayer becomes a fixed position layer.

        No new tests. No change in behavior.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setScrollPositionDeltaIfNeeded):

2013-02-18  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2][EFL] Unified text checker implementation
        https://bugs.webkit.org/show_bug.cgi?id=107682

        Reviewed by Anders Carlsson.

        No new tests, covered by editing/spelling tests.

        * platform/text/TextChecking.h:
        (WebCore):
        Enabling unified text checker feature for WebKit-EFL.

2013-02-18  Nico Weber  <thakis@chromium.org>

        [chromium/clang] Remove -Wno-return-type-c-linkage
        https://bugs.webkit.org/show_bug.cgi?id=110098

        Reviewed by Jochen Eisinger.

        The one instance where this triggered was removed in
        http://trac.webkit.org/changeset/141184 . A clang that has this
        warning landed in chromium r182694, so it should be safe to turn
        the warning on now.

        * WebCore.gyp/WebCore.gyp:

2013-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: provide basic console.table implementation (no [,columns] support)
        https://bugs.webkit.org/show_bug.cgi?id=109453

        Reviewed by Vsevolod Vlasov.

        Test: inspector/console/console-format-table.html

        Using console preview infrastructure to support console.table.

        * English.lproj/localizedStrings.js:
        * inspector/ConsoleAPITypes.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageTypeValue):
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::wrapObject):
        (WebCore):
        (WebCore::InjectedScript::wrapTable):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl):
        (WebInspector.ConsoleMessageImpl.prototype.willHide):
        (WebInspector.ConsoleMessageImpl.prototype._format):
        (WebInspector.ConsoleMessageImpl.prototype._appendObjectPreview):
        (WebInspector.ConsoleMessageImpl.prototype._renderPropertyPreview):
        (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsTable):
        * inspector/front-end/ConsoleModel.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._appendConsoleMessage):
        (WebInspector.ConsoleView.prototype._consoleCleared):
        (WebInspector.ConsoleView.prototype._updateMessageList):
        (WebInspector.ConsoleCommand.prototype.wasShown):
        (WebInspector.ConsoleCommand.prototype.willHide):
        (WebInspector.ConsoleGroup.prototype.addMessage):
        * inspector/front-end/DataGrid.js:
        (.sortDataGrid.comparator):
        (.sortDataGrid):
        (WebInspector.DataGrid.createSortableDataGrid):
        (WebInspector.DataGrid.prototype.renderInline):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        * inspector/front-end/dataGrid.css:
        (.data-grid.inline):
        (.data-grid.inline td.corner):
        * inspector/front-end/resourcesPanel.css:
        (.storage-view > .data-grid):
        * page/Console.cpp:
        (WebCore::Console::table):
        (WebCore):
        * page/Console.h:
        (Console):
        * page/Console.idl:

2013-02-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: JavaScriptSourceFrame should inherit UISourceCodeFrame
        https://bugs.webkit.org/show_bug.cgi?id=110091

        Reviewed by Pavel Feldman.

        Removed duplicated code from JavaScriptSourceFrame and made it inherit UISourceCodeFrame.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.onUISourceCodeContentChanged):
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/UISourceCodeFrame.js:
        (WebInspector.UISourceCodeFrame.prototype.canEditSource):
        (WebInspector.UISourceCodeFrame.prototype.onTextChanged):
        (WebInspector.UISourceCodeFrame.prototype._onFormattedChanged):
        (WebInspector.UISourceCodeFrame.prototype.onUISourceCodeContentChanged):
        (WebInspector.UISourceCodeFrame.prototype._innerSetContent):

2013-02-18  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Remove unused _files field in FileSystemProjectDelegate
        https://bugs.webkit.org/show_bug.cgi?id=110082

        Reviewed by Pavel Feldman.

        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate):
        (WebInspector.FileSystemProjectDelegate.prototype._addFile):
        (WebInspector.FileSystemProjectDelegate.prototype._removeFile):

2013-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: allow 0 as a formatted parameter in console message.
        https://bugs.webkit.org/show_bug.cgi?id=110096

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.append):
        (WebInspector.ConsoleMessageImpl.prototype._formatWithSubstitutionString):

2013-02-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed speculative fix for Chromium Mac.

        * WebCore.gypi:

2013-02-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: reportLeaf method doesn't report the leaf node properly.
        https://bugs.webkit.org/show_bug.cgi?id=109554

        In some cases leaves have no pointer so with the old schema we can't generate nodeId for them because we
        can't insert 0 into hashmap. It happens when we call addPrivateBuffer method.

        Drive by fix: I introduced a client interface for the HeapGraphSerializer.
        It helps me to do the tests for the serializer.

        Reviewed by Yury Semikhatsky.

        It is covered by newly added tests in TestWebKitAPI.

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::pushUpdate):
        (WebCore::HeapGraphSerializer::reportNode):
        (WebCore::HeapGraphSerializer::toNodeId):
        (WebCore::HeapGraphSerializer::addRootNode):
        * inspector/HeapGraphSerializer.h:
        (HeapGraphSerializer):
        (Client):
        (WebCore::HeapGraphSerializer::Client::~Client):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionImpl):

2013-02-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143100.
        http://trac.webkit.org/changeset/143100
        https://bugs.webkit.org/show_bug.cgi?id=110088

        Breaks file system support in workspace. (Requested by vsevik
        on #webkit).

        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleProjectDelegate):
        (WebInspector.SimpleProjectDelegate.prototype.id):
        (WebInspector.SimpleProjectDelegate.prototype.displayName):
        (WebInspector.SimpleProjectDelegate.prototype.addFile):
        (WebInspector.SimpleWorkspaceProvider):
        (WebInspector.SimpleWorkspaceProvider.uriForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.removeFile):
        (WebInspector.SimpleWorkspaceProvider.prototype.reset):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.uri):
        * inspector/front-end/Workspace.js:
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):
        (WebInspector.Project.prototype.uiSourceCodeForURI):
        (WebInspector.Workspace.prototype.projectForUISourceCode):

2013-02-15  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Introduce ProfilesPanelDescriptor.
        https://bugs.webkit.org/show_bug.cgi?id=109906

        Reviewed by Pavel Feldman.

        Some constants/methods should be accesible before ProfilesPanel
        is instantiated.

        Extracted methods to check if profile is "user-initiated" and what is
        its index.

        Also profile URL regexp moved to ProfilesPanelDescriptor.

        * inspector/front-end/ProfilesPanelDescriptor.js: Added.
        * WebCore.gypi: Added ProfilesPanelDescriptor.js
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * inspector/compile-front-end.py: Ditto.
        * inspector/front-end/WebKit.qrc: Ditto.
        * inspector/front-end/inspector.html: Ditto.
        * inspector/front-end/HeapSnapshotView.js: Adopted changes.
        * inspector/front-end/ProfilesPanel.js: Ditto.
        * inspector/front-end/externs.js: Ditto.
        * inspector/front-end/inspector.js: Ditto.

2013-02-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Stop passing around SelectorChecker in SelectorQuery, now that it's stack-allocated.
        https://bugs.webkit.org/show_bug.cgi?id=110038

        Reviewed by Andreas Kling.

        No functional changes, covered by existing tests.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::matches): Moved instantiation of SelectorChecker in here.
        (WebCore::SelectorDataList::queryAll): Got rid of unneeded SelectorChecker arg.
        (WebCore::SelectorDataList::queryFirst): Ditto.
        (WebCore::SelectorDataList::execute): Moved instantiation of SelectorChecker in here.
        (WebCore::SelectorQuery::matches): Removed instantiation of SelectorChecker here.
        (WebCore::SelectorQuery::queryAll): Ditto.
        (WebCore::SelectorQuery::queryFirst): Ditto.
        * dom/SelectorQuery.h:
        (WebCore): Tweaked headers to make SelectorChecker just an implementation detail.
        (SelectorDataList): Tweaked decls to remove SelectorChecker args.

2013-02-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Stop passing around SelectorChecker in ContentSelectorQuery.
        https://bugs.webkit.org/show_bug.cgi?id=110041

        Now that SelectorChecker has no interesting state, we can simplify ContentSelectorQuery and get rid of a class.

        Reviewed by Andreas Kling.

        No functional changes, covered by existing tests.

        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorDataList::checkContentSelector): Zapped ContentSelectorChecker and moved its only remaining method here.
        (WebCore::ContentSelectorDataList::matches): Removed SelectorChecker argument.
        (WebCore::ContentSelectorQuery::ContentSelectorQuery): Removed an unnecessary member.
        (WebCore::ContentSelectorQuery::matches): Removed unnecessary argument.
        * html/shadow/ContentSelectorQuery.h:
        (WebCore): Cleaned up the file.
        (ContentSelectorDataList): Updated decls.
        (ContentSelectorQuery): Ditto.

2013-02-17  Mike West  <mkwst@chromium.org>

        WheelEvent should not target text nodes.
        https://bugs.webkit.org/show_bug.cgi?id=109939

        Reviewed by Darin Adler.

        WheelEvent, like other mouse events, should not target text nodes.
        EventHandler correctly handles other mouse events by retargeting
        events to text nodes' parents; this patch adds that logic to the
        WheelEvent handler.

        This should allow jQuery to stop working around WebKit's behavior[1].

        [1]: https://github.com/jquery/jquery/commit/c61150427fc8ccc8e884df8f221a6c9bb5477929

        Test: fast/events/wheelevent-in-text-node.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
            If a WheelEvent's hit test lands on a text node, retarget the
            event to the text node's parent. Do this before latching the node.

2013-02-17  Filip Pizlo  <fpizlo@apple.com>

        Move all Structure out-of-line inline methods to StructureInlines.h
        https://bugs.webkit.org/show_bug.cgi?id=110024

        Rubber stamped by Sam Weinig.

        No new tests because no new behavior. Just rewiring includes.

        * ForwardingHeaders/parser/SourceProviderCache.h: Added.
        * loader/cache/CachedScript.cpp:

2013-02-17  Hayato Ito  <hayato@chromium.org>

        Make EventDispatcher take an Event object in its constructor.
        https://bugs.webkit.org/show_bug.cgi?id=109898

        Reviewed by Dimitri Glazkov.

        That makes EventDispatcher more RAII-like so that we can calculate
        an EventPath in its constructor.  I'll remove
        EventDispatcher::ensureEventPath() in a following patch.

        No tests. No change in behavior.

        * dom/EventDispatchMediator.cpp:
        (WebCore::EventDispatchMediator::dispatchEvent):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventDispatcher::EventDispatcher):
        (WebCore::EventDispatcher::ensureEventPath):
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        (WebCore::EventDispatcher::dispatch):
        (WebCore::EventDispatcher::dispatchEventPreProcess):
        (WebCore::EventDispatcher::dispatchEventAtCapturing):
        (WebCore::EventDispatcher::dispatchEventAtTarget):
        (WebCore::EventDispatcher::dispatchEventAtBubbling):
        (WebCore::EventDispatcher::dispatchEventPostProcess):
        * dom/EventDispatcher.h:
        (EventDispatcher):
        (WebCore::EventDispatcher::node):
        (WebCore::EventDispatcher::event):
        * dom/FocusEvent.cpp:
        (WebCore::FocusEventDispatchMediator::dispatchEvent):
        (WebCore::BlurEventDispatchMediator::dispatchEvent):
        (WebCore::FocusInEventDispatchMediator::dispatchEvent):
        (WebCore::FocusOutEventDispatchMediator::dispatchEvent):
        * dom/GestureEvent.cpp:
        (WebCore::GestureEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):

2013-02-17  Philip Rogers  <pdr@google.com>

        Fix non-root SVG viewport under zoom
        https://bugs.webkit.org/show_bug.cgi?id=99453

        Reviewed by Dirk Schulze.

        The root SVG element handles zoom differently than other SVG nodes because it needs
        to translate between CSS (where zoom is applied to all units) and SVG (where zoom is only
        applied at the top level). A good description of this difference can be found here:
        http://trac.webkit.org/browser/trunk/Source/WebCore/css/StyleResolver.cpp?rev=142855#L2598

        SVG elements can appear as children in the SVG tree as well, and in this mode
        SVGSVGElement should not consider the current zoom level. This patch fixes a bug
        where non-root viewport calculations were removing zoom.

        Test: svg/custom/symbol-zoom.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentViewportSize):
            This change removes the unnecessary zoom calculation for non-root nodes. This is similar
            to how zoom is handled elsewhere, e.g., SVGSVGElement::localCoordinateSpaceTransform.

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

        AX: Upstream iOS Accessibility files
        https://bugs.webkit.org/show_bug.cgi?id=110071

        Reviewed by David Kilzer.

        Upstream the iOS Accessibility files for WebCore. 

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/ios: Added.
        * accessibility/ios/AXObjectCacheIOS.mm: Added.
        (WebCore):
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        * accessibility/ios/AccessibilityObjectIOS.mm: Added.
        (-[WAKView accessibilityIsIgnored]):
        (WebCore):
        (WebCore::AccessibilityObject::detachFromParent):
        (WebCore::AccessibilityObject::overrideAttachmentParent):
        (WebCore::AccessibilityObject::accessibilityPasswordFieldLength):
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/ios/AccessibilityObjectWrapperIOS.h: Added.
        (WAKView):
        * accessibility/ios/AccessibilityObjectWrapperIOS.mm: Added.
        (AccessibilityUnignoredAncestor):
        (-[WebAccessibilityTextMarker initWithTextMarker:cache:]):
        (-[WebAccessibilityTextMarker initWithData:cache:]):
        (-[WebAccessibilityTextMarker initWithData:accessibilityObject:]):
        (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]):
        (-[WebAccessibilityTextMarker dataRepresentation]):
        (-[WebAccessibilityTextMarker visiblePosition]):
        (-[WebAccessibilityTextMarker description]):
        (-[WebAccessibilityObjectWrapper initWithAccessibilityObject:]):
        (-[WebAccessibilityObjectWrapper detach]):
        (-[WebAccessibilityObjectWrapper dealloc]):
        (-[WebAccessibilityObjectWrapper _prepareAccessibilityCall]):
        (-[WebAccessibilityObjectWrapper accessibilityObject]):
        (-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
        (-[WebAccessibilityObjectWrapper accessibilityPostProcessHitTest:]):
        (-[WebAccessibilityObjectWrapper accessibilityHitTest:]):
        (-[WebAccessibilityObjectWrapper accessibilityElementCount]):
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
        (-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):
        (-[WebAccessibilityObjectWrapper accessibilityLanguage]):
        (-[WebAccessibilityObjectWrapper _accessibilityIsLandmarkRole:]):
        (-[WebAccessibilityObjectWrapper _accessibilityListAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityLandmarkAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
        (-[WebAccessibilityObjectWrapper accessibilityTraits]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper isAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper stringValueShouldBeUsedInLabel]):
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        (-[WebAccessibilityObjectWrapper tableCellParent]):
        (-[WebAccessibilityObjectWrapper tableParent]):
        (-[WebAccessibilityObjectWrapper accessibilityTitleElement]):
        (-[WebAccessibilityObjectWrapper accessibilityHeaderElements]):
        (-[WebAccessibilityObjectWrapper accessibilityElementForRow:andColumn:]):
        (-[WebAccessibilityObjectWrapper accessibilityRowRange]):
        (-[WebAccessibilityObjectWrapper accessibilityColumnRange]):
        (-[WebAccessibilityObjectWrapper accessibilityPlaceholderValue]):
        (-[WebAccessibilityObjectWrapper accessibilityValue]):
        (-[WebAccessibilityObjectWrapper accessibilityIsComboBox]):
        (-[WebAccessibilityObjectWrapper accessibilityHint]):
        (-[WebAccessibilityObjectWrapper accessibilityURL]):
        (-[WebAccessibilityObjectWrapper _convertIntRectToScreenCoordinates:]):
        (-[WebAccessibilityObjectWrapper accessibilityElementRect]):
        (-[WebAccessibilityObjectWrapper accessibilityActivationPoint]):
        (-[WebAccessibilityObjectWrapper accessibilityFrame]):
        (-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
        (-[WebAccessibilityObjectWrapper accessibilityContainer]):
        (-[WebAccessibilityObjectWrapper accessibilityFocusedUIElement]):
        (-[WebAccessibilityObjectWrapper _accessibilityWebDocumentView]):
        (-[WebAccessibilityObjectWrapper _accessibilityNextElementsWithCount:]):
        (-[WebAccessibilityObjectWrapper _accessibilityPreviousElementsWithCount:]):
        (-[WebAccessibilityObjectWrapper accessibilityRequired]):
        (-[WebAccessibilityObjectWrapper accessibilityFlowToElements]):
        (-[WebAccessibilityObjectWrapper accessibilityLinkedElement]):
        (-[WebAccessibilityObjectWrapper isAttachment]):
        (-[WebAccessibilityObjectWrapper _accessibilityActivate]):
        (-[WebAccessibilityObjectWrapper attachmentView]):
        (rendererForView):
        (-[WebAccessibilityObjectWrapper _accessibilityParentForSubview:]):
        (-[WebAccessibilityObjectWrapper postFocusChangeNotification]):
        (-[WebAccessibilityObjectWrapper postSelectedTextChangeNotification]):
        (-[WebAccessibilityObjectWrapper postLayoutChangeNotification]):
        (-[WebAccessibilityObjectWrapper postLiveRegionChangeNotification]):
        (-[WebAccessibilityObjectWrapper postLoadCompleteNotification]):
        (-[WebAccessibilityObjectWrapper postChildrenChangedNotification]):
        (-[WebAccessibilityObjectWrapper postInvalidStatusChangedNotification]):
        (-[WebAccessibilityObjectWrapper accessibilityElementDidBecomeFocused]):
        (-[WebAccessibilityObjectWrapper accessibilityModifySelection:increase:]):
        (-[WebAccessibilityObjectWrapper accessibilityIncreaseSelection:]):
        (-[WebAccessibilityObjectWrapper accessibilityDecreaseSelection:]):
        (-[WebAccessibilityObjectWrapper accessibilityMoveSelectionToMarker:]):
        (-[WebAccessibilityObjectWrapper accessibilityIncrement]):
        (-[WebAccessibilityObjectWrapper accessibilityDecrement]):
        (-[WebAccessibilityObjectWrapper _addAccessibilityObject:toTextMarkerArray:]):
        (-[WebAccessibilityObjectWrapper stringForTextMarkers:]):
        (blockquoteLevel):
        (AXAttributeStringSetBlockquoteLevel):
        (AXAttributeStringSetHeadingLevel):
        (AXAttributeStringSetFont):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetStyle):
        (AXAttributedStringAppendText):
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]):
        (-[WebAccessibilityObjectWrapper _convertToDOMRange:]):
        (-[WebAccessibilityObjectWrapper positionForTextMarker:]):
        (-[WebAccessibilityObjectWrapper textMarkerRange]):
        (-[WebAccessibilityObjectWrapper elementTextRange]):
        (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]):
        (-[WebAccessibilityObjectWrapper textMarkerRangeForSelection]):
        (-[WebAccessibilityObjectWrapper textMarkerForPosition:]):
        (-[WebAccessibilityObjectWrapper _stringForRange:attributed:]):
        (-[WebAccessibilityObjectWrapper stringForRange:]):
        (-[WebAccessibilityObjectWrapper attributedStringForRange:]):
        (-[WebAccessibilityObjectWrapper elementsForRange:]):
        (-[WebAccessibilityObjectWrapper selectionRangeString]):
        (-[WebAccessibilityObjectWrapper selectedTextMarker]):
        (-[WebAccessibilityObjectWrapper lineEndMarkerForMarker:]):
        (-[WebAccessibilityObjectWrapper lineStartMarkerForMarker:]):
        (-[WebAccessibilityObjectWrapper nextMarkerForMarker:]):
        (-[WebAccessibilityObjectWrapper previousMarkerForMarker:]):
        (-[WebAccessibilityObjectWrapper frameForTextMarkers:]):
        (-[WebAccessibilityObjectWrapper textMarkerForPoint:]):
        (-[WebAccessibilityObjectWrapper accessibilityIdentifier]):
        (-[WebAccessibilityObjectWrapper accessibilitySpeechHint]):
        (-[WebAccessibilityObjectWrapper accessibilityARIAIsBusy]):
        (-[WebAccessibilityObjectWrapper accessibilityARIALiveRegionStatus]):
        (-[WebAccessibilityObjectWrapper accessibilityARIARelevantStatus]):
        (-[WebAccessibilityObjectWrapper accessibilityARIALiveRegionIsAtomic]):
        (-[WebAccessibilityObjectWrapper accessibilityInvalidStatus]):
        (-[WebAccessibilityObjectWrapper accessibilityMathRootIndexObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathRadicandObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathNumeratorObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathDenominatorObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathBaseObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathSubscriptObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathSuperscriptObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathUnderObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathOverObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathFencedOpenString]):
        (-[WebAccessibilityObjectWrapper accessibilityMathFencedCloseString]):
        (-[WebAccessibilityObjectWrapper accessibilityIsMathTopObject]):
        (-[WebAccessibilityObjectWrapper accessibilityMathType]):
        (-[WebAccessibilityObjectWrapper accessibilitySetPostedNotificationCallback:withContext:]):
        (-[WebAccessibilityObjectWrapper accessibilityPostedNotification:WebCore::AXObjectCache::]):
        (-[WebAccessibilityObjectWrapper description]):

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

        AX: rename WebAccessibilityObjectWrapper to WebAccessibilityObjectWrapperBase
        https://bugs.webkit.org/show_bug.cgi?id=110061

        Reviewed by David Kilzer.

        Rename the base accessibility wrapper class so that the iOS class can share the same name.

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::attachWrapper):
        * accessibility/mac/WebAccessibilityObjectWrapper.h: Replaced with Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.h.
        * accessibility/mac/WebAccessibilityObjectWrapper.mm: Replaced with Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm.
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h: Copied from Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.h.
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm: Copied from Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h: Removed.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: Removed.

2013-02-17  Andreas Kling  <akling@apple.com>

        REGRESSION(r143125): ~5% performance hit on Chromium's intl2 page cycler.
        <http://webkit.org/b/108835>

        Reviewed by Ojan Vafai.

        Streamline the case where GlyphPage has a per-glyph SimpleFontData* lookup table to allow
        taking earlier branches on pages with lots of mixed-font text.
        We accomplish this by explicitly storing a null SimpleFontData* for glyph #0 in the per-glyph
        lookup table instead of relying on "if (!glyph)" checks in getters.

        This is a speculative optimization, I can't get stable enough numbers locally to tell if this
        will resolve the issue on the bots.

        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::fontDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):

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

        WebSpeech: plumb through a method to generate fake speech jobs for testing
        https://bugs.webkit.org/show_bug.cgi?id=107351

        Reviewed by Adam Barth.

        We can't reliably use the platforms synthesizer to test speech synthesis internals.
        This patch adds an Internals method to enable a mock synthesizer, which is inherits
        from the PlatformSpeechSythesizer.

        The fake synthesizer goes through all the motions of a real synthesizer but doesn't do anything.
        A bunch of changes were needed here to make PlatformSpeechSynthesizer subclassable so that the
        right virtual are used.

        The Mock synthesizer only lives in WebCoreTestSupport. Because PlatformSpeechSynthesizer uses
        a RetainPtr, I needed to make WebCoreTestSupport link CoreFoundation

2013-02-17  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix for !USE(LIBXML) builds after r143112.

        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2013-02-17  Andreas Kling  <akling@apple.com>

        Optimize GlyphPage for case where all glyphs are available in the same font.
        <http://webkit.org/b/108835>
        <rdar://problem/13157042>

        Reviewed by Antti Koivisto.

        Let GlyphPage begin optimistically assuming that all its glyphs will be represented in
        the same SimpleFontData*. In this (very common) case, only keep a single SimpleFontData*.

        If glyphs from multiple fonts are mixed in one page, an array of per-glyph SimpleFontData*
        is allocated transparently.

        This was landed before with some bogus branch prediction hints and didn't fare well on
        page cyclers (intl2 specifically.) These have been removed this time around, and will
        hopefully be regression-free.

        4.98 MB progression on Membuster3.

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::createUninitialized):
        (WebCore::GlyphPage::createZeroedSystemFallbackPage):
        (WebCore::GlyphPage::createCopiedSystemFallbackPage):

            There are now three ways of constructing a GlyphPage, two of them are only used for
            creating system fallback pages.

        (WebCore::GlyphPage::setGlyphDataForIndex):

            Hold off creating a SimpleFontData* array until we're sure there are two different
            SimpleFontData* backing the glyphs in this page.
            We don't store font data for glyph #0, instead we let the getters always return null for it.

        (WebCore::GlyphPage::~GlyphPage):

            Free the SimpleFontData* array if needed.

        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::fontDataForCharacter):

            The font data for glyph #0 is always a null pointer now.

        (WebCore::GlyphPage::clearForFontData):

            Updated for new storage format.

        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):

            Fix bug where non-zero glyph was temporarily associated with null font data,
            which triggered the new assertion in setGlyphDataForIndex().

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

        Remove multi-threading gunk from WebKit2's PluginInfoStore.
        <http://webkit.org/b/110046>

        Reviewed by Alexey Proskuryakov.

        Remove now-unused code for making deep (isolated) copies of WebCore plugin structures.

        * plugins/PluginData.h:
        (MimeClassInfo):
        (PluginInfo):

2013-02-16  Alexey Proskuryakov  <ap@apple.com>

        Identifier generated twice in FrameLoader::loadResourceSynchronously()
        https://bugs.webkit.org/show_bug.cgi?id=110022

        Reviewed by Darin Adler.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadResourceSynchronously):
        Fix an apparent refactoring mistake.

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

        [JSC] Remove custom mark function for NamedNodeMap.
        <http://webkit.org/b/110029>

        Reviewed by Darin Adler.

        NamedNodeMap refs and unrefs its Element owner, so there's no need for the wrapper to keep the Element alive.

        Covered by fast/dom/Attr/access-after-element-destruction.html

        * bindings/js/JSNamedNodeMapCustom.cpp:
        * dom/NamedNodeMap.idl:

2013-02-16  Peter Nelson  <peter@peterdn.com>

        REGRESSION(r143076): Crash when calling removeNamedItem or removeNamedItemNS with a non-existent attribute of newly created element.
        <http://webkit.org/b/110019>

        Reviewed by Andreas Kling.

        Now checks Element::hasAttributes() before calling Element::getAttributeItemIndex().

        Test: http/tests/misc/acid3.html

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::removeNamedItemNS):

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

        Element: Devirtualize attribute synchronization functions.
        <http://webkit.org/b/110033>

        Reviewed by Darin Adler.

        Devirtualize the functions that perform re-serialization of lazy attributes and give
        them "synchronize"-style names:

            - SVGElement::synchronizeAnimatedSVGAttribute()
            - StyledElement::synchronizeStyleAttributeInternal()

        * dom/Element.cpp:
        (WebCore::Element::synchronizeAllAttributes):
        (WebCore::Element::synchronizeAttribute):
        * dom/Element.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::synchronizeStyleAttribute):
        * dom/StyledElement.h:
        (StyledElement):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute):
        * svg/SVGElement.h:
        (SVGElement):

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

        Element: Avoid unrelated attribute synchronization on other attribute access.
        <http://webkit.org/b/110025>

        Reviewed by Darin Adler.

        We've been extremely trigger happy with re-serializing the style attribute (and SVG animatables)
        whenever any Element attribute API was used. This patch narrows this down to (almost always)
        only synchronizing an attribute when someone specifically wants to read/update it.

        Also removed two more confusing ElementData accessors:

            - Element::elementDataWithSynchronizedAttributes()
            - Element::ensureElementDataWithSynchronizedAttributes()

        * dom/Element.h:
        * dom/Element.cpp:
        (WebCore::Element::hasAttributes):
        (WebCore::Element::hasEquivalentAttributes):
        (WebCore::Element::cloneAttributesFromElement):
        (WebCore::Element::synchronizeAllAttributes):

            Renamed updateInvalidAttributes() to synchronizeAllAttributes().
            This function should only be used when we need every single attribute to be up-to-date.

        (WebCore::Element::synchronizeAttribute):

            Broke out logic for synchronizing a specific attribute, given either a full QualifiedName
            or a localName.

        (WebCore::Element::setSynchronizedLazyAttribute):

            Don't call ensureUniqueElementData() indisciminately here. This avoids converting the attribute
            storage when re-serializing the inline style yields the same CSS text that was already in the
            style attribute.

        (WebCore::Element::hasAttribute):
        (WebCore::Element::hasAttributeNS):
        (WebCore::Element::getAttribute):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::getAttributeNodeNS):
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeNode):

            Only synchronize the attribute in question.

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

            Call synchronizeAllAttributes() when comparing two Attr nodes on the same Element instead
            of relying on the side-effects of another function doing this.

2013-02-16  Seokju Kwon  <seokju.kwon@gmail.com>

        Fix build warnings after r139853
        https://bugs.webkit.org/show_bug.cgi?id=109929

        Reviewed by Alexey Proskuryakov.

        Use UNUSED_PARAM macro to fix build warning -Wunused-parameter
        when INSPECTOR is disabled.

        No new tests, no behavior change.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        (WebCore::InspectorInstrumentation::frameStoppedLoading):
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):

2013-02-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142734.
        http://trac.webkit.org/changeset/142734
        https://bugs.webkit.org/show_bug.cgi?id=110018

        "Triggered crashes on lots of websites" (Requested by ggaren
        on #webkit).

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):

2013-02-16  Robert Hogan  <robert@webkit.org>

        percentage top value of position:relative element not calculated using parent's min-height unless height set
        https://bugs.webkit.org/show_bug.cgi?id=14762

        Reviewed by Julien Chaffraix.

        Percentage height "is calculated with respect to the height of the generated box's containing block" says  
        http://www.w3.org/TR/CSS21/visudet.html#the-height-property and "If the height of the containing block is not 
        specified explicitly (i.e., it depends on content height), and this element is not absolutely positioned, the
        value computes to 'auto'." So when calculating the used height of a replaced element do not crawl through ancestor 
        blocks except when traversing anonymous blocks. Ensure that anonymous table cells are not skipped through though.

        http://www.w3.org/TR/CSS21/tables.html#height-layout adds "In CSS 2.1, the height of a cell box is the minimum 
        height required by the content." This height is decided by allowing table cells to report their height as auto.
        It's not clear why http://trac.webkit.org/changeset/91242 decided it should no longer do this - doing so caused
        us to regress in our rendering of computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor.html.

        Tests: fast/block/percent-top-parent-respects-min-height.html
               fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor-vertical-lr.html
               fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor.html
               fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-vertical-lr.html
               fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasAutoHeightOrContainingBlockWithAutoHeight):
        (WebCore):
        (WebCore::RenderBoxModelObject::relativePositionOffset):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::hasReplacedLogicalHeight):

2013-02-16  Stephen White  <senorblanco@chromium.org>

        [skia] FEOffset should have a Skia implementation.
        https://bugs.webkit.org/show_bug.cgi?id=109831

        Reviewed by James Robinson.

        Covered by css3/filters/effect-reference.html and -hw.html.

        * WebCore.gypi:
        * platform/graphics/filters/FEOffset.h:  Implement createImageFilter()
        for the Skia path.
        * platform/graphics/filters/skia/FEOffsetSkia.cpp: Added.
        (WebCore::FEOffset::createImageFilter):
        Instantiate an SkOffsetImageFilter when building the Skia DAG.

2013-02-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Create separate project for each domain for UISourceCode based on browser resources.
        https://bugs.webkit.org/show_bug.cgi?id=109691

        Reviewed by Pavel Feldman.

        Separate project of certain type is now created for each domain.
        UISourceCode path represents a path in the project now.
        UISourceCode uri is now calculated based on project id and path.
        It is also possible to calculate path based on projectId and URI, which is used for uiSourceCodeForURI() methods.

        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleProjectDelegate):
        (WebInspector.SimpleProjectDelegate.projectId):
        (WebInspector.SimpleProjectDelegate.prototype.id):
        (WebInspector.SimpleProjectDelegate.prototype.displayName):
        (WebInspector.SimpleProjectDelegate.prototype.addFile):
        (WebInspector.SimpleWorkspaceProvider):
        (WebInspector.SimpleWorkspaceProvider.splitURL):
        (WebInspector.SimpleWorkspaceProvider._pathForSplittedURL):
        (WebInspector.SimpleWorkspaceProvider.uriForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype._projectDelegate):
        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.addFileByName):
        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFile):
        (WebInspector.SimpleWorkspaceProvider.prototype.removeFileByName):
        (WebInspector.SimpleWorkspaceProvider.prototype.reset):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.uri):
        (WebInspector.UISourceCode.path):
        (WebInspector.UISourceCode.prototype.uri):
        * inspector/front-end/Workspace.js:
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):
        (WebInspector.Project.prototype.uiSourceCodeForURI):

2013-02-15  Chris Fleizach  <cfleizach@apple.com>

        AX: Split WebAccessibilityObjectWrapper so code can be shared with iOS
        https://bugs.webkit.org/show_bug.cgi?id=109849

        Reviewed by David Kilzer.

        Split up the WebAccessibilityObjectWrapper so that iOS can share more 
        code with MacOS. I imagine over time, more code will move into this base class,
        but for now this will be a good start.

        A base class called WebAccessibilityObjectWrapper now exists, and Mac has a subclass
        of that. iOS will be able to do the same.

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::attachWrapper):
        * accessibility/mac/WebAccessibilityObjectWrapper.h:
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper detach]):
        (-[WebAccessibilityObjectWrapper attachmentView]):
        (-[WebAccessibilityObjectWrapper accessibilityObject]):
        (-[WebAccessibilityObjectWrapper accessibilityPostedNotification:]):
        (-[WebAccessibilityObjectWrapper titleTagShouldBeUsedInDescriptionField]):
        (-[WebAccessibilityObjectWrapper accessibilityTitle]):
        (-[WebAccessibilityObjectWrapper accessibilityDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityHelpText]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h: Added.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: Added.
        (std):
        (-[WebAccessibilityObjectWrapperMac detach]):
        (-[WebAccessibilityObjectWrapperMac attachmentView]):
        (CFAutoreleaseHelper):
        (AXObjectIsTextMarker):
        (AXObjectIsTextMarkerRange):
        (AXTextMarkerRange):
        (AXTextMarkerRangeStart):
        (AXTextMarkerRangeEnd):
        (SearchKeyEntry):
        (createAccessibilitySearchKeyMap):
        (accessibilitySearchKeyForString):
        (textMarkerForVisiblePosition):
        (-[WebAccessibilityObjectWrapperMac textMarkerForVisiblePosition:]):
        (visiblePositionForTextMarker):
        (-[WebAccessibilityObjectWrapperMac visiblePositionForTextMarker:]):
        (visiblePositionForStartOfTextMarkerRange):
        (visiblePositionForEndOfTextMarkerRange):
        (textMarkerRangeFromMarkers):
        (AXAttributedStringRangeIsValid):
        (AXAttributeStringSetFont):
        (CreateCGColorIfDifferent):
        (AXAttributeStringSetColor):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetStyle):
        (AXAttributeStringSetBlockquoteLevel):
        (AXAttributeStringSetSpelling):
        (AXAttributeStringSetHeadingLevel):
        (AXAttributeStringSetElement):
        (AXAttributedStringAppendText):
        (nsStringForReplacedNode):
        (-[WebAccessibilityObjectWrapperMac doAXAttributedStringForTextMarkerRange:]):
        (textMarkerRangeFromVisiblePositions):
        (-[WebAccessibilityObjectWrapperMac textMarkerRangeFromVisiblePositions:endPosition:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityActionNames]):
        (-[WebAccessibilityObjectWrapperMac additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapperMac accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapperMac visiblePositionRangeForTextMarkerRange:]):
        (-[WebAccessibilityObjectWrapperMac renderWidgetChildren]):
        (-[WebAccessibilityObjectWrapperMac remoteAccessibilityParentObject]):
        (convertToVector):
        (convertToNSArray):
        (-[WebAccessibilityObjectWrapperMac textMarkerRangeForSelection]):
        (-[WebAccessibilityObjectWrapperMac position]):
        (createAccessibilityRoleMap):
        (roleValueToNSString):
        (-[WebAccessibilityObjectWrapperMac role]):
        (-[WebAccessibilityObjectWrapperMac subrole]):
        (-[WebAccessibilityObjectWrapperMac roleDescription]):
        (-[WebAccessibilityObjectWrapperMac scrollViewParent]):
        (-[WebAccessibilityObjectWrapperMac titleTagShouldBeUsedInDescriptionField]):
        (-[WebAccessibilityObjectWrapperMac accessibilityTitle]):
        (-[WebAccessibilityObjectWrapperMac accessibilityDescription]):
        (-[WebAccessibilityObjectWrapperMac accessibilityHelpText]):
        (-[WebAccessibilityObjectWrapperMac accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityFocusedUIElement]):
        (-[WebAccessibilityObjectWrapperMac accessibilityHitTest:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityIsAttributeSettable:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityIsIgnored]):
        (-[WebAccessibilityObjectWrapperMac accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformPressAction]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformIncrementAction]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformDecrementAction]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformShowMenuAction]):
        (-[WebAccessibilityObjectWrapperMac accessibilityShowContextMenu]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformAction:]):
        (-[WebAccessibilityObjectWrapperMac accessibilitySetValue:forAttribute:]):
        (rendererForView):
        (-[WebAccessibilityObjectWrapperMac _accessibilityParentForSubview:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityActionDescription:]):
        (-[WebAccessibilityObjectWrapperMac doAXAttributedStringForRange:]):
        (-[WebAccessibilityObjectWrapperMac _convertToNSRange:]):
        (-[WebAccessibilityObjectWrapperMac _indexForTextMarker:]):
        (-[WebAccessibilityObjectWrapperMac _textMarkerForIndex:]):
        (-[WebAccessibilityObjectWrapperMac doAXRTFForRange:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityAttributeValue:forParameter:]):
        (-[WebAccessibilityObjectWrapperMac accessibilitySupportsOverriddenAttributes]):
        (-[WebAccessibilityObjectWrapperMac accessibilityShouldUseUniqueId]):
        (-[WebAccessibilityObjectWrapperMac accessibilityIndexOfChild:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityArrayAttributeCount:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityArrayAttributeValues:index:maxCount:]):
        ([WebAccessibilityObjectWrapperMac accessibilitySetShouldRepostNotifications:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPostedNotification:]):

2013-02-15  Eric Carlson  <eric.carlson@apple.com>

        [Mac] remove wkCaptionAppearance from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=109996

        Reviewed by Simon Fraser.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-02-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143088.
        http://trac.webkit.org/changeset/143088
        https://bugs.webkit.org/show_bug.cgi?id=110000

        Breaks the build (Requested by dgorbik on #webkit).

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-02-15  Chris Rogers  <crogers@google.com>

        Enhance AudioBus copyFrom() and sumFrom() to be able to handle discrete and speakers up and down-mixing
        https://bugs.webkit.org/show_bug.cgi?id=109983

        Reviewed by Kenneth Russell.

        The Web Audio spec has a more detailed explanation for how channels are to be up and down-mixed:
        https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#UpMix

        This patch adds the initial support for handling ChannelInterpretation, although no
        new JS API is yet implemented.

        No new tests since no new APIs have yet been exposed.

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::copyFrom):
        (WebCore):
        (WebCore::AudioBus::sumFrom):
        (WebCore::AudioBus::speakersCopyFrom):
        (WebCore::AudioBus::speakersSumFrom):
        (WebCore::AudioBus::discreteCopyFrom):
        (WebCore::AudioBus::discreteSumFrom):
        * platform/audio/AudioBus.h:
        (AudioBus):

2013-02-15  Tony Chang  <tony@chromium.org>

        Padding and border changes doesn't trigger relayout of children
        https://bugs.webkit.org/show_bug.cgi?id=109639

        Reviewed by Kent Tamura.

        In RenderBlock::layoutBlock, we only relayout our children if our logical width
        changes. This misses cases where our logical width doesn't change (i.e., padding
        or border changes), but our content width does change.

        Also convert the needsLayout ASSERT into the if statement. This is because
        RenderScrollbarPart can change border widths and not need a layout if the scrollbar
        doesn't have a parent. In this case, we don't need to set any children for layout.

        This is a more general case of bug 104997.

        Test: fast/block/dynamic-padding-border.html

        * rendering/RenderBox.cpp:
        (WebCore::borderOrPaddingLogicalWidthChanged): Only check if the logical width changed.
        (WebCore::RenderBox::styleDidChange): Drop the border-box condition since this can happen
        even without border-box box sizing.

2013-02-15  Mark Lam  <mark.lam@apple.com>

        Split SQLStatement work between the frontend and backend.
        https://bugs.webkit.org/show_bug.cgi?id=104751.

        Reviewed by Geoffrey Garen.

        This is part of the webdatabase refactoring for webkit2.

        1. Copied SQLTransaction to SQLTransactionBackend, and then reduce the
           2 to only handle frontend and backend work respectively.

        2. Changed how statements are created.

           - SQLTransaction::executeSQL() first creates a SQLStatement frontend
             which encapsulates the 2 script callbacks. It then passes the
             SQLStatement to the backend database to create the
             SQLStatementBackend.
           - The SQLStatementBackend manages all sqlite work.

        3. Remove the Database::reportExecuteStatementResult() wrapper because
           it is only needed in the backend now.

        4. Added new files to the build / project files.

        5. Updated / added comments about how the SQLStatement life-cycle works.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/Database.h:
        (Database):
        (WebCore::Database::reportCommitTransactionResult):
        * Modules/webdatabase/DatabaseBackend.h:
        (DatabaseBackend):
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::create):
        (WebCore::SQLStatement::SQLStatement):
        (WebCore::SQLStatement::setBackend):
        (WebCore::SQLStatement::hasCallback):
        (WebCore::SQLStatement::hasErrorCallback):
        (WebCore::SQLStatement::performCallback):
        * Modules/webdatabase/SQLStatement.h:
        (SQLStatement):
        * Modules/webdatabase/SQLStatementBackend.cpp: Copied from Source/WebCore/Modules/webdatabase/SQLStatement.cpp.
        (WebCore::SQLStatementBackend::create):
        (WebCore::SQLStatementBackend::SQLStatementBackend):
        (WebCore::SQLStatementBackend::frontend):
        (WebCore::SQLStatementBackend::sqlError):
        (WebCore::SQLStatementBackend::sqlResultSet):
        (WebCore::SQLStatementBackend::execute):
        (WebCore::SQLStatementBackend::setDatabaseDeletedError):
        (WebCore::SQLStatementBackend::setVersionMismatchedError):
        (WebCore::SQLStatementBackend::setFailureDueToQuota):
        (WebCore::SQLStatementBackend::clearFailureDueToQuota):
        (WebCore::SQLStatementBackend::lastExecutionFailedDueToQuota):
        * Modules/webdatabase/SQLStatementBackend.h: Copied from Source/WebCore/Modules/webdatabase/SQLStatement.h.
        (SQLStatementBackend):
        (WebCore::SQLStatementBackend::hasStatementCallback):
        (WebCore::SQLStatementBackend::hasStatementErrorCallback):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverStatementCallback):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::executeSQL):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::currentStatement):
        (WebCore::SQLTransactionBackend::enqueueStatementBackend):
        (WebCore::SQLTransactionBackend::executeSQL):
        (WebCore::SQLTransactionBackend::runStatements):
        (WebCore::SQLTransactionBackend::getNextStatement):
        (WebCore::SQLTransactionBackend::runCurrentStatementAndGetNextState):
        (WebCore::SQLTransactionBackend::nextStateForCurrentStatementError):
        * Modules/webdatabase/SQLTransactionBackend.h:
        (SQLTransactionBackend):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-02-15  Elliott Sprehn  <esprehn@chromium.org>

        Rename HasCustomCallbacks to HasCustomStyleCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=109982

        Reviewed by Eric Seidel.

        Now that inside ChildFrameDisconnector we only call isFrameOwnerElement()
        on elements that report having descendants (or themselves) have connected
        frames we don't need to be as agressive about avoiding the virtual call
        to isFrameOwnerElement() which lets us rename hasCustomCallbacks to
        hasCustomStyleCallbacks to better reflect it's purpose.

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::collectFrameOwners):
        * dom/Element.cpp:
        (WebCore::Element::styleForRenderer):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::willRecalcStyle):
        (WebCore::Element::didRecalcStyle):
        (WebCore::Element::customStyleForRenderer):
        * dom/Node.h:
        (WebCore::Node::pseudoId):
        (WebCore::Node::hasCustomStyleCallbacks):
        (WebCore::Node::customPseudoId):
        (WebCore::Node::setHasCustomStyleCallbacks):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::PseudoElement):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::recalcStyle):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement):
        (WebCore::HTMLFrameOwnerElement::disconnectContentFrame):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::DateTimeEditElement):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement):
        (WebCore::TextControlInnerTextElement::TextControlInnerTextElement):
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::TextFieldDecorationElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):

2013-02-15  Eric Carlson  <eric.carlson@apple.com>

        [Mac] remove wkCaptionAppearance from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=109996

        Reviewed by Simon Fraser.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

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

        Calling DOM Element.attributes shouldn't force creation of ElementData.
        <http://webkit.org/b/109976>

        Reviewed by Darin Adler.

        Don't create ElementData for an Element unnecessarily just because someone calls .attributes on it.
        Previously, JS like this would create empty ElementData when 'element' has no attributes:

            for (i = 0; i < element.attributes.length; ++i)
                doStuff(element.attributes[i]);

        Make NamedNodeMap::length() short-circuit and return 0 if !Element::hasAttributes().

        * dom/Element.cpp:
        (WebCore::Element::attributes):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::length):

2013-02-15  Kentaro Hara  <haraken@chromium.org>

        [V8] An "EvenTarget" type in IDL should be converted to EventTarget*, not to Node*
        https://bugs.webkit.org/show_bug.cgi?id=109895

        Reviewed by Adam Barth.

        Currently an "EventTarget" type in IDL is converted to Node*.
        This is wrong because there are non-Node interfaces that inherit
        a EventTarget. We should convert an "EventTarget" type to EventTarget*.
        This will fix FIXMEs in CodeGeneratorV8.pm.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetNativeType):
        (JSValueToNative):

2013-02-15  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r142505?): Crashes in WebCore::ScrollingStateNode::appendChild when using back/forward buttons
        https://bugs.webkit.org/show_bug.cgi?id=109826
        <rdar://problem/13216100>

        Reviewed by Beth Dakin.

        Fix a crash when going Back on some pages with fixed position elements.
        
        When a page was being restored from the page cache, and a layout from
        FrameLoader::commitProvisionalLoad() caused us to try to register the fixed
        position layer before the main scrolling layer, we'd crash trying to dereference
        the root node.
        
        Fix by bailing from ScrollingStateTree::attachNode() if we can't find the parent
        node.

        Test: platform/mac-wk2/tiled-drawing/null-parent-back-crash.html

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::stateNodeForID):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::updateViewportConstrainedNode):

2013-02-15  Simon Fraser  <simon.fraser@apple.com>

        Constrain fixed layers to the viewport, not the document
        https://bugs.webkit.org/show_bug.cgi?id=109646

        Reviewed by Beth Dakin.
        
        It's bad to constrain position:fixed compositing layers to the
        document rect, because their bounds will change every time the scroll
        position changes, and we're not good currently at synchronizing scrolling
        thread layer updates with main thread layer updates, so jiggles ensue.
        
        Fix by constraining position:fixed layers to the viewport.

        Test: compositing/geometry/limit-layer-bounds-fixed.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):

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

        Add a CDMClient class which allows the CDM to query for the currently attached MediaPlayer.
        https://bugs.webkit.org/show_bug.cgi?id=109702

        Reviewed by Eric Carlson.

        Some CDM implementations will need to work closely with an associated
        MediaPlayer in order to generate key requests and provide keys. Add a
        client protocol to be implemented by the MediaKeys object which can
        provide access to the associated MediaPlayer if present.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::CDM): Initialize the m_client ivar.
        (WebCore::CDM::mediaPlayer): Pass to the client, if present.
        * Modules/encryptedmedia/CDM.h:
        (WebCore::CDM::client): Simple getter.
        (WebCore::CDM::setClient): Simple setter.
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::MediaKeys): Initialize the m_mediaElement ivar
            and call setClient() on the passed in CDM.
        (WebCore::MediaKeys::setMediaElement): Simple setter.
        (WebCore::MediaKeys::cdmMediaPlayer): Retrieve the MediaPlayer from
            the m_mediaElement if present.
        * Modules/encryptedmedia/MediaKeys.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Call setMediaKeys(0)
            to clear the mediaElement in any associated MediaKeys.
        (WebCore::HTMLMediaElement::setMediaKeys): Clear the mediaElement on
            any associated MediaKeys, and set the mediaElement on the newly
            associated MediaKeys.

2013-02-15  Simon Fraser  <simon.fraser@apple.com>

        drop-shadow filter with overflow:hidden child misbehaves
        https://bugs.webkit.org/show_bug.cgi?id=109783

        Reviewed by Dean Jackson.
        
        The change in r112745 was not sufficient; it failed to account
        for descendant layers that needed to not clipping to avoid artefacts
        with filters like drop-shadow.

        Test: css3/filters/filter-repaint-shadow-layer-child.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents): Remove the useClipRect bool.
        Replace it with a clipToDirtyRect member on the LayerPaintingInfo, which
        gets passed to descendants. Remove some "Restore the clip" comments that added
        nothing.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::LayerPaintingInfo::LayerPaintingInfo):
        (LayerPaintingInfo):

2013-02-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143066.
        http://trac.webkit.org/changeset/143066
        https://bugs.webkit.org/show_bug.cgi?id=109986

        Broke the Apple Lion build (among others). (Requested by
        ddkilzer on #webkit).

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::attachWrapper):
        * accessibility/mac/WebAccessibilityObjectWrapper.h:
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper unregisterUniqueIdForUIElement]):
        (-[WebAccessibilityObjectWrapper detach]):
        (-[WebAccessibilityObjectWrapper accessibilityObject]):
        (-[WebAccessibilityObjectWrapper attachmentView]):
        (CFAutoreleaseHelper):
        (AXObjectIsTextMarker):
        (AXObjectIsTextMarkerRange):
        (AXTextMarkerRange):
        (AXTextMarkerRangeStart):
        (AXTextMarkerRangeEnd):
        (SearchKeyEntry):
        (createAccessibilitySearchKeyMap):
        (accessibilitySearchKeyForString):
        (textMarkerForVisiblePosition):
        (-[WebAccessibilityObjectWrapper textMarkerForVisiblePosition:]):
        (visiblePositionForTextMarker):
        (-[WebAccessibilityObjectWrapper visiblePositionForTextMarker:]):
        (visiblePositionForStartOfTextMarkerRange):
        (visiblePositionForEndOfTextMarkerRange):
        (textMarkerRangeFromMarkers):
        (AXAttributedStringRangeIsValid):
        (AXAttributeStringSetFont):
        (CreateCGColorIfDifferent):
        (AXAttributeStringSetColor):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetStyle):
        (AXAttributeStringSetBlockquoteLevel):
        (AXAttributeStringSetSpelling):
        (AXAttributeStringSetHeadingLevel):
        (AXAttributeStringSetElement):
        (AXAttributedStringAppendText):
        (nsStringForReplacedNode):
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        (textMarkerRangeFromVisiblePositions):
        (-[WebAccessibilityObjectWrapper textMarkerRangeFromVisiblePositions:endPosition:]):
        (-[WebAccessibilityObjectWrapper accessibilityActionNames]):
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper visiblePositionRangeForTextMarkerRange:]):
        (-[WebAccessibilityObjectWrapper renderWidgetChildren]):
        (-[WebAccessibilityObjectWrapper remoteAccessibilityParentObject]):
        (convertToVector):
        (convertToNSArray):
        (-[WebAccessibilityObjectWrapper textMarkerRangeForSelection]):
        (-[WebAccessibilityObjectWrapper position]):
        (createAccessibilityRoleMap):
        (roleValueToNSString):
        (-[WebAccessibilityObjectWrapper role]):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        (-[WebAccessibilityObjectWrapper scrollViewParent]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityFocusedUIElement]):
        (-[WebAccessibilityObjectWrapper accessibilityHitTest:]):
        (-[WebAccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[WebAccessibilityObjectWrapper accessibilityIsIgnored]):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformPressAction]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformIncrementAction]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformDecrementAction]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (rendererForView):
        (-[WebAccessibilityObjectWrapper _accessibilityParentForSubview:]):
        (-[WebAccessibilityObjectWrapper accessibilityActionDescription:]):
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForRange:]):
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]):
        (-[WebAccessibilityObjectWrapper _indexForTextMarker:]):
        (-[WebAccessibilityObjectWrapper _textMarkerForIndex:]):
        (-[WebAccessibilityObjectWrapper doAXRTFForRange:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[WebAccessibilityObjectWrapper accessibilitySupportsOverriddenAttributes]):
        (-[WebAccessibilityObjectWrapper accessibilityShouldUseUniqueId]):
        (-[WebAccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h: Removed.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.m: Removed.

2013-02-15  Emil A Eklund  <eae@chromium.org>

        Change MouseRelatedEvent to use LayoutPoint::scale
        https://bugs.webkit.org/show_bug.cgi?id=109979

        Reviewed by Dimitri Glazkov.
        
        Change MouseRelatedEvent::MouseRelatedEvent to use LayoutPoint::
        scale to adjust location and scroll offset for scale factor and
        zooming.

        No new tests, no change in functionality.

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

2013-02-15  Chris Fleizach  <cfleizach@apple.com>

        AX: Split WebAccessibilityObjectWrapper so code can be shared with iOS
        https://bugs.webkit.org/show_bug.cgi?id=109849

        Reviewed by David Kilzer.

        Split up the WebAccessibilityObjectWrapper so that iOS can share more 
        code with MacOS. I imagine over time, more code will move into this base class,
        but for now this will be a good start.

        A base class called WebAccessibilityObjectWrapper now exists, and Mac has a subclass
        of that. iOS will be able to do the same.

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::attachWrapper):
        * accessibility/mac/WebAccessibilityObjectWrapper.h:
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper detach]):
        (-[WebAccessibilityObjectWrapper attachmentView]):
        (-[WebAccessibilityObjectWrapper accessibilityObject]):
        (-[WebAccessibilityObjectWrapper accessibilityPostedNotification:]):
        (-[WebAccessibilityObjectWrapper titleTagShouldBeUsedInDescriptionField]):
        (-[WebAccessibilityObjectWrapper accessibilityTitle]):
        (-[WebAccessibilityObjectWrapper accessibilityDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityHelpText]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h: Added.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.m: Added.
        (std):
        (-[WebAccessibilityObjectWrapperMac detach]):
        (-[WebAccessibilityObjectWrapperMac attachmentView]):
        (CFAutoreleaseHelper):
        (AXObjectIsTextMarker):
        (AXObjectIsTextMarkerRange):
        (AXTextMarkerRange):
        (AXTextMarkerRangeStart):
        (AXTextMarkerRangeEnd):
        (SearchKeyEntry):
        (createAccessibilitySearchKeyMap):
        (accessibilitySearchKeyForString):
        (textMarkerForVisiblePosition):
        (-[WebAccessibilityObjectWrapperMac textMarkerForVisiblePosition:]):
        (visiblePositionForTextMarker):
        (-[WebAccessibilityObjectWrapperMac visiblePositionForTextMarker:]):
        (visiblePositionForStartOfTextMarkerRange):
        (visiblePositionForEndOfTextMarkerRange):
        (textMarkerRangeFromMarkers):
        (AXAttributedStringRangeIsValid):
        (AXAttributeStringSetFont):
        (CreateCGColorIfDifferent):
        (AXAttributeStringSetColor):
        (AXAttributeStringSetNumber):
        (AXAttributeStringSetStyle):
        (AXAttributeStringSetBlockquoteLevel):
        (AXAttributeStringSetSpelling):
        (AXAttributeStringSetHeadingLevel):
        (AXAttributeStringSetElement):
        (AXAttributedStringAppendText):
        (nsStringForReplacedNode):
        (-[WebAccessibilityObjectWrapperMac doAXAttributedStringForTextMarkerRange:]):
        (textMarkerRangeFromVisiblePositions):
        (-[WebAccessibilityObjectWrapperMac textMarkerRangeFromVisiblePositions:endPosition:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityActionNames]):
        (-[WebAccessibilityObjectWrapperMac additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapperMac accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapperMac visiblePositionRangeForTextMarkerRange:]):
        (-[WebAccessibilityObjectWrapperMac renderWidgetChildren]):
        (-[WebAccessibilityObjectWrapperMac remoteAccessibilityParentObject]):
        (convertToVector):
        (convertToNSArray):
        (-[WebAccessibilityObjectWrapperMac textMarkerRangeForSelection]):
        (-[WebAccessibilityObjectWrapperMac position]):
        (createAccessibilityRoleMap):
        (roleValueToNSString):
        (-[WebAccessibilityObjectWrapperMac role]):
        (-[WebAccessibilityObjectWrapperMac subrole]):
        (-[WebAccessibilityObjectWrapperMac roleDescription]):
        (-[WebAccessibilityObjectWrapperMac scrollViewParent]):
        (-[WebAccessibilityObjectWrapperMac titleTagShouldBeUsedInDescriptionField]):
        (-[WebAccessibilityObjectWrapperMac accessibilityTitle]):
        (-[WebAccessibilityObjectWrapperMac accessibilityDescription]):
        (-[WebAccessibilityObjectWrapperMac accessibilityHelpText]):
        (-[WebAccessibilityObjectWrapperMac accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityFocusedUIElement]):
        (-[WebAccessibilityObjectWrapperMac accessibilityHitTest:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityIsAttributeSettable:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityIsIgnored]):
        (-[WebAccessibilityObjectWrapperMac accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformPressAction]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformIncrementAction]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformDecrementAction]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformShowMenuAction]):
        (-[WebAccessibilityObjectWrapperMac accessibilityShowContextMenu]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPerformAction:]):
        (-[WebAccessibilityObjectWrapperMac accessibilitySetValue:forAttribute:]):
        (rendererForView):
        (-[WebAccessibilityObjectWrapperMac _accessibilityParentForSubview:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityActionDescription:]):
        (-[WebAccessibilityObjectWrapperMac doAXAttributedStringForRange:]):
        (-[WebAccessibilityObjectWrapperMac _convertToNSRange:]):
        (-[WebAccessibilityObjectWrapperMac _indexForTextMarker:]):
        (-[WebAccessibilityObjectWrapperMac _textMarkerForIndex:]):
        (-[WebAccessibilityObjectWrapperMac doAXRTFForRange:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityAttributeValue:forParameter:]):
        (-[WebAccessibilityObjectWrapperMac accessibilitySupportsOverriddenAttributes]):
        (-[WebAccessibilityObjectWrapperMac accessibilityShouldUseUniqueId]):
        (-[WebAccessibilityObjectWrapperMac accessibilityIndexOfChild:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityArrayAttributeCount:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityArrayAttributeValues:index:maxCount:]):
        ([WebAccessibilityObjectWrapperMac accessibilitySetShouldRepostNotifications:]):
        (-[WebAccessibilityObjectWrapperMac accessibilityPostedNotification:]):

2013-02-15  Elliott Sprehn  <esprehn@chromium.org>

        RenderQuote should not mark renderers as needing layout during layout
        https://bugs.webkit.org/show_bug.cgi?id=109876

        Reviewed by Ojan Vafai.

        Marking RenderQuotes as needing pref width recalcs and layouts during a
        layout is dangerous since an ancestor may mark itself as having completed
        layout, but then some subtree still thinks it needs layout.

        Instead, since the only time we create RenderQuote instances is inside
        PseudoElement, we can call attachQuote inside PseudoElement::attach during
        the regular tree mutating cycle. We can then use RenderQuote::styleDidChange
        to update the kind of quotes on normal style changes.

        This makes RenderQuote behave much more similarly to DOM nodes and means
        we no longer need to set dirty bits during layout.

        Test: fast/css-generated-content/quote-layout-focus-crash.html

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::attach): Now call attachQuote().
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::~RenderQuote):
        (WebCore::RenderQuote::willBeRemovedFromTree):
        (WebCore::RenderQuote::styleDidChange):
        (WebCore::RenderQuote::updateText):
        (WebCore::RenderQuote::attachQuote):
        (WebCore::RenderQuote::detachQuote):
        (WebCore::RenderQuote::updateDepth):
        * rendering/RenderQuote.h:
        (RenderQuote):

2013-02-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143044.
        http://trac.webkit.org/changeset/143044
        https://bugs.webkit.org/show_bug.cgi?id=109974

        broke windows build (Requested by kling on #webkit).

        * dom/DocumentSharedObjectPool.cpp:
        (WebCore::DocumentSharedObjectPool::cachedShareableElementDataWithAttributes):
        * dom/Element.cpp:
        (WebCore::sizeForShareableElementDataWithAttributeCount):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::ShareableElementData::~ShareableElementData):
        (WebCore::UniqueElementData::UniqueElementData):
        * dom/Element.h:
        (WebCore::ShareableElementData::immutableAttributeArray):
        (ShareableElementData):
        (WebCore::ElementData::attributeItem):

2013-02-15  Adam Barth  <abarth@webkit.org>

        Enable the preload scanner on the background parser thread
        https://bugs.webkit.org/show_bug.cgi?id=108027

        Reviewed by Tony Gentilcore.

        The patch causes us to pass all the fast/preloader tests with the
        threaded parser enabled.

        This patch wires up the BackgroundHTMLParser to the
        TokenPreloadScanner.  Currently, we bail out of preload scanning if we
        encounter a document.write becaues we don't know how to rewind the
        preload scanner, but that's something we can tune in the future.

        The BackgroundHTMLParser delivers the preloads to the
        HTMLDocumentParser together with the token stream. If the
        HTMLDocumentParser isn't able to use the token stream immediately, it
        kicks off the preloads.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::checkThatPreloadsAreSafeToSendToAnotherThread):
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::resumeFrom):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        * html/parser/BackgroundHTMLParser.h:
        (Configuration):
            - We need to add a struct for the create function because the
              number of arguments exceeds the limits of Functional.h.
        (BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::create):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::scanCommon):
        (WebCore::CSSPreloadScanner::scan):
        (WebCore::CSSPreloadScanner::emitRule):
            - We need to use a new string here so that the string is safe to
              send to another thread.
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::startBackgroundParser):
            - Following the example of the XSSAuditor, we create the
              TokenPreloadScanner on the main thread and then send it to the
              background thread for operation.
        * html/parser/HTMLDocumentParser.h:
        (WebCore):
        (ParsedChunk):
        * html/parser/HTMLParserOptions.h:
        (HTMLParserOptions):
            - We need to add a default constructor so that the
              HTMLDocumentParser can create an empty
              BackgroundHTMLParser::Configuration struct.
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::TokenPreloadScanner::scanCommon):
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLPreloadScanner.h:
        (TokenPreloadScanner):
        (WebCore::TokenPreloadScanner::isSafeToSendToAnotherThread):
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::HTMLResourcePreloader::takeAndPreload):
        (WebCore):
        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::PreloadRequest):
        (WebCore):
        (HTMLResourcePreloader):

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

        Build fix after r143030. We need to keep updatedRange around until createMarkupInternal returns.

        * editing/markup.cpp:
        (WebCore::createMarkup):

2013-02-15  Rik Cabanier  <cabanier@adobe.com>

        Add platform support for -webkit-background-blend-mode to CG context
        https://bugs.webkit.org/show_bug.cgi?id=108549

        Reviewed by Dean Jackson.

        Tests: css3/compositing/effect-background-blend-mode-stacking.html
               css3/compositing/effect-background-blend-mode.html

        This patch adds support for blending on background images to the Core Graphics port of WebKit.

        * platform/graphics/CrossfadeGeneratedImage.cpp: Added interface change for blending.
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.h: Added interface change for blending.
        (CrossfadeGeneratedImage):
        * platform/graphics/GeneratedImage.h: Added interface change for blending.
        (GeneratedImage):
        * platform/graphics/GeneratorGeneratedImage.cpp: Added interface change for blending.
        (WebCore::GeneratorGeneratedImage::drawPattern):
        * platform/graphics/GeneratorGeneratedImage.h: Added interface change for blending.
        (GeneratorGeneratedImage):
        * platform/graphics/GraphicsContext.cpp: Added interface change for blending and passes blend mode to image object.
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::blendModeOperation):
        (WebCore):
        * platform/graphics/GraphicsContext.h: Added interface change for blending.
        (GraphicsContext):
        * platform/graphics/Image.cpp: Added interface change for blending and passed it to graphics layer.
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h: Added interface change for blending.
        (Image):
        * platform/graphics/cg/ImageCG.cpp: Added interface change for blending and passed it to OS.
        (WebCore::Image::drawPattern):
        * rendering/RenderBoxModelObject.cpp: Passed blend mode when drawing background images.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * platform/graphics/cairo/ImageCairo.cpp: Added interface change for blending.
        (WebCore::Image::drawPattern):
        * platform/graphics/qt/ImageQt.cpp: Added interface change for blending.
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/ImageSkia.cpp: Added interface change for blending.
        (WebCore::Image::drawPattern):
        * rendering/RenderBoxModelObject.cpp: Added interface change for blending.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * svg/graphics/SVGImageForContainer.cpp: Added interface change for blending.
        (WebCore::SVGImageForContainer::drawPattern):
        * svg/graphics/SVGImageForContainer.h: Added interface change for blending.

2013-02-14  Emil A Eklund  <eae@chromium.org>

        Clamp span value in RenderTableCell::parse[Col|Row]SpanFromDOM
        https://bugs.webkit.org/show_bug.cgi?id=109878

        Reviewed by Abhishek Arya.

        Test: fast/table/colspan-huge-number.html
        
        Clamp colspan and rowspan values to their respective maximum
        supported values.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::parseColSpanFromDOM):
        (WebCore::RenderTableCell::parseRowSpanFromDOM):

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

        ShareableElementData should use zero-length array for storage.
        <http://webkit.org/b/109959>

        Reviewed by Anders Carlsson.

        Use a zero-length Attribute array instead of always casting from void* to an array.
        It was done this way originally because I didn't know we could sidestep the MSVC
        build error with some #pragma hackery.

        * dom/DocumentSharedObjectPool.cpp:
        (WebCore::DocumentSharedObjectPool::cachedShareableElementDataWithAttributes):
        * dom/Element.cpp:
        (WebCore::sizeForShareableElementDataWithAttributeCount):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::ShareableElementData::~ShareableElementData):
        (WebCore::UniqueElementData::UniqueElementData):
        * dom/Element.h:
        (ShareableElementData):
        (WebCore::ElementData::attributeItem):

2013-02-14  Ojan Vafai  <ojan@chromium.org>

        Implement RenderGrid::computeIntrinsicLogicalWidths
        https://bugs.webkit.org/show_bug.cgi?id=109881

        Reviewed by Tony Chang.

        For now this is not observable due to the FIXMEs for unimplemented bits
        of computePreferredLogicalWidths. But, soon, I'll be removing the computePreferredLogicalWidths
        override entirely and instead use RenderBlock's, which will also address the
        RenderGrid FIXMEs.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        const_cast the usages of m_grid. Alternately, we could stack allocate it, but there's disagreement on
        whether that's the right choice. See https://bugs.webkit.org/show_bug.cgi?id=109880.

        (WebCore::RenderGrid::computePreferredLogicalWidths):
        * rendering/RenderGrid.h:


2013-02-15  Xueqing Huang  <huangxueqing@baidu.com>

        Flexbox should ignore firstLine pseudo element.
        https://bugs.webkit.org/show_bug.cgi?id=104485

        Reviewed by Tony Chang.

        Spec[1] said that "None of the properties defined in this module
        apply to '::first-line' or '::first-letter' pseudo-elements." and
        css2[2] define "The :first-line pseudo-element can only be attached
        to a block container element." 
        [1]http://dev.w3.org/csswg/css3-flexbox/#display-flex
        [2]http://www.w3.org/TR/CSS2/selector.html#first-line-pseudo

        tests:
        css3/flexbox/flexbox-ignore-firstLine.html
        css3/flexbox/flexitem-firstLine-valid.html
        css3/flexbox/inline-flexbox-ignore-firstLine.html 

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::firstLineBlock):

2013-02-15  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Implement SharedBuffer version of put()
        https://bugs.webkit.org/show_bug.cgi?id=109092

        Reviewed by Adam Barth.

        Switch IDBDatabaseBackendInterface::put over
        to SharedBuffer, to avoid buffer copies of the value.

        No new tests, this is a refactor.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::putRecord):
        * Modules/indexeddb/IDBBackingStore.h:
        (WebCore):
        (IDBBackingStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (PutOperation):
        (WebCore::IDBDatabaseBackendImpl::put):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (WebCore):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):

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

        Implement StorageAreaProxy::length
        https://bugs.webkit.org/show_bug.cgi?id=109962

        Reviewed by Andreas Kling.

        Export a symbol needed by WebKit2.

        * WebCore.exp.in:

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

        Remove const from a bunch of StorageArea member functions
        https://bugs.webkit.org/show_bug.cgi?id=109957

        Reviewed by Beth Dakin.

        StorageArea is an abstract base class, and its subclasses might want to mutate the object
        when certain member functions are called so remove const from all member functions.

        * storage/StorageArea.h:
        (WebCore):
        (StorageArea):
        (WebCore::StorageArea::~StorageArea):
        (WebCore::StorageArea::incrementAccessCount):
        (WebCore::StorageArea::decrementAccessCount):
        (WebCore::StorageArea::closeDatabaseIfIdle):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::canAccessStorage):
        (WebCore::StorageAreaImpl::length):
        (WebCore::StorageAreaImpl::key):
        (WebCore::StorageAreaImpl::getItem):
        (WebCore::StorageAreaImpl::contains):
        (WebCore::StorageAreaImpl::memoryBytesUsedByCache):
        * storage/StorageAreaImpl.h:
        (StorageAreaImpl):

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

        DeleteButtonController::enable and disable should be called via a RAII object
        https://bugs.webkit.org/show_bug.cgi?id=109550

        Reviewed by Enrica Casucci.

        Added DeleteButtonControllerDisableScope, a friend class of DeleteButtonController,
        and made DeleteButtonController::enable/disable private.

        * dom/ContainerNode.cpp:
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::EditCommandComposition::reapply):
        (WebCore::CompositeEditCommand::apply):
        * editing/DeleteButtonController.h:
        (WebCore):
        (DeleteButtonController):
        (DeleteButtonControllerDisableScope):
        (WebCore::DeleteButtonControllerDisableScope::DeleteButtonControllerDisableScope):
        (WebCore::DeleteButtonControllerDisableScope::~DeleteButtonControllerDisableScope):
        * editing/markup.cpp:
        (WebCore::createMarkup):
        (WebCore::createFragmentFromNodes):

2013-02-15  Max Vujovic  <mvujovic@adobe.com>

        Add code from other branch.

        [CSS Shaders] Parse src property in @-webkit-filter at-rules
        https://bugs.webkit.org/show_bug.cgi?id=109770

        Reviewed by Dean Jackson.

        This patch implements the parsing for the CSS src property in @-webkit-filter at-rules.

        The Filter Effects spec [1] specifies its syntax:
            src: [ <uri> [format(<string>)]?]#

        In practice, it can look like:
            src: url(shader.vs) format('x-shader/x-vertex'),
                 url(shader.fs) format('x-shader/x-fragment');

        This src property is similar to the src property in CSS font-face rules, but a little
        different. The CSS Fonts spec [2] specifies:
            src: [ <uri> [format(<string>#)]? | <font-face-name> ]#
            The syntax for a <font-face-name> is a unique font face name enclosed by "local("
            and ")".

        Unlike the filter src property, the font face src property accepts the local function
        [e.g. src: local("SomeFont");]. Also, the font face src property accepts a list of strings
        instead of just one string in its format function.

        [1]: https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#custom-filter-src
        [2]: http://www.w3.org/TR/css3-fonts/#src-desc

        Tests: css3/filters/custom-with-at-rule-syntax/parsing-src-property-invalid.html
               css3/filters/custom-with-at-rule-syntax/parsing-src-property-valid.html

        * css/CSSGrammar.y.in:
            Set (and unset) a flag called "m_inFilterRule", which tells us if we are in a
            @-webkit-filter at-rule or in a @font-face at-rule when we encounter a src property.
            We parse the two variants of the src property separately so that we can create different
            objects (WebKitCSSShaderValue vs. CSSFontFaceSrcValue) and because their syntax is a
            little different.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFilterRuleSrcUriAndFormat):
            Parses a URI and format pair found in the @-webkit-filter src property.
        (WebCore::CSSParser::parseFilterRuleSrc):
            Parse the @-webkit-filter src property.
        * css/CSSParser.h:
        (CSSParser):
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::customCssText):
            WebKitCSSShaderValue now has an m_format member, which needs to be included in its
            cssText.
        (WebCore::WebKitCSSShaderValue::reportDescendantMemoryUsage):
        * css/WebKitCSSShaderValue.h:
        (WebCore::WebKitCSSShaderValue::format):
        (WebCore::WebKitCSSShaderValue::setFormat):
        (WebKitCSSShaderValue):

2013-02-15  Eric Carlson  <eric.carlson@apple.com>

        Crash occurs at WebCore::TextTrackList::length() when enabling closed captions in movie
        https://bugs.webkit.org/show_bug.cgi?id=109886

        Reviewed by Dean Jackson.

        No new tests, media/media-captions.html does not crash with this change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured): Early return when
            m_textTracks is NULL.

2013-02-15  Adam Barth  <abarth@webkit.org>

        TokenPreloadScanner should be able to scan CompactHTMLTokens
        https://bugs.webkit.org/show_bug.cgi?id=109861

        Reviewed by Eric Seidel.

        This patch moves the main scanning logic for the TokenPreloadScanner to
        a templated scanCommon routine that can scan either an HTMLToken or a
        CompactHTMLToken. This patch will let the BackgroundHTMLParser preload
        scan its CompactHTMLTokens.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore):
        (WebCore::CSSPreloadScanner::scanCommon):
        (WebCore::CSSPreloadScanner::scan):
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
            - Tweak the CSSPreloadScanner API slightly to make it easier to
              call from templated code.
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::tagIdFor):
        (WebCore):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (TokenPreloadScanner::StartTagScanner):
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::TokenPreloadScanner::scanCommon):
        (WebCore::TokenPreloadScanner::updatePredictedBaseURL):
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLPreloadScanner.h:
        (TokenPreloadScanner):

2013-02-15  Alexis Menard  <alexis@webkit.org>

        WebKit shouldn't accept "none, none" in transition shorthand property.
        https://bugs.webkit.org/show_bug.cgi?id=108751

        Reviewed by Dean Jackson.

        http://dev.w3.org/csswg/css3-transitions/#transition-shorthand-property
        specifies that if there is more than one transition defined in the
        shorthand and any of them has a value of 'none' then the declaration is
        invalid. This patch fixes the problem by passing a parsing context to
        track if a keyword has been set for the transition-property and if so
        then use it to invalidate or not the declaration.

        Test: transitions/transitions-parsing.html

        * css/CSSParser.cpp:
        (AnimationParseContext):
        (WebCore::AnimationParseContext::AnimationParseContext):
        (WebCore::AnimationParseContext::commitFirstAnimation): track whether
        it's the first <single-transition/animation> or not defined in the
        shorthand.
        (WebCore::AnimationParseContext::hasCommittedFirstAnimation):
        (WebCore::AnimationParseContext::commitAnimationPropertyKeywordInShorthand):
        In the shorthand as soon as a keyword has been found then the parsing
        is 'finished', if any other animation/transition declaration part of
        the shorthand are with a keyword then it's invalid.
        (WebCore::AnimationParseContext::animationPropertyKeywordInShorthandAllowed):
        (WebCore::AnimationParseContext::hasSeenAnimationPropertyKeyword):
        (WebCore::AnimationParseContext::sawAnimationPropertyKeyword):
        (WebCore):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAnimationShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        (WebCore::CSSParser::parseAnimationProperty):
        * css/CSSParser.h:
        (WebCore):

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

        ElementData: Move leafy things out of the base class.
        <http://webkit.org/b/109888>

        Reviewed by Antti Koivisto.

        - Moved functions for mutating/adding/removing attributes into UniqueElementData.
          Attempts to modify shared element data will now fail at compile-time.

        - Removed mutableAttributeVector() and have call sites access the vector directly.

        - Move immutableAttributeArray() to ShareableElementData.

        - Move some function bodies from Element.h to Element.cpp since all clients are in there.

        * dom/Element.cpp:
        (WebCore::Element::addAttributeInternal):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::UniqueElementData::makeShareableCopy):
        (WebCore::UniqueElementData::addAttribute):
        (WebCore::UniqueElementData::removeAttribute):
        (WebCore::ElementData::reportMemoryUsage):
        (WebCore::UniqueElementData::getAttributeItem):
        (WebCore::UniqueElementData::attributeItem):
        * dom/Element.h:
        (ElementData):
        (WebCore::ShareableElementData::immutableAttributeArray):
        (ShareableElementData):
        (UniqueElementData):
        (WebCore::ElementData::length):
        (WebCore::ElementData::attributeItem):

2013-02-15  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Enable shape-inside support for circles
        https://bugs.webkit.org/show_bug.cgi?id=109713

        Reviewed by Dirk Schulze.

        Removed the test that disabled circle values for shape-inside.
        The remaining support for circles, which is based on rounded rectangles
        whose width/height is equal to their radiusX/radiusY, has not changed.

        Test: fast/exclusions/shape-inside/shape-inside-circle.html

        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::isEnabledFor): Now only disallows ellipse.

2013-02-15  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Soup] Leverage new soup_cookie_jar_get_cookie_list() API
        https://bugs.webkit.org/show_bug.cgi?id=109931

        Reviewed by Kenneth Rohde Christiansen.

        In several cases, the CookieJarSoup implementation was retrieving / copying ALL the
        cookies using soup_cookie_jar_all_cookies() and then using soup_cookie_applies_to_uri()
        to filter out cookies it is not interested in. This was inefficient.

        In libsoup 2.40, soup_cookie_jar_get_cookie_list() was introduced to retrieve only the
        cookies that apply to a given URI. This patch leverages this new API in CookieJarSoup's
        getRawCookies() and deleteCookie(). This way, only the cookies we are interested in
        are retrieved and copied. Libsoup does not need to iterate over all the cookies itself
        because it keeps the cookies in a hash table using the host names as key.

        No new tests, no behavior change.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

2013-02-15  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Added an option to split Elements and Sources sidebars in two panes.
        https://bugs.webkit.org/show_bug.cgi?id=109298.

        Reviewed by Vsevolod Vlasov.

        Introduced the "Split sidebar" context menu option that splits the horizontal sidebar into two panes.
        The width split ratio is 1:1 by default and is preserved when the Inspector window is resized.
        Elements sidebar is split into two tabbed panes, Sources sidebar is split into a pane stack and a tabbed pane.

        No new tests.

        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype._reattachBody):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.get this):
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._sidebarContextMenuEventFired):
        (WebInspector.ElementsPanel.prototype._populateContextMenuForSidebar.toggleSetting):
        (WebInspector.ElementsPanel.prototype.get _arrangeSidebarPanes.get this):
        (WebInspector.ElementsPanel.prototype.addExtensionSidebarPane):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onCreateSidebarPane):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._appendUISourceCodeItems):
        (WebInspector.ScriptsPanel.prototype._contextMenuEventFired):
        (WebInspector.ScriptsPanel.prototype._sidebarContextMenuEventFired):
        (WebInspector.ScriptsPanel.prototype._populateContextMenuForSidebar.toggleSetting):
        (WebInspector.ScriptsPanel.prototype.get _arrangeSidebarPanes.get this):
        * inspector/front-end/SidebarPane.js:
        (WebInspector.SidebarPane):
        (WebInspector.SidebarPane.prototype.expand):
        (WebInspector.SidebarPane.prototype.onContentReady):
        (WebInspector.SidebarPane.prototype._setExpandCallback):
        (WebInspector.SidebarPane.prototype.wasShown):
        (WebInspector.SidebarPaneTitle):
        (WebInspector.SidebarPaneTitle.prototype._expand):
        (WebInspector.SidebarPaneTitle.prototype._collapse):
        (WebInspector.SidebarPaneTitle.prototype._toggleExpanded):
        (WebInspector.SidebarPaneTitle.prototype._onTitleKeyDown):
        (WebInspector.SidebarPaneStack):
        (WebInspector.SidebarPaneStack.prototype.addPane):
        (WebInspector.SidebarTabbedPane):
        (WebInspector.SidebarTabbedPane.prototype.addPane):
        * inspector/front-end/SidebarView.js:
        * inspector/front-end/SplitView.js:
        (WebInspector.SplitView):
        (WebInspector.SplitView.prototype.get mainElement):
        (WebInspector.SplitView.prototype.get sidebarElement):

2013-02-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Several consecutive Backspace or Delete strikes should not be marked as undoable state.
        https://bugs.webkit.org/show_bug.cgi?id=109915

        Reviewed by Pavel Feldman.

        Extracted _isEditRangeUndoBoundary() and _isEditRangeAdjacentToLastCommand() in TextEditorModel
        to detect if markUndoableState() call is needed before and after editRange.

        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextRange.prototype.immediatelyPrecedes):
        (WebInspector.TextRange.prototype.immediatelyFollows):
        (WebInspector.TextEditorModel.endsWithBracketRegex.):

2013-02-15  Andrey Adaikin  <aandrey@chromium.org>

        Fix inconsistency in WebGLRenderingContext.idl for getAttribLocation
        https://bugs.webkit.org/show_bug.cgi?id=109892

        Reviewed by Kentaro Hara.

        * html/canvas/WebGLRenderingContext.idl:

2013-02-15  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] show replay log grouped by draw calls
        https://bugs.webkit.org/show_bug.cgi?id=109592

        Reviewed by Pavel Feldman.

        Show canvas capturing log grouped by drawing calls.
        Drive-by: extended Array.prototype with a handy peekLast function.
        Drive-by: removed code dups in few places.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype.dispose):
        (WebInspector.CanvasProfileView.prototype._onReplayStepClick):
        (WebInspector.CanvasProfileView.prototype._onReplayDrawingCallClick):
        (WebInspector.CanvasProfileView.prototype._onReplayLastStepClick):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog.didReplayTraceLog):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog):
        (WebInspector.CanvasProfileView.prototype._didReceiveTraceLog):
        (WebInspector.CanvasProfileView.prototype._selectedCallIndex):
        (WebInspector.CanvasProfileView.prototype._selectedDrawCallGroupIndex):
        (WebInspector.CanvasProfileView.prototype._appendCallNode):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.setColumnVisible):
        (WebInspector.DataGridNode.prototype.set hasChildren):
        (WebInspector.DataGridNode.prototype.set revealed):
        (WebInspector.DataGridNode.prototype.get leftPadding):
        * inspector/front-end/externs.js:
        (Array.prototype.peekLast):
        * inspector/front-end/utilities.js:

2013-02-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: highlight record revealed in Timeline
        https://bugs.webkit.org/show_bug.cgi?id=109930

        Reviewed by Pavel Feldman.

        Revealed timeline record is now highlighted with yellow background
        that fades out in 2 seconds.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._revealRecord):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype._clearRecordHighlight):
        * inspector/front-end/timelinePanel.css:
        (.highlighted-timeline-record):
        (@-webkit-keyframes timeline_record_highlight):
        (to):

2013-02-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Pass original selection to textModel to correctly restore it after undo.
        https://bugs.webkit.org/show_bug.cgi?id=109911

        Reviewed by Pavel Feldman.

        We can distinguish backspace pressed with and without selection now.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.DefaultTextEditor.WordMovementController.prototype._handleCtrlBackspace):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorCommand):
        (WebInspector.TextEditorModel.endsWithBracketRegex.):

2013-02-15  Joe Mason  <jmason@rim.com>

        [BlackBerry] Remove redundant requireAuth parameter of NetworkJob::notifyAuthReceived
        https://bugs.webkit.org/show_bug.cgi?id=109855

        Reviewed by Yong Li.

        Internal PR: 296697
        Internally Reviewed By: Leo Yang

        Code cleanup: The requireAuth parameter of NetworkJob::notifyAuthReceived is redundant as its value
        can be determined from "result" - if result is AuthResultRetry, requireAuth is false, otherwise it
        is true.

        No new tests as there is no behaviour change.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyAuthReceived):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):

2013-02-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Redo in text editor should always collapse selection to end.
        https://bugs.webkit.org/show_bug.cgi?id=109907

        Reviewed by Pavel Feldman.

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

2013-02-15  Dan Carney  <dcarney@google.com>

        [v8] persistent handle dispose before last use
        https://bugs.webkit.org/show_bug.cgi?id=109927

        Reviewed by Jochen Eisinger.

        No new tests. No change in functionality.

        * bindings/v8/ScriptWrappable.h:
        (WebCore::ScriptWrappable::weakCallback):

2013-02-15  Keishi Hattori  <keishi@webkit.org>

        PagePopupController.formatMonth should support short month format
        https://bugs.webkit.org/show_bug.cgi?id=109530

        Reviewed by Kent Tamura.

        PagePopupController.formatMonth should support short month format so we
        can use it in the new calendar picker.

        Tested by LocaleMacTest::formatMonth.

        * page/PagePopupController.cpp:
        (WebCore::PagePopupController::formatMonth): Take an extra bool argument to switch to short month format.
        * page/PagePopupController.h:
        (PagePopupController):
        * page/PagePopupController.idl:
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::shortMonthFormat):
        (WebCore):
        * platform/text/LocaleICU.h:
        (LocaleICU):
        * platform/text/LocaleNone.cpp:
        (WebCore::shortMonthFormat):
        (WebCore):
        * platform/text/PlatformLocale.cpp:
        (WebCore::DateTimeStringBuilder::visitField):
        (WebCore::Locale::formatDateTime):
        * platform/text/PlatformLocale.h:
        (Locale):
        * platform/text/mac/LocaleMac.h:
        (LocaleMac):
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::shortMonthFormat):
        (WebCore):
        * platform/text/win/LocaleWin.cpp:
        (WebCore::LocaleWin::shortMonthFormat): Windows doesn't have a short
        month format so we just replace MMMM with MMM.
        (WebCore):
        * platform/text/win/LocaleWin.h:
        (LocaleWin):

2013-02-15  Keishi Hattori  <keishi@webkit.org>

        Add setValue and closePopup methods to PagePopupController
        https://bugs.webkit.org/show_bug.cgi?id=109897

        Reviewed by Kent Tamura.

        The new calendar picker (Bug 109439) needs to set a value without
        closing the popup. We can't do that with the existing
        setValueAndClosePopup.

        No new tests. Existing calendar picker and color suggestion picker tests
        that closing and setting values work properly.

        * Resources/pagepopups/pickerCommon.js:
        (Picker.prototype.submitValue): Stop using setValueAndClosePopup.
        (Picker.prototype.handleCancel): Ditto.
        * page/PagePopupClient.h:
        (PagePopupClient):
        * page/PagePopupController.cpp:
        (WebCore::PagePopupController::setValue): Sets value to element without closing popup.
        (WebCore):
        (WebCore::PagePopupController::closePopup): Just closes popup.
        * page/PagePopupController.h:
        (PagePopupController):
        * page/PagePopupController.idl:

2013-02-15  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] RenderRegion should inherit from RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=74132

        Reviewed by Julien Chaffraix.

        Change the base class for RenderRegion to be RenderBlock instead of RenderReplaced.
        Per spec http://dev.w3.org/csswg/css3-regions/#the-flow-from-property, a region is a non-replaced block container.
        This change is covered by the existing regions tests (in fast/region and fast/repaint).

        The RenderFlowThread object is a self-painting layer (it requires layer and is positioned).
        Because of that, the RenderFlowThread object is responsible for painting its children,
        the collected objects. When the RenderRegion::paintObject is called during paint, it delegates painting
        of content collected inside the flow thread to the associated RenderFlowThread object.
        Since we do not want to paint the flow thread content multiple times (for each paint phase
        in which the RenderRegion::paintObject is called), we allow RenderFlowThread painting only for
        selection and foreground paint phases.

        * rendering/RenderBox.cpp: Clean-up the code from regions specific stuff, now that the regions are render blocks.
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        * rendering/RenderLayerBacking.cpp: A region should always render content from its associated flow thread,
        even when it does not have children of its own.
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        * rendering/RenderMultiColumnSet.cpp: Make changes to match the new inheritance for RenderRegion.
        (WebCore::RenderMultiColumnSet::paint):
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::paintObject):
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::layoutBlock):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::willBeRemovedFromTree):
        (WebCore::RenderRegion::computePreferredLogicalWidths): Use this method instead of min/maxPreferredLogicalWidth.
        (WebCore::RenderRegion::updateLogicalHeight):
        * rendering/RenderRegion.h: For now, assume the region is not allowed to have children.
        When we will implement the processing model for pseudo-elements http://dev.w3.org/csswg/css3-regions/#processing-model,
        we will have to remove this function. By having this function return false i was able to leave some tests unchanged.

2013-02-15  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: implement smart braces functionality
        https://bugs.webkit.org/show_bug.cgi?id=109200

        Reviewed by Pavel Feldman.

        - implement SmartBraceController which will handle character insertions
        and override them if brace character was inserted. Additionally it
        should handle Backspace key and override it if a cursor is located
        inside of a bracket pair.
        - guard smart brace functionality via experiment checkbox.

        New test: inspector/editor/text-editor-smart-braces.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._registerShortcuts):
        (WebInspector.TextEditorMainPanel.prototype._handleKeyPress):
        (WebInspector.TextEditorMainPanel.SmartBraceController):
        (WebInspector.TextEditorMainPanel.SmartBraceController.prototype.registerShortcuts):
        (WebInspector.TextEditorMainPanel.SmartBraceController.prototype.registerCharOverrides):
        (WebInspector.TextEditorMainPanel.SmartBraceController.prototype._handleBackspace):
        (WebInspector.TextEditorMainPanel.SmartBraceController.prototype._handleBracePairInsertion):
        (WebInspector.TextEditorMainPanel.SmartBraceController.prototype._handleClosingBraceOverride):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):

2013-02-15  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions][Mac] fast/regions/full-screen-video-from-region.html hits an assertion in RenderFlowThread::removeRenderBoxRegionInfo
        https://bugs.webkit.org/show_bug.cgi?id=106075

        Reviewed by Tony Chang.

        The crash is caused by two issues.

        The first problem is how a block inside a flow thread determines if the children needs relayout or not.
        When the region chain is invalidated, the information is lost so we need to return true, even for the
        enclosing RenderFlowThread. Because the video renderer is the first child of the flow thread this doesn't
        happen.

        The patch implements this behaviour by inspecting both if the region chain has changed and
        if the block has no range computed yet.

        The second problem is RenderMedia not inheriting from RenderBlock. The logic of child relayout doesn't apply
        to it. In the test case, when the full screen button is pressed, the region changes width to fill the viewport,
        the chain is invalidated and the box info hash map is cleared. When the video is laid out again (after fixing
        the first issue) it has the same size so the controls don't do a layout. They remain without box info inside
        the flow thread, thus causing the assertion.

        The patch forces the controls to relayout if the region chain was invalidated. We can't use the
        logicalWidthChangedInRegions method because it is block specific. This will be fixed in a later patch.

        Tests: No new tests. fast/regions/full-screen-video-from-region.html no longer crashes.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::checkForPaginationLogicalHeightChange):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegions):
        * rendering/RenderFlowThread.h: Renamed pageLogicalHeightChanged to pageLogicalSizeChanged.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):

2013-02-13  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [CoordGfx] Regression from r135212: big layers with transform animations sometime fail to render tiles
        https://bugs.webkit.org/show_bug.cgi?id=109179

        Reviewed by Jocelyn Turcotte.

        Fix adjustForContentsRect logic for AC layers that are higher or wider than the visible rect.

        Force updates of the visible rect while it is animating, and until we have done one last update after
        it stops animating.

        Test: compositing/transitions/transform-on-large-layer.html

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::adjustForContentsRect):
        (WebCore::TiledBackingStore::computeCoverAndKeepRect):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::computePixelAlignment):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2013-02-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142876.
        http://trac.webkit.org/changeset/142876
        https://bugs.webkit.org/show_bug.cgi?id=109920

        Broke relative URL linkification in the computed styles pane
        (Requested by apavlov on #webkit).

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

2013-02-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Simplify hitTestResultAtPoint and nodesFromRect APIs
        https://bugs.webkit.org/show_bug.cgi?id=95720

        Reviewed by Julien Chaffraix.

        The existing API was overloaded and could be simplified by passing all the bool arguments in 
        a HitTestRequest argument. This should also help clarify the call as the enum values explicitely
        state what they do.

        * WebCore.exp.in:
        * WebCore.order:
        * dom/Document.cpp:
        (WebCore::Document::nodesFromRect):
        * dom/Document.h:
        (Document):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::createContextMenu):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureForTextSelectionOrContextMenu):
        (WebCore::EventHandler::bestClickableNodeForTouchPoint):
        (WebCore::EventHandler::bestContextMenuNodeForTouchPoint):
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:
        (WebCore):
        (EventHandler):
        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded):
        * page/Frame.cpp:
        (WebCore::Frame::visiblePositionForPoint):
        (WebCore::Frame::documentAtPoint):
        * page/TouchDisambiguation.cpp:
        (WebCore::findGoodTouchTargets):
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::allowsFrameScrollbars):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):

2013-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make component-based compile-front-end happy
        https://bugs.webkit.org/show_bug.cgi?id=109798

        Reviewed by Vsevolod Vlasov.

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setVariableValue):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/compile-front-end.py:
        * inspector/front-end/AuditResultView.js:
        * inspector/front-end/CPUProfileView.js:
        * inspector/front-end/DataGrid.js:
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.loadTimelineFromURL):

2013-02-14  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement tracking of active stylesheets in the frontend
        https://bugs.webkit.org/show_bug.cgi?id=105828

        Reviewed by Pavel Feldman.

        - This change introduces the CSS.styleSheetAdded() and CSS.styleSheetRemoved() events
        that update the frontend with all active stylesheet changes in the inspected page.
        As such, fetching stylesheet headers from the backend manually is no longer needed,
        and many asynchronous methods have been turned into normal accessors.
        - One notable change to the stylesheet binding process is that when a via-inspector stylesheet
        is created, it is instantly reported through the instrumentation, and the viaInspectorStyleSheet() method
        is [indirectly] called recursively from bindStyleSheet(). Thus, the actual creation and registration
        of the respective InspectorStyleSheet have been moved into bindStyleSheet(),
        which relies upon the m_creatingViaInspectorStyleSheet flag.

        Test: inspector/styles/stylesheet-tracking.html

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets): Instrumented.
        * inspector/Inspector.json: Add events, update the CSS domain description.
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::clearFrontend):
        (WebCore::InspectorCSSAgent::enable): Push all existing stylesheet headers into the frontend.
        (WebCore::InspectorCSSAgent::activeStyleSheetsUpdated): Push added/removed stylesheet into the frontend.
        (WebCore::InspectorCSSAgent::getAllStyleSheets): Slightly refactored to make use of collectAllStyleSheets().
        (WebCore::InspectorCSSAgent::collectAllStyleSheets): Added to collect InspectorStyleSheets rather than headers.
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        (WebCore::InspectorCSSAgent::bindStyleSheet): Binds via-inspector stylesheets, too.
        (WebCore::InspectorCSSAgent::unbindStyleSheet): Now we can unbind stylesheets upon their removal from the document.
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet): Modifies m_creatingViaInspectorStyleSheet when necessary.
        (WebCore::InspectorCSSAgent::detectOrigin): Modified to make use of m_creatingViaInspectorStyleSheet.
        (WebCore::InspectorCSSAgent::buildObjectForRule): Removed extraneous bound InspectorStyleSheet 0-check.
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp: Instrumentation of active stylesheet set updates.
        (WebCore::InspectorInstrumentation::activeStyleSheetsUpdatedImpl):
        * inspector/InspectorInstrumentation.h: Ditto.
        (WebCore::InspectorInstrumentation::activeStyleSheetsUpdated):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.styleSheetHeaders):
        (WebInspector.CSSStyleModel.prototype._styleSheetAdded): Added.
        (WebInspector.CSSStyleModel.prototype._styleSheetRemoved): Added.
        (WebInspector.CSSStyleModel.prototype.viaInspectorResourceForRule):
        (WebInspector.CSSStyleModelResourceBinding.prototype._setHeaderForStyleSheetId):
        (WebInspector.CSSStyleModelResourceBinding.prototype.resourceURLForStyleSheetId):
        (WebInspector.CSSStyleModelResourceBinding.prototype.styleSheetIdForResource):
        (WebInspector.CSSStyleModelResourceBinding.prototype._headerKey): Calculate the (frameID + URL) key for CSSStyleSheetHeader.
        (WebInspector.CSSStyleModelResourceBinding.prototype._createInspectorResource):
        (WebInspector.CSSStyleModelResourceBinding.prototype._inspectorResource):
        (WebInspector.CSSStyleModelResourceBinding.prototype._reset):
        (WebInspector.CSSDispatcher.prototype.styleSheetAdded): Added.
        (WebInspector.CSSDispatcher.prototype.styleSheetRemoved): Added.
        * inspector/front-end/SASSSourceMapping.js: Get rid of async implementations.
        (WebInspector.SASSSourceMapping.prototype._styleSheetChanged):
        * inspector/front-end/StylesSidebarPane.js: Ditto.
        (WebInspector.StylePropertiesSection.prototype._createRuleOriginNode):
        * inspector/front-end/StylesSourceMapping.js: Ditto.
        (WebInspector.StyleContentBinding.prototype._innerStyleSheetChanged):

2013-02-15  Andrei Bucur  <abucur@adobe.com>

        Implement the -webkit-margin-collapse properties correct rendering
        https://bugs.webkit.org/show_bug.cgi?id=108168

        Reviewed by David Hyatt.

        The patch implements the correct behavior for the -webkit-margin-collapse properties:
        - a value of "discard" on a margin will truncate all the margins collapsing with it;
        - a value of "separate" will prevent the margin to collapse;
        - a value of "collapse" is the default collapse behavior.

        The implementation is aware of multiple writing-modes:
        - if the writing mode of a child is parallel with the writing mode of the container and has the same direction,
        the -webkit-margin-collapse properties on the child are left as is;
        - if the writing mode of a child is parallel with the writing mode of the container but has a different direction,
        the -webkit-margin-collapse properties on the child are reversed;
        - if the writing mode of a child is perpendicular on the writing mode of the container,
        the -webkit-margin-collapse properties on the child are ignored;

        I. The "discard" value implementation
        There are two new bits (before and after) added on the RenderBlockRareData structure specifying if the margins
        of the block will be discarded or not. We can't rely only on the value from style() because
        it's possible a block to discard it's margins because it has collapsed with a children that
        specified "discard" for -webkit-margin-collapse. However, the bits are set only if it is
        required.
        Another bit is added on the MarginInfo structure specifying if the margin has to be discarded or not. When
        collapsing at the before side of a block it will hold information if the container block needs to discard
        or not. If the collapsing happens between siblings/with after side of the container it will tell if the previous
        child discards the margin or not. The self collapsing blocks are a special case. If any of its margins
        discards then both its margins discard and all the other margins collapsing with it.
        To ensure an optimal behavior it is asserted margin values can't be set on the MarginInfo object if the
        discard flag is active. If this happens it may indicate someone ignored the possibility of the margin being
        discarded altogether and incorrectly updated the margin values.
        Float clearing also needs to change because it may force margins to stop collapsing. If this happens the discard
        flags and margins needs to be restored to their values before the collapse.

        II. The "separate" value implementation
        The implementation for separate was not changed too much. I've added new accessor methods for the property
        that take writing mode into consideration and I've removed some code that didn't work correctly in layoutBlockChild.
        The problem was the marginInfo structure was cleared if the child was specifying the "separate" value for before.
        This is wrong because you lose the margin information of the previous child/before side.

        Tests: fast/block/margin-collapse/webkit-margin-collapse-container.html
               fast/block/margin-collapse/webkit-margin-collapse-floats.html
               fast/block/margin-collapse/webkit-margin-collapse-siblings-bt.html
               fast/block/margin-collapse/webkit-margin-collapse-siblings.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::marginBeforeEstimateForChild):
        (WebCore::RenderBlock::estimateLogicalTopPosition):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::handleAfterSideOfBlock):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::setMustDiscardMarginBefore):
        (WebCore):
        (WebCore::RenderBlock::setMustDiscardMarginAfter):
        (WebCore::RenderBlock::mustDiscardMarginBefore):
        (WebCore::RenderBlock::mustDiscardMarginAfter):
        (WebCore::RenderBlock::mustDiscardMarginBeforeForChild):
        (WebCore::RenderBlock::mustDiscardMarginAfterForChild):
        (WebCore::RenderBlock::mustSeparateMarginBeforeForChild):
        (WebCore::RenderBlock::mustSeparateMarginAfterForChild):
        * rendering/RenderBlock.h:
        (RenderBlock):
        (WebCore::RenderBlock::initMaxMarginValues):
        (MarginInfo):
        (WebCore::RenderBlock::MarginInfo::setPositiveMargin):
        (WebCore::RenderBlock::MarginInfo::setNegativeMargin):
        (WebCore::RenderBlock::MarginInfo::setPositiveMarginIfLarger):
        (WebCore::RenderBlock::MarginInfo::setNegativeMarginIfLarger):
        (WebCore::RenderBlock::MarginInfo::setMargin):
        (WebCore::RenderBlock::MarginInfo::setCanCollapseMarginAfterWithChildren):
        (WebCore::RenderBlock::MarginInfo::setDiscardMargin):
        (WebCore::RenderBlock::MarginInfo::discardMargin):
        (WebCore::RenderBlock::RenderBlockRareData::RenderBlockRareData):
        (WebCore::RenderBlock::RenderBlockRareData::positiveMarginBeforeDefault):
        (RenderBlockRareData):
        * rendering/style/RenderStyle.h:

2013-02-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: always show memory size in Mb on the native memory graph
        https://bugs.webkit.org/show_bug.cgi?id=109813

        Reviewed by Pavel Feldman.

        Memory size vlue is alway shown in Mb on the native memory graph.

        * inspector/front-end/NativeMemoryGraph.js:
        (WebInspector.NativeMemoryCounterUI.prototype.updateCurrentValue):

2013-02-14  Andrey Adaikin  <aandrey@chromium.org>

        Use GL typedefs in WebGLRenderingContext.idl
        https://bugs.webkit.org/show_bug.cgi?id=109060

        Reviewed by Kenneth Russell.

        Use GL typedefs in WebGLRenderingContext.idl according to the specs.
        Added a FIXME about inconsistency with the current WebGL spec for getAttribLocation.

        Tested manually that generators V8, JS, ObjC, GObject, CPP produce same output.

        * html/canvas/WebGLRenderingContext.idl:

2013-02-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Copy-pasting selected text over itself should be an undoable state.
        https://bugs.webkit.org/show_bug.cgi?id=109830

        Reviewed by Pavel Feldman.

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

2013-02-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142889.
        http://trac.webkit.org/changeset/142889
        https://bugs.webkit.org/show_bug.cgi?id=109891

        It caused an assertion failure in scrollbars/overflow-
        scrollbar-combinations.html (Requested by tkent on #webkit).

        * rendering/RenderBox.cpp:
        (WebCore::borderWidthChanged):
        (WebCore::RenderBox::styleDidChange):

2013-02-14  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Caret positioned at the end of a text line (followed by an empty block) in vertical writing mode disappears when pressing the right/down arrow key.
        https://bugs.webkit.org/show_bug.cgi?id=106452

        Reviewed by Ryosuke Niwa.

        Pressing the down or the right arrow key at the end of a text line in
        vertical writing mode would make the caret dissapear. This occurs only
        when the text line is followed by an empty block.

        When trying to compute the next position for placing the caret (for
        down/right key), we try to ascertain whether the renderer (in this
        case the empty block) is a valid candidate or not. For blockFlow
        elements we check against their height.
        In vertical writing mode though we would fail such a check since we
        should instead be comparing against the renderer's width and not
        it's height. Thus, a valid position for the placement of the caret
        was not found in such a case.

        Test: editing/selection/caret-at-end-of-text-line-followed-by-empty-block-in-vertical-mode.html

        * dom/Position.cpp:
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        Instead of checking against the height(), check against the
        logicalHeight() of the renderer has been added. logicalHeight()
        on blockFlow renderer's returns a value in accordance with
        the writing mode.

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

        Windows build fix after r142957.

        * dom/DOMAllInOne.cpp:

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

        Fix a typo introduced in r142705.

        Without this fix, text-input-controller.html can fail when DeleteButtonController is enabled.
        e.g. "run-webkit-tests platform/mac/editing/deleting/deletionUI-single-instance.html
            platform/mac/editing/input/text-input-controller.html --child-processes=1"

        * editing/Editor.cpp:
        (WebCore::Editor::avoidIntersectionWithDeleteButtonController):

2013-02-14  Hayato Ito  <hayato@chromium.org>

        Factor Event retargeting code.
        https://bugs.webkit.org/show_bug.cgi?id=109156

        Reviewed by Dimitri Glazkov.

        To supoort Touch event retargeting (bug 107800), we have to factor
        event retargeting code so that it can support not only MouseEvent,
        but also other events.

        New class, EventRetargeter, was introduced. From now,
        EventDispatchMediator (and its subclasses) should call, if event
        retargeting is required, an appropriate function provided in
        EventRetargeter rather than calling
        EventDispatcher::adjustRelatedTarget(), which was removed in this
        patch.

        No tests. No change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventDispatchMediator.cpp:
        * dom/EventDispatcher.cpp:
        (WebCore):
        (WebCore::EventDispatcher::ensureEventPath): Changed to return an EventPath, which will be used by EventRetargeter.
        (WebCore::EventDispatcher::dispatchScopedEvent):
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventDispatcher::dispatchEventPostProcess):
        * dom/EventDispatcher.h:
        (WebCore):
        (EventDispatcher):
        * dom/EventRetargeter.cpp: Added.
        (WebCore):
        (WebCore::inTheSameScope):
        (WebCore::determineDispatchBehavior):
        (WebCore::EventRetargeter::calculateEventPath): Factored out from EventDispatcher::ensureEventPath().
        (WebCore::EventRetargeter::adjustForMouseEvent):
        (WebCore::EventRetargeter::adjustForFocusEvent):
        (WebCore::EventRetargeter::adjustForRelatedTarget):
        (WebCore::EventRetargeter::calculateAdjustedNodes): Factored out from EventRelatedTargetAjuster::adjustRelatedTarget().
        (WebCore::EventRetargeter::buildRelatedNodeMap): Factored out from EventRelatedTargetAjuster::adjustRelatedTarget().
        (WebCore::EventRetargeter::findRelatedNode):
        * dom/EventRetargeter.h: Added.
        (WebCore):
        (EventRetargeter):
        (WebCore::EventRetargeter::eventTargetRespectingTargetRules):
        * dom/FocusEvent.cpp:
        (WebCore::FocusEventDispatchMediator::dispatchEvent): Changed to call EventRetargeter::adjustForFocusEvent().
        (WebCore::BlurEventDispatchMediator::dispatchEvent): Ditto.
        (WebCore::FocusInEventDispatchMediator::dispatchEvent): Ditto.
        (WebCore::FocusOutEventDispatchMediator::dispatchEvent): Ditto.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent): Changed to call EventRetargeter::adjustForMouseEvent().

2013-02-14  Simon Fraser  <simon.fraser@apple.com>

        Reverting r142861. Hit testing inside of style recalc is fundamentally wrong

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle):
        (WebCore::areNonIdenticalCursorListsEqual):
        (WebCore::areCursorsEqual):
        (WebCore::RenderObject::styleDidChange):

2013-02-14  Florin Malita  <fmalita@chromium.org>

        [SVG] Cached filter results are not invalidated on repaint rect change
        https://bugs.webkit.org/show_bug.cgi?id=106221

        Reviewed by Dean Jackson.

        Since the cached filter results are not invalidated for different repaint rects, we need
        to render the content of the whole filter region upfront (otherwise elements not visible
        during the initial paint due to scrolling/window size/etc. are never redrawn).

        Tests: svg/filters/filter-hidden-content-expected.svg
               svg/filters/filter-hidden-content.svg

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::drawingRegion):
        (WebCore):
        * rendering/svg/RenderSVGResourceFilter.h:
        (FilterData):
        (RenderSVGResourceFilter):
        Track the filter drawing region in FilterData.

        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::~SVGRenderingContext):
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGRenderingContext.h:
        Update paintInfo.rect to cover the whole drawing region while rendering filter content, and
        restore it when done.

2013-02-14  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Correct the mismatched cursor map
        https://bugs.webkit.org/show_bug.cgi?id=109655

        Reviewed by Laszlo Gombos.

        Correct the mismatched ECORE_X_CURSOR values in the cursor map.

        * platform/efl/EflScreenUtilities.cpp:
        (WebCore::CursorMap::CursorMap):

2013-02-14  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::anyAttribute):
        (WebDOMTestObj::setAnyAttribute):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_any_attribute):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClamp):
        * bindings/scripts/test/V8/V8TestTypedefs.cpp:
        (WebCore::TestTypedefsV8Internal::funcWithClampCallback):

2013-02-14  Christian Biesinger  <cbiesinger@chromium.org>

        Convert media controls from DeprecatedFlexibleBox to FlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=109775

        Reviewed by Ojan Vafai.

        Covered by existing tests in media/.

        * css/mediaControls.css:
        * css/mediaControlsBlackBerry.css:
        * css/mediaControlsChromium.css:
        * css/mediaControlsChromiumAndroid.css:
        * css/mediaControlsEfl.css:
        * css/mediaControlsGtk.css:
        * css/mediaControlsQt.css:
        * css/mediaControlsQuickTime.css:
        Automated search and replace of old flexbox CSS rules to new ones.
        Minor tuning of the chromium rules.

        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay):
        (WebCore::RenderMediaControlTimeDisplay::layout):
        * rendering/RenderMediaControlElements.h:
        Make media controls inherit from RenderFlexibleBox

2013-02-14  Roger Fong  <roger_fong@apple.com>

        Build fix for Windows.

        * Modules/webdatabase/SQLTransactionStateMachine.cpp:
        (WebCore::nameForSQLTransactionState):

2013-02-14  Dean Jackson  <dino@apple.com>

        Inspector doesn't show rules from pluginsStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=109872

        Reviewed by Darin Adler.

        Make sure getWrapperForRuleInSheets collects the rules
        from CSSDefaultStyleSheets::plugInsStyleSheet.

        Making a test for this is difficult because the rules in
        this sheet only apply to snapshotted plugins at the moment,
        which are disabled in DRT, and would require a fairly long
        timeout in the test.

        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets):

2013-02-14  Hayato Ito  <hayato@chromium.org>

        Recover edge names used in MemoryInstrumentation for DocumentRuleSets.
        https://bugs.webkit.org/show_bug.cgi?id=109800

        Reviewed by Hajime Morita.

        This is a following patch for r142573.
        r142563 accidentally removes edge names for MemoryInstrumentation. We should recover edge names.

        No tests. No change in behavior.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::reportMemoryUsage):

2013-02-14  Hajime Morrita  <morrita@google.com>

        [V8] Assertion failure on an exception is thrown
        https://bugs.webkit.org/show_bug.cgi?id=109129

        An assertion in V8AbstractEventListener is wrong. This change turns it into an error check.

        Reviewed by Kentaro Hara.

        Test: fast/events/onerror-no-constructor.html

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):

2013-02-14  Kentaro Hara  <haraken@chromium.org>

        [V8] CodeGeneratorV8.pm can assume that DOMWindow has [CheckSecurity]
        https://bugs.webkit.org/show_bug.cgi?id=109788

        Reviewed by Adam Barth.

        There is code like this:

          if ($extendedAttr{"CheckSecurity"} || $interfaceName eq "DOMWindow")

        This check is redundant. DOMWindow has [CheckSecurity]. We can remove the
        DOMWindow check.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateReplaceableAttrSetter):
        (GenerateFunctionCallback):
        (GenerateNonStandardFunction):
        (GenerateImplementation):

2013-02-14  Joshua Bell  <jsbell@chromium.org>

        [V8] IndexedDB: Remove unused creationContext paramter from idbKeyToV8Value
        https://bugs.webkit.org/show_bug.cgi?id=109870

        Reviewed by Kentaro Hara.

        This parameter was left over from when the function was toV8(IDBKey). Remove it.

        No new tests - just removing dead code.

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::idbKeyToV8Value): Remove unused parameter.
        (WebCore::injectIDBKeyIntoScriptValue): No need for dummy handle.
        (WebCore::idbKeyToScriptValue): No need for dummy handle.

2013-02-14  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [WebGL][Qt] regression:r142786 Qt Build fix for Arm and Windows.
        https://bugs.webkit.org/show_bug.cgi?id=109797

        Reviewed by Csaba Osztrogonác.

        After r142786, we use OpenGLShims to load necessary GL functions
        exposed by ARB_vertex_array_object extension. Qt uses OpenGLShims
        to load functions with GLES too. This patch adds support for loading the
        equivalent functions on GLES exposed by OES_vertex_array_object.
        
        * platform/graphics/OpenGLShims.cpp:
        (WebCore::initializeOpenGLShims):
        * platform/graphics/OpenGLShims.h:

2013-02-14  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13210723> CORS preflight broken with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=109753

        Reviewed by Brady Eidson.

        * loader/DocumentThreadableLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::cancel):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::dataReceived):
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::notifyFinished):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::preflightFailure): Notify InspectorInstrumentation
        immediately. In addition to keeping up eith other changes, this means that an accurate
        error will be passed now, not a cancellation.
        (WebCore::DocumentThreadableLoader::loadRequest):
        Get rid of m_preflightRequestIdentifier. Every loader has an identifier, and tracking
        identifiers twice is wrong.
        Pass identifier explicitly to more internal functions, so that they would not have to
        second-guess callers.

        * loader/ResourceLoader.cpp: (WebCore::ResourceLoader::willSendRequest):
        Create an identifier for all loaders, not just those that we expect to have client
        callbacks about. Both Inspector and NetworkProcess need identifiers everywhere.

        * loader/TextTrackLoader.cpp: (WebCore::TextTrackLoader::deprecatedDidReceiveCachedResource):
        * loader/TextTrackLoader.h:
        * loader/cache/CachedResourceClient.h:
        (WebCore::CachedResourceClient::deprecatedDidReceiveCachedResource):
        * loader/cache/CachedTextTrack.cpp: (WebCore::CachedTextTrack::data):
        Renamed didReceiveData to avoid conflict with the new DocumentThreadableLoader::didReceiveData.
        And we should really get rid of this CachedResourceClient function anyway.

2013-02-14  Kentaro Hara  <haraken@chromium.org>

        Replace 'DOMObject' with 'any'
        https://bugs.webkit.org/show_bug.cgi?id=109793

        Reviewed by Dimitri Glazkov.

        In the Web IDL spec, there is no type named 'DOMObject'.
        It should be 'any'. We should replace all 'DOMObject's in WebKit IDLs with 'any's.

        * Modules/webdatabase/SQLResultSetRowList.idl:
        * bindings/scripts/CodeGeneratorCPP.pm:
        (GetClassName):
        (AddIncludesForType):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForType):
        (GenerateImplementation):
        (JSValueToNative):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GetNativeType):
        (JSValueToNative):
        (GetV8HeaderName):
        * dom/CustomEvent.idl:
        * dom/MessageEvent.idl:
        * dom/PopStateEvent.idl:
        * fileapi/FileReader.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLElement.idl:
        * html/canvas/DataView.idl:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorFrontendHost.idl:
        * inspector/JavaScriptCallFrame.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:

2013-02-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove GenerateEventListenerCallback() from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=109786

        Reviewed by Adam Barth.

        Some code is duplicated between GenerateEventListenerCallback()
        and GenerateFunctionCallback(). By inlining GenerateEventListenerCallback()
        into GenerateFunctionCallback(), we can remove the duplication.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback):

2013-02-14  Ojan Vafai  <ojan@chromium.org>

        Intrinsic and preferred widths on replaced elements are wrong in many cases
        https://bugs.webkit.org/show_bug.cgi?id=109859

        Reviewed by Levi Weintraub.

        Test: fast/replaced/preferred-widths.html

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeIntrinsicLogicalWidths):
        Separate out computing the intrinsic widths. Eventually,
        we should be able to share computePreferredLogicalWidth implementations
        for all replaced elements and form controls since only the intrinsic width
        changes.

        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        -Apply min-width and max-width constraints and then add borderAndPaddingLogicalWidth
        at the end to make sure it's always applied. This matches all our other
        computePreferredLogicalWidths override and makes use match Gecko's/Opera's rendering.
        -Only set the minPreferredLogicalWidth to 0 if the width or max-width is a percent value.
        Doing it for height values and for min-width doesn't make any sense and doesn't
        match other browsers. Doing this for max-width still doesn't match other browsers,
        but it sounds like Gecko at least would like to change that.

        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::hasRelativeIntrinsicLogicalWidth):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::hasRelativeIntrinsicLogicalWidth):
        Add a way to check if the logicalWidth is relative so that we only check
        the width in computePreferredLogicalWidths instead of also checking the height.

        * rendering/svg/RenderSVGRoot.h:

2013-02-14  Stephen Chenney  <schenney@chromium.org>

        Crash when selecting a HarfBuzz text run with SVG fonts included
        https://bugs.webkit.org/show_bug.cgi?id=109833

        Reviewed by Tony Chang.

        There is an assert in SimpleFontData::applyTransforms that should not
        be there, as the code is valid for SVG fonts. If we get past this,
        then the HarfBuzz text run shaping code assumes that font data has a
        SkTypeface member, and SVG fonts do not. So we crash there too.

        For now, we fix the crashes. This still leaves incorrect selection
        rectangles in this situation, on all platforms, tracked in
        https://bugs.webkit.org/show_bug.cgi?id=108133

        Test: svg/css/font-face-crash.html

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::applyTransforms): Remove ASSERT_NOT_REACHED as the code can legally be reached for SVG fonts.
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns): Check for SVG fonts in the text run, and abort if we find them.

2013-02-13 Joe Mason <jmason@rim.com>

        [BlackBerry] Notify platform layer of failing to get authentication credentials
        https://bugs.webkit.org/show_bug.cgi?id=109751

        Reviewed by Yong Li.
        Reviewed internally by Leo Yang
        Internal PR: 181302

        The BlackBerry platform network layer needs to know if a stream failed to get authentication credentials.
        This patch is using newly added stream API to do it.

        No functionality changed no new tests.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyAuthReceived):
        (WebCore::NetworkJob::sendRequestWithCredentials):
        (WebCore::NetworkJob::notifyChallengeResult):
        * platform/network/blackberry/NetworkJob.h:
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::protectionSpaceToPlatformAuth):
        (WebCore):
        (WebCore::setAuthCredentials):
        * platform/network/blackberry/NetworkManager.h:
        (WebCore):

2013-02-14  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [GTK] Fix indentation in GNUmakefile.list.am.
        https://bugs.webkit.org/show_bug.cgi?id=109854

        Reviewed by Martin Robinson.

        This patch fixes indentation in GNUmakefile.list.am.

        * GNUmakefile.list.am:

2013-02-14  Tony Chang  <tony@chromium.org>

        Unreviewed, set svn:eol-style native for .sln, .vcproj, and .vsprops files.
        https://bugs.webkit.org/show_bug.cgi?id=96934

        * WebCore.vcproj/WebCore.sln: Modified property svn:eol-style.
        * WebCore.vcproj/WebCore.submit.sln: Modified property svn:eol-style.

2013-02-14  Abhishek Arya  <inferno@chromium.org>

        Bad cast in RenderBlock::splitBlocks.
        https://bugs.webkit.org/show_bug.cgi?id=108691

        Reviewed by Levi Weintraub.

        Test: fast/multicol/remove-child-split-flow-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): rename gIsInColumnFlowSplit to gColumnFlowSplitEnabled
        and use it to decide when to do the column flow split or not.
        (WebCore::RenderBlock::removeChild): Do not allow column flow split inside removeChild
        since we might be merging anonymous blocks.

2013-02-14  Mark Lam  <mark.lam@apple.com>

        Split SQLTransaction work between the frontend and backend.
        https://bugs.webkit.org/show_bug.cgi?id=104750.

        Reviewed by Sam Weinig.

        This is part of the webdatabase refactoring for webkit2.

        1. Changed how transactions are created.

           - Database::runTransaction() first creates a SQLTransaction frontend
             which encapsulates the 3 script callbacks. It then passes the
             SQLTransaction to the backend database to create the
             SQLTransactionBackend.
           - The SQLTransactionBackend manages all SQLiteTransaction work.

        2. Introduced SQLTransactionState and SQLTransactionStateMachine.

           - Instead of tracking the transaction phases as "steps" in m_nextStep,
             we now use m_nextState which is of enum class SQLTransactionState.
             Unlike m_nextStep which is a pointer to a "step" function,
             m_nextState is a state variable which is used to index into a
             state dispatch table.

           - Both SQLTransaction and SQLTransactionBackend now extends
             SQLTransactionStateMachine, and uses its dispatch mechanism based on
             the SQLTransactionState.

           - Instead of having 1 state machine instances, there are 2: 1 in the
             frontend, and 1 in the backend. The 2 have mirrored states, and
             transfers work to the other state machine when needed.

           - Previously, state functions can be called inline from other states.
             They are now only called from the state machines runStateMachine()
             method. This makes it possible to isolate the state transition
             mechanism going between the sides (frontend and backend) to 2
             functions only: SQLTransaction::sendToBackendState() and
             SQLTransactionBackend::sendToFrontendState().

        3. Consolidated cleanup work (mostly) to a unified cleanup function.

        4. Changed the frontend Database::runTransaction() to use a
           ChangeVersionData* (instead of a ChangeVersionWrapper ref ptr).

           - This is necessary because ChangeVersionWrapper contains functionality
             used in processing a transaction (to be invoked in the backend).
             Instead, what we want is to simply pass the 2 old and new version
             strings to the backend. The new ChangeVersionData simply packages up
             these 2 strings.
           - This makes ChangeVersionData easy to serialize for IPC messaging later.

        5. Moved some transaction functions back to the frontend SQLTransaction
           because they belong there.

        6. Moved some Database functions to its DatabaseBackendAsync backend
           now that the transaction has been split up.

           - This is driven naturally by those functions being used exclusively
             in the backend for transaction work.
           - SQLTransactionClient, SQLTransactionCoordinator, and
             SQLTransactionWrapper are now exclusively backend data structures.
             SQLTransactionClient still has some frontend "pollution" that I'll
             fix later.

        7. Made the few database report functions used only by Chromium conditional
           on PLATFORM(chromium).

           - The report functions gets re-routed to Chromium's DatabaseObserver
             which further routes them elsewhere. It is unclear how Chromium uses
             these routed messages, and I am therefore not able to determine how
             they should work in a frontend/backend world. So, I'm #ifdef'ing
             them out. They still work like in the old way for Chromium.

        8. Added new files to the build / project files.

        9. Updated / added comments about how the transaction and its states work.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/ChangeVersionData.h: Added.
        (ChangeVersionData):
        (WebCore::ChangeVersionData::ChangeVersionData):
        (WebCore::ChangeVersionData::oldVersion):
        (WebCore::ChangeVersionData::newVersion):
        * Modules/webdatabase/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::performPreflight):
        (WebCore::ChangeVersionWrapper::performPostflight):
        (WebCore::ChangeVersionWrapper::handleCommitFailedAfterPostflight):
        * Modules/webdatabase/ChangeVersionWrapper.h:
        (ChangeVersionWrapper):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::close):
        (WebCore::Database::changeVersion):
        (WebCore::Database::transaction):
        (WebCore::Database::readTransaction):
        (WebCore::Database::runTransaction):
        (WebCore::Database::reportStartTransactionResult):
        (WebCore::Database::reportCommitTransactionResult):
        (WebCore::Database::reportExecuteStatementResult):
        * Modules/webdatabase/Database.h:
        (WebCore::Database::databaseContext):
        (Database):
        (WebCore::Database::reportStartTransactionResult):
        (WebCore::Database::reportCommitTransactionResult):
        (WebCore::Database::reportExecuteStatementResult):
        * Modules/webdatabase/DatabaseBackend.cpp:
        * Modules/webdatabase/DatabaseBackend.h:
        (DatabaseBackend):
        (WebCore::DatabaseBackend::reportOpenDatabaseResult):
        (WebCore::DatabaseBackend::reportChangeVersionResult):
        (WebCore::DatabaseBackend::reportStartTransactionResult):
        (WebCore::DatabaseBackend::reportCommitTransactionResult):
        (WebCore::DatabaseBackend::reportExecuteStatementResult):
        (WebCore::DatabaseBackend::reportVacuumDatabaseResult):
        * Modules/webdatabase/DatabaseBackendAsync.cpp:
        (WebCore::DatabaseBackendAsync::DatabaseBackendAsync):
        (WebCore::DatabaseBackendAsync::runTransaction):
        (WebCore::DatabaseBackendAsync::inProgressTransactionCompleted): Moved from frontend.
        (WebCore::DatabaseBackendAsync::scheduleTransaction): Moved from frontend.
        (WebCore::DatabaseBackendAsync::scheduleTransactionStep): Moved from frontend.
        (WebCore::DatabaseBackendAsync::transactionClient): Moved from frontend.
        (WebCore::DatabaseBackendAsync::transactionCoordinator): Moved from frontend.
        * Modules/webdatabase/DatabaseBackendAsync.h:
        (DatabaseBackendAsync):
        * Modules/webdatabase/DatabaseBackendContext.cpp:
        (WebCore::DatabaseBackendContext::frontend):
        * Modules/webdatabase/DatabaseBackendContext.h:
        (DatabaseBackendContext):
        * Modules/webdatabase/DatabaseManager.cpp:
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Modules/webdatabase/DatabaseServer.cpp:
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::doPerformTask):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::create):
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::setBackend):
        (WebCore::SQLTransaction::stateFunctionFor):
        (WebCore::SQLTransaction::requestTransitToState):
        (WebCore::SQLTransaction::nextStateForTransactionError):
            - was handleTransactionError(). There's also a backend version.
        (WebCore::SQLTransaction::deliverTransactionCallback): Moved from backend.
        (WebCore::SQLTransaction::deliverTransactionErrorCallback): Moved from backend.
        (WebCore::SQLTransaction::deliverStatementCallback): Moved from backend.
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback): Moved from backend.
        (WebCore::SQLTransaction::deliverSuccessCallback): Moved from backend.
        (WebCore::SQLTransaction::unreachableState):
        (WebCore::SQLTransaction::sendToBackendState):
        (WebCore::SQLTransaction::performPendingCallback): Moved from backend.
        (WebCore::SQLTransaction::executeSQL): Moved from backend.
        (WebCore::SQLTransaction::checkAndHandleClosedOrInterruptedDatabase):
        (WebCore::SQLTransaction::clearCallbackWrappers):
        * Modules/webdatabase/SQLTransaction.h:
        (SQLTransaction):
        (WebCore::SQLTransaction::database):
        (WebCore::SQLTransaction::hasCallback):
        (WebCore::SQLTransaction::hasSuccessCallback):
        (WebCore::SQLTransaction::hasErrorCallback):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::create):
        (WebCore::SQLTransactionBackend::SQLTransactionBackend):
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::transactionError):
        (WebCore::SQLTransactionBackend::setShouldRetryCurrentStatement):
        (WebCore::SQLTransactionBackend::stateFunctionFor):
        (WebCore::SQLTransactionBackend::enqueueStatement):
        (WebCore::SQLTransactionBackend::checkAndHandleClosedOrInterruptedDatabase):
        (WebCore::SQLTransactionBackend::performNextStep):
        (WebCore::SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown):
        (WebCore::SQLTransactionBackend::acquireLock):
        (WebCore::SQLTransactionBackend::lockAcquired):
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        (WebCore::SQLTransactionBackend::runStatements):
        (WebCore::SQLTransactionBackend::runCurrentStatementAndGetNextState):
            - was runCurrentStatement().
        (WebCore::SQLTransactionBackend::nextStateForCurrentStatementError):
            - was handleCurrentStatementError().
        (WebCore::SQLTransactionBackend::postflightAndCommit):
        (WebCore::SQLTransactionBackend::cleanupAndTerminate):
        (WebCore::SQLTransactionBackend::nextStateForTransactionError):
            - was handleTransactionError(). There's also a frontend version.
        (WebCore::SQLTransactionBackend::cleanupAfterTransactionErrorCallback):
        (WebCore::SQLTransactionBackend::requestTransitToState):
        (WebCore::SQLTransactionBackend::unreachableState):
        (WebCore::SQLTransactionBackend::sendToFrontendState):
        * Modules/webdatabase/SQLTransactionBackend.h:
        (SQLTransactionWrapper):
        (SQLTransactionBackend):
        (WebCore::SQLTransactionBackend::database):
        * Modules/webdatabase/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::getDatabaseIdentifier):
        * Modules/webdatabase/SQLTransactionState.h: Added.
        * Modules/webdatabase/SQLTransactionStateMachine.cpp: Added.
        (WebCore::nameForSQLTransactionState):
            - was debugStepName().
        * Modules/webdatabase/SQLTransactionStateMachine.h: Added.
        (SQLTransactionStateMachine):
        (WebCore::SQLTransactionStateMachine::~SQLTransactionStateMachine):
        (WebCore::::SQLTransactionStateMachine):
        (WebCore::::setStateToRequestedState):
        (WebCore::::runStateMachine):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorDatabaseAgent.cpp:

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

        EME: replace MediaKeySession.addKey() -> update()
        https://bugs.webkit.org/show_bug.cgi?id=109461

        Reviewed by Eric Carlson.

        No new tests; updated media/encrypted-media/encrypted-media-v2-syntax.html test.

        In the latest draft of the Encrypted Media Spec, the addKeys() method has been replaced
        with update().

        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::addKeyTimerFired):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitAddKey):
        * testing/MockCDM.cpp:
        (WebCore::MockCDMSession::update):

2013-02-14  Tony Chang  <tony@chromium.org>

        Unreviewed, set svn:eol-style CRLF for .sln files.

        * WebCore.vcproj/WebCore.sln: Modified property svn:eol-style.
        * WebCore.vcproj/WebCore.submit.sln: Modified property svn:eol-style.

2013-02-14  Eric Carlson  <eric.carlson@apple.com>

        [Mac] adjust caption color user preference calculation
        https://bugs.webkit.org/show_bug.cgi?id=109840

        Reviewed by Dean Jackson.

        No new tests, it isn't possible to test this with DRT.

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::captionsWindowCSS): The color is "important" if either the
            color or opacity are supposed to override.
        (WebCore::CaptionUserPreferencesMac::captionsBackgroundCSS): Ditto.
        (WebCore::CaptionUserPreferencesMac::captionsTextColor): Ditto.

        * WebCore.vcproj/WebCore.sln: Modified property svn:eol-style.
        * WebCore.vcproj/WebCore.submit.sln: Modified property svn:eol-style.

2013-02-14  Cosmin Truta  <ctruta@rim.com>

        Numeric identifiers of events are not guaranteed to be unique
        https://bugs.webkit.org/show_bug.cgi?id=103259

        Reviewed by Alexey Proskuryakov.

        The results of setTimeout, setInterval and navigator.geolocation.watchPosition
        are positive integer values extracted from a simple circular sequential number
        generator, whose uniqueness can be guaranteed for no more than 2^31 calls to
        any of these functions. In order to provide this guarantee beyond this limit,
        we repeatedly ask for the next sequential id until we get one that's not used
        already.

        This solution works instantly under normal circumstances, when there are few
        live timeout ids or geolocation ids at any given moment. Handling millions of
        live ids will require another solution.

        No new tests. Brief tests of uniqueness already exist.
        Moreover, reproducing this particular issue would require 2^31 set/clear
        function calls, which is prohibitively expensive.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::Watchers::add): Rename from Watchers::set; return false if watch id already exists.
        (WebCore::Geolocation::watchPosition): Repeat until the new watch id is unique.
        * Modules/geolocation/Geolocation.h:
        (Watchers): Rename Watchers::set to Watchers::add.
        * Modules/geolocation/Geolocation.idl: Rename the argument of Geolocation::clearWatch to WatchID.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext): Update initialization.
        (WebCore::ScriptExecutionContext::circularSequentialID): Rename from newUniqueID; remove FIXME note.
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext): Rename ScriptExecutionContext::newUniqueID to ScriptExecutionContext::circularSequentialID.
        (WebCore::ScriptExecutionContext::addTimeout): Return false (do not assert) if timeout id already exists.
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer): Repeat until the new timeout id is unique.

2013-02-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142825.
        http://trac.webkit.org/changeset/142825
        https://bugs.webkit.org/show_bug.cgi?id=109856

        Causes some inspector tests to time out (Requested by anttik
        on #webkit).

        * platform/mac/SharedTimerMac.mm:
        (WebCore):
        (WebCore::PowerObserver::restartSharedTimer):
        (WebCore::setSharedTimerFireInterval):
        (WebCore::stopSharedTimer):

2013-02-14  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        Support the ch unit from css3-values
        https://bugs.webkit.org/show_bug.cgi?id=85755

        Reviewed by David Hyatt.

        Original patch by Sumedha Widyadharma <sumedha.widyadharma@basyskom.com>.

        Test: fast/css/css3-ch-unit.html

        * css/CSSCalculationValue.cpp:
        (WebCore::unitCategory):
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::detectNumberToken):
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        (WebCore::CSSPrimitiveValue::customCssText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isFontRelativeLength):
        (WebCore::CSSPrimitiveValue::isLength):
        * platform/graphics/FontMetrics.h:
        (WebCore::FontMetrics::FontMetrics):
        (WebCore::FontMetrics::zeroWidth):
        (WebCore::FontMetrics::setZeroWidth):
        (FontMetrics):
        (WebCore::FontMetrics::hasZeroWidth):
        (WebCore::FontMetrics::setHasZeroWidth):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::platformGlyphInit):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::zeroGlyph):
        (WebCore::SimpleFontData::setZeroGlyph):
        (SimpleFontData):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformInit):

2013-02-14  David Kilzer  <ddkilzer@apple.com>

        [Mac] Clean up WARNING_CFLAGS
        <http://webkit.org/b/109747>
        <rdar://problem/13208373>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Use
        GCC_WARN_64_TO_32_BIT_CONVERSION to enable and disable
        -Wshorten-64-to-32 rather than WARNING_CFLAGS.

2013-02-14  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add addHTTPHeaderField() method to ResourceResponse
        https://bugs.webkit.org/show_bug.cgi?id=109844

        Reviewed by Adam Barth.

        ResourceRequestBase provides both setHTTPHeaderField() and addHTTPHeaderField(). However,
        ResourceResponseBase only provides setHTTPHeaderField(). This is a bit inconsistent. As a
        result, the addHTTPHeaderField() functionality's implementation is duplicated in several
        ports (at least chromium and soup).

        This patch introduces addHTTPHeaderField() to ResourceResponseBase and makes use of it
        in Chromium and Soup backends.

        No new tests, no behavior change.

        * platform/chromium/support/WebURLResponse.cpp:
        (WebKit::WebURLResponse::addHTTPHeaderField): Use ResourceResponseBase::addHTTPHeaderField().
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::updateHeaderParsedState): Move headers' parsed state update code
        from setHTTPHeaderField() to a new updateHeaderParsedState() method to avoid code duplication.
        (WebCore):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::addHTTPHeaderField):
        * platform/network/ResourceResponseBase.h:
        (ResourceResponseBase):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessageHeaders): Use ResourceResponseBase::addHTTPHeaderField().

2013-02-14  Philip Rogers  <pdr@google.com>

        Prevent inconsistent firstChild during document destruction
        https://bugs.webkit.org/show_bug.cgi?id=106530

        Reviewed by Abhishek Arya.

        During document destruction, addChildNodesToDeletionQueue can allow a container
        node to have an invalid first child, causing a crash. This patch updates
        addChildNodesToDeletionQueue to maintain a valid value for firstChild() even
        while updating its children.

        Test: svg/custom/animateMotion-path-change-crash.svg

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::Private::addChildNodesToDeletionQueue):
            To ensure prevoiusSibling() is also valid, this code was slightly refactored
            to call setPreviousSibling(0) on the next node instead of the current node.

2013-02-14  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Add an internal 2D grid representation to RenderGrid
        https://bugs.webkit.org/show_bug.cgi?id=109714

        Reviewed by Ojan Vafai.

        This change introduces a 2D grid representation of the grid areas. Our implementation
        is a straight Vector of Vectors for the grid areas, each grid area able to hold an
        arbitrary number of RenderBox* so they hold a Vector of RenderBoxes. As an optimization,
        each grid area has enough inline storage to hold one grid item which should cover
        most cases.

        In order to keep the code readable, a GridIterator was introduced to hide the new grid.

        Refactoring, covered by existing tests.

        * rendering/RenderGrid.cpp:
        (RenderGrid::GridIterator):
        (WebCore::RenderGrid::GridIterator::GridIterator):
        (WebCore::RenderGrid::GridIterator::nextGridItem):
        Added a mono-directional iterator. In order to be more aligned with the rest of the code,
        this iterator actually walks orthogonally to the |direction| (ie fixing the |direction|'s track).

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computePreferredLogicalWidths):
        (WebCore::RenderGrid::layoutGridItems):
        Updated these 2 functions to place the items on the grid and clear it at the end.

        (WebCore::RenderGrid::computePreferredTrackWidth):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Updated to use the GridIterator to walk over the rows / columns.

        (WebCore::RenderGrid::placeItemsOnGrid):
        Added this function that inserts the grid items into the right grid area.

        * rendering/RenderGrid.h:
        (WebCore::RenderGrid::gridColumnCount):
        (WebCore::RenderGrid::gridRowCount):
        Added these helper functions.

2013-02-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141990.
        http://trac.webkit.org/changeset/141990
        https://bugs.webkit.org/show_bug.cgi?id=109850

        ~5% regression on intl2 page cycler (Requested by kling on
        #webkit).

        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::create):
        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::fontDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        (GlyphPage):
        (WebCore::GlyphPage::copyFrom):
        (WebCore::GlyphPage::clear):
        (WebCore::GlyphPage::clearForFontData):
        (WebCore::GlyphPage::GlyphPage):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):

2013-02-14  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Move PlatformMessagePortChannel to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=109845

        Reviewed by Adam Barth.

        Part of a larger refactoring series; see tracking bug 106829.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * dom/default/chromium: Added.
        * dom/default/chromium/PlatformMessagePortChannelChromium.cpp: Added.
        (WebCore):
        (WebCore::MessagePortChannel::create):
        (WebCore::MessagePortChannel::createChannel):
        (WebCore::MessagePortChannel::MessagePortChannel):
        (WebCore::MessagePortChannel::~MessagePortChannel):
        (WebCore::MessagePortChannel::entangleIfOpen):
        (WebCore::MessagePortChannel::disentangle):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        (WebCore::MessagePortChannel::close):
        (WebCore::MessagePortChannel::isConnectedTo):
        (WebCore::MessagePortChannel::hasPendingActivity):
        (WebCore::MessagePortChannel::locallyEntangledPort):
        (WebCore::PlatformMessagePortChannel::create):
        (WebCore::PlatformMessagePortChannel::PlatformMessagePortChannel):
        (WebCore::PlatformMessagePortChannel::~PlatformMessagePortChannel):
        (WebCore::PlatformMessagePortChannel::createChannel):
        (WebCore::PlatformMessagePortChannel::messageAvailable):
        (WebCore::PlatformMessagePortChannel::entangleIfOpen):
        (WebCore::PlatformMessagePortChannel::disentangle):
        (WebCore::PlatformMessagePortChannel::postMessageToRemote):
        (WebCore::PlatformMessagePortChannel::tryGetMessageFromRemote):
        (WebCore::PlatformMessagePortChannel::close):
        (WebCore::PlatformMessagePortChannel::isConnectedTo):
        (WebCore::PlatformMessagePortChannel::hasPendingActivity):
        (WebCore::PlatformMessagePortChannel::setEntangledChannel):
        (WebCore::PlatformMessagePortChannel::webChannelRelease):
        * dom/default/chromium/PlatformMessagePortChannelChromium.h: Added.
        (WebKit):
        (WebCore):
        (PlatformMessagePortChannel):

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

        Remove Leopard Accessibility support from WebCore (now that no port builds on Leopard)
        https://bugs.webkit.org/show_bug.cgi?id=90250

        Reviewed by Eric Seidel.

        The Leopard era checks for accessibility lists and accessibility tables can be removed now.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore):
        * accessibility/AccessibilityARIAGrid.h:
        (AccessibilityARIAGrid):
        (WebCore::AccessibilityARIAGrid::isTableExposableThroughAccessibility):
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::AccessibilityTable):
        (WebCore::AccessibilityTable::init):
        * accessibility/AccessibilityTable.h:
        (AccessibilityTable):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (createAccessibilityRoleMap):

2013-02-14  Bear Travis  <betravis@adobe.com>

        Make outside-shape the default value for shape-inside
        https://bugs.webkit.org/show_bug.cgi?id=109605

        Reviewed by Levi Weintraub.

        Creating a single reference outside-shape value and setting it as the default
        for shape-inside.

        Existing tests cover the default value, just updating them to use outside-shape.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::initialShapeInside): Define a local static outside-shape
        value.
        (WebCore):
        * rendering/style/RenderStyle.h: Move the initialShapeInside method to the .cpp
        file.

2013-02-14  Min Qin  <qinmin@chromium.org>

        Passing alpha to DeferredImageDecoder once decoding completes
        https://bugs.webkit.org/show_bug.cgi?id=108892

        Reviewed by Stephen White.

        We should pass hasAlpha value back to the DeferredImageDecoder once decoding is completed
        Added unit tests in ImageFrameGeneratorTest.

        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::frameHasAlphaAtIndex):
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::tryToScale):
        (WebCore::ImageFrameGenerator::decode):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::onUnlockPixels):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (WebCore::LazyDecodingPixelRef::hasAlpha):
        (LazyDecodingPixelRef):
        * platform/graphics/chromium/ScaledImageFragment.cpp:
        (WebCore::ScaledImageFragment::ScaledImageFragment):
        * platform/graphics/chromium/ScaledImageFragment.h:
        (WebCore::ScaledImageFragment::create):
        (ScaledImageFragment):
        (WebCore::ScaledImageFragment::hasAlpha):

2013-02-14  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Add a few more histogram calls
        https://bugs.webkit.org/show_bug.cgi?id=109762

        Reviewed by Tony Chang.

        A few places where commits could fail weren't being logged.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::deleteDatabase):
        (WebCore::IDBBackingStore::Transaction::commit):

2013-02-14  Tony Chang  <tony@chromium.org>

        Padding and border changes doesn't trigger relayout of children
        https://bugs.webkit.org/show_bug.cgi?id=109639

        Reviewed by Kent Tamura.

        In RenderBlock::layoutBlock, we only relayout our children if our logical width
        changes. This misses cases where our logical width doesn't change (i.e., padding
        or border changes), but our content width does change.

        This is a more general case of bug 104997.

        Test: fast/block/dynamic-padding-border.html

        * rendering/RenderBox.cpp:
        (WebCore::borderOrPaddingLogicalWidthChanged): Only check if the logical width changed.
        (WebCore::RenderBox::styleDidChange): Drop the border-box condition since this can happen
        even without border-box box sizing.

2013-02-14  Peter Rybin  <prybin@chromium.org>

        Web Inspector: fix closure compilation warnings caused by setVariableValue change
        https://bugs.webkit.org/show_bug.cgi?id=109488

        Reviewed by Pavel Feldman.

        Annotations are fixed as required by closure compiler.
        Parameters in Inspector.json are reordered as required.

        * inspector/InjectedScriptExterns.js:
        (InjectedScriptHost.prototype.setFunctionVariableValue):
        (JavaScriptCallFrame.prototype.setVariableValue):
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setVariableValue):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):

2013-02-14  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: RTCDataChannel triggers a use-after-free
        https://bugs.webkit.org/show_bug.cgi?id=109806

        Reviewed by Adam Barth.

        Making sure RTCPeerConnection::stop() is always called at least once.
        Also making sure that RTCDataChannels state gets set to Closed correctly.

        Hard to test in WebKit but covered by Chromium tests.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::stop):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::~RTCPeerConnection):
        (WebCore::RTCPeerConnection::stop):

2013-02-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] When several consecutive characters are typed each of them is marked as undoable state.
        https://bugs.webkit.org/show_bug.cgi?id=109823

        Reviewed by Pavel Feldman.

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

2013-02-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142820.
        http://trac.webkit.org/changeset/142820
        https://bugs.webkit.org/show_bug.cgi?id=109839

        Causing crashes on chromium canaries (Requested by atwilson_
        on #webkit).

        * dom/Document.cpp:
        (WebCore::Document::updateLayout):
        (WebCore::Document::implicitClose):
        * rendering/RenderQuote.h:
        (RenderQuote):
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:

2013-02-14  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Missing call to g_object_ref while retrieving accessible table cells
        https://bugs.webkit.org/show_bug.cgi?id=106903

        Reviewed by Martin Robinson.

        Add missing extra ref to implementation of atk_table_ref_at().

        Test: accessibility/table-cell-for-column-and-row-crash.html

        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableRefAt): This method transfers full ownership
        over the returned AtkObject, so an extra reference is needed here.

2013-02-14  Mike Fenton  <mifenton@rim.com>

        [BlackBerry] Update keyboard event details to match platform details.
        https://bugs.webkit.org/show_bug.cgi?id=109693

        Reviewed by Yong Li.

        PR 220170.

        Update the keyboard event details to match the
        platform details available.

        Rename helper function to better describe the conversion.

        Reviewed Internally by Nima Ghanavatian and Gen Mak.

        * platform/blackberry/PlatformKeyboardEventBlackBerry.cpp:
        (WebCore::windowsKeyCodeForBlackBerryKeycode):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2013-02-08  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: expose did{Begin,Cancel}Frame() and {will,did}Composite() on WebDebToolsAgent
        https://bugs.webkit.org/show_bug.cgi?id=109192

        Reviewed by Pavel Feldman.

        - remove frame and compositing instrumentation methods from InspectorInstrumentation;
        - expose those methods on InspectorController instead.

        * WebCore.exp.in:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didBeginFrame):
        (WebCore):
        (WebCore::InspectorController::didCancelFrame):
        (WebCore::InspectorController::willComposite):
        (WebCore::InspectorController::didComposite):
        * inspector/InspectorController.h:
        (InspectorController):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * testing/Internals.cpp:
        (WebCore::Internals::emitInspectorDidBeginFrame):
        (WebCore::Internals::emitInspectorDidCancelFrame):

2013-02-14  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Fixed a layout regression in CanvasProfileView.
        https://bugs.webkit.org/show_bug.cgi?id=109835

        Reviewed by Pavel Feldman.

        Changed splitView.css to supported nested SplitView instances.

        * inspector/front-end/splitView.css:
        (.split-view-vertical > .split-view-contents):
        (.split-view-vertical > .split-view-contents-first):
        (.split-view-vertical > .split-view-contents-first.maximized):
        (.split-view-vertical > .split-view-contents-second):
        (.split-view-vertical > .split-view-contents-second.maximized):
        (.split-view-horizontal > .split-view-contents):
        (.split-view-horizontal > .split-view-contents-first):
        (.split-view-horizontal > .split-view-contents-first.maximized):
        (.split-view-horizontal > .split-view-contents-second):
        (.split-view-horizontal > .split-view-contents-second.maximized):
        (.split-view-vertical > .split-view-sidebar.split-view-contents-first:not(.maximized)):
        (.split-view-vertical > .split-view-sidebar.split-view-contents-second:not(.maximized)):
        (.split-view-horizontal > .split-view-sidebar.split-view-contents-first:not(.maximized)):
        (.split-view-horizontal > .split-view-sidebar.split-view-contents-second:not(.maximized)):
        (.split-view-vertical > .split-view-resizer):
        (.split-view-horizontal > .split-view-resizer):

2013-02-14  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Color picker should not be available in Computed Styles pane.
        https://bugs.webkit.org/show_bug.cgi?id=109697

        Reviewed by Alexander Pavlov.

        Changed the parentPane parameter of WebInspector.ComputedStylePropertiesSection to the correct value
        (the ComputedStyleSidebarPane instance).

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

2013-02-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: don't create static local string for program literal in InspectorTimelineAgent
        https://bugs.webkit.org/show_bug.cgi?id=109811

        Reviewed by Pavel Feldman.

        Use const char* constant value instead of creating String from it in thread-unsafe
        static local variable.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):

2013-02-14  Pan Deng  <pan.deng@intel.com>

        [Web Inspector] Fix initiator name issue in reload scenario for Network Panel.
        https://bugs.webkit.org/show_bug.cgi?id=108746.

        Reviewed by Vsevolod Vlasov.

        WebInspector.displayNameForURL() does not work as expected in the reload scenario,
        for example, "http://www.yahoo.com/" was trimed to "/" at one time, but at another,
        the full host name will be displayed.
        This fix return host + "/" in the issue scenario, and keep with get displayName() in ParsedURL.

        No new tests.

        * inspector/front-end/ParsedURL.js:
        (WebInspector.ParsedURL.prototype.get displayName): append "/" in the display host scenario.
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.displayNameForURL): add host in the head if url trimed as a "/".

2013-02-14  Alexei Filippov  <alph@chromium.org>

        Web Inspector: fix to record button remaining red after heap snapshot is taken
        https://bugs.webkit.org/show_bug.cgi?id=109804

        Reviewed by Yury Semikhatsky.

        Revert part of r142243 fix. Namely heap snapshot taking button made
        stateless as it was before.

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.toggleRecordButton):

2013-02-14  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Consistently use SecurityOrigin::toRawString() for serialization across the backend code
        https://bugs.webkit.org/show_bug.cgi?id=109801

        Reviewed by Yury Semikhatsky.

        No new tests, as existing tests cover the change.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::notifyContextCreated):

2013-02-14  Sergio Villar Senin  <svillar@igalia.com>

        Add logging support to IndexedDB for non-Chromium platforms
        https://bugs.webkit.org/show_bug.cgi?id=109809

        Reviewed by Kentaro Hara.

        Enable logging of IndexedDB through the StorageAPI log channel for
        non-Chromium architectures.

        No new tests required, we're just enabling logging for IndexedDB
        using the currently available logging framework.

        * Modules/indexeddb/IDBTracing.h:

2013-02-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Remove uriForFile and fileForURI methods from FileSystemMapping.
        https://bugs.webkit.org/show_bug.cgi?id=109704

        Reviewed by Alexander Pavlov.

        Replaced this methods with one line implementation on the only call site.

        * inspector/front-end/FileSystemMapping.js:
        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate.prototype._filePathForURI):
        (WebInspector.FileSystemProjectDelegate.prototype.setFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype._populate.filesLoaded):
        (WebInspector.FileSystemProjectDelegate.prototype._populate):

2013-02-14  Anton Vayvod  <avayvod@chromium.org>

        [Text Autosizing] Process narrow descendants with the same multiplier for the font size.
        https://bugs.webkit.org/show_bug.cgi?id=109573

        Reviewed by Julien Chaffraix.

        Combine narrow descendants of the same autosizing cluster into a group that is autosized
        with the same multiplier.

        For example, on sites with a sidebar, sometimes the paragraphs next to the sidebar will have
        a large margin individually applied (via a CSS selector), causing them all to individually
        appear narrower than their enclosing blockContainingAllText. Rather than making each of
        these paragraphs into a separate cluster, we want them all to share the same multiplier, as
        if they were a single cluster.

        Test: fast/text-autosizing/narrow-descendants-combined.html

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processClusterInternal):

            Common implementation for processCluster() and processCompositeCluster that accepts the
            text width and whether the cluster should be autosized as parameters instead of
            calculating it inline.

        (WebCore::TextAutosizer::processCluster):

            Calculates the text width for a single cluster and whether it should be autosized, then
            calls processClusterInternal() to apply the multiplier and process the cluster's
            descendants.

        (WebCore::TextAutosizer::processCompositeCluster):

            Calculates the text width for a group of renderers and if the group should be autosized,
            then calls processClusterInternal() repeatedly with the same multiplier to apply it and
            process all the descendants of the group.

        (WebCore::TextAutosizer::clusterShouldBeAutosized):

            Calls the multiple renderers version to avoid code duplication.

        (WebCore::TextAutosizer::compositeClusterShouldBeAutosized):

            The multiple renderers version of clusterShouldBeAutosized.

        * rendering/TextAutosizer.h:

            Updated method declarations.

2013-02-14  Andrey Adaikin  <aandrey@chromium.org>

        Look into possibilities of typedef in webkit idl files
        https://bugs.webkit.org/show_bug.cgi?id=52340

        Reviewed by Kentaro Hara.

        Add typedef support for WebKit IDL parser.
        Drive by: fixed a bug of generating "unrestrictedfloat" without a space.

        Added a new IDL test TestTypedefs.idl. The results were generated without typedefs.

        * bindings/scripts/IDLParser.pm:
        (assertNoExtendedAttributesInTypedef):
        (parseDefinitions):
        (applyTypedefs):
        (applyTypedefsForSignature):
        (parseTypedef):
        (parseUnrestrictedFloatType):
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.cpp: Added.
        (WebDOMTestTypedefs::WebDOMTestTypedefsPrivate::WebDOMTestTypedefsPrivate):
        (WebDOMTestTypedefs::WebDOMTestTypedefsPrivate):
        (WebDOMTestTypedefs::WebDOMTestTypedefs):
        (WebDOMTestTypedefs::operator=):
        (WebDOMTestTypedefs::impl):
        (WebDOMTestTypedefs::~WebDOMTestTypedefs):
        (WebDOMTestTypedefs::unsignedLongLongAttr):
        (WebDOMTestTypedefs::setUnsignedLongLongAttr):
        (WebDOMTestTypedefs::immutableSerializedScriptValue):
        (WebDOMTestTypedefs::setImmutableSerializedScriptValue):
        (WebDOMTestTypedefs::func):
        (WebDOMTestTypedefs::multiTransferList):
        (WebDOMTestTypedefs::setShadow):
        (WebDOMTestTypedefs::nullableArrayArg):
        (WebDOMTestTypedefs::immutablePointFunction):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.h: Added.
        (WebCore):
        (WebDOMTestTypedefs):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp: Added.
        (_WebKitDOMTestTypedefsPrivate):
        (WebKit):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestTypedefs):
        (webkit_dom_test_typedefs_finalize):
        (webkit_dom_test_typedefs_set_property):
        (webkit_dom_test_typedefs_get_property):
        (webkit_dom_test_typedefs_constructor):
        (webkit_dom_test_typedefs_class_init):
        (webkit_dom_test_typedefs_init):
        (webkit_dom_test_typedefs_func):
        (webkit_dom_test_typedefs_multi_transfer_list):
        (webkit_dom_test_typedefs_set_shadow):
        (webkit_dom_test_typedefs_nullable_array_arg):
        (webkit_dom_test_typedefs_immutable_point_function):
        (webkit_dom_test_typedefs_string_array_function):
        (webkit_dom_test_typedefs_get_unsigned_long_long_attr):
        (webkit_dom_test_typedefs_set_unsigned_long_long_attr):
        (webkit_dom_test_typedefs_get_immutable_serialized_script_value):
        (webkit_dom_test_typedefs_set_immutable_serialized_script_value):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h: Added.
        (_WebKitDOMTestTypedefs):
        (_WebKitDOMTestTypedefsClass):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefsPrivate.h: Added.
        (WebKit):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Added.
        (WebCore):
        (WebCore::JSTestTypedefsConstructor::constructJSTestTypedefs):
        (WebCore::JSTestTypedefsConstructor::JSTestTypedefsConstructor):
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        (WebCore::JSTestTypedefsConstructor::getOwnPropertySlot):
        (WebCore::JSTestTypedefsConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestTypedefsConstructor::getConstructData):
        (WebCore::JSTestTypedefsPrototype::self):
        (WebCore::JSTestTypedefsPrototype::getOwnPropertySlot):
        (WebCore::JSTestTypedefsPrototype::getOwnPropertyDescriptor):
        (WebCore::JSTestTypedefs::JSTestTypedefs):
        (WebCore::JSTestTypedefs::finishCreation):
        (WebCore::JSTestTypedefs::createPrototype):
        (WebCore::JSTestTypedefs::destroy):
        (WebCore::JSTestTypedefs::~JSTestTypedefs):
        (WebCore::JSTestTypedefs::getOwnPropertySlot):
        (WebCore::JSTestTypedefs::getOwnPropertyDescriptor):
        (WebCore::jsTestTypedefsUnsignedLongLongAttr):
        (WebCore::jsTestTypedefsImmutableSerializedScriptValue):
        (WebCore::jsTestTypedefsConstructorTestSubObj):
        (WebCore::jsTestTypedefsConstructor):
        (WebCore::JSTestTypedefs::put):
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::JSTestTypedefs::getConstructor):
        (WebCore::jsTestTypedefsPrototypeFunctionFunc):
        (WebCore::jsTestTypedefsPrototypeFunctionMultiTransferList):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadow):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableArrayArg):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClamp):
        (WebCore::jsTestTypedefsPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction):
        (WebCore::isObservable):
        (WebCore::JSTestTypedefsOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestTypedefsOwner::finalize):
        (WebCore::toJS):
        (WebCore::toTestTypedefs):
        * bindings/scripts/test/JS/JSTestTypedefs.h: Added.
        (WebCore):
        (JSTestTypedefs):
        (WebCore::JSTestTypedefs::create):
        (WebCore::JSTestTypedefs::createStructure):
        (WebCore::JSTestTypedefs::impl):
        (WebCore::JSTestTypedefs::releaseImpl):
        (WebCore::JSTestTypedefs::releaseImplIfNotNull):
        (JSTestTypedefsOwner):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (JSTestTypedefsPrototype):
        (WebCore::JSTestTypedefsPrototype::create):
        (WebCore::JSTestTypedefsPrototype::createStructure):
        (WebCore::JSTestTypedefsPrototype::JSTestTypedefsPrototype):
        (JSTestTypedefsConstructor):
        (WebCore::JSTestTypedefsConstructor::create):
        (WebCore::JSTestTypedefsConstructor::createStructure):
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h: Added.
        * bindings/scripts/test/ObjC/DOMTestTypedefs.mm: Added.
        (-[DOMTestTypedefs dealloc]):
        (-[DOMTestTypedefs finalize]):
        (-[DOMTestTypedefs unsignedLongLongAttr]):
        (-[DOMTestTypedefs setUnsignedLongLongAttr:]):
        (-[DOMTestTypedefs immutableSerializedScriptValue]):
        (-[DOMTestTypedefs setImmutableSerializedScriptValue:]):
        (-[DOMTestTypedefs multiTransferList:tx:second:txx:]):
        (-[DOMTestTypedefs setShadow:height:blur:color:alpha:]):
        (-[DOMTestTypedefs immutablePointFunction]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestTypedefsInternal.h: Added.
        (WebCore):
        * bindings/scripts/test/TestTypedefs.idl: Added.
        * bindings/scripts/test/V8/V8TestTypedefs.cpp: Added.
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (TestTypedefsV8Internal):
        (WebCore::TestTypedefsV8Internal::V8_USE):
        (WebCore::TestTypedefsV8Internal::unsignedLongLongAttrAttrGetter):
        (WebCore::TestTypedefsV8Internal::unsignedLongLongAttrAttrSetter):
        (WebCore::TestTypedefsV8Internal::immutableSerializedScriptValueAttrGetter):
        (WebCore::TestTypedefsV8Internal::immutableSerializedScriptValueAttrSetter):
        (WebCore::TestTypedefsV8Internal::TestTypedefsConstructorGetter):
        (WebCore::TestTypedefsV8Internal::TestTypedefsReplaceableAttrSetter):
        (WebCore::TestTypedefsV8Internal::funcCallback):
        (WebCore::TestTypedefsV8Internal::multiTransferListCallback):
        (WebCore::TestTypedefsV8Internal::setShadowCallback):
        (WebCore::TestTypedefsV8Internal::methodWithSequenceArgCallback):
        (WebCore::TestTypedefsV8Internal::nullableArrayArgCallback):
        (WebCore::TestTypedefsV8Internal::funcWithClampCallback):
        (WebCore::TestTypedefsV8Internal::immutablePointFunctionCallback):
        (WebCore::TestTypedefsV8Internal::stringArrayFunctionCallback):
        (WebCore::V8TestTypedefs::constructorCallback):
        (WebCore::ConfigureV8TestTypedefsTemplate):
        (WebCore::V8TestTypedefs::GetRawTemplate):
        (WebCore::V8TestTypedefs::GetTemplate):
        (WebCore::V8TestTypedefs::HasInstance):
        (WebCore::V8TestTypedefs::createWrapper):
        (WebCore::V8TestTypedefs::derefObject):
        * bindings/scripts/test/V8/V8TestTypedefs.h: Added.
        (WebCore):
        (V8TestTypedefs):
        (WebCore::V8TestTypedefs::toNative):
        (WebCore::V8TestTypedefs::installPerContextProperties):
        (WebCore::V8TestTypedefs::installPerContextPrototypeProperties):
        (WebCore::wrap):
        (WebCore::toV8):
        (WebCore::toV8Fast):

2013-02-13  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename XXXAccessorGetter() to XXXAttrGetterCustom(),
        and XXXAccessorSetter() to XXXAttrSetterCustom()
        https://bugs.webkit.org/show_bug.cgi?id=109679

        Reviewed by Adam Barth.

        For naming consistency and clarification.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateHeaderCustomCall):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrGetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrSetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::customAttrAttrGetter):
        (WebCore::TestObjV8Internal::customAttrAttrSetter):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/v8/custom/V8AudioBufferSourceNodeCustom.cpp:
        (WebCore::V8AudioBufferSourceNode::bufferAttrSetterCustom):
        * bindings/v8/custom/V8BiquadFilterNodeCustom.cpp:
        (WebCore::V8BiquadFilterNode::typeAttrSetterCustom):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::V8CanvasRenderingContext2D::strokeStyleAttrGetterCustom):
        (WebCore::V8CanvasRenderingContext2D::strokeStyleAttrSetterCustom):
        (WebCore::V8CanvasRenderingContext2D::fillStyleAttrGetterCustom):
        (WebCore::V8CanvasRenderingContext2D::fillStyleAttrSetterCustom):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::typesAttrGetterCustom):
        * bindings/v8/custom/V8CoordinatesCustom.cpp:
        (WebCore::V8Coordinates::altitudeAttrGetterCustom):
        (WebCore::V8Coordinates::altitudeAccuracyAttrGetterCustom):
        (WebCore::V8Coordinates::headingAttrGetterCustom):
        (WebCore::V8Coordinates::speedAttrGetterCustom):
        * bindings/v8/custom/V8CustomEventCustom.cpp:
        (WebCore::V8CustomEvent::detailAttrGetterCustom):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::eventAttrGetterCustom):
        (WebCore::V8DOMWindow::eventAttrSetterCustom):
        (WebCore::V8DOMWindow::locationAttrSetterCustom):
        (WebCore::V8DOMWindow::openerAttrSetterCustom):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::accelerationAttrGetterCustom):
        (WebCore::V8DeviceMotionEvent::accelerationIncludingGravityAttrGetterCustom):
        (WebCore::V8DeviceMotionEvent::rotationRateAttrGetterCustom):
        (WebCore::V8DeviceMotionEvent::intervalAttrGetterCustom):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::alphaAttrGetterCustom):
        (WebCore::V8DeviceOrientationEvent::betaAttrGetterCustom):
        (WebCore::V8DeviceOrientationEvent::gammaAttrGetterCustom):
        (WebCore::V8DeviceOrientationEvent::absoluteAttrGetterCustom):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::V8Document::locationAttrGetterCustom):
        (WebCore::V8Document::locationAttrSetterCustom):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::V8Event::dataTransferAttrGetterCustom):
        (WebCore::V8Event::clipboardDataAttrGetterCustom):
        * bindings/v8/custom/V8FileReaderCustom.cpp:
        (WebCore::V8FileReader::resultAttrGetterCustom):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::allAttrSetterCustom):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::V8HTMLElement::itemValueAttrGetterCustom):
        (WebCore::V8HTMLElement::itemValueAttrSetterCustom):
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::V8HTMLFrameElement::locationAttrSetterCustom):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::V8HTMLInputElement::selectionStartAttrGetterCustom):
        (WebCore::V8HTMLInputElement::selectionStartAttrSetterCustom):
        (WebCore::V8HTMLInputElement::selectionEndAttrGetterCustom):
        (WebCore::V8HTMLInputElement::selectionEndAttrSetterCustom):
        (WebCore::V8HTMLInputElement::selectionDirectionAttrGetterCustom):
        (WebCore::V8HTMLInputElement::selectionDirectionAttrSetterCustom):
        * bindings/v8/custom/V8HTMLLinkElementCustom.cpp:
        (WebCore::V8HTMLLinkElement::sizesAttrGetterCustom):
        (WebCore::V8HTMLLinkElement::sizesAttrSetterCustom):
        * bindings/v8/custom/V8HTMLMediaElementCustom.cpp:
        (WebCore::V8HTMLMediaElement::controllerAttrSetterCustom):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::lengthAttrSetterCustom):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::stateAttrGetterCustom):
        * bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp:
        (WebCore::V8JavaScriptCallFrame::scopeChainAttrGetterCustom):
        (WebCore::V8JavaScriptCallFrame::thisObjectAttrGetterCustom):
        (WebCore::V8JavaScriptCallFrame::typeAttrGetterCustom):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::hashAttrSetterCustom):
        (WebCore::V8Location::hostAttrSetterCustom):
        (WebCore::V8Location::hostnameAttrSetterCustom):
        (WebCore::V8Location::hrefAttrSetterCustom):
        (WebCore::V8Location::pathnameAttrSetterCustom):
        (WebCore::V8Location::portAttrSetterCustom):
        (WebCore::V8Location::protocolAttrSetterCustom):
        (WebCore::V8Location::searchAttrSetterCustom):
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAttrGetterCustom):
        (WebCore::V8MessageEvent::portsAttrGetterCustom):
        * bindings/v8/custom/V8OscillatorNodeCustom.cpp:
        (WebCore::V8OscillatorNode::typeAttrSetterCustom):
        * bindings/v8/custom/V8PannerNodeCustom.cpp:
        (WebCore::V8PannerNode::panningModelAttrSetterCustom):
        (WebCore::V8PannerNode::distanceModelAttrSetterCustom):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::stateAttrGetterCustom):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::valueAttrGetterCustom):
        (WebCore::V8SVGLength::valueAttrSetterCustom):
        * bindings/v8/custom/V8TrackEventCustom.cpp:
        (WebCore::V8TrackEvent::trackAttrGetterCustom):
        * bindings/v8/custom/V8WebKitAnimationCustom.cpp:
        (WebCore::V8WebKitAnimation::iterationCountAttrGetterCustom):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseTextAttrGetterCustom):
        (WebCore::V8XMLHttpRequest::responseAttrGetterCustom):

2013-02-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: extract DOM counters graph implementation into its own class
        https://bugs.webkit.org/show_bug.cgi?id=109796

        Reviewed by Alexander Pavlov.

        Extracted DOM counters graph implementation into DOMCountersGraph.js leaving
        in MemoryStatistics.js only common parts shared with NativeMemoryGraph.js
        Added some closure annotations and converted object literals into classes
        with named constructors.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/DOMCountersGraph.js: Added.
        (WebInspector.DOMCountersGraph):
        (WebInspector.DOMCounterUI):
        (WebInspector.DOMCountersGraph.Counter):
        (WebInspector.DOMCounterUI.prototype.setRange):
        (WebInspector.DOMCounterUI.prototype.updateCurrentValue):
        (WebInspector.DOMCounterUI.prototype.clearCurrentValueAndMarker):
        (WebInspector.DOMCounterUI.prototype.saveImageUnderMarker):
        (WebInspector.DOMCounterUI.prototype.restoreImageUnderMarker):
        (WebInspector.DOMCounterUI.prototype.discardImageUnderMarker):
        (WebInspector.DOMCountersGraph.prototype._createCurrentValuesBar):
        (WebInspector.DOMCountersGraph.prototype._createCounterUIList):
        (WebInspector.DOMCountersGraph.prototype._createCounterUIList.getNodeCount):
        (WebInspector.DOMCountersGraph.prototype._createCounterUIList.getListenerCount):
        (WebInspector.DOMCountersGraph.prototype._canvasHeight):
        (WebInspector.DOMCountersGraph.prototype._onRecordAdded):
        (WebInspector.DOMCountersGraph.prototype._draw):
        (WebInspector.DOMCountersGraph.prototype._restoreImageUnderMarker):
        (WebInspector.DOMCountersGraph.prototype._saveImageUnderMarker):
        (WebInspector.DOMCountersGraph.prototype._drawMarker):
        (WebInspector.DOMCountersGraph.prototype._drawGraph):
        (WebInspector.DOMCountersGraph.prototype._discardImageUnderMarker):
        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics):
        (WebInspector.MemoryStatistics.Counter):
        (WebInspector.MemoryStatistics.prototype._createCurrentValuesBar):
        (WebInspector.MemoryStatistics.prototype._createCounterUIList):
        (WebInspector.MemoryStatistics.prototype.setTopPosition):
        (WebInspector.MemoryStatistics.prototype._canvasHeight):
        (WebInspector.MemoryStatistics.prototype._onRecordAdded):
        (WebInspector.MemoryStatistics.prototype._draw):
        (WebInspector.MemoryStatistics.prototype._onClick):
        (WebInspector.MemoryStatistics.prototype._onMouseOut):
        (WebInspector.MemoryStatistics.prototype._onMouseOver):
        (WebInspector.MemoryStatistics.prototype._onMouseMove):
        (WebInspector.MemoryStatistics.prototype._restoreImageUnderMarker):
        (WebInspector.MemoryStatistics.prototype._drawMarker):
        (WebInspector.MemoryStatistics.prototype._discardImageUnderMarker):
        * inspector/front-end/NativeMemoryGraph.js:
        (WebInspector.NativeMemoryGraph.Counter):
        (WebInspector.NativeMemoryGraph.prototype._onRecordAdded.addStatistics):
        (WebInspector.NativeMemoryGraph.prototype._onRecordAdded):
        (WebInspector.NativeMemoryGraph.prototype._draw):
        * inspector/front-end/TimelinePanel.js:
        * inspector/front-end/WebKit.qrc:

2013-02-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: Report child nodes as direct members of a container node to make them look like a tree in the snapshot.
        https://bugs.webkit.org/show_bug.cgi?id=109703

        Also we need to traverse the tree from the top root element down to the leaves.

        Reviewed by Yury Semikhatsky.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::reportMemoryUsage):
        * dom/Node.cpp:
        (WebCore::Node::reportMemoryUsage):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore):

2013-02-13  Hayato Ito  <hayato@chromium.org>

        [Shadow DOM] Implements a '::distributed()' pseudo element.
        https://bugs.webkit.org/show_bug.cgi?id=82169

        Reviewed by Dimitri Glazkov.

        Implements a '::distributed()' pseudo element.
        See the Shadow DOM specification and the filed bug for the detail.

        - http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#selecting-nodes-distributed-to-insertion-points
        - https://www.w3.org/Bugs/Public/show_bug.cgi?id=19684

        For example, suppose we are given the following DOM tree and shadow tree:

        - <A>
          - <B>
            - <C>

        [A's ShadowRoot]
          <D>
          - <style>
              E content::distributed(B C) { color: green; }
          - <E>
            - <content>  (Node B is distributed to this insertion point.)

        In this case, the style rule defined in the shadow tree matches node 'C'.

        A '::distributed()' pseudo element can not be a pseudo class since
        an intersection between matched_elements(some_selector) and
        matched_elements(some_selector::distributed(...)) is always an
        empty set. A '::distributed()' pseudo element is the first-ever
        *functional* pseudo element which takes a parameter, which can be
        a selector.

        This rule crosses the shadow boundary from a shadow tree to the
        tree of its shadow host. That means a rule which includes
        '::distributed()' pseudo element is defined in shadow tree, but
        the node which is matched in the rule, the subject of the
        selector, is outside of the shadow tree. Therefore, we cannot
        predict where the subject of the selector will be beforehand.
        Current CSS implementation assumes the subject of the selector
        must exist in the current scope.

        To overcome this issue, DocumentRuleSets now has a instance of
        ShadowDistributedRules class.  A style rule will be stored in this
        instance if the rule includes a '::distributed()' pseudo element.
        This class also keeps track of each RuleSet by mapping it with a
        scope where the rule was originally defined. In the example, the
        scope is A's ShadowRoot.  The scope is used to check whether the
        left-most matched element (in the example, it's a node 'E') exists
        in the scope.

        Internally, a '::distributed' pseudo element is represented by a
        newly introduced 'ShadowDistributed' relation.  That makes an
        implementation of SelectorChecker::checkSelector() much simpler.
        A transformation from a distributed pseudo element to a
        ShadowDistributed is done in parsing stage of CSS.

        Since '::distributed()' is an experimental feature, it's actually
        prefixed with '-webkit-' and guarded by SHADOW_DOM flag.

        Tests: fast/dom/shadow/distributed-pseudo-element-for-shadow-element.html
               fast/dom/shadow/distributed-pseudo-element-match-all.html
               fast/dom/shadow/distributed-pseudo-element-match-descendant.html
               fast/dom/shadow/distributed-pseudo-element-nested.html
               fast/dom/shadow/distributed-pseudo-element-no-match.html
               fast/dom/shadow/distributed-pseudo-element-reprojection.html
               fast/dom/shadow/distributed-pseudo-element-scoped.html
               fast/dom/shadow/distributed-pseudo-element-support-selector.html
               fast/dom/shadow/distributed-pseudo-element-used-in-selector-list.html
               fast/dom/shadow/distributed-pseudo-element-with-any.html
               fast/dom/shadow/distributed-pseudo-element.html

        * css/CSSGrammar.y.in:
        CSS Grammar was updated to support '::distrbuted(selector)'.
        This pseudo element is the first pseudo element which can take a selector as a parameter.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectDashToken):
        (WebCore::CSSParser::rewriteSpecifiersWithNamespaceIfNeeded):
        (WebCore::CSSParser::rewriteSpecifiersWithElementName):
        Here we are converting a '::distributed' pseudo element into a
        ShadowDistributed relation internally.  To support the conversion,
        these rewriteSpecifiersXXX functions (formally called
        updateSpecifiersXXX) now return the specifiers which may be
        converted.
        (WebCore::CSSParser::rewriteSpecifiers):
        * css/CSSParser.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::CSSParserSelector):
        * css/CSSParserValues.h:
        (CSSParserSelector):
        (WebCore::CSSParserSelector::functionArgumentSelector):
        To hold an intermediate selector which appears at the position of an argument in
        functional pseudo element when parsing CSS.
        (WebCore::CSSParserSelector::setFunctionArgumentSelector):
        (WebCore::CSSParserSelector::isDistributedPseudoElement):
        * css/CSSSelector.cpp:
        Add new pseudo element, PseudoDistributed, and its internal representation, ShadowDistributed relation.
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (CSSSelector):
        (WebCore):
        (WebCore::CSSSelector::isDistributedPseudoElement):
        (WebCore::CSSSelector::isShadowDistributed):
        * css/CSSSelectorList.cpp:
        (WebCore):
        (SelectorHasShadowDistributed):
        (WebCore::SelectorHasShadowDistributed::operator()):
        (WebCore::CSSSelectorList::hasShadowDistributedAt):
        * css/CSSSelectorList.h:
        (CSSSelectorList):
        * css/DocumentRuleSets.cpp:
        (WebCore):
        (WebCore::ShadowDistributedRules::addRule):
        Every CSS rule which includes '::distributed(...)' should be managed by calling this function.
        (WebCore::ShadowDistributedRules::collectMatchRequests):
        (WebCore::DocumentRuleSets::resetAuthorStyle):
        * css/DocumentRuleSets.h:
        (WebCore):
        (ShadowDistributedRules):
        (WebCore::ShadowDistributedRules::clear):
        (DocumentRuleSets):
        (WebCore::DocumentRuleSets::shadowDistributedRules)
        DocumentRuleSets owns an instance of ShadowDistributedRules.
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
        Updated to check whether the rule contains '::distributed()' or not.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match):
        Support ShadowDistributed relation. Check all possible insertion points where a node is distributed.
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        Adds enum of BehaviorAtBoundary. '::distributed()' is the only
        rule which uses 'CrossedBoundary' since it is the only rule which
        crosses shadow boundaries.
        (SelectorCheckingContext):
        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::collectIdentifierHashes):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::ruleMatches):
        * css/StyleResolver.h:
        (MatchRequest):
        (WebCore::MatchRequest::MatchRequest): Add behaviorAtBoundary field.
        (WebCore):
        (StyleResolver):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::collectInsertionPointsWhereNodeIsDistributed):
        (WebCore):
        * html/shadow/InsertionPoint.h:
        (WebCore):

2013-02-13  Kentaro Hara  <haraken@chromium.org>

        [V8] Generate wrapper methods for custom methods
        https://bugs.webkit.org/show_bug.cgi?id=109678

        Reviewed by Adam Barth.

        Currently V8 directly calls back custom methods written
        in custom binding files. This makes it impossible for code
        generators to hook custom methods (e.g. Code generators cannot
        insert a code for FeatureObservation into custom methods).
        To solve the problem, we should generate wrapper methods for
        custom methods.

        No tests. No change in behavior.

        * page/DOMWindow.idl: Removed overloaded methods. The fact that methods in an IDL
        file are overloaded but they are not overloaded in custom bindings confuses code
        generators. (For some reason, this problem hasn't appeared before this change.)
        * xml/XMLHttpRequest.idl: Ditto.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateEventListenerCallback):
        (GenerateFunctionCallback):
        (GenerateNonStandardFunction):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalMethod3Callback):
        (TestInterfaceV8Internal):
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::customMethodCallback):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::customMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::classMethod2Callback):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::clearDataCallbackCustom):
        (WebCore::V8Clipboard::setDragImageCallbackCustom):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallbackCustom):
        (WebCore::V8Console::assertCallbackCustom):
        (WebCore::V8Console::profileCallbackCustom):
        (WebCore::V8Console::profileEndCallbackCustom):
        * bindings/v8/custom/V8CryptoCustom.cpp:
        (WebCore::V8Crypto::getRandomValuesCallbackCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::appendCallbackCustom):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallbackCustom):
        (WebCore::V8DOMWindow::removeEventListenerCallbackCustom):
        (WebCore::V8DOMWindow::postMessageCallbackCustom):
        (WebCore::V8DOMWindow::toStringCallbackCustom):
        (WebCore::V8DOMWindow::releaseEventsCallbackCustom):
        (WebCore::V8DOMWindow::captureEventsCallbackCustom):
        (WebCore::V8DOMWindow::showModalDialogCallbackCustom):
        (WebCore::V8DOMWindow::openCallbackCustom):
        (WebCore::V8DOMWindow::setTimeoutCallbackCustom):
        (WebCore::V8DOMWindow::setIntervalCallbackCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::getInt8CallbackCustom):
        (WebCore::V8DataView::getUint8CallbackCustom):
        (WebCore::V8DataView::setInt8CallbackCustom):
        (WebCore::V8DataView::setUint8CallbackCustom):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::V8DedicatedWorkerContext::postMessageCallbackCustom):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallbackCustom):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventCallbackCustom):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallbackCustom):
        (WebCore::V8Document::createTouchListCallbackCustom):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::V8Geolocation::getCurrentPositionCallbackCustom):
        (WebCore::V8Geolocation::watchPositionCallbackCustom):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::V8HTMLAllCollection::itemCallbackCustom):
        (WebCore::V8HTMLAllCollection::namedItemCallbackCustom):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallbackCustom):
        (WebCore::V8HTMLCanvasElement::toDataURLCallbackCustom):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::writeCallbackCustom):
        (WebCore::V8HTMLDocument::writelnCallbackCustom):
        (WebCore::V8HTMLDocument::openCallbackCustom):
        * bindings/v8/custom/V8HTMLFormControlsCollectionCustom.cpp:
        (WebCore::V8HTMLFormControlsCollection::namedItemCallbackCustom):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallbackCustom):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::V8HTMLInputElement::setSelectionRangeCallbackCustom):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::namedItemCallbackCustom):
        (WebCore::V8HTMLOptionsCollection::removeCallbackCustom):
        (WebCore::V8HTMLOptionsCollection::addCallbackCustom):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::V8HTMLSelectElement::removeCallbackCustom):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallbackCustom):
        (WebCore::V8History::replaceStateCallbackCustom):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectedObjectCallbackCustom):
        (WebCore::V8InjectedScriptHost::internalConstructorNameCallbackCustom):
        (WebCore::V8InjectedScriptHost::isHTMLAllCollectionCallbackCustom):
        (WebCore::V8InjectedScriptHost::typeCallbackCustom):
        (WebCore::V8InjectedScriptHost::functionDetailsCallbackCustom):
        (WebCore::V8InjectedScriptHost::getInternalPropertiesCallbackCustom):
        (WebCore::V8InjectedScriptHost::getEventListenersCallbackCustom):
        (WebCore::V8InjectedScriptHost::inspectCallbackCustom):
        (WebCore::V8InjectedScriptHost::databaseIdCallbackCustom):
        (WebCore::V8InjectedScriptHost::storageIdCallbackCustom):
        (WebCore::V8InjectedScriptHost::evaluateCallbackCustom):
        (WebCore::V8InjectedScriptHost::setFunctionVariableValueCallbackCustom):
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::platformCallbackCustom):
        (WebCore::V8InspectorFrontendHost::portCallbackCustom):
        (WebCore::V8InspectorFrontendHost::showContextMenuCallbackCustom):
        (WebCore::V8InspectorFrontendHost::recordActionTakenCallbackCustom):
        (WebCore::V8InspectorFrontendHost::recordPanelShownCallbackCustom):
        (WebCore::V8InspectorFrontendHost::recordSettingChangedCallbackCustom):
        * bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp:
        (WebCore::V8JavaScriptCallFrame::evaluateCallbackCustom):
        (WebCore::V8JavaScriptCallFrame::restartCallbackCustom):
        (WebCore::V8JavaScriptCallFrame::setVariableValueCallbackCustom):
        (WebCore::V8JavaScriptCallFrame::scopeTypeCallbackCustom):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAccessorGetter):
        (WebCore::V8Location::replaceAccessorGetter):
        (WebCore::V8Location::assignAccessorGetter):
        (WebCore::V8Location::reloadCallbackCustom):
        (WebCore::V8Location::replaceCallbackCustom):
        (WebCore::V8Location::assignCallbackCustom):
        (WebCore::V8Location::valueOfCallbackCustom):
        (WebCore::V8Location::toStringCallbackCustom):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallbackCustom):
        (WebCore::V8MessageEvent::webkitInitMessageEventCallbackCustom):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::V8MessagePort::postMessageCallbackCustom):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::insertBeforeCallbackCustom):
        (WebCore::V8Node::replaceChildCallbackCustom):
        (WebCore::V8Node::removeChildCallbackCustom):
        (WebCore::V8Node::appendChildCallbackCustom):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::requestPermissionCallbackCustom):
        * bindings/v8/custom/V8NotificationCustom.cpp:
        (WebCore::V8Notification::requestPermissionCallbackCustom):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::V8SQLResultSetRowList::itemCallbackCustom):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallbackCustom):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallbackCustom):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallbackCustom):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getBufferParameterCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getExtensionCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getFramebufferAttachmentParameterCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getParameterCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getRenderbufferParameterCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getSupportedExtensionsCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getTexParameterCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getUniformCallbackCustom):
        (WebCore::V8WebGLRenderingContext::getVertexAttribCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniform1fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniform1ivCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniform2fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniform2ivCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniform3fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniform3ivCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniform4fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniform4ivCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniformMatrix2fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniformMatrix3fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::uniformMatrix4fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::vertexAttrib1fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::vertexAttrib2fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::vertexAttrib3fvCallbackCustom):
        (WebCore::V8WebGLRenderingContext::vertexAttrib4fvCallbackCustom):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::importScriptsCallbackCustom):
        (WebCore::V8WorkerContext::setTimeoutCallbackCustom):
        (WebCore::V8WorkerContext::setIntervalCallbackCustom):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::V8Worker::postMessageCallbackCustom):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::openCallbackCustom):
        (WebCore::V8XMLHttpRequest::sendCallbackCustom):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::V8XSLTProcessor::setParameterCallbackCustom):
        (WebCore::V8XSLTProcessor::getParameterCallbackCustom):
        (WebCore::V8XSLTProcessor::removeParameterCallbackCustom):

2013-02-13  Praveen R Jadhav  <praveen.j@samsung.com>

        JSObject for ChannelSplitterNode and ChannelMergerNode are not created.
        https://bugs.webkit.org/show_bug.cgi?id=109542

        Reviewed by Kentaro Hara.

        "JSGenerateToJSObject" should be included in IDL files
        of ChannelSplitterNode and ChannelMergerNode in WebAudio.
        This ensures html files to access corresponding objects.

        * Modules/webaudio/ChannelMergerNode.idl:
        * Modules/webaudio/ChannelSplitterNode.idl:

2013-02-13   Vineet Chaudhary  <rgf748@motorola.com>

        [Regression] After r142831  collection-null-like-arguments.html layout test failing
        https://bugs.webkit.org/show_bug.cgi?id=109780

        Reviewed by Kentaro Hara.

        No new tests. LayoutTests/fast/dom/collection-null-like-arguments.html
        Should pass now.

        * bindings/js/JSHTMLAllCollectionCustom.cpp: Return null for namedItem() only.
        (WebCore::getNamedItems):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp: Ditto.
        (WebCore::getNamedItems):
        (WebCore::JSHTMLFormControlsCollection::namedItem):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp: Ditto.
        (WebCore::getNamedItems):
        (WebCore::JSHTMLOptionsCollection::namedItem):

2013-02-13  Soo-Hyun Choi  <sh9.choi@samsung.com>

        Fix indentation error in MediaPlayerPrivateGStreamer.h
        https://bugs.webkit.org/show_bug.cgi?id=109768

        Reviewed by Kentaro Hara.

        No new tests as this patch just changes indentation style.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::hasVideo):
        (WebCore::MediaPlayerPrivateGStreamer::hasAudio):
        (WebCore::MediaPlayerPrivateGStreamer::engineDescription):
        (WebCore::MediaPlayerPrivateGStreamer::isLiveStream):

2013-02-13  Adam Barth  <abarth@webkit.org>

        TokenPreloadScanner should be (mostly!) thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=109760

        Reviewed by Eric Seidel.

        This patch makes the bulk of TokenPreloadScanner thread-safe.  The one
        remaining wart is processPossibleBaseTag because it wants to grub
        around in the base tag's attributes. I have a plan for that, but it's
        going to need to wait for the next patch.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::isStartTag):
        (WebCore::isStartOrEndTag):
        (WebCore::TokenPreloadScanner::identifierFor):
        (WebCore::TokenPreloadScanner::inititatorFor):
        (WebCore::TokenPreloadScanner::StartTagScanner::StartTagScanner):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (TokenPreloadScanner::StartTagScanner):
        (WebCore::TokenPreloadScanner::processPossibleTemplateTag):
        (WebCore::TokenPreloadScanner::processPossibleStyleTag):
        (WebCore::TokenPreloadScanner::processPossibleBaseTag):
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLPreloadScanner.h:
        (WebCore):

2013-02-13  Adam Barth  <abarth@webkit.org>

        StartTagScanner should be thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=109750

        Reviewed by Eric Seidel.

        This patch weens the StartTagScanner off AtomicString using two
        techniques:

        1) This patch creates an enum to represent the four tag names that the
           StartTagScanner needs to understand. Using an enum is better than
           using an AtomicString because we can use the enum on both the main
           thread and on the background thread.

        2) For attributes, this patch uses threadSafeMatch. We're not able to
           use threadSafeMatch everywhere due to performance, but using it for
           attributes appears to be ok becaues we only call threadSafeMatch on
           the attributes of "interesting" tags.

        I tested the performance of this patch using
        PerformanceTests/Parser/html-parser.html and did not see any slowdown.
        (There actually appeared to be a <1% speedup, but I'm attributing that
        to noise.)

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::identifierFor):
        (WebCore):
        (WebCore::inititatorFor):
        (WebCore::StartTagScanner::StartTagScanner):
        (WebCore::StartTagScanner::processAttributes):
        (StartTagScanner):
        (WebCore::StartTagScanner::createPreloadRequest):
        (WebCore::StartTagScanner::processAttribute):
        (WebCore::StartTagScanner::charset):
        (WebCore::StartTagScanner::resourceType):
        (WebCore::StartTagScanner::shouldPreload):
        (WebCore::HTMLPreloadScanner::processToken):

2013-02-13  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: a long page is scaled vertically while loading.
        https://bugs.webkit.org/show_bug.cgi?id=109645

        Reviewed by Noam Rosenthal.

        When loading http://www.w3.org/TR/xpath-datamodel/, Coordinated Graphics draws
        vertically scaled contents. It is because there is the difference between the
        size of a layer and the size of CoordinatedBackingStore.

        Currently, CoordinatedGraphicsScene notifies the size to CoordinatedBackingStore
        at the moment of creating, updating and removing a tile. However, it is not
        necessary to send tile-related messages when the size of layer is changed.
        So this patch resets the size of CoordinatedBackingStore when receiving the
        message that is created when the size is changed: SyncLayerState.

        There is no current way to reliably test flicker issues.

        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.cpp:
          Add m_pendingSize to set m_size at the moment of flushing.
          After http://webkit.org/b/108294, m_pendingSize will be removed
          because the bug makes CoordinatedGraphicsScene execute all messages at
          the moment of flushing.
        (WebCore::CoordinatedBackingStore::setSize):
        (WebCore::CoordinatedBackingStore::commitTileOperations):
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h:
        (CoordinatedBackingStore):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::prepareContentBackingStore):
        (WebCore::CoordinatedGraphicsScene::createBackingStoreIfNeeded):
        (WebCore::CoordinatedGraphicsScene::resetBackingStoreSizeToLayerSize):
        (WebCore::CoordinatedGraphicsScene::createTile):
        (WebCore::CoordinatedGraphicsScene::removeTile):
        (WebCore::CoordinatedGraphicsScene::updateTile):

2013-02-13  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename XXXAccessorGetter() to XXXAttrGetterCustom(),
        and XXXAccessorSetter() to XXXAttrSetterCustom()
        https://bugs.webkit.org/show_bug.cgi?id=109679

        Reviewed by Adam Barth.

        For naming consistency and clarification.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateHeaderCustomCall):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrGetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrSetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::customAttrAttrGetter):
        (WebCore::TestObjV8Internal::customAttrAttrSetter):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/v8/custom/V8AudioBufferSourceNodeCustom.cpp:
        (WebCore::V8AudioBufferSourceNode::bufferAttrSetterCustom):
        * bindings/v8/custom/V8BiquadFilterNodeCustom.cpp:
        (WebCore::V8BiquadFilterNode::typeAttrSetterCustom):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::V8CanvasRenderingContext2D::strokeStyleAttrGetterCustom):
        (WebCore::V8CanvasRenderingContext2D::strokeStyleAttrSetterCustom):
        (WebCore::V8CanvasRenderingContext2D::fillStyleAttrGetterCustom):
        (WebCore::V8CanvasRenderingContext2D::fillStyleAttrSetterCustom):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::typesAttrGetterCustom):
        * bindings/v8/custom/V8CoordinatesCustom.cpp:
        (WebCore::V8Coordinates::altitudeAttrGetterCustom):
        (WebCore::V8Coordinates::altitudeAccuracyAttrGetterCustom):
        (WebCore::V8Coordinates::headingAttrGetterCustom):
        (WebCore::V8Coordinates::speedAttrGetterCustom):
        * bindings/v8/custom/V8CustomEventCustom.cpp:
        (WebCore::V8CustomEvent::detailAttrGetterCustom):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::eventAttrGetterCustom):
        (WebCore::V8DOMWindow::eventAttrSetterCustom):
        (WebCore::V8DOMWindow::locationAttrSetterCustom):
        (WebCore::V8DOMWindow::openerAttrSetterCustom):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::accelerationAttrGetterCustom):
        (WebCore::V8DeviceMotionEvent::accelerationIncludingGravityAttrGetterCustom):
        (WebCore::V8DeviceMotionEvent::rotationRateAttrGetterCustom):
        (WebCore::V8DeviceMotionEvent::intervalAttrGetterCustom):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::alphaAttrGetterCustom):
        (WebCore::V8DeviceOrientationEvent::betaAttrGetterCustom):
        (WebCore::V8DeviceOrientationEvent::gammaAttrGetterCustom):
        (WebCore::V8DeviceOrientationEvent::absoluteAttrGetterCustom):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::V8Document::locationAttrGetterCustom):
        (WebCore::V8Document::locationAttrSetterCustom):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::V8Event::dataTransferAttrGetterCustom):
        (WebCore::V8Event::clipboardDataAttrGetterCustom):
        * bindings/v8/custom/V8FileReaderCustom.cpp:
        (WebCore::V8FileReader::resultAttrGetterCustom):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::allAttrSetterCustom):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::V8HTMLElement::itemValueAttrGetterCustom):
        (WebCore::V8HTMLElement::itemValueAttrSetterCustom):
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::V8HTMLFrameElement::locationAttrSetterCustom):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::V8HTMLInputElement::selectionStartAttrGetterCustom):
        (WebCore::V8HTMLInputElement::selectionStartAttrSetterCustom):
        (WebCore::V8HTMLInputElement::selectionEndAttrGetterCustom):
        (WebCore::V8HTMLInputElement::selectionEndAttrSetterCustom):
        (WebCore::V8HTMLInputElement::selectionDirectionAttrGetterCustom):
        (WebCore::V8HTMLInputElement::selectionDirectionAttrSetterCustom):
        * bindings/v8/custom/V8HTMLLinkElementCustom.cpp:
        (WebCore::V8HTMLLinkElement::sizesAttrGetterCustom):
        (WebCore::V8HTMLLinkElement::sizesAttrSetterCustom):
        * bindings/v8/custom/V8HTMLMediaElementCustom.cpp:
        (WebCore::V8HTMLMediaElement::controllerAttrSetterCustom):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::lengthAttrSetterCustom):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::stateAttrGetterCustom):
        * bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp:
        (WebCore::V8JavaScriptCallFrame::scopeChainAttrGetterCustom):
        (WebCore::V8JavaScriptCallFrame::thisObjectAttrGetterCustom):
        (WebCore::V8JavaScriptCallFrame::typeAttrGetterCustom):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::hashAttrSetterCustom):
        (WebCore::V8Location::hostAttrSetterCustom):
        (WebCore::V8Location::hostnameAttrSetterCustom):
        (WebCore::V8Location::hrefAttrSetterCustom):
        (WebCore::V8Location::pathnameAttrSetterCustom):
        (WebCore::V8Location::portAttrSetterCustom):
        (WebCore::V8Location::protocolAttrSetterCustom):
        (WebCore::V8Location::searchAttrSetterCustom):
        (WebCore::V8Location::reloadAttrGetterCustom):
        (WebCore::V8Location::replaceAttrGetterCustom):
        (WebCore::V8Location::assignAttrGetterCustom):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAttrGetterCustom):
        (WebCore::V8MessageEvent::portsAttrGetterCustom):
        * bindings/v8/custom/V8OscillatorNodeCustom.cpp:
        (WebCore::V8OscillatorNode::typeAttrSetterCustom):
        * bindings/v8/custom/V8PannerNodeCustom.cpp:
        (WebCore::V8PannerNode::panningModelAttrSetterCustom):
        (WebCore::V8PannerNode::distanceModelAttrSetterCustom):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::stateAttrGetterCustom):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::valueAttrGetterCustom):
        (WebCore::V8SVGLength::valueAttrSetterCustom):
        * bindings/v8/custom/V8TrackEventCustom.cpp:
        (WebCore::V8TrackEvent::trackAttrGetterCustom):
        * bindings/v8/custom/V8WebKitAnimationCustom.cpp:
        (WebCore::V8WebKitAnimation::iterationCountAttrGetterCustom):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseTextAttrGetterCustom):
        (WebCore::V8XMLHttpRequest::responseAttrGetterCustom):

2013-02-12  Kentaro Hara  <haraken@chromium.org>

        [V8] Generate wrapper methods for custom getters/setters
        https://bugs.webkit.org/show_bug.cgi?id=109666

        Reviewed by Adam Barth.

        Currently V8 directly calls back custom getters/setters written
        in custom binding files. This makes it impossible for code generators
        to hook custom getters/setters (e.g. Code generators cannot insert a code
        for FeatureObservation into custom getters/setters). To solve the problem,
        we should generate wrapper methods for custom getters/setters.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrGetter):
        (TestInterfaceV8Internal):
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrSetter):
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::customAttrAttrGetter):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::customAttrAttrSetter):
        (WebCore):

2013-02-13   Vineet Chaudhary  <rgf748@motorola.com>

        HTMLCollections namedItem() methods should return null than undefined for empty collections.
        https://bugs.webkit.org/show_bug.cgi?id=104096

        Reviewed by Kentaro Hara.

        As per specification namedItem() should return null if collection is empty.
        Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#htmlallcollection

        Test: fast/dom/htmlcollection-namedItem.html

        * bindings/js/JSHTMLAllCollectionCustom.cpp: Returning null.
        (WebCore::getNamedItems):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp: Ditto.
        (WebCore::getNamedItems):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp: Ditto.
        (WebCore::getNamedItems):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp: Ditto.
        (WebCore::V8HTMLAllCollection::namedItemCallback):
        * bindings/v8/custom/V8HTMLFormControlsCollectionCustom.cpp: Ditto.
        (WebCore::V8HTMLFormControlsCollection::namedItemCallback):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp: Ditto.
        (WebCore::V8HTMLOptionsCollection::namedItemCallback):

2013-02-13  Tony Gentilcore  <tonyg@chromium.org>

        Fix svg/in-html/script-write.html with threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=109495

        Reviewed by Eric Seidel.

        This patch makes the background parser's simulateTreeBuilder() more realistic.
        1. The HTMLTreeBuilder does not call the updateStateFor() setState()s when in foreign content mode so we shouldn't do it when simulating the tree builder.
        2. HTMLTreeBuilder::processTokenInForeignContent has a list of tags which exit foreign content mode. We need to respect those.
        3. Support the <foreignObject> tag which enters and leaves foreign content mode.
        4. The tree builder sets state to DataState upon a </script> tag when not in foreign content mode. We need to do the same.

        This involved creating a namespace stack where we push upon entering each namespace and pop upon leaving.
        We are in foreign content if the topmost namespace is SVG or MathML.

        This fixes svg/in-html/script-write.html and likely others.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::simulateTreeBuilder):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):
        * html/parser/CompactHTMLToken.cpp:
        (WebCore::CompactHTMLToken::getAttributeItem): Returns the attribute of the given name. Necessary to test for <font> attributes in simulateTreeBuilder.
        (WebCore):
        * html/parser/CompactHTMLToken.h:
        (WebCore):
        (CompactHTMLToken):

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

        Remove Element::getAttributeItem() overload that returned a mutable Attribute*.
        <http://webkit.org/b/109756>

        Reviewed by Antti Koivisto.

        Remove this to prevent callers from accidentally causing elements to convert to UniqueElementData.
        There are two call sites (Attr and HTMLSelectElement) that legitimately need to mutate Attribute
        objects in-place, they now use Element::ensureUniqueElementData()->getAttributeItem() directly instead.

        Small progression on Membuster3, mostly for peace of mind.

        * dom/Attr.cpp:
        (WebCore::Attr::elementAttribute):
        * dom/Element.h:
        (Element):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

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

        Stronger ElementData pointer typing.
        <http://webkit.org/b/109752>

        Reviewed by Antti Koivisto.

        Use ShareableElementData/UniqueElementData pointers instead of generic ElementData pointers
        where possible. Moved some methods from base class into leaf classes that don't make sense
        for both classes.

        * dom/DocumentSharedObjectPool.cpp:
        (WebCore::ShareableElementDataCacheEntry::ShareableElementDataCacheEntry):
        (ShareableElementDataCacheEntry):
        (WebCore::DocumentSharedObjectPool::cachedShareableElementDataWithAttributes):
        * dom/DocumentSharedObjectPool.h:
        (DocumentSharedObjectPool):
        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::Element::cloneAttributesFromElement):
        (WebCore::Element::createUniqueElementData):
        (WebCore::ShareableElementData::createWithAttributes):
        (WebCore::UniqueElementData::create):
        (WebCore::ElementData::makeUniqueCopy):
        (WebCore::UniqueElementData::makeShareableCopy):
        * dom/Element.h:
        (ElementData):
        (ShareableElementData):
        (UniqueElementData):
        (Element):
        (WebCore::Element::ensureUniqueElementData):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):

2013-02-13  Antti Koivisto  <antti@apple.com>

        Reschedule shared CFRunLoopTimer instead of reconstructing it
        https://bugs.webkit.org/show_bug.cgi?id=109765

        Reviewed by Andreas Kling and Anders Carlsson.

        Using CFRunLoopTimerSetNextFireDate is over 2x faster than deleting and reconstructing timers.

        * platform/mac/SharedTimerMac.mm:
        (WebCore):
        (WebCore::PowerObserver::restartSharedTimer):
        (WebCore::sharedTimer):
        (WebCore::setSharedTimerFireInterval):
        (WebCore::stopSharedTimer):

2013-02-13  Emil A Eklund  <eae@chromium.org>

        getComputedStyle returns truncated value for margin-right
        https://bugs.webkit.org/show_bug.cgi?id=109759

        Reviewed by Tony Chang.
        
        Due to an unfortunate cast in CSSComputedStyleDeclaration::
        getPropertyCSSValue getComputedStyle returns truncated styles
        for margin-right in cases where it isn't set to a specific pixel
        value.

        Test: fast/sub-pixel/computedstylemargin.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Change type of temporary value variable to float to prevent loss of precision.

2013-02-13  Max Vujovic  <mvujovic@adobe.com>

        [CSS Filters] Refactor filter outsets into a class
        https://bugs.webkit.org/show_bug.cgi?id=109330

        Reviewed by Dean Jackson.

        In filters related code, we're often operating on 4 ints representing the top, right,
        bottom, and left filter outsets. These outsets come from a filter like blur or drop-shadow.
        This patch packages those ints and their related operations into a class called
        IntRectExtent.

        Here are some signs that we should make a class to hold those 4 ints:
        1) In RenderLayer.cpp, we have a expandRectForFilterOutsets function, which looks like
           feature envy.
        2) RenderStyle and other classes have methods like getFilterOutsets which set the 4 ints by
           reference. The calling code has to define 4 ints, which looks bloated.
        3) To fix bug 109098, we will need to check if filter outsets changed, which sounds like a
           nice job for an inequality operator. (https://bugs.webkit.org/show_bug.cgi?id=109098)

        No new tests. No change in behavior. Just refactoring.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/IntRectExtent.h: Added.
        (WebCore):
        (IntRectExtent):
        (WebCore::IntRectExtent::IntRectExtent):
        (WebCore::IntRectExtent::top):
        (WebCore::IntRectExtent::setTop):
        (WebCore::IntRectExtent::right):
        (WebCore::IntRectExtent::setRight):
        (WebCore::IntRectExtent::bottom):
        (WebCore::IntRectExtent::setBottom):
        (WebCore::IntRectExtent::left):
        (WebCore::IntRectExtent::setLeft):
        (WebCore::IntRectExtent::expandRect):
        (WebCore::IntRectExtent::isZero):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::operator+=):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::outsets):
        * platform/graphics/filters/FilterOperations.h:
        (FilterOperations):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::intermediateSurfaceRect):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::computeSourceImageRectForDirtyRect):
        * rendering/FilterEffectRenderer.h:
        (FilterEffectRenderer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::calculateLayerBounds):
        * rendering/style/RenderStyle.h:

2013-02-13  Adam Barth  <abarth@webkit.org>

        Factor HTMLTokenScanner out of HTMLPreloadScanner
        https://bugs.webkit.org/show_bug.cgi?id=109754

        Reviewed by Eric Seidel.

        This patch is just a mechanical separation of the per-token "scanning"
        logic from HTMLPreloadScanner into a separate class.
        HTMLPreloadScanner's job is now to keep track of the input stream and
        to pump the tokenizer.

        This factorization class will let us use HTMLTokenScanner on the
        background thread (once we finish making it thread-safe). In a follow
        up patch, I'll move HTMLTokenScanner to its own file.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLTokenScanner::HTMLTokenScanner):
        (WebCore::HTMLTokenScanner::~HTMLTokenScanner):
        (WebCore::HTMLTokenScanner::processPossibleTemplateTag):
        (WebCore::HTMLTokenScanner::processPossibleStyleTag):
        (WebCore::HTMLTokenScanner::processPossibleBaseTag):
        (WebCore::HTMLTokenScanner::scan):
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        (WebCore):
        (WebCore::HTMLPreloadScanner::~HTMLPreloadScanner):
        (WebCore::HTMLPreloadScanner::appendToEnd):
        (WebCore::HTMLPreloadScanner::scan):
        * html/parser/HTMLPreloadScanner.h:
        (HTMLTokenScanner):
        (WebCore::HTMLTokenScanner::setPredictedBaseElementURL):
        (HTMLPreloadScanner):
        (WebCore):

2013-02-13  Elliott Sprehn  <esprehn@chromium.org>

        ASSERT(!renderer()->needsLayout()) when calling Element::focus() with generated content
        https://bugs.webkit.org/show_bug.cgi?id=109616

        Reviewed by Julien Chaffraix.

        Test: fast/css-generated-content/quote-layout-focus-crash.html

        In some cases RenderQuote may mark itself and containing blocks as needing layout
        during a layout, but then one of it's containing blocks will mark itself as having
        finished layout so the RenderQuote and potentially some of it's ancestor renderers
        needLayout(), but the ancestors above those do not.

        Until we have proper pre-layout tasks we should just walk the list of quotes
        right before layout and mark all their ancestors as needing layout if the quote
        needs layout.

        * dom/Document.cpp:
        (WebCore::Document::updateLayout): Call markQuoteContainingBlocksForLayoutIfNeeded.
        (WebCore::Document::implicitClose): Call markQuoteContainingBlocksForLayoutIfNeeded.
        * rendering/RenderQuote.h:
        (WebCore::RenderQuote::next): Added.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::markQuoteContainingBlocksForLayoutIfNeeded): Added.
        * rendering/RenderView.h:
        (RenderView):

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

        EME: MediaPlayer::keyNeede() should return a bool indicating whether an event listener was triggered.
        https://bugs.webkit.org/show_bug.cgi?id=109701

        Reviewed by Eric Carlson.

        Clients of MediaPlayer may need to do cleanup if calling keyNeeded()
        results in no event listener being triggered. Return a bool (like the
        v1 equivalent keyNeeded method) to indicate this.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::keyNeeded):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerKeyNeeded):

2013-02-13  Abhishek Arya  <inferno@chromium.org>

        ASSERTION FAILED: !object || object->isBox(), Bad cast in RenderBox::computeLogicalHeight
        https://bugs.webkit.org/show_bug.cgi?id=107748

        Reviewed by Levi Weintraub.

        Make sure that body renderer is not an inline-block display
        when determining that it stretches to viewport or when paginated
        content needs base height.

        Test: fast/block/body-inline-block-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToViewport):

2013-02-13  Shawn Singh  <shawnsingh@chromium.org>

        Fix debug assertion being triggered because we may access dirty normalFlowList.
        https://bugs.webkit.org/show_bug.cgi?id=109740

        A debug assertion in RenderLayer.h is being hit when trying to
        access the normalFlowList when it is dirty.  This is caused by a
        new recursion that I added in RenderLayerBacking::hasVisibleNonCompositingDescendant(),
        but I overlooked the need to call updateLayerListsIfNeeded()
        recursively as well.

        Reviewed by Simon Fraser.

        No test, because there's no reliable way to test this (same as bug 85512).

        * rendering/RenderLayerBacking.cpp:
        (WebCore::hasVisibleNonCompositingDescendant):
        (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers):

2013-02-13  Antti Koivisto  <antti@apple.com>

        Don't restart shared timer if both the current and the new fire time are in the past
        https://bugs.webkit.org/show_bug.cgi?id=109731

        Reviewed by Andreas Kling.

        In 40-50% of cases we reschedule the shared timer both the old and the new fire time have already passed. This can happen at least when rescheduling 
        a zero duration timer and when stopping a timer that was ready to fire.

        We can skip rescheduling in this case, the shared timer will fire immediately anyway.
        
        Scheduling timers calls into platform layer and can be slow. This about halves the time under setSharedTimerFireInterval in PLT3
        for ~0.1% total CPU time reduction.

        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::ThreadTimers):
        (WebCore::ThreadTimers::setSharedTimer):
        (WebCore::ThreadTimers::updateSharedTimer):
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        * platform/ThreadTimers.h:
        (ThreadTimers):

2013-02-13  Zan Dobersek  <zdobersek@igalia.com>

        The 'global isinf/isnan' compiler quirk required when using clang with libstdc++
        https://bugs.webkit.org/show_bug.cgi?id=109325

        Reviewed by Anders Carlsson.

        Prefix calls to the isinf and isnan methods with std::, declaring we want to use the
        two methods as they're provided by the C++ standard library being used.

        No new tests as there's no change in functionality.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setDuration):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::totalPitchRate):
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::setValue):
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::isValidNumber):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::fixNANs):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/js/JSDataViewCustom.cpp:
        (WebCore::getDataViewMember):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::setTimeout):
        (WebCore::setMaximumAge):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::setLength):
        * bindings/js/JSWebKitPointCustom.cpp:
        (WebCore::JSWebKitPointConstructor::constructJSWebKitPoint):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64Array::getByIndex):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClamp):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::classMethodWithClampCallback):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toInt32):
        (WebCore::toUInt32):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::createPositionOptions):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::lengthAccessorSetter):
        * bindings/v8/custom/V8WebKitPointCustom.cpp:
        (WebCore::V8WebKitPoint::constructorCallbackCustom):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::translate):
        (WebCore::WebKitCSSMatrix::scale):
        (WebCore::WebKitCSSMatrix::rotate):
        (WebCore::WebKitCSSMatrix::rotateAxisAngle):
        (WebCore::WebKitCSSMatrix::skewX):
        (WebCore::WebKitCSSMatrix::skewY):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::percentLoaded):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::endedPlayback):
        * html/MediaController.cpp:
        (MediaController::duration):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::clearColor):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::setStartTime):
        (WebCore::TextTrackCue::setEndTime):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::adjustWindowRect):
        * page/WindowFeatures.cpp:
        (WebCore::WindowFeatures::floatFeature): Also include an opportunistic style fix.
        * platform/CalculationValue.cpp:
        (WebCore::CalculationValue::evaluate):
        * platform/Decimal.cpp:
        (WebCore::Decimal::fromDouble):
        * platform/Length.cpp:
        (WebCore::Length::nonNanCalculatedValue):
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::setRate):
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::process):
        * platform/audio/Reverb.cpp:
        (WebCore::calculateNormalizationScale):
        * platform/graphics/Font.cpp:
        (WebCore::Font::width):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::isLiveStream):
        * platform/graphics/gpu/LoopBlinnMathUtils.cpp:
        (LoopBlinnMathUtils):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::buffered):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::maxTimeSeekable):
        * platform/graphics/opentype/OpenTypeVerticalData.cpp:
        (WebCore::OpenTypeVerticalData::getVerticalTranslationsForGlyphs):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::clampEdgeValue):
        (WebCore::TransformationMatrix::clampedBoundsOfProjectedQuad):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider):
        (WebCore::paintMediaVolumeSlider):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::beginElementAt):
        (WebCore::SVGAnimationElement::endElementAt):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentTime):
        * svg/animation/SMILTime.h:
        (WebCore::SMILTime::SMILTime):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::addBeginTime):
        (WebCore::SVGSMILElement::addEndTime):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSubstring::evaluate):
        (WebCore::XPath::FunRound::round):
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toBoolean): Also include an opportunistic style fix.
        (WebCore::XPath::Value::toString):

2013-02-13  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Caption menu should have only one item selected
        https://bugs.webkit.org/show_bug.cgi?id=109730

        Reviewed by Dean Jackson.

        No new tests, media/track/track-user-preferences.html was modified to test the changes.

        * CMakeLists.txt: Add CaptionUserPreferences.cpp.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_processingPreferenceChange.
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Only end up with one selected track when
            called because of a preferences change.
        (WebCore::HTMLMediaElement::captionPreferencesChanged): Call setClosedCaptionsVisible instead
            of calling markCaptionAndSubtitleTracksAsUnconfigured directly.
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured): Process all tracks, 
            not just track elements.
        * html/HTMLMediaElement.h:

        * page/CaptionUserPreferences.cpp: Added so the functionality can be tested in DRT.
        (WebCore::CaptionUserPreferences::registerForPreferencesChangedCallbacks):
        (WebCore::CaptionUserPreferences::unregisterForPreferencesChangedCallbacks):
        (WebCore::CaptionUserPreferences::setUserPrefersCaptions):
        (WebCore::CaptionUserPreferences::captionPreferencesChanged):
        (WebCore::CaptionUserPreferences::preferredLanguages):
        (WebCore::CaptionUserPreferences::setPreferredLanguage):
        (WebCore::CaptionUserPreferences::displayNameForTrack):
        * page/CaptionUserPreferences.h:

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::registerForPreferencesChangedCallbacks): Moved some logic
            to base class.
        (WebCore::CaptionUserPreferencesMac::captionPreferencesChanged): Ditto.

2013-02-13  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] ExclusionPolygon reflex vertices should constrain the first fit location.
        https://bugs.webkit.org/show_bug.cgi?id=107568

        Reviewed by Dirk Schulze.

        The ExclusionPolygon::firstIncludedIntervalLogicalTop() method now includes offset edges
        for each of the polygon's reflex vertices. The motivation for this change is explained
        here: http://hansmuller-webkit.blogspot.com/2013/01/getting-to-point-reflex-vertices.html.

        Test: fast/exclusions/shape-inside/shape-inside-first-fit-reflex.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::isReflexVertex): Given three vertices that represent a pair of connected polygon edges, return true if the second vertex is a reflex vertex.
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop): This method now includes offset edges for reflex vertices.
        * rendering/ExclusionPolygon.h:
        (WebCore::OffsetPolygonEdge::OffsetPolygonEdge): Added a constructor for creating an OffsetPolygonEdge given a reflex vertex.
        (WebCore::OffsetPolygonEdge::edgeIndex): Changed this property from unsigned to int. Now using -1 to indicate that the offset edge doesn't correspond to a single polygon edge.

2013-02-13  Adam Barth  <abarth@webkit.org>

        CSSPreloadScanner should not depend on HTMLToken
        https://bugs.webkit.org/show_bug.cgi?id=109742

        Reviewed by Eric Seidel.

        There's no need for the CSSPreloadScanner to depend on HTMLToken. On
        the background thread, we'll likely want to use a CompactHTMLToken for
        preload scanning, so this dependency is problematic. This patch also
        teaches the CSSPreloadScanner how to scan LChars.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::~CSSPreloadScanner):
        (WebCore):
        (WebCore::CSSPreloadScanner::scan):
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLPreloadScanner::processToken):

2013-02-13  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Adding or removing grid items doesn't properly recompute the track sizes
        https://bugs.webkit.org/show_bug.cgi?id=109100

        Reviewed by Ojan Vafai.

        Test: fast/css-grid-layout/grid-item-removal-track-breadth-update.html

        The test uncovered several bugs in our implementation that is fixed as part
        of this change. They will be detailed below.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):
        Added this function to share the code between minContentForChild and maxContentForChild.
        Also forced a relayout in this case to avoid getting a wrong answer (e.g. the logical height
        constrained by the previous layout's grid breadth).

        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        Updated to use logicalContentHeightForChild.

        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        Updated to match the specification and set max breadth to current breadth per the specification.
        This made us over-grow some cases in the test.

        (WebCore::RenderGrid::distributeSpaceToTracks):
        Updated to match the specification and use an extra variable to do the intermediate spreading. Also removed
        a now unneeded max. This fixes the case of multiple grid items in the same grid area that was completely broken.

        (WebCore::RenderGrid::layoutGridItems):
        Added a FIXME about always relaying out content sized tracks' children.

        * rendering/RenderGrid.h:
        Added logicalContentHeightForChild.

2013-02-13  Adam Barth  <abarth@webkit.org>

        Clean up some style nits in HTMLPreloadScanner
        https://bugs.webkit.org/show_bug.cgi?id=109738

        Reviewed by Tony Gentilcore.

        This patch just fixes a few style nits I noticed when reading through
        the code.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::StartTagScanner::StartTagScanner):
        (WebCore::HTMLPreloadScanner::processPossibleStyleTag):
        (WebCore::HTMLPreloadScanner::processPossibleBaseTag):
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::isSafeToSendToAnotherThread):
        * html/parser/HTMLResourcePreloader.h:
        (PreloadRequest):
        (WebCore::PreloadRequest::PreloadRequest):
        (WebCore::HTMLResourcePreloader::HTMLResourcePreloader):

2013-02-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142747.
        http://trac.webkit.org/changeset/142747
        https://bugs.webkit.org/show_bug.cgi?id=109746

        broke component build (Requested by alecf_gardening on
        #webkit).

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::pushUpdate):
        (WebCore::HeapGraphSerializer::reportNode):
        (WebCore::HeapGraphSerializer::toNodeId):
        (WebCore::HeapGraphSerializer::addRootNode):
        * inspector/HeapGraphSerializer.h:
        (WebCore):
        (HeapGraphSerializer):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionImpl):

2013-02-13  Levi Weintraub  <leviw@chromium.org>

        Bidi-Isolated inlines can cause subsequent content to not be rendered
        https://bugs.webkit.org/show_bug.cgi?id=108137

        Reviewed by Eric Seidel.

        First step in fixing how inline isolates behave with collapsed spaces.
        webkit.org/b/109624 tracks the overarching issue.

        Test: fast/text/content-following-inline-isolate-with-collapsed-whitespace.html

        * rendering/InlineIterator.h:
        (WebCore::IsolateTracker::addFakeRunIfNecessary): If we enter an isolate while
        ignoring spaces, ensure we leave it considering them again. This can result in
        including spaces that should be ignored following the isolate on the line, but
        failing to do so results in those contents not being rendered at all.

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

        Better names for ElementAttributeData & subclasses.
        <http://webkit.org/b/109529>

        Reviewed by Antti Koivisto.

        - ElementAttributeData => ElementData

            Because ElementAttributeData won't be a good name once we move some non-attribute related
            things to this structure.

        - ImmutableElementAttributeData => ShareableElementData

            These objects can be shared with other Elements that have the same attribute name/value pairs.

        - MutableElementAttributeData => UniqueElementData

            These objects contain data that is unique to a specific Element, and cannot be shared with
            other Elements. This is what's important about it, not that its underlying storage is mutable.

        - attributeData() -> elementData()
        - updatedAttributeData() -> elementDataWithSynchronizedAttributes()
        - ensureUpdatedAttributeData() -> ensureElementDataWithSynchronizedAttributes()
        - mutableAttributeData() -> ensureUniqueElementData()

            Ride-along renames. Much less vague than previous names IMO.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithControl):
        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):
        * dom/Attr.cpp:
        (WebCore::Attr::elementAttribute):
        * dom/DocumentSharedObjectPool.cpp:
        (WebCore::ShareableElementDataCacheKey::ShareableElementDataCacheKey):
        (WebCore::ShareableElementDataCacheKey::operator!=):
        (WebCore::ShareableElementDataCacheEntry::ShareableElementDataCacheEntry):
        (ShareableElementDataCacheEntry):
        (WebCore::DocumentSharedObjectPool::cachedShareableElementDataWithAttributes):
        * dom/DocumentSharedObjectPool.h:
        (DocumentSharedObjectPool):
        * dom/Element.cpp:
        (WebCore::Element::detachAttribute):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::attributes):
        (WebCore::Element::getAttribute):
        (WebCore::Element::setAttribute):
        (WebCore::Element::setSynchronizedLazyAttribute):
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::classAttributeChanged):
        (WebCore::Element::shouldInvalidateDistributionWhenAttributeChanged):
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::hasAttributes):
        (WebCore::Element::hasEquivalentAttributes):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeNode):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::Element::addAttributeInternal):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::getAttributeNodeNS):
        (WebCore::Element::hasAttribute):
        (WebCore::Element::hasAttributeNS):
        (WebCore::Element::computeInheritedLanguage):
        (WebCore::Element::getURLAttribute):
        (WebCore::Element::getNonEmptyURLAttribute):
        (WebCore::Element::cloneAttributesFromElement):
        (WebCore::Element::createUniqueElementData):
        (WebCore::Element::reportMemoryUsage):
        (WebCore::ElementData::deref):
        (WebCore::ElementData::ElementData):
        (WebCore::sizeForShareableElementDataWithAttributeCount):
        (WebCore::ElementData::createShareableWithAttributes):
        (WebCore::ElementData::createUnique):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::ShareableElementData::~ShareableElementData):
        (WebCore::UniqueElementData::UniqueElementData):
        (WebCore::ElementData::makeMutableCopy):
        (WebCore::ElementData::makeImmutableCopy):
        (WebCore::ElementData::setPresentationAttributeStyle):
        (WebCore::ElementData::addAttribute):
        (WebCore::ElementData::removeAttribute):
        (WebCore::ElementData::isEquivalent):
        (WebCore::ElementData::reportMemoryUsage):
        (WebCore::ElementData::getAttributeItemIndexSlowCase):
        * dom/Element.h:
        (ElementData):
        (WebCore::ElementData::isUnique):
        (ShareableElementData):
        (UniqueElementData):
        (WebCore::Element::getAttributeItemIndex):
        (WebCore::Element::elementData):
        (Element):
        (WebCore::Element::elementDataWithSynchronizedAttributes):
        (WebCore::Element::ensureElementDataWithSynchronizedAttributes):
        (WebCore::Element::fastHasAttribute):
        (WebCore::Element::fastGetAttribute):
        (WebCore::Element::hasAttributesWithoutUpdate):
        (WebCore::Element::idForStyleResolution):
        (WebCore::Element::classNames):
        (WebCore::Element::attributeCount):
        (WebCore::Element::attributeItem):
        (WebCore::Element::getAttributeItem):
        (WebCore::Element::updateInvalidAttributes):
        (WebCore::Element::hasID):
        (WebCore::Element::hasClass):
        (WebCore::Element::ensureUniqueElementData):
        (WebCore::ElementData::mutableAttributeVector):
        (WebCore::ElementData::immutableAttributeArray):
        (WebCore::ElementData::length):
        (WebCore::ElementData::presentationAttributeStyle):
        (WebCore::ElementData::getAttributeItem):
        (WebCore::ElementData::getAttributeItemIndex):
        (WebCore::ElementData::attributeItem):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::compareDocumentPosition):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::ensureMutableInlineStyle):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::inlineStyleCSSOMWrapper):
        (WebCore::StyledElement::setInlineStyleFromString):
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::inlineStyleChanged):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyle):
        (WebCore::StyledElement::invalidateStyleAttribute):
        (WebCore::StyledElement::presentationAttributeStyle):
        * html/ClassList.cpp:
        (WebCore::ClassList::classNames):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::updateAnimatedSVGAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGAttributes):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2013-02-13  Christian Biesinger  <cbiesinger@chromium.org>

        Crash when encountering <object style="resize:both;">
        https://bugs.webkit.org/show_bug.cgi?id=109728

        See also https://code.google.com/p/chromium/issues/detail?id=175535
        This bug can be reproduced on
        http://dramalink.net/tudou.y/?xink=162601060

        Reviewed by Eric Seidel.

        Test: fast/css/resize-object-crash.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        Only call paintResizer() if we have a layer and canResize() is true

2013-02-13  Arko Saha  <arko@motorola.com>

        [Microdata] HTMLPropertiesCollection code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=109721

        Reviewed by Ryosuke Niwa.

        Removed forward declaration of DOMStringList class.
        Removed unused findRefElements() method declaration.
        Also Removed unused parameter Element* from updatePropertyCache() method.

        No new test since no change in behavior.

        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::updateNameCache):
        * html/HTMLPropertiesCollection.h:
        (WebCore):
        (HTMLPropertiesCollection):
        (WebCore::HTMLPropertiesCollection::updatePropertyCache):

2013-02-13  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [WebGL][EFL][GTK][Qt]Add support for OES_vertex_array_object.
        https://bugs.webkit.org/show_bug.cgi?id=109382

        Reviewed by Kenneth Russell.

        Covered by fast/canvas/webgl/oes-vertex-array-object.html

        This patch adds support for using Vertex Array Object with OpenGl.
        The patch adds support for loading necessary opengl functions
        and support for checking GL_ARB_vertex_array_object. The support
        for OES_vertex_array_object is advertised if GL_ARB_vertex_array_object is
        supported.

        * platform/graphics/OpenGLShims.cpp:
        (WebCore::initializeOpenGLShims):
        * platform/graphics/OpenGLShims.h:
        (_OpenGLFunctionTable):
        Added support for loading the necessary functions.

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        (WebCore::Extensions3DOpenGL::supportsExtension):

        (WebCore):
        (WebCore::Extensions3DOpenGL::isVertexArrayObjectSupported):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        (Extensions3DOpenGL):

2013-02-13  Eberhard Graether  <egraether@google.com>

        chromium: remove CompositorHUDFontAtlas
        https://bugs.webkit.org/show_bug.cgi?id=109328

        Reviewed by James Robinson.

        After switching the HudLayer to use skia's font rendering the
        CompositorHUDFontAtlas has become obsolete. This change removes
        this class and the related WebLayerTreeView API.

        No new tests.

        * WebCore.gypi:
        * platform/graphics/chromium/CompositorHUDFontAtlas.cpp: Removed.
        * platform/graphics/chromium/CompositorHUDFontAtlas.h: Removed.

2013-02-13  Dean Jackson  <dino@apple.com>

        Small update to speech bubble for captions menu [Mac]
        https://bugs.webkit.org/show_bug.cgi?id=109641

        Reviewed by Eric Carlson

        Small adjustment to the embedded SVG that draws a speech bubble
        for the captions button. Remove a polygon that was so small
        it looked like a rendering error.

        * css/mediaControlsQuickTime.css:
        (video::-webkit-media-controls-toggle-closed-captions-button):

2013-02-13  Dean Jackson  <dino@apple.com>

        Clicking outside captions menu should dismiss it
        https://bugs.webkit.org/show_bug.cgi?id=109648

        Reviewed by Eric Carlson.

        Add a virtual override to the platform-specific
        defaultEventHandler to intercept any click in the controls,
        and hide the captions menu if it is showing.

        Test: media/video-controls-captions-trackmenu-hide-on-click.html

        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::defaultEventHandler): Override from MediaControls. Hide
            captions menu if a click event comes in.
        * html/shadow/MediaControlsApple.h:

2013-02-13  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Use the source id when creating new tracks
        https://bugs.webkit.org/show_bug.cgi?id=109688

        Reviewed by Adam Barth.

        This patch reuses the ids from the source when creating tracks instead of creating a new one.
        This was requested by the chromium port to greatly simplify their implementation.
        In the longer run the API should be rewritten to only use tracks instead of sources.

        Covered by existing tests.

        * platform/chromium/support/WebMediaStream.cpp:
        (WebKit::WebMediaStream::audioTracks):
        (WebKit::WebMediaStream::videoTracks):
        (WebKit::WebMediaStream::initialize):
        (WebKit):
        * platform/chromium/support/WebMediaStreamTrack.cpp:
        (WebKit::WebMediaStreamTrack::initialize):
        (WebKit):
        * platform/mediastream/MediaStreamComponent.h:
        (WebCore::MediaStreamComponent::create):
        (MediaStreamComponent):
        (WebCore::MediaStreamComponent::MediaStreamComponent):
        (WebCore):
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::create):
        (MediaStreamDescriptor):
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):

2013-02-13  Eric Seidel  <eric@webkit.org>

        Use fancy new Vector-based String constructors in the WebVTT parser
        https://bugs.webkit.org/show_bug.cgi?id=109619

        Reviewed by Benjamin Poulain.

        No change in behavior. Added some FIXMEs for future perf optimization.

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::constructTreeFromToken):

2013-02-13  Morten Stenshorne  <mstensho@opera.com>

        WebKit ignores column-rules wider than column-gap
        https://bugs.webkit.org/show_bug.cgi?id=15553

        Paint column rules even if they are wider than the gap.
        Rules wider than the gap should just overlap with column contents.

        Reviewed by Eric Seidel.

        Test: fast/multicol/rule-thicker-than-gap.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules):

2013-02-13  Philip Rogers  <pdr@google.com>

        Replace SVG bitmap cache with directly-rendered SVG
        https://bugs.webkit.org/show_bug.cgi?id=106159

        Reviewed by Tim Horton.

        This patch removes the caching of SVG bitmaps so SVG images are rendered directly. This
        enables WebKit to pass the IE Chalkboard demo in 10s on a Z620:
        http://ie.microsoft.com/testdrive/Performance/Chalkboard/

        On a simple scaled SVG benchmark similar to the IE10 Chalkboard demo
        (http://philbit.com/SvgImagePerformance/viewport.html):
            without patch: ~20FPS
            with patch: ~55FPS

        The bitmap SVG image cache had several shortcomings:
            - The bitmap cache prevented viewport rendering. (WK104693)
            - Bitmap memory usage was high. (WK106484)
            - Caching animating images was expensive.

        This change removes almost all of the SVGImageCache implementation, replacing it with
        directly-rendered SVG. Instead of caching bitmaps, an SVGImageForContainer is cached which
        is a thin wrapper around an SVG image with the associated container size and scale.
        When rendering patterns (e.g., tiled backgrounds), a temporary bitmap is used for
        performance. This change also removes the redraw timer of the old cache, instead relying
        on the SVG image to notify clients if the image changes (e.g., during animations).

        This patch fixes two existing bugs (WK99481 and WK104189) that were due to caching bitmaps
        at a fixed size. A test has been added for each of these bugs.

        Tests: svg/as-image/svg-image-scaled.html
               svg/as-image/svg-image-viewbox.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::lookupOrCreateImageForRenderer):
        (WebCore::CachedImage::setContainerSizeForRenderer):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::changedInRect):

            SVG images are no longer special-cased here. When the SVG image changes, users are
            notified through this function, and users can then request their content to be redrawn.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::drawForContainer):

            drawForContainer lays out the SVG content for a specific container size and renders it.
            The logic is fairly straightforward but a note about the scales and zooms here:
                the destination rect parameter is zoomed but not scaled
                the source rect parameter is zoomed but not scaled
                the context is scaled but not zoomed
            SVGImage::draw(...) only accepts a source and destination rect but does not consider
            scale or zoom. Therefore, drawForContainer removes the zoom component from the source
            so SVGImage::draw(...) will draw from the pre-zoom source to the post-zoom destination.

        (WebCore::SVGImage::drawPatternForContainer):

            For performance, drawPatternForContainer renders the SVG content onto a bitmap, then
            has the bitmap image draw the pattern. This is necessary because drawPattern is used
            for tiling.

        (WebCore):
        (WebCore::SVGImage::startAnimation):
        (WebCore::SVGImage::stopAnimation):
        (WebCore::SVGImage::resetAnimation):
        (WebCore::SVGImage::reportMemoryUsage):
        * svg/graphics/SVGImage.h:
        (WebCore):
        (SVGImage):
        * svg/graphics/SVGImageCache.cpp:

            Instead of storing a SizeAndScales values for each renderer, a SVGImageForContainer
            is stored which is just a thin wrapper around an SVG image that contains container
            sizing information. By combining the image and size information, the two maps of
            SVGImageCache have been merged into one.

            To make this patch easier to review, SVGImageCache still exists and works similar to
            how it did before the patch. Now, SVGImageCache simply stores the SVGImageForContainers.
            In a followup patch it will be removed.

            Note: the redraw timer of SVGImageCache has been removed because animation
            invalidation is now properly propagated back to the image clients.

        (WebCore):
        (WebCore::SVGImageCache::SVGImageCache):
        (WebCore::SVGImageCache::~SVGImageCache):
        (WebCore::SVGImageCache::removeClientFromCache):
        (WebCore::SVGImageCache::setContainerSizeForRenderer):
        (WebCore::SVGImageCache::imageSizeForRenderer):

            Previously, this function returned the scaled image size which was incorrect. The image
            size is used by clients such as GraphicsContext2D to determine the source size
            for drawing the image. draw() accepts zoomed but not scaled values, so this has been
            changed.

        (WebCore::SVGImageCache::imageForRenderer):

            A FIXME has been added here to not set the scale on every lookup. This can be improved
            by setting the page scale factor in setContainerSizeForRenderer() in a future patch.

        * svg/graphics/SVGImageCache.h:
        (WebCore):
        (SVGImageCache):
        * svg/graphics/SVGImageForContainer.cpp: Added.
        (WebCore):

            SVGImageForContainer is a thin wrapper around an SVG image. The lifetime of the
            SVGImage will be longer than the image cache.

        (WebCore::SVGImageForContainer::size):

            This is the only logic in SVGImageForContainer. The size returned needs to be zoomed
            but not scaled because it is used (e.g., by RenderImage) to pass back into draw() which
            takes zoomed but not scaled values.

        (WebCore::SVGImageForContainer::draw):
        (WebCore::SVGImageForContainer::drawPattern):
        * svg/graphics/SVGImageForContainer.h: Added.
        (WebCore):
        (SVGImageForContainer):

            In a future patch SVGImageForContainer can be made immutable but without a refactoring
            for not setting the page scale factor in SVGImageCache::lookupOrCreateImageForRenderer,
            setters are needed.

        (WebCore::SVGImageForContainer::create):
        (WebCore::SVGImageForContainer::containerSize):
        (WebCore::SVGImageForContainer::pageScale):
        (WebCore::SVGImageForContainer::zoom):
        (WebCore::SVGImageForContainer::setSize):
        (WebCore::SVGImageForContainer::setZoom):
        (WebCore::SVGImageForContainer::setPageScale):
        (WebCore::SVGImageForContainer::SVGImageForContainer):
        (WebCore::SVGImageForContainer::destroyDecodedData):
        (WebCore::SVGImageForContainer::decodedSize):

2013-02-12  Antti Koivisto  <antti@apple.com>

        Avoid updating timer heap when nothing changes
        https://bugs.webkit.org/show_bug.cgi?id=109630

        Reviewed by Andreas Kling.

        When the fire time of a Timer is changed we remove it from the timer heap and reinsert it. This is pretty slow. 
        Turns out that in ~80% of cases we are already in the heap and the insertion position is the same as the 
        original position. We can check if anything is actually going to change before doing this work.
        
        This makes starting a timer ~30% faster in average, ~0.1% progression in PLT3.
        
        * platform/Timer.cpp:
        (TimerHeapLessThanFunction):
        (WebCore::TimerHeapLessThanFunction::operator()):
        (WebCore::parentHeapPropertyHolds):
        (WebCore):
        (WebCore::childHeapPropertyHolds):
        (WebCore::TimerBase::hasValidHeapPosition):
        
            The code here assumes that STL heap is a normal binary heap. If there is a different implementation
            somewhere the assertions will catch it.

        (WebCore::TimerBase::updateHeapIfNeeded):
        
            Skip updating the heap if it is already valid.

        (WebCore::TimerBase::setNextFireTime):
        * platform/Timer.h:
        (TimerBase):

2013-02-13  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove remaining dead code from the GLib unicode backend
        https://bugs.webkit.org/show_bug.cgi?id=109707

        Reviewed by Philippe Normand.

        * platform/KURL.cpp:
        (WebCore::appendEncodedHostname):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):

2013-02-13  Xianzhu Wang  <wangxianzhu@chromium.org>

        Heap-use-after-free in WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects
        https://bugs.webkit.org/show_bug.cgi?id=108695

        See comments of RenderLayerModelObject::willBeDestroyed() below for details.

        Reviewed by Abhishek Arya.

        Test: ManulTests/scrolling-coordinator-viewport-constrained-crash.html
        Unable to write a normal layout test because
        1) must waitUntilDone() to reproduce the crash but the redirected URL can't notifyDone();
        2) Can't use a frame to contain the test because ScrollingCoordinator handles only the main frame.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::willBeDestroyed): Moved removeViewportConstrainedObject() call into RenderLayerModelObject::willBeDestroyed() because only RenderLayerModelObjects can be added as viewportConstrainedObjects.
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::willBeDestroyed): Changed this->view() (then view->frameView()) to this->frame() (then frame->view()) because when willBeDestroyed() is called, the document has set its renderView to 0 thus this->view() will return 0, causing removeViewportConstrainedObject() not called and a deleted RenderLayerModelObject in FrameView's viewportConstrainedObjects.

2013-02-13  Florin Malita  <fmalita@chromium.org>

        [SVG] OOB access in SVGListProperty::replaceItemValues()
        https://bugs.webkit.org/show_bug.cgi?id=109293

        Replacing a list property item with itself should be a no-op. This patch updates the related
        APIs and logic to detect the self-replace case and prevent removal of the item from the list.

        To avoid scanning the list multiple times, removeItemFromList() is updated to operate on
        indices and a findItem() method is added to resolve an item to an index.

        Reviewed by Dirk Schulze.

        No new tests: updated existing tests cover the change.

        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::findItem):
        (SVGAnimatedListPropertyTearOff):
        (WebCore::SVGAnimatedListPropertyTearOff::removeItemFromList):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::findItem):
        (SVGAnimatedPathSegListPropertyTearOff):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::removeItemFromList):
        Add a findItem() delegating method, and update removeItemFromList() to use the new
        index-based API.

        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::insertItemBeforeValues):
        (WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
        (WebCore::SVGListProperty::replaceItemValues):
        (WebCore::SVGListProperty::replaceItemValuesAndWrappers):
        (SVGListProperty):
        Updated to handle the no-op case for insertItemBefore() & replaceItem().

        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::findItem):
        (WebCore::SVGListPropertyTearOff::removeItemFromList):
        Index-based API updates.

        (WebCore::SVGListPropertyTearOff::processIncomingListItemValue):
        (WebCore::SVGListPropertyTearOff::processIncomingListItemWrapper):
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemValue):
        Detect the self-replace case and return without removing the item from the list.

        * svg/properties/SVGPathSegListPropertyTearOff.h:
        (WebCore::SVGPathSegListPropertyTearOff::findItem):
        (WebCore::SVGPathSegListPropertyTearOff::removeItemFromList):
        (SVGPathSegListPropertyTearOff):
        (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemWrapper):
        * svg/properties/SVGStaticListPropertyTearOff.h:
        (WebCore::SVGStaticListPropertyTearOff::processIncomingListItemValue):
        (WebCore::SVGStaticListPropertyTearOff::processIncomingListItemWrapper):
        Index-based API updates.

2013-02-13  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] StyleResolver::State should have methods to access its member variables.
        https://bugs.webkit.org/show_bug.cgi?id=108563

        Reviewed by Antti Koivisto.

        Made all member variables private and added methods to access the
        variables, because most of the member variables are read-only.
        We don't need to update those read-only variables while resolving
        styles.

        No new tests, because just refactoring.

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::styleSharingCandidateMatchesHostRules):
        (WebCore::StyleResolver::matchHostRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::sortMatchedRules):
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::State::initElement):
        (WebCore::StyleResolver::initElement):
        Modified to invoke m_state.initElement if a given element is
        different from current m_state's element.
        (WebCore::StyleResolver::State::initForStyleResolve):
        Moved from StyleResolver.
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::canShareStyleWithControl):
        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        (WebCore::StyleResolver::pseudoStyleForElement):
        Changed ASSERT in the first line. ASSERT(m_state.parentStyle) would be
        wrong, because it depends on previous resolving. However,
        initForStyleResolve will also update m_state.parentStyle. No code in
        pseudoStyleForElement depends on previous resolving state.
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::defaultStyleForElement):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::updateFont):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::ruleMatches):
        Added one more parameter, dynamicPseudo, because dynamicPseudo in
        State class is just used for returning matched pseudo style from
        this ruleMatches to collectMatchingRulesForList. No need to keep
        dynamicPseudo while resolving styles.
        (WebCore::StyleResolver::checkRegionSelector):
        Removed m_pseudoStyle = NOPSEUDO, because this method uses just
        SelectorChecker::matched. SelectorChecker doesn't see StyleResolver's
        m_pseudoStyle directly. Need to use SelectorCheckerContext. So no
        need to set m_pseudoStyle to be NOPSEUDO.
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::isLeftPage):
        (WebCore::StyleResolver::applyPropertyToStyle):
        (WebCore::StyleResolver::useSVGZoomRules):
        (WebCore::createGridTrackBreadth):
        (WebCore::StyleResolver::resolveVariables):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::cachedOrPendingFromValue):
        (WebCore::StyleResolver::generatedOrPendingFromValue):
        (WebCore::StyleResolver::setOrPendingFromValue):
        (WebCore::StyleResolver::cursorOrPendingFromValue):
        (WebCore::StyleResolver::checkForTextSizeAdjust):
        (WebCore::StyleResolver::initializeFontStyle):
        (WebCore::StyleResolver::setFontSize):
        (WebCore::StyleResolver::colorFromPrimitiveValue):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::cachedOrPendingStyleShaderFromValue):
        (WebCore::StyleResolver::loadPendingShaders):
        (WebCore::StyleResolver::parseCustomFilterTransformParameter):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::loadPendingImage):
        (WebCore::StyleResolver::loadPendingImages):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::style):
        (WebCore::StyleResolver::parentStyle):
        (WebCore::StyleResolver::rootElementStyle):
        (WebCore::StyleResolver::element):
        (WebCore::StyleResolver::hasParentNode):
        (StyleResolver):
        (WebCore::StyleResolver::State::State):
        (State):
        (WebCore::StyleResolver::State::clear):
        Modified to use clear at the end of styleForElement.
        (WebCore::StyleResolver::State::document):
        (WebCore::StyleResolver::State::element):
        (WebCore::StyleResolver::State::styledElement):
        (WebCore::StyleResolver::State::setStyle):
        (WebCore::StyleResolver::State::style):
        (WebCore::StyleResolver::State::takeStyle):
        (WebCore::StyleResolver::State::ensureRuleList):
        (WebCore::StyleResolver::State::takeRuleList):
        (WebCore::StyleResolver::State::parentNode):
        (WebCore::StyleResolver::State::setParentStyle):
        (WebCore::StyleResolver::State::parentStyle):
        (WebCore::StyleResolver::State::rootElementStyle):
        (WebCore::StyleResolver::State::regionForStyling):
        (WebCore::StyleResolver::State::setSameOriginOnly):
        (WebCore::StyleResolver::State::isSameOriginOnly):
        (WebCore::StyleResolver::State::pseudoStyle):
        (WebCore::StyleResolver::State::elementLinkState):
        (WebCore::StyleResolver::State::distributedToInsertionPoint):
        (WebCore::StyleResolver::State::setElementAffectedByClassRules):
        (WebCore::StyleResolver::State::elementAffectedByClassRules):
        (WebCore::StyleResolver::State::setApplyPropertyToRegularStyle):
        (WebCore::StyleResolver::State::setApplyPropertyToVisitedLinkStyle):
        (WebCore::StyleResolver::State::applyPropertyToRegularStyle):
        (WebCore::StyleResolver::State::applyPropertyToVisitedLinkStyle):
        (WebCore::StyleResolver::State::pendingImageProperties):
        (WebCore::StyleResolver::State::pendingSVGDocuments):
        (WebCore::StyleResolver::State::setHasPendingShaders):
        (WebCore::StyleResolver::State::hasPendingShaders):
        (WebCore::StyleResolver::State::setLineHeightValue):
        (WebCore::StyleResolver::State::lineHeightValue):
        (WebCore::StyleResolver::State::setFontDirty):
        (WebCore::StyleResolver::State::fontDirty):
        (WebCore::StyleResolver::State::cacheBorderAndBackground):
        (WebCore::StyleResolver::State::hasUAAppearance):
        (WebCore::StyleResolver::State::borderData):
        (WebCore::StyleResolver::State::backgroundData):
        (WebCore::StyleResolver::State::backgroundColor):
        (WebCore::StyleResolver::State::fontDescription):
        (WebCore::StyleResolver::State::parentFontDescription):
        (WebCore::StyleResolver::State::setFontDescription):
        (WebCore::StyleResolver::State::setZoom):
        (WebCore::StyleResolver::State::setEffectiveZoom):
        (WebCore::StyleResolver::State::setTextSizeAdjust):
        (WebCore::StyleResolver::State::setWritingMode):
        (WebCore::StyleResolver::State::setTextOrientation):
        fontDescription, ... and setTextOrientation were moved from
        StyleResolver.
        (WebCore::StyleResolver::State::matchedRules):
        (WebCore::StyleResolver::State::addMatchedRule):
        Moved from StyleResolver.
        (WebCore::StyleResolver::applyPropertyToRegularStyle):
        (WebCore::StyleResolver::applyPropertyToVisitedLinkStyle):
        (WebCore::StyleResolver::fontDescription):
        (WebCore::StyleResolver::parentFontDescription):
        (WebCore::StyleResolver::setFontDescription):
        (WebCore::StyleResolver::setZoom):
        (WebCore::StyleResolver::setEffectiveZoom):
        (WebCore::StyleResolver::setTextSizeAdjust):
        (WebCore::StyleResolver::setWritingMode):
        (WebCore::StyleResolver::setTextOrientation):
        These fontDescription, ..., setTextOrientation are wrappers to
        invoke State's methods. StyleBuilder still depends on StyleResolver
        and invokes these methods. So we need these wrappers.

2013-02-13  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] window.open passes height and width parameters even if not defined in a page
        https://bugs.webkit.org/show_bug.cgi?id=107705

        Reviewed by Kenneth Rohde Christiansen.

        Do not override width or height of 0, as that indicates default size, and not minimum size.

        Tested by tst_qwebpage.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::adjustWindowRect):

2013-02-13  Rashmi Shyamasundar  <rashmi.s2@samsung.com>

        The 2D Canvas functions fillText()/strokeText() should display nothing when maxWidth is less then or equal to zero
        https://bugs.webkit.org/show_bug.cgi?id=102656

        Reviewed by Dirk Schulze.

        The functions fillText()/strokeText() should not display anything when 
        maxWidth is less than or equal to zero, according to spec :
        http://www.w3.org/TR/2dcontext/#text-preparation-algorithm

        Test: fast/canvas/canvas-fillText-maxWidth-zero.html

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

2013-02-13  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK][AC] Implement basic transform animations with clutter ac backend
        https://bugs.webkit.org/show_bug.cgi?id=109363

        Reviewed by Gustavo Noronha Silva.

        Implement basic transform animation with clutter ac backend.
        GraphicsLayerClutter is almost same with GraphicsLayerCA. And PlatformClutterAnimation
        interfaces are also similar with PlatformCAAnimation, but they are implemented
        with native clutter APIs. Clutter backend AC supports a basic single transform animation
        with this patch now, but additive animation combination and keyframe animation
        are not supported yet.

        Covered by existing animation tests.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorSetTransform):
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::isTransformTypeTransformationMatrix):
        (WebCore):
        (WebCore::isTransformTypeFloatPoint3D):
        (WebCore::isTransformTypeNumber):
        (WebCore::getTransformFunctionValue):
        (WebCore::getValueFunctionNameForTransformOperation):
        (WebCore::GraphicsLayerClutter::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerClutter::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerClutter::createTransformAnimationsFromKeyframes):
        * platform/graphics/clutter/GraphicsLayerClutter.h:
        (GraphicsLayerClutter):
        * platform/graphics/clutter/PlatformClutterAnimation.cpp:
        (WebCore::toClutterActorPropertyString):
        (WebCore):
        (WebCore::PlatformClutterAnimation::supportsValueFunction):
        (WebCore::PlatformClutterAnimation::duration):
        (WebCore::PlatformClutterAnimation::setDuration):
        (WebCore::PlatformClutterAnimation::setAdditive):
        (WebCore::PlatformClutterAnimation::valueFunction):
        (WebCore::PlatformClutterAnimation::setValueFunction):
        (WebCore::PlatformClutterAnimation::setFromValue):
        (WebCore::PlatformClutterAnimation::setToValue):
        (WebCore::PlatformClutterAnimation::timeline):
        (WebCore::PlatformClutterAnimation::addClutterTransitionForProperty):
        (WebCore::PlatformClutterAnimation::addOpacityTransition):
        (WebCore::PlatformClutterAnimation::addTransformTransition):
        (WebCore::PlatformClutterAnimation::addAnimationForKey):
        * platform/graphics/clutter/PlatformClutterAnimation.h:
        (PlatformClutterAnimation):

2013-02-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: reportLeaf method doesn't report the leaf node properly.
        https://bugs.webkit.org/show_bug.cgi?id=109554

        In some cases leaves have no pointer so with the old schema we can't generate nodeId for them because we
        can't insert 0 into hashmap. It happens when we call addPrivateBuffer method.

        Drive by fix: I introduced a client interface for the HeapGraphSerializer.
        It helps me to do the tests for the serializer.

        Reviewed by Yury Semikhatsky.

        It is covered by newly added tests in TestWebKitAPI.

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::pushUpdate):
        (WebCore::HeapGraphSerializer::reportNode):
        (WebCore::HeapGraphSerializer::toNodeId):
        (WebCore::HeapGraphSerializer::addRootNode):
        * inspector/HeapGraphSerializer.h:
        (HeapGraphSerializer):
        (Client):
        (WebCore::HeapGraphSerializer::Client::~Client):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionImpl):

2013-02-13  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add experimental native heap graph to Timeline panel
        https://bugs.webkit.org/show_bug.cgi?id=109687

        Reviewed by Alexander Pavlov.

        Added experimentatl support for native heap graph on the Timeline panel.
        Native memory usage data is collected after each top level task and can
        be displayed instead of DOM counters graph on the Timeline panel if
        corresponding experiment is enabled in the inspector settings.

        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorTimelineAgent.cpp:
        (TimelineAgentState):
        (WebCore::InspectorTimelineAgent::setIncludeDomCounters):
        (WebCore):
        (WebCore::InspectorTimelineAgent::setIncludeNativeMemoryStatistics):
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setDOMCounters):
        (WebCore::InspectorTimelineAgent::setNativeHeapStatistics):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore):
        (WebCore::InspectorTimelineAgent::create):
        (InspectorTimelineAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics):
        * inspector/front-end/NativeMemoryGraph.js:
        (WebInspector.NativeMemoryGraph):
        (WebInspector.NativeMemoryGraph.prototype._onRecordAdded.addStatistics):
        (WebInspector.NativeMemoryGraph.prototype._onRecordAdded):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/TimelinePanel.js:

2013-02-13  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Fixed colorpicker editing and scrolling.
        https://bugs.webkit.org/show_bug.cgi?id=109434.

        Reviewed by Alexander Pavlov.

        The color picker scrolling logic relied on the fixed DOM structure which changed with the introduction of
        SidebarPaneStack (https://bugs.webkit.org/show_bug.cgi?id=108183).
        Added a special CSS class to mark the scroll target.

        No new tests.

        * inspector/front-end/SplitView.js:
        (WebInspector.SplitView):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane):
 
2013-02-13  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix js compilation warnings in TextPrompt
        https://bugs.webkit.org/show_bug.cgi?id=109685

        Reviewed by Alexander Pavlov.

        Mark last argument of _applySuggestion function as optional.

        No new tests: no change in behaviour.

        * inspector/front-end/TextPrompt.js:

2013-02-13  Pablo Flouret  <pablof@motorola.com>

        Implement css-conditional's CSS.supports()
        https://bugs.webkit.org/show_bug.cgi?id=100324

        Reviewed by Antti Koivisto.

        http://dev.w3.org/csswg/css3-conditional/#the-css-interface

        The supports() method provides the css @supports rule's corresponding
        dom api.
        The patch also adds the CSS interface on DOMWindow, which holds "useful
        CSS-related functions that do not belong elsewhere". This is where
        supports() lives.

        Test: css3/supports-dom-api.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction):
            Add DOMWindowCSS.* to the build systems.

        * bindings/scripts/CodeGenerator.pm:
        (WK_lcfirst):
            Handle CSS prefixes correctly (s/cSS/css/).

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSupportsCondition):
        (WebCore::CSSParser::detectAtToken):
        * css/CSSParser.h:
            webkit_supports_condition parses just the condition part of an
            @supports rule and evaluates it, outputting whether the condition
            is supported or not.

        * css/CSSAllInOne.cpp:
        * css/DOMWindowCSS.cpp: Added.
        * css/DOMWindowCSS.h: Added.
        * css/DOMWindowCSS.idl: Added.
            The CSS interface object.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::css):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
            window.CSS

2013-02-13  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Simplify SplitView to rely more on CSS
        https://bugs.webkit.org/show_bug.cgi?id=109426

        Reviewed by Vsevolod Vlasov.

        Simplified Javascript code by moving large part of the layout logic into CSS rules. The patch is larger than it
        should be because one of the clients (TimelinePanel) is breaking SplitView incapsulation by reparenting its
        resizer.

        No new tests.

        * inspector/front-end/SidebarView.js:
        (WebInspector.SidebarView):
        * inspector/front-end/SplitView.js:
        (WebInspector.SplitView):
        (WebInspector.SplitView.prototype._innerSetVertical):
        (WebInspector.SplitView.prototype.setSecondIsSidebar):
        (WebInspector.SplitView.prototype._showOnly):
        (WebInspector.SplitView.prototype._removeAllLayoutProperties):
        * inspector/front-end/TimelinePanel.js:
        * inspector/front-end/cssNamedFlows.css:
        (.css-named-flow-collections-view .split-view-sidebar):
        (.css-named-flow-collections-view .split-view-sidebar .sidebar-content):
        (.css-named-flow-collections-view .split-view-sidebar .selection):
        (.css-named-flow-collections-view .split-view-sidebar .named-flow-overflow::before, .css-named-flow-collections-view .region-empty:before, .css-named-flow-collections-view .region-fit::before, .css-named-flow-collections-view .region-overset::before):
        (.css-named-flow-collections-view .split-view-sidebar .named-flow-overflow::before):
        * inspector/front-end/splitView.css:
        (.split-view-contents.maximized):
        (.split-view-vertical .split-view-contents):
        (.split-view-vertical .split-view-contents-first):
        (.split-view-vertical .split-view-contents-first.maximized):
        (.split-view-vertical .split-view-contents-second):
        (.split-view-vertical .split-view-contents-second.maximized):
        (.split-view-horizontal .split-view-contents):
        (.split-view-horizontal .split-view-contents-first):
        (.split-view-horizontal .split-view-contents-first.maximized):
        (.split-view-horizontal .split-view-contents-second):
        (.split-view-horizontal .split-view-contents-second.maximized):
        (.split-view-vertical .split-view-sidebar.split-view-contents-first:not(.maximized)):
        (.split-view-vertical .split-view-sidebar.split-view-contents-second:not(.maximized)):
        (.split-view-horizontal .split-view-sidebar.split-view-contents-first:not(.maximized)):
        (.split-view-horizontal .split-view-sidebar.split-view-contents-second:not(.maximized)):
        (.split-view-vertical .split-view-resizer):
        (.split-view-horizontal .split-view-resizer):
        * inspector/front-end/timelinePanel.css:
        (.timeline.split-view-vertical .split-view-resizer):
        (#timeline-container .split-view-sidebar):

2013-02-13  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r142730.
        http://trac.webkit.org/changeset/142730
        https://bugs.webkit.org/show_bug.cgi?id=109666

        chromium browser tests are failing

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (TestInterfaceV8Internal):
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):

2013-02-13  Tamas Czene  <tczene@inf.u-szeged.hu>

        OpenCL implementation of Flood SVG filters.
        https://bugs.webkit.org/show_bug.cgi?id=109580

        Reviewed by Zoltan Herczeg.

        * Target.pri:
        * platform/graphics/filters/FEFlood.h:
        (FEFlood):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:
        (WebCore):
        (WebCore::PROGRAM_STR):
        (WebCore::FilterContextOpenCL::compileFill):
        (WebCore::FilterContextOpenCL::fill):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.h:
        (WebCore::FilterContextOpenCL::FilterContextOpenCL):
        (FilterContextOpenCL):
        * platform/graphics/gpu/opencl/OpenCLFEFlood.cpp: Added.
        (WebCore):
        (WebCore::FEFlood::platformApplyOpenCL):

2013-02-13  Mike West  <mkwst@chromium.org>

        location.href does not throw SECURITY_ERR when accessed across origins with JSC bindings
        https://bugs.webkit.org/show_bug.cgi?id=43891

        Reviewed by Adam Barth.

        Other browsers (IE, Firefox, and Opera) throw an exception when accessing
        properties of a Location object across origins, as the spec suggests[1].
        WebKit is currently the outlier.

        This has a few negative effects: developers are forced to hack around
        access violations in two ways rather than having a single code path, and
        (more annoyingly) developers are unable to avoid generating the error
        message. See every ad on the internet for the effect on the console. :)

        This patch adds a SECURITY_ERR exception to these access violations,
        which is the first step towards getting rid of the console spam. Getting
        rid of the message entirely will require a solution to
        http://wkbug.com/98050.

        A fairly inconclusive thread[2] on webkit-dev popped up in 2010 and
        trailed off without reaching conclusion. A more recent thread reached
        agreement that this patch seems like a reasonable thing to do[3].

        This is the JSC half of the patch. V8 is coming in http://wkbug.com/43892

        [1]: http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#security-location
        [2]: https://lists.webkit.org/pipermail/webkit-dev/2010-August/013880.html
        [2]: https://lists.webkit.org/pipermail/webkit-dev/2012-February/023636.html

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):

2013-02-13  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed Chromium gyp-file cleanup after glib backend removal.
        https://bugs.webkit.org/show_bug.cgi?id=109672

        Removed references to GLib unicode backend:

        * WebCore.gypi:

2013-02-12  Kentaro Hara  <haraken@chromium.org>

        [V8] Generate wrapper methods for custom getters/setters
        https://bugs.webkit.org/show_bug.cgi?id=109666

        Reviewed by Adam Barth.

        Currently V8 directly calls back custom getters/setters written
        in custom binding files. This makes it impossible for code generators
        to hook custom getters/setters (e.g. Code generators cannot insert a code
        for FeatureObservation into custom getters/setters). We should generate
        wrapper methods for custom getters/setters.

        In the future, I will insert TRACE_EVENT() macros into these wrapper methods
        to profile DOM getters/setters/methods.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrGetter):
        (TestInterfaceV8Internal):
        (WebCore::TestInterfaceV8Internal::supplementalStr3AttrSetter):
        (WebCore):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::customAttrAttrGetter):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::customAttrAttrSetter):
        (WebCore):

2013-02-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142611.
        http://trac.webkit.org/changeset/142611
        https://bugs.webkit.org/show_bug.cgi?id=109668

        Suggest box is not shown anymore when user types "window." in
        inspector console. (Requested by vsevik on #webkit).

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):

2013-02-13  Kentaro Hara  <haraken@chromium.org>

        [V8] There is no XXXConstructor that requires a custom getter
        https://bugs.webkit.org/show_bug.cgi?id=109667

        Reviewed by Adam Barth.

        Currently '[Custom] attribute XXXConstructor xxx' generates
        XXXAttrGetter(). However, there is no XXXConstructor with [Custom].
        In addition, it does make no sense to generate XXXAttrGetter() for such cases.
        We can remove the logic from CodeGeneratorV8.pm.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateSingleBatchedAttribute):

2013-02-12  Hajime Morrita  <morrita@google.com>

        [Internals] setShadowDOMEnabled() shouldn't be used except a few tests.
        https://bugs.webkit.org/show_bug.cgi?id=109642

        Reviewed by Kent Tamura.

        InternalSettings.setShadowDOMEnabled() shouldn't be called after
        any relevant DOM bindings are touched. However for fuzzers, it
        isn't trivial to regulate its behavior.

        This change whitelists the URL of running test for prevent
        unintended API calls. This doesn't hurt the Internals usability
        since the API is called from just a couple of tests and the number
        isn't expected to grow.

        Test: fast/dom/shadow/shadow-dom-enabled-flag-whitelist.html

        * testing/InternalSettings.cpp:
        (WebCore::urlIsWhitelisted):
        (WebCore):
        (WebCore::InternalSettings::setShadowDOMEnabled):

2013-02-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce version controller to migrate settings versions.
        https://bugs.webkit.org/show_bug.cgi?id=109553

        Reviewed by Yury Semikhatsky.

        This patch introduces version controller that could be used to migrate inspector settings.

        Test: inspector/version-controller.html

        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.VersionController):
        (WebInspector.VersionController.prototype.set _methodsToRunToUpdateVersion):
        (WebInspector.VersionController.prototype._updateVersionFrom0To1):
        * inspector/front-end/inspector.js:

2013-02-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the GLib unicode backend
        https://bugs.webkit.org/show_bug.cgi?id=109627

        Reviewed by Benjamin Poulain.

        Remove references to the GLib unicode backend from WebCore.

        * GNUmakefile.list.am: Update the source list.
        * platform/text/gtk/TextBreakIteratorGtk.cpp: Removed.
        * platform/text/gtk/TextCodecGtk.cpp: Removed.
        * platform/text/gtk/TextCodecGtk.h: Removed.

2013-02-12  Chris Fleizach  <cfleizach@apple.com>

         AX: crash when accessing AccessibilityScrollbar after page has been unloaded
         https://bugs.webkit.org/show_bug.cgi?id=109524

         Reviewed by Ryosuke Niwa.

         AX clients can hold onto AccesibilityScrollbar references that reference parent
         AccessibilityScrollViews that have already gone away.

         AccessibilityScrollView is not calling detachFromParent after it is removed, which
         leads to a crash. The fix is to clearChildren() when an object is deallocated.

         I could not create a test because the crash only manifests over multiple page loads.

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

2013-02-12  Hayato Ito  <hayato@chromium.org>

        Use FocusEvent.relatedTarget in {FocusIn,FocusOut,Focus,Blur}EventDispatchMediator.
        https://bugs.webkit.org/show_bug.cgi?id=109650

        Reviewed by Dimitri Glazkov.

        Set FocusEvent.relatedTarget in its constructor so that each
        EventDispatchMediator can use FocusEvent.relatedTarget rather than
        its redundant m_{old,new}FocusedNode member variable.

        I've also removed FIXME comments, mentioning bug 109261, since I
        can not reproduce the issue.

        No new tests. No change in functionality.

        * dom/FocusEvent.cpp:
        (WebCore::FocusEventDispatchMediator::create):
        (WebCore::FocusEventDispatchMediator::FocusEventDispatchMediator):
        (WebCore::FocusEventDispatchMediator::dispatchEvent):
        (WebCore::BlurEventDispatchMediator::create):
        (WebCore::BlurEventDispatchMediator::BlurEventDispatchMediator):
        (WebCore::BlurEventDispatchMediator::dispatchEvent):
        (WebCore::FocusInEventDispatchMediator::create):
        (WebCore::FocusInEventDispatchMediator::FocusInEventDispatchMediator):
        (WebCore::FocusInEventDispatchMediator::dispatchEvent):
        (WebCore::FocusOutEventDispatchMediator::create):
        (WebCore::FocusOutEventDispatchMediator::FocusOutEventDispatchMediator):
        (WebCore::FocusOutEventDispatchMediator::dispatchEvent):
        * dom/FocusEvent.h:
        (FocusEventDispatchMediator):
        (BlurEventDispatchMediator):
        (FocusInEventDispatchMediator):
        (FocusOutEventDispatchMediator):
        * dom/Node.cpp:
        (WebCore::Node::dispatchFocusInEvent):
        (WebCore::Node::dispatchFocusOutEvent):
        (WebCore::Node::dispatchFocusEvent):
        (WebCore::Node::dispatchBlurEvent):

2013-02-12  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] Make SelectorChecker::mode a constructor parameter.
        https://bugs.webkit.org/show_bug.cgi?id=109653

        Reviewed by Dimitri Glazkov.

        No new tests, because just refactoring.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::SelectorChecker):
        Made mode a constructor parameter.
        * css/SelectorChecker.h:
        Removed setMode.
        (SelectorChecker):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::ruleMatches):
        (WebCore::StyleResolver::checkRegionSelector):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQuery::matches):
        (WebCore::SelectorQuery::queryAll):
        (WebCore::SelectorQuery::queryFirst):
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorChecker::ContentSelectorChecker):

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

        Remove Element::ensureAttributeData().
        <http://webkit.org/b/109643>

        Reviewed by Anders Carlsson.

        * dom/Element.h:
        * dom/Element.cpp:
        (WebCore::Element::classAttributeChanged):
        (WebCore::Element::shouldInvalidateDistributionWhenAttributeChanged):

            Use attributeData() instead of ensureAttributeData(), it's already guaranteed to exist in
            both these functions as they are called in response to attribute changes.

        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGAttributes):

            Use mutableAttributeData() instead of ensureAttributeData() when invalidating animated
            SVG attributes. While I can't find any bugs caused by this, an element with property animations
            shouldn't share attribute data with other elements.

2013-02-12  Hayato Ito  <hayato@chromium.org>

        Make {FocusIn,FocusOut,Focus,Blur}EventDispatchMediator type safe.
        https://bugs.webkit.org/show_bug.cgi?id=109561

        Reviewed by Dimitri Glazkov.

        Use FocusEvent rather than Event in {FocusIn,FocusOut,Focus,Blur}EventDispatchMediator.

        No new tests. No change in functionality.

        * dom/FocusEvent.cpp:
        (WebCore::FocusEventDispatchMediator::create):
        (WebCore::FocusEventDispatchMediator::FocusEventDispatchMediator):
        (WebCore::BlurEventDispatchMediator::create):
        (WebCore::BlurEventDispatchMediator::BlurEventDispatchMediator):
        (WebCore::FocusInEventDispatchMediator::create):
        (WebCore::FocusInEventDispatchMediator::FocusInEventDispatchMediator):
        (WebCore::FocusOutEventDispatchMediator::create):
        (WebCore::FocusOutEventDispatchMediator::FocusOutEventDispatchMediator):
        * dom/FocusEvent.h:
        (FocusEventDispatchMediator):
        (WebCore::FocusEventDispatchMediator::event):
        (BlurEventDispatchMediator):
        (WebCore::BlurEventDispatchMediator::event):
        (FocusInEventDispatchMediator):
        (WebCore::FocusInEventDispatchMediator::event):
        (FocusOutEventDispatchMediator):
        (WebCore::FocusOutEventDispatchMediator::event):

2013-02-12  Eric Seidel  <eric@webkit.org>

        Fix HTMLToken::Attribute member naming and update callsites to use Vector-based String functions
        https://bugs.webkit.org/show_bug.cgi?id=109638

        Reviewed by Adam Barth.

        Darin Adler noted in:
        https://bugs.webkit.org/show_bug.cgi?id=109408#c4
        that HTMLToken::Attribute (then MarkupTokenBase::Attribute)
        was a struct, yet incorrectly used m_ for its public members.

        This patch fixes the members to not have the m_, and since I was
        touching all callers, I also updated all callers to use modern
        Vector-based String creation/append functions instead of manually
        calling UChar*, size_t versions.

        There should be no behavior change to this patch.  Where I saw
        performance/memory bugs, I noted them with FIXMEs to keep
        this change simple.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::processTagToken):
        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::publicIdentifier):
        (WebCore::AtomicHTMLToken::systemIdentifier):
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::initializeAttributes):
        * html/parser/CompactHTMLToken.cpp:
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::processMeta):
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::StartTagScanner::processAttributes):
        (WebCore::HTMLPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::processPossibleBaseTag):
        (WebCore::HTMLPreloadScanner::processToken):
        * html/parser/HTMLToken.h:
        (Range):
        (Attribute):
        (WebCore::HTMLToken::clear):
        (WebCore::HTMLToken::startIndex):
        (WebCore::HTMLToken::endIndex):
        (WebCore::HTMLToken::end):
        (WebCore::HTMLToken::nameString):
        (WebCore::HTMLToken::addNewAttribute):
        (WebCore::HTMLToken::beginAttributeName):
        (WebCore::HTMLToken::endAttributeName):
        (WebCore::HTMLToken::beginAttributeValue):
        (WebCore::HTMLToken::endAttributeValue):
        (WebCore::HTMLToken::appendToAttributeName):
        (WebCore::HTMLToken::appendToAttributeValue):
        (WebCore::HTMLToken::eraseValueOfAttribute):
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::AtomicHTMLToken::nameForAttribute):
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::updateTokenizerState):
        * html/parser/XSSAuditor.cpp:
        (WebCore::findAttributeWithName):
        (WebCore::XSSAuditor::filterParamToken):
        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):
        (WebCore::XSSAuditor::eraseAttributeIfInjected):
        (WebCore::XSSAuditor::decodedSnippetForAttribute):

2013-02-12  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix.

        * editing/Editor.h:
        (WebCore::Editor::avoidIntersectionWithDeleteButtonController):

2013-02-12  Nate Chapin  <japhet@chromium.org>

        REGRESSION: Reloading a local file doesn't pick up changes
        https://bugs.webkit.org/show_bug.cgi?id=109344

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/cache/reload-main-resource.php

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        (WebCore::CachedResourceLoader::cachePolicy): Don't use subresourceCachePolicy()
            for main resources.
        * loader/cache/CachedResourceLoader.h:
        (CachedResourceLoader):

2013-02-12  Ryosuke Niwa  <rniwa@webkit.org>

        Turn avoidIntersectionWithNode into Editor member functions to encapsulate delete button controller
        https://bugs.webkit.org/show_bug.cgi?id=109549

        Reviewed by Tony Chang.

        Renamed avoidIntersectionWithNode to Editor::avoidIntersectionWithDeleteButtonController and added trivial
        implementations when delete button controllers are disabled (ENABLE_DELETION_UI is 0).

        * editing/DeleteButtonController.cpp:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        * editing/Editor.cpp:
        (WebCore::Editor::avoidIntersectionWithDeleteButtonController): Moved from htmlediting.cpp and renamed.
        The version that takes VisibleSelection has been updated to use updatePositionForNodeRemoval to share
        mode code with that function.
        (WebCore::Editor::rangeForPoint):
        * editing/Editor.h:
        (WebCore::Editor::avoidIntersectionWithDeleteButtonController): Added; trivial implementations.
        * editing/htmlediting.cpp:
        * editing/htmlediting.h:
        * editing/markup.cpp:
        (WebCore::createMarkupInternal): Extracted from createMarkup.
        (WebCore::createMarkup):

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

        [iOS] Enable PAGE_VISIBILITY_API
        https://bugs.webkit.org/show_bug.cgi?id=109399

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

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

        Move ElementAttributeData into Element.cpp/h
        <http://webkit.org/b/109610>

        Reviewed by Anders Carlsson.

        Removed ElementAttributeData.cpp/h and moved the class itself into Element headquarters.
        In the near future, Element should be the only client of this class, and thus it won't
        be necessary for other classes to know anything about it.

        * dom/ElementAttributeData.cpp: Removed.
        * dom/ElementAttributeData.h: Removed.
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/DocumentSharedObjectPool.cpp:
        * dom/Element.cpp:
        * dom/Element.h:
        * workers/SharedWorker.cpp:
        * Modules/webdatabase/DatabaseManager.cpp: Add ExceptionCode.h since Element.h doesn't pull it in anymore.

2013-02-12  Simon Fraser  <simon.fraser@apple.com>

        Crash when scrolling soon after page starts loading
        https://bugs.webkit.org/show_bug.cgi?id=109631
        <rdar://problem/13157533&13159627&13196727>
        
        Reviewed by Anders Carlsson.
        
        Make the scrolling tree more robust when the root state node,
        and/or scrolling node are null. This can happen if we try to
        handle a wheel event before we've done the first scrolling
        tree commit.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::commit): Handle the case where
        m_rootStateNode is null. We'll still commit, but the state tree
        will have no state nodes.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent): Null-check m_rootNode.
        (WebCore::ScrollingTree::commitNewTreeState): Handle a null root node.
        (WebCore::ScrollingTree::updateTreeFromStateNode): If the rood state node
        is null, just clear the map and null out the root scrolling node.
        * page/scrolling/ScrollingTree.h: m_debugInfoLayer was unused.
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::ensureRootStateNodeForFrameView): It may be possible
        to get here before we've registered the root scroll layer, in which case scrollLayerID()
        will be 0. Assert to see if this can ever happen.
        (WebCore::ScrollingCoordinatorMac::scrollingStateTreeAsText): Handle case of rootStateNode()
        being null.

2013-02-12  Raymond Toy  <rtoy@google.com>

        Synchronize setting of panner node model and processing
        https://bugs.webkit.org/show_bug.cgi?id=109599

        Reviewed by Chris Rogers.

        No new tests.

        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::process):
        (WebCore::PannerNode::setPanningModel):
        * Modules/webaudio/PannerNode.h:

2013-02-12  Dean Jackson  <dino@apple.com>

        Add class name for snapshotted plugin based on dimensions
        https://bugs.webkit.org/show_bug.cgi?id=108369

        Reviewed by Simon Fraser.

        As the size of the plugin changes, the Shadow Root for the snapshot
        might want to toggle different interfaces. Expose "tiny", "small",
        "medium" and "large" classes on the Shadow. (The dimensions are
        currently chosen fairly arbitrarily).

        Because we only know the dimensions after layout, we set up
        a post layout task to add the class. Luckily there already was
        a post layout task for plugins - I just updated it to handle
        both real and snapshotted plugins. This involved modifying
        the list of RenderEmbeddedObjects in FrameView to take generic
        RenderObjects, and decide which type they are when calling
        the update method.

        * html/HTMLPlugInImageElement.cpp: Some new dimensions for the various size thresholds.
        (WebCore::classNameForShadowRootSize): New static function that returns a class name
            after examining the size of the object.
        (WebCore::HTMLPlugInImageElement::updateSnapshotInfo): Sets the class name for
            the shadow root. This is called in the post layout task.
        (WebCore::shouldPlugInShowLabelAutomatically): Use new size names.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Ditto.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): New method updateSnapshotInfo.

        * page/FrameView.cpp:
        (WebCore::FrameView::addWidgetToUpdate): Change RenderEmbeddedObject* to RenderObject*.
        (WebCore::FrameView::removeWidgetToUpdate): Ditto
        (WebCore::FrameView::updateWidget): Branch based on EmbeddedObject vs SnapshottedPlugIn. Call
            plugin snapshot update if necessary.
        (WebCore::FrameView::updateWidgets): Handle both EmbeddedObject and SnapshottedPlugIn cases.
        * page/FrameView.h: Change RenderEmbeddedObject* to RenderObject* for post layout widget updates.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::layout): New virtual override. If size has changed, ask the
            FrameView to recalculate size after layout.
        * rendering/RenderSnapshottedPlugIn.h: New layout() method.

2013-02-12  Mike West  <mkwst@chromium.org>

        Implement script MIME restrictions for X-Content-Type-Options: nosniff
        https://bugs.webkit.org/show_bug.cgi?id=71851

        Reviewed by Adam Barth.

        This patch adds support for 'X-Content-Type-Options: nosniff' when
        deciding whether or not to execute a given chunk of JavaScript. If the
        header is present, script will only execute if it matches a predefined
        set of MIME types[1] that are deemed "executable". Scripts served with
        types that don't match the list will not execute.

        IE introduced this feature, and Gecko is working on an implementation[2]
        now. There's been some discussion on the WHATWG list about formalizing
        the specification for this feature[3], but nothing significant has been
        decided.

        This implementation's list of acceptible MIME types differs from IE's:
        it matches the list of supported JavaScript MIME types defined in
        MIMETypeRegistry::initializeSupportedJavaScriptMIMETypes()[4]. In
        particular, the VBScript types are not accepted, and
        'text/javascript1.{1,2,3}' are accepted, along with 'text/livescript'.

        This feature is locked tightly behind the ENABLE_NOSNIFF flag, which is
        currently only enabled on the Chromium port.

        [1]: http://msdn.microsoft.com/en-us/library/gg622941(v=vs.85).aspx
        [2]: https://bugzilla.mozilla.org/show_bug.cgi?id=471020
        [3]: http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-November/037974.html
        [4]: http://trac.webkit.org/browser/trunk/Source/WebCore/platform/MIMETypeRegistry.cpp?rev=142086#L307

        Tests: http/tests/security/contentTypeOptions/invalid-content-type-options-allowed.html
               http/tests/security/contentTypeOptions/nosniff-script-allowed.html
               http/tests/security/contentTypeOptions/nosniff-script-blocked.html
               http/tests/security/contentTypeOptions/nosniff-script-without-content-type-allowed.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeScript):
            Before executing script, ensure that it shouldn't be blocked due to
            its MIME type. If it is blocked, write an error message to the
            console.
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::mimeType):
            Make scripts' MIME type available outside the context of
            CachedScript in order to correctly populate error messages we write
            to the console in ScriptElement::executeScript
        (WebCore):
        (WebCore::CachedScript::mimeTypeAllowedByNosniff):
        * loader/cache/CachedScript.h:
        (CachedScript):
            A new method which checks the resource's HTTP headers to set the
            'nosniff' disposition, and compares the resource's MIME type against
            the list of allowed executable types. Returns true iff the script
            is allowed.
        * platform/network/HTTPParsers.cpp:
        (WebCore):
        (WebCore::parseContentTypeOptionsHeader):
        * platform/network/HTTPParsers.h:
            Adds a new enum which relates the sniffable status of the resource,
            and a method to parse the HTTP header.

2013-02-12  Adam Barth  <abarth@webkit.org>

        Threaded HTML parser should pass the remaining fast/tokenizer tests
        https://bugs.webkit.org/show_bug.cgi?id=109607

        Reviewed by Eric Seidel.

        This patch fixes some edge cases involving document.write. Previously,
        we would drop input characters on the floor if the tokenizer wasn't
        able to consume them synchronously. In this patch, we send the unparsed
        characters to the background thread for consumption after rewinding the
        input stream.

        * html/parser/BackgroundHTMLInputStream.cpp:
        (WebCore::BackgroundHTMLInputStream::rewindTo):
        * html/parser/BackgroundHTMLInputStream.h:
        (BackgroundHTMLInputStream):
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::resumeFrom):
        * html/parser/BackgroundHTMLParser.h:
        (Checkpoint):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken):
        (WebCore::HTMLDocumentParser::didFailSpeculation):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::finish):
        * html/parser/HTMLInputStream.h:
        (WebCore::HTMLInputStream::closeWithoutMarkingEndOfFile):
        (HTMLInputStream):

2013-02-12  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix for !ENABLE(INSPECTOR) platforms after r142654.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::scriptsEnabled):

2013-02-12  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Remove remaining traces of Web Intents
        https://bugs.webkit.org/show_bug.cgi?id=109586

        Reviewed by Eric Seidel.

        Remove remaining traces of Web Intents as the functionality was
        removed in r142549.

        No new tests, no behavior change for layout tests.

        * GNUmakefile.features.am.in:
        * html/HTMLTagNames.in:

2013-02-12  Robert Hogan  <robert@webkit.org>

        REGRESSION(r136967): Combination of float and clear yields to bad layout
        https://bugs.webkit.org/show_bug.cgi?id=109476

        Reviewed by Levi Weintraub.

        Test: fast/block/margin-collapse/self-collapsing-block-with-float-children.html

        The change made at http://trac.webkit.org/changeset/136967 only needs to worry about the first floated
        child of a self-collapsing block. The ones that follow are not affected by its margins.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace):

2013-02-12  Levi Weintraub  <leviw@chromium.org>

        ASSERTION FAILED: !object || object->isBox(), UNKNOWN in WebCore::RenderListItem::positionListMarker
        https://bugs.webkit.org/show_bug.cgi?id=108699

        Reviewed by Abhishek Arya.

        RenderListItems performs special management of its children to maintain list markers. Splitting a flow
        through a list item results in assumptions made inside RenderListItem failing, so for now, avoid splitting
        flows when inside one.

        Test: fast/multicol/span/list-multi-column-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::containingColumnsBlock):

2013-02-12  Roger Fong  <roger_fong@apple.com>

        Unreviewed Windows build fix.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::Internals):

2013-02-12  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: JavaScript execution disabled by browser/UA should be notified to the front-end
        https://bugs.webkit.org/show_bug.cgi?id=109402

        Reviewed by Yury Semikhatsky.

        Whenever the UA/Browser changes the Script Execution state of a page, it should notify the
        inspector front-end. Added the InspectorInstrumentation method didScriptExecutionStateChange
        to achieve this. Also the state change triggered by the inspector should be ignored to avoid
        infinite loop.

        Test: inspector/script-execution-state-change-notification.html

        * inspector/Inspector.json:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::scriptsEnabledImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::scriptsEnabled):
        (WebCore):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        (WebCore::InspectorPageAgent::scriptsEnabled):
        (WebCore):
        * inspector/InspectorPageAgent.h:
        (InspectorPageAgent):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.PageDispatcher.prototype.javascriptDialogClosed):
        (WebInspector.PageDispatcher.prototype.scriptsEnabled):
        * page/Settings.cpp:
        (WebCore::Settings::setScriptEnabled):

2013-02-12  Antti Koivisto  <antti@apple.com>

        Cache timer heap pointer to timers
        https://bugs.webkit.org/show_bug.cgi?id=109597

        Reviewed by Andreas Kling.

        Accessing timer heap through thread global storage is slow (~0.1% in PLT3). We can cache the heap pointer to
        each TimerBase. There are not huge numbers of timers around so memory is not an issue and many timers are heavily reused.

        * platform/Timer.cpp:
        (WebCore::threadGlobalTimerHeap):
        (WebCore::TimerHeapReference::operator=):
        (WebCore::TimerHeapIterator::checkConsistency):
        (WebCore::TimerBase::TimerBase):
        (WebCore::TimerBase::checkHeapIndex):
        (WebCore::TimerBase::setNextFireTime):
        * platform/Timer.h:
        (WebCore::TimerBase::timerHeap):
        (TimerBase):

2013-02-12  Adam Barth  <abarth@webkit.org>

        BackgroundHTMLParser::resumeFrom should take a struct
        https://bugs.webkit.org/show_bug.cgi?id=109598

        Reviewed by Eric Seidel.

        This patch is purely a syntatic change that paves the way for fixing
        the partial-entity document.write tests. To fix those tests, we'll need
        to pass more information to resumeFrom, but we're hitting the argument
        limits in Functional.h. Rather than adding yet more arguments, this
        patch moves to a single argument that's a struct.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::resumeFrom):
        * html/parser/BackgroundHTMLParser.h:
        (Checkpoint):
        (BackgroundHTMLParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didFailSpeculation):

2013-02-12  Elliott Sprehn  <esprehn@chromium.org>

        rootRenderer in FrameView is really RenderView
        https://bugs.webkit.org/show_bug.cgi?id=109510

        Reviewed by Eric Seidel.

        The global function rootRenderer(FrameView*) is really just a way
        to get the RenderView from the Frame so replace it with a renderView()
        method and replace usage of the word "root" with renderView so it's
        obvious the root we're talking about is the renderView. This is an
        important distinction to make since we also have rootRenderer in the code
        for the documentElement()'s renderer and we also have a "layout root" which
        is entirely different.

        No new tests, just refactoring.

        * page/FrameView.cpp:
        (WebCore::FrameView::rootRenderer): Removed.
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange):
        (WebCore::FrameView::updateCompositingLayersAfterLayout):
        (WebCore::FrameView::clearBackingStores):
        (WebCore::FrameView::restoreBackingStores):
        (WebCore::FrameView::usesCompositedScrolling):
        (WebCore::FrameView::layerForHorizontalScrollbar):
        (WebCore::FrameView::layerForVerticalScrollbar):
        (WebCore::FrameView::layerForScrollCorner):
        (WebCore::FrameView::tiledBacking):
        (WebCore::FrameView::scrollLayerID):
        (WebCore::FrameView::layerForOverhangAreas):
        (WebCore::FrameView::flushCompositingStateForThisFrame):
        (WebCore::FrameView::hasCompositedContent):
        (WebCore::FrameView::enterCompositingMode):
        (WebCore::FrameView::isSoftwareRenderable):
        (WebCore::FrameView::didMoveOnscreen):
        (WebCore::FrameView::willMoveOffscreen):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::embeddedContentBox):
        (WebCore::FrameView::contentsInCompositedLayer):
        (WebCore::FrameView::scrollContentsFastPath):
        (WebCore::FrameView::scrollContentsSlowPath):
        (WebCore::FrameView::maintainScrollPositionAtAnchor):
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::repaintFixedElementsAfterScrolling):
        (WebCore::FrameView::updateFixedElementsAfterScrolling):
        (WebCore::FrameView::visibleContentsResized):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::setNeedsLayout):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateControlTints):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::forceLayoutForPagination):
        (WebCore::FrameView::adjustPageHeightDeprecated):
        (WebCore::FrameView::resetTrackedRepaints):
        (WebCore::FrameView::isVerticalDocument):
        (WebCore::FrameView::isFlippedDocument):
        * page/FrameView.h:
        (WebCore::FrameView::renderView): Added.

2013-02-12  Tomas Popela  <tpopela@redhat.com>

        [GTK][Introspection] GObject bindings for DataTransferItemList - one add() method must be removed from .idl
        https://bugs.webkit.org/show_bug.cgi?id=109180

        Reviewed by Xan Lopez.

        When compiling WebKit with --enable-introspection and generating GObject bindings
        for DataTransferItemList we must disable one add() method, because GObject is
        based on C and C does not allow two functions with the same name.

        No tests needed.

        * bindings/scripts/CodeGeneratorGObject.pm:

2013-02-12  Uday Kiran  <udaykiran@motorola.com>

        Background size width specified in viewport percentage units not working
        https://bugs.webkit.org/show_bug.cgi?id=109536

        Reviewed by Antti Koivisto.

        Corrected the check for viewport percentage unit while calculating
        background image width.

        Test: fast/backgrounds/size/backgroundSize-viewportPercentage-width.html

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

2013-02-12  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::DeleteButtonController::enable
        https://bugs.webkit.org/show_bug.cgi?id=109447

        Reviewed by Ryosuke Niwa.

        RefPtr frame pointer since it can get deleted due to mutation events
        fired inside AppendNodeCommand::doUnapply.

        No new tests. Testcase is hard to minimize due to recursive
        calls with DOMNodeRemovedFromDocument mutation event.

        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::EditCommandComposition::reapply):

2013-02-12  Eric Seidel  <eric@webkit.org>

        Remove HTMLTokenTypes header (and split out AtomicHTMLToken.h from HTMLToken.h)
        https://bugs.webkit.org/show_bug.cgi?id=109525

        Reviewed by Adam Barth.

        We no longer need a separate HTMLTokenTypes class now that NEW_XML is gone.
        However, to remove HTMLTokenTypes, I had to split AtomicHTMLToken.h from
        HTMLToken.h (to fix a circular dependancy).

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addSource):
        * html/parser/AtomicHTMLToken.h: Added.
        (WebCore):
        (AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::create):
        (WebCore::AtomicHTMLToken::forceQuirks):
        (WebCore::AtomicHTMLToken::type):
        (WebCore::AtomicHTMLToken::name):
        (WebCore::AtomicHTMLToken::setName):
        (WebCore::AtomicHTMLToken::selfClosing):
        (WebCore::AtomicHTMLToken::getAttributeItem):
        (WebCore::AtomicHTMLToken::attributes):
        (WebCore::AtomicHTMLToken::characters):
        (WebCore::AtomicHTMLToken::charactersLength):
        (WebCore::AtomicHTMLToken::isAll8BitData):
        (WebCore::AtomicHTMLToken::comment):
        (WebCore::AtomicHTMLToken::publicIdentifier):
        (WebCore::AtomicHTMLToken::systemIdentifier):
        (WebCore::AtomicHTMLToken::clearExternalCharacters):
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::initializeAttributes):
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::simulateTreeBuilder):
        * html/parser/CompactHTMLToken.cpp:
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        * html/parser/CompactHTMLToken.h:
        (WebCore::CompactHTMLToken::type):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertDoctype):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnDocument):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
        (WebCore::HTMLConstructionSite::insertForeignElement):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::isStartTag):
        (WebCore::isStartOrEndTag):
        (WebCore::HTMLPreloadScanner::processToken):
        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::start):
        (WebCore::HTMLSourceTracker::sourceForToken):
        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::HTMLStackItem):
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::clear):
        (WebCore::HTMLToken::isUninitialized):
        (WebCore::HTMLToken::type):
        (WebCore::HTMLToken::makeEndOfFile):
        (WebCore::HTMLToken::data):
        (WebCore::HTMLToken::name):
        (WebCore::HTMLToken::appendToName):
        (WebCore::HTMLToken::forceQuirks):
        (WebCore::HTMLToken::setForceQuirks):
        (WebCore::HTMLToken::beginDOCTYPE):
        (WebCore::HTMLToken::publicIdentifier):
        (WebCore::HTMLToken::systemIdentifier):
        (WebCore::HTMLToken::setPublicIdentifierToEmptyString):
        (WebCore::HTMLToken::setSystemIdentifierToEmptyString):
        (WebCore::HTMLToken::appendToPublicIdentifier):
        (WebCore::HTMLToken::appendToSystemIdentifier):
        (WebCore::HTMLToken::selfClosing):
        (WebCore::HTMLToken::setSelfClosing):
        (WebCore::HTMLToken::beginStartTag):
        (WebCore::HTMLToken::beginEndTag):
        (WebCore::HTMLToken::addNewAttribute):
        (WebCore::HTMLToken::appendToAttributeName):
        (WebCore::HTMLToken::appendToAttributeValue):
        (WebCore::HTMLToken::attributes):
        (WebCore::HTMLToken::eraseValueOfAttribute):
        (WebCore::HTMLToken::ensureIsCharacterToken):
        (WebCore::HTMLToken::characters):
        (WebCore::HTMLToken::appendToCharacter):
        (WebCore::HTMLToken::comment):
        (WebCore::HTMLToken::beginComment):
        (WebCore::HTMLToken::appendToComment):
        (WebCore::HTMLToken::eraseCharacters):
        (HTMLToken):
        * html/parser/HTMLTokenTypes.h: Removed.
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::AtomicHTMLToken::usesName):
        (WebCore::AtomicHTMLToken::usesAttributes):
        (WebCore::HTMLTokenizer::flushBufferedEndTag):
        (WebCore::HTMLTokenizer::nextToken):
        * html/parser/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::saveEndTagNameIfNeeded):
        (WebCore::HTMLTokenizer::haveBufferedCharacterToken):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::processFakeEndTag):
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope):
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):
        (WebCore):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHead):
        (WebCore::HTMLTreeBuilder::defaultForInHead):
        (WebCore::HTMLTreeBuilder::defaultForInHeadNoscript):
        (WebCore::HTMLTreeBuilder::defaultForAfterHead):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        (WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent):
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::updateTokenizerState):
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterToken):
        (WebCore::XSSAuditor::filterScriptToken):
        (WebCore::XSSAuditor::filterObjectToken):
        (WebCore::XSSAuditor::filterParamToken):
        (WebCore::XSSAuditor::filterEmbedToken):
        (WebCore::XSSAuditor::filterAppletToken):
        (WebCore::XSSAuditor::filterIframeToken):
        (WebCore::XSSAuditor::filterMetaToken):
        (WebCore::XSSAuditor::filterBaseToken):
        (WebCore::XSSAuditor::filterFormToken):

2013-02-12  Pablo Flouret  <pablof@motorola.com>

        Handle error recovery in @supports
        https://bugs.webkit.org/show_bug.cgi?id=103934

        Reviewed by Antti Koivisto.

        Tests 021, 024, 031, and 033 in
        http://hg.csswg.org/test/file/5f94e4b03ed9/contributors/opera/submitted/css3-conditional
        fail because there's no explicit error recovery in @support's grammar.
        Opera and Firefox pass the tests.

        No new tests, modified css3/supports{,-cssom}.html

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createSupportsRule):
        (WebCore::CSSParser::markSupportsRuleHeaderEnd):
        (WebCore::CSSParser::popSupportsRuleData):
        * css/CSSParser.h:

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

        [Mac] guard against NULL languages array
        https://bugs.webkit.org/show_bug.cgi?id=109595

        Reviewed by Dean Jackson.

        No new tests, existing tests won't crash if this is correct.

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::preferredLanguages):

2013-02-12  Emil A Eklund  <eae@chromium.org>

        TransformState::move should not round offset to int
        https://bugs.webkit.org/show_bug.cgi?id=108266

        Reviewed by Simon Fraser.
        
        Currently TransformState::move rounds the offset to the nearest
        integer values, this results in operations using TransformState
        to compute a position to misreport the location, specifically
        Element:getBoundingClientRect and repaint rects. Sizes are
        handled correctly and do not have the same problem.

        Tests: fast/sub-pixel/boundingclientrect-subpixel-margin.html
               fast/sub-pixel/clip-rect-box-consistent-rounding.html

        * page/FrameView.cpp:
        (WebCore::FrameView::convertFromRenderer):
        Change to use pixel snapping instead of enclosing box. All other
        code paths use pixelSnappedIntRect to align the rects to device
        pixels however this used enclosingIntRect (indirectly through
        the FloatQuad::enclosingBoundingBox call).
        Without the rounding in TransformState this causes repaint rects
        for elements on subpixel bounds to be too large by up to one
        pixel on each axis. For normal repaints this isn't really a
        problem but in scrollContentsSlowPath it can result in moving
        too large a rect.

        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::translateTransform):
        (WebCore::TransformState::translateMappedCoordinates):
        Change to take a LayoutSize instead of an IntSize.

        (WebCore::TransformState::move):
        (WebCore::TransformState::applyAccumulatedOffset):
        * platform/graphics/transforms/TransformState.h:
        Remove rounding logic and use original, more precise, value.

        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::mapToContainer):
        Remove rounding logic and use original, more precise, value.

2013-02-12  Jessie Berlin  <jberlin@apple.com>

        Rollout r142618, it broke all the Mac builds.

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::pushUpdate):
        (WebCore::HeapGraphSerializer::reportNode):
        (WebCore::HeapGraphSerializer::toNodeId):
        (WebCore::HeapGraphSerializer::addRootNode):
        * inspector/HeapGraphSerializer.h:
        (WebCore):
        (HeapGraphSerializer):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionImpl):

2013-02-12  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] <template> inside of <head> may not create <body> if EOF is hit
        https://bugs.webkit.org/show_bug.cgi?id=109338

        Reviewed by Adam Barth.

        This patch adds the logic to clear the stack of open elements back to the first <template> when EOF
        is hit. This allows a <body> to be generated if the initial <template> was opened inside of <head>.

        Tests added to html5lib.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore):
        (WebCore::HTMLTreeBuilder::popAllTemplates):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        * html/parser/HTMLTreeBuilder.h:
        (HTMLTreeBuilder):

2013-02-12  Dominic Mazzoni  <dmazzoni@google.com>

        ASSERTION FAILED: i < size(), UNKNOWN in WebCore::AccessibilityMenuListPopup::didUpdateActiveOption
        https://bugs.webkit.org/show_bug.cgi?id=109452

        Reviewed by Chris Fleizach.

        Send the accessibility childrenChanged notification in
        HTMLSelectElement::setRecalcListItems instead of in childrenChanged
        so that all possible codepaths are caught.

        Test: accessibility/insert-selected-option-into-select-causes-crash.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::childrenChanged):
        (WebCore::HTMLSelectElement::setRecalcListItems):

2013-02-12  Peter Rybin  <prybin@chromium.org>

        Web Inspector: for event listener provide handler function value in protocol and in UI
        https://bugs.webkit.org/show_bug.cgi?id=109284

        Reviewed by Yury Semikhatsky.

        The feature implies that we include a real handler function value into event listener description.
        Protocol description, inspector DOM agent (with V8 and JSC backends) and front-end is patched accordingly.

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandler):
        (WebCore):
        (WebCore::eventListenerHandlerScriptState):
        * bindings/js/ScriptEventListener.h:
        (WebCore):
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::eventListenerHandler):
        (WebCore):
        (WebCore::eventListenerHandlerScriptState):
        * bindings/v8/ScriptEventListener.h:
        (WebCore):
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.eventListeners):
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update):
        (.):

2013-02-12  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add initial implementation of native memory graph to Timeline
        https://bugs.webkit.org/show_bug.cgi?id=109578

        Reviewed by Alexander Pavlov.

        This change adds inital implementation of native memory graph UI. The graph
        will be shown in the same place as DOM counters graph on the Timeline panel.

        Added NativeMemoryGraph.js that reuses parts of DOM counters graph
        implementation. MemoryStatistics.js was refactor to allow sharing
        more code between DOM counters and native memory graph.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics):
        (WebInspector.MemoryStatistics.prototype._createCurrentValuesBar):
        (WebInspector.MemoryStatistics.prototype._createCounterUIList):
        (WebInspector.MemoryStatistics.prototype._createCounterUIList.getNodeCount):
        (WebInspector.MemoryStatistics.prototype._createCounterUIList.getListenerCount):
        (WebInspector.MemoryStatistics.prototype._canvasHeight):
        (WebInspector.MemoryStatistics.prototype._updateSize):
        (WebInspector.MemoryStatistics.prototype._highlightCurrentPositionOnGraphs):
        (WebInspector.MemoryStatistics.prototype._drawMarker):
        * inspector/front-end/NativeMemoryGraph.js: Added.
        (WebInspector.NativeMemoryGraph):
        (WebInspector.NativeMemoryCounterUI):
        (WebInspector.NativeMemoryCounterUI.prototype._hslToString):
        (WebInspector.NativeMemoryCounterUI.prototype.updateCurrentValue):
        (WebInspector.NativeMemoryCounterUI.prototype.clearCurrentValueAndMarker):
        (WebInspector.NativeMemoryGraph.prototype._createCurrentValuesBar):
        (WebInspector.NativeMemoryGraph.prototype._createCounterUIList.getCounterValue):
        (WebInspector.NativeMemoryGraph.prototype._createCounterUIList):
        (WebInspector.NativeMemoryGraph.prototype._canvasHeight):
        (WebInspector.NativeMemoryGraph.prototype._onRecordAdded.addStatistics):
        (WebInspector.NativeMemoryGraph.prototype._onRecordAdded):
        (WebInspector.NativeMemoryGraph.prototype._draw):
        (WebInspector.NativeMemoryGraph.prototype._clearCurrentValueAndMarker):
        (WebInspector.NativeMemoryGraph.prototype._updateCurrentValue):
        (WebInspector.NativeMemoryGraph.prototype._restoreImageUnderMarker):
        (WebInspector.NativeMemoryGraph.prototype._saveImageUnderMarker):
        (WebInspector.NativeMemoryGraph.prototype._drawMarker):
        (WebInspector.NativeMemoryGraph.prototype._maxCounterValue):
        (WebInspector.NativeMemoryGraph.prototype._resetTotalValues):
        (WebInspector.NativeMemoryGraph.prototype.valueGetter):
        (WebInspector.NativeMemoryGraph.prototype._drawGraph):
        (WebInspector.NativeMemoryGraph.prototype._discardImageUnderMarker):
        * inspector/front-end/TimelinePanel.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/timelinePanel.css:
        (#memory-graphs-canvas-container.dom-counters .resources-dividers):
        (.memory-category-value):

2013-02-12  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: refactor some reusable functionality from BraceHighlighter
        https://bugs.webkit.org/show_bug.cgi?id=109574

        Reviewed by Pavel Feldman.

        New test: inspector/editor/text-editor-brace-highlighter.html

        Extract functionality which, for given line and cursor position, will
        return position for a brace that should be highlighted. Add a layout
        test to verify brace highlighter funcionality.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.BraceHighlightController.prototype.activeBraceColumnForCursorPosition):
        (WebInspector.TextEditorMainPanel.BraceHighlightController.prototype.handleSelectionChange):
        * inspector/front-end/TextUtils.js:
        (WebInspector.TextUtils.isOpeningBraceChar):
        (WebInspector.TextUtils.isClosingBraceChar):
        (WebInspector.TextUtils.isBraceChar):

2013-02-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: reportLeaf method doesn't report the leaf node properly.
        https://bugs.webkit.org/show_bug.cgi?id=109554

        In some cases leaves have no pointer so with the old schema we can't generate nodeId for them because we
        can't insert 0 into hashmap. It happens when we call addPrivateBuffer method.

        Drive by fix: I introduced a client interface for the HeapGraphSerializer.
        It helps me to do the tests for the serializer.

        Reviewed by Yury Semikhatsky.

        It is covered by newly added tests in TestWebKitAPI.

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::pushUpdate):
        (WebCore::HeapGraphSerializer::reportNode):
        (WebCore::HeapGraphSerializer::toNodeId):
        (WebCore::HeapGraphSerializer::addRootNode):
        * inspector/HeapGraphSerializer.h:
        (HeapGraphSerializerClient):
        (WebCore::HeapGraphSerializerClient::~HeapGraphSerializerClient):
        (HeapGraphSerializer):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionImpl):

2013-02-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce version controller to migrate settings versions.
        https://bugs.webkit.org/show_bug.cgi?id=109553

        Reviewed by Yury Semikhatsky.

        This patch introduces version controller that could be used to migrate inspector settings.

        Test: inspector/version-controller.html

        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.VersionController):
        (WebInspector.VersionController.prototype.set _methodsToRunToUpdateVersion):
        (WebInspector.VersionController.prototype._updateVersionFrom0To1):
        * inspector/front-end/inspector.js:

2013-02-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: File system should produce more verbose error messages and recover from errors
        https://bugs.webkit.org/show_bug.cgi?id=109571

        Reviewed by Alexander Pavlov.

        Error handler prints original file system call params now.
        Added callbacks to error handler to recover from errors.

        * inspector/front-end/FileSystemProjectDelegate.js:
        (WebInspector.FileSystemProjectDelegate.prototype.contentCallback):
        (WebInspector.FileSystemProjectDelegate.prototype.searchInFileContent):
        (WebInspector.FileSystemUtils.errorMessage):
        (.fileSystemLoaded):
        (.fileEntryLoaded):
        (.errorHandler):
        (WebInspector.FileSystemUtils.requestFileContent):
        (WebInspector.FileSystemUtils.setFileContent):
        (WebInspector.FileSystemUtils._readDirectory):
        (.innerCallback):
        (WebInspector.FileSystemUtils._requestEntries):

2013-02-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Get rid of unnecessary complexity in FileSystemUtil: remove _getDirectory() method.
        https://bugs.webkit.org/show_bug.cgi?id=109567

        Reviewed by Alexander Pavlov.

        The code in this method was redundant as the same result could be achieved by using File System API directly.

        * inspector/front-end/FileSystemProjectDelegate.js:

2013-02-12  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [SuggestBox] SuggestBox not hidden when prefix is empty and there is preceding input
        https://bugs.webkit.org/show_bug.cgi?id=109568

        Reviewed by Vsevolod Vlasov.

        The suggestbox would get hidden in the case of empty input, yet it should get hidden
        in the case of empty user-entered prefix (which is a wider notion.)

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):

2013-02-12  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: separate SuggestBox from TextPrompt
        https://bugs.webkit.org/show_bug.cgi?id=109430

        Reviewed by Alexander Pavlov.

        Create WebInspector.SuggestBoxDelegate interface and
        refactor TextPrompt to use this interface. Separate SuggestBox into
        WebInspector.SuggestBox namespace and put it into its own file.

        No new tests: no change in behaviour.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/SuggestBox.js: Added.
        (WebInspector.SuggestBoxDelegate):
        (WebInspector.SuggestBoxDelegate.prototype.applySuggestion):
        (WebInspector.SuggestBoxDelegate.prototype.acceptSuggestion):
        (WebInspector.SuggestBoxDelegate.prototype.userEnteredText):
        (WebInspector.SuggestBox):
        (WebInspector.SuggestBox.prototype.get visible):
        (WebInspector.SuggestBox.prototype.get hasSelection):
        (WebInspector.SuggestBox.prototype._onscrollresize):
        (WebInspector.SuggestBox.prototype._updateBoxPositionWithExistingAnchor):
        (WebInspector.SuggestBox.prototype._updateBoxPosition):
        (WebInspector.SuggestBox.prototype._onboxmousedown):
        (WebInspector.SuggestBox.prototype.hide):
        (WebInspector.SuggestBox.prototype.removeFromElement):
        (WebInspector.SuggestBox.prototype._applySuggestion):
        (WebInspector.SuggestBox.prototype.acceptSuggestion):
        (WebInspector.SuggestBox.prototype._selectClosest):
        (WebInspector.SuggestBox.prototype.updateSuggestions):
        (WebInspector.SuggestBox.prototype._onItemMouseDown):
        (WebInspector.SuggestBox.prototype._createItemElement):
        (WebInspector.SuggestBox.prototype._updateItems):
        (WebInspector.SuggestBox.prototype._selectItem):
        (WebInspector.SuggestBox.prototype._canShowBox):
        (WebInspector.SuggestBox.prototype._rememberRowCountPerViewport):
        (WebInspector.SuggestBox.prototype._completionsReady):
        (WebInspector.SuggestBox.prototype.upKeyPressed):
        (WebInspector.SuggestBox.prototype.downKeyPressed):
        (WebInspector.SuggestBox.prototype.pageUpKeyPressed):
        (WebInspector.SuggestBox.prototype.pageDownKeyPressed):
        (WebInspector.SuggestBox.prototype.enterKeyPressed):
        (WebInspector.SuggestBox.prototype.tabKeyPressed):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.userEnteredText):
        (WebInspector.TextPrompt.prototype._attachInternal):
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.prototype.applySuggestion):
        (WebInspector.TextPrompt.prototype._applySuggestion):
        (WebInspector.TextPrompt.prototype.enterKeyPressed):
        (WebInspector.TextPrompt.prototype.upKeyPressed):
        (WebInspector.TextPrompt.prototype.downKeyPressed):
        (WebInspector.TextPrompt.prototype.pageUpKeyPressed):
        (WebInspector.TextPrompt.prototype.pageDownKeyPressed):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2013-02-12  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [TexMap] Apply frames-per-second debug counter to WK1.
        https://bugs.webkit.org/show_bug.cgi?id=109540

        Reviewed by Noam Rosenthal.

        Adds basysKom copyright info to TextureMapperFPSCounter header.

        * platform/graphics/texmap/TextureMapperFPSCounter.cpp:
        * platform/graphics/texmap/TextureMapperFPSCounter.h:

2013-02-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142531.
        http://trac.webkit.org/changeset/142531
        https://bugs.webkit.org/show_bug.cgi?id=109569

        Causes html5lib/run-template layout test to crash. (Requested
        by atwilson_ on #webkit).

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processTemplateEndTag):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        * html/parser/HTMLTreeBuilder.h:
        (HTMLTreeBuilder):

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

        [GTK] Enable CSS image-set support in development builds
        https://bugs.webkit.org/show_bug.cgi?id=109475

        Reviewed by Martin Robinson.

        No new tests - majority of the related tests now passes.

        * GNUmakefile.features.am.in: Add the feature define for the CSS image-set feature
        with the define value defaulting to 0. The value gets overridden with 1 in development
        builds, meaning the feature is enabled under that configuration.

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

        [GTK] Enable DOM4 events constructors in development builds
        https://bugs.webkit.org/show_bug.cgi?id=109471

        Reviewed by Martin Robinson.

        No new tests - the related tests now pass.

        * GNUmakefile.features.am.in: Add the feature define for the DOM4 events
        constructors feature, its value defaulting to 0. This value is overridden
        with 1 in development builds, effectively enabling the feature.

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

        Unreviewed build fix for the GTK port after r142595.
        Adding the TextureMapperFPSCounter files to the list of build targets
        in case of using the OpenGL texture mapper.

        * GNUmakefile.list.am:

2013-02-12  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: fix closure compiler warnings in extension server and API
        https://bugs.webkit.org/show_bug.cgi?id=109563

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ExtensionAPI.js: drive-by: make sure we fail if extensionServer is not defined in outer scope.
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.):
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/externs.js: add extensionServer

2013-02-12  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Unreviewed. Fix !ENABLE(INSPECTOR) builds after r142575

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willDispatchEvent):

2013-02-12  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: move showWhitespace option into experiments
        https://bugs.webkit.org/show_bug.cgi?id=109552

        Reviewed by Vsevolod Vlasov.

        Remove "show whitespace" setting and add it to experiments.

        No new tests: fixed an existing test to verify changes.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.wasShown):
        (WebInspector.TextEditorMainPanel.prototype.willHide):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):

2013-02-12  Tamas Czene  <tczene@inf.u-szeged.hu>

        Add error checking into OpenCL version of SVG filters.
        https://bugs.webkit.org/show_bug.cgi?id=107444

        Reviewed by Zoltan Herczeg.

        In case of an error the program runs through all the remaining filters by doing nothing. 
        After that deletes the results of every filter and starts software rendering.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore):
        (WebCore::FilterEffect::applyAll): At software rendering this is a simple inline methode, but at OpenCL rendering it releases OpenCL things. If we have an error remove filter's results and start software rendering.
        (WebCore::FilterEffect::clearResultsRecursive):
        (WebCore::FilterEffect::openCLImageToImageBuffer):
        (WebCore::FilterEffect::createOpenCLImageResult):
        (WebCore::FilterEffect::transformResultColorSpace):
        * platform/graphics/filters/FilterEffect.h:
        (FilterEffect):
        (WebCore::FilterEffect::applyAll):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:
        (WebCore::FilterContextOpenCL::isFailed):
        (WebCore):
        (WebCore::FilterContextOpenCL::freeResources):
        (WebCore::FilterContextOpenCL::destroyContext):
        (WebCore::FilterContextOpenCL::compileTransformColorSpaceProgram):
        (WebCore::FilterContextOpenCL::openCLTransformColorSpace):
        (WebCore::FilterContextOpenCL::compileProgram):
        (WebCore::FilterContextOpenCL::freeResource):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.h:
        (WebCore::FilterContextOpenCL::FilterContextOpenCL):
        (WebCore::FilterContextOpenCL::setInError):
        (WebCore::FilterContextOpenCL::inError):
        (FilterContextOpenCL):
        (WebCore::FilterContextOpenCL::RunKernel::RunKernel):
        (WebCore::FilterContextOpenCL::RunKernel::addArgument):
        (WebCore::FilterContextOpenCL::RunKernel::run):
        (RunKernel):
        * platform/graphics/gpu/opencl/OpenCLFEColorMatrix.cpp:
        (WebCore::FilterContextOpenCL::compileFEColorMatrix):
        (WebCore::FEColorMatrix::platformApplyOpenCL):
        * platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:
        (WebCore::FilterContextOpenCL::compileFETurbulence):
        (WebCore::FETurbulence::platformApplyOpenCL):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):

2013-02-12  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Apply frames-per-second debug counter to WK1.
        https://bugs.webkit.org/show_bug.cgi?id=109540

        Reviewed by Noam Rosenthal.

        r142524 implemented frames-per-second debug counter on WK2. This patch
        applies frames-per-second debug counter to WK1 also.

        Visual debugging feature, no need for new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperFPSCounter.cpp: Added.
        (WebCore):
        (WebCore::TextureMapperFPSCounter::TextureMapperFPSCounter):
        (WebCore::TextureMapperFPSCounter::updateFPSAndDisplay):
        * platform/graphics/texmap/TextureMapperFPSCounter.h: Added.
        (WebCore):
        (TextureMapperFPSCounter):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore):
        (WebCore::TextureMapperGL::drawNumber):
          Rename from drawRepaintCounter to drawNumber.
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::TextureMapperImageBuffer::drawNumber):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (TextureMapperImageBuffer):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::drawRepaintCounter):
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.cpp:
        (WebCore::CoordinatedBackingStore::drawRepaintCounter):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
          Move frames-per-second debug counter code to TextureMapperFPSCounter.
        (WebCore::CoordinatedGraphicsScene::CoordinatedGraphicsScene):
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebCore::CoordinatedGraphicsScene::paintToGraphicsContext):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:

2013-02-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: stack trace is cut at native bind if inspector is closed
        https://bugs.webkit.org/show_bug.cgi?id=109427

        Reviewed by Pavel Feldman.

        Only top frame is collected instead of full stack trace when inspector
        front-end is closed to avoid expensive operations when exceptions are
        thrown.

        Test: http/tests/inspector-enabled/console-exception-while-no-inspector.html

        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):

2013-02-12  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Mouse click not on sub-fields in multiple fields input  should not move focus
        https://bugs.webkit.org/show_bug.cgi?id=109544

        Reviewed by Kentaro Hara.

        This is similar to Bug 108914, "Should not move focus if the element
        already has focus." We fixed a focus() case in Bug 108914. However we
        still have the problem in a case of focusing by mouse click.

        The fix for Bug 108914 intercepted focus() function to change the
        behavior. However focus-by-click doesn't call focus(), but calls
        FocusController::setFocusedNode. To fix this problem, we introduce
        oldFocusedNode argument to handleFocusEvent, and
        BaseMultipleFieldsDateAndTimeInputType::handleFocusEvent restores the
        focus to oldFocusedNode if oldFocusedNode is one of sub-fields.
        handleFocusEvent is called whenever the focused node is changed.

        We don't need InputType::willCancelFocus any more because the new code
        in handleFocusEvent covers it.

        Tests: Update fast/forms/time-multiple-fields/time-multiple-fields-focus.html.

        * html/HTMLTextFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::handleFocusEvent):
        Add oldFocusedNode argument.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::dispatchFocusEvent):
        Pass oldFocusedNode to handleFocusEvent.

        * html/HTMLInputElement.h:
        (HTMLInputElement):
         - Add oldFocusedNode argument to handleFocusEvent.
         - Remove focus() override.
        * html/HTMLInputElement.cpp: Remove focus() override.
        (WebCore::HTMLInputElement::handleFocusEvent):
        Pass oldFocusedNode to InputType::handleFocusEvent.
        * html/InputType.cpp: Remove willCancelFocus.
        (WebCore::InputType::handleFocusEvent):
        Add oldFocusedNode argument.
        * html/InputType.h:
        (InputType): Ditto.
        * html/PasswordInputType.cpp:
        (WebCore::PasswordInputType::handleFocusEvent): Ditto.
        * html/PasswordInputType.h:
        (PasswordInputType): Ditto.

        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):
        Remove willCancelFocus, and add oldFocusedNode argument to handleFocusEvent.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::handleFocusEvent):
        Pass oldFocusedNode to DateTimeEditElement::focusByOwner if the
        direction is FocusDirectionNone.

        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement): Add oldFocusedNode argument to focusByOwner.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::focusByOwner):
        If oldFocusedNode is one of sub-fields, focus on it again.

2013-02-12  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] Make m_selectorChecker in StyleResolver an on-stack object.
        https://bugs.webkit.org/show_bug.cgi?id=108595

        Reviewed by Eric Seidel.

        StyleResolver uses SelectorChecker's mode to change its resolving mode.
        However it is a state of StyleResolver. StyleResolver should have the
        mode and make SelectorChecker instance on a stack while required.

        No new tests, just refactoring.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::fastCheckRightmostSelector):
        (WebCore::SelectorChecker::fastCheck):
        (WebCore::SelectorChecker::commonPseudoClassSelectorMatches):
        (WebCore::SelectorChecker::matchesFocusPseudoClass):
        Changed to static class function, because these methods never use
        "this".
        (WebCore):
        * css/SelectorChecker.h:
        (SelectorChecker):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::collectMatchingRules):
        Now, matchesFocusPseudoClass is not a static method of
        SelectorChecker, so replaced "m_selectorChecker." with
        "SelectorChecker::".
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        Use m_mode instead of m_selectorChecker.mode().
        Also use document()->inQuirksMode() instead of
        m_selectoChecker.strictParsing().
        (WebCore::StyleResolver::ruleMatches):
        (WebCore::StyleResolver::checkRegionSelector):
        Created an on-stack SelectorChecker object and used it to check
        selectors.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::State):
        Added m_mode, this keeps m_selectorChecker's mode.
        (State):
        (StyleResolver):
        Removed m_selectorChecker.

2013-02-11  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [Qt][EFL][WebGL] Minor refactoring of GraphicsSurface/GraphicsSurfaceGLX
        https://bugs.webkit.org/show_bug.cgi?id=108686

        Reviewed by Noam Rosenthal.

        Remove unused platformSurface()/m_platformSurface from GraphicsSurface.
        Move m_texture from GraphicsSurface to GLX GraphicsSurfacePrivate to match
        Win and Mac implementations.

        No new tests, refactoring only.

        * platform/graphics/surfaces/GraphicsSurface.cpp:
        (WebCore::GraphicsSurface::GraphicsSurface):
        * platform/graphics/surfaces/GraphicsSurface.h:
        (GraphicsSurface):
        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
        (WebCore::GraphicsSurfacePrivate::surface):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::textureID):
        (WebCore::GraphicsSurfacePrivate::clear):
        (WebCore::GraphicsSurface::platformExport):
        (WebCore::GraphicsSurface::platformGetTextureID):
        (WebCore::GraphicsSurface::platformSwapBuffers):
        (WebCore::GraphicsSurface::platformCreate):
        (WebCore::GraphicsSurface::platformImport):
        (WebCore::GraphicsSurface::platformDestroy):

2013-02-11  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [EFL][WebGL] WebGL content is not painted after resizing the viewport.
        https://bugs.webkit.org/show_bug.cgi?id=106358

        Reviewed by Noam Rosenthal.

        When page size changes and layer parameters get updated LayerTreeRenderer::setLayerState
        clears the layer backing store and detaches the canvas surface from the layer. If the layer
        size is not changed then the canvas is not recreated. This leaves the canvas detached from
        the layer, but still referenced from m_surfaceBackingStores.
        Don't assign layer backing store to layer in assignImageBackingToLayer if there is a canvas
        surface already attached to the layer.

        Test: fast/canvas/webgl/webgl-layer-update.html

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerState):
        (WebCore::CoordinatedGraphicsScene::assignImageBackingToLayer):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:

2013-02-11  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Track language selection should be sticky
        https://bugs.webkit.org/show_bug.cgi?id=109466

        Reviewed by Dean Jackson.

        Choosing a text track from the caption menu should make that track's language the
        preferred caption language. Turning captions off from the menu should disable captions
        in videos loaded subsequently.

        OS X has system support for these settings, so changes made by DRT should not change the
        settings on the user's system. Add support for all other ports in DRT only.

        Test: media/track/track-user-preferences.html

        * WebCore.exp.in: Export PageGroup::captionPreferences().

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Use page()->group().captionPreferences().
        (WebCore::HTMLMediaElement::attach): Ditto.
        (WebCore::HTMLMediaElement::detach): Ditto.
        (WebCore::HTMLMediaElement::userPrefersCaptions): Ditto.
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Ditto. Update for 
            preferredLanguageFromList change.
        (WebCore::HTMLMediaElement::toggleTrackAtIndex): Set user prefs for captions visible and
            caption language as appropriate.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler): Remove unneeded comment.
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):  Use page()->group().captionPreferences().

        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::closedCaptionTracksChanged): Update caption menu button visibility.

        * page/CaptionUserPreferences.h:
        (WebCore::CaptionUserPreferences::userPrefersCaptions): Support "testing" mode.
        (WebCore::CaptionUserPreferences::setUserPrefersCaptions): Ditto.
        (WebCore::CaptionUserPreferences::registerForPreferencesChangedCallbacks): Ditto.
        (WebCore::CaptionUserPreferences::unregisterForPreferencesChangedCallbacks): Ditto.
        (WebCore::CaptionUserPreferences::setPreferredLanguage): Ditto.
        (WebCore::CaptionUserPreferences::preferredLanguages): Ditto.
        (WebCore::CaptionUserPreferences::testingMode): Ditto.
        (WebCore::CaptionUserPreferences::setTestingMode): Ditto.
        (WebCore::CaptionUserPreferences::CaptionUserPreferences): Ditto.

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::userPrefersCaptions): Support "testing" mode.
        (WebCore::CaptionUserPreferencesMac::setUserPrefersCaptions): Ditto.
        (WebCore::CaptionUserPreferencesMac::userHasCaptionPreferences): Ditto.
        (WebCore::CaptionUserPreferencesMac::registerForPreferencesChangedCallbacks): Change name from
            registerForCaptionPreferencesChangedCallbacks. Support "testing" mode.
        (WebCore::CaptionUserPreferencesMac::unregisterForPreferencesChangedCallbacks):  Change name from
            unregisterForCaptionPreferencesChangedCallbacks. Support "testing" mode.
        (WebCore::CaptionUserPreferencesMac::captionsStyleSheetOverride): Support "testing" mode.
        (WebCore::CaptionUserPreferencesMac::captionFontSizeScale): Ditto.
        (WebCore::CaptionUserPreferencesMac::setPreferredLanguage): Ditto.
        (WebCore::CaptionUserPreferencesMac::preferredLanguages): Ditto. Return the platform override when set.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::registerForCaptionPreferencesChangedCallbacks): Remove because it is already
            available from the caption preference object.
        (WebCore::PageGroup::unregisterForCaptionPreferencesChangedCallbacks): Ditto.
        (WebCore::PageGroup::userPrefersCaptions): Ditto.
        (WebCore::PageGroup::userHasCaptionPreferences): Ditto.
        (WebCore::PageGroup::captionFontSizeScale): Ditto.
        * page/PageGroup.h:

        * platform/Language.cpp:
        (WebCore::preferredLanguageFromList): Take the list of preferred languages instead of assuming
            the system list.
        * platform/Language.h:

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Disable caption testing mode.
        (WebCore::Internals::Internals): Enable caption testing mode so the user's system
            preferences are not modified.

2013-02-11  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Make CoordinatedGraphicsScene not know contents size.
        https://bugs.webkit.org/show_bug.cgi?id=108922

        Reviewed by Noam Rosenthal.

        Currently, CoordinatedGraphicsScene has two methods to know contents
        size: setContentsSize() and setVisibleContentsRect(). Contents size is
        used when adjusting a scroll position, but adjustment is not needed
        because EFL and Qt platform code (currently PageViewportController)
        already adjusts a scroll position, and it is natural for each platform
        to be in charge of adjusting. So this patch makes CoordinatedGraphicsScene
        not know contents size.

        In addition, now DrawingAreaProxy::coordinatedLayerTreeHostProxy() is only used
        to get CoordinatedGraphicsScene.

        This patch can only be tested manually since there is no automated
        testing facilities for in-motion touch.
        Test: ManualTests/fixed-position.html
              ManualTests/nested-fixed-position.html

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setScrollPositionDeltaIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setScrollPosition):
        (WebCore::CoordinatedGraphicsScene::adjustPositionForFixedLayers):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        (CoordinatedGraphicsScene):

2013-02-11  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: remove the DidChangeScrollPosition message.
        https://bugs.webkit.org/show_bug.cgi?id=108051

        Reviewed by Noam Rosenthal.
        Signed off for WebKit2 by Benjamin Poulain.

        Currently, we use the DidChangeScrollPosition message to send the scroll
        position that WebCore used in this frame to UI Process. We had to have
        some member variables for the DidChangeScrollPosition message.
        However, we can send a scroll position via the DidRenderFrame message,
        because CoordinatedGraphicsScene::m_renderedContentsScrollPosition is
        updated at the moment of flushing. So we can remove the
        DidChangeScrollPosition message and some redundant member variables.

        No tests. No change in behavior.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::flushLayerChanges):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        (CoordinatedGraphicsScene):

2013-02-11  Ryosuke Niwa  <rniwa@webkit.org>

        Disable delete button controller on non-Mac ports and delete EditorClient::shouldShowDeleteInterface
        https://bugs.webkit.org/show_bug.cgi?id=109534

        Reviewed by Anders Carlsson.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::show):
        * editing/Editor.cpp:
        (WebCore):
        * editing/Editor.h:
        (Editor):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::shouldDeleteRange):
        (EmptyEditorClient):
        (WebCore::EmptyEditorClient::shouldShowDeleteInterface):
        * page/EditorClient.h:
        (EditorClient):

2013-02-11  Hayato Ito  <hayato@chromium.org>

        Factor EventContext and introduces MouseOrFocusEventContext.
        https://bugs.webkit.org/show_bug.cgi?id=109278

        Reviewed by Dimitri Glazkov.

        To supoort Touch event retargeting (bug 107800), we have to factor
        event retargeting code so that it can support not only MouseEvent or FocusEvent,
        but also other events.

        This is the first attempt to refactor event retargeting code, a
        separated patch from bug 109156.  EventContext is now factored and
        MouseOrFocusEventContext was introduced to support MouseEvent or
        FocusEvent separately.

        In following patches, I'll introduce TouchEventContext and
        TouchEventDispatchMediator to support Touch event retargeting.

        No new tests. No change in functionality.

        * dom/EventContext.cpp:
        (WebCore::EventContext::EventContext): Factor relatedTarget out from EventContext into MouseOrFocusEventContext.
        (WebCore::EventContext::~EventContext):
        (WebCore):
        (WebCore::EventContext::handleLocalEvents):
        (WebCore::EventContext::isMouseOrFocusEventContext):
        (WebCore::MouseOrFocusEventContext::MouseOrFocusEventContext):  New. Handles MouseEvent's (or FocusEvent's) relatedTarget retargeting.
        (WebCore::MouseOrFocusEventContext::~MouseOrFocusEventContext):
        (WebCore::MouseOrFocusEventContext::handleLocalEvents):
        (WebCore::MouseOrFocusEventContext::isMouseOrFocusEventContext):
        * dom/EventContext.h:
        (EventContext):
        (WebCore::EventContext::node):
        (WebCore::EventContext::target):
        (WebCore::EventContext::currentTargetSameAsTarget):
        (WebCore):
        (MouseOrFocusEventContext):
        (WebCore::MouseOrFocusEventContext::relatedTarget):
        (WebCore::MouseOrFocusEventContext::setRelatedTarget):
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedTargetAdjuster::adjust):
        (WebCore::EventDispatcher::adjustRelatedTarget):
        (WebCore::EventDispatcher::ensureEventPath):  Renamad from ensureEventAncestors. Use the DOM Core terminology.
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventDispatcher::dispatchEventAtCapturing):
        (WebCore::EventDispatcher::dispatchEventAtTarget):
        (WebCore::EventDispatcher::dispatchEventAtBubbling):
        (WebCore::EventDispatcher::dispatchEventPostProcess):
        (WebCore::EventDispatcher::topEventContext):
        * dom/EventDispatcher.h:
        (EventRelatedTargetAdjuster):
        (EventDispatcher):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::eventHasListeners):
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willDispatchEvent):

2013-02-11  peavo@outlook.com  <peavo@outlook.com>

        [Curl] setCookiesFromDOM function does not save cookies to disk.
        https://bugs.webkit.org/show_bug.cgi?id=109285

        Reviewed by Brent Fulgham.

        Write cookies to disk by using the Curl easy api.

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::setCookiesFromDOM):Write cookie to disk.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::getCurlShareHandle): Added method to get Curl share handle.
        (WebCore::ResourceHandleManager::getCookieJarFileName): Added method to get cookie file name.
        * platform/network/curl/ResourceHandleManager.h: Added methods to get cookie file name, and Curl share handle.

2013-02-11  Hayato Ito  <hayato@chromium.org>

        Split each RuleSet and feature out from StyleResolver into its own class.
        https://bugs.webkit.org/show_bug.cgi?id=107777

        Reviewed by Dimitri Glazkov.

        Re-landing r141964, which was reverted in r141973, since r141964 seem to be innocent.

        No tests. No change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/DocumentRuleSets.cpp: Added.
        (WebCore):
        (WebCore::DocumentRuleSets::DocumentRuleSets):
        (WebCore::DocumentRuleSets::~DocumentRuleSets):
        (WebCore::DocumentRuleSets::initUserStyle): New helper to initialize each RuleSets.
        (WebCore::DocumentRuleSets::collectRulesFromUserStyleSheets): Factored out from StyleResolver.
        (WebCore::makeRuleSet): Ditto.
        (WebCore::DocumentRuleSets::resetAuthorStyle): Ditto.
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets): Ditto.
        (WebCore::DocumentRuleSets::collectFeatures): Ditto.
        (WebCore::DocumentRuleSets::reportMemoryUsage): New methods to report memory usage. Factored out from StyleResolver.
        * css/DocumentRuleSets.h: Added.
        (WebCore):
        (DocumentRuleSets):
        (WebCore::DocumentRuleSets::authorStyle): Moved from StyleResolver.
        (WebCore::DocumentRuleSets::userStyle): Ditto.
        (WebCore::DocumentRuleSets::features): Ditto.
        (WebCore::DocumentRuleSets::sibling): Ditto.
        (WebCore::DocumentRuleSets::uncommonAttribute): Ditto.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::appendAuthorStyleSheets): Now calls DocumentRuleSets::appendAuthorStyleSheets.
        (WebCore::StyleResolver::matchAuthorRules): Use m_ruleSets.
        (WebCore::StyleResolver::matchUserRules): Ditto.
        (WebCore::StyleResolver::classNamesAffectedByRules): Ditto.
        (WebCore::StyleResolver::locateCousinList): Ditto.
        (WebCore::StyleResolver::canShareStyleWithElement): Ditto.
        (WebCore::StyleResolver::locateSharedStyle): Ditto.
        (WebCore::StyleResolver::styleForPage): Ditto.
        (WebCore::StyleResolver::checkRegionStyle): Ditto.
        (WebCore::StyleResolver::applyProperty): Ditto.
        (WebCore::StyleResolver::reportMemoryUsage): Now calls DocumentRuleSets::reportMemoryUsage.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::scopeResolver):
        (StyleResolver):
        (WebCore::StyleResolver::ruleSets): accessor r to DocumentRuleSets.
        (WebCore::StyleResolver::usesSiblingRules): Use m_ruleSets.
        (WebCore::StyleResolver::usesFirstLineRules): Ditto.
        (WebCore::StyleResolver::usesBeforeAfterRules): Ditto.
        (WebCore::StyleResolver::hasSelectorForAttribute): Ditto.
        (WebCore::StyleResolver::hasSelectorForClass): Ditto.
        (WebCore::StyleResolver::hasSelectorForId): Ditto.
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):

2013-02-11  Keishi Hattori  <keishi@webkit.org>

        REGRESSION (r140778):Calendar Picker buttons are wrong when rtl
        https://bugs.webkit.org/show_bug.cgi?id=109158

        Reviewed by Kent Tamura.

        The calendar picker button's icon and position where wrong when rtl.


        Test: platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ar.html

        * Resources/pagepopups/calendarPicker.css:
        (.year-month-button-left .year-month-button): Use -webkit-margin-end so the margin is applide to the right side.
        (.year-month-button-right .year-month-button): Use -webkit-margin-start so the margin is applide to the right side.
        (.today-clear-area .today-button): Use -webkit-margin-end so the margin is applide to the right side.
        * Resources/pagepopups/calendarPicker.js:
        (YearMonthController.prototype._attachLeftButtonsTo): Flip icon image when rtl.
        (YearMonthController.prototype._attachRightButtonsTo): Ditto.

2013-02-11  KwangYong Choi  <ky0.choi@samsung.com>

        REGRESSION (r142549): Remove web intents code
        https://bugs.webkit.org/show_bug.cgi?id=109532

        Reviewed by Nico Weber.

        Remove remaning code related to web intents.

        No new tests, no change on behavior.

        * UseJSC.cmake:
        * bindings/js/JSIntentConstructor.cpp: Removed.

2013-02-11  Kenneth Russell  <kbr@google.com>

        Add temporary typedef to ANGLEWebKitBridge to support incompatible API upgrade
        https://bugs.webkit.org/show_bug.cgi?id=109127

        Reviewed by Dean Jackson.

        No new tests. Built and tested WebKit and Chromium with this change.

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore):
            Define temporary typedef spanning int -> size_t change.
        (WebCore::getValidationResultValue):
        (WebCore::getSymbolInfo):
            Use temporary typedef.

2013-02-11  Kentaro Hara  <haraken@chromium.org>

        [V8] ScheduledAction::m_context can be empty, so we shouldn't
        retrieve an Isolate by using m_context->GetIsolate()
        https://bugs.webkit.org/show_bug.cgi?id=109523

        Reviewed by Adam Barth.

        Chromium bug: https://code.google.com/p/chromium/issues/detail?id=175307#makechanges

        Currently ScheduledAction is retrieving an Isolate by using m_context->GetIsolate().
        This can crash because ScheduledAction::m_context can be empty. Specifically,
        ScheduledAction::m_context is set to ScriptController::currentWorldContext(),
        which can return an empty handle when a frame does not exist. In addition,
        'if(context.IsEmpty())' in ScheduledAction.cpp implies that it can be empty.

        Alternately, we should pass an Isolate explicitly when a ScheduledAction is instantiated.

        No tests. The Chromium crash report doesn't provide enough information
        to reproduce the bug.

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore):
        (WebCore::ScheduledAction::~ScheduledAction):
        * bindings/v8/ScheduledAction.h:
        (ScheduledAction):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):

2013-02-11  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Build fix: r142549 broke EFL build
        https://bugs.webkit.org/show_bug.cgi?id=109527

        Reviewed by Kentaro Hara.

        No new tests, no change on behavior.

        * CMakeLists.txt:

2013-02-11  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r142520?): Space no longer scrolls the page
        https://bugs.webkit.org/show_bug.cgi?id=109526

        Reviewed by Tim Horton.

        ScrollingTree::updateTreeFromStateNode() used to bail early when it had
        no children (no fixed or sticky elements), but that left updateAfterChildren()
        uncalled. Fix by always calling updateAfterChildren(), which updates the scroll
        position.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):

2013-02-11  Tim Horton  <timothy_horton@apple.com>

        Remove extra early-return in FrameView::setScrollPosition

        Rubber-stamped by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::setScrollPosition):

2013-02-11  Arko Saha  <arko@motorola.com>

        [Microdata] Fix crash after r141034 in chromuim port
        https://bugs.webkit.org/show_bug.cgi?id=109514

        Reviewed by Ryosuke Niwa.

        Added V8SkipVTableValidation extended attribute to skip
        VTable validation check for DOMSettableTokenList interface.

        This patch fixes below test failures:
        Tests: fast/dom/MicroData/domsettabletokenlist-attributes-add-token.html
               fast/dom/MicroData/domsettabletokenlist-attributes-out-of-range-index.html
               fast/dom/MicroData/element-with-empty-itemprop.html
               fast/dom/MicroData/itemprop-add-remove-tokens.html
               fast/dom/MicroData/itemprop-for-an-element-must-be-correct.html
               fast/dom/MicroData/itemprop-must-be-read-only.html
               fast/dom/MicroData/itemprop-reflected-by-itemProp-property.html
               fast/dom/MicroData/itemref-add-remove-tokens.html
               fast/dom/MicroData/itemref-attribute-reflected-by-itemRef-property.html
               fast/dom/MicroData/itemref-for-an-element-must-be-correct.html
               fast/dom/MicroData/itemref-must-be-read-only.html
               fast/dom/MicroData/itemtype-add-remove-tokens.html
               fast/dom/MicroData/itemtype-attribute-test.html
               fast/dom/MicroData/microdata-domtokenlist-attribute-add-remove-tokens.html
               fast/dom/MicroData/properties-collection-namedgetter-with-invalid-name.html
               fast/dom/MicroData/propertynodelist-add-remove-itemprop-tokens.html
               fast/dom/MicroData/propertynodelist-add-remove-itemref-tokens.html

        * html/DOMSettableTokenList.idl:

2013-02-11  Adam Barth  <abarth@webkit.org>

        Load event fires too early with threaded HTML parser (take 2)
        https://bugs.webkit.org/show_bug.cgi?id=109485

        Reviewed by Eric Seidel.

        This patch restores the code that was removed in
        http://trac.webkit.org/changeset/142492 and adds code to
        DocumentLoader.cpp to avoid the regression.

        * dom/Document.cpp:
        (WebCore::Document::hasActiveParser):
        (WebCore::Document::decrementActiveParserCount):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense):

2013-02-11  Eric Seidel  <eric@webkit.org>

        Fold HTMLTokenizerState back into HTMLTokenizer now that MarkupTokenizerBase is RFG
        https://bugs.webkit.org/show_bug.cgi?id=109502

        Reviewed by Tony Gentilcore.

        Just a search replace of HTMLTokenizerState with HTMLTokenizer and moving the enum.
        This restores us to the peacefull world pre-NEW_XML.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::forcePlaintextForTextDocument):
        (WebCore::BackgroundHTMLParser::simulateTreeBuilder):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::tokenizerStateForContextElement):
        (WebCore::HTMLDocumentParser::forcePlaintextForTextDocument):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::isEndTagBufferingState):
        (WebCore):
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::flushEmitAndResumeIn):
        (WebCore::HTMLTokenizer::nextToken):
        (WebCore::HTMLTokenizer::updateStateFor):
        * html/parser/HTMLTokenizer.h:
        (HTMLTokenizer):
        (WebCore::HTMLTokenizer::create):
        (WebCore::HTMLTokenizer::shouldSkipNullCharacters):
        (WebCore::HTMLTokenizer::emitEndOfFile):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/TextViewSourceParser.cpp:
        (WebCore::TextViewSourceParser::TextViewSourceParser):

2013-02-11  Kentaro Hara  <haraken@chromium.org>

        Build fix after r142528
        https://bugs.webkit.org/show_bug.cgi?id=109520

        Reviewed by Eric Seidel.

        r142528 changed GIFImageReader from a struct to a class.
        We also need to fix a forward declaration.

        No tests.

        * platform/image-decoders/gif/GIFImageDecoder.h:

2013-02-11  Nico Weber  <thakis@chromium.org>

        Remove web intents code
        https://bugs.webkit.org/show_bug.cgi?id=109501

        Reviewed by Eric Seidel.

        See thread "Removing ENABLE(WEB_INTENTS) code" on webkit-dev.

        * DerivedSources.make:
        * Modules/intents/DOMWindowIntents.cpp: Removed.
        * Modules/intents/DOMWindowIntents.h: Removed.
        * Modules/intents/DOMWindowIntents.idl: Removed.
        * Modules/intents/DeliveredIntent.cpp: Removed.
        * Modules/intents/DeliveredIntent.h: Removed.
        * Modules/intents/DeliveredIntent.idl: Removed.
        * Modules/intents/Intent.cpp: Removed.
        * Modules/intents/Intent.h: Removed.
        * Modules/intents/Intent.idl: Removed.
        * Modules/intents/IntentRequest.cpp: Removed.
        * Modules/intents/IntentRequest.h: Removed.
        * Modules/intents/IntentResultCallback.h: Removed.
        * Modules/intents/IntentResultCallback.idl: Removed.
        * Modules/intents/NavigatorIntents.cpp: Removed.
        * Modules/intents/NavigatorIntents.h: Removed.
        * Modules/intents/NavigatorIntents.idl: Removed.
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        * bindings/v8/custom/V8IntentCustom.cpp: Removed.
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLIntentElement.cpp: Removed.
        * html/HTMLIntentElement.h: Removed.
        * html/HTMLIntentElement.idl: Removed.
        * loader/EmptyClients.cpp:
        * loader/EmptyClients.h:
        (EmptyFrameLoaderClient):
        * loader/FrameLoaderClient.h:
        (WebCore):
        * page/DOMWindow.idl:

2013-02-11  Eric Seidel  <eric@webkit.org>

        Fix Mac build after http://trac.webkit.org/changeset/142535.

        Unreviewed build fix.

        * html/parser/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::emitAndReconsumeIn):

2013-02-11  David Farler  <dfarler@apple.com>

        Make WebCore Derived Sources work with SDK identifiers too
        https://bugs.webkit.org/show_bug.cgi?id=109324

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Pass SDKROOT to make for DerivedSources.make

2013-02-11  Zhenyao Mo  <zmo@google.com>

        WEBGL_compressed_texture_s3tc extension can be enabled even when not supported
        https://bugs.webkit.org/show_bug.cgi?id=109508

        Reviewed by Kenneth Russell.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::getExtension): Check whether the extension support is there before returning the extension pointer.

2013-02-11  Emil A Eklund  <eae@chromium.org>

        Change RenderFrameSet::paint to use m-rows/m_cols directly.
        https://bugs.webkit.org/show_bug.cgi?id=108503

        Reviewed by Eric Seidel.

        Test: fast/frames/invalid-frameset.html

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):

2013-02-11  Yong Li  <yoli@rim.com>

        XMLHttpRequestProgressEventThrottle::resume() always schedules timer even when unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=105348

        Reviewed by Alexey Proskuryakov.

        Let resume() clear the defer flag and return if there is deferred events to dispatch.

        No new tests as this should not affect existing cross-platform behavior. It should be
        OK as long as it doesn't break anything.

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::resume):

2013-02-11  Eric Seidel  <eric@webkit.org>

        Fold MarkupTokenizerBase into HTMLTokenizer now that it is the only subclass
        https://bugs.webkit.org/show_bug.cgi?id=109499

        Reviewed by Adam Barth.

        For great justice.  And sanity.
        Epic amount of template code deleted.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        * html/parser/HTMLTokenizer.h:
        (HTMLTokenizer):
        (Checkpoint):
        (WebCore::HTMLTokenizer::state):
        (WebCore::HTMLTokenizer::setState):
        (WebCore::HTMLTokenizer::shouldSkipNullCharacters):
        (WebCore::HTMLTokenizer::bufferCharacter):
        (WebCore::HTMLTokenizer::emitAndResumeIn):
        (WebCore::HTMLTokenizer::emitAndReconsumeIn):
        (WebCore::HTMLTokenizer::emitEndOfFile):
        (WebCore::HTMLTokenizer::haveBufferedCharacterToken):
        * xml/parser/MarkupTokenizerBase.h: Removed.

2013-02-11  Anton Vayvod  <avayvod@chromium.org>

        [Text Autosizing] Collect narrow descendants and process them separately. Refactoring for
        a change to follow.
        https://bugs.webkit.org/show_bug.cgi?id=109054

        Preparational change to combine narrow descendants of the same autosizing cluster into
        groups by the width difference between the descendant and the block containing all text of
        the parent autosizing cluster. The groups will be autosized with the same multiplier.

        For example, on sites with a sidebar, sometimes the paragraphs next to the sidebar will have
        a large margin individually applied (via a CSS selector), causing them all to individually
        appear narrower than their enclosing blockContainingAllText. Rather than making each of
        these paragraphs into a separate cluster, we eventually want to be able to merge them back
        together into one (or a few) descendant clusters.

        Reviewed by Julien Chaffraix.

        No behavioral changes thus no new tests or test changes.

        * rendering/TextAutosizer.cpp:
        (TextAutosizingClusterInfo): Vector of narrow descendants.
        (WebCore::TextAutosizer::processCluster): Process narrow descendants separately.
        (WebCore::TextAutosizer::processContainer):

            Remember narrow descendants of the parent cluster for later processing.

2013-02-11  Enrica Casucci  <enrica@apple.com>

        Add ENABLE_DELETION_UI to control the use of the deletion UI.
        https://bugs.webkit.org/show_bug.cgi?id=109463.

        Reviewed by Ryosuke Niwa.
        
        This patch adds #if ENABLE(DELETION_UI) in every spot where
        DeleteButtonController is used. This class is now only instantiated
        if the feature is enabled. I've also done some cleanup in the
        DeleteButtonController class, removing unused methods and making
        private some methods only used internally to the class.
        Both DeleteButtonController and DeleteButton classes are now excluded
        from the compilation if the feature is not enabled.

        No new tests, no change of functionality.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes):
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::EditCommandComposition::reapply):
        (WebCore::CompositeEditCommand::apply):
        * editing/DeleteButton.cpp:
        * editing/DeleteButtonController.cpp:
        * editing/DeleteButtonController.h: Some cleanup.
        (WebCore::DeleteButtonController::enabled): Made private.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        * editing/Editor.cpp:
        (WebCore::Editor::notifyComponentsOnChangedSelection):
        (WebCore::Editor::Editor):
        (WebCore::Editor::rangeForPoint):
        (WebCore::Editor::deviceScaleFactorChanged):
        * editing/Editor.h:
        * editing/htmlediting.cpp: avoidIntersectionWithNode is
        used only if the feature is enabled.
        * editing/htmlediting.h:
        * editing/markup.cpp:
        (WebCore::createMarkup):
        (WebCore::createFragmentFromNodes):
        * rendering/RenderTable.cpp: Removed unnecessary include
        fo DeleteButtonController.h

2013-02-11  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] <template> inside of <head> may not create <body> if EOF is hit
        https://bugs.webkit.org/show_bug.cgi?id=109338

        Reviewed by Adam Barth.

        This patch adds the logic to clear the stack of open elements back to the first <template> when EOF
        is hit. This allows a <body> to be generated if the initial <template> was opened inside of <head>.

        Tests added to html5lib.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore):
        (WebCore::HTMLTreeBuilder::popAllTemplates):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        * html/parser/HTMLTreeBuilder.h:
        (HTMLTreeBuilder):

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

        RenderText::isAllCollapsibleWhitespace() shouldn't upconvert string to 16-bit.
        <http://webkit.org/b/109354>

        Reviewed by Eric Seidel.

        254 KB progression on Membuster3.

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

2013-02-11  Alpha Lam  <hclam@chromium.org>

        Fix code style violations in GIFImageReader.{cc|h}
        https://bugs.webkit.org/show_bug.cgi?id=109007

        Reviewed by Stephen White.

        This is just a style clean up for GIFImageReader.{cc|h}.

        There's going to be a lot changes in these two files and style check
        will add a lot of noise in later reviews. Fix style problems first.

        There is no change in logic at all. Just style fixes.

        No new tests.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::outputRow):
        (GIFImageReader::doLZW):
        (GIFImageReader::read):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFFrameContext):
        (GIFFrameContext::GIFFrameContext):
        (GIFFrameContext::~GIFFrameContext):
        (GIFImageReader::GIFImageReader):
        (GIFImageReader::~GIFImageReader):
        (GIFImageReader):
        (GIFImageReader::imagesCount):
        (GIFImageReader::loopCount):
        (GIFImageReader::globalColormap):
        (GIFImageReader::globalColormapSize):
        (GIFImageReader::frameContext):

2013-02-11  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] Handle shape-outside changing a float's overhang behavior
        https://bugs.webkit.org/show_bug.cgi?id=106927

        Reviewed by Julien Chaffraix.

        When the position on a shape outside causes a float to spill out into
        another block than it's container, it was not being drawn correctly. It
        became apparent that in order to fix this properly, the approach to
        positioning shape outsides and floats needed to be changed. The new
        approach also fixes some other outstanding issues, like hit detection.

        When a float has a shape outside, inline and float layout happens
        using the exclusion shape bounds instead of the float's box.  The
        effect of this is that the float itself no longer has any effect on
        layout, both with respect to positioning of the float's siblings as
        well as positioning the float's box. This means that when the float is
        positioned, it is the shape's box that must obey the positioning rules
        for floats. When the shape is given a position relative to the float's
        box, the rules for float positioning determine where the shape sits
        in the parent, causing the float's box to be offset by the position of
        the shape. Since the float's box does not affect layout (due to the
        shape), this is similar to relative positioning in that the offset is
        a paint time occurrence.

        So the new approach is to implement positioning of shape outside on
        floats similar to how relative positioning is implemented, using a
        RenderLayer.

        This is also tested by the existing tests for shape outside on floats positioning.

        Test: fast/exclusions/shape-outside-floats/shape-outside-floats-overhang.html

        * rendering/ExclusionShapeOutsideInfo.h:
        (WebCore::ExclusionShapeOutsideInfo::shapeLogicalOffset): Utility method to create a LayoutSize for computing the layer offset.
        (ExclusionShapeOutsideInfo):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState): Check for floats with shape outside as well as in flow positioning.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::flipFloatForWritingModeForChild): Remove old positioning implementation.
        (WebCore::RenderBlock::paintFloats): Remove old positioning implementation.
        (WebCore::RenderBlock::blockSelectionGaps): Check for floats with shape outside as well as in flow positioning.
        (WebCore::RenderBlock::positionNewFloats): Remove old positioning implementation.
        (WebCore::RenderBlock::addOverhangingFloats): Remove FIXME.
        (WebCore::positionForPointRespectingEditingBoundaries): Check for floats with shape outside as well as in flow positioning.
        * rendering/RenderBlock.h:
        (RenderBlock): Remove old positioning implementation.
        (WebCore::RenderBlock::xPositionForFloatIncludingMargin): Remove old positioning implementation.
        (WebCore::RenderBlock::yPositionForFloatIncludingMargin): Remove old positioning implementation.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer): Check for floats with shape outside as well as in flow positioning.
        (WebCore::RenderBox::offsetFromContainer): Check for floats with shape outside as well as in flow positioning.
        (WebCore::RenderBox::computeRectForRepaint): Check for floats with shape outside as well as in flow positioning.
        (WebCore::RenderBox::layoutOverflowRectForPropagation): Check for floats with shape outside as well as in flow positioning.
        * rendering/RenderBox.h: Make floats with shape outside get a layer.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintOffset): Method to return in flow
            positioning offset + offset from shape outside on floats.
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject): Add paintOffset method.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint): Check for floats with shape outside as well as in flow positioning.
        (WebCore::RenderInline::computeRectForRepaint): Check for floats with shape outside as well as in flow positioning.
        (WebCore::RenderInline::mapLocalToContainer): Check for floats with shape outside as well as in flow positioning.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition): Check for floats with shape outside as well as in flow positioning.
        (WebCore::RenderLayer::calculateClipRects): Check for floats with shape outside as well as in flow positioning.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::paintOffset): Rename offsetForInFlowPosition to reflect that it's not just for
            in flow positioning, it also reflects shape outside position on floats.
        (RenderLayer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasPaintOffset): Determines if this object is in flow positioined or is a float with shape outside.
        * rendering/style/RenderStyle.h: Add hasPaintOffset method, analagous to method with same name on RenderObject.

2013-02-11  Tim Horton  <timothy_horton@apple.com>

        FrameView::setScrollPosition should clamp scroll position before handing it to
        ScrollingCoordinator instead of depending on ScrollView to do this
        https://bugs.webkit.org/show_bug.cgi?id=109497
        <rdar://problem/12631789>

        Reviewed by Simon Fraser.

        Clamp scroll position before handing it to ScrollingCoordinator. Also, like ScrollView does,
        bail out if we've already scrolled to the clamped scroll position.

        Test: platform/mac-wk2/tiled-drawing/clamp-out-of-bounds-scrolls.html

        * page/FrameView.cpp:
        (WebCore::FrameView::setScrollPosition):

2013-02-11  Adam Barth  <abarth@webkit.org>

        The threaded HTML parser should pass all the fast/parser tests
        https://bugs.webkit.org/show_bug.cgi?id=109486

        Reviewed by Tony Gentilcore.

        This patch fixes the last two test failures in fast/parser, which were
        crashes caused by not having a tokenizer when document.close() was
        called. (The tokenizer is created lazily by calls to document.write,
        which might not happen before document.close).

        fast/parser/document-close-iframe-load.html
        fast/parser/document-close-nested-iframe-load.html

        In addition, I've added a new test to make sure we flush the tokenizer
        properly in these cases.

        Test: fast/parser/document-close-iframe-load-partial-entity.html

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::pumpTokenizer):

2013-02-11  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [texmap] Implement frames-per-second debug counter
        https://bugs.webkit.org/show_bug.cgi?id=107942

        Reviewed by Noam Rosenthal.

        Adds FPS counter via WEBKIT_SHOW_FPS=<interval> environment variable,
        where <interval> is the period in seconds (i.e. =1.5) between FPS
        updates on screen. It is measured by counting
        CoordinatedGraphicsScene::paintTo* calls and is painted using
        drawRepaintCounter() after TextureMapperLayer has finished painting its
        contents.

        Visual debugging feature, no need for new tests.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::CoordinatedGraphicsScene):
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebCore::CoordinatedGraphicsScene::paintToGraphicsContext):
        (WebCore::CoordinatedGraphicsScene::updateFPS):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:

2013-02-11  Eric Seidel  <eric@webkit.org>

        Fold MarkupTokenBase into HTMLToken now that it has no other subclasses
        https://bugs.webkit.org/show_bug.cgi?id=109483

        Reviewed by Adam Barth.

        This deletes an epic amount of template yuck, as well as removes
        a vtable !?! from HTMLToken.

        This paves the way for further cleanup of HTMLToken now that we
        can see the whole object at once.
        We'll also probably re-create an HTMLToken.cpp again, now that we're
        free from the chains of template nonsense.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLToken.h:
        (WebCore::findAttributeInVector):
        (WebCore):
        (HTMLToken):
        (Attribute):
        (Range):
        (WebCore::HTMLToken::HTMLToken):
        (WebCore::HTMLToken::clear):
        (WebCore::HTMLToken::isUninitialized):
        (WebCore::HTMLToken::type):
        (WebCore::HTMLToken::makeEndOfFile):
        (WebCore::HTMLToken::startIndex):
        (WebCore::HTMLToken::endIndex):
        (WebCore::HTMLToken::setBaseOffset):
        (WebCore::HTMLToken::end):
        (WebCore::HTMLToken::data):
        (WebCore::HTMLToken::isAll8BitData):
        (WebCore::HTMLToken::name):
        (WebCore::HTMLToken::appendToName):
        (WebCore::HTMLToken::nameString):
        (WebCore::HTMLToken::selfClosing):
        (WebCore::HTMLToken::setSelfClosing):
        (WebCore::HTMLToken::beginStartTag):
        (WebCore::HTMLToken::beginEndTag):
        (WebCore::HTMLToken::addNewAttribute):
        (WebCore::HTMLToken::beginAttributeName):
        (WebCore::HTMLToken::endAttributeName):
        (WebCore::HTMLToken::beginAttributeValue):
        (WebCore::HTMLToken::endAttributeValue):
        (WebCore::HTMLToken::appendToAttributeName):
        (WebCore::HTMLToken::appendToAttributeValue):
        (WebCore::HTMLToken::attributes):
        (WebCore::HTMLToken::eraseValueOfAttribute):
        (WebCore::HTMLToken::ensureIsCharacterToken):
        (WebCore::HTMLToken::characters):
        (WebCore::HTMLToken::appendToCharacter):
        (WebCore::HTMLToken::comment):
        (WebCore::HTMLToken::beginComment):
        (WebCore::HTMLToken::appendToComment):
        (WebCore::HTMLToken::eraseCharacters):
        * html/parser/HTMLTokenTypes.h:
        * html/parser/XSSAuditor.h:
        * xml/parser/MarkupTokenBase.h: Removed.

2013-02-11  Gavin Barraclough  <barraclough@apple.com>

        PluginProcess should quit immediately if idle in response to low-memory notifications
        https://bugs.webkit.org/show_bug.cgi?id=109103
        <rdar://problem/12679827>

        Reviewed by Brady Eidson.

        This patch allows a process to set a custom callback for low memory warnings
        (defaulting to the current behaviour, as implemented in releaseMemory).

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
            - Initialize m_lowMemoryHandler to releaseMemory.
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::uninstall):
        (WebCore::MemoryPressureHandler::holdOff):
            - Cleaned up spacing.
        (WebCore::MemoryPressureHandler::releaseMemory):
            - Added null implementation for non-Mac builds.
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::setLowMemoryHandler):
            - Added method to set m_lowMemoryHandler.
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
            - Changed to call releaseMemory via m_lowMemoryHandler.

2013-02-11  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r133807): Sticky-position review bar on bugzilla review page is jumpy
        https://bugs.webkit.org/show_bug.cgi?id=104276
        <rdar://problem/12827187>

        Reviewed by Tim Horton.

        When committing new scrolling tree state, if the root node has a scroll
        position update, we would handle that before updating the state of child
        nodes (with possibly new viewport constraints). That would cause incorrect
        child layer updates.
        
        Fix by adding a second 'update' phase that happens after child nodes,
        and moving the scroll position update into that.

        Scrolling tests only dump the state tree, so cannot test the bug.

        * page/FrameView.cpp:
        (WebCore::FrameView::setScrollPosition): If the scroll position didn't
        actually change, don't request a scroll position update from the ScrollingCoordinator.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode): Keep track of the scrolling node so
        that we can call updateAfterChildren() on it.
        * page/scrolling/ScrollingTreeNode.h:
        (ScrollingTreeNode):
        (WebCore::ScrollingTreeNode::updateAfterChildren):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (ScrollingTreeScrollingNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::updateViewportConstrainedNode):
        In the current bug the scrolling tree was scheduled for commit because of a
        scroll position request, but if only the viewport constraints change, we also need
        to commit the tree.
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        (ScrollingTreeFixedNode):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        (ScrollingTreeScrollingNodeMac):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren): Move code here
        that updates things that have to happen after children.
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        (ScrollingTreeStickyNode):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateBeforeChildren):

2013-02-11  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix for Win7 Release.
        Because of InspectorAllInOne.cpp static globals must be named differently in files included by InspectorAllInOne.
        This was the case for UserInitiatedProfileName. Also removed the repeated HeapProfileType definition in
        InspectorHeapProfilerAgent.cpp since it wasn't being used anyways.

        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore):
        (WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):

2013-02-11  Tony Gentilcore  <tonyg@chromium.org>

        SegmentedString's copy ctor should copy all fields
        https://bugs.webkit.org/show_bug.cgi?id=109477

        Reviewed by Adam Barth.

        This fixes http/tests/inspector-enabled/document-write.html (and likely others) for the threaded HTML parser.

        No new tests because covered by existing tests.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::SegmentedString):

2013-02-11  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: database connections don't close after versionchange transaction aborts
        https://bugs.webkit.org/show_bug.cgi?id=102298

        Reviewed by Tony Chang.

        Per spec, close the database if the "versionchange" transaction aborts.

        Tests: storage/indexeddb/aborted-versionchange-closes.html
               storage/indexeddb/lazy-index-population.html
               storage/objectstore-basics.html

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort): Tell the IDBDatabase (connection) to close if
        this was a "versionchange" transaction.

2013-02-11  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] fast/forms/number/number-l10n-input.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=109440

        Reviewed by Laszlo Gombos.

        Use LocaleICU instead of LocaleNone on EFL port. The EFL
        port already depends on ICU library and we get additional
        functionality this way.

        No new tests, already covered by existing tests.

        * CMakeLists.txt:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformWinCE.cmake:

2013-02-11  Benjamin Poulain  <benjamin@webkit.org>

        Kill TestRunner::setMinimumTimerInterval; implement the feature with InternalSettings
        https://bugs.webkit.org/show_bug.cgi?id=109349

        Reviewed by Sam Weinig.

        Expose setMinimumTimerInterval() and implement the backup/restore to keep
        a consistent state between tests.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setMinimumTimerInterval):
        (WebCore):
        * testing/InternalSettings.h:
        (Backup):
        (InternalSettings):
        * testing/InternalSettings.idl:

2013-02-11  Dean Jackson  <dino@apple.com>

        Source/WebCore: Snapshotted plug-in should use shadow root
        https://bugs.webkit.org/show_bug.cgi?id=108284

        Reviewed by Simon Fraser.

        Take three - relanding after rollout in r142400 that was caused by a global
        selector interfering with CSS Instrumentation in the Inspector.

        A snapshotted plugin needs to indicate to the user that it can be clicked
        to be restarted. Previously this was done with an image that had embedded
        text. Instead, we now use an internal shadow root to embed some markup that
        will display instructions that can be localised.

        The UA stylesheet for plug-ins provides a default styling for the label, which
        can be overridden by ports.

        In the process, RenderSnapshottedPlugIn no longer inherits from RenderEmbeddedObject,
        since it is only responsible for drawing a paused plug-in. The snapshot creation
        can work with the default renderer, but a shadow root requires something like
        RenderBlock in order to draw its children. We swap from one renderer to another when
        necessary either by creating the shadow root or by explicitly detaching and attaching
        the plugin element.

        Unfortunately this is difficult to test, because the snapshotting requires
        time to execute, and also a PluginView to be instantiated.

        * css/plugIns.css:
        (object::-webkit-snapshotted-plugin-content): New rules for a default label style.

        * platform/LocalizedStrings.cpp: Make sure all ports have plugin strings, now it is called.
        * platform/LocalizedStrings.h:
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        * platform/chromium/LocalizedStringsChromium.cpp:
        * platform/efl/LocalizedStringsEfl.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/qt/LocalizedStringsQt.cpp:

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler): Take into account the fact
        that RenderSnapshottedPlugIn no longer is an embedded object.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): New default values in constructor.
        (WebCore::HTMLPlugInElement::defaultEventHandler): Make sure to call base class.
        (WebCore::HTMLPlugInElement::willRecalcStyle): No need to reattach if we're a snapshot.
        (WebCore::HTMLPlugInImageElement::createRenderer): If we're showing a snapshot, create such
            a renderer, otherwise use the typical plug-in path.
        (WebCore::HTMLPlugInImageElement::updateSnapshot): Keep a record of the snapshot, since we'll
            need to give it to the renderer.
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Build a subtree that will display a label.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): New member variable to record the snapshot image and whether the label
            should show immediately.
        (WebCore::HTMLPlugInImageElement::swapRendererTimerFired): The callback function triggered when we need
            to swap to the Shadow Root.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): The user has tapped on the snapshot so the plugin
            in being recreated. Make sure we reattach so that a plugin renderer will be created.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Make sure we set the right
            displayState for snapshots.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): The new methods listed above.
        (WebCore::HTMLPlugInImageElement::setShouldShowSnapshotLabelAutomatically): Indicates whether or not
            a snapshot should be immediately labeled.

        * page/ChromeClient.h: No need for plugInStartLabelImage any more.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn): New inheritance.
        (WebCore::RenderSnapshottedPlugIn::paint): If we're in the background paint phase, render the snapshot image.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshotImage): Rename.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot): Rename.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshotWithLabel): Rename. No need for label sizes.
        (WebCore::RenderSnapshottedPlugIn::getCursor):
        (WebCore::RenderSnapshottedPlugIn::handleEvent): The renderer doesn't restart the plug-in any more. Tell the element and it will do it.
        * rendering/RenderSnapshottedPlugIn.h:
        (RenderSnapshottedPlugIn): New inheritance. Some method renaming.

2013-02-11  Mike West  <mkwst@chromium.org>

        CSP reports for blocked 'data:' URLs should report the scheme only.
        https://bugs.webkit.org/show_bug.cgi?id=109429

        Reviewed by Adam Barth.

        https://dvcs.w3.org/hg/content-security-policy/rev/001dc8e8bcc3 changed
        the CSP 1.1 spec to require that blocked URLs that don't refer to
        generally resolvable schemes (e.g. 'data:', 'javascript:', etc.) be
        stripped down to their scheme in violation reports.

        Test: http/tests/security/contentSecurityPolicy/report-blocked-data-uri.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):
            If the blocked URL is a web-resolvable scheme, apply the current
            stripping logic to it, otherwise, strip it to the scheme only.
        * platform/KURL.h:
        (KURL):
            Move KURL::isHierarchical() out into KURL's public API.

2013-02-11  Simon Fraser  <simon.fraser@apple.com>

        ScrollingTree node maps keep getting larger
        https://bugs.webkit.org/show_bug.cgi?id=109348

        Reviewed by Sam Weinig.

        When navigating between pages, nodes would get left in the ScrollingTree's
        node map, and the ScrollingStateTree's node map, so these would get larger
        and larger as you browse.
        
        Simplify map maintenance by clearing the map when setting a new root node
        (which happens on the first commit of a new page). Also, don't keep root nodes
        around, but create them afresh for each page, which simplifies their ID
        management.
        
        This is closer to the original behavior; keeping the root nodes around was
        a fix for bug 99668, but we avoid regressing that fix by bailing early
        from frameViewLayoutUpdated() if there is no root state node (we'll get
        called again anyway).
        
        This now allows state nodeIDs to be purely read-only.

        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::clear):
        (WebCore::ScrollingStateTree::removeNode):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):

2013-02-11  Simon Fraser  <simon.fraser@apple.com>

        Move m_stateNodeMap from ScrollingCoordinatorMac to ScrollingStateTree
        https://bugs.webkit.org/show_bug.cgi?id=109361

        Reviewed by Sam Weinig.
        
        The map of scrolling node IDs to ScollingStateNodes was maintained by
        ScrollingCoordinatorMac, rather than ScrollingStateTree. This is different
        from the ScrollingTree (which owns its node map), and added some amount
        of to-and-fro between ScrollingStateTree and ScrollingCoordinatorMac.
        
        Having ScrollingCoordinatorMac maintain the map of IDs to state nodes
        simplifies things.

        No behavior change.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::detachNode):
        (WebCore::ScrollingStateTree::clear):
        (WebCore::ScrollingStateTree::removeNode):
        (WebCore::ScrollingStateTree::stateNodeForID):
        * page/scrolling/ScrollingStateTree.h:
        (ScrollingStateTree): Remove some stale comments.
        (WebCore::ScrollingStateTree::removedNodes):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinatorMac::recomputeWheelEventHandlerCountForFrameView):
        (WebCore::ScrollingCoordinatorMac::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinatorMac::requestScrollPositionUpdate):
        (WebCore::ScrollingCoordinatorMac::attachToStateTree):
        (WebCore::ScrollingCoordinatorMac::detachFromStateTree):
        (WebCore::ScrollingCoordinatorMac::clearStateTree):
        (WebCore::ScrollingCoordinatorMac::updateScrollingNode):
        (WebCore::ScrollingCoordinatorMac::updateViewportConstrainedNode):

2013-02-11  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * platform/mac/PlatformSpeechSynthesizerMac.mm: Fix the case in the include.

2013-02-11  Julien Chaffraix  <jchaffraix@webkit.org>

        Regression(r131539): Heap-use-after-free in WebCore::RenderBlock::willBeDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=107189

        Reviewed by Abhishek Arya.

        Test: fast/dynamic/continuation-detach-crash.html

        This patch reverts r131539 and the following changes (r132591 and r139664).
        This means we redo detaching from the bottom-up which solves the regression.
        It fixes the attached test case as we re-attach child nodes before detaching
        the parent. It seems wrong to do but this avoid a stale continuation.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::detach): Detach the children first, then ourself.
        * dom/Node.cpp:
        (WebCore::Node::detach): Clear the renderer instead of ASSERT'ing.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed): Removed the code to clear the associated node's renderer.
        (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        Moved the repainting logic back into removeChildNode from destroyAndCleanupAnonymousWrappers.
        (WebCore::RenderObjectChildList::destroyLeftoverChildren): Re-added the code to clear the associated node's
        renderer.
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::setText): Re-added the code to set the associated node's renderer.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::detach):
        * dom/Node.cpp:
        (WebCore::Node::detach):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::destroyLeftoverChildren):
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::setText):

2013-02-11  Eric Seidel  <eric@webkit.org>

        Make WebVTTTokenizer stop inheriting from MarkupTokenizerBase
        https://bugs.webkit.org/show_bug.cgi?id=109411

        Reviewed by Adam Barth.

        Moved InputStreamPreprocessor into its own header file so it can be
        used by both WebVTTTokenizer and HTMLTokenizer.

        Also split out kEndOfFileMarker from InputStreamPreprocessor<T> so that
        it can be used w/o a specific instantiation of the template class.
        This also made it possible to fix three old fixmes about wanting to share
        that constant.

        Again, separating WebVTT code from Markup* base classes made it simpler
        at the cost of a little copy/paste code.  WebVTT tokenization is remarkably
        simple compared to HTML.

        This will make it immediately possible to pull MarkupTokenizerBase up into
        HTMLTokenizer and further simplify the code.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::markEndOfFile):
        * html/parser/HTMLInputStream.h:
        (WebCore::HTMLInputStream::markEndOfFile):
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):
        * html/parser/InputStreamPreprocessor.h: Added.
        (WebCore):
        (InputStreamPreprocessor):
        (WebCore::InputStreamPreprocessor::InputStreamPreprocessor):
        (WebCore::InputStreamPreprocessor::nextInputCharacter):
        (WebCore::InputStreamPreprocessor::peek):
        (WebCore::InputStreamPreprocessor::advance):
        (WebCore::InputStreamPreprocessor::skipNextNewLine):
        (WebCore::InputStreamPreprocessor::reset):
        (WebCore::InputStreamPreprocessor::shouldTreatNullAsEndOfFileMarker):
        * html/track/WebVTTTokenizer.cpp:
        (WebCore::WebVTTTokenizer::WebVTTTokenizer):
        (WebCore::WebVTTTokenizer::nextToken):
        * html/track/WebVTTTokenizer.h:
        (WebVTTTokenizer):
        (WebCore::WebVTTTokenizer::haveBufferedCharacterToken):
        (WebCore::WebVTTTokenizer::bufferCharacter):
        (WebCore::WebVTTTokenizer::emitAndResumeIn):
        (WebCore::WebVTTTokenizer::emitEndOfFile):
        (WebCore::WebVTTTokenizer::shouldSkipNullCharacters):
        * xml/parser/MarkupTokenizerBase.h:
        (MarkupTokenizerBase):
        (WebCore::MarkupTokenizerBase::bufferCharacter):

2013-02-11  Adam Barth  <abarth@webkit.org>

        document.write during window.onload can trigger DumpRenderTree to dump the render tree
        https://bugs.webkit.org/show_bug.cgi?id=109465

        Reviewed by Eric Seidel.

        This patch is a partial revert of
        http://trac.webkit.org/changeset/142378. It's not safe to call
        checkComplete during the load event. We'll need to find another way of
        calling checkComplete at the right time.

        Test: fast/parser/document-write-during-load.html

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

2013-02-11  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: Timeline: invalidate and force locations are same for Layout records caused by style recalculaiton
        https://bugs.webkit.org/show_bug.cgi?id=109294

        Reviewed by Pavel Feldman.

        Use the stack that caused style recalculation as a cause for relayout performed due to
        layout invalidation caused by style recalculation.

        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.reset):
        (WebInspector.TimelinePresentationModel.Record):

2013-02-01  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extension API] adjust inspectedWindow.eval() callback parameters to expose non-exceptional error
        https://bugs.webkit.org/show_bug.cgi?id=108640

        Reviewed by Vsevolod Vlasov.

        - only set first parameter to eval() callback iff expression successfully evaluates;
        - use object, not bool as second parameter;
        - pass exceptions and extension errors as second parameter if evaluate failed;
        - minor drive-by changes in ExtensionAPI utilities.

        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setExpression):
        (injectedExtensionAPI.InspectedWindow.prototype.):
        (injectedExtensionAPI.InspectedWindow.prototype.eval):
        (injectedExtensionAPI.extractCallbackArgument):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.):
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        (WebInspector.ExtensionStatus):

2013-02-11  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] expose ExtensionServerClient to tests so tests use same port as extensions API
        https://bugs.webkit.org/show_bug.cgi?id=109443

        Reviewed by Vsevolod Vlasov.

        Promote extensionServer var to the outer closure, so it may be accessed by platform-specific (or test) code.

        * inspector/front-end/ExtensionAPI.js:
        (buildExtensionAPIInjectedScript):

2013-02-11  Eric Seidel  <eric@webkit.org>

        Move WebVTTToken off of MarkupTokenBase
        https://bugs.webkit.org/show_bug.cgi?id=109410

        Reviewed by Tony Gentilcore.

        This introduces a small amount of "copy/paste" code
        but actually makes WebVTTToken much smaller and simpler!
        This also frees the HTMLParser to have its Token class
        back to itself so we can tune it to make HTML faster.

        * html/track/WebVTTToken.h:
        (WebVTTToken):
        (WebCore::WebVTTToken::WebVTTToken):
        (WebCore::WebVTTToken::appendToName):
        (WebCore::WebVTTToken::type):
        (WebCore::WebVTTToken::name):
        (WebCore::WebVTTToken::ensureIsCharacterToken):
        (WebCore::WebVTTToken::appendToCharacter):
        (WebCore::WebVTTToken::beginEmptyStartTag):
        (WebCore::WebVTTToken::beginStartTag):
        (WebCore::WebVTTToken::beginEndTag):
        (WebCore::WebVTTToken::beginTimestampTag):
        (WebCore::WebVTTToken::makeEndOfFile):
        (WebCore::WebVTTToken::clear):

2013-02-11  Joshua Bell  <jsbell@chromium.org>

        [V8] IndexedDB: Minor GC can collect IDBDatabase wrapper with versionchange handler
        https://bugs.webkit.org/show_bug.cgi?id=108670

        Reviewed by Kentaro Hara.

        Prevent IDBDatabase's wrapper from being GC'd while the database is open if it has
        listeners, as those listeners may close the database in response to events.

        Also, removed extraneous super-calls from hasPendingActivity() overrides.

        Test: storage/indexeddb/database-wrapper.html

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::hasPendingActivity): Implemented.
        * Modules/indexeddb/IDBDatabase.h: Declared.
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::hasPendingActivity): Simplified.
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::hasPendingActivity): Simplified.

2013-02-11  Eric Seidel  <eric@webkit.org>

        Remove AttributeBase now that NEW_XML is gone
        https://bugs.webkit.org/show_bug.cgi?id=109408

        Reviewed by Adam Barth.

        Just deleting code.  HTMLToken::Attribute is now just
        the real class and not a typedef.

        * html/parser/CompactHTMLToken.cpp:
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::AtomicHTMLToken::nameForAttribute):
        * xml/parser/MarkupTokenBase.h:
        (WebCore):
        (MarkupTokenBase):
        (Attribute):
        (Range):

2013-02-11  Eric Seidel  <eric@webkit.org>

        Rename PreloadTask to StartTagScanner to match its purpose
        https://bugs.webkit.org/show_bug.cgi?id=109406

        Reviewed by Sam Weinig.

        As discussed in bug 107807.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::StartTagScanner::StartTagScanner):
        (WebCore::StartTagScanner::processAttributes):
        (WebCore::HTMLPreloadScanner::processToken):

2013-02-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: WebInspector.Project refactorings.
        https://bugs.webkit.org/show_bug.cgi?id=109433

        Reviewed by Alexander Pavlov.

        This change prepares Workspace and Project to migration to project-per-domain mode for network based projects.
        Renamed WebInspector.WorkspaceProvider to WebInspector.ProjectDelegate.
        Renamed Project.name() to Project.id() and delegated it to project delegate.
        Added Project.displayName() method that is delegated to project delegate.
        SimpleWorkspaceProvider is now responsible for creation of SimpleWorkspaceDelegates and
        isolates various mappings from Project/ProjectDelegate concept.
        UISourceCode is now created based on path in the project.
        UISourceCode uri is now calculated based on project and path (right now uri is equal to path).

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/FileSystemProjectDelegate.js: Renamed from Source/WebCore/inspector/front-end/FileSystemWorkspaceProvider.js.
        (WebInspector.FileSystemProjectDelegate):
        (WebInspector.FileSystemProjectDelegate.prototype.id):
        (WebInspector.FileSystemProjectDelegate.prototype.type):
        (WebInspector.FileSystemProjectDelegate.prototype.displayName):
        (WebInspector.FileSystemProjectDelegate.prototype.innerCallback):
        (WebInspector.FileSystemProjectDelegate.prototype.requestFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype.setFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype.contentCallback):
        (WebInspector.FileSystemProjectDelegate.prototype.searchInFileContent):
        (WebInspector.FileSystemProjectDelegate.prototype._contentTypeForPath):
        (WebInspector.FileSystemProjectDelegate.prototype._populate.filesLoaded):
        (WebInspector.FileSystemProjectDelegate.prototype._populate):
        (WebInspector.FileSystemProjectDelegate.prototype._addFile):
        (WebInspector.FileSystemProjectDelegate.prototype._removeFile):
        (WebInspector.FileSystemProjectDelegate.prototype.reset):
        (WebInspector.FileSystemUtils):
        (WebInspector.FileSystemUtils.errorHandler):
        (WebInspector.FileSystemUtils.requestFileSystem):
        (.fileSystemLoaded):
        (.innerCallback):
        (WebInspector.FileSystemUtils.requestFilesRecursive):
        (.fileEntryLoaded):
        (.fileLoaded):
        (.readerLoadEnd):
        (WebInspector.FileSystemUtils.requestFileContent):
        (.fileWriterCreated.fileTruncated):
        (.fileWriterCreated):
        (.writerEnd):
        (WebInspector.FileSystemUtils.setFileContent):
        (WebInspector.FileSystemUtils._getDirectory):
        (.toArray):
        (WebInspector.FileSystemUtils._readDirectory):
        (WebInspector.FileSystemUtils._requestEntries):
        * inspector/front-end/IsolatedFileSystemModel.js:
        (WebInspector.IsolatedFileSystemModel.prototype._innerAddFileSystem):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleProjectDelegate):
        (WebInspector.SimpleProjectDelegate.prototype.id):
        (WebInspector.SimpleProjectDelegate.prototype.displayName):
        (WebInspector.SimpleProjectDelegate.prototype.requestFileContent):
        (WebInspector.SimpleProjectDelegate.prototype.setFileContent):
        (WebInspector.SimpleProjectDelegate.prototype.searchInFileContent):
        (WebInspector.SimpleProjectDelegate.prototype.addFile):
        (WebInspector.SimpleProjectDelegate.prototype._uniquePath):
        (WebInspector.SimpleProjectDelegate.prototype.removeFile):
        (WebInspector.SimpleProjectDelegate.prototype.reset):
        (WebInspector.SimpleWorkspaceProvider):
        (WebInspector.SimpleWorkspaceProvider.uriForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.addFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.addUniqueFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.removeFile):
        (WebInspector.SimpleWorkspaceProvider.prototype.reset):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.path):
        (WebInspector.UISourceCode.prototype.uri):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/Workspace.js:
        (WebInspector.FileDescriptor):
        (WebInspector.ProjectDelegate):
        (WebInspector.ProjectDelegate.prototype.id):
        (WebInspector.ProjectDelegate.prototype.displayName):
        (WebInspector.ProjectDelegate.prototype.requestFileContent):
        (WebInspector.ProjectDelegate.prototype.setFileContent):
        (WebInspector.ProjectDelegate.prototype.searchInFileContent):
        (WebInspector.Project):
        (WebInspector.Project.prototype.id):
        (WebInspector.Project.prototype.type):
        (WebInspector.Project.prototype.displayName):
        (WebInspector.Project.prototype.isServiceProject):
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):
        (WebInspector.Project.prototype._reset):
        (WebInspector.Project.prototype.uiSourceCode):
        (WebInspector.Project.prototype.uiSourceCodeForOriginURL):
        (WebInspector.Project.prototype.uiSourceCodeForURI):
        (WebInspector.Project.prototype.uiSourceCodes):
        (WebInspector.Project.prototype.requestFileContent):
        (WebInspector.Project.prototype.setFileContent):
        (WebInspector.Project.prototype.searchInFileContent):
        (WebInspector.Project.prototype.dispose):
        (WebInspector.Workspace.prototype.uiSourceCode):
        (WebInspector.Workspace.prototype.uiSourceCodeForURI):
        (WebInspector.Workspace.prototype.addProject):
        (WebInspector.Workspace.prototype.removeProject):
        (WebInspector.Workspace.prototype.project):
        (WebInspector.Workspace.prototype.uiSourceCodes):
        (WebInspector.Workspace.prototype.projectForUISourceCode):
        * inspector/front-end/inspector.html:

2013-02-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: fix closure compiler warnings in the profiler code
        https://bugs.webkit.org/show_bug.cgi?id=109432

        Reviewed by Pavel Feldman.

        Updated type annotations to match the code.

        * inspector/front-end/NativeMemorySnapshotView.js:
        * inspector/front-end/ProfilesPanel.js:

2013-02-11  Alexander Shalamov  <alexander.shalamov@intel.com>

        [QT] Regression (r142444): Broke qt linux minimal build
        https://bugs.webkit.org/show_bug.cgi?id=109423

        Reviewed by Kenneth Rohde Christiansen.

        Test: cssom/cssvalue-comparison.html

        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):

2013-02-11  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: introduce WebInspector.TextUtils
        https://bugs.webkit.org/show_bug.cgi?id=109289

        Reviewed by Pavel Feldman.

        Add new WebInspector.TextUtils file and extract commonly used
        text-operation subroutines from DefaultTextEditor into it.

        No new tests: no change in behaviour.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype._isWord):
        (WebInspector.DefaultTextEditor.WordMovementController.prototype._rangeForCtrlArrowMove):
        (WebInspector.TextEditorMainPanel.BraceHighlightController.prototype.handleSelectionChange):
        * inspector/front-end/TextUtils.js: Added.
        (WebInspector.TextUtils.isStopChar):
        (WebInspector.TextUtils.isWordChar):
        (WebInspector.TextUtils.isSpaceChar):
        (WebInspector.TextUtils.isWord):
        (WebInspector.TextUtils.isBraceChar):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2013-02-11  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][Clang] Build errors in LocalizedStringsGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=109418

        Reviewed by Philippe Normand.

        Use the C++ isfinite(float) and abs(float) (instead of fabsf(float))
        methods by including the WTF MathExtras.h header. Use a static cast to
        an integer type on the float return value of the abs(float) method call
        instead of the C-style cast.

        No new tests - no new functiolnality.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::localizedMediaTimeDescription):

2013-02-11  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for the WTFURL backend of KURL.

        * platform/KURL.cpp:
        (WebCore::KURL::isSafeToSendToAnotherThread): m_urlImpl is of RefPtr type so use
        the appropriate operator on it when calling the isSafeToSendToAnotherThread method.

2013-02-11  Mike West  <mkwst@chromium.org>

        Range::collapsed callers should explicitly ASSERT_NO_EXCEPTION.
        https://bugs.webkit.org/show_bug.cgi?id=108921

        Reviewed by Jochen Eisinger.

        For clarity and consistency, this patch adjusts Range::collapsed() to
        drop the default value of the ExceptionCode parameter it accepts. The
        three call sites that called the method with no arguments (all part of
        Editor::rangeOfString) will now explicitly ASSERT_NO_EXCEPTION.

        * dom/Range.h:
        (Range):
        * editing/Editor.cpp:
        (WebCore::Editor::rangeOfString):

2013-02-11  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Split Profiler domain in protocol into Profiler and HeapProfiler
        https://bugs.webkit.org/show_bug.cgi?id=108653

        Reviewed by Yury Semikhatsky.

        Currently CPU and heap profilers share the same domain 'Profiler' in the protocol.
        In fact these two profile types have not too much in common. So put each into its own domain.
        It should also help when Profiles panel gets split into several tools.
        This is the phase 1 which adds InspectorHeapProfilerAgent but doesn't
        change the original InspectorProfilerAgent.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorHeapProfilerAgent.cpp: Added.
        (WebCore):
        (WebCore::InspectorHeapProfilerAgent::create):
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::~InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::resetState):
        (WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorHeapProfilerAgent::setFrontend):
        (WebCore::InspectorHeapProfilerAgent::clearFrontend):
        (WebCore::InspectorHeapProfilerAgent::restore):
        (WebCore::InspectorHeapProfilerAgent::collectGarbage):
        (WebCore::InspectorHeapProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorHeapProfilerAgent::hasHeapProfiler):
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        (WebCore::InspectorHeapProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorHeapProfilerAgent::removeProfile):
        (WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):
        (WebCore::InspectorHeapProfilerAgent::getObjectByHeapObjectId):
        (WebCore::InspectorHeapProfilerAgent::getHeapObjectId):
        (WebCore::InspectorHeapProfilerAgent::reportMemoryUsage):
        * inspector/InspectorHeapProfilerAgent.h: Added.
        (WebCore):
        (InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::clearProfiles):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InstrumentingAgents.h:
        (WebCore):
        (InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorHeapProfilerAgent):
        (WebCore::InstrumentingAgents::setInspectorHeapProfilerAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapProfileHeader.prototype.startSnapshotTransfer):
        (WebInspector.HeapProfileHeader.prototype.saveToFile.onOpen):
        (WebInspector.HeapProfileHeader.prototype.saveToFile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype._clearProfiles):
        (WebInspector.ProfilesPanel.prototype._garbageCollectButtonClicked):
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):
        (WebInspector.ProfilesPanel.prototype._populateProfiles.var):
        (WebInspector.ProfilesPanel.prototype._populateProfiles.populateCallback):
        (WebInspector.ProfilesPanel.prototype._populateProfiles):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype.revealInView):
        (WebInspector.HeapProfilerDispatcher):
        (WebInspector.HeapProfilerDispatcher.prototype.addProfileHeader):
        (WebInspector.HeapProfilerDispatcher.prototype.addHeapSnapshotChunk):
        (WebInspector.HeapProfilerDispatcher.prototype.finishHeapSnapshot):
        (WebInspector.HeapProfilerDispatcher.prototype.resetProfiles):
        (WebInspector.HeapProfilerDispatcher.prototype.reportHeapSnapshotProgress):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._garbageCollectButtonClicked):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2013-02-11  Mike West  <mkwst@chromium.org>

        Use IGNORE_EXCEPTION for Editor::countMatchesForText's ignored exceptions.
        https://bugs.webkit.org/show_bug.cgi?id=109372

        Reviewed by Jochen Eisinger.

        Rather than implicitly ignoring exceptions, we should use the
        IGNORE_EXCEPTION macro for clarity.

        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText):

2013-02-11  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] Unreviewed. Fix minimal build after r142444.

        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):

2013-02-11  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] Stop using smart pointers for Ecore_Timer
        https://bugs.webkit.org/show_bug.cgi?id=109409

        Reviewed by Kenneth Rohde Christiansen.

        Stop using a smart pointer for Ecore_Timer in RunLoop::TimerBase. This
        is a bad idea because the timer handle becomes invalid as soon as the
        timer callback returns ECORE_CALLBACK_CANCEL. This may lead to crashes
        on destruction because OwnPtr calls ecore_timer_del() on an invalid
        handle.

        No new tests, already covered by exiting tests.

        * platform/RunLoop.h:
        (TimerBase):
        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::TimerBase::timerFired):
        (WebCore::RunLoop::TimerBase::start):
        (WebCore::RunLoop::TimerBase::stop):

2013-02-11  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Allow SplitView to keep the sidebar size as a fraction of the container size
        https://bugs.webkit.org/show_bug.cgi?id=109414

        Reviewed by Vsevolod Vlasov.

        SplitView now interprets defaultSidebarWidth and defaultSidebarHeight values between 0 and 1 as
        fractions of the total container size. The sidebar then will grow or shrink along with the container.
        When the sidebar is resized manually the updated ratio is stored in the settings.

        * inspector/front-end/SplitView.js:
        (WebInspector.SplitView):
        (WebInspector.SplitView.prototype._removeAllLayoutProperties):
        (WebInspector.SplitView.prototype._updateTotalSize):
        (WebInspector.SplitView.prototype._innerSetSidebarSize):
        (WebInspector.SplitView.prototype._saveSidebarSize):

2013-02-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: highlight DOM nodes on hover while debugging
        https://bugs.webkit.org/show_bug.cgi?id=109355

        Reviewed by Vsevolod Vlasov.

        Along with showing the popover, highlight the remote object as node.

        * inspector/front-end/ObjectPopoverHelper.js:
        (WebInspector.ObjectPopoverHelper.prototype.):
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover):
        (WebInspector.ObjectPopoverHelper.prototype._onHideObjectPopover):

2013-02-11  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: displaying whitespace characters is broken
        https://bugs.webkit.org/show_bug.cgi?id=109412

        Reviewed by Vsevolod Vlasov.

        Add "pointer-events: none" rule for pseudo-class "before", which
        maintains rendering of whitespace characters.

        No new tests.

        * inspector/front-end/inspectorSyntaxHighlight.css:
        (.webkit-whitespace::before):

2013-02-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement position-based sourcemapping for stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=109168

        Reviewed by Vsevolod Vlasov.

        This change introduces support for position-based source maps for CSS stylesheets.
        Sourcemaps and originating resources (sass, scss, etc.) are loaded synchronously
        upon the CSS UISourceCode addition. RangeBasedSourceMap is removed as it is not used.

        Test: http/tests/inspector/stylesheet-source-mapping.html

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel):
        (WebInspector.CSSStyleModel.prototype.setSourceMapping):
        (WebInspector.CSSStyleModel.prototype.rawLocationToUILocation):
        (WebInspector.CSSStyleModel.LiveLocation.prototype.uiLocation):
        (WebInspector.CSSLocation):
        (WebInspector.CSSProperty):
        (WebInspector.CSSProperty.parsePayload):
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping):
        (WebInspector.CompilerScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.CompilerScriptMapping.prototype.loadSourceMapForScript):
        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping):
        (WebInspector.SASSSourceMapping.prototype._styleSheetChanged.callback):
        (WebInspector.SASSSourceMapping.prototype._styleSheetChanged):
        (WebInspector.SASSSourceMapping.prototype._reloadCSS):
        (WebInspector.SASSSourceMapping.prototype._resourceAdded.didRequestContent):
        (WebInspector.SASSSourceMapping.prototype._resourceAdded):
        (WebInspector.SASSSourceMapping.prototype._loadAndProcessSourceMap):
        (WebInspector.SASSSourceMapping.prototype.loadSourceMapForStyleSheet):
        (WebInspector.SASSSourceMapping.prototype._bindUISourceCode):
        (WebInspector.SASSSourceMapping.prototype.rawLocationToUILocation):
        (WebInspector.SASSSourceMapping.prototype.uiLocationToRawLocation):
        (WebInspector.SASSSourceMapping.prototype._reset):
        * inspector/front-end/SourceMap.js:
        (WebInspector.SourceMap):
        (WebInspector.SourceMap.load):
        (WebInspector.SourceMap.prototype.findEntry):
        (WebInspector.SourceMap.prototype.findEntryReversed):
        (WebInspector.SourceMap.prototype._parseMap):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping):
        (WebInspector.StylesSourceMapping.prototype._bindUISourceCode):
        * inspector/front-end/inspector.js:

2013-02-11  Alexander Shalamov  <alexander.shalamov@intel.com>

        Implement CSSValue::equals(const CSSValue&) to optimise CSSValue comparison
        https://bugs.webkit.org/show_bug.cgi?id=102901

        Reviewed by Antti Koivisto.

        Added comparison method to CSSValue and its children, so that the
        css values could be compared efficiently. Before this patch, CSSValue
        objects were compared using strings that were generated by the cssText() method.

        Test: cssom/cssvalue-comparison.html

        * css/CSSAspectRatioValue.cpp:
        (WebCore::CSSAspectRatioValue::equals):
        (WebCore):
        * css/CSSAspectRatioValue.h:
        (CSSAspectRatioValue):
        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeRectangle::equals):
        (WebCore):
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::CSSBasicShapePolygon::equals):
        * css/CSSBasicShapes.h:
        (CSSBasicShapeRectangle):
        (CSSBasicShapeCircle):
        (CSSBasicShapeEllipse):
        (CSSBasicShapePolygon):
        * css/CSSBorderImageSliceValue.cpp:
        (WebCore::CSSBorderImageSliceValue::equals):
        (WebCore):
        * css/CSSBorderImageSliceValue.h:
        (CSSBorderImageSliceValue):
        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcValue::equals):
        (WebCore):
        (WebCore::CSSCalcPrimitiveValue::equals):
        (CSSCalcPrimitiveValue):
        (WebCore::CSSCalcPrimitiveValue::type):
        (WebCore::CSSCalcBinaryOperation::equals):
        (CSSCalcBinaryOperation):
        (WebCore::CSSCalcBinaryOperation::type):
        * css/CSSCalculationValue.h:
        (WebCore::CSSCalcExpressionNode::equals):
        (CSSCalcExpressionNode):
        (CSSCalcValue):
        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::equals):
        (WebCore):
        * css/CSSCanvasValue.h:
        (CSSCanvasValue):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::cssPropertyMatches):
        (WebCore::CSSComputedStyleDeclaration::getCSSPropertyValuesForSidesShorthand):
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::equals):
        (WebCore):
        * css/CSSCrossfadeValue.h:
        (CSSCrossfadeValue):
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::equals):
        (WebCore):
        * css/CSSCursorImageValue.h:
        (CSSCursorImageValue):
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::equals):
        (WebCore):
        * css/CSSFontFaceSrcValue.h:
        (CSSFontFaceSrcValue):
        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::equals):
        (WebCore):
        * css/CSSFunctionValue.h:
        (CSSFunctionValue):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSLinearGradientValue::equals):
        (WebCore):
        (WebCore::CSSRadialGradientValue::equals):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientColorStop::operator==):
        (CSSLinearGradientValue):
        (CSSRadialGradientValue):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::equals):
        (WebCore):
        * css/CSSImageValue.h:
        (CSSImageValue):
        * css/CSSInheritedValue.h:
        (WebCore::CSSInheritedValue::equals):
        (CSSInheritedValue):
        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::equals):
        (CSSInitialValue):
        * css/CSSLineBoxContainValue.h:
        (WebCore::CSSLineBoxContainValue::equals):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::equals):
        (WebCore):
        * css/CSSPrimitiveValue.h:
        (CSSPrimitiveValue):
        * css/CSSReflectValue.cpp:
        (WebCore::CSSReflectValue::equals):
        (WebCore):
        * css/CSSReflectValue.h:
        (CSSReflectValue):
        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSCubicBezierTimingFunctionValue::equals):
        (WebCore):
        (WebCore::CSSStepsTimingFunctionValue::equals):
        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSLinearTimingFunctionValue::equals):
        (CSSLinearTimingFunctionValue):
        (CSSCubicBezierTimingFunctionValue):
        (CSSStepsTimingFunctionValue):
        * css/CSSUnicodeRangeValue.cpp:
        (WebCore::CSSUnicodeRangeValue::equals):
        (WebCore):
        * css/CSSUnicodeRangeValue.h:
        (CSSUnicodeRangeValue):
        * css/CSSValue.cpp:
        (WebCore):
        (WebCore::compareCSSValues):
        (WebCore::CSSValue::equals):
        * css/CSSValue.h:
        (CSSValue):
        (WebCore):
        (WebCore::compareCSSValueVector):
        (WebCore::compareCSSValuePtr):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::removeAll):
        (WebCore::CSSValueList::hasValue):
        (WebCore::CSSValueList::equals):
        (WebCore):
        * css/CSSValueList.h:
        (CSSValueList):
        * css/CSSVariableValue.h:
        (WebCore::CSSVariableValue::equals):
        (CSSVariableValue):
        * css/Counter.h:
        (Counter):
        (WebCore::Counter::equals):
        * css/DashboardRegion.h:
        (WebCore::DashboardRegion::equals):
        * css/FontFeatureValue.cpp:
        (WebCore::FontFeatureValue::equals):
        (WebCore):
        * css/FontFeatureValue.h:
        (FontFeatureValue):
        * css/FontValue.cpp:
        (WebCore::FontValue::equals):
        (WebCore):
        * css/FontValue.h:
        (FontValue):
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::operator==):
        * css/Pair.h:
        (WebCore::Pair::equals):
        (Pair):
        * css/Rect.h:
        (WebCore::RectBase::equals):
        (RectBase):
        * css/ShadowValue.cpp:
        (WebCore::ShadowValue::equals):
        (WebCore):
        * css/ShadowValue.h:
        (ShadowValue):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::get4Values):
        (WebCore::StylePropertySet::propertyMatches):
        * css/WebKitCSSArrayFunctionValue.cpp:
        (WebCore::WebKitCSSArrayFunctionValue::equals):
        (WebCore):
        * css/WebKitCSSArrayFunctionValue.h:
        (WebKitCSSArrayFunctionValue):
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::equals):
        (WebCore):
        * css/WebKitCSSFilterValue.h:
        (WebKitCSSFilterValue):
        * css/WebKitCSSMixFunctionValue.cpp:
        (WebCore::WebKitCSSMixFunctionValue::equals):
        (WebCore):
        * css/WebKitCSSMixFunctionValue.h:
        (WebKitCSSMixFunctionValue):
        * css/WebKitCSSSVGDocumentValue.cpp:
        (WebCore::WebKitCSSSVGDocumentValue::equals):
        (WebCore):
        * css/WebKitCSSSVGDocumentValue.h:
        (WebKitCSSSVGDocumentValue):
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::equals):
        (WebCore):
        * css/WebKitCSSShaderValue.h:
        (WebKitCSSShaderValue):
        * css/WebKitCSSTransformValue.h:
        (WebCore::WebKitCSSTransformValue::equals):
        * editing/EditingStyle.cpp:
        (WebCore::HTMLAttributeEquivalent::valueIsPresentInStyle):
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::equals):
        (WebCore):
        * svg/SVGColor.h:
        (SVGColor):
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::equals):
        (WebCore):
        * svg/SVGPaint.h:
        (SVGPaint):

2013-02-11  Pan Deng  <pan.deng@intel.com>

        [Web Inspector] Network panel, sort by "transferSize" instead of "resourceSize".
        https://bugs.webkit.org/show_bug.cgi?id=109142.

        Reviewed by Vsevolod Vlasov.

        Sort by "transferSize" as it is the primary rather than "resoureSize".

        No new tests.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.SizeComparator):

2013-02-11  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Resources] Prefactorings in DataGrid and CookieTable
        https://bugs.webkit.org/show_bug.cgi?id=109141

        Reviewed by Vsevolod Vlasov.

        1) Make deleteCookie method static and move to WebInspector.Cookie
        2) Replace resfreshCallback getter/setter in DataGrid with
        constructor parameter

        * inspector/front-end/CookieItemsView.js: Adopt changes.
        * inspector/front-end/CookieParser.js:
        (WebInspector.Cookie.prototype.remove): Moved from CookiesTable.
        * inspector/front-end/CookiesTable.js: Adopt changes.
        * inspector/front-end/DataGrid.js:
        Replace setter with constructor parameter.

2013-02-11  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: Don't throw exceptions in WebInspector.Color
        https://bugs.webkit.org/show_bug.cgi?id=104835

        Reviewed by Vsevolod Vlasov.

        WebInspector.Color.parse() returns a Color from a string, or null;
        Ctor calls now call parse();
        In the StylesSideBarPane, test null rather than catch(e).

        Added case to inspector/styles/styles-invalid-color-values.html

        * inspector/front-end/Color.js:
        (WebInspector.Color):
        (WebInspector.Color.parse):
        (WebInspector.Color.fromRGBA):
        (WebInspector.Color.fromRGB):
        (WebInspector.Color.prototype.toString):
        (WebInspector.Color.prototype._parse.this.alpha.set 0):
        (WebInspector.Color.prototype._parse.this.nickname.set 2):
        (WebInspector.Color.prototype._parse.this.hsla.set 1):
        (WebInspector.Color.prototype._parse.this.rgba.set 0):
        (WebInspector.Color.prototype._parse.set WebInspector):
        (WebInspector.Color.prototype._parse):
        * inspector/front-end/Spectrum.js:
        (WebInspector.Spectrum.prototype.get color):
        * inspector/front-end/StylesSidebarPane.js:

2013-02-11  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: home button behaviour is wrong in DTE
        https://bugs.webkit.org/show_bug.cgi?id=109154

        Reviewed by Vsevolod Vlasov.

        Handle home key shortcut explicitly in TextEditorMainPanel.

        New test: inspector/editor/text-editor-home-button.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._registerShortcuts):
        (WebInspector.TextEditorMainPanel.prototype._handleHomeKey):

2013-02-11  Abhishek Arya  <inferno@chromium.org>

        Add ASSERT_WITH_SECURITY_IMPLICATION to detect out of bounds access
        https://bugs.webkit.org/show_bug.cgi?id=108981

        Reviewed by Eric Seidel.

        * Modules/mediastream/RTCStatsResponse.cpp:
        (WebCore::RTCStatsResponse::addElement):
        (WebCore::RTCStatsResponse::addStatistic):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::skipBuffer):
        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseValueMultiplicativeExpression):
        (WebCore::CSSCalcExpressionNodeParser::parseAdditiveValueExpression):
        * css/WebKitCSSTransformValue.cpp:
        (WebCore::transformValueToCssString):
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::search):
        * html/HTMLElement.cpp:
        (WebCore::parseColorStringWithCrazyLegacyRules):
        * html/ImageData.cpp:
        (WebCore::ImageData::ImageData):
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::DateTimeSymbolicFieldElement):
        * html/track/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::add):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::getSomeData):
        * platform/SharedBufferChunkReader.cpp:
        (WebCore::SharedBufferChunkReader::nextChunk):
        * platform/audio/HRTFDatabase.cpp:
        (WebCore::HRTFDatabase::getKernelsFromAzimuthElevation):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/Region.cpp:
        (WebCore::Region::Shape::segments_end):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::getValues):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::inputEffect):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::decode):
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::checkFloatsInCleanLine):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::executeAction):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculatePercentForSpline):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::findInstanceTime):

2013-02-10  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: Implement basic speaking/finished speaking behavior
        https://bugs.webkit.org/show_bug.cgi?id=107135

        Reviewed by Sam Weinig.

        Implements the basic functionality of speaking utterances.

        In the WebCore side, it manages the speech queue the way the spec defines
        (that is, new jobs are appended to a queue and wait for other jobs to finish).

        On the Mac side, it instantiates a synthesizer and handles the callbacks for when
        jobs are finished. It sends those jobs back to WebCore to dispatch the right events.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-speak.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore::SpeechSynthesis::paused):
        (WebCore::SpeechSynthesis::startSpeakingImmediately):
        (WebCore::SpeechSynthesis::speak):
        (WebCore):
        (WebCore::SpeechSynthesis::fireEvent):
        (WebCore::SpeechSynthesis::handleSpeakingCompleted):
        (WebCore::SpeechSynthesis::didStartSpeaking):
        (WebCore::SpeechSynthesis::didFinishSpeaking):
        (WebCore::SpeechSynthesis::speakingErrorOccurred):
        * Modules/speech/SpeechSynthesis.h:
        (WebCore):
        (WebCore::SpeechSynthesis::speaking):
        (SpeechSynthesis):
        * Modules/speech/SpeechSynthesisEvent.cpp:
        (WebCore::SpeechSynthesisEvent::create):
        (WebCore):
        (WebCore::SpeechSynthesisEvent::SpeechSynthesisEvent):
        * Modules/speech/SpeechSynthesisEvent.h:
        (SpeechSynthesisEvent):
        (WebCore::SpeechSynthesisEvent::interfaceName):
        * Modules/speech/SpeechSynthesisUtterance.h:
        (WebCore::SpeechSynthesisUtterance::startTime):
        (WebCore::SpeechSynthesisUtterance::setStartTime):
        (SpeechSynthesisUtterance):
        * platform/PlatformSpeechSynthesisUtterance.cpp:
        (WebCore::PlatformSpeechSynthesisUtterance::PlatformSpeechSynthesisUtterance):
        * platform/PlatformSpeechSynthesisUtterance.h:
        (PlatformSpeechSynthesisUtterance):
        (WebCore::PlatformSpeechSynthesisUtterance::setVolume):
        (WebCore::PlatformSpeechSynthesisUtterance::setRate):
        (WebCore::PlatformSpeechSynthesisUtterance::setPitch):
        (WebCore::PlatformSpeechSynthesisUtterance::startTime):
        (WebCore::PlatformSpeechSynthesisUtterance::setStartTime):
        (WebCore::PlatformSpeechSynthesisUtterance::client):
        * platform/PlatformSpeechSynthesizer.cpp:
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        * platform/PlatformSpeechSynthesizer.h:
        (PlatformSpeechSynthesizerClient):
        (WebCore::PlatformSpeechSynthesizer::client):
        (PlatformSpeechSynthesizer):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper initWithSpeechSynthesizer:WebCore::]):
        (-[WebSpeechSynthesisWrapper dealloc]):
        (-[WebSpeechSynthesisWrapper convertRateToWPM:]):
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeaking:]):
        (WebCore::PlatformSpeechSynthesizer::speak):

2013-02-10  Eric Seidel  <eric@webkit.org>

        Make the existing HTMLPreloadScanner threading-aware
        https://bugs.webkit.org/show_bug.cgi?id=107807

        Reviewed by Adam Barth.

        The HTMLPreloadScanner and CSSPreloadScanner do a number of things.
        CSSPreloadScanner is mostly just a helper class for HTMLPreloadScanner.
        HTMLPreloadScanner runs its own copy of the HTMLTokenizer and uses
        HTMLTokenizer::updateStateFor to emulate enough of the TreeBuilder
        to get a realistic stream of tokens.  It does some additional TreeBuilder
        emulation, including tracking template tags and base tags, but mostly
        just scans the token stream for start-tags and looks for URLs in them.
        It tracks when it has seen a <style> tag and starts sending all character tokens
        to the CSSPreloadScanner until a </style> tag is seen.
        It also (unfortunately) knows some about the loader guts and how to construct
        a proper CachedResourcRequest and issue a preload.

        This patch changes the model so that the preload scanners only know how to produce
        PreloadRequest objects and append them to a passed-in vector.

        This changes the preload-scanner behavior so that preloads are now all issued in one large
        batch at the end of scanning, instead of as we hit each resource.  It's possible that
        we'll wait to instead check for preload requests more often, at a possible tradeoff
        to tokenizing speed.

        An alternate approach might be to pass in a preload-delegate of sorts which knew how
        to either build a vector, or send requests immediately.  For now the build-a-vector-always
        approach seems clean, and does not seem to slow down our PerformanceTest microbenchmarks at least.

        This patch has 2 main pieces:
        - Remove Document and (and loader) dependencies from HTMLPreloadScanner/CSSPreloadScanner
          This is done through introduction of a new HTMLResourcePreloader class which holds
          a Document* and knows how to talk to the CachedResourceLoader.
        - Clean-up HTMLPreloadScanners token-loop to not be tied to having a Tokenizer.
          (On a background thead, the HTMLPreloadScanner won't own the tokenizer, it will just
           be passed in tokens and expected to issue loads if necessary.)

        This passes all of the LayoutTests using the main thread parser.

        This patch does not make the HTMLPreloadScanner 100% ready for threading
        (it still uses AtomicString which is currently not-OK on the parser thread)
        but it's very close.  Two further (already written) patches will complete this.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::CSSPreloadScanner):
        (WebCore::CSSPreloadScanner::scan):
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::appendCurrentInputStreamToPreloadScannerAndScan):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::isStartTag):
        (WebCore):
        (WebCore::isStartOrEndTag):
        (WebCore::PreloadTask::processAttributes):
        (WebCore::PreloadTask::charset):
        (PreloadTask):
        (WebCore::PreloadTask::resourceType):
        (WebCore::PreloadTask::shouldPreload):
        (WebCore::PreloadTask::createPreloadRequest):
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        (WebCore::HTMLPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::processPossibleTemplateTag):
        (WebCore::HTMLPreloadScanner::processPossibleStyleTag):
        (WebCore::HTMLPreloadScanner::processPossibleBaseTag):
        (WebCore::HTMLPreloadScanner::processToken):
        * html/parser/HTMLPreloadScanner.h:
        (HTMLPreloadScanner):
        * html/parser/HTMLResourcePreloader.cpp: Added.
        (WebCore):
        (WebCore::isStringSafeToSendToAnotherThread):
        (WebCore::PreloadRequest::isSafeToSendToAnotherThread):
        (WebCore::PreloadRequest::completeURL):
        (WebCore::PreloadRequest::resourceRequest):
        (WebCore::HTMLResourcePreloader::preload):
        * html/parser/HTMLResourcePreloader.h: Added.
        (WebCore):
        (PreloadRequest):
        (WebCore::PreloadRequest::create):
        (WebCore::PreloadRequest::PreloadRequest):
        (HTMLResourcePreloader):
        (WebCore::HTMLResourcePreloader::HTMLResourcePreloader):
        (WebCore::HTMLResourcePreloader::createWeakPtr):
        * loader/cache/CachedResourceRequest.h:

2013-02-06  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename isolated() to getWorld(), rename worldForEnteredContextIfIsolated() to worldForEnteredContext()
        https://bugs.webkit.org/show_bug.cgi?id=109039

        Reviewed by Adam Barth.

        This is a follow-up patch for r141983.
        Rename methods for consistency.

        No tests. No change in behavior.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::getWorld):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::shouldBypassMainWorldContentSecurityPolicy):
        (WebCore::ScriptController::currentWorldContext):
        * bindings/v8/V8Binding.h:
        (WebCore::worldForEnteredContext):
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallbackCustom):

2013-02-10  Alexandre Elias  <aelias@chromium.org>

        [chromium] Fix Android scrollbar size
        https://bugs.webkit.org/show_bug.cgi?id=109374

        Reviewed by James Robinson.

        This shrinks scrollbars to 3 device-independent pixels (usually 6
        physical pixels) and deletes the edge fade. Although the Android
        system theme does have an edge fade, it's a much sharper cliff
        than we had (against black, the colors go 64 -> 64 -> 52 -> 21 -> 0)
        and I can't perceive any difference compared with no fade at all.

        No new tests (due for rewrite in a week anyway).

        * platform/chromium/ScrollbarThemeChromiumAndroid.cpp:
        (WebCore):
        (WebCore::ScrollbarThemeChromiumAndroid::paintThumb):

2013-02-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove V8GCController::m_edenNodes and make minor DOM GC more precise
        https://bugs.webkit.org/show_bug.cgi?id=108579

        Reviewed by Adam Barth.

        Currently V8GCController::m_edenNodes stores a list of nodes whose
        wrappers have been created since the latest GC. The reason why we
        needed m_edenNodes is that there was no way to know a list of wrappers
        in the new space of V8. By using m_edenNodes, we had been approximating
        'wrappers in the new space' by 'wrappers that have been created since
        the latest GC'.

        Now V8 provides VisitHandlesForPartialDependence(), with which WebKit
        can know a list of wrappers in the new space. By using the API, we can
        remove V8GCController::m_edenNodes. The benefit is that (1) we no longer
        need to keep m_edenNodes and that (2) it enables more precise minor
        DOM GC (Remember that m_edenNodes was just an approximation).

        Performance benchmark: https://bugs.webkit.org/attachment.cgi?id=185940
        The benchmark runs 300 iterations, each of which creates 100000 elements.
        The benchmark measures average, min, median, max and stdev of execution times
        of the 300 iterations. This will tell us the worst-case overhead of this change.

        Before:
          mean=59.91ms, min=39ms, median=42ms, max=258ms, stdev=47.48ms

        After:
          mean=58.75ms, min=35ms, median=41ms, max=250ms, stdev=47.32ms

        As shown above, I couldn't observe any performance regression.

        No tests. No change in behavior.

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::setWrapperInObject):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::getWorldWithoutContextCheck):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::worldForEnteredContextIfIsolated):
        (WebCore::worldForEnteredContextWithoutContextCheck):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8GCController.cpp:
        (WebCore::gcTree):
        (WebCore):
        (MinorGCWrapperVisitor):
        (WebCore::MinorGCWrapperVisitor::MinorGCWrapperVisitor):
        (WebCore::MinorGCWrapperVisitor::notifyFinished):
        (WebCore::MajorGCWrapperVisitor::MajorGCWrapperVisitor):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (V8GCController):

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

        REGRESSION (r132422): Page content and scrollbars are incorrectly offset after restoring a page from the page cache
        https://bugs.webkit.org/show_bug.cgi?id=109317
        <rdar://problem/12649131>

        Reviewed by Simon Fraser.

        Mark all scrolling that occurs beneath FrameView::layout as programmatic.

        Test: platform/mac-wk2/tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2013-02-10  Kent Tamura  <tkent@chromium.org>

        [Mac] Fix release build failure by recent reverts

        * WebCore.exp.in:

2013-02-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] media/video-controls-fullscreen-volume.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=108682

        Reviewed by Martin Robinson.

        Clean up various signal handlers and avoid bad interaction between
        the FullscreenVideoControllerGStreamer and its subclasses,
        especially when the platform video window is created.

        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.cpp:
        (WebCore::FullscreenVideoControllerGStreamer::enterFullscreen):
        Initialize the window before connecting to the volume/mute
        signals. This ensures that the signals won't ever interfere with
        an inexisting window.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::~GStreamerGWorld): Remove GstBus
        synchronous handler function.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        Disconnect from volume/mute signals.
        (WebCore::MediaPlayerPrivateGStreamerBase::setStreamVolumeElement):
        Keep a trace of volume/mute signal handlers.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Various forward type declarations to avoid un-necessary header includes.
        (MediaPlayerPrivateGStreamerBase):
        * platform/graphics/gtk/FullscreenVideoControllerGtk.cpp:
        (WebCore::FullscreenVideoControllerGtk::FullscreenVideoControllerGtk):
        (WebCore::FullscreenVideoControllerGtk::volumeChanged): Bail out
        if volume button hasn't been created yet.
        (WebCore::FullscreenVideoControllerGtk::muteChanged): Ditto.

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

        RenderStyle should use copy-on-write inheritance for NinePieceImage.
        <http://webkit.org/b/109366>

        Reviewed by Antti Koivisto.

        Refactor NinePieceImage to hold a copy-on-write DataRef like other RenderStyle substructures.
        This allows us to avoids copying the NinePieceImageData when one RenderStyle inherits from another
        but modifies something in the substructure holding the NinePieceImage (typically StyleSurroundData.)

        Also made RenderStyle not copy-on-write its StyleSurroundData prematurely when doing a no-op write
        to a border-image related value.

        1.23 MB progression on Membuster3.

        * rendering/style/NinePieceImage.cpp:
        (WebCore::defaultData):
        (WebCore::NinePieceImage::NinePieceImage):
        (WebCore::NinePieceImageData::NinePieceImageData):
        (WebCore::NinePieceImageData::operator==):
        * rendering/style/NinePieceImage.h:
        (WebCore::NinePieceImageData::create):
        (WebCore::NinePieceImageData::copy):
        (NinePieceImageData):
        (NinePieceImage):
        (WebCore::NinePieceImage::operator==):
        (WebCore::NinePieceImage::operator!=):
        (WebCore::NinePieceImage::hasImage):
        (WebCore::NinePieceImage::image):
        (WebCore::NinePieceImage::setImage):
        (WebCore::NinePieceImage::imageSlices):
        (WebCore::NinePieceImage::setImageSlices):
        (WebCore::NinePieceImage::fill):
        (WebCore::NinePieceImage::setFill):
        (WebCore::NinePieceImage::borderSlices):
        (WebCore::NinePieceImage::setBorderSlices):
        (WebCore::NinePieceImage::outset):
        (WebCore::NinePieceImage::setOutset):
        (WebCore::NinePieceImage::horizontalRule):
        (WebCore::NinePieceImage::setHorizontalRule):
        (WebCore::NinePieceImage::verticalRule):
        (WebCore::NinePieceImage::setVerticalRule):
        (WebCore::NinePieceImage::copyImageSlicesFrom):
        (WebCore::NinePieceImage::copyBorderSlicesFrom):
        (WebCore::NinePieceImage::copyOutsetFrom):
        (WebCore::NinePieceImage::copyRepeatFrom):
        (WebCore::NinePieceImage::setMaskDefaults):
        (WebCore::NinePieceImage::computeOutset):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setBorderImageSource):
        (WebCore::RenderStyle::setBorderImageSlices):
        (WebCore::RenderStyle::setBorderImageWidth):
        (WebCore::RenderStyle::setBorderImageOutset):
        * rendering/style/RenderStyle.h:

2013-02-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r142343.
        http://trac.webkit.org/changeset/142343
        https://bugs.webkit.org/show_bug.cgi?id=108284

        It might make inspector/profiler/selector-profiler-url.html
        crashy.

        * WebCore.exp.in:
        * css/plugIns.css:
        (p):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::createRenderer):
        (WebCore::HTMLPlugInImageElement::willRecalcStyle):
        (WebCore::HTMLPlugInImageElement::updateSnapshot):
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot):
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn):
        * html/HTMLPlugInImageElement.h:
        (WebCore):
        (HTMLPlugInImageElement):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::plugInStartLabelImage):
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        * platform/chromium/LocalizedStringsChromium.cpp:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore):
        * platform/qt/LocalizedStringsQt.cpp:
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore):
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        (WebCore::RenderSnapshottedPlugIn::paint):
        (WebCore::RenderSnapshottedPlugIn::paintReplaced):
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        (WebCore::RenderSnapshottedPlugIn::paintReplacedSnapshot):
        (WebCore::RenderSnapshottedPlugIn::startLabelImage):
        (WebCore::RenderSnapshottedPlugIn::paintReplacedSnapshotWithLabel):
        (WebCore::RenderSnapshottedPlugIn::getCursor):
        (WebCore::RenderSnapshottedPlugIn::handleEvent):
        (WebCore::RenderSnapshottedPlugIn::tryToFitStartLabel):
        * rendering/RenderSnapshottedPlugIn.h:

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

        RenderText: Access characters through m_text instead of caching data pointers separately.
        <http://webkit.org/b/109357>

        Reviewed by Antti Koivisto.

        Go through RenderText::m_text.impl() instead of caching the character data pointer.
        RenderText should never have a null String in m_text so it's safe to access impl() directly.
        We have assertions for this since before.

        Removing this pointer shrinks RenderText by 8 bytes, allowing it to fit into a snugger size class.
        749 KB progression on Membuster3.

        * rendering/RenderText.cpp:
        (SameSizeAsRenderText):
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::setTextInternal):
        * rendering/RenderText.h:
        (WebCore::RenderText::is8Bit):
        (WebCore::RenderText::characters8):
        (WebCore::RenderText::characters16):
        (WebCore::RenderText::characterAt):
        (WebCore::RenderText::operator[]):
        (RenderText):

2013-02-10  Jae Hyun Park  <jae.park08@gmail.com>

        Rename ENABLE(GLIB_SUPPORT) to USE(GLIB)
        https://bugs.webkit.org/show_bug.cgi?id=104266

        Reviewed by Philippe Normand.

        Using USE(GLIB) instead of ENABLE(GLIB_SUPPORT) is more consistent with
        the existing macro naming conventions.

        From Platform.h
        USE() - use a particular third-party library or optional OS service
        ENABLE() - turn on a specific feature of WebKit

        No new tests, no new functionality.

        * WebCore.pri:

2013-02-10  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Build errors in TextureMapperShaderProgram.cpp when compiling with Clang
        https://bugs.webkit.org/show_bug.cgi?id=109321

        Reviewed by Noam Rosenthal.

        Clang is reporting errors due to non-constant expressions that cannot be narrowed
        from double to float type in initializer list when constructing a matrix of GC3Dfloat
        numbers. To avoid this every parameter is passed through an explicit GC3Dfloat constructor.

        No new tests - no new functionality.

        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::setMatrix):

2013-02-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] audio is muted when playback rate is between 0.8 and 2.0
        https://bugs.webkit.org/show_bug.cgi?id=109362

        Reviewed by Martin Robinson.

        Don't mute sound if the audio pitch is preserved. If this is not
        the case mute it if it's too extreme, as the HTML5 spec recommends.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setRate):

2013-02-09  Dominic Mazzoni  <dmazzoni@google.com>

        fast/encoding/parser-tests-*.html tests sometimes crash
        https://bugs.webkit.org/show_bug.cgi?id=108058

        Reviewed by Chris Fleizach.

        To avoid calling accessibilityIsIgnored while the render
        tree is unstable, call accessibilityIsIgnored in the
        notification timer handler, only for childrenChanged
        notifications.

        This exposed a problem where notifications queued on
        objects can fire after the object has been deleted; fix that
        by checking the object's id, which is always set to 0 when
        removed from the tree.

        Covered by existing tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::notificationPostTimerFired):

2013-02-09  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Do not assume MediaAccessibility framework is installed
        https://bugs.webkit.org/show_bug.cgi?id=109365

        Reviewed by Sam Weinig.

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::userPrefersCaptions): Call the base class if the framework
            is not available.
        (WebCore::CaptionUserPreferencesMac::setUserPrefersCaptions): Ditto.
        (WebCore::CaptionUserPreferencesMac::userHasCaptionPreferences): Ditto.
        (WebCore::CaptionUserPreferencesMac::registerForCaptionPreferencesChangedCallbacks): Ditto.
        (WebCore::CaptionUserPreferencesMac::unregisterForCaptionPreferencesChangedCallbacks): Ditto.
        (WebCore::CaptionUserPreferencesMac::captionsStyleSheetOverride): Ditto.
        (WebCore::CaptionUserPreferencesMac::captionFontSizeScale): Ditto.
        (WebCore::CaptionUserPreferencesMac::setPreferredLanguage): Ditto.
        (WebCore::CaptionUserPreferencesMac::preferredLanguages): Ditto.

2013-02-09  Dominic Mazzoni  <dmazzoni@google.com>

        AX: move isIgnored caching to AXObject
        https://bugs.webkit.org/show_bug.cgi?id=109322

        Reviewed by Chris Fleizach.

        There's some benefit to caching accessibilityIsIgnored
        (using AXComputedObjectAttributeCache) for more than just
        AXRenderObject, so move the caching code to AXObject.

        AXObject now has a protected virtual method
        computeAccessibilityIsIgnored, and all subclasses
        override that instead.

        No new tests.

        * accessibility/AccessibilityImageMapLink.h:
        (AccessibilityImageMapLink):
        (WebCore::AccessibilityImageMapLink::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityList.h:
        (AccessibilityList):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityListBox.h:
        (AccessibilityListBox):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityListBoxOption.h:
        (AccessibilityListBoxOption):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityMediaTimeDisplay::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityMediaControls.h:
        (AccessibilityMediaControl):
        (WebCore::AccessibilityMediaControlsContainer::computeAccessibilityIsIgnored):
        (AccessibilityMediaTimeDisplay):
        * accessibility/AccessibilityMenuList.h:
        (WebCore::AccessibilityMenuList::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityMenuListOption.h:
        (AccessibilityMenuListOption):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityMenuListPopup.h:
        (AccessibilityMenuListPopup):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityNodeObject.h:
        (AccessibilityNodeObject):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        (WebCore):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        (WebCore::AccessibilityObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityProgressIndicator.h:
        (AccessibilityProgressIndicator):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityScrollView.h:
        (AccessibilityScrollView):
        * accessibility/AccessibilityScrollbar.h:
        (WebCore::AccessibilityScrollbar::computeAccessibilityIsIgnored):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::computeAccessibilityIsIgnored):
        (WebCore::AccessibilitySliderThumb::computeAccessibilityIsIgnored):
        * accessibility/AccessibilitySlider.h:
        (AccessibilitySlider):
        (AccessibilitySliderThumb):
        * accessibility/AccessibilitySpinButton.h:
        (WebCore::AccessibilitySpinButton::computeAccessibilityIsIgnored):
        (WebCore::AccessibilitySpinButtonPart::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTable.h:
        (AccessibilityTable):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTableCell.h:
        (AccessibilityTableCell):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTableColumn.h:
        (AccessibilityTableColumn):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTableHeaderContainer.h:
        (AccessibilityTableHeaderContainer):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTableRow.h:
        (AccessibilityTableRow):

2013-02-09  David Farler  <dfarler@apple.com>

        Make TestWebKitAPI work for iOS
        https://bugs.webkit.org/show_bug.cgi?id=108978

        Reviewed by David Kilzer.

        Tests already exist - refactor only.

        * WebCore.exp.in: Lumped __ZNK7WebCore4KURL7hasPathEv with related methods.
        * platform/KURL.cpp: Inlined hasPath() into the header
        * platform/KURL.h: Inlined hasPath() into the header

2013-02-09  Adam Barth  <abarth@webkit.org>

        Load event fires too early with threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=108984

        Reviewed by Eric Seidel.

        Previously, the DocumentLoader would always be on the stack when the
        HTMLDocumentParser was processing data from the network.  The
        DocumentLoader would then tell isLoadingInAPISense not to fire the load
        event.  Now that we process data asynchronously with the threaded
        parser, the DocumentLoader is not always on the stack, which means we
        need to delay the load event using the clause that asks the parser
        whether it is processing data.

        Unfortunately, that clause is fragile because we can check for load
        completion while we're switching parsers between the network-created
        parser and a script-created parser. To avoid accidentially triggerin
        the load event during these "gaps," this patch introduces a counter on
        document to record how many parsers are active on the stack.  While
        that numer is non-zero, we'll delay the load event. When that number
        reaches zero, we'll check for load complete.

        That last step is required because the DocumentLoader::finishLoading
        method is no longer guarunteed to check for load complete after calling
        finish on the parser because the finish operation might complete
        asynchronously.

        After this patch, the threaded parser passes all but four fast/parser
        tests.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::hasActiveParser):
        (WebCore):
        (WebCore::Document::decrementActiveParserCount):
        * dom/Document.h:
        (Document):
        (WebCore::Document::incrementActiveParserCount):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::ActiveParserSession::ActiveParserSession):
        (WebCore):
        (WebCore::ActiveParserSession::~ActiveParserSession):
        (WebCore::PumpSession::PumpSession):
        (WebCore::PumpSession::~PumpSession):
        * html/parser/HTMLParserScheduler.h:
        (WebCore):
        (ActiveParserSession):
        (PumpSession):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense):

2013-02-09  Mike West  <mkwst@chromium.org>

        Use IGNORE_EXCEPTION for initialized, but unused, ExceptionCodes.
        https://bugs.webkit.org/show_bug.cgi?id=109295

        Reviewed by Darin Adler.

        The monster patch in http://wkbug.com/108771 missed an entire class of
        ignored exceptions. It only dealt with call sites that never initialized
        the ExceptionCode variable, on the assumption that only such call sites
        would ignore the variable's value.

        That was a flawed assumption: a large number of sites that initialize the
        ExceptionCode to 0 ignore it regardless. This patch deals with the
        almost-as-large set of callsites that initialize the variable, pass it to
        a function, and then never touch it again.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::forceClose):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaSelectedTextRange):
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getSelectionOffsetsForObject):
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (selectionBelongsToObject):
        * dom/Node.cpp:
        (WebCore::Node::textRects):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::hide):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleAtSelectionStart):
        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange):
        (WebCore::Editor::pasteAsPlainText):
        (WebCore::Editor::pasteAsFragment):
        (WebCore::Editor::shouldDeleteRange):
        (WebCore::Editor::dispatchCPPEvent):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::isFrameInRange):
        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity):
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::doUnapply):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply):
        * editing/TextCheckingHelper.cpp:
        (WebCore::expandToParagraphBoundary):
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::isUngrammatical):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        * editing/TextInsertionBaseCommand.cpp:
        (WebCore::dispatchBeforeTextInsertedEvent):
        (WebCore::canAppendNewLineFeedToSelection):
        * editing/TextIterator.cpp:
        (WebCore::findPlainText):
        * editing/htmlediting.cpp:
        (WebCore::extendRangeToWrappingNodes):
        (WebCore::isNodeVisiblyContainedWithin):
        * editing/visible_units.cpp:
        (WebCore::nextBoundary):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::createShadowSubtree):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::setText):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::setText):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::didCompleteLoad):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        * html/track/TextTrackList.cpp:
        (TextTrackList::asyncEventTimerFired):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore):
        * inspector/InspectorFileSystemAgent.cpp:
        (WebCore):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::addRange):
        * page/DragController.cpp:
        (WebCore::DragController::dispatchTextInputEventFor):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::handleTouchEvent):
        * page/FrameActionScheduler.cpp:
        (WebCore::EventFrameAction::fire):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::dispatchZoomEvent):
        (WebCore::SVGDocument::dispatchScrollEvent):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::value):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::exitText):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parse):
        (WebCore::XMLDocumentParser::startDocument):
        (WebCore::XMLDocumentParser::parseCharacters):

2013-02-09  Stephen White  <senorblanco@chromium.org>

        [skia] Fix memory management in SkiaImageFilterBuilder and friends.
        https://bugs.webkit.org/show_bug.cgi?id=109326

        Sadly, skia has no official ref-counted pointers, so we must make do
        with SkAutoTUnref.

        Reviewed by James Robinson.

        Correctness covered by existing tests in css3/filters.

        * platform/graphics/filters/skia/FEBlendSkia.cpp:
        (WebCore::FEBlend::createImageFilter):
        * platform/graphics/filters/skia/FEComponentTransferSkia.cpp:
        (WebCore::FEComponentTransfer::createImageFilter):
        * platform/graphics/filters/skia/FELightingSkia.cpp:
        (WebCore::FELighting::createImageFilter):
        Adopt refs produced by the build() pass with SkAutoTUnref.
        * platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp:
        (WebCore::SkiaImageFilterBuilder::~SkiaImageFilterBuilder):
        Unref the builder's hashmap effect pointers.
        (WebCore::SkiaImageFilterBuilder::build):
        Ref the pointer returned to the caller, and use SkAutoTUnref
        internally while building the tree.
        * platform/graphics/filters/skia/SkiaImageFilterBuilder.h:
        (SkiaImageFilterBuilder):
        Add a destructor to SkiaImageFilterBuilder.


2013-02-09  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Rename AXObject::cachedIsIgnoredValue to lastKnownIsIgnoredValue
        https://bugs.webkit.org/show_bug.cgi?id=108238

        Reviewed by Chris Fleizach.

        Simple refactoring, no new tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::childrenChanged):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::lastKnownIsIgnoredValue):
        (WebCore::AccessibilityObject::setLastKnownIsIgnoredValue):
        (WebCore::AccessibilityObject::notifyIfIgnoredValueChanged):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):

2013-02-09  Anton Vayvod  <avayvod@chromium.org>
 
        [Text Autosizing] Cleanup change: converter the pointer argument to be a reference since
        non-null pointer is always expected.
        https://bugs.webkit.org/show_bug.cgi?id=109079
 
        Reviewed by Kenneth Rohde Christiansen.
 
        Cleanup change, no need to add new tests or modify the existing ones.
 
        * rendering/TextAutosizer.cpp:
 
        Changed parameter from a pointer to a reference in the methods below.
 
        (WebCore::TextAutosizer::processSubtree):
        (WebCore::TextAutosizer::processCluster):
        (WebCore::TextAutosizer::processContainer):
        (WebCore::TextAutosizer::isNarrowDescendant):
        (WebCore::TextAutosizer::isWiderDescendant):
        (WebCore::TextAutosizer::isAutosizingCluster):
        (WebCore::TextAutosizer::clusterShouldBeAutosized):
        (WebCore::TextAutosizer::measureDescendantTextWidth):
 
        * rendering/TextAutosizer.h: updated method prototypes.

2013-02-09  Rafael Brandao  <rafael.lobo@openbossa.org>

        [TexMap] Separate classes per file in TextureMapperBackingStore.h
        https://bugs.webkit.org/show_bug.cgi?id=109333

        Reviewed by Noam Rosenthal.

        TextureMapperBackingStore.h had the classes TextureMapperBackingStore,
        TextureMapperTiledBackingStore, TextureMapperSurfaceBackingStore and
        TextureMapperTile which was quite confusing. Now each one has its
        own header and its own source file.

        No new tests needed, refactoring only.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.cpp: Added.
        (WebCore):
        (WebCore::TextureMapperSurfaceBackingStore::setGraphicsSurface):
        (WebCore::TextureMapperSurfaceBackingStore::swapBuffersIfNeeded):
        (WebCore::TextureMapperSurfaceBackingStore::texture):
        (WebCore::TextureMapperSurfaceBackingStore::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.h: Added.
        (WebCore):
        (TextureMapperSurfaceBackingStore):
        (WebCore::TextureMapperSurfaceBackingStore::create):
        (WebCore::TextureMapperSurfaceBackingStore::~TextureMapperSurfaceBackingStore):
        (WebCore::TextureMapperSurfaceBackingStore::TextureMapperSurfaceBackingStore):
        * platform/graphics/texmap/TextureMapperTile.cpp: Added.
        (WebCore):
        (WebCore::TextureMapperTile::updateContents):
        (WebCore::TextureMapperTile::paint):
        * platform/graphics/texmap/TextureMapperTile.h: Added.
        (WebCore):
        (TextureMapperTile):
        (WebCore::TextureMapperTile::texture):
        (WebCore::TextureMapperTile::rect):
        (WebCore::TextureMapperTile::setTexture):
        (WebCore::TextureMapperTile::setRect):
        (WebCore::TextureMapperTile::~TextureMapperTile):
        (WebCore::TextureMapperTile::TextureMapperTile):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp: Copied from Source/WebCore/platform/graphics/texmap/TextureMapperBackingStore.cpp.
        (WebCore):
        (WebCore::TextureMapperTiledBackingStore::TextureMapperTiledBackingStore):
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::adjustedTransformForRect):
        (WebCore::TextureMapperTiledBackingStore::paintToTextureMapper):
        (WebCore::TextureMapperTiledBackingStore::drawBorder):
        (WebCore::TextureMapperTiledBackingStore::drawRepaintCounter):
        (WebCore::TextureMapperTiledBackingStore::createOrDestroyTilesIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        (WebCore::TextureMapperTiledBackingStore::texture):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h: Added.
        (WebCore):
        (TextureMapperTiledBackingStore):
        (WebCore::TextureMapperTiledBackingStore::create):
        (WebCore::TextureMapperTiledBackingStore::~TextureMapperTiledBackingStore):
        (WebCore::TextureMapperTiledBackingStore::setContentsToImage):
        (WebCore::TextureMapperTiledBackingStore::rect):
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:

2013-02-09  Philip Rogers  <pdr@google.com>

        Sanitize m_keyTimes for paced value animations
        https://bugs.webkit.org/show_bug.cgi?id=108828

        Reviewed by Dirk Schulze.

        SVG animations with calcMode=paced calculate new m_keyTimes in
        SVGAnimationElement::calculateKeyTimesForCalcModePaced() because paced animations do not
        specify keyTimes. If an error occurs while calculating m_keyTimes, and there exists
        user-specified values, a crash could occur because the user-specified values were not
        sanitized.

        This change clears user-specified keyTimes before calculating new ones.

        Test: svg/animations/animate-keytimes-crash.html

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):

2013-02-09  Eric Seidel  <eric@webkit.org>

        Fix TextDocumentParser to play nice with threading
        https://bugs.webkit.org/show_bug.cgi?id=109240

        Reviewed by Adam Barth.

        Before the HTML5 parser re-write the text document parser
        was completely custom.  With the HTML5 parser, we just made
        the TextDocumentParser use the HTMLDocumentParser with an
        artificial script tag.

        However, our solution was slightly over-engineered to avoid
        lying about the column numbers of the first line of the text document
        during parsing. :)

        This change makes us use a simpler (and threading-compatible)
        solution by just inserting a real "<pre>" tag into the
        input stream instead of hacking one together with the treebuilder
        and manually setting the Tokenizer state.

        fast/parser/empty-text-resource.html covers this case.

        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::TextDocumentParser):
        (WebCore::TextDocumentParser::insertFakePreElement):

2013-02-09  Kent Tamura  <tkent@chromium.org>

        Add missing copyright header
        https://bugs.webkit.org/show_bug.cgi?id=107507

        * Resources/pagepopups/chromium/calendarPickerChromium.css:
        * Resources/pagepopups/chromium/pickerCommonChromium.css:

2013-02-09  Kent Tamura  <tkent@chromium.org>

        Fix crash by img[ismap] with content property
        https://bugs.webkit.org/show_bug.cgi?id=108702

        Reviewed by Adam Barth.

        Test: fast/dom/HTMLAnchorElement/anchor-ismap-crash.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition):
        Check if the renderer of an img element is RenderImage.

2013-02-09  Mike West  <mkwst@chromium.org>

        Drop ExceptionCode from IDB's directionToString and modeToString.
        https://bugs.webkit.org/show_bug.cgi?id=109143

        Reviewed by Jochen Eisinger.

        No caller of either IDBCursor::directionToString or
        IDBTransaction::modeToString makes use of the ExceptionCode these
        methods require. This patch removes the 'ExceptionCode&' parameter from
        both methods and their callsites.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::direction):
        (WebCore::IDBCursor::directionToString):
            Drop the 'ExceptionCode&' parameter, and replace the 'TypeError'
            exception previously generated with ASSERT_NOT_REACHED.
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::mode):
        (WebCore::IDBTransaction::modeToString):
            Drop the 'ExceptionCode&' parameter, and replace the 'TypeError'
            exception previously generated with ASSERT_NOT_REACHED.
        * Modules/indexeddb/IDBTransaction.h:

2013-02-09  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][Qt][WebGL] Share the common code between GraphicsSurfaceGLX and X11WindowResources.
        https://bugs.webkit.org/show_bug.cgi?id=106666

        Reviewed by Kenneth Rohde Christiansen.

        Covered by existing WebGL tests.

        This patch removes any duplicate code in X11WindowResources and
        GraphicsSurfaceGLX. No new functionality is added.

        * PlatformEfl.cmake:
        * Target.pri:
        * platform/graphics/surfaces/egl/EGLConfigSelector.cpp:
        (WebCore::EGLConfigSelector::pixmapContextConfig):
        * platform/graphics/surfaces/egl/EGLConfigSelector.h:
        (EGLConfigSelector):
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLWindowTransportSurface::EGLWindowTransportSurface):
        (WebCore::EGLWindowTransportSurface::destroy):
        (WebCore::EGLWindowTransportSurface::setGeometry):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        (WebCore):
        (EGLWindowTransportSurface):
        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        (WebCore::GLXConfigSelector::GLXConfigSelector):
        (WebCore::GLXConfigSelector::visualInfo):
        (WebCore::GLXConfigSelector::pBufferContextConfig):
        (WebCore::GLXConfigSelector::createSurfaceConfig):
        (GLXConfigSelector):
        * platform/graphics/surfaces/glx/GLXContext.cpp:
        (WebCore::initializeARBExtensions):
        (WebCore::GLXOffScreenContext::GLXOffScreenContext):
        (WebCore::GLXOffScreenContext::initialize):
        (WebCore::GLXOffScreenContext::platformReleaseCurrent):
        (WebCore::GLXOffScreenContext::freeResources):
        * platform/graphics/surfaces/glx/GLXContext.h:
        (GLXOffScreenContext):
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXTransportSurface::setGeometry):
        (WebCore::GLXTransportSurface::destroy):
        (WebCore::GLXPBuffer::initialize):
        * platform/graphics/surfaces/glx/GLXSurface.h:
        (GLXTransportSurface):
        (GLXPBuffer):
        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::initialize):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (WebCore::GraphicsSurfacePrivate::createPixmap):
        (WebCore::GraphicsSurfacePrivate::display):
        (WebCore::GraphicsSurfacePrivate::flags):
        (WebCore::GraphicsSurfacePrivate::clear):
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        No new functionality added. Made changes to take the common code into use.

        * platform/graphics/surfaces/glx/X11WindowResources.h: Removed.
        * platform/graphics/surfaces/glx/X11Helper.cpp: Renamed from Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.cpp.
        (WebCore):
        (WebCore::DisplayConnection::DisplayConnection):
        (DisplayConnection):
        (WebCore::DisplayConnection::~DisplayConnection):
        (WebCore::DisplayConnection::display):
        (OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::rootWindow):
        (WebCore::X11Helper::resizeWindow):
        (WebCore::X11Helper::createOffScreenWindow):
        (WebCore::X11Helper::destroyWindow):
        (WebCore::X11Helper::isXRenderExtensionSupported):
        (WebCore::X11Helper::nativeDisplay):
        (WebCore::X11Helper::offscreenRootWindow):
        * platform/graphics/surfaces/glx/X11Helper.h: Added.
        (WebCore):
        (WebCore::handleXPixmapCreationError):
        (X11Helper):
        (ScopedXPixmapCreationErrorHandler):
        (WebCore::ScopedXPixmapCreationErrorHandler::ScopedXPixmapCreationErrorHandler):
        (WebCore::ScopedXPixmapCreationErrorHandler::~ScopedXPixmapCreationErrorHandler):
        (WebCore::ScopedXPixmapCreationErrorHandler::isValidOperation):
        Moved common code from GraphicsSurfaceGLX to X11Helper.

2013-02-09  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: show whitespace characters in DTE
        https://bugs.webkit.org/show_bug.cgi?id=108947

        Reviewed by Pavel Feldman.

        New test: inspector/editor/text-editor-show-whitespaces.html

        Split consecutive whitespace characters into groups of 16, 8, 4, 2 and 1 and
        add ::before pseudoclass for this groups which contains necessary
        amount of "dots" (u+00b7). Add a setting "Show whitespace" for this
        option in "Sources" section of "General" tab.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype.wasShown):
        (WebInspector.TextEditorMainPanel.prototype.willHide):
        (WebInspector.TextEditorMainPanel.prototype._renderRanges):
        (WebInspector.TextEditorMainPanel.prototype._renderWhitespaceCharsWithFixedSizeSpans):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):
        * inspector/front-end/inspectorSyntaxHighlight.css:
        (.webkit-whitespace-1::before):
        (.webkit-whitespace-2::before):
        (.webkit-whitespace-4::before):
        (.webkit-whitespace-8::before):
        (.webkit-whitespace-16::before):
        (.webkit-whitespace::before):

2013-02-08  Eric Carlson  <eric.carlson@apple.com>

        [Mac] respect in-band caption color
        https://bugs.webkit.org/show_bug.cgi?id=109203

        Reviewed by Dean Jackson.

        Test: media/track/track-in-band-style.html

        * WebCore.xcodeproj/project.pbxproj: Add HTMLDivElement.h to private headers because it is 
            included by HTMLTextElement, which is included by HTMLMediaElement.h, which is included 
            by files in WebKit/WebKit2.
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::addGenericCue): Set cue colors if necessary.

        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::element): New, accessor for the cue element so it can be styled.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties): Set container and cue background 
            color if necessary.
        (WebCore::TextTrackCueGeneric::operator==): Compare cue colors.
        * html/track/TextTrackCueGeneric.h:
        (WebCore::TextTrackCueGeneric::foregroundColor): Add color accessors.
        (WebCore::TextTrackCueGeneric::setForegroundColor):
        (WebCore::TextTrackCueGeneric::backgroundColor):
        (WebCore::TextTrackCueGeneric::setBackgroundColor):

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::registerForCaptionPreferencesChangedCallbacks): Always
            regenerate override CSS when an element registers for callbacks.
        (WebCore::CaptionUserPreferencesMac::captionsWindowCSS): Drive by fix of "window color" padding.
        (WebCore::CaptionUserPreferencesMac::captionsStyleSheetOverride): Log the stylesheet generated
            for easier debugging.

        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::GenericCueData::foregroundColor): Add color getters/setters.
        (WebCore::GenericCueData::setForegroundColor):
        (WebCore::GenericCueData::backgroundColor):
        (WebCore::GenericCueData::setBackgroundColor):

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::makeRGBA32FromARGBCFArray): Initialize a RGBA32 from a CFArray of color values.
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes): Process cue colors.

2013-02-08  Benjamin Poulain  <bpoulain@apple.com>

        Move workerThreadCount from TestRunner to WebCore Internals
        https://bugs.webkit.org/show_bug.cgi?id=109239

        Reviewed by Darin Adler.

        Add the new read-only property workerThreadCount.

        * testing/Internals.cpp:
        (WebCore::Internals::workerThreadCount):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-02-08  Dean Jackson  <dino@apple.com>

        Snapshotted plug-in should use shadow root
        https://bugs.webkit.org/show_bug.cgi?id=108284

        Reviewed by Simon Fraser.

        Take two! This time with updated exports file.

        A snapshotted plugin needs to indicate to the user that it can be clicked
        to be restarted. Previously this was done with an image that had embedded
        text. Instead, we now use an internal shadow root to embed some markup that
        will display instructions that can be localised.

        The UA stylesheet for plug-ins provides a default styling for the label, which
        can be overridden by ports.

        In the process, RenderSnapshottedPlugIn no longer inherits from RenderEmbeddedObject,
        since it is only responsible for drawing a paused plug-in. The snapshot creation
        can work with the default renderer, but a shadow root requires something like
        RenderBlock in order to draw its children. We swap from one renderer to another when
        necessary either by creating the shadow root or by explicitly detaching and attaching
        the plugin element.

        Unfortunately this is difficult to test, because the snapshotting requires
        time to execute, and also a PluginView to be instantiated.

        * WebCore.exp.in: Export the InlineBox interface.

        * css/plugIns.css:
        (object::-webkit-snapshotted-plugin-content): New rules for a default label style.

        * platform/LocalizedStrings.cpp: Make sure all ports have plugin strings, now it is called.
        * platform/LocalizedStrings.h:
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        * platform/chromium/LocalizedStringsChromium.cpp:
        * platform/efl/LocalizedStringsEfl.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/qt/LocalizedStringsQt.cpp:

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler): Take into account the fact
        that RenderSnapshottedPlugIn no longer is an embedded object.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): New default values in constructor.
        (WebCore::HTMLPlugInElement::defaultEventHandler): Make sure to call base class.
        (WebCore::HTMLPlugInElement::willRecalcStyle): No need to reattach if we're a snapshot.
        (WebCore::HTMLPlugInImageElement::createRenderer): If we're showing a snapshot, create such
            a renderer, otherwise use the typical plug-in path.
        (WebCore::HTMLPlugInImageElement::updateSnapshot): Keep a record of the snapshot, since we'll
            need to give it to the renderer.
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Build a subtree that will display a label.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): New member variable to record the snapshot image and whether the label
            should show immediately.
        (WebCore::HTMLPlugInImageElement::swapRendererTimerFired): The callback function triggered when we need
            to swap to the Shadow Root.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): The user has tapped on the snapshot so the plugin
            in being recreated. Make sure we reattach so that a plugin renderer will be created.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Make sure we set the right
            displayState for snapshots.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): The new methods listed above.
        (WebCore::HTMLPlugInImageElement::setShouldShowSnapshotLabelAutomatically): Indicates whether or not
            a snapshot should be immediately labeled.

        * page/ChromeClient.h: No need for plugInStartLabelImage any more.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn): New inheritance.
        (WebCore::RenderSnapshottedPlugIn::paint): If we're in the background paint phase, render the snapshot image.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshotImage): Rename.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot): Rename.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshotWithLabel): Rename. No need for label sizes.
        (WebCore::RenderSnapshottedPlugIn::getCursor):
        (WebCore::RenderSnapshottedPlugIn::handleEvent): The renderer doesn't restart the plug-in any more. Tell the element and it will do it.
        * rendering/RenderSnapshottedPlugIn.h:
        (RenderSnapshottedPlugIn): New inheritance. Some method renaming.

2013-02-08  Dean Jackson  <dino@apple.com>

        Rolling out r142333 and r142337 which broke Mac Release builds.

2013-02-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142337.
        http://trac.webkit.org/changeset/142337
        https://bugs.webkit.org/show_bug.cgi?id=109339

        Breaking Mac release builds (Requested by dino_ on #webkit).

        * rendering/RenderSnapshottedPlugIn.h:

2013-02-08  Dean Jackson  <dino@apple.com>

        Attempted Mac and GTK build fix after r142333.

        * rendering/RenderSnapshottedPlugIn.h: Include InlineBox.h.

2013-02-08  Andy Estes  <aestes@apple.com>

        Restore pre-r118852 behavior for EllipsisBox::nodeAtPoint()
        https://bugs.webkit.org/show_bug.cgi?id=109277

        Reviewed by Simon Fraser.

        Test: fast/flexbox/line-clamp-link-after-ellipsis.html

        Roll out r118852. Enough time has passed that this can't be done
        mechanically, so transcribe the old method definition to current
        WebCore interfaces.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::markupBox): EllipsisBox no longer has
        m_markupBox, so break the logic for finding the markup box from
        paintMarkupBox() into its own function.
        (WebCore::EllipsisBox::paintMarkupBox): Call markupBox().
        (WebCore::EllipsisBox::nodeAtPoint): Transcribe the pre-r118852 implementation.
        * rendering/EllipsisBox.h:
        (EllipsisBox): Declare markupBox().

2013-02-08  Eric Carlson  <eric.carlson@apple.com>

        [Mac] In-band closed caption tracks are not always initialized correctly
        https://bugs.webkit.org/show_bug.cgi?id=109323

        Reviewed by Dean Jackson.

        No new tests, this fix makes existing tests less flakey.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Create and configure legible output
            here instad of in tracksChanged.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setClosedCaptionsVisible): Do nothing in a build with
            in-band track support.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Move legible output creation to 
            createAVPlayerItem, don't set look at track media type to see if the movie has captions 
            when we have support for in-band captions.

2013-02-08  Dean Jackson  <dino@apple.com>

        Snapshotted plug-in should use shadow root
        https://bugs.webkit.org/show_bug.cgi?id=108284

        Reviewed by Simon Fraser.

        A snapshotted plugin needs to indicate to the user that it can be clicked
        to be restarted. Previously this was done with an image that had embedded
        text. Instead, we now use an internal shadow root to embed some markup that
        will display instructions that can be localised.

        The UA stylesheet for plug-ins provides a default styling for the label, which
        can be overridden by ports.

        In the process, RenderSnapshottedPlugIn no longer inherits from RenderEmbeddedObject,
        since it is only responsible for drawing a paused plug-in. The snapshot creation
        can work with the default renderer, but a shadow root requires something like
        RenderBlock in order to draw its children. We swap from one renderer to another when
        necessary either by creating the shadow root or by explicitly detaching and attaching
        the plugin element.

        Unfortunately this is difficult to test, because the snapshotting requires
        time to execute, and also a PluginView to be instantiated.

        * css/plugIns.css:
        (object::-webkit-snapshotted-plugin-content): New rules for a default label style.

        * platform/LocalizedStrings.cpp: Make sure all ports have plugin strings, now it is called.
        * platform/LocalizedStrings.h:
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        * platform/chromium/LocalizedStringsChromium.cpp:
        * platform/efl/LocalizedStringsEfl.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/qt/LocalizedStringsQt.cpp:

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler): Take into account the fact
        that RenderSnapshottedPlugIn no longer is an embedded object.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): New default values in constructor.
        (WebCore::HTMLPlugInElement::defaultEventHandler): Make sure to call base class.
        (WebCore::HTMLPlugInElement::willRecalcStyle): No need to reattach if we're a snapshot.
        (WebCore::HTMLPlugInImageElement::createRenderer): If we're showing a snapshot, create such
            a renderer, otherwise use the typical plug-in path.
        (WebCore::HTMLPlugInImageElement::updateSnapshot): Keep a record of the snapshot, since we'll
            need to give it to the renderer.
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Build a subtree that will display a label.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): New member variable to record the snapshot image and whether the label
            should show immediately.
        (WebCore::HTMLPlugInImageElement::swapRendererTimerFired): The callback function triggered when we need
            to swap to the Shadow Root.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): The user has tapped on the snapshot so the plugin
            in being recreated. Make sure we reattach so that a plugin renderer will be created.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Make sure we set the right
            displayState for snapshots.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement): The new methods listed above.
        (WebCore::HTMLPlugInImageElement::setShouldShowSnapshotLabelAutomatically): Indicates whether or not
            a snapshot should be immediately labeled.

        * page/ChromeClient.h: No need for plugInStartLabelImage any more.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn): New inheritance.
        (WebCore::RenderSnapshottedPlugIn::paint): If we're in the background paint phase, render the snapshot image.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshotImage): Rename.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot): Rename.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshotWithLabel): Rename. No need for label sizes.
        (WebCore::RenderSnapshottedPlugIn::getCursor):
        (WebCore::RenderSnapshottedPlugIn::handleEvent): The renderer doesn't restart the plug-in any more. Tell the element and it will do it.
        * rendering/RenderSnapshottedPlugIn.h:
        (RenderSnapshottedPlugIn): New inheritance. Some method renaming.

2013-02-08  Kentaro Hara  <haraken@chromium.org>

        {FocusIn,FocusOut,Focus,Blur}EventDispatchMediator should be in FocusEvent.cpp
        https://bugs.webkit.org/show_bug.cgi?id=109265

        Reviewed by Dimitri Glazkov.

        Conventionally we put XXXEventDispatchMediator to XXXEvent.cpp.
        We should move {FocusIn,FocusOut,Focus,Blur}EventDispatchMediator to FocusEvent.cpp.

        No tests. No change in behavior.

        * dom/EventDispatchMediator.cpp:
        * dom/EventDispatchMediator.h:
        * dom/FocusEvent.cpp:
        (WebCore::FocusEventDispatchMediator::create):
        (WebCore):
        (WebCore::FocusEventDispatchMediator::FocusEventDispatchMediator):
        (WebCore::FocusEventDispatchMediator::dispatchEvent):
        (WebCore::BlurEventDispatchMediator::create):
        (WebCore::BlurEventDispatchMediator::BlurEventDispatchMediator):
        (WebCore::BlurEventDispatchMediator::dispatchEvent):
        (WebCore::FocusInEventDispatchMediator::create):
        (WebCore::FocusInEventDispatchMediator::FocusInEventDispatchMediator):
        (WebCore::FocusInEventDispatchMediator::dispatchEvent):
        (WebCore::FocusOutEventDispatchMediator::create):
        (WebCore::FocusOutEventDispatchMediator::FocusOutEventDispatchMediator):
        (WebCore::FocusOutEventDispatchMediator::dispatchEvent):
        * dom/FocusEvent.h:
        (WebCore):
        (FocusEventDispatchMediator):
        (BlurEventDispatchMediator):
        (FocusInEventDispatchMediator):
        (FocusOutEventDispatchMediator):
        * dom/UIEvent.cpp:
        * dom/UIEvent.h:

2013-02-08  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix. MSVC (and other compilers) need a default: case in switch statement.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::notificationName):

2013-02-08  Jer Noble  <jer.noble@apple.com>

        Bring WebKit up to speed with latest Encrypted Media spec.
        https://bugs.webkit.org/show_bug.cgi?id=97037

        Reviewed by Eric Carlson.

        The most recent version of the Encrypted Media Extensions spec breaks functionality out of the
        HTMLMediaElement and into new MediaKeys and MediaKeySession classes. Since the CDM functionality
        has been pulled out of the media element, we create a proxy CDM class and factory system for
        creating specific CDM key system implementations. The spec also breaks out MediaKeyEvent
        into distinct event classes, MediaKeyNeededEvent and MediaKeyMessageEvent, for needkey and
        keymessage events, respectively.

        Tests: media/encrypted-media/encrypted-media-v2-events.html
               media/encrypted-media/encrypted-media-v2-syntax.html

        CDM is a proxy class (a la MediaPlayer) for a specific CDMPrivateInterface implementation. A CDM
        implementation is registered with the CDMFactory and will be created if that implementation supports
        the key system passed into the MediaKeys constructor. CDMSession is a pure-virtual interface exposed
        by concrete CDMPrivate subclasses.  Its lifetime is owned by MediaKeySession.
        * Modules/encryptedmedia/CDM.cpp: Added.
        (WebCore::installedCDMFactories): Initialize all the known CDM subtypes. Ports will add CDM implementations here.
        (WebCore::CDM::registerCDMFactory): Registers a new CDMFactory using the passed in function pointers.
        (WebCore::CDMFactoryForKeySystem): Return the first CDM factory which supports the requested key system.
        (WebCore::CDM::supportsKeySystem): Walk the installed CDMs and ask if the given key system is supported.
        (WebCore::CDM::supportsKeySystemMIMETypeAndCodec): Ditto, with an additional MIME type and codec string.
        (WebCore::CDM::create): Simple constructor wrapper.
        (WebCore::CDM::CDM): Simple constructor; calls bestCDMForKeySystem() to create it's private implementation.
        (WebCore::CDM::~CDM): Simple destructor.
        (WebCore::CDM::createSession): Creates a new CDMSession.
        * Modules/encryptedmedia/CDM.h: Added.
        (WebCore::CDM::keySystem): Simple accessor for m_keySystem.
        (WebCore::CDMSession::CDMSession): Simple constructor.
        (WebCore::CDMSession::~CDMSession): Simple destructor.
        * Modules/encryptedmedia/CDMPrivate.h: Added.
        (WebCore::CDMPrivateInterface::CDMPrivateInterface): Simple constructor.
        (WebCore::CDMPrivateInterface::~CDMPrivateInterface): Simple destructor.

        The new classes, MediaKeyMessageEvent and MediaKeyNeededEvent, take distinct subsets of the initializers of
        the original MediaKeyMessageEvent.
        * Modules/encryptedmedia/MediaKeyMessageEvent.cpp: Copied from Source/WebCore/html/MediaKeyEvent.cpp.
        (WebCore::MediaKeyMessageEventInit::MediaKeyMessageEventInit): Initializer now only takes message and destinationURL
            parameters.
        (WebCore::MediaKeyMessageEvent::MediaKeyMessageEvent): Simple constructor.
        (WebCore::MediaKeyMessageEvent::~MediaKeyMessageEvent): Simple destructor.
        (WebCore::MediaKeyMessageEvent::interfaceName): Standard interfaceName.
        * Modules/encryptedmedia/MediaKeyMessageEvent.h: Copied from Source/WebCore/html/MediaKeyEvent.h.
        (WebCore::MediaKeyMessageEvent::create): Simple construction wrapper.
        (WebCore::MediaKeyMessageEvent::message): Simple accessor for m_message.
        (WebCore::MediaKeyMessageEvent::destinationURL): Simple accessor for m_destinationURL.
        * Modules/encryptedmedia/MediaKeyMessageEvent.idl: Copied from Source/WebCore/html/MediaKeyEvent.idl.
        * Modules/encryptedmedia/MediaKeyNeededEvent.cpp: Copied from Source/WebCore/html/MediaKeyEvent.h.
        (WebCore::MediaKeyNeededEventInit::MediaKeyNeededEventInit): Initializer now only takes initData parameter.
        (WebCore::MediaKeyNeededEvent::MediaKeyNeededEvent): Simple constructor.
        (WebCore::MediaKeyNeededEvent::~MediaKeyNeededEvent): Simple destructor.
        (WebCore::MediaKeyNeededEvent::interfaceName): Standard interfaceName.
        * Modules/encryptedmedia/MediaKeyNeededEvent.h: Copied from Source/WebCore/html/MediaKeyEvent.h.
        (WebCore::MediaKeyNeededEvent::create): Simple construction wrapper.
        (WebCore::MediaKeyNeededEvent::initData): Simple accessor for m_initData.
        * Modules/encryptedmedia/MediaKeyNeededEvent.idl: Copied from Source/WebCore/html/MediaKeyEvent.idl.

        MediaKeySession is a new class that maps keys and key requests to a given session ID:
        * Modules/encryptedmedia/MediaKeySession.cpp: Added.
        (WebCore::MediaKeySession::create): Simple construction wrapper.
        (WebCore::MediaKeySession::MediaKeySession): Simple constructor.
        (WebCore::MediaKeySession::~MediaKeySession): Simple destructor; calls close().
        (WebCore::MediaKeySession::setError): Simple setter for m_error;
        (WebCore::MediaKeySession::close): Tell the CDM to clear any saved session keys.
        (WebCore::MediaKeySession::generateKeyRequest): Start a one-shot timer, handled in keyRequestTimerFired.
        (WebCore::MediaKeySession::keyRequestTimerFired): Follow the steps in the spec; ask the CDM to generate a key request.
        (WebCore::MediaKeySession::addKey): Start a one-shot timer, handled in addKeyTimerFired.
        (WebCore::MediaKeySession::addKeyTimerFired): Follow the steps in the spec; provide the key data to the CDM.
        * Modules/encryptedmedia/MediaKeySession.h: Added.
        (WebCore::MediaKeySession::keySystem): Simple accessor for m_keySystem.
        (WebCore::MediaKeySession::sessionId): Simple accessor for m_sessionId.
        (WebCore::MediaKeySession::error): Simple accessor for m_error;
        * Modules/encryptedmedia/MediaKeySession.idl:

        MediaKeySession inherits from EventTarget, and must override the pure virtual functions in that class:
        * Modules/encryptedmedia/MediaKeySession.cpp: Added.
        (WebCore::MediaKeySession::interfaceName):
        * Modules/encryptedmedia/MediaKeySession.h: Added.
        (WebCore::MediaKeySession::refEventTarget):
        (WebCore::MediaKeySession::derefEventTarget):
        (WebCore::MediaKeySession::eventTargetData):
        (WebCore::MediaKeySession::ensureEventTargetData):
        (WebCore::MediaKeySession::scriptExecutionContext):

        MediaKeys is a new class that encapsulates a CDM and a number of key sessions:
        * Modules/encryptedmedia/MediaKeys.cpp: Added.
        (WebCore::MediaKeys::create): Throw an exception if the key system parameter is unsupported; create a CDM object
            and a new MediaKeys session.
        (WebCore::MediaKeys::MediaKeys): Simple constructor.
        (WebCore::MediaKeys::~MediaKeys): Simple destructor.
        (WebCore::MediaKeys::createSession): Follow the spec and create a new key session.
        * Modules/encryptedmedia/MediaKeys.h: Added.
        * Modules/encryptedmedia/MediaKeys.idl: Copied from Source/WebCore/html/MediaError.idl.

        Provide a new interface to HTMLMediaElement for MediaPlayer which does not require a sessionId or a key system:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::keyNeeded):

        MediaKeyError now has a systemCode parameter and member variable.
        * html/MediaKeyError.h:
        (WebCore::MediaKeyError::create): Take a systemCode parameter with a default (0) value.
        (WebCore::MediaKeyError::MediaKeyError): Ditto.
        (WebCore::MediaKeyError::systemCode): Simple accessor for m_systemCode.
        * html/MediaKeyError.idl:

        Add new methods to HTMLMediaElement to support MediaKeys. Support different initializer
        for the MediaKeyNeededEvent.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMediaKeys): Simple setter for m_mediaKeys.
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded): This version takes fewer parameters
            than the deprecated version.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::mediaKeys): Simple accessor for m_mediaKeys.
        * html/HTMLMediaElement.idl: Add the mediaKeys attribute.

        Add an ENABLE(ENCRYPTED_MEDIA_V2) check to the existing ENABLE(ENCRYPTED_MEDIA) one:
        * html/MediaError.h:
        * html/MediaError.idl:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::bestMediaEngineForTypeAndCodecs):
        (WebCore::MediaPlayer::supportsType):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::keyNeeded): This version takes fewer parameters than the
            deprecated version.

        Support the new version of canPlayType which takes an extra parameter:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::extendedSupportsType):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine):
        (WebCore::MediaPlayerPrivateQTKit::extendedSupportsType):

        Add a mock CDM for use within DRT and WKTR to test the MediaKeys and MediaKeySession
        APIs and events:
        * testing/Internals.cpp:
        (WebCore::Internals::initializeMockCDM): Add the MockCDM class to the CDM factories.
        * testing/Internals.h:
        * testing/Internals.idl: Add the initializeMockCDM() method.
        * testing/MockCDM.cpp: Added.
        (WebCore::MockCDM::supportsKeySystem): Only supports the 'com.webcore.mock' key system.
        (WebCore::MockCDM::supportsMIMEType): Only supports the 'video/mock' mime type.
        (WebCore::initDataPrefix): Static method which returns a Uint8Array containing 'mock'.
        (WebCore::keyPrefix): Static method which returns a Uint8Array containing 'key'.
        (WebCore::keyRequest): Static method which returns a Uint8Array containing 'request'.
        (WebCore::generateSessionId): Return a monotonically increasing number.
        (WebCore::MockCDMSession::MockCDMSession): Simple constructor.
        (WebCore::MockCDMSession::generateKeyRequest): Ignores the parameters and returns a keyRequest() array.
        (WebCore::MockCDMSession::releaseKeys): No-op.
        (WebCore::MockCDMSession::addKey): Checks that the key starts with the keyPrefix() array.
        * testing/MockCDM.h: Added.
        (WebCore::MockCDM::create):
        (WebCore::MockCDM::~MockCDM): Simple destructor.
        (WebCore::MockCDM::MockCDM): Simple constructor.

        Add the new classes to the built system:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

        Miscelaneous changes:
        * dom/EventNames.in: Add the two new event types, MediaKeyMessageEvent and MediaKeyNeededEvent.
        * dom/EventTargetFactory.in: Add the new EventTarget, MediaKeySession.
        * page/DOMWindow.idl: Add constructors for the new classes to the window object.

2013-02-08  Chris Fleizach  <cfleizach@apple.com>

        Refactor platform-specific code in SpeechSynthesis
        https://bugs.webkit.org/show_bug.cgi?id=107414

        Reviewed by Sam Weinig.

        Refactor WebSpeech code to use a platform mechanism to provide access to platform resources.

        * Modules/speech/DOMWindowSpeechSynthesis.cpp:
        (WebCore::DOMWindowSpeechSynthesis::from):
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore):
        (WebCore::SpeechSynthesis::voicesDidChange):
        (WebCore::SpeechSynthesis::getVoices):
        (WebCore::SpeechSynthesis::pending):
        (WebCore::SpeechSynthesis::speaking):
        (WebCore::SpeechSynthesis::paused):
        (WebCore::SpeechSynthesis::speak):
        (WebCore::SpeechSynthesis::cancel):
        (WebCore::SpeechSynthesis::pause):
        (WebCore::SpeechSynthesis::resume):
        * Modules/speech/SpeechSynthesis.h:
        (WebCore):
        (SpeechSynthesis):
        (WebCore::SpeechSynthesis::didStartSpeaking):
        (WebCore::SpeechSynthesis::didFinishSpeaking):
        (WebCore::SpeechSynthesis::speakingErrorOccurred):
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::SpeechSynthesisUtterance):
        * Modules/speech/SpeechSynthesisUtterance.h:
        (WebCore::SpeechSynthesisUtterance::text):
        (WebCore::SpeechSynthesisUtterance::setText):
        (WebCore::SpeechSynthesisUtterance::lang):
        (WebCore::SpeechSynthesisUtterance::setLang):
        (WebCore::SpeechSynthesisUtterance::voiceURI):
        (WebCore::SpeechSynthesisUtterance::setVoiceURI):
        (WebCore::SpeechSynthesisUtterance::volume):
        (WebCore::SpeechSynthesisUtterance::setVolume):
        (WebCore::SpeechSynthesisUtterance::rate):
        (WebCore::SpeechSynthesisUtterance::setRate):
        (WebCore::SpeechSynthesisUtterance::pitch):
        (WebCore::SpeechSynthesisUtterance::setPitch):
        (SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::platformUtterance):
        * Modules/speech/SpeechSynthesisVoice.cpp:
        (WebCore::SpeechSynthesisVoice::create):
        (WebCore::SpeechSynthesisVoice::SpeechSynthesisVoice):
        * Modules/speech/SpeechSynthesisVoice.h:
        (SpeechSynthesisVoice):
        (WebCore::SpeechSynthesisVoice::voiceURI):
        (WebCore::SpeechSynthesisVoice::name):
        (WebCore::SpeechSynthesisVoice::lang):
        (WebCore::SpeechSynthesisVoice::localService):
        (WebCore::SpeechSynthesisVoice::isDefault):
        * Modules/speech/mac/SpeechSynthesisMac.mm:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/PlatformSpeechSynthesis.h: Added.
        (WebCore):
        (PlatformSpeechSynthesis):
        * platform/PlatformSpeechSynthesisUtterance.cpp: Added.
        (WebCore):
        (WebCore::PlatformSpeechSynthesisUtterance::PlatformSpeechSynthesisUtterance):
        * platform/PlatformSpeechSynthesisUtterance.h: Added.
        (WebCore):
        (PlatformSpeechSynthesisUtteranceClient):
        (WebCore::PlatformSpeechSynthesisUtteranceClient::~PlatformSpeechSynthesisUtteranceClient):
        (PlatformSpeechSynthesisUtterance):
        (WebCore::PlatformSpeechSynthesisUtterance::text):
        (WebCore::PlatformSpeechSynthesisUtterance::setText):
        (WebCore::PlatformSpeechSynthesisUtterance::lang):
        (WebCore::PlatformSpeechSynthesisUtterance::setLang):
        (WebCore::PlatformSpeechSynthesisUtterance::voiceURI):
        (WebCore::PlatformSpeechSynthesisUtterance::setVoiceURI):
        (WebCore::PlatformSpeechSynthesisUtterance::volume):
        (WebCore::PlatformSpeechSynthesisUtterance::setVolume):
        (WebCore::PlatformSpeechSynthesisUtterance::rate):
        (WebCore::PlatformSpeechSynthesisUtterance::setRate):
        (WebCore::PlatformSpeechSynthesisUtterance::pitch):
        (WebCore::PlatformSpeechSynthesisUtterance::setPitch):
        * platform/PlatformSpeechSynthesisVoice.cpp: Added.
        (WebCore):
        (WebCore::PlatformSpeechSynthesisVoice::create):
        (WebCore::PlatformSpeechSynthesisVoice::PlatformSpeechSynthesisVoice):
        * platform/PlatformSpeechSynthesisVoice.h: Added.
        (WebCore):
        (PlatformSpeechSynthesisVoice):
        (WebCore::PlatformSpeechSynthesisVoice::voiceURI):
        (WebCore::PlatformSpeechSynthesisVoice::name):
        (WebCore::PlatformSpeechSynthesisVoice::lang):
        (WebCore::PlatformSpeechSynthesisVoice::localService):
        (WebCore::PlatformSpeechSynthesisVoice::isDefault):
        * platform/PlatformSpeechSynthesizer.cpp: Added.
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
        * platform/PlatformSpeechSynthesizer.h: Added.
        (WebCore):
        (PlatformSpeechSynthesizerClient):
        (WebCore::PlatformSpeechSynthesizerClient::~PlatformSpeechSynthesizerClient):
        (PlatformSpeechSynthesizer):
        (WebCore::PlatformSpeechSynthesizer::voiceList):
        * platform/mac/PlatformSpeechSynthesisMac.mm: Added.
        (WebCore):
        (WebCore::PlatformSpeechSynthesis::create):
        (WebCore::PlatformSpeechSynthesis::PlatformSpeechSynthesis):
        (WebCore::PlatformSpeechSynthesis::platformSpeak):
        * platform/mac/PlatformSpeechSynthesizerMac.mm: Added.
        (WebCore):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesizer::speak):

2013-02-08  Dean Jackson  <dino@apple.com>

        Put snapshotting label text into localizable strings
        https://bugs.webkit.org/show_bug.cgi?id=108268

        Reviewed by Simon Fraser.

        In preparation for a snapshotted plug-in using a ShadowRoot, allow
        its label to be localized.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::snapshottedPlugInLabelTitle): New method for returning title.
        (WebCore::snapshottedPlugInLabelSubtitle): New method for returning subtitle.
        * platform/LocalizedStrings.h:

2013-02-08  Dean Jackson  <dino@apple.com>

        Do not register autostart for plugins from file:// (or nowhere)
        https://bugs.webkit.org/show_bug.cgi?id=108271

        Reviewed by Tim Horton.

        If the page url origin is treated as a local URL, don't attempt
        to add it to the auto-start list.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot):

2013-02-08  Adam Barth  <abarth@webkit.org>

        Use WeakPtrs to communicate between the HTMLDocumentParser and the BackgroundHTMLParser
        https://bugs.webkit.org/show_bug.cgi?id=107190

        Reviewed by Eric Seidel.

        This patch replaces the parser map with WeakPtr. We now use WeakPtrs to
        communicate from the main thread to the background thread. (We were
        already using WeakPtrs to communicate from the background thread to the
        main thread.) This change lets us remove a bunch of boilerplate code.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::stop):
        (WebCore):
        * html/parser/BackgroundHTMLParser.h:
        (WebCore::BackgroundHTMLParser::create):
        (BackgroundHTMLParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didFailSpeculation):
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        (WebCore::HTMLDocumentParser::stopBackgroundParser):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::finish):
        * html/parser/HTMLDocumentParser.h:
        (WebCore):
        (HTMLDocumentParser):

2013-02-07  Roger Fong  <roger_fong@apple.com>

        VS2010 WebCore TestSupport project.
        https://bugs.webkit.org/show_bug.cgi?id=107034.

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCoreTestSupport.vcxproj: Added.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj.filters: Added.

2013-02-08  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK][AC] GraphicsLayerActor code clean up after clutter version up.
        https://bugs.webkit.org/show_bug.cgi?id=109304

        Reviewed by Gustavo Noronha Silva.

        This patch cleans up GraphicsLayerActor functions by using new clutter apis
        and makes existing functions simple & readable.

        No new tests since no change in functionality

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (_GraphicsLayerActorPrivate):
        (graphicsLayerActorApplyTransform):
        (graphicsLayerActorPaint):
        (graphicsLayerActorDraw):
        (graphicsLayerActorUpdateTexture):
        (drawLayerContents):
        (graphicsLayerActorNew):
        (graphicsLayerActorInvalidateRectangle):
        (graphicsLayerActorSetTransform):
        (graphicsLayerActorSetAnchorPoint):
        (graphicsLayerActorGetAnchorPoint):
        (graphicsLayerActorSetScrollPosition):
        * platform/graphics/clutter/PlatformClutterAnimation.h:

2013-02-08  Harald Alvestrand  <hta@google.com>

        Fix and test for missing return statement

        RTCPeerConnection.getStats() failed when remote stats were instantiated.
        https://bugs.webkit.org/show_bug.cgi?id=109292

        Reviewed by Adam Barth.

        Tested by extending the existing mock's behaviour.

        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore::RTCStatsReport::addElement):

2013-02-08  Anton Vayvod  <avayvod@chromium.org>

        [Text Autosizing] Split isAutosizingCluster into three independent checks
        https://bugs.webkit.org/show_bug.cgi?id=109093

        Refactoring to create more flexible version of isAutosizingCluster since there're more types
        of autosizing cluster now: narrower than the parent cluster, wider than the parent cluster
        and the one that doesn't depend on the parent cluster.

        Reviewed by Kenneth Rohde Christiansen.

        Refactoring, no test changes.

        * rendering/TextAutosizer.cpp:

        (WebCore::TextAutosizer::isNarrowDescendant):

            Separate check for the container to be of the narrow-descendant type. Was a part of
            isAutosizingCluster().

        (WebCore::TextAutosizer::isWiderDescendant):

            Separate check for the container to be of the wider-descendant type. Was a part of
            isAutosizingCluster().

        (WebCore::TextAutosizer::isIndependentDescendant):

            Separate check for the container to be autosized separately from the ancestor cluster.
            Checks for conditions independent of the aforementioned cluster.

        (WebCore::TextAutosizer::isAutosizingCluster):

            Handy method to check all separate conditions together.

        (WebCore::TextAutosizer::processSubtree):
        (WebCore::TextAutosizer::processCluster):
        (WebCore::TextAutosizer::processContainer):
        (WebCore::TextAutosizer::clusterShouldBeAutosized):
        (WebCore::TextAutosizer::measureDescendantTextWidth):
        (WebCore::TextAutosizer::findFirstTextLeafNotInCluster):

            The methods above were updated to use new functions/arguments.

        * rendering/TextAutosizer.h:

            Updated/added method definitions.

2013-02-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extension sever should use Workspace.projectForType() instead of Workspace.project()
        https://bugs.webkit.org/show_bug.cgi?id=109301

        Reviewed by Alexander Pavlov.

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onGetPageResources):

2013-02-04  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: simplify Memory.getDOMNodeCount implementation
        https://bugs.webkit.org/show_bug.cgi?id=108821

        Reviewed by Alexander Pavlov.

        Removed Memory.getDOMNodeCount command from the protocol. Memory.getDOMCounters
        should be used instead.

        * inspector/Inspector.json:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorMemoryAgent.h:
        (InspectorMemoryAgent):

2013-02-08  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: refactor MemoryStatistics.js
        https://bugs.webkit.org/show_bug.cgi?id=109299

        Reviewed by Vsevolod Vlasov.

        Extracted functionality specific to DOM counter graphs drawing into
        separate methods on MemoryStatistics class.
        Introduced CounterUIBase base class for DOMCounterUI that contains
        functionality which can be shared with native memory graph.

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics):
        (WebInspector.CounterUIBase):
        (WebInspector.CounterUIBase.prototype.updateCurrentValue):
        (WebInspector.CounterUIBase.prototype.clearCurrentValueAndMarker):
        (WebInspector.CounterUIBase.prototype.get visible):
        (WebInspector.DOMCounterUI):
        (WebInspector.DOMCounterUI.prototype.discardImageUnderMarker):
        (WebInspector.MemoryStatistics.prototype._onMouseOut):
        (WebInspector.MemoryStatistics.prototype._clearCurrentValueAndMarker):
        (WebInspector.MemoryStatistics.prototype._refreshCurrentValues):
        (WebInspector.MemoryStatistics.prototype._updateCurrentValue):
        (WebInspector.MemoryStatistics.prototype._highlightCurrentPositionOnGraphs):
        (WebInspector.MemoryStatistics.prototype._restoreImageUnderMarker):
        (WebInspector.MemoryStatistics.prototype._saveImageUnderMarker):
        (WebInspector.MemoryStatistics.prototype._drawMarker):
        (WebInspector.MemoryStatistics.prototype._clear):
        (WebInspector.MemoryStatistics.prototype._discardImageUnderMarker):

2013-02-08  Mike West  <mkwst@chromium.org>

        Add a new IGNORE_EXCEPTION helper to ignore ExceptionCodes when they are expected but uninteresting
        https://bugs.webkit.org/show_bug.cgi?id=108771

        Reviewed by Eric Seidel.

        In cases where the ExceptionCode passed into a function is completely
        ignored, this patch replaces it with a new IGNORE_EXCEPTION macro. This
        makes our expectations about possible exceptions (or lack thereof)
        explicit, rather than relying on implicit assumptions about whether a
        variable is intentionally uninitialized or not. It also removes
        knowledge about the internals of ExceptionCodes (that they're currently
        ints, for instance) from code that shouldn't care, which will help with
        future refactorings.

        The implementation is entirely based upon ASSERT_NO_EXCEPTION, and
        shouldn't have any visible effect on the web. As long as all the
        current tests pass, we're good.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::stop):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processBuffer):
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * dom/ExceptionCodePlaceholder.h:
        (WebCore):
        * dom/Node.cpp:
        (WebCore::Node::normalize):
        * dom/Text.cpp:
        (WebCore::Text::replaceWholeText):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::insertDictatedText):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        (WebCore::AppendNodeCommand::doUnapply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNewDefaultParagraphElementAt):
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/Editor.cpp:
        (WebCore::dispatchEditableContentChangedEvents):
        (WebCore::Editor::applyEditingStyleToElement):
        * editing/EditorCommand.cpp:
        (WebCore::executeFormatBlock):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::elementForFormatBlockCommand):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApplyForSingleParagraph):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::doApply):
        (WebCore::RemoveCSSPropertyCommand::doUnapply):
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::doApply):
        (WebCore::RemoveNodeCommand::doUnapply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::getLocationAndLengthFromRange):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::executeApply):
        (WebCore::WrapContentsInDummySpanCommand::doUnapply):
        * editing/htmlediting.cpp:
        (WebCore::comparePositions):
        * editing/markup.cpp:
        (WebCore::highestAncestorToWrapMarkup):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::appendEntry):
        (WebCore::FTPDirectoryDocumentParser::createTDForFilename):
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        (WebCore::FTPDirectoryDocumentParser::createBasicDocument):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::rewind):
        (WebCore::HTMLMediaElement::returnToRealtime):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::percentLoaded):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged):
        (WebCore::HTMLMediaElement::applyMediaFragmentURI):
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::setTextContentInternal):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::remove):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createTHead):
        (WebCore::HTMLTableElement::deleteTHead):
        (WebCore::HTMLTableElement::createTFoot):
        (WebCore::HTMLTableElement::deleteTFoot):
        (WebCore::HTMLTableElement::createCaption):
        (WebCore::HTMLTableElement::deleteCaption):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setDefaultValue):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/InputType.cpp:
        (WebCore::InputType::stepUpFromRenderer):
        * html/MediaController.cpp:
        (MediaController::bringElementUpToSpeed):
        (MediaController::asyncEventTimerFired):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):
        * html/TimeRanges.cpp:
        (TimeRanges::contain):
        (TimeRanges::nearest):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlSeekButtonElement::seekTimerFired):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::setPosition):
        (WebCore::MediaControlPanelElement::resetPosition):
        (WebCore::MediaControlStatusDisplayElement::update):
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::updateCurrentTimeDisplay):
        (WebCore::MediaControls::createTextTrackDisplay):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::updateCurrentTimeDisplay):
        * html/shadow/MediaControlsBlackBerry.cpp:
        (WebCore::MediaControlEmbeddedPanelElement::setPosition):
        (WebCore::MediaControlEmbeddedPanelElement::resetPosition):
        (WebCore::MediaControlFullscreenTimelineElement::defaultEventHandler):
        (WebCore::MediaControlsBlackBerry::updateCurrentTimeDisplay):
        * html/shadow/MediaControlsChromium.cpp:
        (WebCore::MediaControlsChromium::updateCurrentTimeDisplay):
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::addGenericCue):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        * inspector/InspectorHistory.cpp:
        (WebCore::InspectorHistory::markUndoableState):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::replayXHR):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::didAddStorageEventListener):
        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleTextInputEvent):
        * page/Page.cpp:
        (WebCore::Page::findStringMatchingRanges):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintMediaSliderTrack):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::percentLoaded):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaSliderTrack):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::getDataSelection):
        (WebCore::documentFragmentWithImageResource):
        (WebCore::Pasteboard::documentFragment):
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController setCurrentTime:]):
        (-[WebVideoFullscreenHUDWindowController setVolume:]):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::detachTarget):
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::endElementNs):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseEndElement):

2013-02-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce workspace provider/project type, encapsulate uri creation in SimpleWorkspaceProvider.
        https://bugs.webkit.org/show_bug.cgi?id=109282

        Reviewed by Alexander Pavlov.

        SimpleWorkspaceProvider now fully takes care of creating uri based on project/workspace provider type.
        This is the first step on the way to project-per-domain mode for non file system project types.
        Workspace is now partly aware of the possibility that several projects with the same type exist.
        Drive-by: ScriptsPanel now uses FileMapping to show anchor location properly.

        * inspector/front-end/DefaultScriptMapping.js:
        (WebInspector.DefaultScriptMapping):
        (WebInspector.DefaultScriptMapping.prototype.addScript):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onGetPageResources):
        * inspector/front-end/FileMapping.js:
        (WebInspector.FileMapping.prototype.uriForURL):
        * inspector/front-end/FileSystemWorkspaceProvider.js:
        (WebInspector.FileSystemWorkspaceProvider.prototype.type):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._supportsEnabledBreakpointsWhileEditing):
        * inspector/front-end/LiveEditSupport.js:
        (WebInspector.LiveEditSupport):
        (WebInspector.LiveEditSupport.prototype.uiSourceCodeForLiveEdit):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel):
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._navigatorViewForUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.revealUISourceCode):
        (WebInspector.SnippetsNavigatorView.prototype._handleEvaluateSnippet):
        (WebInspector.SnippetsNavigatorView.prototype._handleRemoveSnippet):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addUISourceCode):
        (WebInspector.ScriptsPanel.prototype._projectWillReset):
        (WebInspector.ScriptsPanel.prototype.canShowAnchorLocation):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.ScriptsPanel.prototype.set _fileRenamed):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleWorkspaceProvider):
        (WebInspector.SimpleWorkspaceProvider.uriForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.type):
        (WebInspector.SimpleWorkspaceProvider.prototype.addFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.addUniqueFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype._innerAddFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype._uniqueURI):
        * inspector/front-end/Workspace.js:
        (WebInspector.WorkspaceProvider.prototype.type):
        (WebInspector.Project.prototype.type):
        (WebInspector.Project.prototype.isServiceProject):
        (WebInspector.Workspace.prototype.uiSourceCodeForOriginURL):
        (WebInspector.Workspace.prototype.uiSourceCodesForProjectType):
        (WebInspector.Workspace.prototype.projectsForType):
        * inspector/front-end/inspector.js:

2013-02-08  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK][AC] GraphicsLayerClutter doesn't need to recalculate its position after changing anchor position.
        https://bugs.webkit.org/show_bug.cgi?id=109226

        Reviewed by Gustavo Noronha Silva.

        Clutter has a different coordinate system from mac port's, so we don't need to
        recalulate GraphicsLayer position after changing its anchor position.

        Covered by existing ac tests.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::updateGeometry):

2013-02-08  Mike West  <mkwst@chromium.org>

        Migrate ExceptionCode ASSERTs in IDB to ASSERT_NO_EXCEPTION.
        https://bugs.webkit.org/show_bug.cgi?id=109266

        Reviewed by Jochen Eisinger.

        The pattern:

            ExceptionCode ec = 0;
            methodThatGeneratesException(ec);
            ASSERT(!ec);

        is more clearly and succinctly written as:

            methodThatGeneratesException(ASSERT_NO_EXCEPTION);

        This patch replaces the occurances of the former in IDB code that never
        touch 'ec' again with the latter. No change in behavior should result
        from this refactoring.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::advance):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::deleteFunction):
            These methods checked the value of the ExceptionCode without first
            initializing it to 0. Now the ExceptionCode is explicitly set to 0
            before doing potentially exception-generating work.
        (WebCore::IDBCursor::direction):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::mode):
            Replace the above pattern with ASSERT_NO_EXCEPTION.

2013-02-08  Mike West  <mkwst@chromium.org>

        Migrate ExceptionCode ASSERTs in SVG to ASSERT_NO_EXCEPTION.
        https://bugs.webkit.org/show_bug.cgi?id=109267

        Reviewed by Jochen Eisinger.

        The pattern:

            ExceptionCode ec = 0;
            methodThatGeneratesException(ec);
            ASSERT(!ec);

        is more clearly and succinctly written as:

            methodThatGeneratesException(ASSERT_NO_EXCEPTION);

        This patch replaces the occurances of the former in SVG code that never
        touch 'ec' again with the latter. No change in behavior should result
        from this refactoring.

        * svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::setValue):
            This method checked the value of the ExceptionCode without first
            initializing it to 0. Now it initializes before doing potentially
            exception-generating work.
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialBaselineShiftValue):
        (WebCore::SVGRenderStyle::initialKerning):
        (WebCore::SVGRenderStyle::initialStrokeDashOffset):
        (WebCore::SVGRenderStyle::initialStrokeWidth):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::sharedSVGLength):
        (WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::textLengthAnimated):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::constructQualifiedName):
            Replace the above pattern with ASSERT_NO_EXCEPTION.

2013-02-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Replace workspace with project in UISourceCode constructor.
        https://bugs.webkit.org/show_bug.cgi?id=109256

        Reviewed by Alexander Pavlov.

        Replaced workspace with project in UISourceCode constructor since every UISourceCode
        operation is delegated to project anyway.

        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.project):
        (WebInspector.UISourceCode.prototype.requestContent):
        (WebInspector.UISourceCode.prototype.requestOriginalContent):
        (WebInspector.UISourceCode.prototype._commitContent):
        (WebInspector.UISourceCode.prototype.searchInContent):
        * inspector/front-end/Workspace.js:
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype.requestFileContent):
        (WebInspector.Project.prototype.setFileContent):
        (WebInspector.Project.prototype.searchInFileContent):

2013-02-08  Patrick Gansterer  <paroga@webkit.org>

        Build fix for Windows after r141981.

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2013-02-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141695 and r141697.
        http://trac.webkit.org/changeset/141695
        http://trac.webkit.org/changeset/141697
        https://bugs.webkit.org/show_bug.cgi?id=109279

        broke on-disk buffering for http(s) media (Requested by philn
        on #webkit).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcGetProtocols):
        (webKitWebSrcSetUri):

2013-02-08  Dan Carney  <dcarney@google.com>

        [v8] isolate parameter added to all v8::peristent calls
        https://bugs.webkit.org/show_bug.cgi?id=109268

        Reviewed by Kentaro Hara.

        No new tests. No change in functionality.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::V8TestActiveDOMObject::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::GetRawTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetRawTemplate):
        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperMap::clear):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::isolatedWorldWeakCallback):
        (WebCore::DOMWrapperWorld::makeContextWeak):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::freeV8NPObject):
        (WebCore::npCreateV8ScriptObject):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::~ScheduledAction):
        * bindings/v8/ScopedPersistent.h:
        (WebCore::ScopedPersistent::ScopedPersistent):
        (WebCore::ScopedPersistent::set):
        (WebCore::ScopedPersistent::clear):
        * bindings/v8/ScriptWrappable.h:
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::disposeWrapper):
        (WebCore::ScriptWrappable::weakCallback):
        * bindings/v8/V8Binding.cpp:
        (WebCore::createRawTemplate):
        * bindings/v8/V8Binding.h:
        (WebCore):
        * bindings/v8/V8GCController.cpp:
        (WebCore::gcTree):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::minorGCPrologue):
        * bindings/v8/V8GCController.h:
        (V8GCController):
        * bindings/v8/V8HiddenPropertyName.cpp:
        (WebCore::V8HiddenPropertyName::createString):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::V8NPTemplateMap::dispose):
        (WebCore::npObjectGetProperty):
        (WebCore::createV8ObjectForNPObject):
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextData::dispose):
        (WebCore::V8PerContextData::createWrapperFromCacheSlowCase):
        (WebCore::V8PerContextData::constructorForTypeSlowCase):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::makeExternalString):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore::WrapperConfiguration::configureWrapper):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::wrapInShadowObject):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::WeakReferenceCallback):
        (WebCore::createInjectedScriptHostV8Wrapper):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAccessorGetter):
        (WebCore::V8Location::replaceAccessorGetter):
        (WebCore::V8Location::assignAccessorGetter):

2013-02-08  Kent Tamura  <tkent@chromium.org>

        Adjust usage of ENABLE flags to enable whole content
        https://bugs.webkit.org/show_bug.cgi?id=109270

        Reviewed by Eric Seidel.

        Our common usage of ENABLE flags to enable whole content of files is:

        For .cpp files:
          #include "config.h"
          #if ENABLE(FOOBAR)
          #include "FooBar.h"

        For .h files:
          #ifndef FooBar_h
          #define FooBar_h
          #if ENABLE(FOOBAR)

        Fix files which have uncommon usage, and fix CodeGeneratorV8.pm so that
        it generates the common pattern. Note that CodeGeneratorJS.pm already
        generates code in this order.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeaderContentHeader):
        (GenerateImplementationContentHeader):
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        * bindings/scripts/test/V8/V8TestCallback.h:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        * bindings/scripts/test/V8/V8TestInterface.h:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        * html/ColorInputType.cpp:
        * html/ColorInputType.h:
        * html/DateInputType.cpp:
        * html/DateTimeInputType.cpp:
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        * html/HTMLAudioElement.cpp:
        * html/HTMLAudioElement.h:
        * html/HTMLDataListElement.cpp:
        * html/HTMLDialogElement.cpp:
        * html/HTMLDialogElement.h:
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLMeterElement.cpp:
        * html/HTMLProgressElement.cpp:
        * html/HTMLSourceElement.cpp:
        * html/HTMLSourceElement.h:
        * html/HTMLTrackElement.cpp:
        * html/HTMLTrackElement.h:
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:
        * html/MonthInputType.cpp:
        * html/TimeInputType.cpp:
        * html/WeekInputType.cpp:
        * html/shadow/DateTimeFieldElement.h:
        * html/shadow/DetailsMarkerControl.cpp:
        * html/shadow/MeterShadowElement.cpp:
        * html/shadow/ProgressShadowElement.cpp:
        * rendering/RenderDetailsMarker.cpp:
        * rendering/RenderInputSpeech.cpp:
        * rendering/RenderMeter.cpp:
        * rendering/RenderProgress.cpp:

2013-02-08  Mike West  <mkwst@chromium.org>

        Replace ExceptionCode assertions with ASSERT_NO_EXCEPTION macro.
        https://bugs.webkit.org/show_bug.cgi?id=109044

        Reviewed by Darin Adler.

        The pattern:

            ExceptionCode ec = 0;
            methodThatGeneratesException(ec);
            ASSERT(!ec);

        is more clearly and succinctly written as:

            methodThatGeneratesException(ASSERT_NO_EXCEPTION);

        This patch replaces the occurances of the former that never touch 'ec'
        again with the latter. It does the same for 'ASSERT(ec == 0);' (and, as
        a drive-by, replaces 'ASSERT(ec == 0)' with 'ASSERT(!ec)' in places
        where it does indeed matter that 'ec' get set properly.

        No change in behavior should result from this refactoring.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        * dom/Document.cpp:
        (WebCore::Document::setTitle):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::disentanglePorts):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        (WebCore::DeleteButtonController::createDeletionUI):
            Replaced inline ASSERT with ASSERT_NO_EXCEPTION.
        (WebCore::DeleteButtonController::show):
            Replaced 'ASSERT(ec == 0)' with 'ASSERT(!ec)' to match the style guide.
        * editing/EditorCommand.cpp:
        (WebCore::unionDOMRanges):
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::removeNode):
        (WebCore::ReplacementFragment::insertNodeBefore):
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        (WebCore::ReplacementFragment::restoreAndRemoveTestRenderingNodesToFragment):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doUnapply):
        * editing/TextIterator.cpp:
        (WebCore::CharacterIterator::range):
        (WebCore::BackwardsCharacterIterator::range):
        (WebCore::TextIterator::rangeFromLocationAndLength):
        (WebCore::collapsedToBoundary):
        * editing/htmlediting.cpp:
        (WebCore::createTabSpanElement):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::fontAttributesForSelectionStart):
        * editing/markup.cpp:
        (WebCore::createMarkup):
        (WebCore::trimFragment):
        (WebCore::createFragmentFromMarkupWithContext):
        (WebCore::fillContainerFromString):
        (WebCore::createFragmentFromText):
        (WebCore::createFragmentFromNodes):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
            Replaced inline ASSERT with ASSERT_NO_EXCEPTION.
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
            Replaced 'ASSERT(ec == 0)' with 'ASSERT(!ec)' to match the style guide.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::indexForVisiblePosition):
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::updatePlaceholderText):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::addRule):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::dispatchDOMEvent):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::deleteFromDocument):
        * page/DragController.cpp:
        (WebCore::prepareClipboardForImageDrag):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::visiblePositionForIndex):
            Replaced inline ASSERT with ASSERT_NO_EXCEPTION.

2013-02-08  Alexei Filippov  <alph@chromium.org>

        Web Inspector: disable profile type switching while profile in progress
        https://bugs.webkit.org/show_bug.cgi?id=109178

        Reviewed by Yury Semikhatsky.

        Disables profile type selection controls when a profiling session
        is in progress.

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfileLauncherView.js:
        (WebInspector.ProfileLauncherView.prototype._updateControls):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.toggleRecordButton):

2013-02-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: adjust chunk transfer size for better speed.
        https://bugs.webkit.org/show_bug.cgi?id=109263

        Reviewed by Yury Semikhatsky.

        The chunk size is changed from 100 to 10000.
        addString counts only first 256 symbols of the string.o

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::pushUpdateIfNeeded):
        (WebCore::HeapGraphSerializer::addString):
        * inspector/front-end/NativeMemorySnapshotView.js:

2013-02-08  Kentaro Hara  <haraken@chromium.org>

        Support a relatedTarget attribute on focus/blur events
        https://bugs.webkit.org/show_bug.cgi?id=109176

        Reviewed by Ojan Vafai.

        In bug 76216, we supported a relatedTarget attribute on
        focusin/focusout events. We should also support it on focus/blur events.

        See http://lists.w3.org/Archives/Public/www-dom/2012OctDec/0061.html
        for the www-dom discussion.

        Test: fast/dom/shadow/shadow-boundary-events.html
              fast/events/related-target-focusevent.html

        * dom/EventDispatchMediator.cpp:
        (WebCore::FocusEventDispatchMediator::create):
        (WebCore::FocusEventDispatchMediator::FocusEventDispatchMediator):
        (WebCore::BlurEventDispatchMediator::create):
        (WebCore::BlurEventDispatchMediator::BlurEventDispatchMediator):
        * dom/EventDispatchMediator.h:
        (FocusEventDispatchMediator):
        (BlurEventDispatchMediator):
        * dom/Node.cpp:
        (WebCore::Node::dispatchFocusInEvent):
        (WebCore::Node::dispatchFocusOutEvent):
        (WebCore::Node::dispatchFocusEvent):
        (WebCore::Node::dispatchBlurEvent):

2013-02-07  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: reduce number of native memory instrumentation categories
        https://bugs.webkit.org/show_bug.cgi?id=109146

        Reviewed by Pavel Feldman.

        Merged some of memory instrumentation categories.

        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.MemoryBlockViewProperties._initialize):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore):

2013-02-07  Mike West  <mkwst@chromium.org>

        <iframe seamless> should avoid vertical scrollbars during the initial layout passes.
        https://bugs.webkit.org/show_bug.cgi?id=87707

        Reviewed by Eric Seidel.

        Seamless documents currently render incorrectly when their content fills
        the width of the container into which they're placed. Because FrameView
        assumes that the container's size is properly set before the first pass
        of layout, vertical scrollbars are incorrectly forced onto seamless
        content, because seamless sets the container's height to 0 before
        handing it off to FrameView for layout. The scrollbars make the
        available width for the seamless document ~15px smaller than it should
        be, resulting in content getting bumped to the next line.

        This patch special-cases FrameView::calculateScrollbarModesForLayout in
        order to force scrollbars off for seamless documents with a full visible
        height of 0px. Once the layout pass has grabbed the content height and
        applied it to the visible height, scrollbars will again be applicable.

        The change should be covered by rebaselines for the newly-passing
        results in fast/frame/seamless-{float,inline}.html

        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout):
            If we're rendering a seamless document, and the full visible height
            is 0, and the vertical scrollbar would otherwise be ScrollbarAuto,
            then force ScrollbarAlwaysOff.

2013-02-07  Kent Tamura  <tkent@chromium.org>

        document.activeElement should not return a non-focusable element
        https://bugs.webkit.org/show_bug.cgi?id=86707

        Reviewed by Hajime Morita.

        This is based on a patch by Arpita Bahuguna.

        Test: fast/dom/HTMLDocument/set-focus-on-valid-element.html

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        Added check for verifying that the node to be focused is
        focusable. However, this check should be skipped for HTMLPlugInElement
        because it has special behavior.

2013-02-07  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Fix front-end compilation warnings related to WebInspector.SidebarPane
        https://bugs.webkit.org/show_bug.cgi?id=109259

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane.Proxy):
        * inspector/front-end/SidebarPane.js:

2013-02-07  Kentaro Hara  <haraken@chromium.org>

        [V8] enum V8HiddenPropertyCreationType is not used
        https://bugs.webkit.org/show_bug.cgi?id=109250

        Reviewed by Adam Barth.

        V8HiddenPropertyCreationType is always NewSymbol. We can remove the enum.

        No tests. No change in behavior.

        * bindings/v8/V8HiddenPropertyName.cpp:
        (WebCore::hiddenReferenceName):
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):

2013-02-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142212.
        http://trac.webkit.org/changeset/142212
        https://bugs.webkit.org/show_bug.cgi?id=109255

        Causes ASSERT(!m_installed) on launch (Requested by smfr on
        #webkit).

        * WebCore.exp.in:
        * platform/MemoryPressureHandler.cpp:
        (WebCore):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        * platform/MemoryPressureHandler.h:
        (MemoryPressureHandler):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):

2013-02-07  Hanyee Kim  <choco@company100.net>

        NamedFlowCollection should be a ContextDestructionObserver
        https://bugs.webkit.org/show_bug.cgi?id=99239

        Reviewed by Adam Barth

        This patch removes the raw pointer of Document in NamedFlowCollection.
        It could be replaced with ContextDestructionObserver.
        ContextDestructionObserver has the pointer and clears the pointer
        automatically when the document is destroyed. 

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::NamedFlowCollection):
        (WebCore::NamedFlowCollection::ensureFlowWithName):
        (WebCore::NamedFlowCollection::discardNamedFlow):
        (WebCore::NamedFlowCollection::document):
        (WebCore):
        * dom/NamedFlowCollection.h:
        (NamedFlowCollection):

2013-02-07  Dean Jackson  <dino@apple.com>

        Followup review suggestions from Alexey Proskuryakov on
        https://bugs.webkit.org/show_bug.cgi?id=109215

        Don't provide a charset on embedded SVG, especially
        with incorrect syntax :)

        * css/mediaControlsQuickTime.css:
        (video::-webkit-media-controls-toggle-closed-captions-button):
        (video::-webkit-media-controls-closed-captions-track-list li.selected):
        (video::-webkit-media-controls-closed-captions-track-list li.selected:hover):

2013-02-07  Seulgi Kim  <seulgikim@company100.net>

        [Gtk] RunLoop::run shuold run current thread's run loop.
        https://bugs.webkit.org/show_bug.cgi?id=107887

        Reviewed by Martin Robinson.

        Currently, RunLoop in Gtk can use just main thread's event loop.
        But the other ports are implemented to use RunLoop in sub threads.

        This patch makes RunLoop constructor create new context, not use default
        context.
        But in the main thread still uses default context to use main event loop
        since there is some codes using glib directly (e.g. in
        LayerTreeHostGtk::scheduleLayerFlush).

        No new tests. There is no case that uses RunLoop in off the main thread
        yet.

        * platform/gtk/RunLoopGtk.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::run):

2013-02-07  Kentaro Hara  <haraken@chromium.org>

        [V8] Move V8DOMWrapper::setNamedHiddenReference() to V8HiddenPropertyName.h
        https://bugs.webkit.org/show_bug.cgi?id=109186

        Reviewed by Adam Barth.

        V8HiddenPropertyName.h is a right place for setNamedHiddenReference().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyTestObjAttrAttrGetter):
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        * bindings/v8/V8HiddenPropertyName.cpp:
        (WebCore::V8HiddenPropertyName::hiddenReferenceName):
        (WebCore::V8HiddenPropertyName::setNamedHiddenReference):
        (WebCore):
        * bindings/v8/V8HiddenPropertyName.h:
        (V8HiddenPropertyName):
        (WebCore::V8HiddenPropertyName::V8HiddenPropertyName):
        * bindings/v8/custom/V8MessageChannelCustom.cpp:
        (WebCore::V8MessageChannel::constructorCallbackCustom):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):

2013-02-07  Elliott Sprehn  <esprehn@chromium.org>

        getComputedStyle() doesn't report intermediate values during a transition of a pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=106535

        Reviewed by Ojan Vafai.

        Element::computedStyle and CSSComputedStyleDeclaration::getPropertyCSSValue
        should use the PseudoElement and it's renderer if they exist so that
        querying the computed style while an animation is running returns
        the intermediate values.

        No new tests, updated existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::styledNode): Added, returns either the PseudoElement or the Node.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Updated to use styledNode.
        * css/CSSComputedStyleDeclaration.h:
        (CSSComputedStyleDeclaration):
        * dom/Element.cpp:
        (WebCore::Element::computedStyle): Check the PseudoElement, not just the cached pseudo style.
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::pseudoElement): Remove ASSERT_NOT_REACHED so passing other pseudos returns 0.

2013-02-07  Mark Lam  <mark.lam@apple.com>

        Add a comment about how the SQLTransaction state machine works.
        https://bugs.webkit.org/show_bug.cgi?id=109243.

        Rubber stamped by Anders Carlsson.

        No new tests.

        * Modules/webdatabase/SQLTransactionBackend.cpp:

2013-02-06  Gavin Barraclough  <barraclough@apple.com>

        PluginProcess should quit immediately if idle in response to low-memory notifications
        https://bugs.webkit.org/show_bug.cgi?id=109103
        <rdar://problem/12679827>

        Reviewed by Darin Adler.

        This patch allows a process to set a custom callback for low memory warnings
        (defaulting to the current behaviour, as implemented in releaseMemory).

        MemoryPressureHandler::install is currently used for two purposes - it is
        called when first initializing a low memory handler for a process, and also
        used to reinstall the handler (on a delay) after the notification has occured.
        Since reinstallation doesn't change the callback, split these behaviours out -
        MemoryPressureHandler::initialize is added to initialization, and accepts a
        custom callback, install in made private.

        * WebCore.exp.in:
            - Added export for releaseMemory.
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):
            - Added null implementation for non-Mac builds.
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::initialize):
            - distinguish initialization from reinstallations, allow handler to be set.
        (MemoryPressureHandler):
            - Added m_lowMemoryHandler function pointer member variable.
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
            - Call m_lowMemoryHandler instead of releaseMemory.

2013-02-07  Kentaro Hara  <haraken@chromium.org>

        [V8] #ifndef NDEBUG is redundant for assertContextHasCorrectPrototype()
        https://bugs.webkit.org/show_bug.cgi?id=109167

        Reviewed by Andreas Kling.

        Given that assertContextHasCorrectPrototype() is anyway empty in a release
        build, we don't need to surround it with #ifndef NDEBUG.

        No tests. No change in behavior.

        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::assertContextHasCorrectPrototype):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::isolated):

2013-02-07  Alexei Svitkine  <asvitkine@chromium.org>

        Chromium: Hang parsing bidi control chars on Mac OS X 10.6
        https://bugs.webkit.org/show_bug.cgi?id=108877

        This was broken a while ago by:
            https://bugs.webkit.org/show_bug.cgi?id=83045

        On 10.6, CoreText will not produce any runs covering the
        Unicode BiDi RTL mark control char, which causes an infinite
        loop in ComplexTextController::indexOfCurrentRun() due to no
        run covering the character at offset 0.

        This patch fixes that issue by finding the earliest run
        explicitly via the minimum stringBegin() index instead of
        relying on a run existing that covers offset 0.

        Fixes hang on many BiDi wikipedia pages on Chromium/Mac10.6.
        Chromium bug: http://crbug.com/167844

        New test in the same style as the harfbuzz-buffer-overrun.html
        test (in the same folder).

        Reviewed by Eric Seidel.

        Test: fast/text/international/rtl-mark.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::indexOfCurrentRun):

2013-02-07  Kentaro Hara  <haraken@chromium.org>

        Implement FocusEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=109170

        Reviewed by Adam Barth.

        Editor's draft: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm

        FocusEvent constructor should be implemented under a DOM4_EVENTS_CONSTRUCTOR
        flag, which is enabled on Chromium and Safari.

        Test: fast/events/constructors/focus-event-constructor.html

        * dom/FocusEvent.cpp:
        (WebCore::FocusEventInit::FocusEventInit):
        (WebCore):
        (WebCore::FocusEvent::FocusEvent):
        * dom/FocusEvent.h:
        (FocusEventInit):
        (WebCore):
        (WebCore::FocusEvent::create):
        (FocusEvent):
        * dom/FocusEvent.idl:
        * page/DOMWindow.idl:

2013-02-07  Elliott Sprehn  <esprehn@chromium.org>

        HTML parser should queue MutationRecords for its operations
        https://bugs.webkit.org/show_bug.cgi?id=89351

        Reviewed by Eric Seidel.

        Generate mutation records inside the parser. This is done by using a
        ChildListMutationScope in the ContainerNode::parser* methods and then
        adding delivery before each <script> element would be processed by
        the parser.

        Test: fast/dom/MutationObserver/parser-mutations.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::parserAppendChild):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executeParsingBlockingScript):
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::execute):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForLoad):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForStylesheets):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForParsing):
        (WebCore::HTMLScriptRunner::runScript):

2013-02-07  Kentaro Hara  <haraken@chromium.org>

        Fix FIXMEs in WindowFeatures.h
        https://bugs.webkit.org/show_bug.cgi?id=109151

        Reviewed by Adam Barth.

        1. // FIXME: We can delete this constructor once V8 showModalDialog is
           // changed to use DOMWindow.

        This FIXME is not right. The WindowFeatures() constructor is used by
        other ports too (e.g. WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp).
        So we should remove the FIXME.

        2. // FIXME: We can make these functions private non-member functions
           // once V8 showModalDialog is changed to use DOMWindow.

        Given that V8 now uses DOMWindow in showModalDialog(), we can make the
        methods private.

        No tests. No change in behavior.

        * page/WindowFeatures.h:
        (WebCore):
        (WebCore::WindowFeatures::WindowFeatures):
        (WindowFeatures):

2013-02-07  Adam Barth  <abarth@webkit.org>

        fast/parser/document-write-noscript.html fails for threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=109237

        Reviewed by Eric Seidel.

        If there are multiple calls to document.write in an external script, we
        need to wait for them all to complete before invalidating the
        speculative tokens. Instead of doing this when we unwind the
        document.write call stack, we do this when we're about to resume
        parsing after script execution.

        Test: fast/parser/document-write-basic.html

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):

2013-02-07  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        Fix build when compiling with css3-text and css3-conditional-rules feature flags enabled.
        https://bugs.webkit.org/show_bug.cgi?id=109217

        Reviewed by Benjamin Poulain.

        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collect):

2013-02-07  Keishi Hattori  <keishi@webkit.org>

        REGRESSION (r140778): Calendar Picker doesn't open when the element has the required attribute
        https://bugs.webkit.org/show_bug.cgi?id=109136

        Reviewed by Kent Tamura.

        Calendar picker was using the "Clear" button to calculate the window width.
        Since it doesn't exist when the input element has a required attribute,
        it was throwing an error. This patch fixes the width calculating logic.

        Tests: platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html
               platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-required.html

        * Resources/pagepopups/calendarPicker.css:
        (.today-clear-area):
        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker.prototype.fixWindowSize): Fixing the logic to calculate
        the width. We don't want to use clear button because it doesn't exist
        when a value is required.

2013-02-07  Terry Anderson  <tdanderson@chromium.org>

        Non-scrollable divs and non-scrollable iframes can scroll with touch
        https://bugs.webkit.org/show_bug.cgi?id=109087

        Reviewed by Eric Seidel.

        Tests: fast/events/touch/gesture/touch-gesture-noscroll-div.html
               fast/events/touch/gesture/touch-gesture-noscroll-iframe.html

        When finding a candidate for a scrollable node in
        EventHandler::handleGestureScrollUpdate(), select the document node
        if it is reached before any scrollable element when walking up the DOM
        tree. Also ensure that calling RenderLayer::scrollBy() for a document
        node does not result in scrolling if the element is not scrollable.

        * page/EventHandler.cpp:
        (WebCore::closestScrollableNodeCandidate):
        (WebCore::EventHandler::handleGestureScrollUpdate):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollBy):

2013-02-07  Mark Lam  <mark.lam@apple.com>

        Introduce SQLTransactionBackend and SQLTransactionBackendSync [Part 2].
        https://bugs.webkit.org/show_bug.cgi?id=109109.

        Reviewed by Anders Carlsson.

        Adding back the new SQLTransaction and SQLTransactionSync files.

        No new tests.

        * Modules/webdatabase/SQLTransaction.cpp: Added.
        (WebCore::SQLTransaction::create):
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::from):
        * Modules/webdatabase/SQLTransaction.h: Added.
        (SQLTransaction):
        * Modules/webdatabase/SQLTransactionSync.cpp: Added.
        (WebCore::SQLTransactionSync::create):
        (WebCore::SQLTransactionSync::SQLTransactionSync):
        (WebCore::SQLTransactionSync::from):
        * Modules/webdatabase/SQLTransactionSync.h: Added.
        (SQLTransactionSync):

2013-02-07  Mark Lam  <mark.lam@apple.com>

        Introduce SQLTransactionBackend and SQLTransactionBackendSync.
        https://bugs.webkit.org/show_bug.cgi?id=109109.

        Reviewed by Anders Carlsson.

        - Renamed SQLTransaction and SQLTransactionSync to SQLTransactionBackend
          and SQLTransactionBackendSync respectively.
        - Added back SQLTransaction and SQLTransactionSync as new files, and have
          their classes extends their respective backends. This is a stop gap
          measure to keep things working until the front-end and back-end can be
          properly split.
          Note: these files will be committed in a subsequent commit to ensure
          that the patching goes smoothly.
        - Where needed, I made use of new SQLTransaction::from() and
          SQLTransactionSync::from() static methods that "get" the front-end
          transactions from the back-ends. This is also a stop gap measure to
          keep things working until the proper refactoring is complete.
        - Fixed up pre-existing style checker violations that are now detected
          on code that were touched during my renaming.
        - Added the back-end files to all the build files.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::scheduleTransactionStep):
        * Modules/webdatabase/Database.h:
        (Database):
        * Modules/webdatabase/DatabaseBackend.h:
        (DatabaseBackend):
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::DatabaseTransactionTask):
        * Modules/webdatabase/DatabaseTask.h:
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::create):
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::transaction):
        (DatabaseBackendAsync::DatabaseTransactionTask):
        * Modules/webdatabase/SQLTransaction.cpp: Removed.
        * Modules/webdatabase/SQLTransaction.h: Removed.
        * Modules/webdatabase/SQLTransactionBackend.cpp: Copied from Source/WebCore/Modules/webdatabase/SQLTransaction.cpp.
        (WebCore::SQLTransactionBackend::SQLTransactionBackend):
        (WebCore::SQLTransactionBackend::~SQLTransactionBackend):
        (WebCore::SQLTransactionBackend::executeSQL):
        (WebCore::SQLTransactionBackend::enqueueStatement):
        (WebCore::SQLTransactionBackend::debugStepName):
        (WebCore::SQLTransactionBackend::checkAndHandleClosedOrInterruptedDatabase):
        (WebCore::SQLTransactionBackend::performNextStep):
        (WebCore::SQLTransactionBackend::performPendingCallback):
        (WebCore::SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown):
        (WebCore::SQLTransactionBackend::acquireLock):
        (WebCore::SQLTransactionBackend::lockAcquired):
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        (WebCore::SQLTransactionBackend::deliverTransactionCallback):
        (WebCore::SQLTransactionBackend::scheduleToRunStatements):
        (WebCore::SQLTransactionBackend::runStatements):
        (WebCore::SQLTransactionBackend::getNextStatement):
        (WebCore::SQLTransactionBackend::runCurrentStatement):
        (WebCore::SQLTransactionBackend::handleCurrentStatementError):
        (WebCore::SQLTransactionBackend::deliverStatementCallback):
        (WebCore::SQLTransactionBackend::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransactionBackend::postflightAndCommit):
        (WebCore::SQLTransactionBackend::deliverSuccessCallback):
        (WebCore::SQLTransactionBackend::cleanupAfterSuccessCallback):
        (WebCore::SQLTransactionBackend::handleTransactionError):
        (WebCore::SQLTransactionBackend::deliverTransactionErrorCallback):
        (WebCore::SQLTransactionBackend::cleanupAfterTransactionErrorCallback):
        * Modules/webdatabase/SQLTransactionBackend.h: Copied from Source/WebCore/Modules/webdatabase/SQLTransaction.h.
        (SQLTransactionBackend):
        * Modules/webdatabase/SQLTransactionBackendSync.cpp: Copied from Source/WebCore/Modules/webdatabase/SQLTransactionSync.cpp.
        (WebCore::SQLTransactionBackendSync::SQLTransactionBackendSync):
        (WebCore::SQLTransactionBackendSync::~SQLTransactionBackendSync):
        (WebCore::SQLTransactionBackendSync::executeSQL):
        (WebCore::SQLTransactionBackendSync::begin):
        (WebCore::SQLTransactionBackendSync::execute):
        (WebCore::SQLTransactionBackendSync::commit):
        (WebCore::SQLTransactionBackendSync::rollback):
        * Modules/webdatabase/SQLTransactionBackendSync.h: Copied from Source/WebCore/Modules/webdatabase/SQLTransactionSync.h.
        (SQLTransactionBackendSync):
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::getDatabaseIdentifier):
        (WebCore::SQLTransactionCoordinator::processPendingTransactions):
        (WebCore::SQLTransactionCoordinator::acquireLock):
        (WebCore::SQLTransactionCoordinator::releaseLock):
        (WebCore::SQLTransactionCoordinator::shutdown):
        * Modules/webdatabase/SQLTransactionCoordinator.h:
        (SQLTransactionCoordinator):
        (WebCore::SQLTransactionCoordinator::SQLTransactionCoordinator):
        (CoordinationInfo):
        * Modules/webdatabase/SQLTransactionSync.cpp: Removed.
        * Modules/webdatabase/SQLTransactionSync.h: Removed.
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-02-07  Dean Jackson  <dino@apple.com>

        Use new speech bubble artwork for captions menu button
        https://bugs.webkit.org/show_bug.cgi?id=109215

        Reviewed by Eric Carlson.

        Rather than call into RenderTheme to display this button, embed artwork
        into the CSS. This means we can remove some uncalled methods in
        RenderTheme.

        * css/mediaControlsQuickTime.css:
        (video::-webkit-media-controls-toggle-closed-captions-button): New background image using SVG.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Don't call the specific painter for the CC button.
        * rendering/RenderTheme.h: Remove unused function.
        * rendering/RenderThemeMac.h: Ditto.
        * rendering/RenderThemeMac.mm: Ditto.

2013-02-07  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Add the last blending step
        https://bugs.webkit.org/show_bug.cgi?id=104012

        The resulting blended color in mix() is now weighted according to
        the original element's backdrop alpha value.

        Reviewed by Dean Jackson.

        Test: css3/filters/custom/custom-filter-blend-fractional-destination-alpha.html

        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::rewriteMixFragmentShader):

2013-02-07  Benjamin Poulain  <bpoulain@apple.com>

        Fix two exports of WebCore symbols on iOS
        https://bugs.webkit.org/show_bug.cgi?id=109238

        Reviewed by David Kilzer.

        * WebCore.exp.in: Export wkCTFontTransformGlyphs but not
        wkCGContextDrawsWithCorrectShadowOffsets on iOS.

2013-02-07  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Ignore ExclusionPolygon edges above minLogicalIntervalTop
        https://bugs.webkit.org/show_bug.cgi?id=107566

        Reviewed by David Hyatt.

        Improve ExclusionPolygon::firstIncludedIntervalLogicalTop() performance by only
        creating offset edges for polygon edges that are below the horizontal minLogicalIntervalTop
        line. In other words, don't bother creating offset edges that can't define the polygon's
        first fit location.

        Test: fast/exclusions/shape-inside/shape-inside-first-fit-004.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop): Don't create offset edges for polygon edges above minLogicalIntervalTop.

2013-02-07  Jer Noble  <jer.noble@apple.com>

        Improve logging of MediaPlayerPrivateAVFoundation Notifications.
        https://bugs.webkit.org/show_bug.cgi?id=109223

        Reviewed by Eric Carlson.

        Convert the existing Notification enum to an expandable macro. Then add a
        Logging-only function which stringifies the enums.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore):
        (WebCore::notificationName):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2013-02-07  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Cleanup command-line defines
        https://bugs.webkit.org/show_bug.cgi?id=109213

        Reviewed by Xan Lopez.

        * GNUmakefile.am: Remove references to flags that are now handled
        via autotoolsconfig.h.

2013-02-07  Tom Sepez  <tsepez@chromium.org>

        [V8] Binding Integrity crash in V8MediaStream::createWrapper
        https://bugs.webkit.org/show_bug.cgi?id=109211

        Reviewed by Adam Barth.

        Patch suppresses a chrome crasher.

        * Modules/mediastream/MediaStream.idl:

2013-02-07  Eric Carlson  <eric.carlson@apple.com>

        [Mac] decrease in-band caption advance notice interval
        https://bugs.webkit.org/show_bug.cgi?id=109190

        Reviewed by Simon Fraser.

        No new tests, no observable change in behavior.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Request cues 2 seconds in advance.

2013-02-07  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK][AC] Clutter required version up to 1.12
        https://bugs.webkit.org/show_bug.cgi?id=109037

        Reviewed by Martin Robinson.

        Replace deprecated clutter apis with new ones.

        No new tests, since this patch is minor refactoring.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorSetAnchorPoint):
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::idleDestroy):
        (WebCore::GraphicsLayerClutter::updateSublayerList):

2013-02-07  Benjamin Poulain  <bpoulain@apple.com>

        Move pauseAnimation/pauseTransition from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=109107

        Reviewed by Anders Carlsson.

        Tests: animations/animation-internals-api-multiple-keyframes.html
               animations/animation-internals-api.html

        * testing/Internals.cpp:
        (WebCore::Internals::pauseAnimationAtTimeOnElement):
        (WebCore):
        (WebCore::Internals::pauseTransitionAtTimeOnElement):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142155.
        http://trac.webkit.org/changeset/142155
        https://bugs.webkit.org/show_bug.cgi?id=82888

        cr/win build broke.

        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::typesAccessorGetter):
        * dom/Clipboard.h:
        (Clipboard):
        * platform/blackberry/ClipboardBlackBerry.cpp:
        (WebCore::ClipboardBlackBerry::types):
        * platform/blackberry/ClipboardBlackBerry.h:
        (ClipboardBlackBerry):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        * platform/chromium/ChromiumDataObject.h:
        (ChromiumDataObject):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        * platform/chromium/ClipboardChromium.h:
        (ClipboardChromium):
        * platform/efl/ClipboardEfl.cpp:
        (WebCore::ClipboardEfl::types):
        * platform/efl/ClipboardEfl.h:
        (ClipboardEfl):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::types):
        * platform/gtk/ClipboardGtk.h:
        (ClipboardGtk):
        * platform/mac/ClipboardMac.h:
        (ClipboardMac):
        * platform/mac/ClipboardMac.mm:
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::ClipboardMac::types):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::types):
        * platform/qt/ClipboardQt.h:
        (ClipboardQt):
        * platform/win/ClipboardWin.cpp:
        (WebCore::addMimeTypesForFormat):
        (WebCore::ClipboardWin::types):
        * platform/win/ClipboardWin.h:
        (ClipboardWin):

2013-02-07  Rik Cabanier  <cabanier@adobe.com>

        Add support for parsing of -webkit-background-blend-mode
        https://bugs.webkit.org/show_bug.cgi?id=108547

        Reviewed by David Hyatt.

        Added parsing and general CSS handling of -webkit-background-blend-mode per 
        https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#background-blend-mode

        Tests: css3/compositing/background-blend-mode-property-parsing.html
               css3/compositing/background-blend-mode-property.html

        * css/CSSComputedStyleDeclaration.cpp: Built value for getComputedStyle.
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp: Parsed and stored value of -webkit-background-blend-mode.
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSProperty.cpp: Listed -webkit-background-blend-mode as a non-inherited property.
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in: Added -webkit-background-blend-mode as a CSS property.
        * css/CSSToStyleMap.cpp: Mapped background blend mode from CSS value to enum.
        (WebCore::CSSToStyleMap::mapFillBlendMode):
        (WebCore):
        * css/CSSToStyleMap.h: Added function declaration 'mapFillBlendMode'.
        (CSSToStyleMap):
        * css/StyleBuilder.cpp: Set up propery handler for -webkit-background-blend-mode.
        (WebCore::StyleBuilder::StyleBuilder):
        * rendering/style/FillLayer.cpp: Added code to store and retrieve the blend mode from a layer.
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::fillUnsetProperties):
        * rendering/style/FillLayer.h: Added function definitions to manage blend mode in a layer.
        (WebCore::FillLayer::blendMode):
        (WebCore::FillLayer::isBlendModeSet):
        (WebCore::FillLayer::setBlendMode):
        (WebCore::FillLayer::clearBlendMode):
        (WebCore::FillLayer::initialFillBlendMode):
        (FillLayer):

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142142.
        http://trac.webkit.org/changeset/142142
        https://bugs.webkit.org/show_bug.cgi?id=109154

        Mac expectations were not right. See http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=inspector-protocol%2Fnmi-webaudio-leak-test.html and http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=inspector-protocol%2Fnmi-webaudio.html .


        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._registerShortcuts):

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142081.
        http://trac.webkit.org/changeset/142081
        https://bugs.webkit.org/show_bug.cgi?id=109146

        The patch caused a crash in inspector-protocol/nmi-webaudio*.html .

        See http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=inspector-protocol%2Fnmi-webaudio-leak-test.html and http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=inspector-protocol%2Fnmi-webaudio.html .

        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.MemoryBlockViewProperties._initialize):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore):

2013-02-07  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions] shape-inside does not properly handle padding or border
        https://bugs.webkit.org/show_bug.cgi?id=102715

        Reviewed by David Hyatt.

        This patch positions the exclusion shape based on the value of the css box sizing
        property. Geometry calculations happen in the shape coordinate space. For layout,
        these coordinates are translated to the border-box coordinate system by adding
        the appropriate offsets.

        Test: fast/exclusions/shape-inside/shape-inside-box-sizing.html

        * rendering/ExclusionShapeInfo.cpp:
        (WebCore::::computedShape): Pass m_shapeLogicalWidth to the exclusion shape
        geometry code.
        * rendering/ExclusionShapeInfo.h:
        (WebCore::ExclusionShapeInfo::setShapeSize): Adjust block layout dimensions to
        shape dimensions when checking to see if the shape geometry must be recalculated.
        (WebCore::ExclusionShapeInfo::shapeLogicalTop): Account for layout offsets.
        (WebCore::ExclusionShapeInfo::shapeLogicalBottom): Ditto.
        (WebCore::ExclusionShapeInfo::shapeLogicalLeft): Ditto.
        (WebCore::ExclusionShapeInfo::shapeLogicalRight): Ditto.
        (WebCore::ExclusionShapeInfo::logicalTopOffset): Return the offset from the logical
        top of the border box to the logical top of the shape.
        (WebCore::ExclusionShapeInfo::logicalLeftOffset): Return the offset from the logical
        left of the border box to the logical left of the shape.
        (ExclusionShapeInfo):
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::computeSegmentsForLine): Adjust line top to
        be in shape coordinates.
        (WebCore::ExclusionShapeInsideInfo::adjustLogicalLineTop): Ditto.
        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::lineOverlapsShapeBounds): Use consistent
        coordinate system (border box) to test for whether a line overlaps a shape.
        (WebCore::ExclusionShapeInsideInfo::logicalLineTop): Include the logical offset
        from the border box.
        (WebCore::ExclusionShapeInsideInfo::logicalLineBottom): Ditto.

2013-02-07  Benjamin Poulain  <bpoulain@apple.com>

        Upstream iOS isWebThread() and isUIThread()
        https://bugs.webkit.org/show_bug.cgi?id=109130

        Reviewed by Sam Weinig.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject initialize]):
        * platform/mac/SharedBufferMac.mm:
        (+[WebCoreSharedBufferData initialize]):
        #ifdef out the legacy initialization as it is not correct when
        using a WebThread.

2013-02-07  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: CPU pegged when inspecting LocalStorage that mutates.
        https://bugs.webkit.org/show_bug.cgi?id=107937

        Reviewed by Yury Semikhatsky.

        The DOM storage agent will fire an event to the frontend based on the action
        performed on the storage. Based on this action, the front-end will just add/update/remove
        the entry in the view. This enhances the front-end responsiveness as the round trip
        for fetching the storage entries has been eliminated.

        Existing test: LayoutTests/inspector/storage-panel-dom-storage-update.html should verify the change

        * inspector/Inspector.json:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorageModel.prototype._domStorageItemsCleared):
        (WebInspector.DOMStorageModel.prototype._domStorageItemRemoved):
        (WebInspector.DOMStorageModel.prototype._domStorageItemAdded):
        (WebInspector.DOMStorageModel.prototype._domStorageItemUpdated):
        (WebInspector.DOMStorageDispatcher.prototype.domStorageItemsCleared):
        (WebInspector.DOMStorageDispatcher.prototype.domStorageItemRemoved):
        (WebInspector.DOMStorageDispatcher.prototype.domStorageItemAdded):
        (WebInspector.DOMStorageDispatcher.prototype.domStorageItemUpdated):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView):
        (WebInspector.DOMStorageItemsView.prototype.wasShown):
        (WebInspector.DOMStorageItemsView.prototype._domStorageItemsCleared):
        (WebInspector.DOMStorageItemsView.prototype._domStorageItemRemoved):
        (WebInspector.DOMStorageItemsView.prototype._domStorageItemAdded):
        (WebInspector.DOMStorageItemsView.prototype._domStorageItemUpdated):
        (WebInspector.DOMStorageItemsView.prototype._update):
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
        (WebInspector.DOMStorageItemsView.prototype._refreshButtonClicked):
        (WebInspector.DOMStorageItemsView.prototype._editingCallback):
        (WebInspector.DOMStorageItemsView.prototype._deleteCallback):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype._showDOMStorage.get if):
        (WebInspector.ResourcesPanel.prototype._showDOMStorage):

2013-02-07  Dan Carney  <dcarney@google.com>

        [v8] move persistent::new and ::dispose into same class
        https://bugs.webkit.org/show_bug.cgi?id=109065

        Reviewed by Adam Barth.

        No new tests. No change in functionality.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateSingleConstructorCallback):
        (GenerateEventConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateToV8Converters):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::createWrapper):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::createWrapper):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::createWrapper):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        (WebCore::V8TestEventConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::createWrapper):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::createWrapper):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        (WebCore::V8TestInterface::createWrapper):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::createWrapper):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        (WebCore::V8TestNamedConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::constructorCallback):
        (WebCore::V8TestNode::createWrapper):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::constructorCallback):
        (WebCore::V8TestObj::createWrapper):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructor1Callback):
        (WebCore::V8TestOverloadedConstructors::constructor2Callback):
        (WebCore::V8TestOverloadedConstructors::constructor3Callback):
        (WebCore::V8TestOverloadedConstructors::constructor4Callback):
        (WebCore::V8TestOverloadedConstructors::createWrapper):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        (WebCore::V8TestSerializedScriptValueInterface::createWrapper):
        * bindings/v8/DOMDataStore.cpp:
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::setWrapper):
        (DOMDataStore):
        (WebCore::DOMDataStore::set):
        (WebCore::DOMDataStore::setWrapperInObject):
        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperMap::get):
        (WebCore::DOMWrapperMap::set):
        (WebCore::DOMWrapperMap::removeAndDispose):
        (WebCore::DOMWrapperMap::defaultWeakCallback):
        * bindings/v8/ScriptWrappable.h:
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::reportMemoryUsage):
        (ScriptWrappable):
        (WebCore::ScriptWrappable::disposeWrapper):
        (WebCore::ScriptWrappable::weakCallback):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::associateObjectWithWrapper):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::weakNPObjectCallback):
        (WebCore::createV8ObjectForNPObject):
        (WebCore::forgetV8ObjectForNPObject):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initializeContextIfNeeded):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WrapperConfiguration):
        (WebCore::WrapperConfiguration::configureWrapper):
        (WebCore::buildWrapperConfiguration):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCallbackCustom):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::wrapArrayBufferView):
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallbackCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCallbackCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallbackCustom):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8IntentCustom.cpp:
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8MessageChannelCustom.cpp:
        (WebCore::V8MessageChannel::constructorCallbackCustom):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallbackCustom):
        * bindings/v8/custom/V8WebKitPointCustom.cpp:
        (WebCore::V8WebKitPoint::constructorCallbackCustom):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallbackCustom):

2013-02-07  Zan Dobersek  <zdobersek@igalia.com>

        [Autotools] Remove uses of Automake FARSTREAM_(CFLAGS|LIBS) variables, USE_FARSTREAM conditional
        https://bugs.webkit.org/show_bug.cgi?id=109198

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Remove FARSTREAM_CFLAGS variable, it's not set to anything.

2013-02-07   Vineet Chaudhary  <rgf748@motorola.com>

        Consider replacing return type of Clipboard::types() from ListHashSet<String> to Vector<String>
        https://bugs.webkit.org/show_bug.cgi?id=82888

        Reviewed by Kentaro Hara.

        As part of removing custom bindings of types Array Clipboard::types() needs to return
        Vector<String> than ListHashSet<String>

        No new tests. Existing test should pass with this change as no behavoural changes.

        * bindings/js/JSClipboardCustom.cpp: Replace data type from ListHashSet<> to Vector<>.
        (WebCore::JSClipboard::types):
        * bindings/v8/custom/V8ClipboardCustom.cpp: Ditto.
        (WebCore::V8Clipboard::typesAccessorGetter): Ditto.
        * dom/Clipboard.h: Ditto.
        * platform/blackberry/ClipboardBlackBerry.cpp: Ditto.
        (WebCore::ClipboardBlackBerry::types):
        * platform/blackberry/ClipboardBlackBerry.h: Ditto.
        * platform/chromium/ChromiumDataObject.cpp: Ditto.
        (WebCore::ChromiumDataObject::types):
        * platform/chromium/ChromiumDataObject.h: Ditto.
        * platform/chromium/ClipboardChromium.cpp: Ditto.
        (WebCore::ClipboardChromium::types):
        * platform/chromium/ClipboardChromium.h: Ditto.
        * platform/efl/ClipboardEfl.cpp: Ditto.
        (WebCore::ClipboardEfl::types):
        * platform/efl/ClipboardEfl.h: Ditto.
        * platform/gtk/ClipboardGtk.cpp: Ditto.
        (WebCore::ClipboardGtk::types):
        * platform/gtk/ClipboardGtk.h: Ditto.
        * platform/mac/ClipboardMac.h: Ditto.
        * platform/mac/ClipboardMac.mm: Ditto.
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::ClipboardMac::types):
        * platform/qt/ClipboardQt.cpp: Ditto.
        (WebCore::ClipboardQt::types):
        * platform/qt/ClipboardQt.h: Ditto.
        * platform/win/ClipboardWin.cpp: Ditto.
        (WebCore::addMimeTypesForFormat):
        (WebCore::ClipboardWin::types):
        * platform/win/ClipboardWin.h: Ditto.

2013-02-07  Kentaro Hara  <haraken@chromium.org>

        [V8] StringCache::m_stringCache should be HashMap<StringImpl*, Persistent<String>>
        https://bugs.webkit.org/show_bug.cgi?id=109123

        Reviewed by Adam Barth.

        Currently StringCache::m_stringCache is implemented as
        HashMap<StringImpl*, v8::String*>. Given that v8::String*
        can change when a GC is triggered, it is dangerous to store a raw pointer.
        We should use HashMap<StringImpl*, v8::Persistent<v8::String>> instead.

        This is a possible fix for an IndexedDB crash (https://bugs.webkit.org/show_bug.cgi?id=105363),
        although I'm not sure if this patch fixes the crash. (I couldn't reproduce the crash.)

        No tests. This change highly depends on GC behavior and thus it is
        difficult to make a reliable test case.

        * bindings/v8/V8ValueCache.cpp:
        (WebCore::makeExternalString):
        * bindings/v8/V8ValueCache.h:
        (StringCache):

2013-01-27  Robert Hogan  <robert@webkit.org>

        CSS 2.1 failure: floats-149 fails
        https://bugs.webkit.org/show_bug.cgi?id=95772

        Reviewed by David Hyatt.

        Treat inlines that contain nothing but empty inlines as empty too so that they get a linebox.

        Tests: fast/inline/inline-with-empty-inline-children.html
               css2.1/20110323/floats-149.htm

        * rendering/InlineIterator.h:
        (WebCore::isEmptyInline):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Now that empty inlines get a linebox any out-of-flow
        objects inside an empty inline (on a line that is otherwise empty) won't get positioned while skipping 
        through leading whitespace. 

2013-02-07  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile fix after r141981
        https://bugs.webkit.org/show_bug.cgi?id=109184

        Reviewed by Brent Fulgham.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2013-02-07  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Cookie database isn't loaded into memory in some rare cases
        https://bugs.webkit.org/show_bug.cgi?id=109202
        PR 286189

        Reviewed by Yong Li.
        Internally Reviewed by Konrad Piascik.

        If a get/setCookie call is made before the database is loaded, or if there's some
        kind of error that causes the loading of the database to fail in the constructor
        of CookieManager, the browser will get into a state where it seems like cookie is
        permanenty disabled.

        Instead of logging the errors and redispatching the setCookie, we should do a force sync
        to load the cookie database before continuing.

        Since the bug is so difficult to reproduce (I never did so myself), I did the follow test
        to make sure the code path is correct:
        1) Make sure original implementation is retained - open and loading done in the constructor
        2) Removed opening and loading in constructor, the new calls in get/setcookies loaded the db just fine (although with
        an initial lag because we are blocking WKT while performing SQLite options).
        3) Removed loading in constructor, the new calls loaded the db just fine.

        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
        (WebCore::CookieDatabaseBackingStore::openAndLoadDatabaseSynchronously):
        (WebCore):
        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h:
        (CookieDatabaseBackingStore):
        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::setCookies):
        (WebCore::CookieManager::getCookie):
        (WebCore::CookieManager::generateHtmlFragmentForCookies):
        (WebCore::CookieManager::getRawCookies):

2013-02-07  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Add WebKitCSSFilterRule to DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=109082

        Reviewed by Dean Jackson.

        Add an entry for WebKitCSSFilterRuleConstructor in DOMWindow.idl.

        Tests: css3/filters/custom-with-at-rule-syntax/parsing-at-rule-invalid.html
               css3/filters/custom-with-at-rule-syntax/parsing-at-rule-valid.html

        * page/DOMWindow.idl:

2013-02-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Remove unused workspace field from NetworkUISourceCodeProvider
        https://bugs.webkit.org/show_bug.cgi?id=109201

        Reviewed by Pavel Feldman.

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

2013-02-07  Jessie Berlin  <jberlin@apple.com>

        REGRESSION(r142003): Duplicate "Unknown" strings in LocalizedStrings.cpp not distinguished
        by key
        https://bugs.webkit.org/show_bug.cgi?id=109196

        Reviewed by Eric Carlson.

        * English.lproj/Localizable.strings:
        Updated for the changes.
        * platform/LocalizedStrings.cpp:
        (WebCore::unknownFileSizeText):
        Add a key.
        (WebCore::textTrackNoLabelText):
        Ditto.

2013-02-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: linkifyResourceAsNode produced anchor should not prefer resources to scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=109197

        Reviewed by Pavel Feldman.

        Javascript syntax errors in console are now linkified so that they show sources panel by default.

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

2013-02-07  Eberhard Graether  <egraether@google.com>

        Web Inspector: Add settings checkbox for composited layer borders
        https://bugs.webkit.org/show_bug.cgi?id=109096

        Reviewed by Pavel Feldman.

        This change adds a checkbox to show composited layer borders to the WebInspector's
        rendering settings and plumbs the setting to Chromium's WebLayerTreeView. The setting
        is visible if InspectorClient::canShowDebugBorders() returns true.

        No new tests.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::canShowDebugBorders):
        (WebCore::InspectorClient::setShowDebugBorders):
        (InspectorClient):
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::canShowDebugBorders):
        (WebCore):
        (WebCore::InspectorPageAgent::setShowDebugBorders):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):
        (WebInspector.GenericSettingsTab.prototype.get _showDebugBordersChanged):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142141.
        http://trac.webkit.org/changeset/142141
        https://bugs.webkit.org/show_bug.cgi?id=108990

        Reland r142112, will update Chromium expectations and create a
        Chromium bug instead for the crash.

        * CMakeLists.txt:
        * Target.pri:
        * WebCore.pri:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp: Added.
        (WebCore):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::ScrollingCoordinatorCoordinatedGraphics):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::setLayerIsFixedToContainerLayer):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h: Added.
        (WebCore):
        (ScrollingCoordinatorCoordinatedGraphics):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setFixedToViewport):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):

2013-02-07  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: home button behaviour is wrong in DTE
        https://bugs.webkit.org/show_bug.cgi?id=109154

        Reviewed by Vsevolod Vlasov.

        Handle home key shortcut explicitly in TextEditorMainPanel.

        New test: inspector/editor/text-editor-home-button.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._registerShortcuts):
        (WebInspector.TextEditorMainPanel.prototype._handleHomeKey):

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142112.
        http://trac.webkit.org/changeset/142112
        https://bugs.webkit.org/show_bug.cgi?id=108990

        The new test scrollingcoordinator/non-fast-scrollable-region-transformed- iframe.html crashes on Lion.

        See http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=scrollingcoordinator%2Fnon-fast-scrollable-region-transformed-iframe.html

        * CMakeLists.txt:
        * Target.pri:
        * WebCore.pri:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp: Removed.
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (WebCore::CoordinatedGraphicsLayer::setFixedToViewport):

2013-02-07  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Scrollbars misplaced with accelerated compositing for overflow scroll
        https://bugs.webkit.org/show_bug.cgi?id=108625

        Reviewed by Simon Fraser.

        Scrollbars require their own layer if overflow scroll is composited,
        otherwise the scrollbars would be rendered on the content layer and
        not fixed to the viewport.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::requiresHorizontalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresVerticalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresScrollCornerLayer):

2013-02-07  Mike West  <mkwst@chromium.org>

        Don't ASSERT things about uninitialized variables.
        https://bugs.webkit.org/show_bug.cgi?id=109187

        Reviewed by Jochen Eisinger.

        Rather than ASSERTing that an uninitialized ExceptionCode is non-zero
        after some method executes, we should use the ASSERT_NO_EXCEPTION macro.

        * editing/markup.cpp:
        (WebCore::removeElementPreservingChildren):

2013-02-07  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: [Regression] breakpoint condition not editable
        https://bugs.webkit.org/show_bug.cgi?id=109183

        Reviewed by Vsevolod Vlasov.

        Improve TextEditorMainPanel.selection() method to return null if the
        selection is set inside of decoration element.

        No new tests.

        * inspector/front-end/DOMExtension.js:
        (Node.prototype.enclosingNodeOrSelfWithClass): Improve to add iteration boundary.
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype.selection):

2013-02-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL][QT]REGRESSION(r142045): Scrolling is broken
        https://bugs.webkit.org/show_bug.cgi?id=109185

        Reviewed by Kenneth Rohde Christiansen.

        This patch is disabling paints clipping logic added at r142045 for the case 
        when the view should render the entire contents (case of using tiled backing store).

        No new tests, covered by plenty of existing manual tests that allow scrolling
        (for example fixed-position.html).

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):

2013-02-07  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Show elements and sources sidebar panes in a tabbed pane when they are below the main pane
        https://bugs.webkit.org/show_bug.cgi?id=107552

        Reviewed by Pavel Feldman.

        Removed the aspect ratio detection logic and implemented explicit user action "Split Horizontally" available
        in Elements and Sources panels. When split horizontally the sidebar panes are organized into a tabbed pane.
        This user action is behind an experimental flag.

        No new tests.

        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu.prototype.show):
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane.prototype.createProxy):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.onContentReady):
        (WebInspector.DOMBreakpointsSidebarPane.Proxy):
        (WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype.expanded):
        (WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype.expand):
        (WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype.collapse):
        (WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype.onContentReady):
        (WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype.wasShown):
        (WebInspector.DOMBreakpointsSidebarPane.Proxy.prototype._reattachBody):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._populateContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        (WebInspector.ScriptsPanel.prototype._appendUISourceCodeItems):
        (WebInspector.ScriptsPanel.prototype._contextMenuEventFired):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SidebarPane.js:
        (WebInspector.SidebarPane):
        (WebInspector.SidebarPane.prototype.prepareContent):
        (WebInspector.SidebarPane.prototype.expanded):
        (WebInspector.SidebarPane.prototype.expand):
        (WebInspector.SidebarPane.prototype.collapse):
        (WebInspector.SidebarPane.prototype.onContentReady):
        (WebInspector.SidebarPane.prototype._setExpandCallback):
        (WebInspector.SidebarPaneStack.prototype.addPane):
        (WebInspector.SidebarPaneStack.prototype.activePaneId):
        (WebInspector.SidebarPaneStack.prototype.setActivePaneId):
        (WebInspector.SidebarPaneStack.prototype._setExpanded):
        (WebInspector.SidebarPaneStack.prototype._onPaneExpanded):
        (WebInspector.SidebarPaneStack.prototype._collapsePane):
        (WebInspector.SidebarTabbedPane):
        (WebInspector.SidebarTabbedPane.prototype.addPane):
        (WebInspector.SidebarTabbedPane.prototype.activePaneId):
        (WebInspector.SidebarTabbedPane.prototype.setActivePaneId):
        (WebInspector.SidebarPaneGroup):
        (WebInspector.SidebarPaneGroup.prototype.setStacked):
        (WebInspector.SidebarPaneGroup.prototype.addPane):
        (WebInspector.SidebarPaneGroup.prototype.attachToPanel):
        (WebInspector.SidebarPaneGroup.prototype.populateContextMenu.toggleSplitDirection):
        (WebInspector.SidebarPaneGroup.prototype.get _contextMenuEventFired):
        (WebInspector.SidebarPaneGroup.prototype._onSplitDirectionSettingChanged):
        * inspector/front-end/SidebarView.js:
        (WebInspector.SidebarView):
        (WebInspector.SidebarView.prototype._updateSidebarElementStyle):
        (WebInspector.SidebarView.prototype.setVertical):
        (WebInspector.SidebarView.prototype.onResize):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.ComputedStyleSidebarPane.prototype.wasShown):
        (WebInspector.ComputedStyleSidebarPane.prototype.prepareContent):
        * inspector/front-end/inspector.css:
        (.sidebar-pane .section .properties, .event-bar .event-properties):
        (.pane-title):
        (.sidebar-pane-toolbar):
        (.sidebar-pane-toolbar > *):
        (.sidebar-pane-toolbar > select):
        (.sidebar-pane-toolbar > select:hover):
        (.sidebar-pane-toolbar > select:active):
        (.sidebar-pane-toolbar > select.select-settings):
        (.sidebar-pane-toolbar > select.select-filter):
        (.sidebar-pane-toolbar > select > option, .sidebar-pane-toolbar > select > hr):
        (.sidebar-pane-toolbar > .pane-title-button):
        (.sidebar-pane-toolbar > .pane-title-button:hover):
        (.sidebar-pane-toolbar > .pane-title-button:active, .sidebar-pane-toolbar > .pane-title-button.toggled):
        (.sidebar-pane-toolbar > .pane-title-button.add):
        (.sidebar-pane-toolbar > .pane-title-button.element-state):
        (.sidebar-pane-toolbar > .pane-title-button.refresh):
        (.sidebar-pane):
        (.sidebar-pane > .body):
        (.sidebar-pane > .body .info):
        (.sidebar-pane > .body .placard + .info):
        (.sidebar-pane.visible > .body):
        (.sidebar-pane > .body .breakpoint-condition):
        (.sidebar-pane.visible:nth-last-of-type(1)):
        (.sidebar-pane-subtitle):
        (.sidebar-pane-subtitle input, .section .header input[type=checkbox]):
        (.sidebar-pane .breakpoint-hit):

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142111.
        http://trac.webkit.org/changeset/142111
        https://bugs.webkit.org/show_bug.cgi?id=108055

        win7 bot didn't display Arabic, see http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=platform%2Fchromium%2Ffast%2Fforms%2Fcalendar-picker%2Fcalendar-picker-appearance-required-ar.html

        * Resources/pagepopups/calendarPicker.css:
        (.today-clear-area .today-button):
        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker.prototype.fixWindowSize):

2013-02-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Map.size() returns negative values.
        https://bugs.webkit.org/show_bug.cgi?id=109174

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/utilities.js:

2013-02-07  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: break details are only rendered upon first debugger pause.
        https://bugs.webkit.org/show_bug.cgi?id=109193

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142118.
        http://trac.webkit.org/changeset/142118
        https://bugs.webkit.org/show_bug.cgi?id=109044

        Broke SVG! Oh noes!

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::direction):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::mode):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        * dom/Document.cpp:
        (WebCore::Document::setTitle):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::disentanglePorts):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        (WebCore::DeleteButtonController::createDeletionUI):
        (WebCore::DeleteButtonController::show):
        * editing/EditorCommand.cpp:
        (WebCore::unionDOMRanges):
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::removeNode):
        (WebCore::ReplacementFragment::insertNodeBefore):
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        (WebCore::ReplacementFragment::restoreAndRemoveTestRenderingNodesToFragment):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doUnapply):
        * editing/TextIterator.cpp:
        (WebCore::CharacterIterator::range):
        (WebCore::BackwardsCharacterIterator::range):
        (WebCore::TextIterator::rangeFromLocationAndLength):
        (WebCore::collapsedToBoundary):
        * editing/htmlediting.cpp:
        (WebCore::createTabSpanElement):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::fontAttributesForSelectionStart):
        * editing/markup.cpp:
        (WebCore::createMarkup):
        (WebCore::trimFragment):
        (WebCore::createFragmentFromMarkupWithContext):
        (WebCore::fillContainerFromString):
        (WebCore::createFragmentFromText):
        (WebCore::createFragmentFromNodes):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::indexForVisiblePosition):
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::updatePlaceholderText):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::addRule):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::dispatchDOMEvent):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::deleteFromDocument):
        * page/DragController.cpp:
        (WebCore::prepareClipboardForImageDrag):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::visiblePositionForIndex):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialBaselineShiftValue):
        (WebCore::SVGRenderStyle::initialKerning):
        (WebCore::SVGRenderStyle::initialStrokeDashOffset):
        (WebCore::SVGRenderStyle::initialStrokeWidth):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::sharedSVGLength):
        (WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::textLengthAnimated):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::constructQualifiedName):

2013-02-07  Kentaro Hara  <haraken@chromium.org>

        Remove #if USE(V8) from IDBRequest.h
        https://bugs.webkit.org/show_bug.cgi?id=109163

        Reviewed by Andreas Kling.

        The header included inside the #if USE(V8) macro is not used.
        We can simply remove it.

        No tests. No change in behavior.

        * Modules/indexeddb/IDBRequest.h:

2013-02-07  Stephen Chenney  <schenney@chromium.org>

        GraphicsContext::drawImageBuffer is inefficient
        https://bugs.webkit.org/show_bug.cgi?id=104367

        Reviewed by Dirk Schulze.

        This patch converts all of the drawImage and drawImageBuffer
        convenience methods (those that take parameters of various types) to
        invoke the implementing method (that takes FloatRect src and dest)
        directly, rather than through the next-most-convenient method as was
        done previously. This will knock some layers off the stack compared
        to the existing code, and may remove one or two constructor invocations.
        This may be slightly more efficient, and also makes debugging simpler.

        Also removes the unused drawImage method that takes and IntRect source
        area and IntRect destination. It is not invoked anywhere in a standard
        WebKit checkout.

        No new tests. No change in functionality, just refactoring.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage): Modify all the convenience versions to call
        the implementing version directly.
        (WebCore::GraphicsContext::drawImageBuffer): Modify all the convenience versions
        to call the implementing version directly.
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext): Remove IntRect, IntRect version of drawImage.

2013-02-07  Kent Tamura  <tkent@chromium.org>

        Conversion from localized numbers to HTML numbers should accept not only localized numbers but also HTML numbers
        https://bugs.webkit.org/show_bug.cgi?id=109160

        Reviewed by Kentaro Hara.

        For example, A French user needs to specify a number to a number input
        field. He might use a local decimal point, like 3,141592, or he might
        use the standard decimal point like 3.141592. We had better accept both
        of them.

        We accepted both last year, but we changed the behavior so that we
        accept only localized numbers because we had some cases where an input
        string can be recognized as both of a localized number and the standard
        number. e.g. 3.141 is 3141 in French locale and 3.141 in the
        standard. Now we introduce a simple rule that we don't accept group
        separator at all. So users won't confuse even if we accept both of
        decimal points.

        Test: fast/forms/number/number-l10n-input.html

        * platform/text/PlatformLocale.cpp:
        (WebCore::Locale::convertFromLocalizedNumber):
        If the specified string contains invalid characters including group
        separators, just return the specified string.

2013-02-07  Xiaobo Wang  <xbwang@torchmobile.com.cn>

        [BlackBerry] CHHW - Characters that are using 32 bits encoding get trunked to 16bits
        https://bugs.webkit.org/show_bug.cgi?id=109126
        PR 292540

        Reviewed by Yong Li.

        Change char code to 4 bytes.
        Need to convert UTF32 key char to UTF16 before constructing a WTF::String.

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::unmodifiedCharacter):
        (PlatformKeyboardEvent):
        * platform/blackberry/PlatformKeyboardEventBlackBerry.cpp:
        (WebCore::keyIdentifierForBlackBerryCharacter):
        (WebCore::windowsKeyCodeForBlackBerryCharacter):
        (WebCore::adjustCharacterFromOS):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2013-02-07  Mike West  <mkwst@chromium.org>

        Replace ExceptionCode assertions with ASSERT_NO_EXCEPTION macro.
        https://bugs.webkit.org/show_bug.cgi?id=109044

        Reviewed by Darin Adler.

        The pattern:

            ExceptionCode ec = 0;
            methodThatGeneratesException(ec);
            ASSERT(!ec);

        is more clearly and succinctly written as:

            methodThatGeneratesException(ASSERT_NO_EXCEPTION);

        This patch replaces the occurances of the former that never touch 'ec'
        again with the latter. It does the same for 'ASSERT(ec == 0);' (and, as
        a drive-by, replaces 'ASSERT(ec == 0)' with 'ASSERT(!ec)' in places
        where it does indeed matter that 'ec' get set properly.

        No change in behavior should result from this refactoring.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::direction):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::mode):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        * dom/Document.cpp:
        (WebCore::Document::setTitle):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::disentanglePorts):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        (WebCore::DeleteButtonController::createDeletionUI):
            Replaced inline ASSERT with ASSERT_NO_EXCEPTION.
        (WebCore::DeleteButtonController::show):
            Replaced 'ASSERT(ec == 0)' with 'ASSERT(!ec)' to match the style guide.
        * editing/EditorCommand.cpp:
        (WebCore::unionDOMRanges):
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::removeNode):
        (WebCore::ReplacementFragment::insertNodeBefore):
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        (WebCore::ReplacementFragment::restoreAndRemoveTestRenderingNodesToFragment):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doUnapply):
        * editing/TextIterator.cpp:
        (WebCore::CharacterIterator::range):
        (WebCore::BackwardsCharacterIterator::range):
        (WebCore::TextIterator::rangeFromLocationAndLength):
        (WebCore::collapsedToBoundary):
        * editing/htmlediting.cpp:
        (WebCore::createTabSpanElement):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::fontAttributesForSelectionStart):
        * editing/markup.cpp:
        (WebCore::createMarkup):
        (WebCore::trimFragment):
        (WebCore::createFragmentFromMarkupWithContext):
        (WebCore::fillContainerFromString):
        (WebCore::createFragmentFromText):
        (WebCore::createFragmentFromNodes):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
            Replaced inline ASSERT with ASSERT_NO_EXCEPTION.
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
            Replaced 'ASSERT(ec == 0)' with 'ASSERT(!ec)' to match the style guide.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::indexForVisiblePosition):
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::updatePlaceholderText):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::addRule):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::dispatchDOMEvent):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::deleteFromDocument):
        * page/DragController.cpp:
        (WebCore::prepareClipboardForImageDrag):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::visiblePositionForIndex):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialBaselineShiftValue):
        (WebCore::SVGRenderStyle::initialKerning):
        (WebCore::SVGRenderStyle::initialStrokeDashOffset):
        (WebCore::SVGRenderStyle::initialStrokeWidth):
        * svg/SVGAnimatedLength.cpp:
        (WebCore::sharedSVGLength):
        (WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::textLengthAnimated):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::constructQualifiedName):
            Replaced inline ASSERT with ASSERT_NO_EXCEPTION.

2013-02-07  Mary Wu  <mary.wu@torchmobile.com.cn>

        [BlackBerry] Export mimeType in NetworkJob
        https://bugs.webkit.org/show_bug.cgi?id=109002

        Reviewed by Yong Li.

        NetworkJob will analysize resource mimetype and set it to resourceResponse,
        we will pass it on to be used by other Streams like download stream.

        RIM bug# 284408, internally reviewed by Liam Quinn.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::mimeType):
        (WebCore):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):

2013-02-07  Peter Rybin  <prybin@chromium.org>

        Web Inspector: support JavaScript variable mutation in protocol and V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=107829

        A new command is added to protocol description and the call is passed through
        debugger agent through injected script and debugger script down to V8 mirror
        API. JSC bindings got a thorw exception stub.

        Only declarative JavaScript scopes are supported (local, closure, catch). Other
        scopes (global, with) are not supported by V8 and not supported by protocol, because
        manual approach (direct property assigment) is available for them in form of evaluate
        commands and is more desirable because of a complex nature of operation (it can throw
        exception in several cases such as exception in setter function).

        Reviewed by Pavel Feldman.

        Test: inspector-protocol/debugger-setVariableValue.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::setFunctionVariableValue):
        (WebCore):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::setVariableValue):
        (WebCore):
        * bindings/v8/DebuggerScript.js:
        (.):
        * bindings/v8/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::setVariableValue):
        (WebCore):
        * bindings/v8/JavaScriptCallFrame.h:
        (JavaScriptCallFrame):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setFunctionVariableValue):
        (WebCore):
        * bindings/v8/ScriptDebugServer.h:
        (ScriptDebugServer):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::setFunctionVariableValueCallback):
        (WebCore):
        * bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp:
        (WebCore::V8JavaScriptCallFrame::setVariableValueCallback):
        (WebCore):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::setVariableValue):
        (WebCore):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::setVariableValue):
        (WebCore):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/JavaScriptCallFrame.idl:

2013-02-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [CoordinatedGraphics] Use ScrollingCoordinator to track fixed layers
        https://bugs.webkit.org/show_bug.cgi?id=108990

        Reviewed by Noam Rosenthal.

        WebCore keeps ScrollingCoordinator up-to-date about whether layers are fixed or not, so we
        don't need to traverse the tree every frame to get this information.

        The function ScrollingCoordinator::setLayerIsFixedToContainerLayer() is called when
        RenderLayerBacking is updating its graphics layers.

        The new code also works in new situations where the previous was broken: if a layer changed
        from being fixed to not fixed (but still kept as a layer for other reasons), the layer will
        be correctly updated. Previous implementation only had logic to mark layers as fixed, but
        not the other way round. A manual test was added to illustrate the solved problem.

        Testing was done with the existing manual tests that make use of "position:fixed". Automatic
        tests are mostly not affected by this because usage of this information affects only the
        UseFixedLayout mode, not used by default in WebKitTestRunner. Work to improve this situation
        will be tracked in bug https://bugs.webkit.org/show_bug.cgi?id=109175.

        * CMakeLists.txt:
        * Target.pri:
        * WebCore.pri:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create): create specific version of ScrollingCoordinator.
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp: Added.
        (WebCore):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::ScrollingCoordinatorCoordinatedGraphics):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::setLayerIsFixedToContainerLayer):
        update layer information using existing hook in ScrollingCoordinator.
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h: Added.
        (WebCore):
        (ScrollingCoordinatorCoordinatedGraphics):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setFixedToViewport): now that setting viewport is not
        embedded in the synchronization work, we need to mark the layer so it is updated in the
        next frame.
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState): remove call to syncFixedLayers().
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient): remove now unused syncFixedLayers() from client.
        (CoordinatedGraphicsLayer):

2013-02-07  Keishi Hattori  <keishi@webkit.org>

        REGRESSION (r140778): Calendar Picker doesn't open when the element has the required attribute
        https://bugs.webkit.org/show_bug.cgi?id=109136

        Reviewed by Kent Tamura.

        Calendar picker was using the "Clear" button to calculate the window width.
        Since it doesn't exist when the input element has a required attribute,
        it was throwing an error. This patch fixes the width calculating logic.

        Tests: platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-required-ar.html
               platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-required.html

        * Resources/pagepopups/calendarPicker.css:
        (.today-clear-area):
        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker.prototype.fixWindowSize): Fixing the logic to calculate
        the width. We don't want to use clear button because it doesn't exist
        when a value is required.

2013-02-07  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix. libWebCore.la needs to be relinked when
        symbols.filter changes.

        * GNUmakefile.am: add symbols.filter as a dependency for the
        libWebCore.la library.

2013-02-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Closure compilation fixes
        https://bugs.webkit.org/show_bug.cgi?id=109131

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        * inspector/front-end/FileSystemMapping.js:
        (WebInspector.FileSystemMappingImpl.prototype.uriPrefixForPathPrefix):
        * inspector/front-end/IsolatedFileSystemModel.js:
        (WebInspector.IsolatedFileSystemModel.prototype._fileSystemRemoved):
        * inspector/front-end/SidebarPane.js:

2013-02-07  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r142077.
        http://trac.webkit.org/changeset/142077
        https://bugs.webkit.org/show_bug.cgi?id=108579

        fast/filesystem/workers/file-writer-empty-blob.html is broken

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::setWrapperInObject):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::isolated):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::worldForEnteredContextIfIsolated):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8GCController.cpp:
        (WebCore::WrapperVisitor::WrapperVisitor):
        (WebCore):
        (WebCore::gcTree):
        (WebCore::V8GCController::didCreateWrapperForNode):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (V8GCController):

2013-02-07  Tony Gentilcore  <tonyg@chromium.org>

        Call XSSAuditor.filterToken() from threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=107603

        Reviewed by Adam Barth.

        With this patch we now pass 180 of 182 tests in http/tests/security/xssAuditor.

        We do this by creating aan XSSAuditor on the main thread and passing ownership of them to the BackgroundHTMLParser upon its creation.

        Then the background thread calls filterToken() and stores the resulting XSSInfo (if any) on the CompactHTMLToken for the main thread to handle.

        This involved trimming the XSSAuditor to only depend on the TextEncoding instead of the whole TextResourceDecoder.

        No new tests because covered by existing tests.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::BackgroundHTMLParser::createPartial):
        * html/parser/BackgroundHTMLParser.h:
        (WebCore):
        (WebCore::BackgroundHTMLParser::create):
        (BackgroundHTMLParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::start):
        (WebCore::HTMLSourceTracker::end):
        * html/parser/HTMLSourceTracker.h: Change the HTMLInputStream args to SegmentedString because the background thread only has a BackgroundHTMLInputStream.
        (HTMLSourceTracker):
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::pumpTokenizer):
        * html/parser/XSSAuditor.cpp:
        (WebCore::fullyDecodeString):
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::init): Copies necessary to make isSafeToSendToAnotherThread() happy.
        (WebCore::XSSAuditor::decodedSnippetForName):
        (WebCore::XSSAuditor::decodedSnippetForAttribute):
        (WebCore::XSSAuditor::decodedSnippetForJavaScript):
        (WebCore::XSSAuditor::isSafeToSendToAnotherThread): Check that all String and KURL members are safe to send to another thread.
        (WebCore):
        * html/parser/XSSAuditor.h:
        (WebCore):
        (WebCore::FilterTokenRequest::FilterTokenRequest):
        (FilterTokenRequest):
        (XSSAuditor):

2013-02-07  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK][AC] Implement opacity animation with clutter ac backend
        https://bugs.webkit.org/show_bug.cgi?id=108961

        Reviewed by Gustavo Noronha Silva.

        Implement opacity animation with clutter ac backend.
        Almost all implementations of GraphicsLayerClutter are based on mac port's one.
        PlatformClutterAnimation interfaces are also similar with mac port, but they are implemented
        with native clutter APIs.
        This patch includes only opacity animation related changes, so many APIs might be empty.
        Remained animations like rotation and translate will be dealt in another patches.

        Covered by existing animation tests.

        * GNUmakefile.list.am:
        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorGetAnimationForKey):
        * platform/graphics/clutter/GraphicsLayerActor.h:
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore):
        (WebCore::propertyIdToString):
        (WebCore::animationIdentifier):
        (WebCore::animationHasStepsTimingFunction):
        (WebCore::GraphicsLayerClutter::setOpacity):
        (WebCore::GraphicsLayerClutter::updateAnimations):
        (WebCore::GraphicsLayerClutter::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerClutter::setupAnimation):
        (WebCore::GraphicsLayerClutter::timingFunctionForAnimationValue):
        (WebCore::GraphicsLayerClutter::createBasicAnimation):
        (WebCore::GraphicsLayerClutter::createKeyframeAnimation):
        (WebCore::GraphicsLayerClutter::setTransformAnimationKeyframes):
        (WebCore::GraphicsLayerClutter::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerClutter::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerClutter::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerClutter::addAnimation):
        (WebCore::GraphicsLayerClutter::removeClutterAnimationFromLayer):
        (WebCore::GraphicsLayerClutter::pauseClutterAnimationOnLayer):
        (WebCore::GraphicsLayerClutter::setAnimationOnLayer):
        (WebCore::GraphicsLayerClutter::setAnimationEndpoints):
        (WebCore::GraphicsLayerClutter::setAnimationKeyframes):
        (WebCore::GraphicsLayerClutter::animatedLayer):
        * platform/graphics/clutter/GraphicsLayerClutter.h:
        (GraphicsLayerClutter):
        (WebCore::GraphicsLayerClutter::LayerPropertyAnimation::LayerPropertyAnimation):
        (LayerPropertyAnimation):
        (WebCore::GraphicsLayerClutter::AnimationProcessingAction::AnimationProcessingAction):
        (AnimationProcessingAction):
        * platform/graphics/clutter/PlatformClutterAnimation.cpp: Added.
        (WebCore):
        (WebCore::timelineStartedCallback):
        (WebCore::toClutterAnimationMode):
        (WebCore::PlatformClutterAnimation::stringToAnimatedPropertyType):
        (WebCore::PlatformClutterAnimation::create):
        (WebCore::PlatformClutterAnimation::PlatformClutterAnimation):
        (WebCore::PlatformClutterAnimation::~PlatformClutterAnimation):
        (WebCore::PlatformClutterAnimation::supportsValueFunction):
        (WebCore::PlatformClutterAnimation::beginTime):
        (WebCore::PlatformClutterAnimation::setBeginTime):
        (WebCore::PlatformClutterAnimation::duration):
        (WebCore::PlatformClutterAnimation::setDuration):
        (WebCore::PlatformClutterAnimation::speed):
        (WebCore::PlatformClutterAnimation::setSpeed):
        (WebCore::PlatformClutterAnimation::timeOffset):
        (WebCore::PlatformClutterAnimation::setTimeOffset):
        (WebCore::PlatformClutterAnimation::repeatCount):
        (WebCore::PlatformClutterAnimation::setRepeatCount):
        (WebCore::PlatformClutterAnimation::autoreverses):
        (WebCore::PlatformClutterAnimation::setAutoreverses):
        (WebCore::PlatformClutterAnimation::fillMode):
        (WebCore::PlatformClutterAnimation::setFillMode):
        (WebCore::PlatformClutterAnimation::setTimingFunction):
        (WebCore::PlatformClutterAnimation::copyTimingFunctionFrom):
        (WebCore::PlatformClutterAnimation::isRemovedOnCompletion):
        (WebCore::PlatformClutterAnimation::setRemovedOnCompletion):
        (WebCore::PlatformClutterAnimation::isAdditive):
        (WebCore::PlatformClutterAnimation::setAdditive):
        (WebCore::PlatformClutterAnimation::valueFunction):
        (WebCore::PlatformClutterAnimation::setValueFunction):
        (WebCore::PlatformClutterAnimation::setFromValue):
        (WebCore::PlatformClutterAnimation::copyFromValueFrom):
        (WebCore::PlatformClutterAnimation::setToValue):
        (WebCore::PlatformClutterAnimation::copyToValueFrom):
        (WebCore::PlatformClutterAnimation::setValues):
        (WebCore::PlatformClutterAnimation::copyValuesFrom):
        (WebCore::PlatformClutterAnimation::setKeyTimes):
        (WebCore::PlatformClutterAnimation::copyKeyTimesFrom):
        (WebCore::PlatformClutterAnimation::setTimingFunctions):
        (WebCore::PlatformClutterAnimation::copyTimingFunctionsFrom):
        (WebCore::PlatformClutterAnimation::animationDidStart):
        (WebCore::PlatformClutterAnimation::timeline):
        (WebCore::PlatformClutterAnimation::addOpacityTransition):
        (WebCore::PlatformClutterAnimation::addAnimationForKey):
        (WebCore::PlatformClutterAnimation::removeAnimationForKey):
        * platform/graphics/clutter/PlatformClutterAnimation.h: Added.
        (WebCore):
        (PlatformClutterAnimation):
        (WebCore::PlatformClutterAnimation::animationType):

2013-02-07  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: highlight matching braces in DTE.
        https://bugs.webkit.org/show_bug.cgi?id=108697

        Reviewed by Pavel Feldman.

        Implement BraceMatcher class which for given position in textModel
        will respond with enclosing brace pair for that position.
        Make use of this class in DefaultTextEditor by handling
        selectionChange event. Make use of this class in "_closingBlockOffset"
        method of TextEditorMainPanel as this method implements similar
        functionality.

        New test: inspector/editor/brace-matcher.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._closingBlockOffset):
        (WebInspector.TextEditorMainPanel.prototype._handleSelectionChange):
        (WebInspector.TextEditorMainPanel.BraceHighlightController):
        (WebInspector.TextEditorMainPanel.BraceHighlightController.prototype.handleSelectionChange):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.endsWithBracketRegex):
        (WebInspector.TextEditorModel.endsWithBracketRegex.):
        * inspector/front-end/textEditor.css:
        (.text-editor-brace-match):

2013-02-05  Eunmi Lee  <eunmi15.lee@samsung.com> and Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][WK2] Refactoring initialization and shutdown codes of EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Reviewed by Kenneth Rohde Christiansen, signed-off by Benjamin Poulain.

        Remove codes to initialize and shutdown the EFL libraries from
        RunLoopEfl.cpp. Initialization and shutdown will be done in the
        ewk_main.cpp for ui process and WebProcessMainEfl.cpp for web
        process.

        No new tests. This patch doesn't change behavior.

        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):

2013-02-07  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed fix for inspector tests in debug.
        m_frontend should be initialized in constructor.

        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):

2013-02-07  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: reduce number of native memory instrumentation categories
        https://bugs.webkit.org/show_bug.cgi?id=109146

        Reviewed by Pavel Feldman.

        Merged some of memory instrumentation categories.

        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.MemoryBlockViewProperties._initialize):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore):

2013-02-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove V8GCController::m_edenNodes and make minor DOM GC more precise
        https://bugs.webkit.org/show_bug.cgi?id=108579

        Reviewed by Adam Barth.

        Currently V8GCController::m_edenNodes stores a list of nodes whose
        wrappers have been created since the latest GC. The reason why we
        needed m_edenNodes is that there was no way to know a list of wrappers
        in the new space of V8. By using m_edenNodes, we had been approximating
        'wrappers in the new space' by 'wrappers that have been created since
        the latest GC'.

        Now V8 provides VisitHandlesForPartialDependence(), with which WebKit
        can know a list of wrappers in the new space. By using the API, we can
        remove V8GCController::m_edenNodes. The benefit is that (1) we no longer
        need to keep m_edenNodes and that (2) it enables more precise minor
        DOM GC (Remember that m_edenNodes was just an approximation).

        Performance benchmark: https://bugs.webkit.org/attachment.cgi?id=185940
        The benchmark runs 300 iterations, each of which creates 100000 elements.
        The benchmark measures average, min, median, max and stdev of execution times
        of the 300 iterations. This will tell us the worst-case overhead of this change.

        Before:
          mean=59.91ms, min=39ms, median=42ms, max=258ms, stdev=47.48ms

        After:
          mean=58.75ms, min=35ms, median=41ms, max=250ms, stdev=47.32ms

        As shown above, I couldn't observe any performance regression.

        No tests. No change in behavior.

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::setWrapperInObject):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::getWorldWithoutContextCheck):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::worldForEnteredContextIfIsolated):
        (WebCore::worldForEnteredContextWithoutContextCheck):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8GCController.cpp:
        (WebCore::gcTree):
        (WebCore):
        (MinorGCWrapperVisitor):
        (WebCore::MinorGCWrapperVisitor::MinorGCWrapperVisitor):
        (WebCore::MinorGCWrapperVisitor::notifyFinished):
        (WebCore::MajorGCWrapperVisitor::MajorGCWrapperVisitor):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (V8GCController):

2013-02-06  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r141195): INPUT_MULTIPLE_FIELDS_UI: Space in a placeholder string is removed
        https://bugs.webkit.org/show_bug.cgi?id=109132

        Reviewed by Hajime Morita.

        <input  type=date> should be shown in Japanese UI as:
        [ 年 /月/日]
        But it is shown wrongly since r141195:
        [年 /月/日]

        We should use white-space:pre.

        No new tests. This change is not testable in WebKit because this
        requires a Japanese-localized UI string of Chromium.

        * css/html.css:
        (input::-webkit-datetime-edit-fields-wrapper):
        Use white-space:pre instead of nowrap.

2013-02-06  Kentaro Hara  <haraken@chromium.org>

        Remove DOMWindow::parseModalDialogFeatures()
        https://bugs.webkit.org/show_bug.cgi?id=109139

        Reviewed by Kent Tamura.

        No one uses the method. FIXME is saying:

          // FIXME: We can remove this function once V8 showModalDialog is changed to use DOMWindow.

        Given that V8's showModalDialog() is now using DOMWindow, we can remove it.

        No tests. No change in behavior.

        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        (DOMWindow):

2013-02-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: reduce native heap snapshot runtime memory footprint
        https://bugs.webkit.org/show_bug.cgi?id=108824

        Reviewed by Yury Semikhatsky.

        New event was added into Memory domain addNativeSnapshotChunk.
        The content of HeapGraphSerializer is completely rewritten according to new API.
        Now it collects strings, nodes, edges and id2id map and pushes when the collected items count exceed a limit.
        On the frontend side I added new method for the new event and fixed the postprocessing step.
        MemoryInstrumentation was slightly changed. Now it reports base to real address map only after reporting the node with real address.

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::pushUpdateIfNeed):
        (WebCore):
        (WebCore::HeapGraphSerializer::pushUpdate):
        (WebCore::HeapGraphSerializer::reportNode):
        (WebCore::HeapGraphSerializer::reportNodeImpl):
        (WebCore::HeapGraphSerializer::reportEdge):
        (WebCore::HeapGraphSerializer::reportEdgeImpl):
        (WebCore::HeapGraphSerializer::reportLeaf):
        (WebCore::HeapGraphSerializer::reportBaseAddress):
        (WebCore::HeapGraphSerializer::finish):
        (WebCore::HeapGraphSerializer::reportMemoryUsage):
        (WebCore::HeapGraphSerializer::addString):
        (WebCore::HeapGraphSerializer::toNodeId):
        (WebCore::HeapGraphSerializer::addRootNode):
        * inspector/HeapGraphSerializer.h:
        (HeapGraphSerializer):
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::processMemoryDistribution):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionMap):
        (WebCore):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionImpl):
        (WebCore::InspectorMemoryAgent::setFrontend):
        (WebCore::InspectorMemoryAgent::clearFrontend):
        * inspector/InspectorMemoryAgent.h:
        (InspectorMemoryAgent):
        * inspector/front-end/NativeHeapSnapshot.js:
        (WebInspector.NativeHeapSnapshot):
        (WebInspector.NativeHeapSnapshotNode.prototype.classIndex):
        (WebInspector.NativeHeapSnapshotNode.prototype.id):
        (WebInspector.NativeHeapSnapshotNode.prototype.name):
        (WebInspector.NativeHeapSnapshotNode.prototype.serialize):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotProfileType.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeSnapshotProfileType.prototype.buttonClicked):
        (WebInspector.NativeSnapshotProfileHeader):
        (WebInspector.NativeSnapshotProfileHeader.prototype.startSnapshotTransfer):
        (WebInspector.NativeSnapshotProfileHeader.prototype.addNativeSnapshotChunk):
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked):
        (WebInspector.NativeMemoryBarChart.prototype._updateStats):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.MemoryDispatcher):
        (WebInspector.MemoryDispatcher.prototype.addNativeSnapshotChunk):

2013-02-03  Kentaro Hara  <haraken@chromium.org>

        WebKit's focus events are UIEvents (instead of FocusEvent) and thus don't expose .relatedTarget
        https://bugs.webkit.org/show_bug.cgi?id=76216

        Reviewed by Eric Seidel.

        Spec: http://www.w3.org/TR/DOM-Level-3-Events/#events-FocusEvent

        This patch creates a new FocusEvent class with a relatedTarget attribute.
        Now when focusin or focusout events are dispatched, a FocusEvent is created with
        the relatedTarget attribute set accordingly.

        Test: fast/events/related-target-focusevent.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Event.cpp:
        (WebCore::Event::isFocusEvent):
        (WebCore):
        * dom/Event.h:
        (Event):
        * dom/EventContext.cpp:
        (WebCore::EventContext::handleLocalEvents):
        * dom/EventNames.in:
        * dom/FocusEvent.h: Added.
        (WebCore):
        (FocusEvent):
        (WebCore::FocusEvent::create):
        (WebCore::FocusEvent::relatedTarget):
        (WebCore::FocusEvent::setRelatedTarget):
        (WebCore::toFocusEvent):
        * dom/FocusEvent.idl: Added.
        * dom/Node.cpp:
        (WebCore::Node::dispatchFocusInEvent):
        (WebCore::Node::dispatchFocusOutEvent):

2013-02-06  Kent Tamura  <tkent@chromium.org>

        Fix style of RenderTheme.cpp and RenderThemeChromiumWin.h
        https://bugs.webkit.org/show_bug.cgi?id=109137

        Reviewed by Kentaro Hara.

        No new tests. Just style fix.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::adjustButtonStyle):
        (WebCore::RenderTheme::systemColor):
        * rendering/RenderThemeChromiumWin.h:
        (WebCore::ThemeData::ThemeData):
        (ThemeData):
        (RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::~RenderThemeChromiumWin):

2013-02-06  Kent Tamura  <tkent@chromium.org>

        Fix style of Chrome.h and Page.h
        https://bugs.webkit.org/show_bug.cgi?id=109138

        Reviewed by Ryosuke Niwa.

        No new tests. Just style fixes.

        * page/Chrome.h:
        (WebCore):
        (Chrome):
        (WebCore::Chrome::client):
        * page/Page.h:
        (JSC):
        (WebCore):
        (WebCore::ArenaSize::ArenaSize):
        (ArenaSize):
        (Page):
        (PageClients):
        (WebCore::Page::theme):
        (WebCore::Page::canStartMedia):
        (WebCore::Page::editorClient):
        (WebCore::Page::plugInClient):
        (WebCore::Page::mainFrame):
        (WebCore::Page::groupPtr):
        (WebCore::Page::incrementSubframeCount):
        (WebCore::Page::decrementSubframeCount):
        (WebCore::Page::subframeCount):
        (WebCore::Page::chrome):
        (WebCore::Page::dragCaretController):
        (WebCore::Page::dragController):
        (WebCore::Page::focusController):
        (WebCore::Page::contextMenuController):
        (WebCore::Page::inspectorController):
        (WebCore::Page::pointerLockController):
        (WebCore::Page::validationMessageClient):
        (WebCore::Page::settings):
        (WebCore::Page::progress):
        (WebCore::Page::backForward):
        (WebCore::Page::featureObserver):
        (WebCore::Page::viewMode):
        (WebCore::Page::setTabKeyCyclesThroughElements):
        (WebCore::Page::tabKeyCyclesThroughElements):
        (WebCore::Page::scheduledRunLoopPairs):
        (WebCore::Page::defersLoading):
        (WebCore::Page::mediaVolume):
        (WebCore::Page::pageScaleFactor):
        (WebCore::Page::deviceScaleFactor):
        (WebCore::Page::shouldSuppressScrollbarAnimations):
        (WebCore::Page::pagination):
        (WebCore::Page::isOnscreen):
        (WebCore::Page::scriptedAnimationsSuspended):
        (WebCore::Page::debugger):
        (WebCore::Page::hasCustomHTMLTokenizerTimeDelay):
        (WebCore::Page::customHTMLTokenizerTimeDelay):
        (WebCore::Page::hasCustomHTMLTokenizerChunkSize):
        (WebCore::Page::customHTMLTokenizerChunkSize):
        (WebCore::Page::areMemoryCacheClientCallsEnabled):
        (WebCore::Page::setEditable):
        (WebCore::Page::isEditable):
        (WebCore::Page::displayID):
        (WebCore::Page::layoutMilestones):
        (WebCore::Page::setIsPainting):
        (WebCore::Page::isPainting):
        (WebCore::Page::alternativeTextClient):
        (WebCore::Page::checkSubframeCountConsistency):
        (WebCore::Page::group):

2013-02-06  Mike West  <mkwst@chromium.org>

        Entity-header extension headers honored on 304 responses.
        https://bugs.webkit.org/show_bug.cgi?id=72414

        Reviewed by Alexey Proskuryakov.

        This patch ports Chromium's network stack logic governing header
        updates after resource revalidation. Generally, headers sent with 304
        responses ought to update the original cached resource's headers.
        Certain headers should never be sent with 304 responses, and we should
        ignore them if a misconfigured server sends them anyway.

        Currently, WebCore ignores all headers prefixed with 'content-'. This
        patch adds 'x-content-' and 'x-webkit-' to the list, as well as specific
        headers like 'upgrade', 'trailer', and others that the Chromium network
        stack currently ignores.

        The tests verify that those headers with visible effect are correctly
        handled: 'x-frame-options', 'content-security-policy', and
        'x-xss-protection'.

        Tests: http/tests/security/XFrameOptions/x-frame-options-cached.html
               http/tests/security/contentSecurityPolicy/cached-frame-csp.html
               http/tests/security/xssAuditor/cached-frame.html

        * loader/cache/CachedResource.cpp:
        (WebCore):
        (WebCore::CachedResource::updateResponseAfterRevalidation):
            This patch adds two arrays containing the specific headers to
            ignore and the prefixes to ignore. These lists are processed in
            shouldUpdateHeaderAfterRevalidation.
            CachedResource::updateResponseAfterRevalidation relies on this new
            method when processing revalidated resources.

        * loader/cache/CachedResource.cpp:
        (WebCore):
        (WebCore::shouldUpdateHeaderAfterRevalidation):
        (WebCore::CachedResource::updateResponseAfterRevalidation):

2013-02-06  Tom Sepez  <tsepez@chromium.org>

        document.referrer leakage with XSS Auditor page block
        https://bugs.webkit.org/show_bug.cgi?id=109089

        Reviewed by Adam Barth.

        Pass "about:blank" as referrer instead of "" so that the actual page
        is not leaked when empty referrers are replaced later on in the
        request.
        
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):

2013-02-06  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in GetTemplate() and GetRawTemplate()
        https://bugs.webkit.org/show_bug.cgi?id=109026

        Reviewed by Adam Barth.

        Now it's time to kill an optional Isolate parameter.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::GetRawTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        (WebCore::V8Float64Array::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::GetRawTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        (WebCore::V8TestActiveDOMObject::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetRawTemplate):
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        (WebCore::V8TestCustomNamedGetter::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetRawTemplate):
        (WebCore::V8TestEventConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        (WebCore::V8TestEventConstructor::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::GetRawTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        (WebCore::V8TestEventTarget::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetRawTemplate):
        (WebCore::V8TestException::GetTemplate):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        (WebCore::V8TestException::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::GetRawTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        (WebCore::V8TestInterface::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetRawTemplate):
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        (WebCore::V8TestMediaQueryListListener::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::GetRawTemplate):
        (WebCore::V8TestNamedConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        (WebCore::V8TestNamedConstructor::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetRawTemplate):
        (WebCore::V8TestNode::GetTemplate):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        (WebCore::V8TestNode::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::GetRawTemplate):
        (WebCore::V8TestObj::GetTemplate):
        (WebCore::V8TestObj::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::GetRawTemplate):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        (WebCore::V8TestOverloadedConstructors::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetRawTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        (WebCore::V8TestSerializedScriptValueInterface::installPerContextPrototypeProperties):
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextData::constructorForTypeSlowCase):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WebCore::WrapperTypeInfo::installPerContextPrototypeProperties):

2013-02-06  Terry Anderson  <tdanderson@chromium.org>

        Add support for gesture scroll events that do not propagate to enclosing scrollables
        https://bugs.webkit.org/show_bug.cgi?id=108849

        Reviewed by Antonio Gomes.

        Tests: fast/events/touch/gesture/touch-gesture-scroll-div-not-propagated.html
               fast/events/touch/gesture/touch-gesture-scroll-iframe-not-propagated.html
               fast/events/touch/gesture/touch-gesture-scroll-page-not-propagated.html

        Rename RenderLayer::scrollByRecursively() to RenderLayer::scrollBy() and add a parameter
        of type RenderLayer::ScrollPropagation to specify whether or not the scroll should
        propagate to its parent by recursing. Implement RenderLayer::scrollByRecursively() as a
        call to RenderLayer::scrollBy() with argument RenderLayer::ShouldPropagateScroll so
        that all existing calls to the function still produce the correct behavior.

        In EventHandler::handleGestureScrollUpdate(), call RenderLayer::scrollBy() with
        argument RenderLayer::ShouldPropagateScroll if |gestureEvent| is a GestureScrollUpdate
        or instead with argument RenderLayer::DontPropagateScroll if |gestureEvent| is a
        GestureScrollUpdateWithoutPropagation.

        * dom/GestureEvent.cpp:
        (WebCore::GestureEvent::create):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureScrollUpdate):
        * platform/PlatformEvent.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::gestureEvent):
        * platform/chromium/PopupContainer.cpp:
        (WebCore::PopupContainer::handleGestureEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):
        (WebCore):
        (WebCore::RenderLayer::scrollBy):
        * rendering/RenderLayer.h:

2013-02-06  Ojan Vafai  <ojan@chromium.org>

        [Chromium] table-section-overflow-clip-crash.html hits an assert
        https://bugs.webkit.org/show_bug.cgi?id=108594

        Reviewed by Levi Weintraub.

        When a counter calls setNeedsLayout, it also marks it's containing blocks
        as needing layout, so we need to clear the setNeedsLayoutIsForbidden bit on the
        containing blocks as well as the counter itself.

        Also, use RAII objects for all the places where we clear this bit and make
        the setter/getter for it private to RenderObject.

        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::computePreferredLogicalWidths):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::SetLayoutNeededForbiddenScope::SetLayoutNeededForbiddenScope):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderObject.h:
        (SetLayoutNeededForbiddenScope):
        (RenderObject):
        (WebCore::RenderObject::isSetNeedsLayoutForbidden):
        (WebCore::RenderObject::setNeedsLayoutIsForbidden):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::computePreferredLogicalWidths):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::computePreferredLogicalWidths):

2013-02-06  Ojan Vafai  <ojan@chromium.org>

        display:none file upload button crashes
        https://bugs.webkit.org/show_bug.cgi?id=109102

        Reviewed by Levi Weintraub.

        Test: fast/forms/file/display-none-upload-button.html

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::nodeWidth):
        (WebCore::RenderFileUploadControl::paintObject):
        Having an upload button doesn't mean we have a rendered upload button.
        Null check the renderer before trying to access it.

2013-02-06  Dirk Schulze  <dschulze@adobe.com>

        Context's currentPath should check for passed type
        https://bugs.webkit.org/show_bug.cgi?id=109097

        Reviewed by Dean Jackson.

        Add check for passed pointer and return earlier.

        Test: fast/canvas/canvas-currentPath-crash.html

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

2013-02-06  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] Non </template> end tags should be ignored in "template contents" insertion mode.
        https://bugs.webkit.org/show_bug.cgi?id=109090

        Reviewed by Adam Barth.

        https://dvcs.w3.org/hg/webcomponents/raw-file/38536d37fb82/spec/templates/index.html#template-contents-insertion-mode.

        Test added to html5lib suite.

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

2013-02-06  Alexandre Elias  <aelias@chromium.org>

        Make ScrollView::paint() clip by visibleContentRect
        https://bugs.webkit.org/show_bug.cgi?id=108888

        Reviewed by Levi Weintraub.

        When applyPageScaleFactorInCompositor or fixedVisibleContentRect
        are used, frameRect() and visibleContentRect(true).size() are
        no longer synonyms, and the latter is the one that should be
        used for clipping paints.

        New WebFrameTest: pageScaleFactorScalesPaintClip.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):

2013-02-06  Dima Gorbik  <dgorbik@apple.com>

        Store the language internally instead of using lang attribute for WebVTT nodes
        https://bugs.webkit.org/show_bug.cgi?id=108858

        Reviewed by Eric Carlson.

        Only language webvtt elements should have a lang attribute so we have to store
        the language internally in the element. Refactored the code to make 
        computeInheritedLanguage virtual.

        Existing tests were modified to cover this case.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * html/track/WebVTTElement.cpp:
        (WebCore::WebVTTElement::WebVTTElement):
        (WebCore::WebVTTElement::cloneElementWithoutAttributesAndChildren):
        (WebCore::WebVTTElement::createEquivalentHTMLElement): clone the internal language property.
        * html/track/WebVTTElement.h:
        (WebCore::WebVTTElement::language):
        (WebCore::WebVTTElement::setLanguage):
        * html/track/WebVTTParser.cpp: only set the lang attribute for language objects.
        (WebCore::WebVTTParser::constructTreeFromToken):

2013-02-06  Levi Weintraub  <leviw@chromium.org>

        Negative text indents can break RenderBlock's inline maximum preferred width calculation
        https://bugs.webkit.org/show_bug.cgi?id=108973

        Reviewed by Emil A Eklund.

        Change two quirks about to how we calculate a block's inline preferred width with
        text-indent.

        First, re-use text-indent that's first applied to floats on text that follows it.
        This matches Layout, as otherwise we can prematurely wrap text when there's a negative
        margin on a block starting with a float. This also matches FireFox.

        Second, correct how the max preferred width is calculated in the presence of a negative
        text-indent. If the text-indent is more negative than the first text line break, we
        update the value to be the remainder. Previously, we added this remaining negative value
        to subsequent minimum and maximum preferred width calculations (until the remainder was
        gone). This is wrong for the max preferred width, as we're adding the negative value more
        than once, and leads to a max preferred width that's smaller than our line.

        Test: fast/css/negative-text-indent-in-inline-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):

2013-02-06  Mark Lam  <mark.lam@apple.com>

        Fix broken release builds, greening the bots.
        https://bugs.webkit.org/show_bug.cgi?id=107475.

        Not reviewed.

        No new tests.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::logOpenDatabaseError):

2013-02-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142025.
        http://trac.webkit.org/changeset/142025
        https://bugs.webkit.org/show_bug.cgi?id=109091

        broke the build (Requested by tdanderson on #webkit).

        * dom/GestureEvent.cpp:
        (WebCore::GestureEvent::create):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureScrollUpdate):
        * platform/PlatformEvent.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::gestureEvent):
        * platform/chromium/PopupContainer.cpp:
        (WebCore::PopupContainer::handleGestureEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):
        * rendering/RenderLayer.h:

2013-02-06  Mark Lam  <mark.lam@apple.com>

        Split openDatabase() between front and back end work.
        https://bugs.webkit.org/show_bug.cgi?id=107475.

        Reviewed by Anders Carlsson.

        The main work of splitting DatabaseManager::openDatabase() is in
        refactoring how DatabaseTracker::canEstablishDatabase() works. It used
        to check for adequate space quota, and if the check fails, it would call
        back into the client from inside canEstablishDatabase(). The call back
        allows the client to update the quota (if appropriate). Thereafter,
        canEstablishDatabase() will retry its quota check.

        In a webkit2 world, we'll want to minimize the traffic between the
        client (script side) and the server (sqlite db side), and ideally, we
        don't want the server to call back to the client. Note: the
        DatabaseTracker belongs on the server side.

        To achieve this, we split canEstablishDatabase() into 2 parts: the
        checks before the call back to the client, and the checks after.
        The first part will retain the name canEstablishDatabase(), and the
        second part will be named retryCanEstablishDatabase().
        We also added a DatabaseServer::openDatabase() function that can be
        called with a retry flag.

        The client side DatabaseManager::openDatabase() will call
        DatabaseServer::openDatabase(), which then calls canEstablishDatabase()
        to do its quota check. If there is enough quota,
        DatabaseServer::openDatabase() will proceed to open the backend database
        without return to the client first. The opened database will be returned
        to the client.

        If DatabaseServer::openDatabase() finds inadequate quota the first time,
        it will return with a DatabaseSizeExceededQuota error. The DatabaseManager
        (on the client side) will check for this error and call back to its client
        for an opportunity to increase the quota. Thereafter, the DatabaseManager
        will call DatabaseServer::openDatabase() again. This time,
        DatabaseServer::openDatabase() will call retryCanEstablishDatabase() to
        check the quota, and then open the backend database if there is enough
        quota.

        No new tests.

        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::create):
        * Modules/webdatabase/Database.h:
        (Database):
        * Modules/webdatabase/DatabaseBackend.cpp:
        (WebCore::DatabaseBackend::performOpenAndVerify):
        * Modules/webdatabase/DatabaseBackend.h:
        (DatabaseBackend):
        * Modules/webdatabase/DatabaseBackendAsync.cpp:
        (WebCore::DatabaseBackendAsync::openAndVerifyVersion):
        (WebCore::DatabaseBackendAsync::performOpenAndVerify):
        * Modules/webdatabase/DatabaseBackendAsync.h:
        (DatabaseBackendAsync):
        * Modules/webdatabase/DatabaseBackendSync.cpp:
        (WebCore::DatabaseBackendSync::openAndVerifyVersion):
        * Modules/webdatabase/DatabaseBackendSync.h:
        (DatabaseBackendSync):
        * Modules/webdatabase/DatabaseError.h:
        (WebCore::ENUM_CLASS):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::exceptionCodeForDatabaseError):
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseManager::openDatabaseSync):
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::openDatabase):
        (WebCore::DatabaseServer::createDatabase):
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::DatabaseSync::create):
        * Modules/webdatabase/DatabaseSync.h:
        (DatabaseSync):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        * Modules/webdatabase/DatabaseTracker.h:
        (DatabaseTracker):
        * Modules/webdatabase/WorkerContextWebDatabase.cpp:
        (WebCore::WorkerContextWebDatabase::openDatabase):
        (WebCore::WorkerContextWebDatabase::openDatabaseSync):
        * Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):

2013-02-06  Tony Gentilcore  <tonyg@chromium.org>

        Fix CompactHTMLToken's copy ctor to copy all fields
        https://bugs.webkit.org/show_bug.cgi?id=109076

        Reviewed by Adam Barth.

        This was introduced by me in r142004. Without this patch we fail all tests when using the background parser.

        Also don't use getters in copy ctor.

        No new tests because no new functionality.

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

2013-02-06  Brian Salomon  <bsalomon@google.com>

        [Chromium/Skia] Remove use of deprecated Skia names
        https://bugs.webkit.org/show_bug.cgi?id=109085

        Reviewed by Stephen White.

        Tested by every existing canvas2d test.

        * platform/chromium/support/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::grContext):

2013-02-06  Terry Anderson  <tdanderson@chromium.org>

        Add support for gesture scroll events that do not propagate to enclosing scrollables
        https://bugs.webkit.org/show_bug.cgi?id=108849

        Reviewed by Antonio Gomes.

        Tests: fast/events/touch/gesture/touch-gesture-scroll-div-not-propagated.html
               fast/events/touch/gesture/touch-gesture-scroll-iframe-not-propagated.html
               fast/events/touch/gesture/touch-gesture-scroll-page-not-propagated.html

        Rename RenderLayer::scrollByRecursively() to RenderLayer::scrollBy() and add a parameter
        of type RenderLayer::ScrollPropagation to specify whether or not the scroll should
        propagate to its parent by recursing. Implement RenderLayer::scrollByRecursively() as a
        call to RenderLayer::scrollBy() with argument RenderLayer::ShouldPropagateScroll so
        that all existing calls to the function still produce the correct behavior.

        In EventHandler::handleGestureScrollUpdate(), call RenderLayer::scrollBy() with
        argument RenderLayer::ShouldPropagateScroll if |gestureEvent| is a GestureScrollUpdate
        or instead with argument RenderLayer::DontPropagateScroll if |gestureEvent| is a
        GestureScrollUpdateWithoutPropagation.

        * dom/GestureEvent.cpp:
        (WebCore::GestureEvent::create):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureScrollUpdate):
        * platform/PlatformEvent.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::gestureEvent):
        * platform/chromium/PopupContainer.cpp:
        (WebCore::PopupContainer::handleGestureEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):
        (WebCore):
        (WebCore::RenderLayer::scrollBy):
        * rendering/RenderLayer.h:

2013-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r141136): Apple's internal PLT test suite doesn't finish
        https://bugs.webkit.org/show_bug.cgi?id=108380

        Reviewed by Alexey Proskuryakov.

        Re-enable the main resource cache since the regression had been fixed in r141615.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2013-02-06  Uday Kiran  <udaykiran@motorola.com>

        Implement 'vmax' from CSS3 values and units
        https://bugs.webkit.org/show_bug.cgi?id=91440

        Reviewed by Antti Koivisto.

        vmax is implemented as primitive length unit.
        New length type ViewportPercentageMax is added and included support for fetching the value
        of this viewport percentage unit based on current viewport size.

        The specification related to this implementation is
        http://dev.w3.org/csswg/css3-values/#viewport-relative-lengths.

        Tests: css3/viewport-percentage-lengths/css3-viewport-percentage-lengths-vmax-absolute.html
               css3/viewport-percentage-lengths/css3-viewport-percentage-lengths-vmax.html

        * css/CSSGrammar.y.in: Added vmax support.
        * css/CSSParser.cpp: Parsing of vmax unit.
        (WebCore::CSSParser::validUnit): Added vmax to valid units.
        (WebCore::CSSParser::createPrimitiveNumericValue): Added vmax to primitive untis.
        (WebCore::CSSParser::parseValidPrimitive): Creation of CSSPrimitive for vmax.
        (WebCore::CSSParser::detectNumberToken): Parsing of vmax token.
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue): Added support for vmax.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion): Added support for vmax.
        (WebCore::unitCategory): Ditto.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Ditto.
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::customCssText): Added support for vmax.
        (WebCore::CSSPrimitiveValue::viewportPercentageLength): Function to create the Length structure for the viewport-percentage unit types.
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isViewportPercentageLength): Checks whether the primitive value is ViewportPercentage Length.
        * css/CSSPrimitiveValue.idl: Added support for vmax.
        * css/LengthFunctions.cpp: Calcuation of length value based on the current viewport size.
        (WebCore::minimumValueForLength):
        (WebCore::valueForLength):
        (WebCore::floatValueForLength):
        * platform/Length.h:
        (WebCore::Length::isViewportPercentage): To check the Length is of type ViewportPercentage.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):

2013-02-06  Pravin D  <pravind.2k4@gmail.com>

        When a block element is made inline positioned and has static left and right,  it does not follow inline formatting context
        https://bugs.webkit.org/show_bug.cgi?id=91665

        Reviewed by Julien Chaffraix.

        Out-of-flow-positioned elements have their display overriden to BLOCK. When a static block elements 
        changes to inline out-of-flow-positioned or vice-versa, the element current and previous display properties 
        are same. This causes the element to follow a wrong flow context(in this case Block context) and the element
        is laid out incorrectly. The patch fixes the issue by reattaching the renderers of the node whenever either
        position property changes or when its floating property changes.
        Also the cases when an out-of-flow-positioned/floating element changes to static/non-floating element where
        being specially handled. As reattaching the renderers in the above cases correctly handles the above cases,
        special handling for such cases is no more required and the related code can be safely removed.
 
        Reattaching renderers for the afore mentioned issues takes a different(longer) code path. Performance measurements
        summary for the same is as follows:
                                                              % increase in time
         Absolute-block-to-static-block                            2.00
         Absolute-inline-to-static-block                           1.21
         Absolute-inline-to-static-inline                          1.18
         Static-block-to-absolute-block                            1.13
         Static-inline-to-absolute-inline                          1.35
         Floating-block-non-floating-block                         0.85
         Floating-inline-non-floating-block                        0.66
         Floating-inline-non-floating-inline                       0.57
         Non-floating-block-floating-block                         0.12
         Non-floating-inline-floating-inline                       1.36

        Tests: fast/dynamic/absolute-positioned-to-static-positioned.html
               fast/dynamic/floating-to-non-floating.html
               fast/dynamic/non-floating-to-floating.html
               fast/dynamic/static-positioned-to-absolute-positioned.html

        * dom/Node.cpp:
        (WebCore::Node::diff):
          Return detach in the following conditions:
             1) Element changes to out-of-flow-positioned or vice-versa.
             2) Element becomes floating or vice-versa.

        * rendering/RenderBlock.cpp:
        (WebCore):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderInline.cpp:
        (WebCore):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderObject.cpp:
        (WebCore):
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        (RenderObject):
          The fix in Node::diff() obsoletes some code. The above deletion are part of this dead code cleanup.

2013-02-06  Chris Fleizach  <cfleizach@apple.com>

        AX: if <html> has an ARIA attribute, it's exposed as an AXGroup
        https://bugs.webkit.org/show_bug.cgi?id=109008

        Reviewed by Ryosuke Niwa.

        If an <html> element had an ARIA attribute, it was being turned into an element
        in the AX hierarchy. This was causing trouble for screen readers by inserting
        an unexpected element in the navigation sequence.

        Test: accessibility/html-html-element-is-ignored.html

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

2013-02-06  Shawn Singh  <shawnsingh@chromium.org>

        RenderLayer hasVisibleContent() has inconsistent semantics causing disappearing composited layers
        https://bugs.webkit.org/show_bug.cgi?id=108118

        Reviewed by Simon Fraser.

        RenderLayerBacking::hasVisibleNonCompositingDescendantLayers was
        only checking whether direct children had visible content. As a
        result, composited layers had wrong visibility status if only a
        deeper descendant RenderLayer was visible.

        Test: compositing/visibility/visibility-on-distant-descendant.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::hasVisibleNonCompositingDescendant): copied the original
        implementation into this function; then added the RenderLayer
        recursion as appropriate.
        (WebCore):
        (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers):
        This is now just a wrapper to the private static recursive
        function.

2013-02-06  Jonathon Jongsma  <jonathon.jongsma@collabora.com>

        [GStreamer] MediaPlayer's code is not easily reusable by other GStreamer-based players
        https://bugs.webkit.org/show_bug.cgi?id=100261

        Refactor the media player implementation so that more of the
        internal functionality can be shared between the current media
        backend and the mediastream player backend.  Common code is
        broken out into a MediaPlayerPrivateGStreamerBase class, and
        both MediaPlayerPrivateGStreamer and
        StreamMediaPlayerPrivateGStreamer inherit from this base class.

        Reviewed by Philippe Normand

        No new tests since functionality is covered by existing media tests

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * Target.pri:
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.cpp:
        (WebCore::FullscreenVideoControllerGStreamer::create):
        (WebCore::FullscreenVideoControllerGStreamer::FullscreenVideoControllerGStreamer):
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.h:
        (WebCore):
        (FullscreenVideoControllerGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::isLiveStream):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: Added.
        (WebCore):
        (WebCore::greatestCommonDivisor):
        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
        (WebCore::mediaPlayerPrivateVolumeChangeTimeoutCallback):
        (WebCore::mediaPlayerPrivateMuteChangedCallback):
        (WebCore::mediaPlayerPrivateMuteChangeTimeoutCallback):
        (WebCore::mediaPlayerPrivateRepaintCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamerBase::setVolume):
        (WebCore::MediaPlayerPrivateGStreamerBase::volume):
        (WebCore::MediaPlayerPrivateGStreamerBase::notifyPlayerOfVolumeChange):
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::networkState):
        (WebCore::MediaPlayerPrivateGStreamerBase::readyState):
        (WebCore::MediaPlayerPrivateGStreamerBase::sizeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::setMuted):
        (WebCore::MediaPlayerPrivateGStreamerBase::muted):
        (WebCore::MediaPlayerPrivateGStreamerBase::notifyPlayerOfMute):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::setSize):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        (WebCore::MediaPlayerPrivateGStreamerBase::enterFullscreen):
        (WebCore::MediaPlayerPrivateGStreamerBase::exitFullscreen):
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsFullscreen):
        (WebCore::MediaPlayerPrivateGStreamerBase::platformMedia):
        (WebCore::MediaPlayerPrivateGStreamerBase::movieLoadType):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        (WebCore::MediaPlayerPrivateGStreamerBase::setStreamVolumeElement):
        (WebCore::MediaPlayerPrivateGStreamerBase::decodedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamerBase::droppedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamerBase::audioDecodedByteCount):
        (WebCore::MediaPlayerPrivateGStreamerBase::videoDecodedByteCount):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h: Added.
        (WebCore):
        (MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsMuting):
        (WebCore::MediaPlayerPrivateGStreamerBase::setVisible):
        (WebCore::MediaPlayerPrivateGStreamerBase::hasSingleSecurityOrigin):
        (WebCore::MediaPlayerPrivateGStreamerBase::maxTimeLoaded):
        (WebCore::MediaPlayerPrivateGStreamerBase::canEnterFullscreen):
        (WebCore::MediaPlayerPrivateGStreamerBase::mediaPlayer):
        (WebCore::MediaPlayerPrivateGStreamerBase::audioSink):
        * platform/graphics/gtk/FullscreenVideoControllerGtk.cpp:
        (WebCore::FullscreenVideoControllerGtk::FullscreenVideoControllerGtk):
        * platform/graphics/gtk/FullscreenVideoControllerGtk.h:
        (FullscreenVideoControllerGtk):

2013-02-06  Tony Gentilcore  <tonyg@chromium.org>

        Call XSSAuditor's didBlockScript() for the threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=108726

        Reviewed by Adam Barth.

        This patch causes us to call didBlockScript() on the main thread if the CompactHTML token has XSSInfo.
        To do so, we:
        1. Rename DidBlockScriptRequest to XSSInfo.
        2. Add an OwnPtr<XSSInfo> field to CompactHTMLToken.
        3. Add an isSafeToSendToAnotherThread() method to String and KURL.

        We don't yet populate didBlockScriptRequest on the background thread, but this should just work once we do.

        No new tests because no new functionality.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::pumpTokenizer): Update comment for rename.
        * html/parser/CompactHTMLToken.cpp:
        (SameSizeAsCompactHTMLToken):
        (WebCore::CompactHTMLToken::CompactHTMLToken): Add a copy constructor used by Vector.
        (WebCore::CompactHTMLToken::isSafeToSendToAnotherThread): Include new m_xssInfo field in safety check.
        (WebCore):
        (WebCore::CompactHTMLToken::xssInfo): Added.
        (WebCore::CompactHTMLToken::setXSSInfo): Added.
        * html/parser/CompactHTMLToken.h: Add an OwnPtr<XSSInfo> field to CompactHTMLToken.
        (WebCore):
        (CompactHTMLToken):
        (WTF): Add VectorTraits necessary for copying Vector fields objects that contain an OwnPtr.
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser): Add new didBlockScript() call.
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/XSSAuditor.cpp: Renaming.
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h: Renaming.
        (WebCore):
        (XSSAuditor):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSInfo::isSafeToSendToAnotherThread):
        (WebCore):
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::create):
        (XSSInfo):
        (WebCore::XSSInfo::XSSInfo):
        (XSSAuditorDelegate):
        * platform/KURL.cpp:
        (WebCore::KURL::isSafeToSendToAnotherThread): Added.
        (WebCore):
        * platform/KURL.h:
        (KURL):
        * platform/KURLGoogle.cpp:
        (WebCore):
        (WebCore::KURLGooglePrivate::isSafeToSendToAnotherThread): Added.
        * platform/KURLGooglePrivate.h:
        (KURLGooglePrivate):
        * platform/KURLWTFURLImpl.h:
        (WebCore::KURLWTFURLImpl::isSafeToSendToAnotherThread): Added.

2013-02-06  Dean Jackson  <dino@apple.com>

        Minor updates to captions menu UI
        https://bugs.webkit.org/show_bug.cgi?id=109005

        Reviewed by Eric Carlson.

        Now that we only have a single section in the captions menu, remove the
        unnecessary wrapper element. Also update the UI for Mac so that the menu
        grows in size dynamically, and change the text we display for a caption
        that has neither label or language identifiers.

        Covered by existing tests.

        * English.lproj/Localizable.strings: New string for an unknown caption label.
        * css/fullscreenQuickTime.css: New rules for the captions menu.
        (video:-webkit-full-screen::-webkit-media-controls-closed-captions-container):
        (video:-webkit-full-screen::-webkit-media-controls-closed-captions-track-list):
        * css/mediaControlsQuickTime.css: Ditto.
        (video::-webkit-media-controls-closed-captions-container):
        (video::-webkit-media-controls-closed-captions-track-list):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
            Remove the <section> element container.
        * platform/LocalizedStrings.cpp:
        (WebCore::textTrackNoLabelText): New string for an unknown caption label.

2013-02-06  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Remove isSnippet field from FileDescriptor and UISourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=109045
        
        Reviewed by Pavel Feldman.

        Snippets are now distinguished based on uiSourceCode project.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._supportsEnabledBreakpointsWhileEditing):
        * inspector/front-end/NavigatorView.js:
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._navigatorViewForUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.addUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.removeUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.revealUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.rename):
        (WebInspector.SnippetsNavigatorView.prototype._handleEvaluateSnippet):
        (WebInspector.SnippetsNavigatorView.prototype._handleRemoveSnippet):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showFile):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.ScriptsPanel.prototype.set _fileRenamed):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleWorkspaceProvider.prototype.addFile):
        (WebInspector.SimpleWorkspaceProvider.prototype.addFileForURL):
        * inspector/front-end/Workspace.js:
        (WebInspector.FileDescriptor):
        (WebInspector.Project.prototype._fileAdded):

2013-02-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141983.
        http://trac.webkit.org/changeset/141983
        https://bugs.webkit.org/show_bug.cgi?id=109055

        lots of new crashes in handlescope (Requested by gavinp on
        #webkit).

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::setWrapperInObject):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::isolated):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::worldForEnteredContextIfIsolated):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8GCController.cpp:
        (WebCore::WrapperVisitor::WrapperVisitor):
        (WebCore):
        (WebCore::gcTree):
        (WebCore::V8GCController::didCreateWrapperForNode):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (V8GCController):

2013-02-06  Andreas Kling  <akling@apple.com>

        Optimize GlyphPage for case where all glyphs are available in the same font.
        <http://webkit.org/b/108835>
        <rdar://problem/13157042>

        Reviewed by Antti Koivisto.

        Let GlyphPage begin optimistically assuming that all its glyphs will be represented in
        the same SimpleFontData*. In this (very common) case, only keep a single SimpleFontData*.

        If glyphs from multiple fonts are mixed in one page, an array of per-glyph SimpleFontData*
        is allocated transparently.

        4.98 MB progression on Membuster3.

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::createUninitialized):
        (WebCore::GlyphPage::createZeroedSystemFallbackPage):
        (WebCore::GlyphPage::createCopiedSystemFallbackPage):

            There are now three ways of constructing a GlyphPage, two of them are only used for
            creating system fallback pages.

        (WebCore::GlyphPage::setGlyphDataForIndex):

            Hold off creating a SimpleFontData* array until we're sure there are two different
            SimpleFontData* backing the glyphs in this page.
            We don't store font data for glyph #0, instead we let the getters always return null for it.

        (WebCore::GlyphPage::~GlyphPage):

            Free the SimpleFontData* array if needed.

        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::fontDataForCharacter):

            The font data for glyph #0 is always a null pointer now.

        (WebCore::GlyphPage::clearForFontData):

            Updated for new storage format.

        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):

            Fix bug where non-zero glyph was temporarily associated with null font data,
            which triggered the new assertion in setGlyphDataForIndex().

2013-02-06  Pavel Feldman  <pfeldman@chromium.org>

        Follow up to r141979: do not consume Home/End.
        Not reviewed.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog.prototype._onKeyDown):

2013-02-06  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Remove show script folders setting
        https://bugs.webkit.org/show_bug.cgi?id=108940

        Reviewed by Pavel Feldman.

        Removed showScriptFolders setting, the sources are never shown as a flat list in navigator anymore.

        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView):
        (WebInspector.NavigatorView.prototype._getOrCreateFolderTreeElement):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):

2013-02-06  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: update javascriptsourcetokenizer to produce "whitespaces" token
        https://bugs.webkit.org/show_bug.cgi?id=108945

        Reviewed by Pavel Feldman.

        Update re2c grammar for SourceJavaScriptTokenizer to produce
        "whitespace" token which holds consequtive whitespaces in it.

        Updated existing tests expectations.

        * inspector/front-end/DOMSyntaxHighlighter.js:
        (WebInspector.DOMSyntaxHighlighter.prototype.createSpan): Do not strip spaces from tokens with class "whitespaces".
        * inspector/front-end/SourceJavaScriptTokenizer.js: Regenerated.
        (WebInspector.SourceJavaScriptTokenizer.prototype.nextToken):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:

2013-02-06  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: refactor registerShortcuts method of DTE
        https://bugs.webkit.org/show_bug.cgi?id=109031

        Reviewed by Pavel Feldman.

        Implement _registerShortcuts method in TextEditorMainPanel which will
        bind its private methods to the different key combinations. Refactor
        method handlers handleUndoRedo, handleTabKeyPress and handleEnterKey
        from public to private.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype._registerShortcuts): Remove bindings of TextEditorMainPanel methods
        (WebInspector.DefaultTextEditor.prototype._handleKeyDown):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._registerShortcuts): Added.
        (WebInspector.TextEditorMainPanel.prototype._handleUndoRedo):
        (WebInspector.TextEditorMainPanel.prototype.handleKeyDown):

2013-02-06  Mike West  <mkwst@chromium.org>

        Add an ENABLE_NOSNIFF feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=109029

        Reviewed by Jochen Eisinger.

        This new flag will control the behavior of 'X-Content-Type-Options: nosniff'
        when processing script and other resource types.

        * Configurations/FeatureDefines.xcconfig:

2013-02-06  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Implement DTMF support in RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=106782

        Reviewed by Adam Barth.

        The WebRTC specification have added support for DTMF:
        http://dev.w3.org/2011/webrtc/editor/webrtc.html#peer-to-peer-dtmf

        Implementation wise this is implemented using the same pattern as RTCDataChannel;
        where a RTCDTMFSenderHandler is created by the UA through a new method on
        RTCPeerConnectionHandler.

        Test: fast/mediastream/RTCPeerConnection-dtmf.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCDTMFSender.cpp: Added.
        (WebCore):
        (WebCore::RTCDTMFSender::create):
        (WebCore::RTCDTMFSender::RTCDTMFSender):
        (WebCore::RTCDTMFSender::~RTCDTMFSender):
        (WebCore::RTCDTMFSender::canInsertDTMF):
        (WebCore::RTCDTMFSender::track):
        (WebCore::RTCDTMFSender::toneBuffer):
        (WebCore::RTCDTMFSender::insertDTMF):
        (WebCore::RTCDTMFSender::didPlayTone):
        (WebCore::RTCDTMFSender::interfaceName):
        (WebCore::RTCDTMFSender::scriptExecutionContext):
        (WebCore::RTCDTMFSender::stop):
        (WebCore::RTCDTMFSender::eventTargetData):
        (WebCore::RTCDTMFSender::ensureEventTargetData):
        (WebCore::RTCDTMFSender::scheduleDispatchEvent):
        (WebCore::RTCDTMFSender::scheduledEventTimerFired):
        * Modules/mediastream/RTCDTMFSender.h: Added.
        (WebCore):
        (RTCDTMFSender):
        (WebCore::RTCDTMFSender::duration):
        (WebCore::RTCDTMFSender::interToneGap):
        * Modules/mediastream/RTCDTMFSender.idl: Added.
        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
        (WebCore):
        (WebCore::RTCDTMFToneChangeEvent::create):
        (WebCore::RTCDTMFToneChangeEvent::RTCDTMFToneChangeEvent):
        (WebCore::RTCDTMFToneChangeEvent::~RTCDTMFToneChangeEvent):
        (WebCore::RTCDTMFToneChangeEvent::tone):
        (WebCore::RTCDTMFToneChangeEvent::interfaceName):
        * Modules/mediastream/RTCDTMFToneChangeEvent.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
        (WebCore):
        (RTCDTMFToneChangeEventInit):
        (RTCDTMFToneChangeEvent):
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl: Added.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createDataChannel):
        (WebCore):
        (WebCore::RTCPeerConnection::getStreamByTrackId):
        (WebCore::RTCPeerConnection::createDTMFSender):
        * Modules/mediastream/RTCPeerConnection.h:
        (WebCore):
        (RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.idl:
        * WebCore.gypi:
        * dom/EventNames.h:
        (WebCore):
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * platform/chromium/support/WebMediaStreamTrack.cpp:
        (WebKit::WebMediaStreamTrack::WebMediaStreamTrack):
        (WebKit):
        * platform/mediastream/RTCDTMFSenderHandler.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
        (WebCore):
        (RTCDTMFSenderHandler):
        (WebCore::RTCDTMFSenderHandler::~RTCDTMFSenderHandler):
        * platform/mediastream/RTCDTMFSenderHandlerClient.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
        (WebCore):
        (RTCDTMFSenderHandlerClient):
        (WebCore::RTCDTMFSenderHandlerClient::~RTCDTMFSenderHandlerClient):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        (WebCore):
        (RTCPeerConnectionHandler):
        * platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.cpp: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
        (WebCore):
        (WebCore::RTCDTMFSenderHandlerChromium::create):
        (WebCore::RTCDTMFSenderHandlerChromium::RTCDTMFSenderHandlerChromium):
        (WebCore::RTCDTMFSenderHandlerChromium::~RTCDTMFSenderHandlerChromium):
        (WebCore::RTCDTMFSenderHandlerChromium::setClient):
        (WebCore::RTCDTMFSenderHandlerChromium::currentToneBuffer):
        (WebCore::RTCDTMFSenderHandlerChromium::canInsertDTMF):
        (WebCore::RTCDTMFSenderHandlerChromium::insertDTMF):
        (WebCore::RTCDTMFSenderHandlerChromium::didPlayTone):
        * platform/mediastream/chromium/RTCDTMFSenderHandlerChromium.h: Copied from Source/Platform/chromium/public/WebMediaStreamTrack.h.
        (WebCore):
        (RTCDTMFSenderHandlerChromium):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::createDTMFSender):
        (WebCore):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (RTCPeerConnectionHandlerChromium):

2013-02-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove V8GCController::m_edenNodes and make minor DOM GC more precise
        https://bugs.webkit.org/show_bug.cgi?id=108579

        Reviewed by Adam Barth.

        Currently V8GCController::m_edenNodes stores a list of nodes whose
        wrappers have been created since the latest GC. The reason why we
        needed m_edenNodes is that there was no way to know a list of wrappers
        in the new space of V8. By using m_edenNodes, we had been approximating
        'wrappers in the new space' by 'wrappers that have been created since
        the latest GC'.

        Now V8 provides VisitHandlesForPartialDependence(), with which WebKit
        can know a list of wrappers in the new space. By using the API, we can
        remove V8GCController::m_edenNodes. The benefit is that (1) we no longer
        need to keep m_edenNodes and that (2) it enables more precise minor
        DOM GC (Remember that m_edenNodes was just an approximation).

        Performance benchmark: https://bugs.webkit.org/attachment.cgi?id=185940
        The benchmark runs 300 iterations, each of which creates 100000 elements.
        The benchmark measures average, min, median, max and stdev of execution times
        of the 300 iterations. This will tell us the worst-case overhead of this change.

        Before:
          mean=59.91ms, min=39ms, median=42ms, max=258ms, stdev=47.48ms

        After:
          mean=58.75ms, min=35ms, median=41ms, max=250ms, stdev=47.32ms

        As shown above, I couldn't observe any performance regression.

        No tests. No change in behavior.

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::setWrapperInObject):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::getWorldWithoutContextCheck):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::worldForEnteredContextIfIsolated):
        (WebCore::worldForEnteredContextWithoutContextCheck):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8GCController.cpp:
        (WebCore::gcTree):
        (WebCore):
        (MinorGCWrapperVisitor):
        (WebCore::MinorGCWrapperVisitor::MinorGCWrapperVisitor):
        (WebCore::MinorGCWrapperVisitor::notifyFinished):
        (WebCore::MajorGCWrapperVisitor::MajorGCWrapperVisitor):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (V8GCController):

2013-02-06  Mihai Maerean  <mmaerean@adobe.com>

        [CSSRegions] Assertion failure in Node::detach (!renderer || renderer->inRenderFlowThread())
        https://bugs.webkit.org/show_bug.cgi?id=104517

        Reviewed by Julien Chaffraix.

        The RenderObject::inRenderFlowThread bit could have become disconnected from the fact that the RenderObject
        has (or not) an enclosing RenderFlowThread.
        The cause of this was that, when setting or removing the parent of a RenderObject, the inRenderFlowThread flags
        wasn't being set/reset for the children too.
        This is now fixed by calling the new setInRenderFlowThreadIncludingDescendants.

        The ASSERT was hit for anonymous blocks when detaching the document.

        Test: fast/regions/detaching-regions-with-anonymous-blocks.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setInRenderFlowThreadRecursive):
        (WebCore):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setParent):
        (RenderObject):

2013-02-06  Marja Hölttä  <marja@chromium.org>

        Take referrer policy into account when clearing the referrer header
        https://bugs.webkit.org/show_bug.cgi?id=86000

        Reviewed by Alexey Proskuryakov.

        The referrer should only be cleared when doing a https -> http redirect,
        if the policy is "default". Otherwise the referrer should be left intact.

        In order to do that, added a function for checking the policy in
        NetworkingContext, and stored the NetworkingContext in ResourceHandle
        (like some ports already did).

        No new tests (unskipped old tests).

        * loader/FrameNetworkingContext.h:
        (WebCore::FrameNetworkingContext::shouldClearReferrerOnHTTPSToHTTPRedirect):
        (FrameNetworkingContext):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::BlobResourceHandle):
        * platform/network/NetworkingContext.h:
        (NetworkingContext):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        (WebCore::ResourceHandle::context):
        (WebCore):
        * platform/network/ResourceHandle.h:
        (ResourceHandle):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (ResourceHandleInternal):
        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/chromium/ResourceHandle.cpp:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        (WebCore::ResourceHandle::context):
        (WebCore):
        (WebCore::ResourceHandle::start):
        * platform/network/chromium/ResourceHandleInternal.h:
        (WebCore):
        (ResourceHandleInternal):
        (WebCore::ResourceHandleInternal::context):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::redirect):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect):
        (WebCore::ResourceHandle::start):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2013-02-06  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: file selector list jumps as I type or move Up/Down
        https://bugs.webkit.org/show_bug.cgi?id=108933

        Reviewed by Vsevolod Vlasov.

        Missing return was scheduling extra updates.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog):
        (WebInspector.FilteredItemSelectionDialog.prototype._filterItems):
        (WebInspector.FilteredItemSelectionDialog.prototype._onKeyDown):
        (WebInspector.FilteredItemSelectionDialog.prototype._updateSelection):

2013-02-06  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to remaining GetTemplate()s
        https://bugs.webkit.org/show_bug.cgi?id=109001

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::namedSecurityCheck): Because this method is a callback from V8,
        we cannot change its signature to receive an Isolate.
        (WebCore::V8DOMWindow::indexedSecurityCheck): Ditto.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateToV8Converters):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::createWrapper):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::createWrapper):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::createWrapper):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::createWrapper):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::createWrapper):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::createWrapper):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::createWrapper):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::createWrapper):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::createWrapper):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::createWrapper):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::createWrapper):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::createWrapper):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::wrapInShadowObject):

2013-02-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141961.
        http://trac.webkit.org/changeset/141961
        https://bugs.webkit.org/show_bug.cgi?id=109019

        assertion failures on svn tests such as fonts-glyph-04-t.svg
        (Requested by falken on #webkit).

        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::create):
        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::fontDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        (GlyphPage):
        (WebCore::GlyphPage::copyFrom):
        (WebCore::GlyphPage::clear):
        (WebCore::GlyphPage::clearForFontData):
        (WebCore::GlyphPage::GlyphPage):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):

2013-02-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141964.
        http://trac.webkit.org/changeset/141964
        https://bugs.webkit.org/show_bug.cgi?id=109014

        caused performance regression (Requested by hayato on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/DocumentRuleSets.cpp: Removed.
        * css/DocumentRuleSets.h: Removed.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::collectRulesFromUserStyleSheets):
        (WebCore):
        (WebCore::makeRuleSet):
        (WebCore::StyleResolver::resetAuthorStyle):
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::classNamesAffectedByRules):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::checkRegionStyle):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::collectFeatures):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleResolver.h:
        (StyleResolver):
        (WebCore::StyleResolver::usesSiblingRules):
        (WebCore::StyleResolver::usesFirstLineRules):
        (WebCore::StyleResolver::usesBeforeAfterRules):
        (WebCore::StyleResolver::hasSelectorForAttribute):
        (WebCore::StyleResolver::hasSelectorForClass):
        (WebCore::StyleResolver::hasSelectorForId):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):

2013-02-05  Kentaro Hara  <haraken@chromium.org>

        Add #if USE(V8) to Node::V8CollectableDuringMinorGCFlag
        https://bugs.webkit.org/show_bug.cgi?id=109009

        Reviewed by Kent Tamura.

        Node flags should be saved. V8CollectableDuringMinorGCFlag is used by V8 only.

        * dom/Node.h:
        (Node):

2013-02-05  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add ending slashes automatically to file mappings.
        https://bugs.webkit.org/show_bug.cgi?id=108936

        Reviewed by Pavel Feldman.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.WorkspaceSettingsTab.prototype._addFileMappingClicked):

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

        More updates to Caption user preferences
        https://bugs.webkit.org/show_bug.cgi?id=108997

        Reviewed by Dean Jackson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::captionPreferencesChanged): Give the media controls a chance
            to update for a preferences change.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Add optional "force update" 
            param to force font size recalc even when the video size hasn't changed.
        * html/shadow/MediaControlElements.h:

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::textTrackPreferencesChanged): New, force a font size recalc.
        * html/shadow/MediaControls.h:

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties): Don't set width/size of cues
            that use default positioning. Use "start" as the default alignment.

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::captionsWindowCSS): Set padding when the window is visible
            so it shows around the cue background.
        (WebCore::CaptionUserPreferencesMac::captionsBackgroundCSS): Set padding to 0 when the background
            is visible.
        (WebCore::CaptionUserPreferencesMac::windowRoundedCornerRadiusCSS): Add "px" to the border radius
            so it actually works.
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::layout): Special case generic cues with default style.
        (WebCore::RenderTextTrackCue::repositionGenericCue):
        * rendering/RenderTextTrackCue.h:

2013-02-05  Hayato Ito  <hayato@chromium.org>

        Split each RuleSet and feature out from StyleResolver into its own class.
        https://bugs.webkit.org/show_bug.cgi?id=107777

        Reviewed by Dimitri Glazkov.

        Splitting each RuleSet and feature out from StyleResover into its onw class, DocumentRuleSets,
        to manage them separately.

        This is one of the attempts to try to resolve meta bug (bug 89879)
        to lose StyleResolver's weight.  We need further action to factor
        StyleResolver to separate it into some classes cleanly.
        See also https://bugs.webkit.org/show_bug.cgi?id=108890. A following patch will address that.

        No tests. No change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/DocumentRuleSets.cpp: Added.
        (WebCore):
        (WebCore::DocumentRuleSets::DocumentRuleSets):
        (WebCore::DocumentRuleSets::~DocumentRuleSets):
        (WebCore::DocumentRuleSets::initUserStyle): New helper to initialize each RuleSets.
        (WebCore::DocumentRuleSets::collectRulesFromUserStyleSheets): Factored out from StyleResolver.
        (WebCore::makeRuleSet): Ditto.
        (WebCore::DocumentRuleSets::resetAuthorStyle): Ditto.
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets): Ditto.
        (WebCore::DocumentRuleSets::collectFeatures): Ditto.
        (WebCore::DocumentRuleSets::reportMemoryUsage): New methods to report memory usage. Factored out from StyleResolver.
        * css/DocumentRuleSets.h: Added.
        (WebCore):
        (DocumentRuleSets):
        (WebCore::DocumentRuleSets::authorStyle): Moved from StyleResolver.
        (WebCore::DocumentRuleSets::userStyle): Ditto.
        (WebCore::DocumentRuleSets::features): Ditto.
        (WebCore::DocumentRuleSets::sibling): Ditto.
        (WebCore::DocumentRuleSets::uncommonAttribute): Ditto.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::appendAuthorStyleSheets): Now calls DocumentRuleSets::appendAuthorStyleSheets.
        (WebCore::StyleResolver::matchAuthorRules): Use m_ruleSets.
        (WebCore::StyleResolver::matchUserRules): Ditto.
        (WebCore::StyleResolver::classNamesAffectedByRules): Ditto.
        (WebCore::StyleResolver::locateCousinList): Ditto.
        (WebCore::StyleResolver::canShareStyleWithElement): Ditto.
        (WebCore::StyleResolver::locateSharedStyle): Ditto.
        (WebCore::StyleResolver::styleForPage): Ditto.
        (WebCore::StyleResolver::checkRegionStyle): Ditto.
        (WebCore::StyleResolver::applyProperty): Ditto.
        (WebCore::StyleResolver::reportMemoryUsage): Now calls DocumentRuleSets::reportMemoryUsage.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::scopeResolver):
        (StyleResolver):
        (WebCore::StyleResolver::ruleSets): accessor r to DocumentRuleSets.
        (WebCore::StyleResolver::usesSiblingRules): Use m_ruleSets.
        (WebCore::StyleResolver::usesFirstLineRules): Ditto.
        (WebCore::StyleResolver::usesBeforeAfterRules): Ditto.
        (WebCore::StyleResolver::hasSelectorForAttribute): Ditto.
        (WebCore::StyleResolver::hasSelectorForClass): Ditto.
        (WebCore::StyleResolver::hasSelectorForId): Ditto.
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):

2013-02-05  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Grid item's logical height is not properly recomputed after -webkit-grid-column / -webkit-grid-row changes
        https://bugs.webkit.org/show_bug.cgi?id=108975

        Reviewed by Tony Chang.

        Test: fast/css-grid-layout/implicit-position-dynamic-change.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clearContainingBlockOverrideSize):
        (WebCore::RenderBox::clearOverrideContainingBlockContentLogicalHeight):
        * rendering/RenderBox.h:
        Added clearOverrideContainingBlockContentLogicalHeight and updated clearContainingBlockOverrideSize
        to use it.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        Added missing clearContainingBlockOverrideSize to ensure we don't use a previous layout's override.

2013-02-05  Andreas Kling  <akling@apple.com>

        Optimize GlyphPage for case where all glyphs are available in the same font.
        <http://webkit.org/b/108835>
        <rdar://problem/13157042>

        Reviewed by Antti Koivisto.

        Let GlyphPage begin optimistically assuming that all its glyphs will be represented in
        the same SimpleFontData*. In this (very common) case, only keep a single SimpleFontData*.

        If glyphs from multiple fonts are mixed in one page, an array of per-glyph SimpleFontData*
        is allocated transparently.

        4.98 MB progression on Membuster3.

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::createUninitialized):
        (WebCore::GlyphPage::createZeroedSystemFallbackPage):
        (WebCore::GlyphPage::createCopiedSystemFallbackPage):

            There are now three ways of constructing a GlyphPage, two of them are only used for
            creating system fallback pages.

        (WebCore::GlyphPage::setGlyphDataForIndex):

            Hold off creating a SimpleFontData* array until we're sure there are two different
            SimpleFontData* backing the glyphs in this page.
            We don't store font data for glyph #0, instead we let the getters always return null for it.

        (WebCore::GlyphPage::~GlyphPage):

            Free the SimpleFontData* array if needed.

        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::fontDataForCharacter):

            The font data for glyph #0 is always a null pointer now.

        (WebCore::GlyphPage::clearForFontData):

            Updated for new storage format.

2013-02-05  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Read-only inputs should be focusable
        https://bugs.webkit.org/show_bug.cgi?id=108795

        Reviewed by Kentaro Hara.

        According to the standard [1], readonly form controls should be focusable.

        - Sub-fields should be focusable if they are read-only. We should check
          isDisabled mainly.
        - All keyboard operations should not be handled if a field is disabled,
          and focus navigation keyboard operations should be handled even if a
          field is read-only.

        [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#the-readonly-attribute

        No new tests. Update
        fast/forms/time-multiple-fields/time-multiple-fields-keyboard-events.html
        for the new behavior.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isKeyboardFocusable):
        Make <input> focusable even if it is read-only.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::isFieldOwnerDisabled):
        Separate isFieldOwnerDisabledOrReadOnly into two.
        (WebCore::DateTimeEditElement::isFieldOwnerReadOnly): Ditto.
        (WebCore::DateTimeEditElement::updateUIState):
        We don't need to focus out if this is read-only.
        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement): Separate isFieldOwnerDisabledOrReadOnly into two.
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::defaultEventHandler):
        Skip handleKeyboardEvent if the field is disabled or the owner input is
        disabled or read-only. handleKeyboardEvent handles editing key
        operations.
        (WebCore::DateTimeFieldElement::defaultKeyboardEventHandler):
        If this field is disabled or the owner input is disabled, all keyboard
        inputs are ignored.
        If this field is read-only, we handle only left and right arrows to
        change focus, and skip down/up/backspace/del keys.
        (WebCore::DateTimeFieldElement::isFieldOwnerDisabled):
        A helper function to check disable state of the owner input.
        (WebCore::DateTimeFieldElement::isFieldOwnerReadOnly):
        A helper function to check read-only state of the owner input.
        (WebCore::DateTimeFieldElement::isFocusable):
        This field should be focusable if it is read-only and not disabled.
        * html/shadow/DateTimeFieldElement.h:
        (FieldOwner): Separate isFieldOwnerDisabledOrReadOnly into two.
        (DateTimeFieldElement):
        Declare isFieldOwnerDisabled and isFieldOwnerReadOnly.
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::handleKeyboardEvent):
        Remove redundant isDisabled check. It is done in
        DateTimeFieldElement::defaultEventHandler.

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

        [Mac] Complete plumbing so captions menu can indicate track type
        https://bugs.webkit.org/show_bug.cgi?id=108994

        Reviewed by Dean Jackson.

        Plumb "isClosedCaptions" through to the Mac media engine.

        Updated media/video-controls-captions-trackmenu-localized.html and results.

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::isClosedCaptions): New, pass the call through to the private track.
        * html/track/InbandTextTrack.h:
        (InbandTextTrack):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Lose the member variable, this won't be accessed often enough
            to make it worth caching the value.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::isClosedCaptions): Make virtual so derived classes can oveerride.
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::isClosedCaptions): New.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::isClosedCaptions): New.

2013-02-05  Mark Lam  <mark.lam@apple.com>

        Change DatabaseTask and DatabaseThread to work with DatabaseBackendAsync
        instead of Database.
        https://bugs.webkit.org/show_bug.cgi?id=108995.

        Reviewed by Sam Weinig.

        This change also moves the task inner classes from Database to
        DatabaseBackendAsync.

        No new tests.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::from):
        * Modules/webdatabase/Database.h:
        (Database):
        * Modules/webdatabase/DatabaseBackend.h:
        (DatabaseBackend):
        * Modules/webdatabase/DatabaseBackendAsync.h:
        (DatabaseBackendAsync):
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseTask::DatabaseTask):
        (WebCore::DatabaseBackendAsync::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseBackendAsync::DatabaseOpenTask::doPerformTask):
        (WebCore::DatabaseBackendAsync::DatabaseOpenTask::debugTaskName):
        (WebCore::DatabaseBackendAsync::DatabaseCloseTask::DatabaseCloseTask):
        (WebCore::DatabaseBackendAsync::DatabaseCloseTask::doPerformTask):
        (WebCore::DatabaseBackendAsync::DatabaseCloseTask::debugTaskName):
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::DatabaseTransactionTask):
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::doPerformTask):
        (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::debugTaskName):
        (WebCore::DatabaseBackendAsync::DatabaseTableNamesTask::DatabaseTableNamesTask):
        (WebCore::DatabaseBackendAsync::DatabaseTableNamesTask::doPerformTask):
        (WebCore::DatabaseBackendAsync::DatabaseTableNamesTask::debugTaskName):
        * Modules/webdatabase/DatabaseTask.h:
        (WebCore::DatabaseTask::database):
        (DatabaseTask):
        (WebCore::DatabaseBackendAsync::DatabaseOpenTask::create):
        (DatabaseBackendAsync::DatabaseOpenTask):
        (WebCore::DatabaseBackendAsync::DatabaseCloseTask::create):
        (DatabaseBackendAsync::DatabaseCloseTask):
        (WebCore::DatabaseBackendAsync::DatabaseTableNamesTask::create):
        (DatabaseBackendAsync::DatabaseTableNamesTask):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::recordDatabaseOpen):
        (WebCore::DatabaseThread::recordDatabaseClosed):
        (WebCore::SameDatabasePredicate::SameDatabasePredicate):
        (SameDatabasePredicate):
        (WebCore::DatabaseThread::unscheduleDatabaseTasks):
        * Modules/webdatabase/DatabaseThread.h:
        (DatabaseThread):

2013-02-05  Mark Lam  <mark.lam@apple.com>

        Rename ENUM_CLASS_BEGIN() macro to ENUM_CLASS(), and make DatabaseType a strong enum.
        https://bugs.webkit.org/show_bug.cgi?id=108988.

        Reviewed by Alexey Proskuryakov.

        No new tests.

        * Modules/webdatabase/DatabaseBackend.cpp:
        (WebCore::DatabaseBackend::DatabaseBackend):
        * Modules/webdatabase/DatabaseBackend.h:
        (DatabaseBackend):
        * Modules/webdatabase/DatabaseBackendAsync.cpp:
        (WebCore::DatabaseBackendAsync::DatabaseBackendAsync):
        * Modules/webdatabase/DatabaseBackendSync.cpp:
        (WebCore::DatabaseBackendSync::DatabaseBackendSync):
        * Modules/webdatabase/DatabaseBasicTypes.h:
        (WebCore::ENUM_CLASS):
        * Modules/webdatabase/DatabaseError.h:
        (WebCore::ENUM_CLASS):

2013-02-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove deprecatedV8String() and deprecatedV8Integer()
        https://bugs.webkit.org/show_bug.cgi?id=108919

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/V8Binding.cpp:
        (WebCore::toXPathNSResolver):
        * bindings/v8/V8Binding.h:
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::create):
        (WebCore::V8CustomXPathNSResolver::V8CustomXPathNSResolver):
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8CustomXPathNSResolver.h:
        (V8CustomXPathNSResolver):

2013-02-05   Vineet Chaudhary  <rgf748@motorola.com>

        formenctype to have empty string as default value.
        https://bugs.webkit.org/show_bug.cgi?id=108969

        Reviewed by Kent Tamura.

        The spec says formEnctype should only have an invalid value default, not a missing value default.
        Spec: http://www.w3.org/html/wg/drafts/html/master/forms.html#attr-fs-formenctype
              http://www.whatwg.org/specs/web-apps/current-work/#attr-fs-formenctype

        No new tests. Covered by existing test case fast/forms/submit-form-attributes.html

        * html/HTMLFormControlElement.cpp: For the missing formEnctype attr return empty string.
        (WebCore::HTMLFormControlElement::formEnctype):

2013-02-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Reduce usage of deprecatedString() and deprecatedInteger()
        https://bugs.webkit.org/show_bug.cgi?id=108909

        Reviewed by Adam Barth.

        By passing an Isolate parameter around, we can reduce usage of
        deprecated methods.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter):
        (GenerateEventListenerCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::addEventListenerCallback):
        (WebCore::TestEventTargetV8Internal::removeEventListenerCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::addEventListenerCallback):
        (WebCore::TestObjV8Internal::removeEventListenerCallback):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::get):
        (WebCore::set):
        (WebCore::getNthValueOnKeyPath):
        (WebCore::canInjectNthValueOnKeyPath):
        (WebCore::ensureNthValueOnKeyPath):
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::createValueListFromVariantArgs):
        (_NPN_Invoke):
        (_NPN_InvokeDefault):
        (_NPN_SetProperty):
        (_NPN_Construct):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::compileAndRunScript):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore):
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptSourceCode.cpp:
        (WebCore::ScriptSourceCode::compileScript):
        * bindings/v8/ScriptSourceCode.h:
        (ScriptSourceCode):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        (WebCore::npObjectGetProperty):
        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertNPVariantToV8Object):
        * bindings/v8/V8NPUtils.h:
        (WebCore):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::createHiddenDependency):
        (WebCore::removeHiddenDependency):
        (WebCore::transferHiddenDependency):
        * bindings/v8/V8Utilities.h:
        (WebCore):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallback):
        (WebCore::V8DOMWindow::removeEventListenerCallback):

2013-02-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in HasInstance()
        https://bugs.webkit.org/show_bug.cgi?id=108917

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toWebGLUniformLocation):

2013-02-05  Kentaro Hara  <haraken@chromium.org>

        [JSC] Clean up CodeGeneratorJS.pm by introducing HasCustom{Getter,Setter,Method}
        https://bugs.webkit.org/show_bug.cgi?id=108898

        Reviewed by Sam Weinig.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (HasCustomGetter):
        (HasCustomSetter):
        (HasCustomMethod):

2013-02-05  Dana Jansens  <danakj@chromium.org>

        [chromium] Provide compositor offscreen context through the WebLayerTreeViewClient interface
        https://bugs.webkit.org/show_bug.cgi?id=107776

        Reviewed by James Robinson.

        Allow the compositor thread's context to be retrieved on either thread,
        so the main thread can create and pass the context to the impl thread
        via its own mechanisms.

        Move the code to bind the GrGLInterface to a WebGraphicsContext3D into
        chromium's GraphicsContext3DPrivate. The chromium-side code will need
        to implement this code itself.

        * platform/chromium/support/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::grContext):
        * platform/chromium/support/GraphicsContext3DPrivate.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::getForImplThread):

2013-02-05  Tony Gentilcore  <tonyg@chromium.org>

        Continue making XSSAuditor thread safe: Remove dependency on the parser's tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=108666

        Reviewed by Adam Barth.

        This is the final dependency on the parser, so we remove that as well. Yay!

        No new tests because no new functionality.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer): Pass m_tokenizer->shouldAllowCDATA()
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::XSSAuditor): Remove isMainThread() check because we have one in init() anyway.
        Move m_isEnabled and m_documentURL initialization to init() because we have a Document* there.
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        (WebCore::XSSAuditor::filterStartToken):
        (WebCore::XSSAuditor::filterEndToken):
        (WebCore::XSSAuditor::filterScriptToken):
        (WebCore::XSSAuditor::decodedSnippetForJavaScript):
        * html/parser/XSSAuditor.h:
        (WebCore::FilterTokenRequest::FilterTokenRequest):
        (FilterTokenRequest):
        (XSSAuditor):

2013-02-05  Enrica Casucci  <enrica@apple.com>

        Make baseWritingDirectionForSelectionStart available to all platforms in the Editor class.
        https://bugs.webkit.org/show_bug.cgi?id=108977.

        Reviewed by Ryosuke Niwa.
        
        Now that baseWritingDirectionForSelectionStart doesn't use
        platform specific type anymore, we can make it available for
        all platforms. This way it can be used for iOS as well.

        No new tests, no functionality change.

        * editing/Editor.cpp:
        (WebCore::Editor::baseWritingDirectionForSelectionStart): Added.
        * editing/Editor.h: Moved from PLATFORM(MAC).
        * editing/mac/EditorMac.mm: baseWritingDirectionForSelectionStart removed.

2013-02-05  Benjamin Poulain  <bpoulain@apple.com>

        Avoid String->AtomicString conversion in Attr::childrenChanged()
        https://bugs.webkit.org/show_bug.cgi?id=108742

        Reviewed by Andreas Kling.

        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged): StringBuilder can output AtomicString directly.

2013-02-05  Yusuf Ozuysal  <yusufo@google.com>

        [chromium] Enable shouldGesturesTriggerActive for Android
        https://bugs.webkit.org/show_bug.cgi?id=96948

        Reviewed by James Robinson.

        We need this to fix performance issues we are getting because of touchstart 
        triggering hover/active states.

        No new tests. The tests introduced in https://bugs.webkit.org/show_bug.cgi?id=96060
        should run with the corrected behavior and would cover this change as well.

        * page/EventHandler.cpp:
        (WebCore::shouldGesturesTriggerActive):

2013-02-05  Mark Lam  <mark.lam@apple.com>

        Introduced back-end database classes + a few small fixes.
        https://bugs.webkit.org/show_bug.cgi?id=108759.

        Reviewed by Brady Eidson.

        1. Added DatabaseBackendContext, DatabaseBackendAsync, and DatabaseBackendSync.
           These are backends for DatabaseContext, Database, and DatabaseSync
           respectively.
        2. Added DatabaseBase to hold common code between Database and DatabaseSync.
        3. Renamed a few functions.
        4. Cleaned up unneeded code in ~DatabaseSync().
        5. Added some FIXMEs as reminders or places to clean up when we're done
           refactoring.
        6. Moved the calling of ScriptController::initializeThreading() from the Database
           constructor to DatabaseManager::openDatabase(). This just moves the call
           earlier in the same code path. System initialization work (i.e. initializing
           script threading in this case) should be done by the manager instead of by
           each Database instance.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractDatabaseServer.h:
        (AbstractDatabaseServer):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::backend):
        * Modules/webdatabase/Database.h:
        (Database):
        * Modules/webdatabase/DatabaseBackend.cpp:
        (WebCore::DatabaseBackend::DatabaseBackend):
        (WebCore::DatabaseBackend::~DatabaseBackend):
        (WebCore::DatabaseBackend::incrementalVacuumIfNeeded):
        * Modules/webdatabase/DatabaseBackend.h:
        (DatabaseBackend):
        (WebCore::DatabaseBackend::databaseContext):
        (WebCore::DatabaseBackend::setFrontend):
        * Modules/webdatabase/DatabaseBackendAsync.cpp: Added.
        (WebCore::DatabaseBackendAsync::DatabaseBackendAsync):
        * Modules/webdatabase/DatabaseBackendAsync.h: Added.
        (DatabaseBackendAsync):
        * Modules/webdatabase/DatabaseBackendContext.cpp: Added.
        (WebCore::DatabaseBackendContext::securityOrigin):
        (WebCore::DatabaseBackendContext::isContextThread):
        * Modules/webdatabase/DatabaseBackendContext.h: Added.
        (DatabaseBackendContext):
        (WebCore::DatabaseBackendContext::scriptExecutionContext):
        * Modules/webdatabase/DatabaseBackendSync.cpp: Added.
        (WebCore::DatabaseBackendSync::DatabaseBackendSync):
        (WebCore::DatabaseBackendSync::~DatabaseBackendSync):
        * Modules/webdatabase/DatabaseBackendSync.h: Added.
        (DatabaseBackendSync):
        * Modules/webdatabase/DatabaseBase.cpp: Added.
        (WebCore::DatabaseBase::DatabaseBase):
        (WebCore::DatabaseBase::scriptExecutionContext):
        (WebCore::DatabaseBase::logErrorMessage):
        * Modules/webdatabase/DatabaseBase.h: Added.
        (DatabaseBase):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        (WebCore::DatabaseContext::backend):
        * Modules/webdatabase/DatabaseContext.h:
        (DatabaseContext):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseManager::openDatabaseSync):
        (WebCore::DatabaseManager::hasOpenDatabases):
        (WebCore::DatabaseManager::interruptAllDatabasesForContext):
        (WebCore::DatabaseManager::getMaxSizeForDatabase):
        (WebCore::DatabaseManager::logErrorMessage):
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::interruptAllDatabasesForContext):
        (WebCore::DatabaseServer::canEstablishDatabase):
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::DatabaseSync::DatabaseSync):
        (WebCore::DatabaseSync::~DatabaseSync):
        (WebCore::DatabaseSync::backend):
        * Modules/webdatabase/DatabaseSync.h:
        (DatabaseSync):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::openTrackerDatabase):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForDatabase):
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        (WebCore::DatabaseTracker::populateOriginsIfNeeded):
        (WebCore::DatabaseTracker::databaseNamesForOriginNoLock):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::usageForOriginNoLock):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::isDeletingDatabaseOrOriginFor):
        (WebCore::DatabaseTracker::canDeleteDatabase):
        (WebCore::DatabaseTracker::isDeletingDatabase):
        (WebCore::DatabaseTracker::canDeleteOrigin):
        (WebCore::DatabaseTracker::isDeletingOrigin):
        (WebCore::DatabaseTracker::recordDeletingOrigin):
        (WebCore::DatabaseTracker::doneDeletingOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * Modules/webdatabase/DatabaseTracker.h:
        (DatabaseTracker):
        * Modules/webdatabase/SQLTransaction.cpp:
        * Modules/webdatabase/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didExceedQuota):
        * Modules/webdatabase/SQLTransactionSync.cpp:
        * Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::prepareToOpenDatabase):
        (WebCore::DatabaseTracker::failedToOpenDatabase):
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        (WebCore::DatabaseTracker::closeDatabasesImmediately):
        * Modules/webdatabase/chromium/SQLTransactionClientChromium.cpp:
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-02-05  Nayan Kumar K  <nayankk@motorola.com>

        [WEBGL] Rename WEBKIT_WEBGL_depth_texture to WEBGL_depth_texture.
        https://bugs.webkit.org/show_bug.cgi?id=108959

        Reviewed by Kenneth Russell.

        WEBGL_depth_texture is official now. Hence remove the vendor prefix from
        WEBKIT_WEBGL_depth_texture and rename this extension string to WEBGL_depth_texture.
        Specification: http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/.

        Tests already exists, modified them to test querying of unprefixed extension string.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLDepthTexture.cpp:
        (WebCore::WebGLDepthTexture::getName):
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::getExtension):

2013-02-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141905.
        http://trac.webkit.org/changeset/141905
        https://bugs.webkit.org/show_bug.cgi?id=108963

        "Broke mac build" (Requested by tonyg-cr on #webkit).

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        * html/parser/CompactHTMLToken.cpp:
        (SameSizeAsCompactHTMLToken):
        (WebCore::isStringSafeToSendToAnotherThread):
        (WebCore::CompactHTMLToken::isSafeToSendToAnotherThread):
        * html/parser/CompactHTMLToken.h:
        (WebCore):
        (CompactHTMLToken):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
        (WebCore):
        (XSSAuditor):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::DidBlockScriptRequest::create):
        (WebCore::DidBlockScriptRequest::DidBlockScriptRequest):
        (XSSAuditorDelegate):
        * platform/KURL.cpp:
        * platform/KURL.h:
        (KURL):
        * platform/KURLGoogle.cpp:
        (WebCore::KURLGooglePrivate::reportMemoryUsage):
        * platform/KURLGooglePrivate.h:
        (KURLGooglePrivate):
        * platform/KURLWTFURLImpl.h:
        (WebCore::KURLWTFURLImpl::reportMemoryUsage):

2013-02-05  Dominik Röttsches  <dominik.rottsches@intel.com>

        [HarfBuzz][Cairo] harfBuzzGetGlyph is slow and hot
        https://bugs.webkit.org/show_bug.cgi?id=108941

        Reviewed by Kenneth Rohde Christiansen.

        The text to glyph conversion using Cairo is slow
        due to expensive text codec conversion to UTF-8.
        Additionally, the glyph lookup itself is expensive.

        Inspired by the approach taken in HarfBuzzFaceSkia.cpp
        I suggest to implement a similar caching mechanism to
        accelerate this conversion.

        Arabic line breaking test, under review in
        bug 108948 shows about 58% improvement on my system
        with this patch.

        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::HarfBuzzFontData::HarfBuzzFontData):
            New container structure that keeps pointers
            to the cairo scaled font as well as the glyph cache.
        (HarfBuzzFontData):
        (WebCore):
        (WebCore::harfBuzzGetGlyph): Using the new container structure for accessing the cache.
        (WebCore::harfBuzzGetGlyphHorizontalAdvance): Using the new container structure for accessing the scaled font.
        (WebCore::harfBuzzGetGlyphExtents): Ditto.
        (WebCore::destroyHarfBuzzFontData): Destroying the container that held the pointers.
        (WebCore::HarfBuzzFace::createFont):
            Initializing the container structure with the pointers
            to the cache that is held in HarfBuzzFace and the cairo scaled font.

2013-02-05  Tony Gentilcore  <tonyg@chromium.org>

        Call XSSAuditor's didBlockScript() for the threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=108726

        Reviewed by Adam Barth.

        This patch causes us to call didBlockScript() on the main thread if the CompactHTML token has XSSInfo.
        To do so, we:
        1. Rename DidBlockScriptRequest to XSSInfo.
        2. Add an OwnPtr<XSSInfo> field to CompactHTMLToken.
        3. Add an isSafeToSendToAnotherThread() method to String and KURL.

        We don't yet populate didBlockScriptRequest on the background thread, but this should just work once we do.

        No new tests because no new functionality.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::pumpTokenizer): Update comment for rename.
        * html/parser/CompactHTMLToken.cpp:
        (SameSizeAsCompactHTMLToken):
        (WebCore::CompactHTMLToken::CompactHTMLToken): Add a copy constructor used by Vector.
        (WebCore::CompactHTMLToken::isSafeToSendToAnotherThread): Include new m_xssInfo field in safety check.
        (WebCore):
        (WebCore::CompactHTMLToken::xssInfo): Added.
        (WebCore::CompactHTMLToken::setXSSInfo): Added.
        * html/parser/CompactHTMLToken.h: Add an OwnPtr<XSSInfo> field to CompactHTMLToken.
        (WebCore):
        (CompactHTMLToken):
        (WTF): Add VectorTraits necessary for copying Vector fields objects that contain an OwnPtr.
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser): Add new didBlockScript() call.
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/XSSAuditor.cpp: Renaming.
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h: Renaming.
        (WebCore):
        (XSSAuditor):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSInfo::isSafeToSendToAnotherThread):
        (WebCore):
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::create):
        (XSSInfo):
        (WebCore::XSSInfo::XSSInfo):
        (XSSAuditorDelegate):
        * platform/KURL.cpp:
        (WebCore::KURL::isSafeToSendToAnotherThread): Added.
        (WebCore):
        * platform/KURL.h:
        (KURL):
        * platform/KURLGoogle.cpp:
        (WebCore):
        (WebCore::KURLGooglePrivate::isSafeToSendToAnotherThread): Added.
        * platform/KURLGooglePrivate.h:
        (KURLGooglePrivate):
        * platform/KURLWTFURLImpl.h:
        (WebCore::KURLWTFURLImpl::isSafeToSendToAnotherThread): Added.

2013-02-05  Anton Vayvod  <avayvod@chromium.org>

        TextAutosizing: adjust the maximum difference between cluster text width and its descendant
        width.
        https://bugs.webkit.org/show_bug.cgi?id=108411

        Currently, if a render object is more than 200 CSS units shorter than its parent cluster, it
        becomes a separate autosizing cluster (see https://bugs.webkit.org/show_bug.cgi?id=105188).
        This doesn't work well for layouts when narrow nodes are related, like nested comments:
        deeper comments are all shorter than the parent cluster and become autosized differently. To
        avoid that the difference that makes a shorter descendant a new autosizing cluster is
        adjusted each time the width difference is not greater than 50 CSS units from the previous
        one. This allows nested comments, for example, to remain a part of the parent cluster and be
        autosized with the same multiplier.
        
        Reviewed by Kenneth Rohde Christiansen.

        Tests:
                fast/text-autosizing/nested-child.html

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizingClusterInfo::TextAutosizingClusterInfo):

            Added a new field to store the current maximum width difference for the cluster.

        (WebCore::TextAutosizer::isAutosizingCluster):

            Uses the new field to determine if the current node is a separate cluster,
            updates the maximum allowed width difference between the cluster and its descendant.

        (WebCore::TextAutosizer::processContainer):
        (WebCore::TextAutosizer::clusterShouldBeAutosized):
        (WebCore::TextAutosizer::measureDescendantTextWidth):

            Non-const reference passed to the methods above.

        * rendering/TextAutosizer.h: updated method parameters.

2013-02-05  Tony Gentilcore  <tonyg@chromium.org>

        Continue making XSSAuditor thread safe: Remove dependency on parser's sourceForToken and TextResourceDecoder
        https://bugs.webkit.org/show_bug.cgi?id=108698

        Reviewed by Adam Barth.

        We'd like to be able to call filterToken() from the BackgroundHTMLParser where there is no HTMLDocumentParser. So we are removing the dependencies of
        filterToken() on the HTMLDocumentParser. This patch brings us one step closer to removing the m_parser member from XSSAuditor by passing in the
        TextResourceDecoder and HTMLSourceTracker to filterToken. To keep the number of parameters from blowing up, this introduces a FilterTokenRequest struct
        to hold its arguments. We expect to add one more member to this struct.


        No new tests because no new functionality.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterToken):
        (WebCore::XSSAuditor::filterStartToken):
        (WebCore::XSSAuditor::filterCharacterToken):
        (WebCore::XSSAuditor::filterScriptToken):
        (WebCore::XSSAuditor::filterObjectToken):
        (WebCore::XSSAuditor::filterParamToken):
        (WebCore::XSSAuditor::filterEmbedToken):
        (WebCore::XSSAuditor::filterAppletToken):
        (WebCore::XSSAuditor::filterIframeToken):
        (WebCore::XSSAuditor::filterMetaToken):
        (WebCore::XSSAuditor::filterBaseToken):
        (WebCore::XSSAuditor::filterFormToken):
        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):
        (WebCore::XSSAuditor::eraseAttributeIfInjected):
        (WebCore::XSSAuditor::decodedSnippetForName):
        (WebCore::XSSAuditor::decodedSnippetForAttribute):
        (WebCore::XSSAuditor::decodedSnippetForJavaScript):
        * html/parser/XSSAuditor.h:
        (WebCore):
        (WebCore::FilterTokenRequest::FilterTokenRequest):
        (FilterTokenRequest):
        (XSSAuditor):

2013-02-05  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] REGRESSION(r137436): It made all inspector tests timeout on developer builds
        https://bugs.webkit.org/show_bug.cgi?id=106554

        Reviewed by Simon Hausmann.

        * Target.pri:

2013-02-05  Peter Rybin  <prybin@chromium.org>

        Web Inspector: prevent crash, add required error string value
        https://bugs.webkit.org/show_bug.cgi?id=108776

        Reviewed by Pavel Feldman.

        Error string is assigned where missing, assert is added where empty string is
        possible.

        * inspector/InjectedScriptBase.cpp:
        (WebCore::InjectedScriptBase::makeEvalCall):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::injectedScriptForEval):

2013-02-05  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Clicking a profile's title in the console loads about:blank.
        https://bugs.webkit.org/show_bug.cgi?id=107949

        Reviewed by Vsevolod Vlasov.

        Quick fix for regression.

        * inspector/front-end/inspector.js:
        Avoid "exit route" when URL is a profile URL.

2013-02-05  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: element.focus() should not focus on disabled sub-fields.
        https://bugs.webkit.org/show_bug.cgi?id=108924

        Reviewed by Kentaro Hara.

        The first field may be non-focusable. We should search sub-fields for
        focusable one.

        Test: fast/forms/date-multiple-fields/date-multiple-fields-focus.html

        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::focusOnNextFocusableField):
        Added. A private helper function.
        (WebCore::DateTimeEditElement::focusIfNoFocus): Use focusOnNextFocusableField.
        (WebCore::DateTimeEditElement::focusByOwner): Ditto.
        (WebCore::DateTimeEditElement::focusOnNextField): Ditto.
        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement): Declare focusOnNextFocusableField.

2013-02-04  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Create separate project for each file system added to inspector.
        https://bugs.webkit.org/show_bug.cgi?id=108652

        Reviewed by Pavel Feldman.

        Every file system added to web inspector is now represented by its own project in workspace.
        FileSystemMapping changed accrodingly.

        Test: inspector/file-system-mapping.html

        * inspector/front-end/FileMapping.js:
        (WebInspector.FileMapping.prototype._entryURIPrefix):
        * inspector/front-end/FileSystemMapping.js:
        (WebInspector.FileSystemMapping.prototype.fileForURI):
        (WebInspector.FileSystemMapping.prototype.uriForFile):
        (WebInspector.FileSystemMapping.prototype.uriPrefixForPathPrefix):
        (WebInspector.FileSystemMappingImpl):
        (WebInspector.FileSystemMappingImpl.prototype._loadFromSettings.get this):
        (WebInspector.FileSystemMappingImpl.prototype._loadFromSettings):
        (WebInspector.FileSystemMappingImpl.prototype._saveToSettings):
        (WebInspector.FileSystemMappingImpl.prototype.set _fileSystemName):
        (WebInspector.FileSystemMappingImpl.prototype.fileSystemId):
        (WebInspector.FileSystemMappingImpl.prototype.addFileSystemMapping):
        (WebInspector.FileSystemMappingImpl.prototype.removeFileSystemMapping):
        (WebInspector.FileSystemMappingImpl.prototype.fileSystemPaths):
        (WebInspector.FileSystemMappingImpl.prototype.fileForURI):
        (WebInspector.FileSystemMappingImpl.prototype.uriForFile):
        (WebInspector.FileSystemMappingImpl.prototype.uriPrefixForPathPrefix):
        * inspector/front-end/FileSystemWorkspaceProvider.js:
        (WebInspector.FileSystemWorkspaceProvider):
        (WebInspector.FileSystemWorkspaceProvider.prototype.innerCallback):
        (WebInspector.FileSystemWorkspaceProvider.prototype.requestFileContent):
        (WebInspector.FileSystemWorkspaceProvider.prototype.setFileContent):
        (WebInspector.FileSystemWorkspaceProvider.prototype._populate.filesLoaded):
        (WebInspector.FileSystemWorkspaceProvider.prototype._populate):
        (WebInspector.FileSystemWorkspaceProvider.prototype._addFile):
        (WebInspector.FileSystemWorkspaceProvider.prototype._removeFile):
        (WebInspector.FileSystemWorkspaceProvider.prototype.reset):
        * inspector/front-end/IsolatedFileSystemModel.js:
        (WebInspector.IsolatedFileSystemModel):
        (WebInspector.IsolatedFileSystemModel.prototype._innerAddFileSystem):
        (WebInspector.IsolatedFileSystemModel.prototype._fileSystemRemoved):
        * inspector/front-end/Workspace.js:
        (WebInspector.Project.prototype.searchInFileContent):
        (WebInspector.Project.prototype.dispose):
        (WebInspector.Workspace.prototype.removeProject):

2013-02-05  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Should not move focus if the element already has focus
        https://bugs.webkit.org/show_bug.cgi?id=108914

        Reviewed by Kentaro Hara.

        If timeInput.focus() is called when a sub-field of the time input
        already has focus, we should not focus on the first sub-field of the
        time input.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-focus.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::willCancelFocus): If
        the input elment already has focused sub-field, we don't need to proceed
        focus handling. FocusDirection check is required because we don't need
        to do this in cases of sequential focus navigation.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Override InputType::willCancelFocus.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::focus):
        Cancel focus if InputType::willCancelFocus returns true.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Override focus.
        * html/InputType.cpp:
        (WebCore::InputType::willCancelFocus):
        Add a default implementation. It returns false.
        * html/InputType.h:
        (InputType): Declare willCancelFocus.

2013-02-05  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] RGB -> BGR is wrong on big endian
        https://bugs.webkit.org/show_bug.cgi?id=107560

        Reviewed by Jocelyn Turcotte.

        Replace the conversion to methods that make it clearer what is going on.
        The routines are also optimized compared to the existing by avoiding going
        over slow Color constructor.

        Tested by existing tests in canvas and fast/canvas.

        * platform/graphics/Color.cpp:
        (WebCore::colorFromPremultipliedARGB):
            Cleanup.
        (WebCore::premultipliedARGBFromColor):
            Cleanup and correct for alpha = 0.
        * platform/graphics/Color.h:
        (WebCore):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::copyColorToRGBA):
        (WebCore::copyRGBAToColor):
        (WebCore::getImageData):
        (WebCore::ImageBuffer::putByteArray):

2013-02-05  JungJik Lee  <jungjik.lee@samsung.com>

        [TexMap] Use visible as initial value of backface-visibility-property.
        https://bugs.webkit.org/show_bug.cgi?id=108875

        Reviewed by Noam Rosenthal.

        According to W3C spec, the initial value of backface-visibility-visibility is visible.
        However TextureMapperLayer's initial value is false which means hidden.
        So this patch is for changing the value to visible(true).

        Covered by existing tests.

        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::State::State): Change the initial value false to true
        to use backface-visibility.

2013-02-05  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] do not store a dropped trace log in backend
        https://bugs.webkit.org/show_bug.cgi?id=108600

        Reviewed by Pavel Feldman.

        Clear memory immediately on dropping current trace log instead of waiting for the next capture command.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2013-02-05  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] UI is not restored properly when deleting a live recording profile
        https://bugs.webkit.org/show_bug.cgi?id=108602

        Reviewed by Pavel Feldman.

        Cancel recording profile of canvas-type when deleting an alive trace log.
        Drive-by: rename ProfileHeader.reset to ProfileHeader.dispose since it's called on header's destruction.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileHeader.prototype.dispose):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileHeader.prototype.dispose):
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):

2013-02-05  Julien Brianceau  <jbrianceau@nds.com>

        Build is broken since r141543 for platforms without OpenGL
        https://bugs.webkit.org/show_bug.cgi?id=108862

        Reviewed by Simon Hausmann.

        * Target.pri:

2013-02-05  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r141865.
        http://trac.webkit.org/changeset/141865
        https://bugs.webkit.org/show_bug.cgi?id=108909

        webkit unit tests are broken

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter):
        (GenerateEventListenerCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::addEventListenerCallback):
        (WebCore::TestEventTargetV8Internal::removeEventListenerCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::addEventListenerCallback):
        (WebCore::TestObjV8Internal::removeEventListenerCallback):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::get):
        (WebCore::set):
        (WebCore::getNthValueOnKeyPath):
        (WebCore::canInjectNthValueOnKeyPath):
        (WebCore::ensureNthValueOnKeyPath):
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::createValueListFromVariantArgs):
        (_NPN_Invoke):
        (_NPN_InvokeDefault):
        (_NPN_SetProperty):
        (_NPN_Construct):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::compileAndRunScript):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptSourceCode.cpp:
        (WebCore::ScriptSourceCode::compileScript):
        * bindings/v8/ScriptSourceCode.h:
        (ScriptSourceCode):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        (WebCore::npObjectGetProperty):
        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertNPVariantToV8Object):
        * bindings/v8/V8NPUtils.h:
        (WebCore):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::createHiddenDependency):
        (WebCore::removeHiddenDependency):
        (WebCore::transferHiddenDependency):
        * bindings/v8/V8Utilities.h:
        (WebCore):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallback):
        (WebCore::V8DOMWindow::removeEventListenerCallback):

2013-02-05  Mike West  <mkwst@chromium.org>

        Cleanup: Use exceptionless Range::* methods rather than ignoring exceptions.
        https://bugs.webkit.org/show_bug.cgi?id=108773

        Reviewed by Darin Adler.

        We often call Range::{start,end}{Container,Offset} with an ExceptionCode
        that's completely ignored. In these cases, we should simply use the
        exceptionless version of the method instead.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
            Here, I also moved parameters onto one line to make the
            stylebot happy.
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        (WebCore::DocumentMarkerController::setMarkersActive):
            Dropped ignored ExceptionCode variable entirely.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
            Can't drop the variable because of the selectNodeContents call.
        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange):
            Dropped ignored ExceptionCode variable entirely.
        (WebCore::Editor::advanceToNextMisspelling):
            Can't drop the variable because of setStart/setEnd.
        * editing/EditorCommand.cpp:
        (WebCore::unionDOMRanges):
            Can't drop the variable because of compareBoundaryPoints.
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendNodeValue):
            Dropped ignored ExceptionCode variable entirely.
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingParagraph::offsetAsRange):
        (WebCore::TextCheckingHelper::findFirstMisspelling):
        (WebCore::TextCheckingHelper::findFirstGrammarDetail):
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::renderedText):
        (WebCore::StyledMarkupAccumulator::stringValueForRange):
            Dropped ignored ExceptionCode variable entirely.
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
            Can't drop the variable due to many other calls.
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::deleteFromDocument):
        (WebCore::DOMSelection::containsNode):
            For both these cases, the 'ASSERT(!ec)' after the statement I've
            edited only checked the last occurance of the exception: that is,
            if 'startXxx(ec)' threw an exception, it would be overwritten by
            the 'setBaseAndExtend()' or 'compareBoundaryPoints()' exception.
            Removing the exception parameters from the parameters' calls
            shouldn't effect behavior.
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):
        * platform/mac/HTMLConverter.mm:
        (+[WebHTMLConverter editingAttributedStringFromRange:]):
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writeRange):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection):
        * platform/wince/PasteboardWinCE.cpp:
        (WebCore::Pasteboard::writeSelection):
            Dropped ignored ExceptionCode variable entirely.

2013-02-05  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector:  introduce Memory.getDOMCounters
        https://bugs.webkit.org/show_bug.cgi?id=108822

        Reviewed by Pavel Feldman.

        Introduced Memory.getDOMCounters command that returns number of Documents, Nodes
        and JS event listeners in the inspected process.

        * inspector/Inspector.json:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getDOMCounters):
        (WebCore):
        * inspector/InspectorMemoryAgent.h:
        (InspectorMemoryAgent):

2013-02-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: rename Image m_data member to m_encodedImageData for the consistency
        https://bugs.webkit.org/show_bug.cgi?id=108913

        Reviewed by Yury Semikhatsky.

        No new tests because no API changes.

        * platform/graphics/Image.cpp:
        (WebCore::Image::setData):
        (WebCore::Image::reportMemoryUsage):
        * platform/graphics/Image.h:
        (WebCore::Image::data):
        (Image):

2013-02-05  Hajime Morrita  <morrita@google.com>

        Unreviewed Linux ASAN build fix for r141783.

        * platform/RefCountedSupplement.h:
        (Wrapper):
        * platform/Supplementable.h:
        (Supplement):

2013-02-05  Mike West  <mkwst@chromium.org>

        [chromium] Unreviewed: Fix broken SVG-disabled build.
        https://bugs.webkit.org/show_bug.cgi?id=108916

        The new enum value CSSPropertyWebkitGridAutoFlow was introduced in
        r141787, and accidentally left out of CSSParser::parseValue's big
        switch. This causes problems in non-SVG builds.

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

2013-02-05  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update RTCPeerConnections stream accessors to match the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=108179

        Reviewed by Adam Barth.

        http://dev.w3.org/2011/webrtc/editor/webrtc.html#interface-definition
        The attributes localStreams and remoteStreams have been changes to the methods
        getLocalStreams() and getRemoteStreams() which return a native array instead.

        Existing tests updated to cover patch.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/MediaStream.h:
        (WebCore):
        * Modules/mediastream/MediaStreamList.cpp: Removed.
        * Modules/mediastream/MediaStreamList.h: Removed.
        * Modules/mediastream/MediaStreamList.idl: Removed.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::removeStream):
        (WebCore::RTCPeerConnection::getLocalStreams):
        (WebCore::RTCPeerConnection::getRemoteStreams):
        (WebCore::RTCPeerConnection::didAddRemoteStream):
        (WebCore::RTCPeerConnection::didRemoveRemoteStream):
        * Modules/mediastream/RTCPeerConnection.h:
        (RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.idl:
        * WebCore.gypi:

2013-02-05  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [Qt][EFL][WebGL] Webgl doesn't work on nvidia cards
        https://bugs.webkit.org/show_bug.cgi?id=108059

        Reviewed by Kenneth Rohde Christiansen.

        Commit r138327 fixed repainting issues on mesa3d GL library by re-binding
        texture to the window after every glXSwapBuffer. Unfortunatelly re-bind
        breaks rendering on NVidia cards with NVidia propiertary drivers.
        This change limits texture re-binding only for mesa3d GL library.

        No new tests. HW specific fix.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::OffScreenRootWindow::isMesaGLX):
        (OffScreenRootWindow):
        (WebCore::GraphicsSurface::platformSwapBuffers):

2013-02-05  Praveen Jadhav  <praveen.j@samsung.com>

        Floating point precision error in AudioPannerNode.
        https://bugs.webkit.org/show_bug.cgi?id=106001

        Reviewed by Kentaro Hara.

        Specifications Update: 
        https://dvcs.w3.org/hg/audio/rev/69a39a516e45

        Conversion from double to float and back to double
        results in precision error. Avoiding these conversions
        will make sure that proper values are retained in the
        parameters.

        * Modules/webaudio/PannerNode.h:
        (WebCore::PannerNode::refDistance):
        (WebCore::PannerNode::setRefDistance):
        (WebCore::PannerNode::maxDistance):
        (WebCore::PannerNode::setMaxDistance):
        (WebCore::PannerNode::rolloffFactor):
        (WebCore::PannerNode::setRolloffFactor):
        (WebCore::PannerNode::coneInnerAngle):
        (WebCore::PannerNode::setConeInnerAngle):
        (WebCore::PannerNode::coneOuterAngle):
        (WebCore::PannerNode::setConeOuterAngle):
        (WebCore::PannerNode::coneOuterGain):
        (WebCore::PannerNode::setConeOuterGain):
        * Modules/webaudio/PannerNode.idl:

2013-02-05  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Use disabled attribute internally instead of readonly attribute
        https://bugs.webkit.org/show_bug.cgi?id=108911

        Reviewed by Kentaro Hara.

        Use 'disabled' attribute for shadow elements for <input> with
        multiple-fields UI instead of 'readonly' attribute because 'readonly'
        attribute represents focusable-but-non-editable state in HTML though
        we'd like to represent non-focusable-and-non-editable state.

        The summary of changes:
        - Use 'disabled' attribute instead of 'readonly' attribute for DateTimeFieldElement,
        - Rename C++ functions for it,
        - Call isFocusable instead of isReadOnly to check focusable state.

        No new tests. This doesn't make user-visible behavior changes.

        * css/html.css:
        Replace [readonly] with [disabled] for sub-fields.
        * html/shadow/DateTimeEditElement.cpp:
        (DateTimeEditBuilder):
        (WebCore::DateTimeEditBuilder::visitField):
        (WebCore::DateTimeEditBuilder::shouldDayOfMonthFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldHourFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldMillisecondFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldMinuteFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldSecondFieldDisabled):
        (WebCore::DateTimeEditBuilder::shouldYearFieldDisabled):
        (WebCore::DateTimeEditElement::anyEditableFieldsHaveValues):
        (WebCore::DateTimeEditElement::focusOnNextField): Use isFocusable.
        (WebCore::DateTimeEditElement::focusOnPreviousField): Use isFocusable.
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::isFocusable):
        (WebCore::DateTimeFieldElement::isDisabled):
        (WebCore::DateTimeFieldElement::setDisabled):
        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement): Make isFocusable public in order that
        DateTimeEditElement can call it.
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::handleKeyboardEvent):
        (WebCore::DateTimeNumericFieldElement::setEmptyValue):
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::setEmptyValue):

2013-02-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Reduce usage of deprecatedString() and deprecatedInteger()
        https://bugs.webkit.org/show_bug.cgi?id=108909

        Reviewed by Adam Barth.

        By passing an Isolate parameter around, we can reduce usage of
        deprecated methods.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter):
        (GenerateEventListenerCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::addEventListenerCallback):
        (WebCore::TestEventTargetV8Internal::removeEventListenerCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::addEventListenerCallback):
        (WebCore::TestObjV8Internal::removeEventListenerCallback):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::get):
        (WebCore::set):
        (WebCore::getNthValueOnKeyPath):
        (WebCore::canInjectNthValueOnKeyPath):
        (WebCore::ensureNthValueOnKeyPath):
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::createValueListFromVariantArgs):
        (_NPN_Invoke):
        (_NPN_InvokeDefault):
        (_NPN_SetProperty):
        (_NPN_Construct):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::compileAndRunScript):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore):
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptSourceCode.cpp:
        (WebCore::ScriptSourceCode::compileScript):
        * bindings/v8/ScriptSourceCode.h:
        (ScriptSourceCode):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        (WebCore::npObjectGetProperty):
        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertNPVariantToV8Object):
        * bindings/v8/V8NPUtils.h:
        (WebCore):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::createHiddenDependency):
        (WebCore::removeHiddenDependency):
        (WebCore::transferHiddenDependency):
        * bindings/v8/V8Utilities.h:
        (WebCore):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallback):
        (WebCore::V8DOMWindow::removeEventListenerCallback):

2013-02-04  Dean Jackson  <dino@apple.com>

        [Mac] Captions menu should indicate language and type of track
        https://bugs.webkit.org/show_bug.cgi?id=108882

        Reviewed by Eric Carlson.

        On Mac, we want a specific format for menu items in a caption list. Since
        other ports might want different formats, move the generation of the label
        into CaptionsUserPreferences where it can be overridden.

        This required CaptionsUserPreferences to become public on the PageGroup, so
        it could be used when creating the menu. Also, since CaptionsUserPreferences
        was hidden on Mountain Lion and below, be a little more specific about
        which pieces can be seen on which builds.

        Covered by exisiting media/video-controls-captions-trackmenu tests.

        * English.lproj/Localizable.strings: Remove textTrackClosedCaptionsText.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu): Build only
            one section and get the track's display name from the user preferences.
        * page/CaptionUserPreferences.h:
        (WebCore::CaptionUserPreferences::displayNameForTrack): Default implementation of
            virtual function that provides a label for a captions menu item.
        * page/CaptionUserPreferencesMac.h: Add the new virtual function, and expose just
            a bit of this class outside 10.9 builds.
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::CaptionUserPreferencesMac): Guard features for system version.
        (WebCore::CaptionUserPreferencesMac::~CaptionUserPreferencesMac): Ditto.
        (WebCore::CaptionUserPreferencesMac::displayNameForTrack): New OS X-specific method that
            returns a string for the menu label.
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferences): Unguard for system version.
        * page/PageGroup.h: Make captionPreferences public.
        * platform/LocalizedStrings.cpp: Remove textTrackClosedCaptionsText - not needed any more.
        * platform/LocalizedStrings.h: Remove textTrackClosedCaptionsText.

2013-02-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to V8DOMConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=108900

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateToV8Converters):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::createWrapper):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::V8Float64Array::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::createWrapper):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::ConfigureV8TestCustomNamedGetterTemplate):
        (WebCore::V8TestCustomNamedGetter::createWrapper):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::ConfigureV8TestEventConstructorTemplate):
        (WebCore::V8TestEventConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::createWrapper):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::ConfigureV8TestExceptionTemplate):
        (WebCore::V8TestException::createWrapper):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::createWrapper):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):
        (WebCore::V8TestMediaQueryListListener::createWrapper):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::ConfigureV8TestNamedConstructorTemplate):
        (WebCore::V8TestNamedConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::ConfigureV8TestNodeTemplate):
        (WebCore::V8TestNode::createWrapper):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::V8TestNode::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::installPerContextProperties):
        (WebCore::V8TestObj::createWrapper):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::ConfigureV8TestOverloadedConstructorsTemplate):
        (WebCore::V8TestOverloadedConstructors::createWrapper):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (WebCore::V8TestOverloadedConstructors::installPerContextProperties):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::createWrapper):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::installPerContextProperties):
        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::batchConfigureAttributes):
        (WebCore::V8DOMConfiguration::batchConfigureConstants):
        (WebCore::V8DOMConfiguration::batchConfigureCallbacks):
        (WebCore::V8DOMConfiguration::configureTemplate):
        * bindings/v8/V8DOMConfiguration.h:
        (V8DOMConfiguration):
        (WebCore::V8DOMConfiguration::configureAttribute):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):

2013-02-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Clean up CodeGeneratorV8.pm by introducing HasCustom{Getter,Setter,Method}
        https://bugs.webkit.org/show_bug.cgi?id=108896

        Reviewed by Adam Barth.

        No tests. No change in generated code.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (HasCustomGetter):
        (HasCustomSetter):
        (HasCustomMethod):
        (GetFunctionTemplateCallbackName):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        (RequiresCustomSignature):

2013-02-04  Kent Tamura  <tkent@chromium.org>

        Fix crash by <select> type change on focus
        https://bugs.webkit.org/show_bug.cgi?id=108830

        Reviewed by Abhishek Arya.

        Test: fast/forms/select/select-change-type-on-focus.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        focus() calls may change the renderer type.

2013-02-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to opaqueRootForGC()
        https://bugs.webkit.org/show_bug.cgi?id=108886

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOpaqueRootForGC):
        (GenerateHeader):
        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::opaqueRootForGC):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WebCore::WrapperTypeInfo::opaqueRootForGC):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::opaqueRootForGC):

2013-02-04  Wei James  <james.wei@intel.com>

        Heap-buffer-overflow in WebCore::AudioBufferSourceNode::process
        https://bugs.webkit.org/show_bug.cgi?id=108515

        After calling setBuffer() with a buffer having a different number of
        channels, there can in rare cases be a slight delay before the output
        bus is updated to the new number of channels because of use of
        tryLocks() in the context's updating system.
        In this case, if the the buffer has just been changed and we're
        not quite ready yet then just output silence.

        Reviewed by Chris Rogers.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::renderFromBuffer):

2013-02-04  James Simonsen  <simonjam@chromium.org>

        [Chromium] Add a signal for when the body is inserted in the document
        https://bugs.webkit.org/show_bug.cgi?id=108725

        Reviewed by Adam Barth.

        This is an important signal for resource scheduling. We know we have enough to paint something,
        so we can start kicking off image preloads.

        Test: Chromium webkit_unit_tests

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        (WebCore::FrameLoaderClient::dispatchWillInsertBody):

2013-02-04  Benjamin Poulain  <bpoulain@apple.com>

        Kill suspendAnimation(), resumeAnimation() and numberOfActiveAnimations() from DRT/WTR; use Internals
        https://bugs.webkit.org/show_bug.cgi?id=108741

        Reviewed by Tony Chang.

        Move suspendAnimations and resumeAnimations to group all the animation related
        code together.

        Add support for numberOfActiveAnimations, similarily to the feature previously defined
        in TestRunner.

        * testing/Internals.cpp:
        (WebCore::Internals::numberOfActiveAnimations):
        (WebCore):
        (WebCore::Internals::suspendAnimations):
        (WebCore::Internals::resumeAnimations):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-02-04  Nayan Kumar K  <nayankk@motorola.com>

        [WEBGL] Rename WEBKIT_WEBGL_compressed_texture_s3tc to WEBGL_compressed_texture_s3tc
        https://bugs.webkit.org/show_bug.cgi?id=108866

        Reviewed by Kenneth Russell.

        WEBGL_compressed_texture_s3tc is one of the community approved WebGL extension.
        Hence remove the vendor prefix from WEBKIT_WEBGL_compressed_texture_s3tc.
        Specification: http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/

        No tests currently present to test WEBKIT_WEBGL_compressed_texture_s3tc.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLCompressedTextureS3TC.cpp:
        (WebCore::WebGLCompressedTextureS3TC::getName):
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::getExtension):

2013-02-04  Nayan Kumar K  <nayankk@motorola.com>

        [WEBGL] Rename WEBKIT_WEBGL_lose_context to WEBGL_lose_context.
        https://bugs.webkit.org/show_bug.cgi?id=108694

        Reviewed by Kenneth Russell.

        WEBGL_lose_context is one of the community approved WebGL extension.
        Hence remove the vendor prefix from WEBKIT_WEBGL_lose_context extension.
        Spefication: http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/

        Tests already exists, modified them to verify the change in extension name.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLLoseContext.cpp:
        (WebCore::WebGLLoseContext::getName):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):

2013-02-04  Dean Jackson  <dino@apple.com>

        Default element styles are not always collected for sharing detection
        https://bugs.webkit.org/show_bug.cgi?id=108404

        Reviewed by Antti Koivisto.

        The method ensureDefaultStyleSheetsForElement is run as we add elements
        to the document. This may update the defaultStyle of the document, but
        does not recollect any changes into the StyleResolver. This means that
        style sharing might be overly ambitious, thinking it can share a style
        for an element which was matched in the new rules. This showed up most
        often in the Shadow Root for media elements, which would add a set of
        style rules, but the shadow children would sometimes share styles even
        when they shouldn't.

        The fix is to detect if we need to collect after adding a
        style for an element. This might cause a little more work, but
        in my testing it doesn't happen very often.

        Unfortunately it is hard to get a reproducible test for this.

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement): As we load in
            styles, keep track of whether or not we change the default style.
        * css/CSSDefaultStyleSheets.h:
        (CSSDefaultStyleSheets): New boolean parameter indicating if the style has changed.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement): Collect features if the element
            caused the default style to update.
        (WebCore::StyleResolver::collectFeatures): Protect for null in updates.

2013-02-04  Jun Jiang  <jun.a.jiang@intel.com>

        Fix the issue that some possible source formats are ignored for float textures in texture packing for CG port
        https://bugs.webkit.org/show_bug.cgi?id=108812

        Reviewed by Kenneth Russell.

        Already covered by latest WebGL conformance test.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore):

2013-02-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Remove needless local variables in LocalizedStringsEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=108869

        Reviewed by Kentaro Hara.

        fromUTF8() returns static String. So, we don't need to use needless local variables.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagDelete):
        (WebCore::contextMenuItemTagSelectAll):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):

2013-02-04  Jun Jiang  <jun.a.jiang@intel.com>

        WebGL: Move the format conversion for 16-bit per channel formats into Core Graphics port only
        https://bugs.webkit.org/show_bug.cgi?id=108304

        Reviewed by Kenneth Russell.

        Since the 16-bit per channel formats are only used for Core Graphics port in WebGL and not a standard to represent any file format that is widely used 
        for each platform, it is better to limit and hide this kinds of information and processing in CG specific code only. 
        It can make the code more clear and reduce the binary size for both CG port and non-CG port.

        Already covered by current tests.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore):
        * platform/graphics/GraphicsContext3D.h:
        (GraphicsContext3D):
        (WebCore::GraphicsContext3D::srcFormatComeFromDOMElementOrImageData):
        (ImageExtractor):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

2013-02-04  Dean Jackson  <dino@apple.com>

        Allow TextTracks to be marked as closed captions
        https://bugs.webkit.org/show_bug.cgi?id=108856

        Reviewed by Darin Adler.

        While this isn't exposed directly in markup, some platform media frameworks can
        provide indication that a caption track is a closed caption. Expose such a flag
        on TextTrack and platforms can show a different UI if they want to.

        No tests - this isn't used elsewhere yet, nor exposed to the DOM.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Initialise new member.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::isClosedCaptions): New member variable.
        (WebCore::TextTrack::setIsClosedCaptions):

2013-02-04  Chris Hopman  <cjhopman@chromium.org>

        Make moveCaretTowardsWindowPoint not snap to the beginning/end when moved above/below editable
        https://bugs.webkit.org/show_bug.cgi?id=107850

        Reviewed by Ojan Vafai.

        On Android, EditingBehavior::shouldMoveCaret[...] controls the
        behavior of insertion handles. This change adds a new Android specific
        editing behavior type.

        The new EditingBehavior is the same as EditingUnixBehavior except for
        EditingBehavior::shouldMoveCaret[...]. This new behavior fixes
        WebFrame::moveCaretTowardsWindowPoint to not span to the
        beginning/end.

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldMoveCaretToHorizontalBoundaryWhenPastTopOrBottom):
        (WebCore::EditingBehavior::shouldAllowSpellingSuggestionsWithoutSelection):
        (WebCore::EditingBehavior::shouldNavigateBackOnBackspace):
        * editing/EditingBehaviorTypes.h:
        * page/Settings.cpp:
        (WebCore):
        (WebCore::editingBehaviorTypeForPlatform):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setEditingBehavior):

2013-02-04  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Focus order is not controllable by tabIndex attribute on <input>
        https://bugs.webkit.org/show_bug.cgi?id=108447

        Reviewed by Hajime Morita.

        We make <input> elements with the multiple-fields UI focusable.
         - However, we don't want to change the existing focus behavior for
           multiple-fields <input>. We'd like to focus on the last sub-field of
           an<input> with Shift + TAB focus navigation, and focus on the first
           sub-field of the <input> otherwise. So, we move focus immediately
           after the <input> gets focus.
         - We don't need the isFocusableByClickOnLabel hack any more. <input>
           elements with the multiple-fields UI are mouse-focusable.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-tabindex.html

        * html/InputType.h:
        (InputType): Add FocusDirection argument to handleFocusEvent, and remove
        unnecessary isFocusableByClickOnLabel and focus.
        * html/InputType.cpp:
        (WebCore::InputType::handleFocusEvent): Ditto.
        * html/PasswordInputType.cpp:
        (WebCore::PasswordInputType::handleFocusEvent): Follow the argument change.
        * html/PasswordInputType.h:
        (PasswordInputType): Ditto.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::handleFocusEvent):
        If this element gets focus by FocusDirectionBackward (it means the focus
        is moved from the first sub-field of the element,) move the focus
        backward once more. Otherwise, we focus on the first sub-filed of the
        element.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isKeyboardFocusable):
        Make this keyboard-focusable. We have a wrong test to ensure read-only
        input does NOT get focus. We'll address it later.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isMouseFocusable):
        Make this mouse-focusable.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):

        * html/HTMLInputElement.h:
        (HTMLInputElement): Remove defaultFocus, focus, and isFocusableByClickOnLabel.
        Add missing OVERRIDE to handleFocusEvent.
        * html/HTMLInputElement.cpp: Remove unnecessary functions.
        (WebCore::HTMLInputElement::handleFocusEvent):
        Pass FocusDirection value to InputTYpe::handleFocusEvent.

        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler):
        Use isMouseFocusable().
        * html/HTMLElement.cpp: Remove unnecessary isFocusableByClickOnLabel.
        * html/HTMLElement.h: Ditto.

2013-02-04  Seulgi Kim  <seulgikim@company100.net>

        Coordinated Graphics: crash in TiledBackingStore::adjustForContentsRect
        https://bugs.webkit.org/show_bug.cgi?id=107639

        Reviewed by Kenneth Rohde Christiansen.

        In TiledBackingStore::adjustForContentsRect method, inflating is not
        needed when there is no intersections between the cover/keep rect and
        the content rect.

        No new tests, no change in functionality.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::adjustForContentsRect):

2013-02-04  Stephen White  <senorblanco@chromium.org>

        [skia] Remove use of SkSingleInputImageFilter.
        https://bugs.webkit.org/show_bug.cgi?id=108867

        Reviewed by James Robinson.

        This class is but a hollow shell of its former self, and has
        been removed in Skia.

        Covered by existing tests in css3/filters.

        * platform/graphics/filters/skia/DropShadowImageFilter.cpp:
        (WebCore::DropShadowImageFilter::DropShadowImageFilter):
        (WebCore::DropShadowImageFilter::onFilterImage):
        * platform/graphics/filters/skia/DropShadowImageFilter.h:

2013-01-31  Kentaro Hara  <haraken@chromium.org>

        Implement WheelEvent::deltaMode
        https://bugs.webkit.org/show_bug.cgi?id=108455

        Reviewed by Adam Barth.

        Per the spec, WheelEvent::deltaMode should return
        DOM_DELTA_PIXEL or DOM_DELTA_LINE or DOM_DELTA_PAGE.

        Spec: http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
        https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#constructor-wheelevent

        Test: fast/event/wheel-event-constructor.html

        * dom/WheelEvent.cpp:
        (WebCore::WheelEventInit::WheelEventInit):
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWheelEvent):
        (WebCore::deltaMode):
        * dom/WheelEvent.h:
        (WheelEventInit):
        (WebCore::WheelEvent::create):
        (WebCore::WheelEvent::deltaMode):
        (WheelEvent):
        * dom/WheelEvent.idl:
        * page/EventHandler.cpp:
        (WebCore::wheelGranularityToScrollGranularity):

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

        [Soup] Remove duplicate setting of first party for cookies
        https://bugs.webkit.org/show_bug.cgi?id=108814

        Reviewed by Martin Robinson.

        Covered by existing tests.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupMessageForHandleAndRequest): there is no need to set
        the first party for cookies here, since that is already done in
        ResourceRequest::updateSoupMessage, which is called a few lines before.

2013-02-04  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GStreamer][Soup] Let GStreamer provide the buffer data is downloaded to, to avoid copying
        https://bugs.webkit.org/show_bug.cgi?id=105552

        Reviewed by Philippe Normand.

        Makes it possible for the GStreamer media backend to provide the buffer to which
        the Soup networking backend will use to download data to. This makes copying
        memory unnecessary when ResourceHandle hands data over to the media player's
        StreamingClient. Thanks to Dan Winship for help designing the interface.

        No behaviour change, covered by existing tests.

        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        (createGstBufferForData): New helper to create a GstBuffer when
        we have a data pointer and a length.
        (getGstBufferSize): Abstract obtaining the size of the buffer, so the code
        is cleaner while still working for both GST 0.10 and 1.0.
        (setGstBufferSize): Ditto, but for setting the size.
        (getGstBufferDataPointer): Ditto, but for grabbing the data pointer.
        (mapGstBuffer): Convenience method to take care of mapping the buffer so that
        we can provide the data pointer to ResourceHandle.
        (unmapGstBuffer): Convenience method which takes care of unmapping the buffer
        and properly freeing the GstMapInfo.
        * platform/graphics/gstreamer/GStreamerVersioning.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient): New methods.
        (_WebKitWebSrcPrivate): We now store the GstBuffer we provided the data pointer from
        so we can later unmap it and push it to the pipeline.
        (webKitWebSrcDispose): Deal with the GstBuffer in case it exists when the source is
        destroyed.
        (webKitWebSrcStop): Also clear the GstBuffer in this case.
        (StreamingClient::didReceiveData): Handle the hand-over of the buffer.
        (StreamingClient::getBuffer): Provide ResourceHandle with a new GstBuffer's data pointer.
        * platform/network/ResourceHandleClient.h:
        (ResourceHandleClient):
        (WebCore::ResourceHandleClient::ResourceHandleClient): Constructor to initialize the buffer
        member variable to 0.
        (WebCore::ResourceHandleClient::~ResourceHandleClient): Destructor to free the buffer if it
        has been allocated.
        (WebCore::ResourceHandleClient::getBuffer): Default implementation which returns a
        newly allocated char pointer.
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (ResourceHandleInternal): Store actual buffer size, which is no longer a constant.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupSoupRequestOperation): Clear the buffer pointer, the life-cycle of the
        buffer is handled by the ResourceHandleClient.
        (WebCore::nextMultipartResponsePartCallback): Get a new buffer from the client before reading.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::readCallback): Ditto.

2013-02-04  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Move WorkerContextProxy to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=108847

        Reviewed by Adam Barth.

        Part of a larger refactoring series; see tracking bug 106829.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * workers/chromium: Added.
        * workers/chromium/WorkerContextProxyChromium.cpp: Added.
        (WebCore):
        (WebCore::setWorkerContextProxyCreateFunction):
        (WebCore::WorkerContextProxy::create):
        * workers/chromium/WorkerContextProxyChromium.h: Added.
        (WebCore):

2013-02-04  Dima Gorbik  <dgorbik@apple.com>

        WebVTT <i>, <b> and <u> elements should have default styles
        https://bugs.webkit.org/show_bug.cgi?id=107214

        Reviewed by Darin Adler.

        Added default styles for basic webvtt object types.

        Test: media/track/track-css-matching-default.html

        * css/mediaControls.css:
        (video::-webkit-media-text-track-container b):
        (video::-webkit-media-text-track-container u):
        (video::-webkit-media-text-track-container i):

2013-02-04  Abhishek Arya  <inferno@chromium.org>

        Add ASSERT_WITH_SECURITY_IMPLICATION to detect out of bounds access
        https://bugs.webkit.org/show_bug.cgi?id=108668

        Reviewed by Eric Seidel.

        * bindings/v8/SerializedScriptValue.cpp:
        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseCalc):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::fillImageSet):
        (WebCore::CSSImageSetValue::customCssText):
        * css/CSSParserValues.h:
        (WebCore::CSSParserString::operator[]):
        * css/CSSValueList.h:
        (WebCore::CSSValueListInspector::item):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::ruleAt):
        (WebCore::StyleSheetContents::wrapperInsertRule):
        (WebCore::StyleSheetContents::wrapperDeleteRule):
        * dom/Document.cpp:
        (WebCore::Document::processArguments):
        * dom/Element.cpp:
        (WebCore::Element::removeAttributeInternal):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::removeAttribute):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::attributeItem):
        * dom/SpaceSplitString.h:
        (WebCore::SpaceSplitStringData::operator[]):
        (WebCore::SpaceSplitString::operator[]):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::characterAt):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::removeFormElement):
        * html/HTMLSelectElementWin.cpp:
        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::swapTo):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::styleSheetTextWithChangedStyle):
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::replaceProperty):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorArrayBase::get):
        * page/WindowFeatures.cpp:
        (WebCore::WindowFeatures::WindowFeatures):
        * platform/audio/AudioArray.h:
        (WebCore::AudioArray::at):
        * platform/audio/AudioFIFO.cpp:
        (WebCore::AudioFIFO::findWrapLengths):
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::glyphAt):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::operator[]):
        (WebCore::TextRun::data8):
        (WebCore::TextRun::data16):
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setDrawRange):
        * platform/graphics/openvg/TiledImageOpenVG.cpp:
        (WebCore::TiledImageOpenVG::setTile):
        (WebCore::TiledImageOpenVG::tile):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        (WebCore::ICOImageDecoder::imageTypeAtIndex):
        * platform/text/QuotedPrintable.cpp:
        (WebCore::lengthOfLineEndingAtIndex):
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::advance):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):

2013-02-04  Nate Chapin  <japhet@chromium.org>

        REGRESSION (r137607): Loading of archives as substitute data is broken
        https://bugs.webkit.org/show_bug.cgi?id=108589

        Reviewed by Alexey Proskuryakov.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::resourceData): Return the content from
            SubstituteData as mainResourceData if present.

2013-02-04  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Heap-buffer-overflow in std::sort
        https://bugs.webkit.org/show_bug.cgi?id=108834

        Reviewed by Abhishek Arya.

        Test: fast/css-grid-layout/grid-strict-ordering-crash.html

        * rendering/RenderGrid.cpp:
        (WebCore::sortByGridTrackGrowthPotential):
        The std::sort documentation says that this function should define a *strict* weak ordering. Fixed the strict
        part of the ordering. Also moved the function definition next to where it is needed and made the GridTrack
        argument const (as it shouldn't modify them or std::sort will misbehave).

        * rendering/RenderGrid.cpp:
        (WebCore::sortByGridTrackGrowthPotential):
        (WebCore):

2013-02-04  Igor Oliveira  <igor.o@sisa.samsung.com>

        [Texmap] Implement BGRA swizzling detection
        https://bugs.webkit.org/show_bug.cgi?id=81103

        For OpenGLES if the extension EXT_texture_format_BGRA8888 is supported
        the internal and external formats need to be BGRA.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore):
        (WebCore::driverSupportsExternalTextureBGRA):
        (WebCore::driverSupportsSubImage):
        (WebCore::BitmapTextureGL::didReset):

2013-02-04  Dima Gorbik  <dgorbik@apple.com>

        class="cue" is getting some default style
        https://bugs.webkit.org/show_bug.cgi?id=108752

        Reviewed by Dean Jackson.
        
        The value variable inside the selector is used to store different information depending on the 
        type of the selector so we have to check explicitly that the selector we apply filtering to 
        matches a pseudo element.
        
        Existing tests modified to cover this case.

        * css/RuleSet.cpp:
        (WebCore::determinePropertyWhitelistType):

2013-02-04  Tom Sepez  <tsepez@chromium.org>

        [V8] Binding Integrity crash in V8HTMLEmbedElement::createWrapper
        https://bugs.webkit.org/show_bug.cgi?id=108841

        Reviewed by Adam Barth.

        * html/HTMLEmbedElement.idl:
        Quick change to IDL to disable binding check for now.
        
2013-02-04  Martin Robinson  <mrobinson@igalia.com>

        Fix GTK+ 'make dist' in preparation for the 1.11.5 release.

        * GNUmakefile.list.am:

2013-02-04  Enrica Casucci  <enrica@apple.com>

        Add specific EditActions for Bold and Italic commands.
        https://bugs.webkit.org/show_bug.cgi?id=108842.
        <rdar://problem/13098252>

        This change is required on iOS where we need to
        identify the command in order to display the correct
        message in the undo popup. It is also in line with
        what we do for underline, which already has its own
        separate EditAction.
        
        Reviewed by Ryosuke Niwa.

        No new tests. No behavior change.

        * editing/EditAction.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleBold):
        (WebCore::executeToggleItalic):

2013-02-04  Dima Gorbik  <dgorbik@apple.com>

        Implemet :lang() pseudo class support for the WebVTT ::cue pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=105478

        Reviewed by Antti Koivisto.

        In WebVTT lang is preprocessed and stored in the lang attribute of the element, 
        so we access it instead of walking up the tree the way it is done in HTML.

        Existing tests were modified to cover this case.

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

2013-02-04  Tim Horton  <timothy_horton@apple.com>

        Disable autoscrolling the main frame if main frame scrolling is disabled
        https://bugs.webkit.org/show_bug.cgi?id=108848
        <rdar://problem/13004059>

        Reviewed by Simon Fraser.

        Ensure that the main frame can scroll at all before allowing an autoscroll.

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

2013-02-04  Tom Sepez  <tsepez@chromiium.org>

        XSS Auditor bypass via svg tags and xlink:href
        https://bugs.webkit.org/show_bug.cgi?id=84158

        This patch adds a test for the xlink:href attribute inside of
        script tokens. The test is complicated by the namespacing; the
        xlink hrefAttr qualified name does not contain a literal "xlink"
        prefix but only the URI of the namespace.
        
        Reviewed by Adam Barth.

        Test: http/tests/security/xssAuditor/svg-script-tag.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::findAttributeWithName):
        (WebCore::XSSAuditor::filterScriptToken):

2013-02-04  Eric Carlson  <eric.carlson@apple.com>

        Update CaptionUserPreferences
        https://bugs.webkit.org/show_bug.cgi?id=108783

        Reviewed by Dean Jackson.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Mark font size as important
            when necessary.
        * page/CaptionUserPreferences.h:
        (WebCore::CaptionUserPreferences::setUserPrefersCaptions): New, allow a port to remember that
            the user has chosen to see captions.
        (WebCore::CaptionUserPreferences::setPreferredLanguage): New, allow a port to remember the
            user's preferred caption language.
        (WebCore::CaptionUserPreferences::preferredLanguages): New, return a Vector of the user's 
            preferred caption languages.
        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferences):
        (WebCore::PageGroup::captionFontSizeScale):
        * page/PageGroup.h:
        * platform/Language.cpp:
        (WebCore::userPreferredLanguagesOverride): New, return the user preferred languages override
            used during testing.
        * platform/Language.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::kind):

2013-02-04  Tim Horton  <timothy_horton@apple.com>

        Allow TiledCoreAnimationDrawingArea overlay layers to become tiled
        https://bugs.webkit.org/show_bug.cgi?id=108729
        <rdar://problem/13047546>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly): The "for this layer only" variant
        of flushCompositingState wasn't informing its client that it committed changes for the layer.
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): We now explicitly want to be able to have a
        GraphicsLayerCA switch into or out of tiling while being unparented (we'll get a client callback and
        swap out its parent ourselves).

2013-02-04  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Add parsing for grid-auto-flow
        https://bugs.webkit.org/show_bug.cgi?id=108397

        Reviewed by Ojan Vafai.

        Test: fast/css-grid-layout/grid-auto-flow-get-set.html

        This change adds the parsing, application and conversion back through getComputedStyle
        for the new property -webkit-grid-auto-flow, which accpets the following:

        -webkit-grid-auto-flow: none | rows | columns

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Added code to convert the RenderStyle information back into a CSS value.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        Implemented parsing for -webkit-grid-auto-flow.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator GridAutoFlow):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        Added the conversion operators, used for parsing and getComputedStyle.

        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        Added -webkit-grid-auto-flow to the list of the not inherited properties.

        * css/CSSPropertyNames.in:
        Added the new value and keywords.

        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        Added a handler for the new CSS property.

        * rendering/style/RenderStyle.h:
        Added the usual getter / setter / initial function.

        * rendering/style/RenderStyleConstants.h:
        Added a new enum GridAutoFlow to hold the parsed value.

        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::StyleGridData):
        * rendering/style/StyleGridData.h:
        (WebCore::StyleGridData::operator==):
        Updated after adding a new field for the GridAutoFlow value.

2013-02-04  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Move IDBFactoryBackendInterface to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=108638

        Reviewed by Adam Barth.

        Part of a larger refactoring series; see tracking bug 106829.

        * Modules/indexeddb/chromium: Added.
        * Modules/indexeddb/chromium/IDBFactoryBackendInterfaceChromium.cpp: Added.
        (WebCore):
        (WebCore::setIDBFactoryBackendInterfaceCreateFunction):
        (WebCore::IDBFactoryBackendInterface::create):
        * Modules/indexeddb/chromium/IDBFactoryBackendInterfaceChromium.h: Added.
        (WebCore):
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2013-02-04  Abhishek Arya  <inferno@chromium.org>

        Add ASSERT_WITH_SECURITY_IMPLICATION to detect bad cast in DOM, CSS, etc.
        https://bugs.webkit.org/show_bug.cgi?id=108688

        Reviewed by Eric Seidel.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore::Notification::permission):
        (WebCore::Notification::requestPermission):
        * Modules/speech/SpeechGrammar.cpp:
        (WebCore::SpeechGrammar::setSrc):
        * Modules/speech/SpeechGrammarList.cpp:
        (WebCore::SpeechGrammarList::addFromUri):
        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::reattach):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::fillImageSet):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::reattach):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::reattach):
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue):
        (WebCore::ApplyPropertyTextDecoration::applyValue):
        (WebCore::ApplyPropertyZoom::applyValue):
        * css/StyleResolver.cpp:
        (WebCore::createGridPosition):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::createCustomFilterOperationWithInlineSyntax):
        * css/WebKitCSSFilterRule.cpp:
        (WebCore::WebKitCSSFilterRule::reattach):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::reattach):
        * css/WebKitCSSViewportRule.cpp:
        (WebCore::WebKitCSSViewportRule::reattach):
        * editing/EditCommand.h:
        (WebCore::toSimpleEditCommand):
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/HTMLCollection.cpp:
        (WebCore::LiveNodeListBase::setItemCache):
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        * page/Frame.cpp:
        (WebCore::Frame::frameForWidget):
        * platform/RefCountedSupplement.h:
        (WebCore::RefCountedSupplement::from):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitBlocks):
        (WebCore::RenderBlock::firstLineBlock):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::positionForPoint):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        (WebCore::SVGRootInlineBox::layoutChildBoxes):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject):
        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::addToWorkerDocuments):
        (WebCore::SharedWorkerConnectTask::performTask):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/WorkerContext.cpp:
        (WebCore::CloseWorkerContextTask::performTask):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::connectToWorkerContextInspectorTask):
        (WebCore::disconnectFromWorkerContextInspectorTask):
        (WebCore::dispatchOnInspectorBackendTask):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownFinishTask::performTask):
        (WebCore::WorkerThreadShutdownStartTask::performTask):

2013-02-04  Dominik Röttsches  <dominik.rottsches@intel.com>

        [Skia] Argument to HarfBuzzShaper::offsetForPosition unnecessarily truncated
        https://bugs.webkit.org/show_bug.cgi?id=108479

        Reviewed by Emil A Eklund.

        Remove a FIXME that intended to solve the value truncation.
        Should positively affect SVG text positioning.

        No new tests, partially covered by manual test
        ManualTests/harfbuzz-mouse-selection-crash.html.

        * platform/graphics/harfbuzz/FontHarfBuzz.cpp:
        (WebCore::Font::offsetForPositionForComplexText):

2013-02-04  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Create a container class for SidebarPane instances
        https://bugs.webkit.org/show_bug.cgi?id=108183

        Reviewed by Pavel Feldman.

        SidebarPaneStack is responsible for pane title bar and expand/collapse behavior (previously handled by SidebarPane).
        SidebarPanes are inserted into DOM lazily and can belong to more than one container.
        SidebarPane is ready to be displayed in other types of containers (such as tabbed pane as requested in https://bugs.webkit.org/show_bug.cgi?id=107552).
        There should be no visible changes except for one: DOM breakpoint pane expand/collapse state is no longer
        shared between Elements and Sources sidebars.

        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditResultView):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._addBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.highlightBreakpoint):
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane.prototype.highlightBreakpoint):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.wasShown):
        (WebInspector.ElementsPanel.prototype.updateStyles):
        (WebInspector.ElementsPanel.prototype.updateMetrics):
        (WebInspector.ElementsPanel.prototype.updateProperties):
        (WebInspector.ElementsPanel.prototype.updateEventListeners):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onCreateSidebarPane):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.wasShown):
        * inspector/front-end/SidebarPane.js:
        (WebInspector.SidebarPane):
        (WebInspector.SidebarPane.prototype.title):
        (WebInspector.SidebarPane.prototype.prepareContent):
        (WebInspector.SidebarPane.prototype.expand):
        (WebInspector.SidebarPane.prototype.onContentReady):
        (WebInspector.SidebarPane.prototype.setExpandCallback):
        (WebInspector.SidebarPane.prototype.setShowCallback):
        (WebInspector.SidebarPane.prototype.wasShown):
        (WebInspector.SidebarPaneStack):
        (WebInspector.SidebarPaneStack.prototype.wasShown):
        (WebInspector.SidebarPaneStack.prototype.addPane):
        (WebInspector.SidebarPaneStack.prototype._addTitle):
        (WebInspector.SidebarPaneStack.prototype._attachToPane):
        (WebInspector.SidebarPaneStack.prototype._isExpanded):
        (WebInspector.SidebarPaneStack.prototype._setExpanded):
        (WebInspector.SidebarPaneStack.prototype._onPaneExpanded):
        (WebInspector.SidebarPaneStack.prototype._collapsePane):
        (WebInspector.SidebarPaneStack.prototype._togglePane):
        (WebInspector.SidebarPaneStack.prototype._onTitleKeyDown):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._refreshUpdate):
        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype.set _createNewRule):
        (WebInspector.ComputedStyleSidebarPane.prototype.prepareContent):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane):
        (WebInspector.WatchExpressionsSidebarPane.prototype.wasShown):
        (WebInspector.WatchExpressionsSidebarPane.prototype.addExpression):
        (WebInspector.WatchExpressionsSidebarPane.prototype._addButtonClicked):
        * inspector/front-end/inspector.css:
        (.pane-title + .pane-title, .pane:not(.visible) + .pane-title, .pane-title:first-of-type):
        (.pane-title):
        (.pane-title:active):
        (.pane-title::before):
        (.pane-title.expanded::before):
        (.pane-title > select):
        (.pane-title > select:hover):
        (.pane-title > select:active):
        (.pane-title > select.select-settings):
        (.pane-title > select.select-filter):
        (.pane-title > select > option, .pane-title > select > hr):
        (.pane-title > .pane-title-button):
        (.pane-title > .pane-title-button:hover):
        (.pane-title > .pane-title-button:active, .pane-title > .pane-title-button.toggled):
        (.pane-title > .pane-title-button.add):
        (.pane-title > .pane-title-button.element-state):
        (.pane-title > .pane-title-button.refresh):
        (.pane.visible > .body):
        (.pane.visible:nth-last-of-type(1)):
        (.panel-enabler-view button:not(.status-bar-item), .pane-title-button, button.show-all-nodes):
        (.panel-enabler-view button:active:not(.status-bar-item), .pane-title-button:active, button.show-all-nodes:active):
        (body.inactive .panel-enabler-view button:not(.status-bar-item), .panel-enabler-view button:disabled:not(.status-bar-item), body.inactive .pane-title-button, .pane-title-button:disabled, body.inactive button.show-all-nodes):

2013-02-01  Emil A Eklund  <eae@chromium.org>

        Remove duplicate code in RenderBoxModelObject::computedCSSPadding*
        https://bugs.webkit.org/show_bug.cgi?id=108707

        Reviewed by Eric Seidel.
        
        The computedCSSPaddingTop/Bottom/... methods in
        RenderBoxModelObject all do pretty much exactly the same thing
        yet share no code.
        
        Break out shared code into computedCSSPadding method and have
        the top/bottom/left/right/... ones call it with the appropriate
        length value.

        No new tests, no change in functionality.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computedCSSPadding):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::computedCSSPaddingTop):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBottom):
        (WebCore::RenderBoxModelObject::computedCSSPaddingLeft):
        (WebCore::RenderBoxModelObject::computedCSSPaddingRight):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBefore):
        (WebCore::RenderBoxModelObject::computedCSSPaddingAfter):
        (WebCore::RenderBoxModelObject::computedCSSPaddingStart):
        (WebCore::RenderBoxModelObject::computedCSSPaddingEnd):
        (RenderBoxModelObject):

2013-02-04  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: add round braces to javascript tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=108692

        Reviewed by Pavel Feldman.

        Change SourceJavascriptTokenizer.re2js file to produce "brace-start"
        and "brace-end" tokens for round braces.
        Regenerate SourceJavascriptTokenizer.js according to new re2js file.

        No new tests: no change in behaviour.

        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer.prototype.nextToken):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:

2013-02-04  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: take page scale factor into account when updating overlay.
        https://bugs.webkit.org/show_bug.cgi?id=108831

        Reviewed by Vsevolod Vlasov.

        Otherwise, the ports that use page scale factor have broken overlay.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):

2013-02-04  Dan Carney  <dcarney@google.com>

        [v8] explicit isolate parameter for MakeWeak calls
        https://bugs.webkit.org/show_bug.cgi?id=108818

        Reviewed by Kentaro Hara.

        No new tests. No change in functionality.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::weakCallback):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::setWrapper):
        (WebCore::DOMDataStore::set):
        (WebCore::DOMDataStore::setWrapperInObject):
        (DOMDataStore):
        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperMap::DOMWrapperMap):
        (WebCore::DOMWrapperMap::set):
        (WebCore::DOMWrapperMap::defaultWeakCallback):
        (DOMWrapperMap):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::isolatedWorldWeakCallback):
        (WebCore::DOMWrapperWorld::makeContextWeak):
        * bindings/v8/ScriptState.cpp:
        (WebCore::ScriptState::ScriptState):
        (WebCore::ScriptState::weakReferenceCallback):
        * bindings/v8/ScriptState.h:
        (ScriptState):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::weakEventListenerCallback):
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::setListenerObject):
        * bindings/v8/V8AbstractEventListener.h:
        (V8AbstractEventListener):
        * bindings/v8/V8EventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        * bindings/v8/V8MutationCallback.cpp:
        (WebCore::V8MutationCallback::V8MutationCallback):
        * bindings/v8/V8MutationCallback.h:
        (WebCore::V8MutationCallback::create):
        (WebCore::V8MutationCallback::weakCallback):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::V8NPTemplateMap::set):
        (WebCore::V8NPTemplateMap::sharedInstance):
        (WebCore::V8NPTemplateMap::V8NPTemplateMap):
        (V8NPTemplateMap):
        (WebCore::V8NPTemplateMap::weakCallback):
        (WebCore::npObjectGetProperty):
        (WebCore):
        (WebCore::staticNPObjectMap):
        (WebCore::weakNPObjectCallback):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::cachedStringCallback):
        (WebCore::StringCache::v8ExternalStringSlow):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::WeakReferenceCallback):
        (WebCore::createInjectedScriptHostV8Wrapper):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallbackCustom):

2013-02-04  Dmitry Gozman  <dgozman@chromium.org>

        Web Inspector: Allow user to change dock side by dragging toolbar
        https://bugs.webkit.org/show_bug.cgi?id=108073

        Dragging toolbar to the right/bottom will change the dock side accordingly
        instead of changing the inspector window height (if dock to right is available).

        Reviewed by Pavel Feldman.

        No new tests, because of pure inspector UI change.

        * inspector/front-end/DockController.js:
        (WebInspector.DockController.prototype.dockSide):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar):
        (WebInspector.Toolbar.prototype._isDockedToBottom):
        (WebInspector.Toolbar.prototype._isUndocked):
        (WebInspector.Toolbar.prototype._toolbarDragStart):
        (WebInspector.Toolbar.prototype._toolbarDragEnd):
        (WebInspector.Toolbar.prototype._toolbarDrag):
        (WebInspector.Toolbar.prototype._toolbarDragMoveWindow):
        (WebInspector.Toolbar.prototype._toolbarDragChangeDocking):
        (WebInspector.Toolbar.prototype._toolbarDragChangeHeight):
        * inspector/front-end/UIUtils.js:
        (WebInspector._elementDragStart):
        (WebInspector._elementDragMove):
        (WebInspector._cancelDragEvents):
        (WebInspector._elementDragEnd):

2013-02-04  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: sync list of console API methods to that used by auto-complete
        https://bugs.webkit.org/show_bug.cgi?id=108804

        Reviewed by Pavel Feldman.

        - push new method names from InjectedScriptSource to RuntimeModel;
        - add a comment to InjectedScriptSource noting the necessity of keeping lists in sync.

        * inspector/InjectedScriptSource.js:
        * inspector/front-end/RuntimeModel.js:
        (WebInspector.RuntimeModel.prototype.receivedPropertyNames):
        (WebInspector.RuntimeModel.prototype._completionsForExpression):

2013-02-04  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Minor refactorings.
        https://bugs.webkit.org/show_bug.cgi?id=108162

        Reviewed by Vsevolod Vlasov.

        Apply minor refactorings to NetworkPanel.js
        Add hint to statusbar selector buttons.

        * English.lproj/localizedStrings.js: Added hint string.
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._createStatusBarItems): Ditto.
        (WebInspector.NetworkLogView.prototype._makeHeaderFragment):
        Applied minor refactoring.
        (WebInspector.NetworkLogView.prototype._createStatusBarItems.createFilterElement):
        Ditto.
        (WebInspector.NetworkLogView.prototype._updateOffscreenRows): Ditto.
        (WebInspector.NetworkPanel.prototype._onRowSizeChanged): Ditto.

2013-02-04  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [CPU Profile] Apply minor refactorings and add JSDocs.
        https://bugs.webkit.org/show_bug.cgi?id=108437

        Reviewed by Pavel Feldman.

        CPU Profile code has obsolete inline-comments to clarify types.
        Currently we use JSDocs to specify types.

        Also applied some minor refactorings.

        * inspector/front-end/BottomUpProfileDataGridTree.js:
        (WebInspector.BottomUpProfileDataGridNode):
        Added JSDocs. Removed profileView parameter.
        (WebInspector.BottomUpProfileDataGridNode.prototype._takePropertiesFromProfileDataGridNode):
        Added JSDocs.
        (WebInspector.BottomUpProfileDataGridNode.prototype._keepOnlyChild):
        Ditto.
        (WebInspector.BottomUpProfileDataGridNode.prototype._merge):
        Ditto.
        (WebInspector.BottomUpProfileDataGridNode.prototype._sharedPopulate):
        Do not pass profileView to constructor.
        (WebInspector.BottomUpProfileDataGridTree):
        Added JSDocs. Renamed parameters.
        (WebInspector.BottomUpProfileDataGridTree.prototype.focus):
        Added JSDocs.
        (WebInspector.BottomUpProfileDataGridTree.prototype.exclude):
        Ditto.
        * inspector/front-end/CPUProfileView.js: Removed unused getter/setter.
        (WebInspector.CPUProfileView.prototype._getCPUProfileCallback):
        Un-nested. Added JSDocs.
        (WebInspector.CPUProfileView.prototype._getBottomUpProfileDataGridTree):
        Added JSDocs. Turned to method from getter. Simplified.
        (WebInspector.CPUProfileView.prototype._getTopDownProfileDataGridTree):
        Added JSDocs. Turned to method from getter.
        (WebInspector.CPUProfileView.prototype._assignParentsInProfile):
        Optimized.
        * inspector/front-end/DataGrid.js: Added JSDocs.
        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode):
        Added JSDocs. Removed profileView parameter.
        (WebInspector.ProfileDataGridNode.prototype.createCell): Added JSDocs.
        (WebInspector.ProfileDataGridNode.prototype.sort): Ditto.
        (WebInspector.ProfileDataGridNode.prototype.insertChild): Ditto.
        (WebInspector.ProfileDataGridNode.prototype.removeChild): Ditto.
        (WebInspector.ProfileDataGridNode.prototype.removeChildren):
        Added JSDocs. Removed parameter.
        (WebInspector.ProfileDataGridNode.prototype.findChild): Added JSDocs.
        (WebInspector.ProfileDataGridTree): Added JSDocs. Renamed parameter.
        * inspector/front-end/TopDownProfileDataGridTree.js:
        (WebInspector.TopDownProfileDataGridNode):
        Added JSDocs. Removed profileView parameter.
        (WebInspector.TopDownProfileDataGridNode.prototype._sharedPopulate):
        Do not pass profileView to constructor.
        (WebInspector.TopDownProfileDataGridTree):
        Added JSDocs. Renamed parameter.
        (WebInspector.TopDownProfileDataGridTree.prototype.focus):
        Added JSDocs.
        (WebInspector.TopDownProfileDataGridTree.prototype.exclude):
        Ditto.

2013-02-04  Dan Carney  <dcarney@google.com>

        [v8] use toV8Fast in hand coded callbacks
        https://bugs.webkit.org/show_bug.cgi?id=108817

        Reviewed by Kentaro Hara.

        No new tests. No change in functionality.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openCallback):
        (WebCore::V8DOMWindow::indexedPropertyGetter):
        (WebCore::V8DOMWindow::namedPropertyGetter):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::V8Document::locationAccessorGetter):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::V8Event::dataTransferAccessorGetter):
        (WebCore::V8Event::clipboardDataAccessorGetter):
        * bindings/v8/custom/V8FileReaderCustom.cpp:
        (WebCore::V8FileReader::resultAccessorGetter):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore):
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::V8HTMLAllCollection::namedPropertyGetter):
        (WebCore::V8HTMLAllCollection::itemCallback):
        (WebCore::V8HTMLAllCollection::namedItemCallback):
        (WebCore::V8HTMLAllCollection::callAsFunctionCallback):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::V8HTMLCollection::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::V8HTMLElement::itemValueAccessorGetter):
        * bindings/v8/custom/V8HTMLFormControlsCollectionCustom.cpp:
        (WebCore):
        (WebCore::getNamedItems):
        (WebCore::V8HTMLFormControlsCollection::namedPropertyGetter):
        (WebCore::V8HTMLFormControlsCollection::namedItemCallback):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::V8HTMLFormElement::indexedPropertyGetter):
        (WebCore::V8HTMLFormElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::V8HTMLFrameSetElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLLinkElementCustom.cpp:
        (WebCore::V8HTMLLinkElement::sizesAccessorGetter):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore):
        (WebCore::getNamedItems):
        (WebCore::V8HTMLOptionsCollection::namedPropertyGetter):
        (WebCore::V8HTMLOptionsCollection::namedItemCallback):
        (WebCore::V8HTMLOptionsCollection::indexedPropertyGetter):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::V8HTMLSelectElement::indexedPropertyGetter):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAccessorGetter):
        (WebCore::V8MessageEvent::portsAccessorGetter):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::indexedPropertyGetter):
        (WebCore::V8NamedNodeMap::namedPropertyGetter):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::namedPropertyGetter):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::stateAccessorGetter):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::V8StyleSheetList::namedPropertyGetter):
        * bindings/v8/custom/V8TrackEventCustom.cpp:
        (WebCore::V8TrackEvent::trackAccessorGetter):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseAccessorGetter):

2013-02-04  David Kilzer  <ddkilzer@apple.com>

        Remove duplicate entry from WebCore Xcode project

            $ uniq Source/WebCore/WebCore.xcodeproj/project.pbxproj | diff -u - Source/WebCore/WebCore.xcodeproj/project.pbxproj | patch -p0 -R
            patching file Source/WebCore/WebCore.xcodeproj/project.pbxproj

        * WebCore.xcodeproj/project.pbxproj: Remove duplicate.

2013-02-04  David Kilzer  <ddkilzer@apple.com>

        Sort WebCore Xcode project file

        * WebCore.xcodeproj/project.pbxproj:

2013-02-04  Dan Carney  <dcarney@google.com>

        [v8] disable ascii check once latin-1 is enabled in v8
        https://bugs.webkit.org/show_bug.cgi?id=108805

        Reviewed by Kentaro Hara.

        No new tests. No change in functionality.

        * bindings/v8/V8ValueCache.cpp:
        (WebCore::makeExternalString):

2013-02-04  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make tabbed pane header a relayout boundary.
        https://bugs.webkit.org/show_bug.cgi?id=108650

        Reviewed by Alexander Pavlov.

        Otherwise, its measure width routine causes total reflow.

        * inspector/front-end/tabbedPane.css:
        (.tabbed-pane-header):

2013-02-04  Hayato Ito  <hayato@chromium.org>

        Split InspectorCSSOMWrappers out from StyleResolver.h into its own file.
        https://bugs.webkit.org/show_bug.cgi?id=108797

        Reviewed by Hajime Morita.

        This is a following patch after r141373. Now we can have
        InspectorCSSOMWrappers in its own file since CSSDefaultStyleSheets
        was factored out from StyleResolver.cpp in r141733.

        WebCore/inspector/ directory is used for basic inspector
        functionalities. Therefore, I've put
        InspectorCSSOMWrappers.{h,cpp} in WebCore/css/ rather than
        WebCore/inspector/.

        No new tests, refactoring only.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/InspectorCSSOMWrappers.cpp: Added.
        (WebCore):
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetIfNeeded):
        (WebCore::InspectorCSSOMWrappers::collect):
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents):
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheets):
        (WebCore::InspectorCSSOMWrappers::collectFromDocumentStyleSheetCollection):
        (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets):
        (WebCore::InspectorCSSOMWrappers::reportMemoryUsage):
        * css/InspectorCSSOMWrappers.h: Added.
        (WebCore):
        (InspectorCSSOMWrappers):
        * css/StyleResolver.cpp:
        * css/StyleResolver.h:

2013-02-04  Balazs Kelemen  <kbalazs@webkit.org>

        [Soup] Wrap SoupSession by NetworkStorageSession
        https://bugs.webkit.org/show_bug.cgi?id=108615

        Reviewed by Alexey Proskuryakov.

        Implement NetworkStorageSession for ports using soup. It has been
        separated from NetworkingContext, so now we have a default storage
        session, which is the same as before but now wrapped with NetworkStorageSession,
        and it can be overridden by the networking context.

        No change in behavior so no new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * loader/CookieJar.cpp:
        (WebCore):
        Now we also get the storage session from the networking context
        and not the other way.

        * platform/network/NetworkStorageSession.h:
        (NetworkStorageSession):
        (WebCore::NetworkStorageSession::setSoupSession):
        (WebCore::NetworkStorageSession::soupSession):
        Hold a SoupSession pointer for ports using soup. Added a setter because it is
        necessary for API's that allow it to be specified per page, like EFL WK1.

        * platform/network/NetworkingContext.h:
        (NetworkingContext):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieJarForSession):
        * platform/network/soup/NetworkStorageSessionSoup.cpp: Copied from Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp.
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::defaultStorageSession):
        (WebCore::NetworkStorageSession::createDefaultSession):
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession):
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sessionFromContext):

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * loader/CookieJar.cpp:
        (WebCore):
        * platform/network/NetworkStorageSession.h:
        (NetworkStorageSession):
        (WebCore::NetworkStorageSession::setSoupSession):
        (WebCore::NetworkStorageSession::soupSession):
        * platform/network/NetworkingContext.h:
        (NetworkingContext):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieJarForSession):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sessionFromContext):

2013-02-04  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: source location in statusbar has few bugs in it
        https://bugs.webkit.org/show_bug.cgi?id=108748

        Reviewed by Vsevolod Vlasov.

        Call super method statusBarItems in SnippetJavaScriptSourceFrame class
        and merge its results. Fix css styles for source location in statusbar
        and rename its css class into a less confusing name.

        No new test: no change in behaviour.

        * inspector/front-end/SnippetJavaScriptSourceFrame.js:
        (WebInspector.SnippetJavaScriptSourceFrame.prototype.statusBarItems):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        * inspector/front-end/inspector.css:
        (.source-frame-cursor-position):

2013-02-04  Mike West  <mkwst@chromium.org>

        Cleanup: Normalize usage of ExceptionCode in ContainerNode::checkXxxChild()
        https://bugs.webkit.org/show_bug.cgi?id=108766

        Reviewed by Kentaro Hara.

        This patch refactors checkAddChild and checkReplaceChild to remove the
        creation of an extra ExceptionCode that's not necessary for the
        desired behavior, and to bring the ExceptionCode usage into line with
        the rest of WebKit (this was the only case where ExceptionCode was
        assigned inside an 'if' statement's condition).

        After this patch, 'ec' will always be assigned a value, even if the
        result of 'checkAcceptChild' is 0. This would only change behavior if
        'ec' was non-zero coming into the function, and 'checkAcceptChild'
        returned 0. Since every callsite is either directly after an explicit
        zeroing of 'ec', or after an 'if (ec)' clause, that case should never
        appear. This patch, therefore, shouldn't visibly change WebKit's
        behavior.

        * dom/ContainerNode.cpp:
        (WebCore::checkAddChild):
        (WebCore::checkReplaceChild):

2013-02-03  David Kilzer  <ddkilzer@apple.com>

        Upstream ENABLE_PDFKIT_PLUGIN settting
        <http://webkit.org/b/108792>

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig: Disable PDFKIT_PLUGIN
        on iOS since PDFKit is a Mac-only framework.

2013-02-03  Takashi Sakamoto  <tasak@google.com>

        Split per-resolve logic out from StyleResolver.
        https://bugs.webkit.org/show_bug.cgi?id=96421

        Reviewed by Eric Seidel.

        Implemented class StyleResolver::State and added m_state to
        StyleResolver. All member variables used for per-resolve logic are
        moved into the state class.

        No new tests, because just refactoring.

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::styleSharingCandidateMatchesHostRules):
        (WebCore::StyleResolver::matchHostRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::sortMatchedRules):
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::initElement):
        (WebCore::StyleResolver::initForStyleResolve):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::canShareStyleWithControl):
        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::defaultStyleForElement):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::updateFont):
        (WebCore::StyleResolver::cacheBorderAndBackground):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::ruleMatches):
        (WebCore::StyleResolver::checkRegionSelector):
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::isLeftPage):
        (WebCore::StyleResolver::applyPropertyToStyle):
        (WebCore::StyleResolver::useSVGZoomRules):
        (WebCore::createGridTrackBreadth):
        (WebCore::createGridTrackMinMax):
        (WebCore::createGridTrackGroup):
        (WebCore::createGridTrackList):
        (WebCore::StyleResolver::resolveVariables):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::cachedOrPendingFromValue):
        (WebCore::StyleResolver::generatedOrPendingFromValue):
        (WebCore::StyleResolver::setOrPendingFromValue):
        (WebCore::StyleResolver::cursorOrPendingFromValue):
        (WebCore::StyleResolver::checkForTextSizeAdjust):
        (WebCore::StyleResolver::initializeFontStyle):
        (WebCore::StyleResolver::setFontSize):
        (WebCore::StyleResolver::colorFromPrimitiveValue):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::cachedOrPendingStyleShaderFromValue):
        (WebCore::StyleResolver::loadPendingShaders):
        (WebCore::StyleResolver::parseCustomFilterTransformParameter):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::loadPendingImage):
        (WebCore::StyleResolver::loadPendingImages):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::style):
        (WebCore::StyleResolver::parentStyle):
        (WebCore::StyleResolver::rootElementStyle):
        (WebCore::StyleResolver::element):
        (WebCore::StyleResolver::setFontDescription):
        (WebCore::StyleResolver::setZoom):
        (WebCore::StyleResolver::setEffectiveZoom):
        (WebCore::StyleResolver::setTextSizeAdjust):
        (WebCore::StyleResolver::setWritingMode):
        (WebCore::StyleResolver::setTextOrientation):
        (WebCore::StyleResolver::hasParentNode):
        (WebCore::StyleResolver::addMatchedRule):
        (StyleResolver):
        (State):
        (WebCore::StyleResolver::State::State):
        (WebCore::StyleResolver::applyPropertyToRegularStyle):
        (WebCore::StyleResolver::applyPropertyToVisitedLinkStyle):
        Added "m_state." to access member variables used for per-resolve logic.

2013-02-03  Kent Tamura  <tkent@chromium.org>

        Support setLangAttributeAwareFormControlUIEnabled on Chromium Windows XP
        https://bugs.webkit.org/show_bug.cgi?id=108791

        Reviewed by Kentaro Hara.

        We didn't support setLangAttributeAwareFormControlUIEnabled(true) on
        Chromium Windows XP because of lack of LocaleNameToLCID API. This change
        add manual mapping from locale names to LCIDs for Windows XP.

        No new tests. This doesn't make any behavior changes in products, and
        this improves some test results.

        * platform/text/win/LocaleWin.cpp:
        (WebCore): Define NameToLCIDMap.
        (WebCore::removeLastComponent):
        Remove the last component separated with '-'.
        (WebCore::ensureNameToLCIDMap):
        Add locale names used in layout tests.
        (WebCore::convertLocaleNameToLCID):
        Find an appropriate LCID longest matching with the specified locale name.
        (WebCore::LCIDFromLocale):
        Use convertLocaleNameToLCID if LocaleNameToLCID is not available.

2013-02-03  Kent Tamura  <tkent@chromium.org>

        Add FocusDirection argument to HTMLTextFormControlElement::handleFocusEvent
        https://bugs.webkit.org/show_bug.cgi?id=108775

        Reviewed by Hajime Morita.

        We'd like to add a FocusDirection argument to
        HTMLTextFormControlElement::handleFocusEvent in order to fix Bug
        108447. This is a preparation for it.

        We need to add FocusDirection arguments to some focus-related functions
        to pass it correctly when TAB or Shift+TAB is pressed.

        No new tests. This doesn't make any behavior changes.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::dispatchFocusEvent):
        To pass the FocusDirection argument to handleFocusEvent, we need to add
        it to dispatchFocusEvent too.
        * html/HTMLTextFormControlElement.h:
        (HTMLTextFormControlElement):
        Add FocusDirection arugment to dispatchFocusEvent.
        (WebCore::HTMLTextFormControlElement::handleFocusEvent):
        Add FocusDirection argument.

        * dom/Node.cpp:
        (WebCore::Node::dispatchFocusEvent): Add FocusDirection argument.
        * dom/Node.h:
        (Node): Ditto.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Add FocusDirection argument in
        order to pass it to Node::dispatchFocusEvent.
        * dom/Document.h:
        (Document): Ditto.

        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedNode):
        Adjust Node::dispatchFocusEvent argument.
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        Pass FocusDirectio to Element::focus.
        (WebCore::FocusController::setFocusedNode):
        Add FocusDirection argument in order to pass it to Document::setFocusedNode.
        (WebCore::FocusController::advanceFocusDirectionallyInContainer):
        Pass FocusDirectio to Element::focus.
        * page/FocusController.h:
        (FocusController): Add FocusDirection argument to setFocusedNode.

        * dom/Element.cpp:
        (WebCore::Element::focus):
        Add FocusDirection argument to pass it to FocusController::setFocusedNode.
        * dom/Element.h:
        (Element): Ditto.

        * WebCore.exp.in:
        Update FocusController::setFocusedNode and Document::setFocusedNode.

        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::focus): Adjust FocusDirection argument.
        * html/HTMLLabelElement.h:
        (HTMLLabelElement): Ditto.
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::focus): Ditto.
        * html/HTMLLegendElement.h:
        (HTMLLegendElement): Ditto.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::dispatchFocusEvent): Ditto.
        * html/HTMLSelectElement.h:
        (HTMLSelectElement): Ditto.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultFocus):
        Add FocusDirection argument in order to pass it from
        HTMLInputElement::focus() to HTMLTextFormControlElement::focus().
        (WebCore::HTMLInputElement::focus):
        Pass the FocusDirection argument to InputType::focus. See above.
        (WebCore::HTMLInputElement::handleFocusEvent):
        Adjust FocusDirection argument.
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/InputType.cpp:
        (WebCore::InputType::focus): Add FocusDirection argument.
        * html/InputType.h:
        (InputType): Ditto.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::focus):
        Add FocusDirection argument to follow InputType.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Ditto.

2013-02-03  Kassy Coan  <kassycoan@chromium.org>

        Adds usage instrumentation for indexedDB
        Includes new header file in project files

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

        Reviewed by Tony Chang.

        Currently untestable. Has zero effect apart from histogramming.

        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBHistograms.h: Added.
        (WebCore):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2013-02-03  Hayato Ito  <hayato@chromium.org>

        Split default style-sheet statics out from StyleResolver into its own class
        https://bugs.webkit.org/show_bug.cgi?id=107780

        Reviewed by Dimitri Glazkov.

        Factored static variables and logic about default style sheets out from StyleResolver into its own class
        CSSDefaultStyleSheets. This is a following patch after r141373.

        No new tests, refactoring only.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSDefaultStyleSheets.cpp: Added.
        (WebCore):
        (WebCore::elementCanUseSimpleDefaultStyle):
        (WebCore::screenEval):
        (WebCore::printEval):
        (WebCore::parseUASheet):
        (WebCore::CSSDefaultStyleSheets::initDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::loadFullDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::loadSimpleDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::viewSourceStyle):
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/CSSDefaultStyleSheets.h: Added.
        (WebCore):
        (CSSDefaultStyleSheets):
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets):
        (WebCore::StyleResolver::collectFeatures):
        (WebCore::StyleResolver::reportMemoryUsage):

2013-02-03  Kentaro Hara  <haraken@chromium.org>

        [V8] Simplify CodeGeneratorV8.pm by using InheritsExtendedAttribute("EventTarget")
        https://bugs.webkit.org/show_bug.cgi?id=108441

        Reviewed by Adam Barth.

        A complicated condition in GetInternalFields() can be simplified
        by using InheritsExtendedAttribute("EventTarget").

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetInternalFields):
        * dom/EventTarget.idl: Added [EventTarget] which should have been added.
        * svg/SVGElementInstance.idl: Ditto.

2013-02-03  Gustavo Noronha Silva  <gns@gnome.org>

        [Soup] Do not use local variables for the client
        https://bugs.webkit.org/show_bug.cgi?id=108714

        Reviewed by Martin Robinson.

        Covered by existing tests, refactoring code only.

        We have had problems in the past with the client being destroyed or
        changed inside a method or function, and we ended up with a stale
        pointer, leading to crashes. This refactoring is an effort to minimize
        the possibility of hitting that same issue in the future.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::redirectSkipCallback): no longer use a local variable to hold
        the client.
        (WebCore::wroteBodyDataCallback): ditto.
        (WebCore::nextMultipartResponsePartCallback): ditto.
        (WebCore::sendRequestCallback): ditto.
        (WebCore::closeCallback): ditto.
        (WebCore::readCallback): ditto.

2013-02-03  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to HasInstance() (part 1)
        https://bugs.webkit.org/show_bug.cgi?id=108617

        Reviewed by Adam Barth.

        This is one of efforts to pass an Isolate to GetTemplate().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (JSValueToNative):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooCallback):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalNodeAttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::testObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::XMLObjAttrAttrSetter):
        (WebCore::TestObjV8Internal::typedArrayAttrAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrSetter):
        (WebCore::TestObjV8Internal::mutablePointAttrSetter):
        (WebCore::TestObjV8Internal::immutablePointAttrSetter):
        (WebCore::TestObjV8Internal::voidMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::longMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        (WebCore::TestObjV8Internal::overloadedMethod2Callback):
        (WebCore::TestObjV8Internal::overloadedMethod8Callback):
        (WebCore::TestObjV8Internal::convert1Callback):
        (WebCore::TestObjV8Internal::convert2Callback):
        (WebCore::TestObjV8Internal::convert4Callback):
        (WebCore::TestObjV8Internal::convert5Callback):
        (WebCore::TestObjV8Internal::variadicNodeMethodCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructor1Callback):
        (WebCore::V8TestOverloadedConstructors::constructor2Callback):
        (WebCore::V8TestOverloadedConstructors::constructor3Callback):
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitNodeWrappers):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toDOMStringList):
        (WebCore::toXPathNSResolver):
        * bindings/v8/V8Binding.h:
        (WebCore):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8GCController.cpp:
        (WebCore::WrapperVisitor::WrapperVisitor):
        (WrapperVisitor):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::extractTransferables):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):

2013-02-03  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] Make distcheck fails
        https://bugs.webkit.org/show_bug.cgi?id=108756

        Reviewed by Kentaro Hara.

        * GNUmakefile.list.am: Remove header files which no longer exist;
        correct one which got added incorrectly.

2013-02-03  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to HasInstance() (part 3)
        https://bugs.webkit.org/show_bug.cgi?id=108622

        Reviewed by Adam Barth.

        This is one of efforts to pass an Isolate to GetTemplate().

        No tests. No change in behavior.

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::isHTMLAllCollectionCallback):
        (WebCore::V8InjectedScriptHost::typeCallback):
        (WebCore::V8InjectedScriptHost::getEventListenersCallback):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::insertBeforeCallback):
        (WebCore::V8Node::replaceChildCallback):
        (WebCore::V8Node::removeChildCallback):
        (WebCore::V8Node::appendChildCallback):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toWebGLUniformLocation):
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::isDocumentType):
        (WebCore::V8XMLHttpRequest::sendCallback):

2013-02-03  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to HasInstance() (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=108620

        Reviewed by Adam Barth.

        This is one of efforts to pass an Isolate to GetTemplate().

        No tests. No change in behavior.

        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8AudioBufferSourceNodeCustom.cpp:
        (WebCore::V8AudioBufferSourceNode::bufferAccessorSetter):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallbackCustom):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toCanvasStyle):
        (WebCore::V8CanvasRenderingContext2D::strokeStyleAccessorSetter):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::setDragImageCallback):
        * bindings/v8/custom/V8CryptoCustom.cpp:
        (WebCore::V8Crypto::getRandomValuesCallback):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCallbackCustom):
        (WebCore::V8DOMFormData::appendCallback):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallbackCustom):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        * bindings/v8/custom/V8HTMLMediaElementCustom.cpp:
        (WebCore::V8HTMLMediaElement::controllerAccessorSetter):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::addCallback):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):

2013-02-03  Mike West  <mkwst@chromium.org>

        Cleanup: 'ExceptionCode& ec', not 'ExceptionCode &ec'.
        https://bugs.webkit.org/show_bug.cgi?id=108769

        Reviewed by Eric Seidel.

        Does what it says on the tin: reference parameters should read
        'type& name', and this patch fixes the two occurances of 'type &name'
        that cropped up for ExceptionCode.

        Pure style change; no effect on behavior.

        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):

2013-02-02  Jun Jiang  <jun.a.jiang@intel.com>

        Optimize some operations for float type in texture format conversions of WebGL
        https://bugs.webkit.org/show_bug.cgi?id=107526

        Reviewed by Darin Adler.

        Some small changes are made to optimize the operations for float type in the texture format conversion of WebGL to improve performance.

        Already covered by current tests.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore):

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

        Clean up the storage of dirty bits on nodes in the scrolling state tree
        https://bugs.webkit.org/show_bug.cgi?id=108744

        Reviewed by Sam Weinig.

        ScrollingStateNode and its subclasses used different techniques for
        tracking which properties changed. ScrollingStateNode tracked its layers
        via a bool member and some layer-specific methods, but also had virtual
        methods to allow subclasses to track properties via a bit mask.
        
        Clean this up by having the base class store the bit mask, and use
        enums to specify bits for the various properties. All properties are thus
        tracked in the same way. Bits are read and written through non-virtual member
        functions on ScrollingStateNode. All bit checking is done via hasChangedProperty().

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::ScrollingStateFixedNode): m_changedProperties is now on the base class.
        (WebCore::ScrollingStateFixedNode::updateConstraints): Use setPropertyChanged()
        * page/scrolling/ScrollingStateFixedNode.h: Remove overrides that are no longer needed.
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode): Initialize m_changedProperties,
        m_scrollLayerDidChange no longer tracked separately.
        (WebCore::ScrollingStateNode::cloneAndReset):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::hasChangedProperties):
        (WebCore::ScrollingStateNode::hasChangedProperty): Tests the bit.
        (WebCore::ScrollingStateNode::resetChangedProperties): Set all bits to 0.
        (WebCore::ScrollingStateNode::setPropertyChanged): Set the bit.
        (WebCore::ScrollingStateNode::changedProperties): Private to discourage incorrect usage
        (changeProperties() & foo).
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode): Base class does the copying now.
        (WebCore::ScrollingStateScrollingNode::setViewportRect): Use setPropertyChanged().
        (WebCore::ScrollingStateScrollingNode::setContentsSize): Ditto.
        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor): Etc.
        (WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion):
        (WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount):
        (WebCore::ScrollingStateScrollingNode::setShouldUpdateScrollLayerPositionOnMainThread):
        (WebCore::ScrollingStateScrollingNode::setHorizontalScrollElasticity):
        (WebCore::ScrollingStateScrollingNode::setVerticalScrollElasticity):
        (WebCore::ScrollingStateScrollingNode::setHasEnabledHorizontalScrollbar):
        (WebCore::ScrollingStateScrollingNode::setHasEnabledVerticalScrollbar):
        (WebCore::ScrollingStateScrollingNode::setHorizontalScrollbarMode):
        (WebCore::ScrollingStateScrollingNode::setVerticalScrollbarMode):
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::ScrollingStateStickyNode):
        (WebCore::ScrollingStateStickyNode::updateConstraints):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::update):
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        (WebCore::ScrollingStateNode::setScrollLayer):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::update):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::update):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::update):

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

        Fixed and sticky nodes have no nodeID set
        https://bugs.webkit.org/show_bug.cgi?id=108734

        Reviewed by Sam Weinig.
        
        Push ScrollingNodeIDs onto scrolling nodes at construction time, and thereafter
        treat them as readonly. Previously, only the root scrolling node would have a node ID.
        
        Node IDs aren't actually used by the scrolling tree yet, but are useful for debugging.

        Not testable since we only dump the scrolling state tree, not the scrolling
        node tree in tests.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree): No longer create the root node here;
        we can only create it when we know what its ID will be.
        (WebCore::ScrollingTree::updateTreeFromStateNode): Create the root node if
        necessary. Pass node IDs into create methods.
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::ScrollingTreeNode):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::create):
        (WebCore::ScrollingTreeFixedNode::ScrollingTreeFixedNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNode::create):
        (WebCore::ScrollingTreeScrollingNodeMac::ScrollingTreeScrollingNodeMac):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::create):
        (WebCore::ScrollingTreeStickyNode::ScrollingTreeStickyNode):

2013-02-02  Takashi Sakamoto  <tasak@google.com>

        Making -webkit-image-set() the first value of background property causes crash.
        https://bugs.webkit.org/show_bug.cgi?id=108409

        Reviewed by Beth Dakin.

        CSSParser::addFillValue should use lval->isBaseValueList() instead
        of lval->isValueList(). If lval is -webkit-image-set, rval is appended
        to -webkit-image-set.

        Test: fast/css/image-set-value-crash-in-fillImageSet.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::addFillValue):
        If lval is not a value list, lval is initialized by using
        CSSValueList::createCommaSeparated(). So we have to check whether
        lval is created by CSSValueList::createCommaSeparated() or not.

2013-02-02  David Kilzer  <ddkilzer@apple.com>

        Upstream iOS FeatureDefines
        <http://webkit.org/b/108753>

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:
        - ENABLE_DEVICE_ORIENTATION: Add iOS configurations.
        - ENABLE_PLUGIN_PROXY_FOR_VIDEO: Ditto.
        - FEATURE_DEFINES: Add ENABLE_PLUGIN_PROXY_FOR_VIDEO.  Add
          PLATFORM_NAME variant to reduce future merge conflicts. 

2013-02-02  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Media tests fix after r141695.

        Rubber-stamped by Martin Robinson.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setPlaybinURL): Remove
        both fragment and query string for file:// uris before loading.

2013-02-02  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r141637.

        * platform/graphics/wince/ImageBufferWinCE.cpp:

2013-02-01  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] webkitwebsrc is exposed to application-side
        https://bugs.webkit.org/show_bug.cgi?id=108088

        Reviewed by Martin Robinson.

        Switch the webkitwebsrc to handle webkit+http(s) uris so it is now
        explicit that this element is meant to be used preferrably inside
        WebKit. This change is internal to the player.

        No new tests, covered by existing http/tests/media tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setPlaybinURL):
        (WebCore):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcGetProtocols):
        (webKitWebSrcSetUri):

2013-02-02  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial prospective build fix for A17n disabled
        configurations.

        The dummy computed object attriute cache control functions need to be defined
        as being member functions of AXObjectCache, because that's where they are
        declared.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates):
        (WebCore::AXObjectCache::stopCachingComputedObjectAttributes):

2013-02-02  Antoine Quint  <graouts@apple.com>

        Creating a WebInspector.ContextMenu without an event crashes WebCore when calling .show()
        https://bugs.webkit.org/show_bug.cgi?id=108636

        Reviewed by Pavel Feldman.

        Return early if InspectorFrontendHost::showContextMenu() is called without an event and
        assert in ContextMenuController::createContextMenu() in case no event was provided.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::showContextMenu):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::createContextMenu):

2013-02-02  Jonathan Feldstein  <jfeldstein@rim.com>

        [BlackBerry] Improper initialization of ANGLEResources
        https://bugs.webkit.org/show_bug.cgi?id=101489

        Reviewed by Antonio Gomes.

        MaxDrawBuffers, OES_standard_derivatives, OES_EGL_image_external and ARB_texture_rectangle have already been initialized through ShBuiltInResources function and these fields do not need to be set again in GraphicsContext3dBlackBerry.cpp. In addition, the extension flags cannot be set to true without getExtension having been called (Khronos WebGL specs, section 5.14.14.). Thus these lines need to be removed.

        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2013-02-02  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: Refactor InspectorDOMStorageAgent::getDOMStorageEntries to report the error messages
        https://bugs.webkit.org/show_bug.cgi?id=108611

        Reviewed by Pavel Feldman.

        Added reporting of various error messages. Moved the modification of output
        parameter at a later stage when there are no errors reported.

        No new tests as code refactoring.

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::hadException):
        (WebCore):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):

2013-02-02  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix bug in highlighting single chars via highlightRange API of DTE
        https://bugs.webkit.org/show_bug.cgi?id=108685

        Reviewed by Pavel Feldman.

        Use Math.min instead of Math.max in rangesForLine method.

        Updated test: text-editor-highlight-api.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.RangeHighlightDescriptor.prototype.rangesForLine):

2013-02-02  Tony Gentilcore  <tonyg@chromium.org>

        Continue making XSSAuditor thread safe: Remove unsafe AtomicString compares
        https://bugs.webkit.org/show_bug.cgi?id=108557

        Reviewed by Adam Barth.

        Unfortunately HTMLNames comparisons will always be false on a non-main thread
        with our current design, so we have to use some "threadSafeMatch" helpers written
        for the HTMLBackgroundParser.

        Also factor out threadSafeMatch() methods to HTMLParserIdioms.

        No new tests because no new functionality.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::threadSafeEqual):
        (WebCore):
        (WebCore::threadSafeMatch):
        * html/parser/HTMLParserIdioms.h:
        (WebCore):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::eraseAttributeIfInjected):

2013-02-01  James Simonsen  <simonjam@chromium.org>

        Add didChangePriority() to ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=107995

        Reviewed by Darin Fisher.

        For PLT, it's important that preloads remain a lower priority than parser requested resources.
        This can lead to a 5% improvement.

        The plan is to use this plumbing to expose the desired behavior. This patch simply allows a
        resource's priority to change and have it propagate to the network layer. An upcoming patch will
        lower the priority of preloads and then increase the priority when the parser officially requests
        it.

        No new tests. No visible change, because priority doesn't change yet.

        * loader/cache/CachedResource.cpp:
        (WebCore):
        (WebCore::CachedResource::setLoadPriority):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource): Allow loads to modify priority.
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::setPriority): Notify when priority changes.
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::didChangePriority): Added.
        (WebCore):
        * platform/network/ResourceHandle.h:
        (ResourceHandle):
        * platform/network/chromium/ResourceHandle.cpp:
        (WebCore::ResourceHandleInternal::didChangePriority):
        (WebCore):
        (WebCore::ResourceHandle::didChangePriority):
        * platform/network/chromium/ResourceHandleInternal.h:
        (ResourceHandleInternal):

2013-02-01  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Clean up WebCore VS2010 project.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.vcxproj/WebCoreGenerated.make:
        * WebCore.vcxproj/WebCorePreLink.cmd: Removed.
        * WebCore.vcxproj/build-generated-files.sh:

2013-02-01  Sam Weinig  <sam@webkit.org>

        Don't use deprecated method -[NSImage dissolveToPoint:fraction:]
        <rdar://problem/11723792>
        https://bugs.webkit.org/show_bug.cgi?id=108739

        Reviewed by Anders Carlsson.

        * platform/mac/DragImageMac.mm:
        (WebCore::dissolveDragImageToFraction):
        Remove use of deprecated NSImage methods and simplify a bit.

2013-02-01  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix "DOM Exception 8" when deleting lines containing decoration in DTE.
        https://bugs.webkit.org/show_bug.cgi?id=108689

        Reviewed by Alexander Pavlov.

        Add a check that decoration element is still added to the line before trying to delete it. This
        won't be true if the whole line is deleted in contentEditable,
        and this is the reason for the exception to be thrown.

        No new tests.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainChunk.prototype.removeAllDecorations):

2013-02-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141669.
        http://trac.webkit.org/changeset/141669
        https://bugs.webkit.org/show_bug.cgi?id=108728

        Broke the windows build. (Requested by leviw on #webkit).

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computedCSSPaddingTop):
        (WebCore):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBottom):
        (WebCore::RenderBoxModelObject::computedCSSPaddingLeft):
        (WebCore::RenderBoxModelObject::computedCSSPaddingRight):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBefore):
        (WebCore::RenderBoxModelObject::computedCSSPaddingAfter):
        (WebCore::RenderBoxModelObject::computedCSSPaddingStart):
        (WebCore::RenderBoxModelObject::computedCSSPaddingEnd):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):

2013-02-01  Emil A Eklund  <eae@chromium.org>

        Remove duplicate code in RenderBoxModelObject::computedCSSPadding*
        https://bugs.webkit.org/show_bug.cgi?id=108707

        Reviewed by Levi Weintraub.
        
        The computedCSSPaddingTop/Bottom/... methods in
        RenderBoxModelObject all do pretty much exactly the same thing
        yet share no code.
        
        Break out shared code into computedCSSPadding method and have
        the top/bottom/left/right/... ones call it with the appropriate
        length value.

        No new tests, no change in functionality.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computedCSSPadding):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::computedCSSPaddingTop):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBottom):
        (WebCore::RenderBoxModelObject::computedCSSPaddingLeft):
        (WebCore::RenderBoxModelObject::computedCSSPaddingRight):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBefore):
        (WebCore::RenderBoxModelObject::computedCSSPaddingAfter):
        (WebCore::RenderBoxModelObject::computedCSSPaddingStart):
        (WebCore::RenderBoxModelObject::computedCSSPaddingEnd):
        (RenderBoxModelObject):

2013-02-01  Mark Lam  <mark.lam@apple.com>

        Replace ExceptionCode with DatabaseError in the openDatabase() code path.
        https://bugs.webkit.org/show_bug.cgi?id=108724.

        Reviewed by Alexey Proskuryakov.

        Also made DatabaseBackend::performOpenAndVerify() a little more
        straightforward and less repetitive.

        No new tests.

        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::performOpenAndVerify):
        * Modules/webdatabase/Database.h:
        (Database):
        * Modules/webdatabase/DatabaseBackend.cpp:
        (WebCore::DoneCreatingDatabaseOnExitCaller::DoneCreatingDatabaseOnExitCaller):
        (WebCore::DoneCreatingDatabaseOnExitCaller::~DoneCreatingDatabaseOnExitCaller):
        (DoneCreatingDatabaseOnExitCaller):
        (WebCore::DoneCreatingDatabaseOnExitCaller::openSucceeded):
        (WebCore::DatabaseBackend::performOpenAndVerify):
        * Modules/webdatabase/DatabaseBackend.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseManager::openDatabaseSync):
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::DatabaseSync::openAndVerifyVersion):
        * Modules/webdatabase/DatabaseSync.h:
        (DatabaseSync):
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::Database::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::Database::DatabaseOpenTask::doPerformTask):
        * Modules/webdatabase/DatabaseTask.h:
        (WebCore::Database::DatabaseOpenTask::create):
        (Database::DatabaseOpenTask):
        * Modules/webdatabase/WorkerContextWebDatabase.cpp:
        (WebCore::WorkerContextWebDatabase::openDatabase):
        (WebCore::WorkerContextWebDatabase::openDatabaseSync):
        * WebCore.gypi:

2013-02-01  Yongjun Zhang  <yongjun_zhang@apple.com>

        Document is never released if an image's src attribute is changed to a url blocked by content-security-policy.
        https://bugs.webkit.org/show_bug.cgi?id=108545

        If we just scheduled an error event due to an null newImage, we should not cancel it when newImage and oldImage
        is not the same.  Otherwise we will ref the sourceElement in updateHasPendingEvent (m_hasPendingErrorEvent is true)
        but never deref it since we already cancelled the error event.

        Reviewed by Alexey Proskuryakov.

        Test: fast/images/image-error-event-not-firing.html

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): don't cancel error event if newImage is null, we want the
            error event to fire.

2013-02-01  Benjamin Poulain  <bpoulain@apple.com>

        Clean the String->AtomicString conversion for AnimationController::pauseAnimationAtTime
        https://bugs.webkit.org/show_bug.cgi?id=108558

        Reviewed by Dean Jackson.

        This is a step torward killing the implicit conversion from String to AtomicString.

        The animation name are AtomicString. The API is changed all the way to the callers
        to take an AtomicString. When needed, we use explicit conversion.

        * WebCore.exp.in:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationController::pauseAnimationAtTime):
        * page/animation/AnimationController.h:
        (AnimationController):
        * page/animation/AnimationControllerPrivate.h:
        (AnimationControllerPrivate):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        We should not null check the name. Getting a null name from the HashMap would be
        an error from the tests, and the HashMap would never return a value anyway.
        * testing/Internals.cpp:
        (WebCore::Internals::pauseAnimationAtTimeOnPseudoElement):

2013-02-01  Dominic Mazzoni  <dmazzoni@google.com>

        AX: memoize expensive computation during blocks where tree doesn't change
        https://bugs.webkit.org/show_bug.cgi?id=106497

        Reviewed by Ryosuke Niwa.

        Add a cache for computed attributes of AXObjects.
        The cache can be enabled at the start of a batch of
        read-only operations on the accessibility tree, and
        it's cleared automatically when the tree mutates.
        Currently accessibilityIsIgnored is cached, since it's
        frequently called and relatively expensive to compute.

        No new tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore):
        (WebCore::AXComputedObjectAttributeCache::getIgnored):
        (WebCore::AXComputedObjectAttributeCache::setIgnored):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::nodeTextChangeNotification):
        (WebCore::AXObjectCache::handleScrollbarUpdate):
        (WebCore::AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates):
        (WebCore::AXObjectCache::stopCachingComputedObjectAttributes):
        * accessibility/AXObjectCache.h:
        (AXComputedObjectAttributeCache):
        (WebCore::AXComputedObjectAttributeCache::create):
        (WebCore::AXComputedObjectAttributeCache::AXComputedObjectAttributeCache):
        (WebCore::AXComputedObjectAttributeCache::CachedAXObjectAttributes::CachedAXObjectAttributes):
        (CachedAXObjectAttributes):
        (WebCore):
        (WebCore::AXObjectCache::computedObjectAttributeCache):
        (AXObjectCache):
        (WebCore::AXComputedObjectAttributeCache::getIgnored):
        (WebCore::AXComputedObjectAttributeCache::setIgnored):
        (WebCore::startCachingComputedObjectAttributesUntilTreeMutates):
        (WebCore::stopCachingComputedObjectAttributes):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::findMatchingObjects):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):

2013-02-01  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * Modules/webdatabase/DatabaseBackend.cpp: (DoneCreatingDatabaseOnExitCaller):
        Don't fail because of an unused member variable in cross-plaform code path.

2013-02-01  Kevin Ellis  <kevers@chromium.org>

        [chromium] Fat scrollbars on Windows in high-DPI mode.
        https://bugs.webkit.org/show_bug.cgi?id=108637

        Updates mechanism for retrieving scrollbar metrics on the
        Windows port of Chromium.  Previously, GetSystemMetrics calls
        were used, which fetches prescaled sizes in pixel rather than
        logical units, resulting in a double scaling when a device
        scale factor is set.  With the patch, the size is retrieved
        from the theme engine in DIP.

        Reviewed by Adam Barth.

        No new tests.

        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumWin::paintTrackPiece):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):
        (WebCore::menuListButtonWidth):

2013-02-01  Mark Lam  <mark.lam@apple.com>

        Clean up calls to DatabaseTracker::add/removeOpenDatabase().
        https://bugs.webkit.org/show_bug.cgi?id=108431

        Reviewed by Geoffrey Garen.

        Also adapted the chromium port to work with this new code.
        Chromium parts reviewed by Michael Nordman and David Levin.

        This is part of the webdatabase refactoring effort.

        No new tests.

        * Modules/webdatabase/AbstractDatabaseServer.h:
        (AbstractDatabaseServer):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::close):
        * Modules/webdatabase/DatabaseBackend.cpp:
        (WebCore::DatabaseBackend::DatabaseBackend):
        (WebCore::DatabaseBackend::closeDatabase):
        (DoneCreatingDatabaseOnExitCaller):
        (WebCore::DoneCreatingDatabaseOnExitCaller::DoneCreatingDatabaseOnExitCaller):
        (WebCore::DoneCreatingDatabaseOnExitCaller::~DoneCreatingDatabaseOnExitCaller):
        (WebCore::DatabaseBackend::performOpenAndVerify):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseManager::openDatabaseSync):
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Modules/webdatabase/DatabaseServer.cpp:
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::DatabaseSync::~DatabaseSync):
        (WebCore::DatabaseSync::openAndVerifyVersion):
        (WebCore::DatabaseSync::closeImmediately):
        * Modules/webdatabase/DatabaseSync.h:
        (DatabaseSync):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        * Modules/webdatabase/DatabaseTracker.h:
        (DatabaseTracker):
        * Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::prepareToOpenDatabase):
        (WebCore::DatabaseTracker::failedToOpenDatabase):

2013-02-01  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: remove extra padding around overlay highlight.
        https://bugs.webkit.org/show_bug.cgi?id=108679

        Reviewed by Alexander Pavlov.

        No new tests: no change in behaviour.

        Remove extraWidth from overlay highlight spans.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._appendOverlayHighlight):

2013-02-01  Philip Rogers  <pdr@google.com>

        Prevent skipped repaints for children of inner SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=108429

        Reviewed by Eric Seidel.

        This patch fixes a bug caused by r108699 and r133786 where we would not repaint children
        of inner SVG elements because "m_didTransformToRootUpdate" was never reset on viewport
        containers. The stale m_didTransformToRootUpdate variable caused us to skip child repaints.

        I verified that the Robohornet SVG benchmark performance gains in r133786 are not regressed
        with this patch.

        Test: svg/repaint/svgsvgelement-repaint-children.html

        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport):

            This can be removed because setNeedsTransformUpdate() will set m_needsTransformUpdate.

        (WebCore::RenderSVGViewportContainer::calculateLocalTransform):

            This change is straightforward and is similar to the equivalent assignment in
            RenderSVGTransformableContainer::calculateLocalTransform().

2013-02-01  Philip Rogers  <pdr@google.com>

        Change hasAlpha to isKnownToBeOpaque and correct the return value for SVG images.
        https://bugs.webkit.org/show_bug.cgi?id=106966

        Reviewed by Stephen White.

        Previously, Image::currentFrameHasAlpha's default implementation returned false so SVG
        images always returned false for currentFrameHasAlpha. Additionally, currentFrameHasAlpha
        was treated as returning whether the frame had alpha when it would actually conservatively
        return true.

        This patch renames hasAlpha and currentFrameHasAlpha to isKnownToBeOpaque and
        currentFrameIsKnownToBeOpaque, respectively. This rename better describes the actual
        functionality. This patch also makes Image::isKnownToBeOpaque a pure virtual function and
        correctly implements it for SVG images.

        All users of isKnownToBeOpaque access SVG images using CachedImage::imageForRenderer which
        currently returns a cached bitmap image. Therefore, this patch will not affect existing
        functionality. A regression test has been added that will catch if this changes in the
        future (e.g., WK106159 which proposes not returning cached bitmaps). The now unnecessary
        isBitmapImage() calls have been removed in this patch.

        image-box-shadow.html has been modified to test SVG images.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::subimageKnownToBeOpaque):
        (WebCore::CSSCrossfadeValue::knownToBeOpaque):

            Mostly straightforward rename but note the logic has been slightly altered: AND -> OR.

        * css/CSSCrossfadeValue.h:
        (CSSCrossfadeValue):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::knownToBeOpaque):
        * css/CSSGradientValue.h:
        (CSSGradientValue):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::knownToBeOpaque):
        * css/CSSImageGeneratorValue.h:
        (CSSImageGeneratorValue):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::knownToBeOpaque):
        * css/CSSImageValue.h:
        (CSSImageValue):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::currentFrameKnownToBeOpaque):
        * loader/cache/CachedImage.h:
        (CachedImage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::currentFrameKnownToBeOpaque):
        * platform/graphics/BitmapImage.h:
        (BitmapImage):
        * platform/graphics/GeneratedImage.h:
        (GeneratedImage):
        * platform/graphics/Image.h:

            Note: now a pure virtual function!

        (Image):
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::updateTextureContentsIfNeeded):

            Removed unnecessary isBitmapImage() checks.

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

            Removed unnecessary isBitmapImage() checks.

        * platform/graphics/cg/PDFDocumentImage.h:
        (PDFDocumentImage):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:

            Removed unnecessary isBitmapImage() checks.

        (WebCore::GraphicsLayerChromium::setContentsToImage):
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::currentFrameKnownToBeOpaque):
        * platform/graphics/qt/StillImageQt.h:
        (StillImage):
        * platform/graphics/skia/BitmapImageSingleFrameSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::currentFrameKnownToBeOpaque):
        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        (BitmapImageSingleFrameSkia):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTile::updateContents):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::update):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::backgroundIsObscured):

            Removed unnecessary isBitmapImage() checks and slightly reworked the logic.

        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::hasOpaqueImage):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::knownToBeOpaque):
        * rendering/style/StyleCachedImage.h:
        (StyleCachedImage):
        * rendering/style/StyleCachedImageSet.cpp:
        (WebCore::StyleCachedImageSet::knownToBeOpaque):
        * rendering/style/StyleCachedImageSet.h:
        (StyleCachedImageSet):
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::knownToBeOpaque):
        * rendering/style/StyleGeneratedImage.h:
        (StyleGeneratedImage):
        * rendering/style/StyleImage.h:
        (StyleImage):
        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::knownToBeOpaque):
        * svg/graphics/SVGImage.h:
        (SVGImage):

2013-02-01  Brady Eidson  <beidson@apple.com>

        Clean up WebArchive loading with the NetworkProcess
        <rdar://problem/12695840> and https://bugs.webkit.org/show_bug.cgi?id=108673

        Reviewed by Alexey Proskuryakov.

        No new tests (No change in WebCore behavior).

        Remove a now unneeded function and add a needed export.

        * WebCore.exp.in:
        * loader/ResourceLoadScheduler.cpp:
        * loader/ResourceLoadScheduler.h:

2013-02-01  Alok Priyadarshi  <alokp@chromium.org>

        Print GraphicsLayer::m_contentsOpaque if non-default (true)
        https://bugs.webkit.org/show_bug.cgi?id=108354

        Reviewed by Simon Fraser.

        No new tests. This change facilitates testing of GraphicsLayer opaqueness.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):

2013-02-01  Tony Gentilcore  <tonyg@chromium.org>

        Continue making XSSAuditor thread safe: Remove dependency on parser's Document URL
        https://bugs.webkit.org/show_bug.cgi?id=108655

        Reviewed by Adam Barth.

        No new tests because no new functionality.

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::isLikelySafeResource):
        * html/parser/XSSAuditor.h:

2013-02-01  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r141281): Navigating to this HTTP Live Streaming (application/vnd.apple.mpegurl) URL downloads a file instead of playing it in the browser
        https://bugs.webkit.org/show_bug.cgi?id=108674
        <rdar://problem/13133595>

        Reviewed by Eric Carlson.

        When passed a HashSet of available MIME types to fill out, QTKit was overwriting the contents, which were
        AVFoundation's supported types. Instead, it should be appending to the list of supported types.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::concatenateHashSets): Added static utility function.
        (WebCore::MediaPlayerPrivateQTKit::getSupportedTypes): Concatenate instead of overwriting the passed in MIME types.

2013-02-01  Beth Dakin  <bdakin@apple.com>

        Another speculative windows build fix.

        * platform/ScrollAnimator.h:

2013-01-31  Dirk Schulze  <krit@webkit.org>

        [canvas] Add more constructors to Path
        https://bugs.webkit.org/show_bug.cgi?id=108587

        Reviewed by Dean Jackson.

        Add more constructors to Path object to make it possible
        to copy Path objects and parse SVG strings into a Path
        object that can be used on the canvas context afterwards.

        Test: fast/canvas/canvas-path-constructors.html

        * html/canvas/DOMPath.h: New constructors for Path.
        (WebCore::DOMPath::create):
        (WebCore::DOMPath::DOMPath):
        * html/canvas/DOMPath.idl: Ditto.

2013-02-01  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add WTFURL source files to the build
        https://bugs.webkit.org/show_bug.cgi?id=108215

        Reviewed by Benjamin Poulain.

        * platform/KURLWTFURL.cpp:
        (WebCore): Only use the stub implementation of the fileSystemPath method for the
        Apple ports, other ports should for now still rely on their platform-specific implementations.

2013-02-01  Mike West  <mkwst@chromium.org>

        Remove call to SecurityOrigin::canAccessDatabase from IDB constructor.
        https://bugs.webkit.org/show_bug.cgi?id=108477

        Reviewed by Adam Barth.

        This change removes the 'SecurityOrigin::canAccessDatabase' check from
        the constructor for the 'indexedDB' property on both DOMWindow and
        WorkerContext. After the patch for http://wkbug.com/94171 this check
        is redundant, as all the entry points to IDB are now gated on access
        being granted.

        As a side-effect, dropping the check in WorkerContextIndexedDatabase
        allows us to stop holding a pointer to the ScriptExecutionContext we're
        extending, which can only be a good thing.

        The tests in storage/indexeddb should continue to pass.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::indexedDB):
            Drop the SecurityOrigin::canAccessDatabase check.
        * Modules/indexeddb/WorkerContextIndexedDatabase.cpp:
        (WebCore::WorkerContextIndexedDatabase::WorkerContextIndexedDatabase):
        (WebCore::WorkerContextIndexedDatabase::from):
            Drop the ScriptExecutionContext parameter from the class's
            constructor and callsites.
        (WebCore::WorkerContextIndexedDatabase::indexedDB):
            Drop the SecurityOrigin::canAccessDatabase check.
        * Modules/indexeddb/WorkerContextIndexedDatabase.h:
        (WorkerContextIndexedDatabase):
            Drop the stored pointer to ScriptExecutionContext, as we no longer
            need it in ::indexedDB.

2013-02-01  Beth Dakin  <bdakin@apple.com>

        Speculative Windows build fix. 

        * platform/ScrollAnimator.h:
        (WebCore):

2013-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Smart link can erroneously move caret after an URL when typing immediately before it
        https://bugs.webkit.org/show_bug.cgi?id=92812

        Reviewed by Enrica Casucci.

        The bug was caused by smart link being triggered even when a user finished typing a word
        immediately before an URL. We already had a logic to avoid smart-linking an URL when the caret
        was after the URL but we were missing a check for when the caret is before the URL.

        Fixed the bug by adding this check.

        Test: editing/inserting/smart-link-when-caret-is-moved-before-URL.html

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):

2013-02-01  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix. FloatSize.cpp was not included in the project.

        * WebCore.vcproj/WebCore.vcproj:

2013-02-01  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] computePreferredLogicalWidths doesn't handle minmax tracks
        https://bugs.webkit.org/show_bug.cgi?id=108403

        Reviewed by Ojan Vafai.

        Test: fast/css-grid-layout/grid-preferred-logical-widths.html

        The code before this change was only handling minmax() with 2 fixed widths.
        The new code was updated to remove this artificial limitation and we now
        support all combination of minmax().

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computePreferredLogicalWidths):
        Updated to use computePreferredTrackWidth..

        (WebCore::RenderGrid::computePreferredTrackWidth):
        Added this helper function that implements the core of the preferred width
        computation.

        * rendering/RenderGrid.h: Added computePreferredTrackWidth.

2013-02-01  Nate Chapin  <japhet@chromium.org>

        Cached main resources report a zero identifer on 304s
        https://bugs.webkit.org/show_bug.cgi?id=108402

        Reviewed by Adam Barth.

        Test: http/tests/cache/iframe-304-crash.html

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::responseReceived): Throughout, check m_identifierForLoadWithoutResourceLoader
            instead of !loader() to determine whether MainResourceLoader needs to synthesize resource load callbacks.
        (WebCore::MainResourceLoader::dataReceived):
        (WebCore::MainResourceLoader::didFinishLoading):

2013-02-01  Nico Weber  <thakis@chromium.org>

        [chromium] Build webkit with enable_web_intents set to 0.
        https://bugs.webkit.org/show_bug.cgi?id=108408

        Reviewed by Tony Chang.

        I'll then make chromium build fine with that, then switch
        enable_web_intents to 0, roll that into webkit, and then
        actually remove the code hidden behind this flag.

        * bindings/v8/custom/V8IntentCustom.cpp:

2013-02-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make console object state hint non-active
        https://bugs.webkit.org/show_bug.cgi?id=108642

        Reviewed by Vsevolod Vlasov.

        Otherwise it seems like an active element user could click.

        * inspector/front-end/inspector.css:
        (.object-info-state-note):

2013-02-01  Rashmi Shyamasundar  <rashmi.s2@samsung.com>

        Zero size gradient should paint nothing on canvas
        https://bugs.webkit.org/show_bug.cgi?id=102654

        Reviewed by Dirk Schulze.

        The functions fill(), fillText(), stroke(), strokeRect() and strokeText()
        should paint nothing on canvas when the canvas fillStyle/strokeStyle
        is set to a zero size gradient.
 
        Tests: fast/canvas/canvas-fill-zeroSizeGradient.html
               fast/canvas/canvas-fillRect-zeroSizeGradient.html
               fast/canvas/canvas-fillText-zeroSizeGradient.html
               fast/canvas/canvas-stroke-zeroSizeGradient.html
               fast/canvas/canvas-strokeRect-zeroSizeGradient.html
               fast/canvas/canvas-strokeText-zeroSizeGradient.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):

2013-02-01  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        HRTFElevation segfault if a null AudioBus is returned by loadPlatformResource
        https://bugs.webkit.org/show_bug.cgi?id=108504

        Reviewed by Kenneth Russell.

        Fixed a segfault by checking if the returned AudioBus is null or not.
        If it is, we should early return in the same way it was being done already
        in HRTFElevation::calculateKernelsForAzimuthElevation();

        No new tests, covered by existing tests.

        * platform/audio/HRTFElevation.cpp:
        (WebCore::getConcatenatedImpulseResponsesForSubject):

2013-02-01  Beth Dakin  <bdakin@apple.com>

        ScrollAnimatorMac should adopt contentAreaScrolledInDirection
        https://bugs.webkit.org/show_bug.cgi?id=108647
        -and corresponding-
        <rdar://problem/12434779>

        Reviewed by Anders Carlsson.

        This patch makes notifyContentAreaScrolled() and notifyPositionChanged() take a 
        FloatSize parameter that represents the scroll delta so that it can be passed 
        along to contentAreaScrolledInDirection:. 

        Pass along the scroll delta.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::scrollToOffsetWithoutAnimation):

        The delta is not needed in this base-class implementation. It will only be needed 
        in the ScrollAnimatorMac override.
        (WebCore::ScrollAnimator::notifyPositionChanged):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::notifyContentAreaScrolled):

        Pass along the delta.
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorNone::animationTimerFired):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollPositionChanged):

        Add contentAreaScrolledInDirection: to the NSScrollerImpDetails.
        * platform/mac/NSScrollerImpDetails.h:

        New member variable m_contentAreaScrolledTimerScrollDelta stores the current 
        scroll delta while we are waiting for m_sendContentAreaScrolledTimer to fire.
        * platform/mac/ScrollAnimatorMac.h:

        We need this so that we can call just contentAreaScrolled if 
        contentAreaScrolledInDirection: is not available.
        * platform/mac/ScrollAnimatorMac.mm:
        (supportsContentAreaScrolledInDirection):

        Pass along the delta.
        (WebCore::ScrollAnimatorMac::immediateScrollTo):
        (WebCore::ScrollAnimatorMac::notifyPositionChanged):
        (WebCore::ScrollAnimatorMac::mayBeginScrollGesture):
        (WebCore::ScrollAnimatorMac::notifyContentAreaScrolled):
        (WebCore::ScrollAnimatorMac::immediateScrollBy):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledSoon):

        If contentAreaScrolledInDirection: is available, call it with the delta, and then 
        reset our delta. Otherwise, still call contentAreaScrolled.
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired):

2013-02-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [file selector dialog] for mixed case queries, score uppercase letters only when assessing camelcase.
        https://bugs.webkit.org/show_bug.cgi?id=108639

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog.prototype._createScoringRegex):

2013-02-01  Robert Hogan  <robert@webkit.org>

        Padding in a parent inline preceding an empty inline child should be counted towards width
        https://bugs.webkit.org/show_bug.cgi?id=108226

        Reviewed by Levi Weintraub.

        Add the border/padding/margin from an empty inline's parent inline if it is the first or last
        child of the inline. 

        Tests: fast/inline/parent-inline-element-padding-contributes-width.html
               fast/inline/positioned-element-padding-contributes-width.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):

2013-02-01  Tony Gentilcore  <tonyg@chromium.org>

        Continue making XSSAuditor thread safe: Remove dependencies on m_parser from init()
        https://bugs.webkit.org/show_bug.cgi?id=108531

        Reviewed by Adam Barth.

        The threaded HTML parser will create and init() the XSSAuditor on the main thread, but filterToken() will be called on the background.

        No new tests because no change in functionality.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
        (WebCore):
        (XSSAuditor):

2013-02-01  Brady Eidson  <beidson@apple.com>

        Remove unnecessary parameter from DocumentLoader::scheduleArchiveLoad
        https://bugs.webkit.org/show_bug.cgi?id=108654

        Reviewed by Alexey Proskuryakov.

        No new tests (No behavior change.)

        Remove the KURL parameter parameter from this method which, in practice,
        is always the same as the url of the ResourceRequest parameter.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        * loader/DocumentLoader.h:

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::start):

2013-02-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: relax goto file matching again.
        https://bugs.webkit.org/show_bug.cgi?id=108346

        Reviewed by Vsevolod Vlasov.

        This change brings back behavior introduced in r116244.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog.prototype._createItemElement):
        (WebInspector.FilteredItemSelectionDialog.prototype._createSearchRegex):
        (WebInspector.FilteredItemSelectionDialog.prototype._createScoringRegex):
        (WebInspector.FilteredItemSelectionDialog.prototype._filterItems.compareFunction):
        (WebInspector.FilteredItemSelectionDialog.prototype._filterItems):
        (WebInspector.FilteredItemSelectionDialog.prototype._onMouseMove):
        (WebInspector.FilteredItemSelectionDialog.prototype.itemElement):
        (WebInspector.OpenResourceDialog):
        * inspector/front-end/utilities.js:
        (String.regexSpecialCharacters):
        (String.prototype.escapeForRegExp):

2013-02-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Navigator should not create tree elements for uiSourceCodes unless neededm should populate folders on expand only.
        https://bugs.webkit.org/show_bug.cgi?id=108601

        Reviewed by Pavel Feldman.

        Tree elememnts for uiSourceCodes are not created until really needed anymore.
        They are now created when parent folder tree elememnts are expanded or when uiSourceCode is revealed in navigator.

        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView):
        (WebInspector.NavigatorView.prototype.addUISourceCode):
        (WebInspector.NavigatorView.prototype._getOrCreateScriptTreeElement):
        (WebInspector.NavigatorView.prototype._getScriptTreeElement):
        (WebInspector.NavigatorView.prototype._createScriptTreeElement):
        (WebInspector.NavigatorView.prototype._removeScriptTreeElement):
        (WebInspector.NavigatorView.prototype._updateScriptTitle):
        (WebInspector.NavigatorView.prototype.isScriptSourceAdded):
        (WebInspector.NavigatorView.prototype.revealUISourceCode):
        (WebInspector.NavigatorView.prototype.removeUISourceCode):
        (WebInspector.NavigatorView.prototype.reset):
        (WebInspector.NavigatorView.prototype.createFolderTreeElement):
        (WebInspector.NavigatorView.prototype._populateFolderTreeElement):
        (WebInspector.NavigatorView.prototype._addScriptTreeElement):
        (WebInspector.NavigatorView.prototype._adoptUISourceCode):
        (WebInspector.NavigatorFolderTreeElement):
        (WebInspector.NavigatorFolderTreeElement.prototype.onpopulate):

2013-02-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TabbedEditorContainer.History performance optimization.
        https://bugs.webkit.org/show_bug.cgi?id=108581

        Introduced history items indexing by url.

        Reviewed by Pavel Feldman.

        Covered by existing test.

        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.History):
        (WebInspector.TabbedEditorContainer.History.prototype.index):
        (WebInspector.TabbedEditorContainer.History.prototype._rebuildItemIndex):
        (WebInspector.TabbedEditorContainer.History.prototype.update):
        (WebInspector.TabbedEditorContainer.History.prototype.remove):

2013-02-01  Geoffrey Garen  <ggaren@apple.com>

        Added TriState to WTF and started using it in one place
        https://bugs.webkit.org/show_bug.cgi?id=108628

        Reviewed by Beth Dakin.

        * editing/EditingStyle.h:
        (WebCore): Moved TriState to WTF so it can be used in more places.

2013-02-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Follow up to r141260: fixing renamed style.
        Not reviewed.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog.prototype._createItemElement):
        (WebInspector.FilteredItemSelectionDialog.prototype._onClick):
        (WebInspector.FilteredItemSelectionDialog.prototype._onMouseMove):

2013-02-01  Alexis Menard  <alexis@webkit.org>

        Enable unprefixed CSS transitions by default.
        https://bugs.webkit.org/show_bug.cgi?id=108216

        Reviewed by Dean Jackson.

        Rename the flag CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
        to CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED which will be used later to 
        guard the unprefixing work for CSS Transforms and animations. Remove the
        various #ifdefs and conditional generations.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * GNUmakefile.features.am.in:
        * css/CSSPropertyNames.in:
        * dom/EventNames.in:
        * dom/TransitionEvent.cpp:
        * dom/TransitionEvent.h:
        * dom/TransitionEvent.idl:
        * page/DOMWindow.idl:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):

2013-02-01  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r141548.
        http://trac.webkit.org/changeset/141548
        https://bugs.webkit.org/show_bug.cgi?id=108579

        userscript-plugin-document.html is flaky

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::setWrapperInObject):
        * bindings/v8/V8GCController.cpp:
        (WebCore):
        (WebCore::gcTree):
        (WebCore::V8GCController::didCreateWrapperForNode):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (V8GCController):

2013-02-01  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: fix jscompiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=108604

        Reviewed by Pavel Feldman.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleGroup.prototype.addMessage):
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextSubMenuItem):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype._copyImageURL):
        (WebInspector.ImageView.prototype._openInNewTab):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._clearBrowserCache):
        (WebInspector.NetworkLogView.prototype._clearBrowserCookies):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.IDBDatabaseTreeElement.prototype._refreshIndexedDB):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.SnippetsNavigatorView.prototype._handleEvaluateSnippet):
        (WebInspector.SnippetsNavigatorView.prototype._handleRenameSnippet):
        (WebInspector.SnippetsNavigatorView.prototype._handleRemoveSnippet):
        (WebInspector.SnippetsNavigatorView.prototype._handleCreateSnippet):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar.prototype._isDockedToBottom):

2013-02-01  Jae Hyun Park  <jae.park@company100.net>


        Coordinated Graphics : Sort Target.pri and class declarations in alphabetical order.
        https://bugs.webkit.org/show_bug.cgi?id=108590

        Reviewed by Noam Rosenthal.

        Sort CoordinatedGraphics files in Target.pri in alphabetical order.

        No new tests. No change in behavior.

        * Target.pri:

2013-02-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: provide edge names to class members in all WebCore instrumented classes.
        https://bugs.webkit.org/show_bug.cgi?id=107369

        Reviewed by Yury Semikhatsky.

        It is almost mechanical change generated by a script.
        Late I'll implement name to edge name consistency check in clang plugin.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::reportMemoryUsage):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::reportMemoryUsage):
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::reportMemoryUsage):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::reportMemoryUsage):
        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperMap::reportMemoryUsage):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::StringCache::reportMemoryUsage):
        * css/CSSBorderImageSliceValue.cpp:
        (WebCore::CSSBorderImageSliceValue::reportDescendantMemoryUsage):
        * css/CSSCalculationValue.cpp:
        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::reportDescendantMemoryUsage):
        * css/CSSCharsetRule.cpp:
        (WebCore::CSSCharsetRule::reportMemoryUsage):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::reportMemoryUsage):
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::reportDescendantMemoryUsage):
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::reportDescendantMemoryUsage):
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::reportMemoryUsage):
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::reportDescendantMemoryUsage):
        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::reportDescendantMemoryUsage):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientColorStop::reportMemoryUsage):
        (WebCore::CSSGradientValue::reportBaseClassMemoryUsage):
        (WebCore::CSSLinearGradientValue::reportDescendantMemoryUsage):
        (WebCore::CSSRadialGradientValue::reportDescendantMemoryUsage):
        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::reportMemoryUsage):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::reportBaseClassMemoryUsage):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::reportDescendantMemoryUsage):
        (WebCore::CSSImageSetValue::ImageWithScale::reportMemoryUsage):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::reportDescendantMemoryUsage):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::reportMemoryUsage):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::reportMemoryUsage):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::reportMemoryUsage):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::reportDescendantMemoryUsage):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::reportMemoryUsage):
        * css/CSSReflectValue.cpp:
        (WebCore::CSSReflectValue::reportDescendantMemoryUsage):
        * css/CSSRule.cpp:
        (WebCore::CSSRule::reportMemoryUsage):
        * css/CSSRuleList.cpp:
        (WebCore::StaticCSSRuleList::reportMemoryUsage):
        * css/CSSRuleList.h:
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::reportMemoryUsage):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::reportMemoryUsage):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::reportMemoryUsage):
        * css/CSSValue.cpp:
        (WebCore::TextCloneCSSValue::reportDescendantMemoryUsage):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::reportDescendantMemoryUsage):
        * css/CSSVariableValue.h:
        (WebCore::CSSVariableValue::reportDescendantMemoryUsage):
        * css/FontFeatureValue.cpp:
        (WebCore::FontFeatureValue::reportDescendantMemoryUsage):
        * css/FontValue.cpp:
        (WebCore::FontValue::reportDescendantMemoryUsage):
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::reportMemoryUsage):
        (WebCore::MediaList::reportMemoryUsage):
        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::reportMemoryUsage):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::reportMemoryUsage):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::reportMemoryUsage):
        (WebCore::StyleRuleCSSStyleDeclaration::reportMemoryUsage):
        (WebCore::InlineCSSStyleDeclaration::reportMemoryUsage):
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::reportMemoryUsage):
        * css/RuleSet.cpp:
        (WebCore::RuleData::reportMemoryUsage):
        (WebCore::RuleSet::reportMemoryUsage):
        (WebCore::RuleSet::RuleSetSelectorPair::reportMemoryUsage):
        * css/ShadowValue.cpp:
        (WebCore::ShadowValue::reportDescendantMemoryUsage):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::reportMemoryUsage):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchedProperties::reportMemoryUsage):
        (WebCore::StyleResolver::MatchedPropertiesCacheItem::reportMemoryUsage):
        (WebCore::MediaQueryResult::reportMemoryUsage):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleRule.cpp:
        (WebCore::StyleRule::reportDescendantMemoryUsage):
        (WebCore::StyleRulePage::reportDescendantMemoryUsage):
        (WebCore::StyleRuleFontFace::reportDescendantMemoryUsage):
        (WebCore::StyleRuleGroup::reportDescendantMemoryUsage):
        (WebCore::StyleRuleMedia::reportDescendantMemoryUsage):
        (WebCore::StyleRuleRegion::reportDescendantMemoryUsage):
        (WebCore::StyleRuleViewport::reportDescendantMemoryUsage):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::reportDescendantMemoryUsage):
        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::reportMemoryUsage):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::reportMemoryUsage):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::reportMemoryUsage):
        (WebCore::WebKitCSSKeyframeRule::reportMemoryUsage):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::StyleRuleKeyframes::reportDescendantMemoryUsage):
        (WebCore::WebKitCSSKeyframesRule::reportMemoryUsage):
        * css/WebKitCSSSVGDocumentValue.cpp:
        (WebCore::WebKitCSSSVGDocumentValue::reportDescendantMemoryUsage):
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::reportDescendantMemoryUsage):
        * css/WebKitCSSViewportRule.cpp:
        (WebCore::WebKitCSSViewportRule::reportMemoryUsage):
        * dom/Attribute.h:
        (WebCore::Attribute::reportMemoryUsage):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::reportMemoryUsage):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::reportMemoryUsage):
        * dom/ContainerNode.h:
        (ContainerNode):
        * dom/Document.cpp:
        (WebCore::Document::reportMemoryUsage):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::reportMemoryUsage):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::reportMemoryUsage):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage):
        * dom/Element.cpp:
        (WebCore::Element::reportMemoryUsage):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::reportMemoryUsage):
        * dom/ElementRareData.cpp:
        (WebCore::ElementRareData::reportMemoryUsage):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::reportMemoryUsage):
        * dom/Event.cpp:
        (WebCore::Event::reportMemoryUsage):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeListBase::reportMemoryUsage):
        * dom/Node.cpp:
        (WebCore::Node::reportMemoryUsage):
        * dom/NodeRareData.cpp:
        (WebCore::NodeListsNodeData::reportMemoryUsage):
        (WebCore::NodeRareData::reportMemoryUsage):
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::reportMemoryUsage):
        (WebCore::QualifiedName::QualifiedNameImpl::reportMemoryUsage):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportMemoryUsage):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::reportMemoryUsage):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::reportMemoryUsage):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::reportMemoryUsage):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reportMemoryUsage):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::reportMemoryUsage):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::reportMemoryUsage):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::reportMemoryUsage):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::reportMemoryUsage):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::reportMemoryUsage):
        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::reportNode):
        (WebCore::HeapGraphSerializer::reportMemoryUsage):
        * inspector/HeapGraphSerializer.h:
        (HeapGraphSerializer):
        * inspector/InspectorBaseAgent.cpp:
        (WebCore::InspectorBaseAgentInterface::reportMemoryUsage):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::reportMemoryUsage):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::reportMemoryUsage):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::reportMemoryUsage):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::reportMemoryUsage):
        (WebCore::ScriptDebugListener::Script::reportMemoryUsage):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::reportMemoryUsage):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::reportMemoryUsage):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::reportMemoryUsage):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::reportMemoryUsage):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::reportMemoryUsage):
        (WebCore::MemoryInstrumentationImpl::reportMemoryUsage):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::XHRReplayData::reportMemoryUsage):
        (WebCore::NetworkResourcesData::ResourceData::reportMemoryUsage):
        (WebCore::NetworkResourcesData::reportMemoryUsage):
        * loader/CachedMetadata.cpp:
        (WebCore::CachedMetadata::reportMemoryUsage):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::reportMemoryUsage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportMemoryUsage):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::reportMemoryUsage):
        * loader/Prerenderer.cpp:
        (WebCore::Prerenderer::reportMemoryUsage):
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::reportMemoryUsage):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::reportMemoryUsage):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::reportMemoryUsage):
        * loader/SubstituteData.cpp:
        (WebCore::SubstituteData::reportMemoryUsage):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::reportMemoryUsage):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::reportMemoryUsage):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::reportMemoryUsage):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::reportMemoryUsage):
        * loader/cache/CachedResourceHandle.cpp:
        (WebCore::CachedResourceHandleBase::reportMemoryUsage):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::reportMemoryUsage):
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::reportMemoryUsage):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::reportMemoryUsage):
        * loader/cache/CachedShader.cpp:
        (WebCore::CachedShader::reportMemoryUsage):
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::reportMemoryUsage):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::reportMemoryUsage):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::reportMemoryUsage):
        * page/Frame.cpp:
        (WebCore::Frame::reportMemoryUsage):
        * page/Page.cpp:
        (WebCore::Page::reportMemoryUsage):
        * platform/KURL.cpp:
        (WebCore::KURL::reportMemoryUsage):
        * platform/KURLGoogle.cpp:
        (WebCore::KURLGooglePrivate::reportMemoryUsage):
        * platform/KURLWTFURLImpl.h:
        (WebCore::KURLWTFURLImpl::reportMemoryUsage):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::reportMemoryUsage):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::reportMemoryUsage):
        * platform/audio/AudioArray.h:
        (WebCore::AudioArray::reportMemoryUsage):
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::reportMemoryUsage):
        * platform/audio/HRTFDatabase.cpp:
        (WebCore::HRTFDatabase::reportMemoryUsage):
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::reportMemoryUsage):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::reportMemoryUsage):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::reportMemoryUsage):
        * platform/audio/ffmpeg/FFTFrameFFMPEG.cpp:
        (reportMemoryUsage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::reportMemoryUsage):
        (WebCore::FrameData::reportMemoryUsage):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::reportMemoryUsage):
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::reportMemoryUsage):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::reportMemoryUsage):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::reportMemoryUsage):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::reportMemoryUsage):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::reportMemoryUsage):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBufferData::reportMemoryUsage):
        * platform/graphics/skia/MemoryInstrumentationSkia.cpp:
        (reportMemoryUsage):
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::reportMemoryUsage):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageFrame::reportMemoryUsage):
        (WebCore):
        (WebCore::ImageDecoder::reportMemoryUsage):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::reportMemoryUsage):
        * platform/network/FormData.cpp:
        (WebCore::FormData::reportMemoryUsage):
        (WebCore::FormDataElement::reportMemoryUsage):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::reportMemoryUsageBase):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::reportMemoryUsage):
        * platform/network/chromium/ResourceRequest.cpp:
        (WebCore::ResourceRequest::reportMemoryUsage):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::reportMemoryUsage):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::reportMemoryUsage):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::reportMemoryUsage):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::reportMemoryUsage):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::reportMemoryUsage):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::reportMemoryUsage):
        (WebCore::RenderFrameSet::GridAxis::reportMemoryUsage):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::reportMemoryUsage):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::reportMemoryUsage):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::reportMemoryUsage):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::reportMemoryUsage):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::reportMemoryUsage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::reportMemoryUsage):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::reportMemoryUsage):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::reportMemoryUsage):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::reportMemoryUsage):
        (WebCore::RenderTableSection::RowStruct::reportMemoryUsage):
        (WebCore::RenderTableSection::CellStruct::reportMemoryUsage):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::reportMemoryUsage):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::reportMemoryUsage):
        * rendering/style/DataRef.h:
        (WebCore::DataRef::reportMemoryUsage):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::reportMemoryUsage):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::reportMemoryUsage):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::reportMemoryUsage):
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::reportDescendantMemoryUsage):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::reportMemoryUsage):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::reportMemoryUsage):

2013-02-01  Philippe Normand  <pnormand@igalia.com>

        [GTK][GStreamer] FullscreenVideoControllerGtk implementation
        https://bugs.webkit.org/show_bug.cgi?id=107398

        Reviewed by Gustavo Noronha Silva.

        NATIVE_FULLSCREEN_VIDEO support for the GTK port. The previous
        FullscreenVideoController implementation was refactored as a
        sub-class of FullscreenVideoControllerGStreamer and hooked in the
        MediaPlayerPrivateGStreamer backend.

        * GNUmakefile.list.am:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/FullscreenVideoControllerGtk.cpp: Renamed from Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.cpp.
        * platform/graphics/gtk/FullscreenVideoControllerGtk.h: Renamed from Source/WebKit/gtk/WebCoreSupport/FullscreenVideoController.h.

2013-02-01  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix cursor location in Source Frame
        https://bugs.webkit.org/show_bug.cgi?id=108592

        Reviewed by Pavel Feldman.

        Normalize range before computing amount of lines in
        _updateSourcePosition.

        No new tests.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._updateSourcePosition): Normalize text range.
        * inspector/front-end/inspector.css: Slightly bigger left padding for the text.
        (.source-frame-position):

2013-02-01  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix after r141553.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):

2013-02-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Sources panel navigator reveal and expand fixes.
        https://bugs.webkit.org/show_bug.cgi?id=108584

        Reviewed by Pavel Feldman.

        Navigator folders are not expanded by default anymore.
        Made domain folder expanded for inspected page main frame domain.
        UISourceCodes are now added to navigator before editor container
        so that they could be revealed if editor container decides to show them.

        * inspector/front-end/NavigatorView.js:
        (WebInspector.BaseNavigatorTreeElement.prototype.onattach):
        (WebInspector.NavigatorFolderTreeElement.prototype.onattach):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addUISourceCode):

2013-02-01  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] drop trace log in the backend when deleting profile in frontend
        https://bugs.webkit.org/show_bug.cgi?id=108591

        Reviewed by Pavel Feldman.

        Send a dropTraceLog command to the backend when deleting a profile header from the sidebar.
        Before we were sending the command only upon deleting an existing view of a profile, so we  would not
        sent the command if the view was not created or if a profile header was removed via context menu (the ondelete() method).
        Drive-by: fixed an odd formatting of property functions.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView.prototype.dispose):
        (WebInspector.CanvasProfileHeader.prototype.reset):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileHeader.prototype.reset):
        (WebInspector.ProfileHeader.prototype.load):
        (WebInspector.ProfileHeader.prototype.canSaveToFile):
        (WebInspector.ProfileHeader.prototype.saveToFile):
        (WebInspector.ProfileHeader.prototype.loadFromFile):
        (WebInspector.ProfileHeader.prototype.fromFile):
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):

2013-02-01  Chris Fleizach  <cfleizach@apple.com>

        AX: when aria-activedescendant is used with a ComboBox role, focus should not be changed
        https://bugs.webkit.org/show_bug.cgi?id=108596

        Reviewed by Ryosuke Niwa.

        Normally, an aria-activedescendant change causes a focus change to be triggered.
        However, when used in conjunction with a combo box, this causes problems for screen readers.
        Namely, the user expects focus to remain in the text field so that the user can keep typing. 
        If focus moves to an item in the combobox list, it is not possible to keep typing.

        The solution is to not trigger a focus change in this case and instead use a selected children change notification.

        Test: platform/mac/accessibility/combobox-activedescendant-notifications.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::shouldNotifyActiveDescendant):
        (WebCore::AccessibilityRenderObject::shouldFocusActiveDescendant):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2013-02-01  Chris Fleizach  <cfleizach@apple.com>

        [Mac] REGRESSION(r140974): accessibility/lists.html fails on Lion=
        https://bugs.webkit.org/show_bug.cgi?id=108291

        Reviewed by Ryosuke Niwa.

        This accounts for differences in what AppKit gives for accessibility role descriptions between platforms
        when the subrole is not recognized, and standardizes it for WebKit.

        Unskip a failing Lion test

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):

2013-02-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Replace localeCompare in NavigatorView with compareTo.
        https://bugs.webkit.org/show_bug.cgi?id=108585

        Reviewed by Pavel Feldman.

        Replaced String.prototype.localeCompare with String.prototype.compareTo
        in NavigatorView to improve performance.

        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorTreeOutline._treeElementsCompare):

2013-02-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: File system pending requests list is not cleared after processing.
        https://bugs.webkit.org/show_bug.cgi?id=108573

        Reviewed by Pavel Feldman.

        * inspector/front-end/IsolatedFileSystemModel.js:
        (WebInspector.IsolatedFileSystemModel.prototype._processPendingFileSystemRequests):

2013-02-01  Tom Sepez  <tsepez@chromium.org>

        Dubious cast from HTMLCollection to HTMLAllCollection
        https://bugs.webkit.org/show_bug.cgi?id=108538

        Reviewed by Adam Barth.

        Patch is tested by enabling V8 binding integrity on HTMLAllCollection and
        running the existing tests without introducing new crashes.

        * dom/Document.cpp:
        (WebCore::Document::all):
        Pass correct type to template.
        
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::create):
        (WebCore::HTMLAllCollection::HTMLAllCollection):
        * html/HTMLAllCollection.h:
        (HTMLAllCollection):
        Make create() method arguments compatible with template above.

        * html/HTMLAllCollection.idl:
        Enable binding integrity.

2013-02-01  Ken Kania  <kkania@chromium.org>

        Web Inspector: Add support for handling modal dialogs
        https://bugs.webkit.org/show_bug.cgi?id=107883

        Reviewed by Pavel Feldman.

        Introduce support for being notified when a JavaScript modal dialog
        is opening and closing, as well as a new command for accepting or
        dismissing the dialog.

        Test: inspector-protocol/page/willRunJavaScriptDialog.html

        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::handleJavaScriptDialog):
        (InspectorClient):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willRunJavaScriptDialogImpl):
        (WebCore::InspectorInstrumentation::didRunJavaScriptDialogImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willRunJavaScriptDialog):
        (WebCore):
        (WebCore::InspectorInstrumentation::didRunJavaScriptDialog):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::willRunJavaScriptDialog):
        (WebCore):
        (WebCore::InspectorPageAgent::didRunJavaScriptDialog):
        (WebCore::InspectorPageAgent::handleJavaScriptDialog):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.PageDispatcher.prototype.frameStartedLoading):
        (WebInspector.PageDispatcher.prototype.frameStoppedLoading):
        (WebInspector.PageDispatcher.prototype.frameScheduledNavigation):
        (WebInspector.PageDispatcher.prototype.frameClearedScheduledNavigation):
        (WebInspector.PageDispatcher.prototype.javascriptDialogOpening):
        (WebInspector.PageDispatcher.prototype.javascriptDialogClosed):
        * page/Chrome.cpp:
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):

2013-02-01  Dan Alcantara  <dfalcantara@chromium.org>

        Touch disambiguation blacklist is not being queried properly
        https://bugs.webkit.org/show_bug.cgi?id=108222

        Reviewed by Adam Barth.

        TEST=WebFrameTest::DisambiguationPopupBlacklist

        Fix the blacklist so that we check it for the right nodes.
        Add a chromium test to check that the blacklist is being built and used
        correctly.  Also update the other DisambiguationPopup tests to
        use the new page scale method.

        * page/TouchDisambiguation.cpp:
        (WebCore::findGoodTouchTargets):

2013-01-31  Kentaro Hara  <haraken@chromium.org>

        [V8] Add a temporary optional Isolate parameter to HasInstance()
        https://bugs.webkit.org/show_bug.cgi?id=108567

        Reviewed by Adam Barth.

        The optional Isolate parameter will be removed once all call sites have an Isolate.
        It will require several patches.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrSetter):
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::HasInstance):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::HasInstance):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::HasInstance):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::HasInstance):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::HasInstance):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::HasInstance):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::HasInstance):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::overloadedMethodCallback):
        (WebCore::TestObjV8Internal::variadicNodeMethodCallback):
        (WebCore::V8TestObj::HasInstance):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructorCallback):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):

2013-02-01  Nils Barth  <nbarth@google.com>

        [CPP,GObject,ObjC] Add 'static' skip to CodeGenerator{CPP,GObject,ObjC}.pm
        https://bugs.webkit.org/show_bug.cgi?id=108578

        Reviewed by Kentaro Hara.

        Since CPP/GObject/ObjC code generators (CodeGenerator{CPP,GObject,ObjC}.pm)
        do not support static attributes, add test to skip these.
        This lets us remove #if macro from static in test files and not need
        these in future.

        Test: bindings/scripts/test/TestObj.idl (run-bindings-test)
        Test: bindings/scripts/test/TestSupplemental.idl (run-bindings-test)

        * bindings/scripts/CodeGeneratorCPP.pm:
        (SkipAttribute):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (SkipAttribute):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSupplemental.idl:

2013-02-01  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove V8GCController::m_edenNodes
        https://bugs.webkit.org/show_bug.cgi?id=108579

        Reviewed by Adam Barth.

        Currently V8GCController::m_edenNodes stores a list of nodes whose
        wrappers have been created since the latest GC. The reason why we
        needed m_edenNodes is that there was no way to know a list of wrappers
        in the new space of V8. By using m_edenNodes, we had been approximating
        'wrappers in the new space' by 'wrappers that have been created since
        the latest GC'.

        Now V8 provides VisitHandlesForPartialDependence(), with which WebKit
        can know a list of wrappers in the new space. By using the API, we can
        remove V8GCController::m_edenNodes. The benefit is that (1) we no longer
        need to keep m_edenNodes and that (2) it enables more precise minor
        DOM GC (Remember that m_edenNodes was just an approximation).

        Performance benchmark: https://bugs.webkit.org/attachment.cgi?id=185940
        The benchmark runs 300 iterations, each of which creates 100000 elements.
        The benchmark measures average, min, median, max and stdev of execution times
        of the 300 iterations. This will tell us the worst-case overhead of this change.

        Before:
          mean=59.91ms, min=39ms, median=42ms, max=258ms, stdev=47.48ms

        After:
          mean=58.75ms, min=35ms, median=41ms, max=250ms, stdev=47.32ms

        As shown above, I couldn't observe any performance regression.

        No tests. No change in behavior.

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::setWrapperInObject):
        * bindings/v8/V8GCController.cpp:
        (WebCore::gcTree):
        (WebCore):
        (MinorGCWrapperVisitor):
        (WebCore::MinorGCWrapperVisitor::notifyFinished):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (V8GCController):

2013-02-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Use String.prototype.startsWith instead of String.prototype.indexOf when possible
        https://bugs.webkit.org/show_bug.cgi?id=108575

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/FileMapping.js:
        (WebInspector.FileMapping.prototype._entryMatchesURL):
        (WebInspector.FileMapping.prototype.urlForURI):
        * inspector/front-end/FileSystemMapping.js:
        (get WebInspector.FileSystemMappingImpl.prototype.fileForURI):
        (get WebInspector.FileSystemMappingImpl.prototype.uriForPath):

2013-01-31  Aurimas Liutikas  <aurimas@chromium.org>

        Editor::m_compositionNode not updated on HTMLInputElement::setValue()
        https://bugs.webkit.org/show_bug.cgi?id=107737

        Reviewed by Ryosuke Niwa.

        Chromium has a bug where the IME composition did not get cancelled on JavaScript changes
        to the focused editing field. Most of other WebKit ports were already doing this check
        in their EditorClient::respondToChangedSelection. I took that logic and moved it to the
        Editor so every port and use the same code.

        An existing test editing/input/setting-input-value-cancel-ime-composition.html covers this change.
        This test used to have an expectation to fail on Chromium and after this patch it will start passing.

        * editing/Editor.cpp:
        (WebCore::Editor::cancelCompositionIfSelectionIsInvalid):
            Adding a call that can be used by any the port to cancel the composition if it's no longer valid.
        (WebCore):
        * editing/Editor.h:
        (Editor):

2013-01-31  Jae Hyun Park  <jae.park@company100.net>

        Coordinated Graphics : Move CoordinatedGraphics related files to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=108149

        Reviewed by Noam Rosenthal.

        This patch moves Coordinated Graphics related code to WebCore. To
        implement Threaded Coordinated Graphics, most of Coordianted Graphics
        code should be shared. Therefore, they should reside in WebCore instead of
        WebKit2.

        When moving to WebCore, two renamings have been done.

        1. Rename LayerTreeRenderer to CoordinatedGraphicsScene.

        2. Rename WebCustomFilterProgram and WebCustomFilterOperation to
        CoordinatedCustomFilterProgram and CoordinatedCustomFilterOperation,
        respectively.

        No new tests, covered by existing tests.

        * CMakeLists.txt:
        * Target.pri:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/AreaAllocator.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.cpp.
        * platform/graphics/texmap/coordinated/AreaAllocator.h: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.h.
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.cpp: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp.
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h.
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterOperation.h: Renamed from Source/WebKit2/Shared/CoordinatedGraphics/WebCustomFilterOperation.h.
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h: Renamed from Source/WebKit2/Shared/CoordinatedGraphics/WebCustomFilterProgram.h.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.h.
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp.
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h.
        * platform/graphics/texmap/coordinated/CoordinatedLayerInfo.h: Renamed from Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedLayerInfo.h.
        * platform/graphics/texmap/coordinated/CoordinatedSurface.cpp: Renamed from Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedSurface.cpp.
        * platform/graphics/texmap/coordinated/CoordinatedSurface.h: Renamed from Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedSurface.h.
        * platform/graphics/texmap/coordinated/CoordinatedTile.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp.
        * platform/graphics/texmap/coordinated/CoordinatedTile.h: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h.
        * platform/graphics/texmap/coordinated/SurfaceUpdateInfo.h: Renamed from Source/WebKit2/Shared/CoordinatedGraphics/SurfaceUpdateInfo.h.
        * platform/graphics/texmap/coordinated/UpdateAtlas.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp.
        * platform/graphics/texmap/coordinated/UpdateAtlas.h: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h.

2013-01-31  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        [Qt] Add support for text decoration "wavy" style
        https://bugs.webkit.org/show_bug.cgi?id=93507

        Reviewed by Simon Hausmann.

        Add support for text decoration "wavy" style for Qt platform.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQPenStyle):
        Remove FIXME comments obsoleted by this patch.
        (WebCore::GraphicsContext::drawLine):
        Implement wavy style line tracer.

2013-01-31  Nils Barth  <nbarth@google.com>

        [CPP,GObject,ObjC] Add 'enum' skip to CodeGenerator{CPP,GObject,ObjC}.pm
        https://bugs.webkit.org/show_bug.cgi?id=108565

        Reviewed by Kentaro Hara.

        Since legacy code generators (CodeGenerator{CPP,GObject,ObjC}.pm)
        do not support enumerations, add test to skip attributes of enum type.
        This lets us remove #if macro from enum in test file and not need
        these in future.
        Also minor associated code cleaning:
          auxiliary variable: $type = $attribute->signature->type.

        Test: bindings/scripts/test/TestObj.idl (run-bindings-test)

        * bindings/scripts/CodeGeneratorCPP.pm:
        (SkipAttribute):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (SkipAttribute):
        * bindings/scripts/test/TestObj.idl: remove #if macro

2013-01-31  Kent Tamura  <tkent@chromium.org>

        Refactoring: Remove the default argument value for Node::setFocus
        https://bugs.webkit.org/show_bug.cgi?id=108554

        Reviewed by Kentaro Hara.

        There is no code to use the default argument.
        No new tests. Just a refactoring.

        * dom/Node.h: Remove default argument value for setFocus.
        * dom/ContainerNode.h:
        (ContainerNode): Ditto.
        * html/HTMLAreaElement.h:
        (HTMLAreaElement): Add OVERRIDE to setFocus.
        * html/HTMLFrameElementBase.h:
        (HTMLFrameElementBase): Ditto.

2013-01-31  Victor Carbune  <vcarbune@chromium.org>

        [Track] Closed Caption button shouldn't be visible if all the track resources have failed loading
        https://bugs.webkit.org/show_bug.cgi?id=106285

        Reviewed by Eric Carlson.

        Updated existing test cases.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTracksAreReady): Checked whether there are tracks not loaded
        when the algorithm began.
        (WebCore::HTMLMediaElement::textTrackReadyStateChanged): If the ready state changed to
        FailedToLoad the media controls should check whether there are other caption tracks
        and hide the button if not.
        (WebCore::HTMLMediaElement::didAddTrack): Added trigger to closedCaptionsTrackChanged.
        (WebCore::HTMLMediaElement::hasClosedCaptions): Updated check to skip tracks that
        failed to load.
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::reset): Used the newly added method.
        (WebCore::MediaControls::refreshClosedCaptionsButtonVisibility): Added container method for
        default behaviour for refreshing the visibility of the caption button.
        (WebCore::MediaControls::closedCaptionTracksChanged): Used the newly added method.
        (WebCore):
        * html/shadow/MediaControls.h:
        (MediaControls):

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTracksAreReady):
        (WebCore::HTMLMediaElement::textTrackReadyStateChanged):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::didAddTrack):
        (WebCore::HTMLMediaElement::hasClosedCaptions):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::reset):
        (WebCore::MediaControls::refreshClosedCaptionsButtonVisibility):
        (WebCore::MediaControls::closedCaptionTracksChanged):
        (WebCore):
        * html/shadow/MediaControls.h:
        (MediaControls):

2013-01-31  Dima Gorbik  <dgorbik@apple.com>

        REGRESSION(r140231): media track layout tests crashing
        https://bugs.webkit.org/show_bug.cgi?id=107579

        Reviewed by Eric Carlson.

        We were using non-standard element names with HTMLElement, which made v8 try to cast
        WebVTTElements to HTMLUnknownElements which was not possible. Subclassing Element instead
        of HTMLElement, though this requires building HTMLElements from WebVTTElements for creating
        a DOM tree. The code has been refactored to move WebVTT node type to QuialifiedName mappings 
        inside the WebVTTElement class. All WebVTTElements in the shadow dom tree now are in the 
        namespace defined by 'NullAtom'. This prevents regular styles from being applied to <b>, <i>
        and similar tags. Those have to be styled separately without reusing existing QualifiedNames
        and their styles. https://bugs.webkit.org/show_bug.cgi?id=107214

        Unskipping tests to cover this.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::canShareStyleWithElement):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::copyWebVTTNodeToDOMTree):
        (WebCore::TextTrackCue::getCueAsHTML):
        (WebCore::TextTrackCue::createCueRenderingTree):
        (WebCore::TextTrackCue::markFutureAndPastNodes):
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::cueShadowPseudoId):
        * html/track/WebVTTElement.cpp:
        (WebCore::nodeTypeToTagName): get a QualifiedName to use in the shadow DOM tree.
        (WebCore::WebVTTElement::WebVTTElement):
        (WebCore::WebVTTElement::create):
        (WebCore::WebVTTElement::cloneElementWithoutAttributesAndChildren):
        (WebCore::WebVTTElement::createEquivalentHTMLElement): create an HTMLElement to use in the DOM tree.
        * html/track/WebVTTElement.h:
        (WebCore::WebVTTElement::setWebVTTNodeType):
        (WebCore::WebVTTElement::webVTTNodeType):
        (WebCore::WebVTTElement::isPastNode):
        (WebCore::WebVTTElement::setIsPastNode):
        (WebCore::WebVTTElement::voiceAttributeName):
        * html/track/WebVTTParser.cpp:
        (WebCore::tokenToNodeType): determine a WebVTT node type for the token.
        (WebCore::WebVTTParser::constructTreeFromToken):

2013-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141479.
        http://trac.webkit.org/changeset/141479
        https://bugs.webkit.org/show_bug.cgi?id=108564

        breaks chromium test (Requested by morrita on #webkit).

        * editing/Editor.cpp:
        * editing/Editor.h:
        (Editor):

2013-01-31  Changhun Kang  <temoochin@company100.net>

        Rename from parentOrHost* to parentOrShadowHost* in Node.h.
        https://bugs.webkit.org/show_bug.cgi?id=108308

        Reviewed by Dimitri Glazkov.

        No new tests. No change in behavior.

2013-01-31  Alec Flett  <alecflett@chromium.org>

        IndexedDB: remove old transaction backend bootstrap code
        https://bugs.webkit.org/show_bug.cgi?id=103923

        Reviewed by Dimitri Glazkov.

        Finally remove all leftover code from the IndexedDB "giant
        async refactor of 2012." This includes removal of all
        IDBTransaction* interfaces that were shared between
        the frontend and backend and a few straggling methods
        like onUpgradeNeeded and onSuccess that were left from
        the last stage of refactoring.

        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore):
        (WebCore::IDBDatabaseBackendImpl::metadata):
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (WebCore):
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (WebCore):
        * Modules/indexeddb/IDBTransaction.h:
        (WebCore):
        (IDBTransaction):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore):
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h: Removed.
        * Modules/indexeddb/IDBTransactionCallbacks.h: Removed.
        * Modules/indexeddb/IDBTransactionCoordinator.h:
        (WebCore):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:

2013-01-31  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r141502.
        http://trac.webkit.org/changeset/141502
        https://bugs.webkit.org/show_bug.cgi?id=108441

        Hit assert in SVGElementInstance

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetInternalFields):
        * dom/EventTarget.idl:
        * svg/SVGElementInstance.idl:

2013-01-31  Ojan Vafai  <ojan@chromium.org>

        Assert that computePreferredLogicalWidths never calls setNeedsLayout
        https://bugs.webkit.org/show_bug.cgi?id=108539

        Reviewed by Tony Chang.

        computePreferredLogicalWidths should only set m_minPreferredLogicalWidth
        and m_maxPreferredLogicalWidth. It shouldn't have other side-effects.
        This is take 2 after this was rolled out because it was missing the guards
        in RenderCounter/RenderQuote.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::minPreferredLogicalWidth):
        (WebCore::RenderBox::maxPreferredLogicalWidth):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::computePreferredLogicalWidths):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::computePreferredLogicalWidths):

2013-01-31  Abhishek Arya  <inferno@chromium.org>

        Use ASSERT_WITH_SECURITY_IMPLICATION to catch bad casts in DOM
        https://bugs.webkit.org/show_bug.cgi?id=108490
 
        Reviewed by Eric Seidel.

        * dom/ContainerNode.h:
        (WebCore::toContainerNode):
        * dom/Element.h:
        (WebCore::toElement):
        * dom/ShadowRoot.h:
        (WebCore::toShadowRoot):
        * dom/Text.h:
        (WebCore::toText):
        * html/HTMLElement.h:
        (HTMLElement):
        (WebCore::toHTMLElement):
        * html/HTMLFrameOwnerElement.h:
        (WebCore::toFrameOwnerElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::hasMediaControls):
        * html/HTMLTemplateElement.cpp:
        (WebCore::toHTMLTemplateElement):
        * html/HTMLUnknownElement.h:
        (WebCore::toHTMLUnknownElement):
        * html/shadow/InsertionPoint.h:
        (WebCore::toInsertionPoint):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::mediaControlElementType):
        * html/shadow/MediaControls.h:
        (WebCore::toMediaControls):
        * html/shadow/SliderThumbElement.h:
        (WebCore::toSliderThumbElement):
        * html/shadow/TextControlInnerElements.h:
        (WebCore::toInputFieldSpeechButtonElement):
        * html/shadow/TextFieldDecorationElement.h:
        (WebCore::toTextFieldDecorationElement):
        * html/track/WebVTTElement.h:
        (WebCore::toWebVTTElement):
        * mathml/MathMLElement.h:
        (WebCore::toMathMLElement):
        * page/scrolling/ScrollingStateFixedNode.h:
        (WebCore::toScrollingStateFixedNode):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::toScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateStickyNode.h:
        (WebCore::toScrollingStateStickyNode):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/svg/SVGResources.cpp:
        (WebCore::registerPendingResource):
        (WebCore::SVGResources::buildCachedResources):
        * svg/SVGElement.h:
        (WebCore::toSVGElement):
        * svg/SVGStyledElement.h:
        (WebCore::toSVGStyledElement):

2013-01-31  Christopher Cameron  <ccameron@chromium.org>

        Fix rubber-band effect on non-scrollable pages
        https://bugs.webkit.org/show_bug.cgi?id=107611

        Reviewed by Antonio Gomes.

        Handle a FrameView's wheel event even if it is not scrollable
        because Chrome relies on handling these wheel events for the
        over-scroll rubber-band effect.
 
        This had been removed in r138378
        [EFL][WK2] Never create WebCore scrollbars for EFL/WK2
        by kenneth@chromium.org

        Tests: platform/chromium/rubberbanding/wheelevent-overhang-e.html
               platform/chromium/rubberbanding/wheelevent-overhang-n.html
               platform/chromium/rubberbanding/wheelevent-overhang-s.html
               platform/chromium/rubberbanding/wheelevent-overhang-w.html

        * page/FrameView.cpp:
        (WebCore::FrameView::wheelEvent):

2013-01-31  Enrica Casucci  <enrica@apple.com>

        Mac: Editor::baseWritingDirectionForSelectionStart should return WritingDirection instead of NSWritingDirection.
        https://bugs.webkit.org/show_bug.cgi?id=108519.

        Reviewed by Sam Weinig.

        No new tests, no change in behavior.

        There is no need to use AppKit types here.
        baseWritingDirectionForSelectionStart now returns WritingDirection and
        WebHTMLView toggleWritingDirection has been modified accordingly.
        
        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::baseWritingDirectionForSelectionStart):

2013-01-31  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to GetTemplate() in CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=108445

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        (GenerateDomainSafeFunctionSetter):
        (GenerateNormalAttrGetter):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::TestActiveDOMObjectV8Internal::TestActiveDOMObjectDomainSafeFunctionSetter):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::ConfigureV8TestNodeTemplate):

2013-01-31  Kentaro Hara  <haraken@chromium.org>

        [V8] Clean up Dictionary::get() by removing redundant FindInstanceInPrototypeChain()
        https://bugs.webkit.org/show_bug.cgi?id=108443

        Reviewed by Adam Barth.

        In Dictionary::get(), wrapper->FindInstanceInPrototypeChain(V8XXX::GetTemplate())
        is unnecessary for DOM wrappers other than DOMWindow. For wrappers other than
        DOMWindow, we can simply use V8XXX::HasInstance(wrapper).

        Tests: fast/events/constructors/*

        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):

2013-01-31  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Support implicit rows and columns
        https://bugs.webkit.org/show_bug.cgi?id=103573

        Reviewed by Ojan Vafai.

        Tests: fast/css-grid-layout/implicit-columns-auto-resolution.html
               fast/css-grid-layout/implicit-rows-auto-resolution.html

        This change makes us properly initialize our GridTrack vectors's size
        so that we can safely query any items during layout.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridTrackSize):
        Added this helper function to return the track size from the grid
        element's columns' / rows' definitions or the default value.

        (WebCore::RenderGrid::maximumIndexInDirection):
        Added this helper function to get the maximum index in a direction
        taking grid item's implicit indexes into account.

        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        Changed the funtion to not append the new tracks as we are properly
        sized now.

        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        Updated these functions to use the new helper functions.

        (WebCore::RenderGrid::layoutGridItems):
        Changed this function to size both vectors when initializing them.
        Also removed an unneeded bounds check as it shouldn't be needed anymore.

        * rendering/RenderGrid.h:
        Added the new helper functions.

        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::GridTrackSize):
        Added a constructor taking a LengthType.

2013-01-31  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] fast/css/relative-positioned-block-crash.html is intermittently crashing
        https://bugs.webkit.org/show_bug.cgi?id=108200

        Reviewed by Martin Robinson.

        Getting the Position of a PseudoElement now triggers an assertion.
        This can occur when clicking on empty space in a render block.
        Looking to the unignored parent's node (and passing that accessible
        object on in a signal to Assistive Technologies) seems like the most
        reasonable thing to do here.

        No new tests; instead skipping two tests that were crashing as a result.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (objectFocusedAndCaretOffsetUnignored):

2013-01-31  Kentaro Hara  <haraken@chromium.org>

        [V8] Simplify CodeGeneratorV8.pm by using InheritsExtendedAttribute("EventTarget")
        https://bugs.webkit.org/show_bug.cgi?id=108441

        Reviewed by Adam Barth.

        A complicated condition in GetInternalFields() can be simplified
        by using InheritsExtendedAttribute("EventTarget").

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetInternalFields):
        * dom/EventTarget.idl: Added [EventTarget] which should have been added.
        * svg/SVGElementInstance.idl: Ditto.

2013-01-31  Youenn Fablet  <youennf@gmail.com>

        Quadratic and bezier curves with coincident endpoints rendered incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=105650

        Reviewed by Kenneth Russell.

        Tests: fast/canvas/canvas-bezier-same-endpoint.html
               fast/canvas/canvas-quadratic-same-endpoint.html

        * html/canvas/CanvasPathMethods.cpp:
        (WebCore::CanvasPathMethods::quadraticCurveTo):
        (WebCore::CanvasPathMethods::bezierCurveTo):

2013-01-31  Mark Lam  <mark.lam@apple.com>

        Abstraction for hiding enum class.
        https://bugs.webkit.org/show_bug.cgi?id=108533

        Reviewed by Anders Carlsson.

        No new tests.

        * Modules/webdatabase/DatabaseError.h:
        (WebCore::ENUM_CLASS_BEGIN):

2013-01-31  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [Gtk] drag and drop has black background without composition
        https://bugs.webkit.org/show_bug.cgi?id=108376

        Reviewed by Martin Robinson.

        Use gtk_drag_set_icon_surface (or gtk_drag_set_icon_pixbuf) when the
        screen is not composited. That way, drag window will be decomposited
        and rendered transparent with Xshape.

        To determine which parts of the window must be transparent, gtk checks
        if a pixel is more than 50% opaque. With dissolveDragImageToFraction,
        all pixels are made 25% transparent. With antialiasing, opacity goes
        below the threshold for some pixels, which makes the resulting image
        messy. So, we need to skip dissolveDragImageToFraction when we use
        gtk_drag_set_icon_surface.

        * platform/gtk/DragIcon.cpp:
        (WebCore::DragIcon::DragIcon):
        (WebCore::DragIcon::~DragIcon):
        (WebCore::DragIcon::setImage):
        (WebCore::DragIcon::useForDrag):
        * platform/gtk/DragIcon.h:
        (DragIcon):
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::dissolveDragImageToFraction):

2013-01-31  Tony Gentilcore  <tonyg@chromium.org>

        Begin to make XSSAuditor thread aware
        https://bugs.webkit.org/show_bug.cgi?id=108394

        Reviewed by Adam Barth.

        This patch moves the parts of filterToken() that depend on Frame, Document, etc. to a delegate class.
        The new didBlockScript delegate method is invoked with the resulting DidBlockScriptRequest which will
        be owned by the CompactHTMLToken in the threaded case.

        This is just the first step as there is more to do to make XSSAuditor thread safe.

        No new tests because covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::processTokensFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
        (WebCore):
        (XSSAuditor):
        * html/parser/XSSAuditorDelegate.cpp: Added.
        (WebCore):
        (WebCore::XSSAuditorDelegate::XSSAuditorDelegate):
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * html/parser/XSSAuditorDelegate.h: Added.
        (WebCore):
        (DidBlockScriptRequest):
        (WebCore::DidBlockScriptRequest::create):
        (WebCore::DidBlockScriptRequest::DidBlockScriptRequest):
        (XSSAuditorDelegate):

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
        (WebCore):
        (XSSAuditor):
        * html/parser/XSSAuditorDelegate.cpp: Added.
        (WebCore):
        (WebCore::XSSAuditorDelegate::XSSAuditorDelegate):
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * html/parser/XSSAuditorDelegate.h: Added.
        (WebCore):
        (DidBlockScriptRequest):
        (WebCore::DidBlockScriptRequest::create):
        (WebCore::DidBlockScriptRequest::DidBlockScriptRequest):
        (XSSAuditorDelegate):

2013-01-31  Uday Kiran  <udaykiran@motorola.com>

        CSS3's vh attribute is not adjusting while browser resizes
        https://bugs.webkit.org/show_bug.cgi?id=86418

        Reviewed by Antti Koivisto.

        Elements with viewport percentage units needs layout whenever
        viewport size changes. Check for viewport percentage unit
        was missing for height.

        Test: css3/viewport-percentage-lengths/vh-resize.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateBlockChildDirtyBitsBeforeLayout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasViewportPercentageLogicalHeight): Check if style
        is specified in viewport percentage units.
        (WebCore):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout): Elements with viewport percentage units
        needs relayout when viewport size changes.

2013-01-31  Anton Vayvod  <avayvod@chromium.org>

        TextAutosizing: refactor the cluster related method parameters into a single struct.
        https://bugs.webkit.org/show_bug.cgi?id=108384

        This anticipates adding more cluster related information in the following patches.
        
        Reviewed by Kenneth Rohde Christiansen.

        Just a refactoring so no new tests.

        * rendering/TextAutosizer.cpp: define the new struct and pass it to every method instead of
        a cluster and its descendant block containing all text.
        * rendering/TextAutosizer.h: change method prototypes to receive the new struct
        as a parameter defining an autosizing cluster.

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizingClusterInfo::TextAutosizingClusterInfo):
        (TextAutosizingClusterInfo):
        (WebCore):
        (WebCore::TextAutosizer::processSubtree):
        (WebCore::TextAutosizer::processCluster):
        (WebCore::TextAutosizer::processContainer):
        (WebCore::TextAutosizer::isAutosizingCluster):
        (WebCore::TextAutosizer::clusterShouldBeAutosized):
        (WebCore::TextAutosizer::measureDescendantTextWidth):
        * rendering/TextAutosizer.h:
        (WebCore):

2013-01-31  Jacky Jiang  <zhajiang@rim.com>

        [BlackBerry] Bing Images viewport causes layout "fun"
        https://bugs.webkit.org/show_bug.cgi?id=108393

        Reviewed by Yong Li.
        Internally reviewed by Arvid Nilsson and partially reviewed by Konrad Piascik.

        PR: 277855
        On bing.com image search page, JS generated styles for the divs which
        contained images based on the window.screen and window.innerWidth.
        Unfortunately the styles for the divs weren't good enough on our device
        which resulted in three images being overlapped in the same viewport.
        On our port, we calculate the screen rect base on the physical screen
        pixels. However, iOS and lastest Android Chrome port already changed it
        to density-independent (logical) pixels. And also to my knowledge that
        some websites would generate bad styles for us as well through
        @media device-width/device-height.
        To be consistent and fix such kinds of issues, we should use
        density-independent pixels instead of physical screen pixels. Mainly
        ported from Chrome port change r139356. The patch will affect
        screen.width/height, window.outerWidth/outerHeight and
        @media device-width/device-height.

        * platform/blackberry/PlatformScreenBlackBerry.cpp:
        (WebCore):
        (WebCore::toUserSpace):
        (WebCore::screenAvailableRect):
        (WebCore::screenRect):

2013-01-31  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Parse custom filter function with the at-rule reference syntax
        https://bugs.webkit.org/show_bug.cgi?id=108351

        Reviewed by Dean Jackson.

        This patch implements the parsing for the new custom filter function "at-rule reference"
        syntax. It does not implement the style resolution yet.

        The custom function syntax has changed in the spec. Instead of including all of the custom
        filter information inline, the custom function can now reference an @filter rule by name.
        The custom function can still accept a list of parameters.

        The syntax is defined as the following, where IDENT is the name of the @filter rule:
        filter: custom(IDENT [, <param>]*)

        In practice, it can look like this:
        filter: custom(page-curl, direction 90, amount 0.5);

        Spec: https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#customident-ltparamgt

        Tests: css3/filters/custom-with-at-rule-syntax/parsing-custom-function-invalid.html
               css3/filters/custom-with-at-rule-syntax/parsing-custom-function-valid.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCustomFilterParameters):
            Factor out a new function that just parses custom filter parameters. This is used by the
            previous inline syntax and the new at-rule reference syntax.
        (WebCore):
        (WebCore::CSSParser::parseCustomFilterFunctionWithAtRuleReferenceSyntax):
            This method parses the new at-rule reference syntax. When we remove the inline syntax,
            we can rename this method to "parseCustomFilterFunction" and call it directly.
        (WebCore::CSSParser::parseCustomFilterFunctionWithInlineSyntax):
            Move the previous inline syntax parsing code into a new function.
        (WebCore::CSSParser::parseCustomFilterFunction):
            This method looks ahead in the CSS parser values and decides whether to parse the custom
            function with the previous inline syntax or with the new at-rule reference syntax.
        (WebCore::CSSParser::parseFilter):
            I renamed the "parseCustomFilter" method to "parseCustomFilterFunction" to be more
            explicit. Here, we update the name in the call site.
        * css/CSSParser.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createCustomFilterOperationWithAtRuleReferenceSyntax):
            This is a stub method. In the future, style resolution for the at-rule reference
            syntax will happen here. When we remove the inline syntax, we can rename this method 
        (WebCore::StyleResolver::createCustomFilterOperationWithInlineSyntax):
            This method contains the previous inline syntax style resolution code.
        (WebCore):
        (WebCore::StyleResolver::createCustomFilterOperation):
            This method decides which syntax we should use to resolve the style.
        * css/StyleResolver.h:
        (StyleResolver):

2013-01-31  Aurimas Liutikas  <aurimas@chromium.org>

        Editor::m_compositionNode not updated on HTMLInputElement::setValue()
        https://bugs.webkit.org/show_bug.cgi?id=107737

        Reviewed by Ryosuke Niwa.

        Chromium has a bug where the IME composition did not get cancelled on JavaScript changes
        to the focused editing field. Most of other WebKit ports were already doing this check
        in their EditorClient::respondToChangedSelection. I took that logic and moved it to the
        Editor so every port and use the same code.

        An existing test editing/input/setting-input-value-cancel-ime-composition.html covers this change.
        This test used to have an expectation to fail on Chromium and after this patch it will start passing.

        * editing/Editor.cpp:
        (WebCore::Editor::cancelCompositionIfSelectionIsInvalid):
            Adding a call that can be used by any the port to cancel the composition if it's no longer valid.
        (WebCore):
        * editing/Editor.h:
        (Editor):

2013-01-31  Joseph Pecoraro  <pecoraro@apple.com>

        Disable ENABLE_FULLSCREEN_API on iOS
        https://bugs.webkit.org/show_bug.cgi?id=108250

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig:

2013-01-31  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Move LocalizedStrings to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=108488

        Reviewed by Adam Barth.

        Part of a larger refactoring series; see tracking bug 106829.

        * WebCore.gypi:
        * platform/chromium/LocalizedStringsChromium.cpp: Copied from Source/WebKit/chromium/src/LocalizedStrings.cpp.
        (WebCore::imageTitle):

2013-01-31  Enrica Casucci  <enrica@apple.com>

        WebKit2: provide new bundle APIs to allow bundle clients to be notified of pasteboard access.
        https://bugs.webkit.org/show_bug.cgi?id=108396.
        <rdar://problem/12920461>

        Reviewed by Alexey Proskuryakov.

        Adds support in WebCore to new EditorClient methods to support the modified
        client bundle API in WebKit2.

        * WebCore.exp.in:
        * editing/Editor.cpp:
        (WebCore::Editor::cut): Added call to willWriteSelectionToPasteboard.
        (WebCore::Editor::copy): Ditto.
        (WebCore::Editor::willWriteSelectionToPasteboard): Added.
        * editing/Editor.h:
        * loader/EmptyClients.h: Added empty client implementation
        for the new methods.
        (WebCore::EmptyEditorClient::willWriteSelectionToPasteboard):
        (WebCore::EmptyEditorClient::getClientPasteboardDataForRange):
        * page/EditorClient.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelectionForTypes): Added call to getClientPasteboardDataForRange.

2013-01-31  David Kilzer  <ddkilzer@apple.com>

        Use OS() and PLATFORM() macros in WebCorePrefix.h for readability
        <http://webkit.org/b/108374>

        Reviewed by Laszlo Gombos.

        * WebCorePrefix.h: Replaced all possible checks with OS() or
        PLATFORM() macros other than __APPLE__.

2013-01-31  Mike West  <mkwst@chromium.org>

        Cleanup: Use ScriptExecutionContext::topOrigin when relevant.
        https://bugs.webkit.org/show_bug.cgi?id=108476

        Reviewed by Jochen Eisinger.

        Rather than diving through 'frame()->top()' or 'topDocument()' to get
        the SecurityOrigin of the top-level document in a frame, we can now
        directly grab the 'topOrigin()' off of a ScriptExecutionContext. This
        patch adjusts a few callsites to use the new hotness rather than the
        old brokenness.

        This is a pure refactoring: No web-visible changes should result.

        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):

2013-01-31  peavo@outlook.com  <peavo@outlook.com>

        [Curl] There is no way for a WebKit client to set the Curl cookie jar path
        https://bugs.webkit.org/show_bug.cgi?id=107692

        Reviewed by Brent Fulgham.

        Set default cookie jar path.
        Get the cookie jar path for Curl from the environment variable CURL_COOKIE_JAR_PATH.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::cookieJarPath): Added helper function to set cookie jar path.
        (WebCore::ResourceHandleManager::ResourceHandleManager): Call helper function.

2013-01-31  Maciej Stachowiak  <mjs@apple.com>

        REGRESSION (r138962): Fails to show "confirm form resubmission", hangs browser
        https://bugs.webkit.org/show_bug.cgi?id=108214

        Reviewed by Adam Barth.
        
        Attempt a workaround suggested by Nate Chapin by putting some code
        in #ifdef !PLATFORM(CHROMIUM).

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::notifyFinished):

2013-01-31  Ojan Vafai  <ojan@chromium.org>

        REGRESSION(r128517): Percentage heights in quirks mode collapse when printing
        https://bugs.webkit.org/show_bug.cgi?id=108382

        Reviewed by David Hyatt.

        r128517 clean up our containing block finding logic, but broke percentage
        heights in quirks mode during printing since the RenderView would have 0 height.
        Turns out we already had a long-standing bug where we'd incorrectly
        treat collapse percentage heights on the body when printing as well.

        Fix both bugs by changing the way we grab the logical height on the RenderView.
        RenderView::computeLogicalHeight returns 0 when printing. For the purposes of
        stretching and percentage heights, we instead need to return the pageLogicalHeight.

        Tests: printing/quirks-percentage-height-body.html
               printing/quirks-percentage-height.html
               printing/standards-percentage-heights.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight):
        This FIXME is outdated and already fixed. Also, call viewLogicalHeightForPercentages
        which does the same logic except also correctly handles column RenderViews.
        (WebCore::RenderBox::viewLogicalHeightForPercentages):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        * rendering/RenderBox.h:

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::viewLogicalHeightForPercentages):
        (WebCore):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        * rendering/RenderBox.h:
        (RenderBox):

2013-01-31  Dirk Schulze  <krit@webkit.org>

        [canvas] Implement currentPath to get and set the current path of the context
        https://bugs.webkit.org/show_bug.cgi?id=108246

        Reviewed by Dean Jackson.

        Add currentPath attribute to CanvasRenderingContext2d interface. This allows
        setting the current context path by an existing Path object as well as getting
        the current context path as new Path object. The returned and the set Paths
        are not live.

        This feature is behind the CANVAS_PATH compiler flag which is disabled by
        default for now.

        Test: fast/canvas/canvas-currentPath.html

        * html/canvas/CanvasPathMethods.cpp: Rename transformIsInvertible to
            isTransformInvertible for harmonizing naming schema.
        (WebCore::CanvasPathMethods::moveTo): Ditto.
        (WebCore::CanvasPathMethods::lineTo): Ditto.
        (WebCore::CanvasPathMethods::quadraticCurveTo): Ditto.
        (WebCore::CanvasPathMethods::bezierCurveTo): Ditto.
        (WebCore::CanvasPathMethods::arcTo): Ditto.
        (WebCore::CanvasPathMethods::arc): Ditto.
        (WebCore::CanvasPathMethods::rect): Ditto.
        * html/canvas/CanvasPathMethods.h: Ditto.
        (CanvasPathMethods):
        (WebCore::CanvasPathMethods::isTransformInvertible):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore):
        (WebCore::CanvasRenderingContext2D::currentPath): Getter for currentPath.
        (WebCore::CanvasRenderingContext2D::setCurrentPath): Setter for currentPath.
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore):
        (CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::isTransformInvertible):
        * html/canvas/CanvasRenderingContext2D.idl: Add currentPath attribute.
        * html/canvas/DOMPath.h: Add new constructor and getter for Path object.
        (WebCore::DOMPath::create): New static function for new ctor.
        (DOMPath):
        (WebCore::DOMPath::path): Getter for Path object.
        (WebCore::DOMPath::DOMPath):

2013-01-31  Alexandre Elias  <aelias@chromium.org>

        Call FrameView::contentsResized() when setting fixed layout size
        https://bugs.webkit.org/show_bug.cgi?id=107922

        Reviewed by James Robinson.

        In fixed layout mode, we should be calling contentsResized() when the
        fixed layout size is changed, but not laying out when the visible
        content rect changes.

        Previously landed as r140869 but was reverted due to a bug in bundled
        Chromium-specific code. This patch includes just the minimum needed in
        WebCore.

        New WebFrameTest: FrameViewNeedsLayoutOnFixedLayoutResize.  Some
        flaky and obsolete tests for the old page scale mode are also deleted.

        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentsResized):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFixedLayoutSize):
        (WebCore::ScrollView::setUseFixedLayout):

2013-01-31  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] CookieParser should ignore invalid/unsupported attributes instead of ignoring the cookie
        https://bugs.webkit.org/show_bug.cgi?id=108494

        PR 287832
        Reviewed by Rob Buis.
        Internally Reviewed by Liam Quinn.

        A short-term fix for CookieParser to not blow up when a Set-Cookie header has an invalid
        or unsupported cookie attribute.

        We will ignore the attribute only, not the entire cookie.

        Also, making sure the parser won't replace values of valid attributes when evaluating an unsupported
        cookie with the same length and same first character as a supported attribute.

        Tested using opera cookie and browser.swlab.rim.net cookies test suite. Tested using regular sites that
        has a login mechanism.

        * platform/blackberry/CookieParser.cpp:
        (WebCore::CookieParser::parseOneCookie):

2013-01-31  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Rename WebMediaStreamDescriptor and WebMediaStreamComponent to WebMediaStream and WebMediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=108458

        Reviewed by Adam Barth.

        Only renames, no other code changes.

        * WebCore.gypi:
        * platform/chromium/support/WebMediaStream.cpp: Added.
        (WebKit::WebMediaStream::WebMediaStream):
        (WebKit):
        (WebKit::WebMediaStream::reset):
        (WebKit::WebMediaStream::label):
        (WebKit::WebMediaStream::id):
        (WebKit::WebMediaStream::extraData):
        (WebKit::WebMediaStream::setExtraData):
        (WebKit::WebMediaStream::audioSources):
        (WebKit::WebMediaStream::videoSources):
        (WebKit::WebMediaStream::operator=):
        (WebKit::WebMediaStream::operator PassRefPtr<WebCore::MediaStreamDescriptor>):
        (WebKit::WebMediaStream::operator WebCore::MediaStreamDescriptor*):
        (WebKit::WebMediaStream::initialize):
        (WebKit::WebMediaStream::assign):
        * platform/chromium/support/WebMediaStreamComponent.cpp: Removed.
        * platform/chromium/support/WebMediaStreamDescriptor.cpp: Removed.
        * platform/chromium/support/WebMediaStreamTrack.cpp: Added.
        (WebKit):
        (WebKit::WebMediaStreamTrack::WebMediaStreamTrack):
        (WebKit::WebMediaStreamTrack::operator=):
        (WebKit::WebMediaStreamTrack::initialize):
        (WebKit::WebMediaStreamTrack::reset):
        (WebKit::WebMediaStreamTrack::operator PassRefPtr<MediaStreamComponent>):
        (WebKit::WebMediaStreamTrack::operator MediaStreamComponent*):
        (WebKit::WebMediaStreamTrack::isEnabled):
        (WebKit::WebMediaStreamTrack::id):
        (WebKit::WebMediaStreamTrack::stream):
        (WebKit::WebMediaStreamTrack::source):
        (WebKit::WebMediaStreamTrack::assign):
        * platform/chromium/support/WebRTCStatsRequest.cpp:
        (WebKit::WebRTCStatsRequest::stream):
        (WebKit::WebRTCStatsRequest::component):
        * platform/mediastream/chromium/MediaStreamCenterChromium.cpp:
        (WebCore::MediaStreamCenterChromium::didCreateMediaStream):
        (WebCore::MediaStreamCenterChromium::stopLocalMediaStream):
        (WebCore::MediaStreamCenterChromium::addMediaStreamTrack):
        (WebCore::MediaStreamCenterChromium::removeMediaStreamTrack):
        * platform/mediastream/chromium/MediaStreamCenterChromium.h:
        (WebKit):
        (MediaStreamCenterChromium):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::didAddRemoteStream):
        (WebCore::RTCPeerConnectionHandlerChromium::didRemoveRemoteStream):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (WebKit):
        (RTCPeerConnectionHandlerChromium):

2013-01-31  Dmitry Zvorygin  <zvorygin@chromium.org>

        Web Inspector: searching for <u> in elements panel finds all tags containing "u"
        https://bugs.webkit.org/show_bug.cgi?id=108176

        Reviewed by Pavel Feldman.

        When searching for tag name check that tag name must either start from
        search query, or must end with it.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):

2013-01-30  Mark Lam  <mark.lam@apple.com>

        DatabaseContext needs to outlive the ScriptExecutionContext.
        https://bugs.webkit.org/show_bug.cgi?id=108355.

        Reviewed by Geoffrey Garen.

        Added a RefPtr<DatabaseContext> in ScriptExecutionContext to keep the
        DatabaseContext alive until after ScriptExecutionContext destructs.

        No new tests.

        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::setDatabaseContext):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):

2013-01-31  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        On Linux, can't get spelling suggestions without selection when unified text checker is enabled
        https://bugs.webkit.org/show_bug.cgi?id=107684

        Reviewed by Ryosuke Niwa.

        No new tests, covered by context-menu-suggestions.html.

        * editing/Editor.cpp:
        (WebCore::Editor::guessesForMisspelledOrUngrammatical):
        For Linux, extend selection range to the closest word to get
        the spelling suggestions when unified text checker is enabled.

2013-01-31  Florin Malita  <fmalita@chromium.org>

        [Skia] Update SkiaImageFilterBuilder's brightness matrix to match Chromium's implementation
        https://bugs.webkit.org/show_bug.cgi?id=107841

        Reviewed by Stephen White.

        Update Skia's brightness filter to match the spec after http://trac.webkit.org/changeset/139770.

        No new tests: covered by existing tests (currently disabled pending rebaseline).

        * platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp:

2013-01-31  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: show cursor location in DTE
        https://bugs.webkit.org/show_bug.cgi?id=108478

        Reviewed by Pavel Feldman.

        Add a new status bar element to SourceFrame to display current
        DefaultTextEditor cursor position.

        No new tests.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.copyRange):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.statusBarItems):
        (WebInspector.SourceFrame.prototype.selectionChanged):
        (WebInspector.SourceFrame.prototype._updateSourcePosition):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.copyRange):
        * inspector/front-end/inspector.css:
        (.source-frame-position):

2013-01-31  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: overlay highlight in DTE gets messed up when zoom factor changes.
        https://bugs.webkit.org/show_bug.cgi?id=108486

        Reviewed by Pavel Feldman.

        Repaint overlay highlight when zoom factor changes.

        No new tests.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype.highlightRegex):
        (WebInspector.TextEditorMainPanel.prototype.removeHighlight):
        (WebInspector.TextEditorMainPanel.prototype.highlightRange):
        (WebInspector.TextEditorMainPanel.prototype._repaintLineRowsAffectedByHighlightDescriptors):
        (WebInspector.TextEditorMainPanel.prototype.resize):

2013-01-31  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix minor memory leak in slot execution

        Reviewed by Allan Sandfeld Jensen.

        Don't leak the "length" string when executing a slot in JavaScript.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtConnectionObject::execute):

2013-01-31  Mike West  <mkwst@chromium.org>

        Allow blocking of IndexedDB in third-party contexts
        https://bugs.webkit.org/show_bug.cgi?id=94171

        Reviewed by Jochen Eisinger.

        This patch ensures that the origin of the top window is passed into
        SecurityOrigin::canAccessDatabase when working with IndexedDB. Giving
        SecurityOrigin access to this data means that it can properly check
        whether the database is being opened in a third-party context, and
        therefore properly enforce the third-party access checks that were
        added in http://trac.webkit.org/changeset/125736.

        Third-party checks are added to IDBFactory::open,
        IDBFactory::deleteDatabase, and IDBFactory::getDatabaseNames; each will
        now throw a SECURITY_ERR exception when access in a third-party context
        if third-party access checks are enabled.

        To make this process slightly more clear, and avoid some ugly casting
        logic, this patch adds a 'topOrigin'  method to ScriptExecutionContext,
        and implements it on both WorkerContext and Document.

        Tests: http/tests/security/cross-origin-indexeddb-allowed.html
               http/tests/security/cross-origin-indexeddb.html
               http/tests/security/cross-origin-worker-indexeddb-allowed.html
               http/tests/security/cross-origin-worker-indexeddb.html

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::getDatabaseNames):
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
            Grab the SecurityOrigin of the current context's top-level origin,
            and pass it to SecurityOrigin::canAccessDatabase to ensure that
            access checks are properly applied to these three methods.
        * dom/Document.cpp:
        (WebCore::Document::topOrigin):
        (WebCore):
        * dom/Document.h:
        (Document):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
            Add a topOrigin() method to ScriptExecutionContext, and implement it
            on Document in order to give callers access to the top document's
            SecurityOrigin without casting ScriptExecutionContext.
        * workers/WorkerContext.h:
            Change the existing topOrigin() method to override the new method
            on ScriptExecutionContext.

2013-01-31  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Add cookie column to show presence of request/response cookies.
        https://bugs.webkit.org/show_bug.cgi?id=107441

        Reviewed by Pavel Feldman.

        In some use cases only responses that contain "set-cookie" headers
        are interesting.

        * English.lproj/localizedStrings.js: Added "Set-Cookies" string.
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._createTable): Added columns.
        (WebInspector.NetworkLogView.prototype._createSortingFunctions): Ditto.
        (WebInspector.NetworkDataGridNode.prototype.createCells): Ditto.
        (WebInspector.NetworkDataGridNode.prototype.refreshRequest): Ditto.
        (WebInspector.NetworkDataGridNode.prototype._refreshCookiesCell): Added.
        (WebInspector.NetworkDataGridNode.prototype._refreshSetCookiesCell): Added.
        (WebInspector.NetworkDataGridNode.RequestCookiesCountComparator): Added.
        (WebInspector.NetworkDataGridNode.ResponseCookiesCountComparator): Added.

2013-01-31  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: Exception in HeapSnapshotView.js
        https://bugs.webkit.org/show_bug.cgi?id=108456

        Reviewed by Yury Semikhatsky.

        Listen "profile added" events in the HeapSnapshotView targeted only to the Heap Snapshot type.

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._onProfileHeaderAdded):

2013-01-31  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: do not set any textContent in overlay highlight spans
        https://bugs.webkit.org/show_bug.cgi?id=108460

        Reviewed by Pavel Feldman.

        Do not set any text content for overlay highlight spans to implicitly
        set its height. Instead, measure its height in the same manner as its
        done for "width" and "left" and set it explicitly.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._appendOverlayHighlight):
        (WebInspector.TextEditorMainPanel.ElementMetrics):
        * inspector/front-end/textEditor.css:
        (.text-editor-token-highlight): Update highlight to correspond to
        slightly different elements height.

2013-01-31  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Box shadows on a transparency layer is very slow
        https://bugs.webkit.org/show_bug.cgi?id=107547

        Reviewed by Noam Rosenthal.

        Include the window boundaries in the clip returned by GraphicsContext,
        since QPainter may remember clips larger than the destination, but
        ShadowBlur uses the clipBounds to determine the size of the shadow layer.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipBounds):

2013-01-31  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: highlight backend languages as scripts
        https://bugs.webkit.org/show_bug.cgi?id=108336

        Reviewed by Vsevolod Vlasov.

        Most languages have structure similar to js, so enabling default highlighter for them won't hurt.

        * inspector/front-end/FileSystemWorkspaceProvider.js:
        (WebInspector.FileSystemWorkspaceProvider.prototype._contentTypeForPath):

2013-01-31  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Profiles] show launcher view upon deleting last profile type's header
        https://bugs.webkit.org/show_bug.cgi?id=108468

        Reviewed by Pavel Feldman.

        We should show launcher view and hide profile type sidebar section upon deleting last profile type's header from the sidebar.
        Right now we only show launcher view upon deleting the last profile header (of any profile type).

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):

2013-01-31  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Columns are misaligned as first row goes out of sight.
        https://bugs.webkit.org/show_bug.cgi?id=107933

        Reviewed by Pavel Feldman.

        For some reason if "td" elements in first table row have "display: none"
        style, then column width calculation breaks.

        * inspector/front-end/networkLogView.css:
        (.network-log-grid.data-grid tr.offscreen > td > div):
        Hide content instead of "td" element itself.

2013-01-31   Vineet Chaudhary  <rgf748@motorola.com>

        formMethod to have empty string as default value and 'get' as invalid.
        https://bugs.webkit.org/show_bug.cgi?id=108263

        Reviewed by Kent Tamura.

        The spec says formmethod should only have an invalid value default, not a missing value default.
        Spec: http://www.whatwg.org/specs/web-apps/current-work/#form-submission-0
              http://www.w3.org/html/wg/drafts/html/master/forms.html#attr-fs-formmethod

        Test: fast/forms/formmethod-attribute-test.html

        * html/HTMLFormControlElement.cpp: For the missing formMethod attr return empty string.
        (WebCore::HTMLFormControlElement::formMethod):

2013-01-20 Kondapally Kalyan <kalyan.kondapally@intel.com>

        [Efl][WebGL] Add better support to track and free XResources.
        https://bugs.webkit.org/show_bug.cgi?id=107397

        Reviewed by Noam Rosenthal.

        We leak Memory during config selection as we dont free temporary
        allocated visuals, config etc. This patch ensures that we dont leak any
        memory.

        Covered by existing WebGL tests.

        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLWindowTransportSurface::EGLWindowTransportSurface):
        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        (WebCore::GLXConfigSelector::GLXConfigSelector):
        (WebCore::GLXConfigSelector::visualInfo):
        (WebCore::GLXConfigSelector::pBufferContextConfig):
        (WebCore::GLXConfigSelector::surfaceContextConfig):
        (WebCore::GLXConfigSelector::createSurfaceConfig):
        (GLXConfigSelector):
        Removed XVisualInfo as member variable. Fixed memory leaks.

        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        * platform/graphics/surfaces/glx/OwnPtrX11.h: Added.
        (OwnPtrX11):
        (WebCore::OwnPtrX11::OwnPtrX11):
        (WebCore::OwnPtrX11::~OwnPtrX11):
        (WebCore::OwnPtrX11::operator=):
        (WebCore::OwnPtrX11::operator T*):
        (WebCore::OwnPtrX11::operator->):
        (WebCore::OwnPtrX11::get):
        Calls XFree on pointer to memory allocated by X when the class goes out of scope.
        OwnPtr cannot be used here as GLXFBConfig is a pointer to an array of pointers.

        * platform/graphics/surfaces/glx/X11WindowResources.cpp:
        (WebCore::X11OffScreenWindow::X11OffScreenWindow):
        (WebCore::X11OffScreenWindow::~X11OffScreenWindow):
        (WebCore):
        (WebCore::X11OffScreenWindow::createOffScreenWindow):
        (WebCore::X11OffScreenWindow::destroyWindow):
        (WebCore::X11OffScreenWindow::nativeSharedDisplay):
        * platform/graphics/surfaces/glx/X11WindowResources.h:
        (X11OffScreenWindow):
        Removed unused code. Fixed memory leaks.

2013-01-31  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] remove invalid canvas profile trace logs upon frame navigation
        https://bugs.webkit.org/show_bug.cgi?id=108454

        Reviewed by Pavel Feldman.

        When canvas profile trace logs stored in the backend get destroyed (for example, on frame navigation), send an event to frontend and update the UI.
        Drive-by: replace String types to corresponding TypeBuilder::Canvas::* typedefs.

        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::captureFrame):
        (WebCore::InjectedScriptCanvasModule::startCapturing):
        (WebCore::InjectedScriptCanvasModule::callStartCapturingFunction):
        (WebCore::InjectedScriptCanvasModule::stopCapturing):
        (WebCore::InjectedScriptCanvasModule::dropTraceLog):
        (WebCore::InjectedScriptCanvasModule::callVoidFunctionWithTraceLogIdArgument):
        (WebCore::InjectedScriptCanvasModule::traceLog):
        (WebCore::InjectedScriptCanvasModule::replayTraceLog):
        (WebCore::InjectedScriptCanvasModule::resourceInfo):
        (WebCore::InjectedScriptCanvasModule::resourceState):
        * inspector/InjectedScriptCanvasModule.h:
        (InjectedScriptCanvasModule):
        * inspector/Inspector.json:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::dropTraceLog):
        (WebCore::InspectorCanvasAgent::stopCapturing):
        (WebCore::InspectorCanvasAgent::getTraceLog):
        (WebCore::InspectorCanvasAgent::replayTraceLog):
        (WebCore::InspectorCanvasAgent::getResourceInfo):
        (WebCore::InspectorCanvasAgent::getResourceState):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        * inspector/InspectorCanvasAgent.h:
        (InspectorCanvasAgent):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::hasIdForFrame):
        (WebCore):
        * inspector/InspectorPageAgent.h:
        (InspectorPageAgent):
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileType.prototype._runSingleFrameCapturing):
        (WebInspector.CanvasProfileType.prototype._startFrameCapturing):
        (WebInspector.CanvasProfileType.prototype._didStartCapturingFrame):
        (WebInspector.CanvasProfileType.prototype._traceLogsRemoved):
        (WebInspector.CanvasDispatcher.prototype.contextCreated):
        (WebInspector.CanvasDispatcher.prototype.traceLogsRemoved):
        (WebInspector.CanvasProfileHeader):
        (WebInspector.CanvasProfileHeader.prototype.frameId):

2013-01-31  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: DTE doesn't highlight words if the selected one is the last in the line
        https://bugs.webkit.org/show_bug.cgi?id=108344

        Reviewed by Pavel Feldman.

        Fix error in _isWord function which made an erroneous line-end check.

        Improved test: inspector/editor/text-editor-highlight-token.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype._isWord):

2013-01-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, Qt build fix after r141265.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        Avoid uninitialized variable error when NATIVE_FULLSCREEN_VIDEO is disabled.

2013-01-31  Kent Tamura  <tkent@chromium.org>

        Click on a label element won't select input[type=date]
        https://bugs.webkit.org/show_bug.cgi?id=108428

        Reviewed by Kentaro Hara.

        date/time input types with INPUT_MULTIPLE_FIELDS_UI are not
        mouse-focusable. <input> as a shadow host never gets focus and
        sub-fields in its shadow tree are focusable. Howevever, the click
        handling of <label> checked isMouseFocusable. We introduce new function
        isFocusableByClickOnLabel to HTMLElement. It's default implementation is
        same as isMouseFocusable, and we add special handling for
        BaseMultipleFieldsDateAndTimeInputType::isFocusableByClickOnLabel.

        Also, date/time input types without INPUT_MULTIPLE_FIELDS_UI were not
        mouse-focusable by a mistake. It should be mouse-focusable.

        Test: fast/forms/date/date-click-on-label.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isFocusableByClickOnLabel):
        Added. Just calls isMouseFocusable.
        * html/HTMLElement.h:
        (HTMLElement): Declare isFocusableByClickOnLabel.
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler):
        Calls isFocusableByClickOnLabel instead of isMouseFocusable.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isFocusableByClickOnLabel):
        Delegate to InputType::isFocusableByClickOnLabel.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Declare isFocusableByClickOnLabel.
        * html/InputType.cpp:
        (WebCore::InputType::isFocusableByClickOnLabel):
        Added. Calls isMouseFocusable.
        * html/InputType.h:
        (InputType): Declare isFocusableByClickOnLabel.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isFocusableByClickOnLabel):
        Added. Use the same logic with textfields.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Declare isFocusableByClickOnLabel.
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::isMouseFocusable):
        Added. Use the same logic with textfields.
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        (BaseChooserOnlyDateAndTimeInputType): Declare isMouseFocusable.

2013-01-31  Kentaro Hara  <haraken@chromium.org>

        Rename WheelEvent::Granularity to WheelEvent::DeltaMode
        https://bugs.webkit.org/show_bug.cgi?id=108434

        Reviewed by Ryosuke Niwa.

        Per the spec, WheelEvent::Granularity should be renamed to WheelEvent::DeltaMode.

        Spec: http://www.w3.org/TR/DOM-Level-3-Events/#events-WheelEvent
        https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#constructor-wheelevent

        No tests. No change in behavior.

        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWheelEvent):
        (WebCore::deltaMode):
        (WebCore::WheelEventDispatchMediator::WheelEventDispatchMediator):
        * dom/WheelEvent.h:
        (WebCore::WheelEvent::create):
        (WebCore::WheelEvent::deltaMode):
        (WheelEvent):
        * page/EventHandler.cpp:
        (WebCore::wheelGranularityToScrollGranularity):
        (WebCore::EventHandler::defaultWheelEventHandler):

2013-01-30  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: test that nodes from the same detached DOM tree will get into one group in heap snapshot
        https://bugs.webkit.org/show_bug.cgi?id=108202

        Reviewed by Vsevolod Vlasov.

        Test: inspector-protocol/heap-profiler/heap-snapshot-with-detached-dom-tree.html

        * inspector/front-end/JSHeapSnapshot.js:
        (WebInspector.JSHeapSnapshotNode.prototype.className): removed unnecessary i18n.

2013-01-31  Kentaro Hara  <haraken@chromium.org>

        [V8] Trace not only major DOM GCs but also minor DOM GCs
        https://bugs.webkit.org/show_bug.cgi?id=108436

        Reviewed by Adam Barth.

        Currently only major DOM GCs are traced.
        We should also trace minor DOM GCs.

        No tests. No change in behavior.

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::minorGCEpilogue):

2013-01-31  Yury Semikhatsky  <yurys@chromium.org>

        Layout Test inspector-protocol/take-heap-snapshot.html crashes in the Debug mode
        https://bugs.webkit.org/show_bug.cgi?id=104800

        Reviewed by Jochen Eisinger.

        The test crashed because during snapshot generation Profiler.reportHeapSnapshotProgress
        events were sent to the inspector front-end, then parsed and dispatched there.
        Since in case of layout tests the front-end resides in the same process
        as the inspected page parsing the event broke an assumption that there are
        no JS heap allocations while heap snapshot is being taken.

        I added optional boolean parameter 'reportProgress' to Profiler.takeHeapSnapshot
        command so that the protocol client can control whether progress events should
        be sent during snapshot generation. The protocol test is not interested in the
        progress events and sets reportProgress to false.

        Test: inspector-protocol/heap-profiler/take-heap-snapshot.html

        * inspector/Inspector.json:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):

2013-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141110.
        http://trac.webkit.org/changeset/141110
        https://bugs.webkit.org/show_bug.cgi?id=108349

        This patch broke WK2-EFL unit tests (Requested by grzegorz on
        #webkit).

        * platform/text/TextChecking.h:
        (WebCore):

2013-01-31  Kentaro Hara  <haraken@chromium.org>

        [V8] 'new MouseEvent("click", {relatedTarget: window}).window' should return window
        https://bugs.webkit.org/show_bug.cgi?id=108432

        Reviewed by Adam Barth.

        In V8 'new MouseEvent("click", {relatedTarget: window}).window'
        returns null. JSC returns window, which is a correct behavior.
        V8 should also return window.

        The point is that we need to handle a DOMWindow wrapper specially
        before converting it to an EventTarget object. A wrapper returned by
        Dictionary::get("relatedTarget") is not an expected DOMWindow wrapper.
        To get the expected DOMWindow wrapper, we need to look up a prototype
        chain of the DOMWindow wrapper.

        In JSC, this special handling is done by JSEventTargetCustom::toEventTarget().

        Test: fast/events/constructors/mouse-event-constructor.html

        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):

2013-01-31  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Move MediaPlayerPrivateChromium to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=108415

        Reviewed by Adam Barth.

        Part of a larger refactoring series; see tracking bug 106829.

        * WebCore.gypi:
        * platform/graphics/chromium/MediaPlayerPrivateChromium.cpp: Added.
        (WebCore):
        (WebCore::MediaPlayerPrivate::registerMediaEngine): call
        registerMediaEngine through static function pointer that was set
        during WebKit initializeWithoutV8
        (WebCore::MediaPlayerPrivate::setMediaEngineRegisterSelfFunction):
        new setter function that takes a function pointer that is used by registerMediaEngine
        * platform/graphics/chromium/MediaPlayerPrivateChromium.h:
        (WebCore):
        (MediaPlayerPrivate):

2013-01-30  Patrick Gansterer  <paroga@webkit.org>

        Port DragImageWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=108329

        Reviewed by Brent Fulgham.

        Add #if !OS(WINCE) around a few lines of the code, so it can be used by the WinCE port too.

        * PlatformWinCE.cmake:
        * platform/win/DragImageWin.cpp:
        (WebCore::dragLabelFont):
        * platform/wince/DragImageWinCE.cpp: Removed.

2013-01-30  Hayato Ito  <hayato@chromium.org>

        Split CSSOMWrapper data and functions out from StyleResolver into its own class.
        https://bugs.webkit.org/show_bug.cgi?id=107779

        Reviewed by Dimitri Glazkov.

        Factored CSSOMWrapper logic and data out from StyleResolver into a
        InspectorCSSOMWrappers class.  Since InspectorCSSOMWrappers
        depends on static variables defined in StyleResolver.cpp, this
        patch does not extract a new class into a new file, which makes a
        review easier since it produces readable diffs.

        After we factor static variables related to default style sheets
        in a following patch (bug 107780), I'll move
        InspectorCSSOMWrappers into a its own file.

        No new tests, refactoring only.

        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetIfNeeded):
        (WebCore::InspectorCSSOMWrappers::collect):
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents): Name it explicitly rather than overloading.
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheets): Name it explicitly rather than overloading.
        (WebCore::InspectorCSSOMWrappers::collectFromDocumentStyleSheetCollection): Name it explicitly rather than overloading.
        (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets): Renamed from ensureFullCSSOMWrapperForInspector().
        (WebCore::InspectorCSSOMWrappers::reportMemoryUsage):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleResolver.h:
        (InspectorCSSOMWrappers):
        (WebCore):
        (StyleResolver):
        (WebCore::StyleResolver::inspectorCSSOMWrappers):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willMatchRule):
        (WebCore::InspectorCSSAgent::willProcessRule):
        (WebCore::InspectorCSSAgent::buildObjectForRule):

2013-01-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141358.
        http://trac.webkit.org/changeset/141358
        https://bugs.webkit.org/show_bug.cgi?id=108421

        breaks android builder (Requested by morrita on #webkit).

        * bindings/v8/custom/V8IntentCustom.cpp:

2013-01-30  Kentaro Hara  <haraken@chromium.org>

        [V8] Use state->isolate() when state is not 0
        https://bugs.webkit.org/show_bug.cgi?id=107674

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):

2013-01-30  Adam Barth  <abarth@webkit.org>

        The background HTML parser should be able to parse speculatively
        https://bugs.webkit.org/show_bug.cgi?id=107753

        Reviewed by Eric Seidel.

        This patch adds the ability for the foreground HTML parser to
        invalidate speculative parsing done by the background HTML parser.
        Currently, we're a bit overly agressive an invalidate all speculations
        on document.write. We plan to refine that in the future.

        Test: fast/parser/document-write-partial-script.html

        * WebCore.gypi:
        * html/parser/BackgroundHTMLInputStream.cpp: Added.
        (WebCore):
        (WebCore::BackgroundHTMLInputStream::BackgroundHTMLInputStream):
        (WebCore::BackgroundHTMLInputStream::append):
        (WebCore::BackgroundHTMLInputStream::close):
        (WebCore::BackgroundHTMLInputStream::createCheckpoint):
        (WebCore::BackgroundHTMLInputStream::rewindTo):
        * html/parser/BackgroundHTMLInputStream.h: Added.
        (WebCore):
        (BackgroundHTMLInputStream):
        (WebCore::BackgroundHTMLInputStream::current):
        (WebCore::BackgroundHTMLInputStream::Checkpoint::Checkpoint):
        (Checkpoint):
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::append):
        (WebCore):
        (WebCore::BackgroundHTMLParser::resumeFrom):
        (WebCore::BackgroundHTMLParser::markEndOfFile):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        (WebCore::BackgroundHTMLParser::resumeFromPartial):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::didFailSpeculation):
        (WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        (ParsedChunk):
        (HTMLDocumentParser):

2013-01-30  Nils Barth  <nbarth@google.com>

        [V8] Add IDL 'enum' support to CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=106553

        Reviewed by Kentaro Hara.

        Add partial support for Web IDL enumerations in V8 bindings

        Binding generators currently cannot handle IDL enumerations.
        (An enumeration is an DOMString with a limited set of values, thus
        treated internally as DOMString, with validation code added in
        bindings.)
        This adds support for enumerations in V8, adding validation checking
        to setters.
        It does not add validation checking to operations (no test case), and
        does not add support in JSC.

        Test: bindings/scripts/test/TestObj.idl (run-bindings-test)

        * bindings/scripts/IDLParser.pm:
         - Parser assumes all IDL definitions are interfaces; add support for
           other definitions
         - Parser parses but discards enum definitions; instead, record
           parsed data
        (Parse): Sort definitions into interfaces and enums.
        Remove "@definitions eq (someIdlDocument)" test, as this never
        happens (fossil code) -- parseDefinitions returns list of definitions,
        never a one-item list consisting of a document (no nested documents).
        (unquoteString): new utility function to unquote StringToken (token
        itself still quoted)
        (parseEnum):
        (parseEnumValueList):
        (parseEnumValues):
        (parseEnumOld):

        * bindings/scripts/CodeGenerator.pm:
         - Expose parsed enum data to backends (detect enums, list valid
           values)
         - Enums treated as DOMString type in internal function
        (ProcessDocument):
        (IsEnumType):
        (ValidEnumValues):
        (IsRefPtrType):
        * bindings/scripts/CodeGeneratorV8.pm:
         - Enums treated as DOMString type in internal functions
         - Add validation to setter
        (GenerateNormalAttrSetter):
        (GetNativeType):
        (JSValueToNative):
        (NativeToJSValue):
        (ConvertToV8StringResource):
        * bindings/scripts/test/TestObj.idl:
         - New enum type and enum variable test for IDL enumeration support
        * bindings/scripts/test/V8/V8TestObj.cpp:
         - Generated code, desired behavior
        (WebCore::TestObjV8Internal::enumAttrAttrGetter):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::enumAttrAttrSetter):
        (WebCore):
        * bindings/scripts/test/JS/JSTestObj.cpp:
         - Generated code, currently incorrect
        (WebCore):
        (WebCore::jsTestObjEnumAttr):
        (WebCore::setJSTestObjEnumAttr):
        * bindings/scripts/test/JS/JSTestObj.h:
         - Generated code, currently incorrect
        (WebCore):

2013-01-30  Nico Weber  <thakis@chromium.org>

        [chromium] Build webkit with enable_web_intents set to 0.
        https://bugs.webkit.org/show_bug.cgi?id=108408

        Reviewed by Kentaro Hara.

        I'll then make chromium build fine with that, then switch
        enable_web_intents to 0, roll that into webkit, and then
        actually remove the code hidden behind this flag.

        * bindings/v8/custom/V8IntentCustom.cpp:

2013-01-30  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove speculative dispatchEvent crash fix now that root cause is addressed
        https://bugs.webkit.org/show_bug.cgi?id=108131

        Reviewed by Tony Chang.

        A patch was landed in r140027 to prevent a null pointer crash in
        IDBRequest::dispatchEvent and confirm the source of the crash (which
        we couldn't repro locally). Following confirmation from user reports,
        the root cause was tracked down to a race condition in MessageQueue,
        and was fixed in r140483. This patch is no longer needed, and there's
        always been an ASSERT in place to catch regressions while debugging.

        No new tests - no behavior change.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent): Remove extraneous test.

2013-01-30  Joe Mason  <jmason@rim.com>

        [BlackBerry] Store both proxy and host credentials simultaneously for NetworkJob
        https://bugs.webkit.org/show_bug.cgi?id=108388

        Reviewed by Yong Li.

        The platform NetworkRequest interface has been updated again, to store both a proxy and host
        credential for each request (to prevent an infinite loop when a request authenticates against a
        proxy but fails the host authentication, and then the followup contains the host credential but not
        the proxy credential so it fails proxy authentication, so the next followup contains the proxy
        credential but not the host credential...)

        Complying with the new interface requires the host and proxy challenge to be stored separately in
        webkit so they can both be added to the same NetworkRequest.

        Internal PR: 281172
        Internal Reviewer: Leo Yang

        * platform/network/ResourceHandleInternal.h:
        (ResourceHandleInternal):
        * platform/network/blackberry/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::hasCredentials):
        (AuthenticationChallenge):
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyAuthReceived):
        (WebCore::NetworkJob::handleRedirect):
        (WebCore::NetworkJob::sendRequestWithCredentials):
        (WebCore::NetworkJob::storeCredentials):
        (WebCore):
        (WebCore::NetworkJob::purgeCredentials):
        (WebCore::NetworkJob::notifyChallengeResult):
        (WebCore::NetworkJob::updateCurrentWebChallenge):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::setAuthCredentials):
        (WebCore):
        (WebCore::NetworkManager::startJob):

2013-01-30  Oliver Hunt  <oliver@apple.com>

        Make JSEventListener more robust in the event of the compiled handler being released.
        https://bugs.webkit.org/show_bug.cgi?id=108390

        Reviewed by Michael Saboff.

        It shouldn't be possible for a handler to be collected for any object that
        might still trigger an event.  Nonetheless it does still happen, and the
        only point of failure that currently exists is compiling the handler.

        This patch is mostly just assertions, but also removes a bunch of field
        clearing that was previously being performed.  Given we do seem to periodically
        end up needing to recompile a handler this appears to be necessary.  That
        said there does not appear to be a memory hit from this as the event handlers
        that make us use JSLazyEventListener are not frequently compiled, and the bulk
        of the functions that are compiled end up causing us to keep the strings around
        anyway.

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::initializeJSFunction):

2013-01-30  Kentaro Hara  <haraken@chromium.org>

        Implement KeyboardEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=108320

        Reviewed by Adam Barth.

        This patch implements KeyboardEvent constructor under a DOM4_EVENTS_CONSTRUCTOR flag,
        which is enabled on Chromium and Safari.

        This significantly simplifies a code to construct a KeyboardEvent.

        Before:
          e = document.createEvent("KeyboardEvent");
          e.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 0, 0);

        After:
          e = new KeyboardEvent("keypress");

        Editor's draft: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm

        - 'char' and 'code' are not yet supported due to lack of WebCore implementation.

        - 'altGraphKey' is not supported because it's an extended attribute in WebKit
        and is not speced.

        - Renamed keyboard event constant variables to avoid style errors.

        Test: fast/events/constructors/keyboard-event-constructor.html

        * dom/KeyboardEvent.cpp:
        (WebCore::keyLocationCode):
        (WebCore::KeyboardEventInit::KeyboardEventInit):
        (WebCore):
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/KeyboardEvent.h:
        (WebCore):
        (WebCore::KeypressCommand::KeypressCommand):
        (KeypressCommand):
        (KeyboardEventInit):
        (KeyboardEvent):
        (WebCore::KeyboardEvent::create):
        (WebCore::KeyboardEvent::keyIdentifier):
        (WebCore::KeyboardEvent::keyLocation):
        (WebCore::KeyboardEvent::altGraphKey):
        (WebCore::KeyboardEvent::keyEvent):
        (WebCore::KeyboardEvent::keypressCommands):
        * dom/KeyboardEvent.idl:

2013-01-30  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: IDBKeyRange::isOnlyKey() does pointer equality comparison
        https://bugs.webkit.org/show_bug.cgi?id=107582

        Reviewed by Tony Chang.

        Per the bug title, IDBKeyRange::isOnlyKey() was testing the upper/lower pointers to
        determine if this was a "trivial" range, which can be used to fast-path lookups. This
        is insufficient in multi-process ports where range values may be thrown across the wire.
        This is addressed by using the existing key equality tests.

        In addition, the bounds type check incorrectly checked m_lowerType == LowerBoundOpen, which
        meant the function could never return true (since upper == lower implies closed bounds).
        Therefore, the fast-path case wasn't used even in single-process ports (e.g. DRT). The
        slow-path case contructed a backing store cursor over the range, and exited early if the
        cursor yielded nothing. The fast-path case doesn't need to create a cursor, so needs to
        deal with lookup misses. This revealed two similar (but trivial) lurking bugs in the
        fast-path.

        No new behavior; covered by tests such as: storage/indexeddb/get-keyrange.html

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::getRecord): Handle backing store read miss case.
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::GetOperation::perform): Handle backing store read miss case.
        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::isOnlyKey): Compare keys by value, not pointer, correct
        type checks, add assertions.
        * Modules/indexeddb/IDBKeyRange.h:
        (IDBKeyRange): Move implementation to CPP file.

2013-01-30  Joe Mason  <jmason@rim.com>

        [BlackBerry] Never store empty credentials in NetworkJob::storeCredentials
        https://bugs.webkit.org/show_bug.cgi?id=108387

        Reviewed by Yong Li.

        There is a code path that can cause NetworkJob::storeCredentials to be called with empty
        credentials, causing the existing credentials to be overwritten even though authentication
        succeeded.  PR 287791 has been filed to investigate why this happens; in the meantime, ignore empty
        credentials.

        Internal PR: 281172
        Internally Reviewed By: Leo Yang

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::storeCredentials):

2013-01-30  Andy Estes  <aestes@apple.com>

        ContentFilter should be a ref-counted class
        https://bugs.webkit.org/show_bug.cgi?id=108392

        Reviewed by David Kilzer.

        * loader/MainResourceLoader.h:
        (MainResourceLoader): Store a RefPtr to m_contentFilter.
        * platform/ContentFilter.h: Inherit from RefCounted<ContentFilter>.
        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::create): Return a PassRefPtr.

2013-01-30  Tim Horton  <timothy_horton@apple.com>

        [mac] ImageBuffer should create accelerated buffers for small canvases, but we shouldn't force them to create compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=107804
        <rdar://problem/11752381>

        Reviewed by Simon Fraser.

        Make all canvases IOSurface-backed if requested, instead of having a size threshold
        under which we won't use accelerated canvas.

        Make requiresCompositingForCanvas take the size of the canvas into account, using
        the threshold which was previously in ImageBuffer to determine whether or not a
        canvas should be forced into a compositing layer.

        This improves canvas performance on some benchmarks
        (http://www.mikechambers.com/html5/javascript/QuadTree/examples/collision.html, for example)
        significantly, in cases where canvases which fall below the size limit
        (and thus are unaccelerated) are being drawn rapidly into either accelerated
        tiles or another accelerated canvas, by preventing excessive copying to/from the GPU.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore):
        (WebCore::ImageBuffer::ImageBuffer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):

2013-01-30  Alec Flett  <alecflett@chromium.org>

        IndexedDB: clean up scheduleTask return type
        https://bugs.webkit.org/show_bug.cgi?id=108361

        Reviewed by Tony Chang.

        This is just a code simplification now that the
        synchronous consumers of scheduleTask are gone.

        No new tests: pure refactor.

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setIndexesReady):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (IDBTransactionBackendImpl):

2013-01-30  Simon Fraser  <simon.fraser@apple.com>

        Elements that dynamically become fixed sometimes jump to the top left on scrolling
        https://bugs.webkit.org/show_bug.cgi?id=108389

        Reviewed by Beth Dakin.

        When an element became position:fixed and gained a compositing layer
        as a result, we would compute its viewport constraints (including the 
        last GraphicsLayer position) before we had actually updated the GraphicsLayer
        geometry for the first time. This would cause a jump to 0,0 on scrolling.
        
        Fix by removing the call to updateViewportConstraintStatus() just after
        creating the backing. Instead, hook in to registerScrollingLayers(),
        which is called on every geometry update, to update the viewport
        constraints for this layer.
        
        Tested via existing tests, which now show correct positions at last
        layout.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::registerScrollingLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2013-01-30  Adam Barth  <abarth@webkit.org>

        HTMLDocumentParser::insert should be aware of threaded parsing
        https://bugs.webkit.org/show_bug.cgi?id=107764

        Reviewed by Eric Seidel.

        This patch is an incremental step towards recovering from
        document.write invalidating our speculative parsing buffer. The
        approach I've taken is to make it possible to transfer the
        HTMLDocumentParser's HTMLTokenizer and HTMLToken to the background
        thread. To make that possible, I've taught the HTMLDocumentParser how
        to operate without a tokenizer or a token.

        Not having a tokenizer or a token while parsing in the background also
        helps us avoid accidentially feeding input to the main thread's
        tokenizer when we're supposed to feed it to the background thread.

        This patch shouldn't have any behavior change (other than possibly
        fixing a crash in fast/parser when threading parsing is enabled).

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::didFailSpeculation):
        (WebCore):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTree):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::TextDocumentParser):

2013-01-30  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] prevent the parser from removing nodes from the content when the foster agency is processing formatting elements
        https://bugs.webkit.org/show_bug.cgi?id=108377

        Reviewed by Adam Barth.

        https://dvcs.w3.org/hg/webcomponents/raw-file/50ce1f368c1a/spec/templates/index.html#in-body-addition

        callTheAdoptionAgency now appends to the template's content when it previously would have appended to the template element itself.

        New test added to html5lib.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::parserAppendChild):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2013-01-30  Mark Lam  <mark.lam@apple.com>

        DatabaseContext should implement ThreadSafeRefCounted.
        https://bugs.webkit.org/show_bug.cgi?id=108285.

        Reviewed by Alexey Proskuryakov.

        DatabaseManager::interruptAllDatabasesForContext() can ref a
        DatabaseContext from another thread. Hence, the DatabaseContext needs
        to be a ThreadSafeRefCounted instead of a RefCounted.

        No new tests.

        * Modules/webdatabase/DatabaseContext.h:

2013-01-30  Kentaro Hara  <haraken@chromium.org>

        Implement WheelEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=108303

        Reviewed by Adam Barth.

        Editor's draft: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm

        This patch implements UIEvent constructor under a DOM4_EVENTS_CONSTRUCTOR flag,
        which is enabled on Chromium and Safari.

        Test: fast/events/constructors/wheel-event-constructor.html

        * dom/WheelEvent.cpp:
        (WebCore::WheelEventInit::WheelEventInit):
        (WebCore):
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::initWheelEvent):
        * dom/WheelEvent.h:
        (WheelEventInit):
        (WebCore):
        (WheelEvent):
        (WebCore::WheelEvent::create):
        (WebCore::WheelEvent::wheelDelta):
        (WebCore::WheelEvent::wheelDeltaX):
        (WebCore::WheelEvent::wheelDeltaY):
        (WebCore::WheelEvent::rawDeltaX):
        (WebCore::WheelEvent::rawDeltaY):
        (WebCore::WheelEvent::granularity):
        (WebCore::WheelEvent::webkitDirectionInvertedFromDevice):
        (WebCore::WheelEvent::isHorizontal):
        * dom/WheelEvent.idl:

2013-01-30  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Support 'auto' sized grid items
        https://bugs.webkit.org/show_bug.cgi?id=103332

        Reviewed by Tony Chang.

        Tests: fast/css-grid-layout/auto-content-resolution-columns.html
               fast/css-grid-layout/auto-content-resolution-rows.html

        The specification interprets 'auto' as minmax(min-content, max-content).
        Because we stored the grid definitions as an 'auto' length, we wouldn't
        handle it properly during layout.

        This change makes us do the translation when we query the information for
        layout.

        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::minTrackBreadth):
        (WebCore::GridTrackSize::maxTrackBreadth):
        Translate 'auto' to minmax(min-content, max-content). This works as getComputedStyle
        still sees the GridTrackSize as a single length and thus query length() instead of the
        individual component of minmax().

2013-01-30  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Avoid crashing when deleting indexes
        https://bugs.webkit.org/show_bug.cgi?id=108356

        Reviewed by Tony Chang.

        It is reasonable that the backend aborts a transaction before
        the frontend is aware, depending on the timing of events. This
        allows the transactionId to be invalid rather than asserting.

        Test: storage/indexeddb/createIndex-after-failure.html

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::createIndex):
        (WebCore::IDBDatabaseBackendImpl::deleteIndex):
        (WebCore::IDBDatabaseBackendImpl::get):
        (WebCore::IDBDatabaseBackendImpl::put):
        (WebCore::IDBDatabaseBackendImpl::setIndexKeys):
        (WebCore::IDBDatabaseBackendImpl::setIndexesReady):
        (WebCore::IDBDatabaseBackendImpl::openCursor):
        (WebCore::IDBDatabaseBackendImpl::count):
        (WebCore::IDBDatabaseBackendImpl::deleteRange):
        (WebCore::IDBDatabaseBackendImpl::clear):

2013-01-30  Kentaro Hara  <haraken@chromium.org>

        isSameAsCurrentState() should take SerializedScriptValue* instead of PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=107904

        Reviewed by Darin Adler.

        Applied Darin's comment: https://bugs.webkit.org/show_bug.cgi?id=107904#c5

        No tests. No change in behavior.

        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::state):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::stateAccessorGetter):
        * page/History.cpp:
        (WebCore::History::isSameAsCurrentState):
        * page/History.h:
        (History):

2013-01-30  Douglas Stockwell  <dstockwell@chromium.org>

        Remove unnecessary setAnimating() method
        https://bugs.webkit.org/show_bug.cgi?id=107495

        Reviewed by Dean Jackson.

        The corresponding accessor and uses were removed in r39211.

        No new tests: no change in behaviour.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        * page/animation/AnimationBase.h:
        (AnimationBase):
        * page/animation/CompositeAnimation.cpp:
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):

2013-01-30  Elliott Sprehn  <esprehn@chromium.org>

        Clean up interface to ShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=108300

        Reviewed by Dimitri Glazkov.

        Lots of general clean up to ShadowRoot removing unused headers and forward
        declarations, moving short inline methods into the class definition so it's
        easier to understand what methods do what, and replacing macros with methods
        with inline methods.

        No new tests, just refactoring.

        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::addShadowRoot):
        (WebCore::ElementShadow::removeAllShadowRoots):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::setInnerHTML): Use isOrphan instead of macro.
        (WebCore::ShadowRoot::setApplyAuthorStyles): Use isOrphan instead of macro.
        (WebCore::ShadowRoot::setResetStyleInheritance): Use isOrphan instead of macro.
        (WebCore::ShadowRoot::childrenChanged): Use isOrphan instead of macro.
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::setHost): Removed.
        (WebCore::ShadowRoot::host):
        (WebCore::ShadowRoot::owner):
        (ShadowRoot):
        (WebCore::ShadowRoot::isOrphan): Replacement of GuardOrphanShadowRoot macro.

2013-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        Apple's internal PLT test suite doesn't finish after r141136
        https://bugs.webkit.org/show_bug.cgi?id=108380

        Reviewed by Alexey Proskuryakov.

        Temporarily disable the feature to see if that fixes it.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2013-01-30  Florin Malita  <fmalita@chromium.org>

        [Chromium] Unreviewed gardening.

        Attempted Mac build fix after http://trac.webkit.org/changeset/141291.

        * platform/graphics/harfbuzz/HarfBuzzFaceCoreText.cpp:
        (WebCore::harfBuzzCoreTextGetFontFuncs):

2013-01-30  Philip Rogers  <pdr@google.com>

        Track scale and zoom together when drawing SVG images
        https://bugs.webkit.org/show_bug.cgi?id=108108

        Reviewed by Tim Horton.

        This patch refactors SVGImage::drawSVGToImageBuffer to take a single zoomAndScale parameter
        and removes two messy calls to setPageZoomFactor. This patch makes progress towards an
        SVG image cache keyed on just container size and scale.

        This refactoring is covered by existing tests.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::setContainerSizeForRenderer):
        (WebCore::CachedImage::imageSizeForRenderer):

            This complex logic has been refactored out of CachedImage and into SVGImageCache.
            In addition to the code move, we no longer divide by the zoom factor because the
            container size is stored without zoom.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):

            This method signature has changed to take a FloatSize for the container size and
            a combined zoom and scale parameter (zoomAndScale). A FloatSize is needed for the
            container size because we now store the container size unzoomed, and in this process
            we do not want to lose precision.

            The messy setPageZoomFactor calls have also been removed which cleans this function up.

        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::setContainerSizeForRenderer):

            This function now stores the container size unzoomed. The container size was changed
            to a FloatSize so that precision is not lost.

        (WebCore::SVGImageCache::imageSizeForRenderer):

            Note that the ImageBuffer size will stay the same. We now store the size as:
                containerSize (without zoom) * zoom * scale
            Previously this was:
                containerSize (with zoom) * scale

        (WebCore::SVGImageCache::redraw):
        (WebCore::SVGImageCache::lookupOrCreateBitmapImageForRenderer):
        * svg/graphics/SVGImageCache.h:
        (WebCore::SVGImageCache::SizeAndScales::SizeAndScales):
        (SizeAndScales):
        (SVGImageCache):

2013-01-30  Benjamin Poulain  <benjamin@webkit.org>

        Do not convert to String->AtomicString for NamedNodeMap
        https://bugs.webkit.org/show_bug.cgi?id=108289

        Reviewed by Kentaro Hara.

        NamedNodeMap's API was taking a WTF::String. Internally, attribute
        names are AtomicString.

        The conversions String->AtomicString was causing an additional ref-deref
        for the JS/V8 bindings. And could cause an additional memory allocation for the Objective-C
        bindings.

        This patch changes the API to use AtomicString, and update the custom bindings accordingly.

        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::canGetItemsForName):
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::namedPropertyGetter):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::getNamedItem):
        (WebCore::NamedNodeMap::getNamedItemNS):
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::removeNamedItemNS):
        * dom/NamedNodeMap.h:
        (NamedNodeMap):

2013-01-30  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] http/tests/w3c/webperf/submission/Intel/user-timing/test_user_timing_entry_type.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=108100

        Reviewed by Tony Gentilcore.

        Similarly to the changes to V8 bindings in r140882, wrap the PerformanceEntry
        as a PerformanceMark or PerformanceMeasure if possible.

        No new tests - the relevant test now passes.

        * bindings/js/JSPerformanceEntryCustom.cpp:
        (WebCore::toJS):

2013-01-30  Adam Klein  <adamk@chromium.org>

        [JSC] MutationObservers should not create circular, leaky references
        https://bugs.webkit.org/show_bug.cgi?id=93661

        Reviewed by Adam Barth.

        This patch makes JSMutationCallback an entirely-custom class that
        holds a weak reference to the function it wraps. To keep that function
        alive, it also adds a PrivateName between the JSMutationObserver
        wrapper and the function when the MutationObserver is constructed.

        Unlike the generated JSC callbacks, JSMutationCallback doesn't hold a
        reference to the JSDOMGlobalObject, instead holding the
        DOMWrapperWorld it was created in. As an ActiveDOMCallback, it also
        holds a weak pointer to ScriptExecutionContext (via ContextDestructionObserver).

        It's not clear to me how to write a test for this. There's an existing
        manual test in ManualTests/leak-cycle-observer-wrapper.html which may
        be of use but which doesn't seem to currently give meaningful output.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSMutationCallback.cpp: Added.
        (WebCore):
        (WebCore::JSMutationCallback::JSMutationCallback):
        (WebCore::JSMutationCallback::~JSMutationCallback):
        (WebCore::JSMutationCallback::handleEvent):
        * bindings/js/JSMutationCallback.h: Added.
        (WebCore):
        (JSMutationCallback): Instead of a JSCallbackData, hold a weak ref to the callback and a RefPtr to the DOMWrapperWorld.
        (WebCore::JSMutationCallback::create):
        * bindings/js/JSMutationCallbackCustom.cpp: Removed.
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverConstructor::constructJSMutationObserver):
        When constructing the JSMutationObserver, add a reference via PrivateName from the MutationObserver to the callback function.
        * dom/MutationCallback.idl: Removed. Neither JSC nor V8 use an IDL file to generate this class any more.

2013-01-30  Elliott Sprehn  <esprehn@chromium.org>

        Remove willAddAuthorShadowRoot and replace with alwaysCreateUserAgentShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=108248

        Reviewed by Dimitri Glazkov.

        The only reason willAddAuthorShadowRoot exists is so that a handful of
        other elements can create the user agent shadow root right before the
        author shadow root is created. Instead of providing this generic hook
        just expose a virtual method on Element that requests this behavior.

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::createShadowRoot):
        * dom/Element.h:
        (Element):
        (WebCore::Element::alwaysCreateUserAgentShadowRoot): Added.
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::addShadowRoot): Remove willAddAuthorShadowRoot notification.
        * html/HTMLButtonElement.cpp:
        * html/HTMLButtonElement.h:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormControlElement.h:
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:

2013-01-30  Dominik Röttsches  <dominik.rottsches@intel.com>

        [HarfBuzz] Naming fixes after removing old HarfBuzz code
        https://bugs.webkit.org/show_bug.cgi?id=108170

        Reviewed by Tony Chang.

        Since the old harfbuzz code is gone in r141241, it makes sense to get rid
        of the now unnecessray NG suffix in a number of places. While at it,
        I am also fixing some naming inconsistencies.

        Renamed all occurences of HarfBuzzNG* to HarfBuzz*,
        renamed lowercase variants of harfbuzz* in variable and function names to camel-case harfBuzz*,
        moved files in platform/graphics/harfbuzz/ng/* one level up and removed ng folder.
        Updated corresponding entries in Chromium, GTK and EFL build system files.

        No new tests, no change in behavior.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/FontPlatformData.cpp:
        * platform/graphics/FontPlatformData.h:
        (WebCore):
        (FontPlatformData):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::harfBuzzFace):
        * platform/graphics/freetype/FontPlatformData.h:
        (FontPlatformData):
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::harfBuzzFace):
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::harfBuzzFace):
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h:
        (WebCore):
        (FontPlatformData):
        * platform/graphics/harfbuzz/HarfBuzzFace.cpp: Renamed from Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp.
        (WebCore):
        (FaceCacheEntry):
        (WebCore::FaceCacheEntry::create):
        (WebCore::FaceCacheEntry::~FaceCacheEntry):
        (WebCore::FaceCacheEntry::face):
        (WebCore::FaceCacheEntry::glyphCache):
        (WebCore::FaceCacheEntry::FaceCacheEntry):
        (WebCore::harfBuzzFaceCache):
        (WebCore::HarfBuzzFace::HarfBuzzFace):
        (WebCore::HarfBuzzFace::~HarfBuzzFace):
        (WebCore::findScriptForVerticalGlyphSubstitution):
        (WebCore::HarfBuzzFace::setScriptForVerticalGlyphSubstitution):
        * platform/graphics/harfbuzz/HarfBuzzFace.h: Renamed from Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.h.
        (WebCore):
        (HarfBuzzFace):
        (WebCore::HarfBuzzFace::create):
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp: Renamed from Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFaceCairo.cpp.
        (WebCore):
        (CairoFtFaceLocker):
        (WebCore::CairoFtFaceLocker::CairoFtFaceLocker):
        (WebCore::CairoFtFaceLocker::lock):
        (WebCore::CairoFtFaceLocker::~CairoFtFaceLocker):
        (WebCore::floatToHarfBuzzPosition):
        (WebCore::doubleToHarfBuzzPosition):
        (WebCore::CairoGetGlyphWidthAndExtents):
        (WebCore::harfBuzzGetGlyph):
        (WebCore::harfBuzzGetGlyphHorizontalAdvance):
        (WebCore::harfBuzzGetGlyphHorizontalOrigin):
        (WebCore::harfBuzzGetGlyphExtents):
        (WebCore::harfBuzzCairoTextGetFontFuncs):
        (WebCore::harfBuzzCairoGetTable):
        (WebCore::HarfBuzzFace::createFace):
        (WebCore::HarfBuzzFace::createFont):
        (WebCore::HarfBuzzShaper::createGlyphBufferAdvance):
        * platform/graphics/harfbuzz/HarfBuzzFaceCoreText.cpp: Renamed from Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFaceCoreText.cpp.
        (WebCore):
        (WebCore::floatToHarfBuzzPosition):
        (WebCore::getGlyph):
        (WebCore::getGlyphHorizontalAdvance):
        (WebCore::getGlyphHorizontalOrigin):
        (WebCore::getGlyphExtents):
        (WebCore::harfbuzzCoreTextGetFontFuncs):
        (WebCore::releaseTableData):
        (WebCore::harfBuzzCoreTextGetTable):
        (WebCore::HarfBuzzFace::createFace):
        (WebCore::HarfBuzzFace::createFont):
        (WebCore::HarfBuzzShaper::createGlyphBufferAdvance):
        * platform/graphics/harfbuzz/HarfBuzzFaceSkia.cpp: Renamed from Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFaceSkia.cpp.
        (WebCore):
        (WebCore::HarfBuzzFontData::HarfBuzzFontData):
        (HarfBuzzFontData):
        (WebCore::SkiaScalarToHarfBuzzPosition):
        (WebCore::SkiaGetGlyphWidthAndExtents):
        (WebCore::harfBuzzGetGlyph):
        (WebCore::harfBuzzGetGlyphHorizontalAdvance):
        (WebCore::harfBuzzGetGlyphHorizontalOrigin):
        (WebCore::harfBuzzGetGlyphExtents):
        (WebCore::harfBuzzSkiaGetFontFuncs):
        (WebCore::harfBuzzSkiaGetTable): Also fixed style checker whitespace complaint / indentation.
        (WebCore::destroyHarfBuzzFontData):
        (WebCore::HarfBuzzFace::createFace):
        (WebCore::HarfBuzzFace::createFont):
        (WebCore::HarfBuzzShaper::createGlyphBufferAdvance):
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp: Renamed from Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp.
        (WebCore):
        (HarfBuzzScopedPtr):
        (WebCore::HarfBuzzScopedPtr::HarfBuzzScopedPtr):
        (WebCore::HarfBuzzScopedPtr::~HarfBuzzScopedPtr):
        (WebCore::HarfBuzzScopedPtr::get):
        (WebCore::harfBuzzPositionToFloat):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::HarfBuzzRun):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::applyShapeResult):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::setGlyphAndPositions):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::characterIndexForXPosition):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::xPositionForOffset):
        (WebCore::normalizeCharacters):
        (WebCore::HarfBuzzShaper::HarfBuzzShaper):
        (WebCore::HarfBuzzShaper::~HarfBuzzShaper):
        (WebCore::HarfBuzzShaper::setDrawRange):
        (WebCore::HarfBuzzShaper::setFontFeatures):
        (WebCore::HarfBuzzShaper::shape):
        (WebCore::HarfBuzzShaper::adjustStartPoint):
        (WebCore::HarfBuzzShaper::collectHarfBuzzRuns):
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):
        (WebCore::HarfBuzzShaper::setGlyphPositionsForHarfBuzzRun):
        (WebCore::HarfBuzzShaper::fillGlyphBufferFromHarfBuzzRun):
        (WebCore::HarfBuzzShaper::fillGlyphBuffer):
        (WebCore::HarfBuzzShaper::offsetForPosition):
        (WebCore::HarfBuzzShaper::selectionRect):
        * platform/graphics/harfbuzz/HarfBuzzShaper.h: Renamed from Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.h.
        (WebCore):
        (HarfBuzzShaper):
        (WebCore::HarfBuzzShaper::totalWidth):
        (HarfBuzzRun):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::create):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::setWidth):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::fontData):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::startIndex):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::numCharacters):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::numGlyphs):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::glyphs):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::advances):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::offsets):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::glyphToCharacterIndexes):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::width):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::rtl):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::script):

2013-01-30  Tony Chang  <tony@chromium.org>

        REGRESSION(r136324): Flexbox should relayout flex children when width changes
        https://bugs.webkit.org/show_bug.cgi?id=108231

        Reviewed by Ojan Vafai.

        If the width of a block changes, we need to set relayoutChildren = true
        to relayout the children. This broke when we optimized the layout calls
        in layoutAndPlaceChildren.

        Test: css3/flexbox/width-change-and-relayout-children.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Also reorder the code to match RenderBlock.
        The bug fix is to use updateLogicalWidthAndColumnWidth() and its return value to set
        relayoutChildren = true.

2013-01-30  Tim Horton  <timothy_horton@apple.com>

        GraphicsContext3DCG needs to copy image data in paintToCanvas
        https://bugs.webkit.org/show_bug.cgi?id=108310

        Reviewed by Simon Fraser.

        Make the CG implementation of GraphicsContext3D::paintToCanvas copy image data
        before drawing if we're drawing into an accelerated context, matching the fix made
        in http://trac.webkit.org/changeset/106095 for 2D canvas.

        No new tests, depends on acceleration and would be flaky at best.

        * platform/graphics/GraphicsContext3D.h:
        (GraphicsContext3D): Make CG's paintToCanvas take a GraphicsContext instead of a CGContextRef.
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::releaseImageData): Added.
        (WebCore::GraphicsContext3D::paintToCanvas): Copy image data if the destination is
        an accelerated context. Also, use GraphicsContext API instead of CGContext.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):

2013-01-29  Jer Noble  <jer.noble@apple.com>

        MediaPlayerPrivateQTKit claims it supports application/x-diskcopy, breaking downloads.
        https://bugs.webkit.org/show_bug.cgi?id=108237

        Reviewed by Eric Carlson.

        Disclaim any non-'video/' or 'audio/' types which QTKit purports to support.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::addFileTypesToCache):

2013-01-30  Florin Malita  <fmalita@chromium.org>

        Do not restart the matched properties cache timer if active
        https://bugs.webkit.org/show_bug.cgi?id=108345

        Reviewed by Andreas Kling.

        StyleResolver::addToMatchedPropertiesCache() keeps resetting the timer as more than
        matchedDeclarationCacheAdditionsBetweenSweeps entries are added. When armed, we should let
        the timer expire at its scheduled time - otherwise it may never get a chance to fire if
        entries keep getting added.

        No new tests. This is a long lived timer (1min) which makes testing impractical.

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

2013-01-30  Simon Fraser  <simon.fraser@apple.com>

        Temporarily disable assertions related to clip rect computation in RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=108265

        Reviewed by Dean Jackson.

        These assertions are killing the test bots, so disable them temporarily
        until we figure out the underlying bug (tracked by https://bugs.webkit.org/show_bug.cgi?id=103432).

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

2013-01-30  Elliott Sprehn  <esprehn@chromium.org>

        Element::areAuthorShadowsAllowed should be private
        https://bugs.webkit.org/show_bug.cgi?id=108298

        Reviewed by Darin Adler.

        There's no reason for areAuthorShadowsAllowed to be exposed publically
        on Element since it just controls the behavior of createShadowRoot. Make
        it private and fix all places where it wasn't in subclasses.

        No new tests, just refactoring.

        * dom/Element.h:
        (WebCore::Element::areAuthorShadowsAllowed): Made private.
        * html/HTMLFrameElementBase.h:
        (HTMLFrameElementBase):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLPlugInElement.h:
        (HTMLPlugInElement):
        * svg/SVGElement.h:
        (SVGElement):

2013-01-30  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Script Profiler: Make profiler output typed.
        https://bugs.webkit.org/show_bug.cgi?id=102792

        Reviewed by Yury Semikhatsky.

        Currently fields "head" and "bottomUpHead" of Profile object
        returned by Profiler.getCPUProfile is untyped (type = object).

        That's not good both for client side (protocol users may
        only guess on output content) and backend side (field names
        are hardcoded in source code).

        This patch defines "head" and "bottomUpHead" to be of new
        "CPUProfileNode" type and updates serialization code to use
        builders to create output.

        * bindings/js/ScriptProfile.cpp: Used buiders for serialization.
        * bindings/js/ScriptProfile.h: Ditto.
        * bindings/v8/ScriptProfile.cpp: Ditto.
        * bindings/v8/ScriptProfile.h: Ditto.
        * inspector/Inspector.json: Added and used new ProfileNode type.

2013-01-30  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: remove NativeHeapGraph.js
        https://bugs.webkit.org/show_bug.cgi?id=108342

        Reviewed by Pavel Feldman.

        NativeHeapGraph.js was removed as NativeHeapSnapshot.js provides more
        features and shares its implementation with JSHeapSnapshot.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/NativeHeapGraph.js: Removed.
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotProfileType.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeSnapshotProfileType.prototype.buttonClicked):
        (WebInspector.NativeSnapshotProfileHeader.prototype.startSnapshotTransfer):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/WebKit.qrc:

2013-01-30  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Sidebar splitter is invisible in Elements and Sources panels
        https://bugs.webkit.org/show_bug.cgi?id=108331

        Reviewed by Pavel Feldman.

        This was a regression caused by https://bugs.webkit.org/show_bug.cgi?id=108181.
        The splitter element did not get the correct class at the initialization.

        * inspector/front-end/SidebarView.js:
        (WebInspector.SidebarView):
        (WebInspector.SidebarView.prototype._updateSidebarPosition):

2013-01-30  Dmitry Zvorygin  <zvorygin@chromium.org>

        Web Inspector: Filters on Console panel
        https://bugs.webkit.org/show_bug.cgi?id=107813

        The problem is that third-party libraries may spam javascript console with internal
        messages. Now there's filter context-menu option, which allows to hide/show messages
        sent from specific scripts or urls.

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.appendUndefined):
        (WebInspector.ConsoleMessageImpl.prototype._printArray):
        (WebInspector.ConsoleMessageImpl.prototype._highlightSearchResultsInElement):
        * inspector/front-end/ConsolePanel.js:
        (WebInspector.ConsolePanel.prototype.performSearch):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.get this):
        (WebInspector.ConsoleView.prototype._consoleMessageAdded):
        (WebInspector.ConsoleView.prototype._appendConsoleMessage):
        (WebInspector.ConsoleView.prototype._consoleCleared):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent.get var):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent.set get contextMenu):
        (WebInspector.ConsoleView.prototype._shouldBeVisible):
        (WebInspector.ConsoleView.prototype._updateMessageList):
        (WebInspector.ConsoleGroup.prototype.addMessage):
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenuItem.prototype.isEnabled):
        (WebInspector.ContextMenuItem.prototype.setEnabled):
        * inspector/front-end/Settings.js:

2013-01-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] USE(NATIVE_FULLSCREEN_VIDEO) support
        https://bugs.webkit.org/show_bug.cgi?id=106760

        Reviewed by Gustavo Noronha Silva.

        Initial support for NATIVE_FULLSCREEN_VIDEO in the GStreamer media
        player. A new FullscreenVideoControllerGStreamer class is
        introduced, ports interested to implement native fullscreen video
        support should inherit from it (see FullscreenVideoControllerGtk)
        and hook it in the MediaPlayerPrivateGStreamer backend.

        The GStreamerGWorld port to GStreamer 1.x is partly based on a
        patch by Sebastian Dröge <sebastian.droge@collabora.com>.

        * GNUmakefile.am: Enable NATIVE_FULLSCREEN_VIDEO support.
        * GNUmakefile.list.am: New
        FullscreenVideoController{GStreamer,Gtk} modules.
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.cpp: Added.
        (WebCore):
        (WebCore::playerVolumeChangedCallback): Playbin notify::volume
        signal callback.
        (WebCore::playerMuteChangedCallback): Playbin notify::mute signal callback.
        (WebCore::FullscreenVideoControllerGStreamer::FullscreenVideoControllerGStreamer):
        (WebCore::FullscreenVideoControllerGStreamer::~FullscreenVideoControllerGStreamer):
        (WebCore::FullscreenVideoControllerGStreamer::enterFullscreen):
        Switch GStreamerGWorld to full screen, hook in to playbin's
        notify::volume and mute signals and initialize the full screen window.
        (WebCore::FullscreenVideoControllerGStreamer::exitFullscreen):
        Destroy the full screen window, disconnect from playbin signals
        and switch GStreamerGWorld out of full screen.
        (WebCore::FullscreenVideoControllerGStreamer::exitOnUserRequest):
        Trigger exit from full screen mode. This method is meant to be
        called when the user explicitely requests to exit from full screen
        by pressing a key or something similar.
        (WebCore::FullscreenVideoControllerGStreamer::togglePlay): Switch
        between play and pause states. Useful for child classes.
        (WebCore::FullscreenVideoControllerGStreamer::increaseVolume):
        Useful for child classes as well.
        (WebCore::FullscreenVideoControllerGStreamer::decreaseVolume): Ditto.
        (WebCore::FullscreenVideoControllerGStreamer::setVolume): Ditto.
        (WebCore::FullscreenVideoControllerGStreamer::timeToString): Ditto.
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.h: Added.
        (WebCore):
        (FullscreenVideoControllerGStreamer):
        (WebCore::FullscreenVideoControllerGStreamer::playStateChanged):
        To be implemented by child class to reflect the player's state changed.
        (WebCore::FullscreenVideoControllerGStreamer::volumeChanged): To
        be implemented by child class as well.
        (WebCore::FullscreenVideoControllerGStreamer::muteChanged): Ditto.
        (WebCore::FullscreenVideoControllerGStreamer::initializeWindow): Ditto.
        (WebCore::FullscreenVideoControllerGStreamer::destroyWindow): Ditto.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::gstGWorldSyncMessageCallback): Adapt for GStreamer video
        overlay API changes.
        (WebCore::GStreamerGWorld::GStreamerGWorld):
        gst_bus_set_sync_handler takes one more argument in GStreamer 1.x.
        (WebCore::GStreamerGWorld::enterFullscreen): ffmpegcolorspace was
        renamed to videoconvert in GStreamer 1.x and the tee src pad
        template was renamed to src_%u. There is no need to send a new
        segment query either.
        (WebCore):
        (WebCore::gstGWorldPadProbeCallback): Remove the platform video
        sink branch once the tee source pad starting it has been blocked.
        (WebCore::GStreamerGWorld::exitFullscreen): Refactor to use an
        asynchronous pad probe.
        (WebCore::GStreamerGWorld::removePlatformVideoSink): Refactored
        from exitFullscreen.
        (WebCore::GStreamerGWorld::setWindowOverlay): Adapt for GStreamer video
        overlay API changes.
        * platform/graphics/gstreamer/GStreamerGWorld.h:
        (GStreamerGWorld):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        Hook NATIVE_FULLSCREEN_VIDEO support.
        (WebCore::MediaPlayerPrivateGStreamer::volume): Playbin volume
        query used by the FullscreenVideoController.
        (WebCore):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore):
        (MediaPlayerPrivateGStreamer): volume(), muted() and MediaPlayer
        accessor methods added. NATIVE_FULLSCREEN_VIDEO methods added as well.
        (WebCore::MediaPlayerPrivateGStreamer::canEnterFullscreen):
        (WebCore::MediaPlayerPrivateGStreamer::mediaPlayer):
        * platform/graphics/gstreamer/PlatformVideoWindow.h: Re-enable
        module if NATIVE_FULLSCREEN_VIDEO is turned on.
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp: Ditto.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp: Re-enable
        GStreamerGWorld support.
        (_WebKitVideoSinkPrivate):
        (webkitVideoSinkRender):
        * platform/graphics/gstreamer/VideoSinkGStreamer.h: Ditto.

2013-01-30  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: beautify file selector dialog to render as two rows
        https://bugs.webkit.org/show_bug.cgi?id=108335

        Reviewed by Vsevolod Vlasov.

        Go-to-file is now rendered in two rows.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog):
        (WebInspector.FilteredItemSelectionDialog.prototype.focus):
        (WebInspector.FilteredItemSelectionDialog.prototype.renderAsTwoRows):
        (WebInspector.FilteredItemSelectionDialog.prototype._createItemElement):
        (WebInspector.OpenResourceDialog.show):
        * inspector/front-end/ViewportControl.js:
        (WebInspector.ViewportControl):
        (WebInspector.ViewportControl.prototype.refresh):
        * inspector/front-end/filteredItemSelectionDialog.css:
        (.filtered-item-list-dialog > input):
        (.filtered-item-list-dialog > div.progress):
        (.filtered-item-list-dialog > div.container):
        (.filtered-item-list-dialog-item):
        (.filtered-item-list-dialog-subtitle):
        (.filtered-item-list-dialog-item.one-row .filtered-item-list-dialog-subtitle):
        (.filtered-item-list-dialog-item.two-rows):
        (.filtered-item-list-dialog-item.selected):
        (.filtered-item-list-dialog-item span.highlight):

2013-01-30  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: migrate file selection dialog to the viewport.
        https://bugs.webkit.org/show_bug.cgi?id=108313

        Reviewed by Vsevolod Vlasov.

        Otherwise it takes too long to render.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog):
        (WebInspector.FilteredItemSelectionDialog.prototype.focus):
        (WebInspector.FilteredItemSelectionDialog.prototype.onEnter):
        (WebInspector.FilteredItemSelectionDialog.prototype._itemsLoaded):
        (WebInspector.FilteredItemSelectionDialog.prototype._createItemElement):
        (WebInspector.FilteredItemSelectionDialog.prototype._filterItems):
        (WebInspector.FilteredItemSelectionDialog.prototype._onKeyDown.updateSelection):
        (WebInspector.FilteredItemSelectionDialog.prototype._onKeyDown):
        (WebInspector.FilteredItemSelectionDialog.prototype._updateSelection):
        (WebInspector.FilteredItemSelectionDialog.prototype._onClick):
        (WebInspector.FilteredItemSelectionDialog.prototype._onMouseMove):
        (WebInspector.FilteredItemSelectionDialog.prototype.itemCount):
        (WebInspector.FilteredItemSelectionDialog.prototype.itemElement):
        * inspector/front-end/ViewportControl.js: Added.
        (WebInspector.ViewportControl):
        (WebInspector.ViewportControl.Provider):
        (WebInspector.ViewportControl.Provider.prototype.itemCount):
        (WebInspector.ViewportControl.Provider.prototype.itemElement):
        (WebInspector.ViewportControl.prototype.contentElement):
        (WebInspector.ViewportControl.prototype.refresh):
        (WebInspector.ViewportControl.prototype._onScroll):
        (WebInspector.ViewportControl.prototype.rowsPerViewport):
        (WebInspector.ViewportControl.prototype.firstVisibleIndex):
        (WebInspector.ViewportControl.prototype.lastVisibleIndex):
        (WebInspector.ViewportControl.prototype.renderedElementAt):
        (WebInspector.ViewportControl.prototype.scrollItemIntoView):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/filteredItemSelectionDialog.css:
        (.js-outline-dialog .container div.item.selected):
        (.js-outline-dialog .container div.item span.highlight):
        * inspector/front-end/inspector.html:

2013-01-30  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: implement highlight range API
        https://bugs.webkit.org/show_bug.cgi?id=108317

        Reviewed by Pavel Feldman.

        Test: inspector/editor/text-editor-highlight-api.html

        Introduce RangeHighlightDescriptor class and implement Highlight Range
        api.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.removeHighlight):
        (WebInspector.DefaultTextEditor.prototype.highlightRange):
        (WebInspector.TextEditorMainPanel.prototype.removeHighlight):
        (WebInspector.TextEditorMainPanel.prototype.highlightRange):
        (WebInspector.TextEditorMainPanel.RangeHighlightDescriptor):
        (WebInspector.TextEditorMainPanel.RangeHighlightDescriptor.prototype.affectsLine):
        (WebInspector.TextEditorMainPanel.RangeHighlightDescriptor.prototype.rangesForLine):
        (WebInspector.TextEditorMainPanel.RangeHighlightDescriptor.prototype.cssClass):
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype._removeHighlight):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.highlightRange):
        (WebInspector.TextEditor.prototype.removeHighlight):

2013-01-30  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Remove QT4_UNICODE related code paths
        https://bugs.webkit.org/show_bug.cgi?id=108316

        Reviewed by Kenneth Rohde Christiansen.

        Get rid of QT4_UNICODE and any related code paths. The Qt port
        requires Qt5 and ICU these days. This also allows for the removal
        of TextCodecQt.

        * Target.pri:
        * platform/KURL.cpp:
        (WebCore::appendEncodedHostname):
        * platform/graphics/SurrogatePairAwareTextIterator.cpp:
        (WebCore::SurrogatePairAwareTextIterator::normalizeVoicingMarks):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::extendTextCodecMaps):
        * platform/text/qt/TextCodecQt.cpp: Removed.
        * platform/text/qt/TextCodecQt.h: Removed.

2013-01-30  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Make WebCorePrefix.h build on iOS
        <http://webkit.org/b/108224>

        Reviewed by Sam Weinig.

        * WebCorePrefix.h:
        - Include <wtf/Platform.h>.
        - Do not include <CoreServices/CoreServices.h> on iOS.
        - Include <Foundation/Foundation.h> instead of <Cocoa/Cocoa.h>
          on iOS.

2013-01-30  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r141156.

        * PlatformWinCE.cmake:

2013-01-30  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] support instrumenting canvases in iframes (frontend side)
        https://bugs.webkit.org/show_bug.cgi?id=108319

        Reviewed by Pavel Feldman.

        Add a frame selector to choose between frames with canvases. Show this selector in the status
        bar only if there are 2 or more frames with canvses. Otherwise, assume silently the only
        frame with canvases (most common use case).

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileType):
        (WebInspector.CanvasProfileType.prototype.get statusBarItems):
        (WebInspector.CanvasProfileType.prototype._runSingleFrameCapturing):
        (WebInspector.CanvasProfileType.prototype._startFrameCapturing):
        (WebInspector.CanvasProfileType.prototype._frameAdded):
        (WebInspector.CanvasProfileType.prototype._addFrame):
        (WebInspector.CanvasProfileType.prototype._frameRemoved):
        (WebInspector.CanvasProfileType.prototype._contextCreated):
        (WebInspector.CanvasProfileType.prototype._selectedFrameId):
        (WebInspector.CanvasProfileType.prototype._dispatchViewUpdatedEvent):
        (WebInspector.CanvasDispatcher):
        (WebInspector.CanvasDispatcher.prototype.contextCreated):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.createProfile):
        (WebInspector.ProfilesPanel.prototype._onProfileTypeSelected):
        (WebInspector.ProfilesPanel.prototype._updateProfileTypeSpecificUI):
        (WebInspector.ProfilesPanel.prototype._registerProfileType):
        * inspector/front-end/StatusBarButton.js:
        (WebInspector.StatusBarComboBox.prototype.size):

2013-01-30  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Change the Elements panel sidebar layout based on its aspect ratio.
        https://bugs.webkit.org/show_bug.cgi?id=108181

        Reviewed by Pavel Feldman.

        Sidebar aspect ratio proved to be a better trigger for the sidebar layout change that the docking mode.
        Moved the sidebar layout handling completely into WebInspector.SidebarView which now only accepts
        two positions: Start (corresponding to Left or Top) and End (corresponding to Right or Bottom).

        No new tests.

        * inspector/front-end/CSSNamedFlowCollectionsView.js:
        (WebInspector.CSSNamedFlowCollectionsView):
        * inspector/front-end/DockController.js:
        (WebInspector.DockController.prototype._updateUI):
        (WebInspector.DockController.prototype._toggleDockState):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.onResize):
        * inspector/front-end/FileSystemView.js:
        (WebInspector.FileSystemView):
        * inspector/front-end/MemoryStatistics.js:
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.createSidebarView):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SidebarView.js:
        (WebInspector.SidebarView):
        (WebInspector.SidebarView.prototype.setAutoOrientation):
        (WebInspector.SidebarView.prototype._updateSidebarPosition):
        (WebInspector.SidebarView.prototype.onResize):

2013-01-30  Patrick Gansterer  <paroga@webkit.org>

        Port SharedTimerWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=103724

        Reviewed by Brent Fulgham.

        Add #if !OS(WINCE) around some parts of the code, so it can be used by the WinCE port too.

        * PlatformWinCE.cmake:
        * platform/win/SharedTimerWin.cpp:
        (WebCore):
        (WebCore::TimerWindowWndProc):
        (WebCore::initializeOffScreenTimerWindow):
        (WebCore::setSharedTimerFireInterval):
        (WebCore::stopSharedTimer):
        * platform/wince/SharedTimerWinCE.cpp: Removed.

2013-01-30  Andrey Lushnikov  <lushnikov@chromium.org>

        ctrl-arrows, ctrl-shift-arrow, ctrl-backspace

        Web Inspector: implmenet Ctrl-Arrow/Ctrl-Backspace in DefaultTextEditor
        https://bugs.webkit.org/show_bug.cgi?id=107944

        Reviewed by Pavel Feldman.

        Add ctrl-arrows/ctrl-shift-arrow/ctrl-backspace shortcuts to jump over
        and delete words.

        New test: inspector/editor/text-editor-ctrl-movements.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor):
        (WebInspector.DefaultTextEditor.prototype._registerShortcuts):
        (WebInspector.DefaultTextEditor.prototype.selection):
        (WebInspector.DefaultTextEditor.WordMovementController): Added.
        (WebInspector.DefaultTextEditor.WordMovementController.prototype._registerShortcuts):
        (WebInspector.DefaultTextEditor.WordMovementController.prototype.):
        (WebInspector.DefaultTextEditor.WordMovementController.prototype._rangeForCtrlArrowMove):
        (WebInspector.DefaultTextEditor.WordMovementController.prototype._handleCtrlArrow):
        (WebInspector.DefaultTextEditor.WordMovementController.prototype._handleCtrlShiftArrow):
        (WebInspector.DefaultTextEditor.WordMovementController.prototype._handleCtrlBackspace):

2013-01-30  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: do not repaint all lines in highlight regex API in DTE
        https://bugs.webkit.org/show_bug.cgi?id=108081

        Reviewed by Pavel Feldman.

        Implement repaintLineRowsAffectedByHighlightDescriptor method that
        will go through the visible lineRows and repaint only those of them
        which were outdated by highlight change.

        Improved test: inspector/editor/text-editor-highlight-regexp.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype.highlightRegex):
        (WebInspector.TextEditorMainPanel.prototype.removeRegexHighlight):
        (WebInspector.TextEditorMainPanel.prototype._repaintLineRowsAffectedByHighlightDescriptor):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLineRows):

2013-01-30  Tien-Ren Chen  <trchen@chromium.org>

        REGRESSION (r139282): Caret repainting is broken for text-align: center'd <input>
        https://bugs.webkit.org/show_bug.cgi?id=108283

        Reviewed by Tim Horton.

        Occasionally carets won't be fully erased when blinking.
        There used to be 1-pixel padding but removed since r139282.
        This patch adds back the same workaround.

        Need to rebaseline test expectations.

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

2013-01-30  Dominik Röttsches  <dominik.rottsches@intel.com>

        [HarfBuzz] Remove the HarfBuzz-old code
        https://bugs.webkit.org/show_bug.cgi?id=108077

        Reviewed by Benjamin Poulain.

        Removing unused old variant of the HarfBuzz code.

        No new tests, no change in functionality.

        * GNUmakefile.am: Rename WTF_USE_HARFBUZZ_NG to WTF_USE_HARFBUZZ
        * WebCore.gypi: Removing ComplexTextControllerHarfBuzz* and HarfBuzzSkia* files,
        * platform/graphics/SimpleFontData.h:
        (SimpleFontData): USE(HARFBUZZ_NG) renamed to USE(HARFBUZZ).
        * platform/graphics/freetype/FontPlatformData.h:
        (FontPlatformData): Removing USE(HARFBUZZ_NG) ifdefs.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Removing USE(HARFBUZZ_NG) ifdefs.
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::harfbuzzFace):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp: USE(HARFBUZZ_NG) renamed to USE(HARFBUZZ).
        (WebCore):
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp: Removed.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.h: Removed.
        * platform/graphics/harfbuzz/FontHarfBuzz.cpp: Removing USE(HARFBUZZ_NG) ifdefs.
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp: Removing USE(HARFBUZZ_NG) ifdefs.
        (WebCore::FontPlatformData::harfbuzzFace):
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h: Removing USE(HARFBUZZ_NG) ifdefs.
        (WebCore):
        (FontPlatformData):
        * platform/graphics/harfbuzz/HarfBuzzSkia.cpp: Removed.
        * platform/graphics/harfbuzz/HarfBuzzSkia.h: Removed.
        * platform/graphics/skia/SimpleFontDataSkia.cpp: USE(HARFBUZZ_NG) renamed to USE(HARFBUZZ).
        (WebCore):

2013-01-30  David Faure  <faure@kde.org>

        [Qt] Major performance improvement in Qt's PluginDatabase implementation
        https://bugs.webkit.org/show_bug.cgi?id=106140

        Reviewed by Simon Hausmann.

        No new tests, only a performance improvement.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo): Don't do a full-fledged load(), load the module directly.
        Keep the refcounting as it was before (broken, but otherwise flash crashes).
        (WebCore::PluginPackage::load): Use existing module if fetchInfo created it.

2013-01-30  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Remove GraphicsLayer in TextureMapperLayer.
        https://bugs.webkit.org/show_bug.cgi?id=107073

        Reviewed by Noam Rosenthal.

        Remove the dependency of TextureMapperLayer on GraphicsLayer. It is needed to
        remove GraphicsLayerTextureMapper in LayerTreeRenderer.

        This is in preparation for refactoring TextureMapper to work in an actor
        model (http://webkit.org/b/103854).

        Covered by existing tests.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::toTextureMapperLayer):
        (WebCore):
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::notifyChange):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setContentsNeedsDisplay):
            Set BackgroundColorChange to m_changeMask instead of ContentChange.
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerTextureMapper::setChildren):
        (WebCore::GraphicsLayerTextureMapper::addChild):
        (WebCore::GraphicsLayerTextureMapper::addChildAtIndex):
        (WebCore::GraphicsLayerTextureMapper::addChildAbove):
        (WebCore::GraphicsLayerTextureMapper::addChildBelow):
        (WebCore::GraphicsLayerTextureMapper::replaceChild):
        (WebCore::GraphicsLayerTextureMapper::setMaskLayer):
        (WebCore::GraphicsLayerTextureMapper::setReplicatedByLayer):
        (WebCore::GraphicsLayerTextureMapper::setPosition):
        (WebCore::GraphicsLayerTextureMapper::setAnchorPoint):
        (WebCore::GraphicsLayerTextureMapper::setSize):
        (WebCore::GraphicsLayerTextureMapper::setTransform):
        (WebCore::GraphicsLayerTextureMapper::setChildrenTransform):
        (WebCore::GraphicsLayerTextureMapper::setPreserves3D):
        (WebCore::GraphicsLayerTextureMapper::setMasksToBounds):
        (WebCore::GraphicsLayerTextureMapper::setDrawsContent):
        (WebCore::GraphicsLayerTextureMapper::setContentsVisible):
        (WebCore::GraphicsLayerTextureMapper::setContentsOpaque):
        (WebCore::GraphicsLayerTextureMapper::setBackfaceVisibility):
        (WebCore::GraphicsLayerTextureMapper::setOpacity):
        (WebCore::GraphicsLayerTextureMapper::setContentsRect):
        (WebCore::GraphicsLayerTextureMapper::setContentsToSolidColor):
        (WebCore::GraphicsLayerTextureMapper::setContentsToImage):
        (WebCore::GraphicsLayerTextureMapper::setContentsToMedia):
        (WebCore::GraphicsLayerTextureMapper::setShowDebugBorder):
        (WebCore::GraphicsLayerTextureMapper::setShowRepaintCounter):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerTextureMapper::prepareBackingStoreIfNeeded):
        (WebCore::GraphicsLayerTextureMapper::updateDebugBorderAndRepaintCount):
        (WebCore::GraphicsLayerTextureMapper::setDebugBorder):
        (WebCore::toTextureMapperLayerVector):
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
            Flush pending changes into TextureMapperLayer.
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        (WebCore::GraphicsLayerTextureMapper::setAnimations):
        (WebCore::GraphicsLayerTextureMapper::setFilters):
        (WebCore::GraphicsLayerTextureMapper::setBackingStore):
        (WebCore::GraphicsLayerTextureMapper::setFixedToViewport):
        (WebCore::GraphicsLayerTextureMapper::setRepaintCount):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        (WebCore):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setChildren):
        (WebCore::TextureMapperLayer::setMaskLayer):
        (WebCore):
        (WebCore::TextureMapperLayer::setReplicaLayer):
        (WebCore::TextureMapperLayer::setPosition):
        (WebCore::TextureMapperLayer::setSize):
        (WebCore::TextureMapperLayer::setAnchorPoint):
        (WebCore::TextureMapperLayer::setPreserves3D):
        (WebCore::TextureMapperLayer::setTransform):
        (WebCore::TextureMapperLayer::setChildrenTransform):
        (WebCore::TextureMapperLayer::setContentsRect):
        (WebCore::TextureMapperLayer::setMasksToBounds):
        (WebCore::TextureMapperLayer::setDrawsContent):
        (WebCore::TextureMapperLayer::setContentsVisible):
        (WebCore::TextureMapperLayer::setContentsOpaque):
        (WebCore::TextureMapperLayer::setBackfaceVisibility):
        (WebCore::TextureMapperLayer::setOpacity):
        (WebCore::TextureMapperLayer::setSolidColor):
        (WebCore::TextureMapperLayer::setFilters):
        (WebCore::TextureMapperLayer::setDebugVisuals):
        (WebCore::TextureMapperLayer::setRepaintCount):
        (WebCore::TextureMapperLayer::setContentsLayer):
        (WebCore::TextureMapperLayer::setAnimations):
        (WebCore::TextureMapperLayer::setFixedToViewport):
        (WebCore::TextureMapperLayer::setBackingStore):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore):
        (TextureMapperLayer):
        (WebCore::TextureMapperLayer::TextureMapperLayer):

2013-01-30  Elliott Sprehn  <esprehn@chromium.org>

        getDecorationRootAndDecoratedRoot should add new user agent shadow roots
        https://bugs.webkit.org/show_bug.cgi?id=108301

        Reviewed by Hajime Morita.

        getDecorationRootAndDecoratedRoot intended to add a second UserAgentShadowRoot
        to the input, not just reuse the existing one so it could insert icons into
        the inputs. Add back in this behavior for now so we can sort out the right thing
        to do.

        This behavior is wrong in the current architecture since it means if you had an
        input type=submit, add an author shadow root, and then change the type to text
        and then the browser decorates it your shadow magically becomes inaccessible since
        input.shadowRoot is no longer available. This feature is currently only used for
        decorating type=password fields in Chromium with an icon for password generation.

        No new tests, there's no way to test this because it's only used in Chromium
        by way of the ChromeClient.

        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::getDecorationRootAndDecoratedRoot):

2013-01-30  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove m_pendingSyncBackingStores in LayerTreeRenderer.
        https://bugs.webkit.org/show_bug.cgi?id=107099

        Reviewed by Noam Rosenthal.

        Add GraphicsLayerTextureMapper::setBackingStore() so that
        LayerTreeRenderer sets a backing store to GraphicsLayerTextureMapper.

        Remove three methods of TextureMapperLayer related to a backing store
        because they are no longer used.

        Covered by existing compositing tests.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerTextureMapper::prepareBackingStoreIfNeeded):
        (WebCore):
        (WebCore::GraphicsLayerTextureMapper::updateDebugBorderAndRepaintCount):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIfNeeded):
        (WebCore::GraphicsLayerTextureMapper::setBackingStore):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):

2013-01-30  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: DTE adds additional space to the end of line.
        https://bugs.webkit.org/show_bug.cgi?id=108192

        Reviewed by Pavel Feldman.

        Append overlay highlight spans before decorations elements and skip
        them in _collectLinesFromDom method.

        No new tests.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._appendOverlayHighlight):
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDOM):

2013-01-29  Shinya Kawanaka  <shinyak@chromium.org>

        Renderer is recreated unexpectedly after detach in HTMLInputElement
        https://bugs.webkit.org/show_bug.cgi?id=108150

        Reviewed by Kent Tamura.

        After r140659, destoryShadowSubtree() may update style in removeChild(). It causes
        attaching HTMLInputElement before creating shadowsubtree in HTMLInputElement::updateType().

        For safe, destroyShadowSubtree() should be done before detach().

        Test: fast/forms/number/number-change-type-on-focus-2.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):

2013-01-29  James Robinson  <jamesr@chromium.org>

        Scrollbar and scroll corner composited layers positioned incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=108255

        Reviewed by Simon Fraser.

        ScrollView::updateScrollbars() needs to update the overflow controls composited layers if scrollbars are added
        or removed. It was doing this by recording on entry to the function if it had horizontal or vertical scrollbars
        and then comparing that to m_horizontal/verticalScrollbar on exit. Unfortunately updateScrollbars is recursive
        and exits without running the postamble code when nested on the callstack. As a result, scrollbars may be
        added or removed several times during the recursion, possibly leaving the overflow control layers in an
        inconsistent state, while ending up with the same set of scrollbars.

        This changes the "has anything changed" logic to only compare local state (hasXXXScrollbar vs
        newHasXXXScrollbar) so changes in recursive calls are not considered.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2013-01-29  Shinya Kawanaka  <shinyak@chromium.org>

        Convert deprecatedShadowAncestorNode() to shadowHost() in Editor.cpp
        https://bugs.webkit.org/show_bug.cgi?id=108287

        Reviewed by Hajime Morita.

        This is the effort to convert deprecatedShadowAncestorNode() to shadowHost().

        Since all the caller object of deprecatedShadowAncestorNode() is in a shadow tree, calling deprecatedShadowAncestorNode()
        is equiavalent to calling shadowHost(). Also, for all the occurence of deprecatedShadowAncestorNode(), we don't need to
        worry about nested ShadowDOM issues. So directly converting deprecatedShadowAncestorNode() to shadowHost() should be safe.

        No new tests, simple refactoring.

        * editing/Editor.cpp:
        (WebCore::Editor::rangeOfString):
        (WebCore::Editor::countMatchesForText):

2013-01-29  Simon Fraser  <simon.fraser@apple.com>

        Rubberband scrolling on news.google.com causes text to blink repeatedly
        https://bugs.webkit.org/show_bug.cgi?id=107326

        Reviewed by Beth Dakin.

        When in the middle of layout, RenderBlock::updateScrollInfoAfterLayout()
        could cause us to re-evaluate reasons for compositing, via the call
        to updateLayerCompositingState() in RenderLayer::updateScrollInfoAfterLayout().
        
        At this time, when layout is still happening, it's bad to look at render
        geometry to decide when to do compositing (e.g. for fixed position); we might
        incorrectly conclude that the layer is outside the viewport.
        
        Fix by having RenderLayerCompositing store in a member whether it's safe
        to look at layout information. requiresCompositingForPosition() then consults
        this bit, and, if it needs to make decisions based on layout but layout is not
        complete, it doesn't change the compositing state of the layer.
        
        Not testable, since dumping the layer tree will update layout and mask the bug.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-01-29  Mark Lam  <mark.lam@apple.com>

        Introducing WTF::TypeSafeEnum and DatabaseError.
        https://bugs.webkit.org/show_bug.cgi?id=108279.

        Reviewed by Geoffrey Garen.

        DatabaseError will be used later in the webdatabase refactoring effort.
        It is currently unused.

        No new tests.

        * GNUmakefile.list.am:
        * Modules/webdatabase/DatabaseError.h: Added.
        (WebCore):
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-01-29  Elliott Sprehn  <esprehn@chromium.org>

        Move ShadowRoot creation into ElementShadow
        https://bugs.webkit.org/show_bug.cgi?id=108267

        Reviewed by Hajime Morita.

        Instead of the ShadowRoot::create method doing crazy factory things and
        then needing to assert about the state of the ShadowRoot in addShadowRoot,
        just create ShadowRoots from inside ElementShadow.

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::createShadowRoot): Use addShadowRoot().
        (WebCore::Element::ensureUserAgentShadowRoot): Use addShadowRoot().
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::addShadowRoot): Now returns the new ShadowRoot.
        * dom/ElementShadow.h:
        (ElementShadow):
        * dom/ShadowRoot.cpp:
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::create): No longer does the association.
        (WebCore::ShadowRoot::setHost): Sets parent tree scope automatically.

2013-01-29  Mark Lam  <mark.lam@apple.com>

        Rename DBBackend::Server to DatabaseServer.
        https://bugs.webkit.org/show_bug.cgi?id=108278.

        Rubber stamped by Geoffrey Garen.

        This is only a renaming operation as part of the webdatabase refactoring
        effort. There is no semantic change.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/DBBackendServer.cpp: Removed.
        * Modules/webdatabase/DBBackendServer.h: Removed.
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        * Modules/webdatabase/DatabaseServer.cpp: Copied from Source/WebCore/Modules/webdatabase/DBBackendServer.cpp.
        (WebCore::DatabaseServer::initialize):
        (WebCore::DatabaseServer::setClient):
        (WebCore::DatabaseServer::databaseDirectoryPath):
        (WebCore::DatabaseServer::setDatabaseDirectoryPath):
        (WebCore::DatabaseServer::fullPathForDatabase):
        (WebCore::DatabaseServer::hasEntryForOrigin):
        (WebCore::DatabaseServer::origins):
        (WebCore::DatabaseServer::databaseNamesForOrigin):
        (WebCore::DatabaseServer::detailsForNameAndOrigin):
        (WebCore::DatabaseServer::usageForOrigin):
        (WebCore::DatabaseServer::quotaForOrigin):
        (WebCore::DatabaseServer::setQuota):
        (WebCore::DatabaseServer::deleteAllDatabases):
        (WebCore::DatabaseServer::deleteOrigin):
        (WebCore::DatabaseServer::deleteDatabase):
        (WebCore::DatabaseServer::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseServer::databaseChanged):
        (WebCore::DatabaseServer::closeDatabasesImmediately):
        (WebCore::DatabaseServer::interruptAllDatabasesForContext):
        (WebCore::DatabaseServer::canEstablishDatabase):
        (WebCore::DatabaseServer::addOpenDatabase):
        (WebCore::DatabaseServer::removeOpenDatabase):
        (WebCore::DatabaseServer::setDatabaseDetails):
        (WebCore::DatabaseServer::getMaxSizeForDatabase):
        (WebCore):
        * Modules/webdatabase/DatabaseServer.h: Copied from Source/WebCore/Modules/webdatabase/DBBackendServer.h.
        * Target.pri:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DatabaseStrategy.cpp:
        (WebCore::DatabaseStrategy::getDatabaseServer):

2013-01-29  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver not reading bullets correctly in the text of notes
        https://bugs.webkit.org/show_bug.cgi?id=107980

        Reviewed by Ryosuke Niwa.

        Accessibility code should not assume that all list markers end with the same "." suffix.
        We need to use the actual suffix.

        Test: platform/mac/accessibility/listmarker-suffix.html

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

2013-01-29  Mark Lam  <mark.lam@apple.com>

        Rename AbstractDatabase to DatabaseBackend.
        https://bugs.webkit.org/show_bug.cgi?id=108275.

        Reviewed by Sam Weinig.

        This is a pure rename operation as part of the webdatabase refactoring
        effort. There is no semantic change in this patch.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractDatabase.cpp: Removed.
        * Modules/webdatabase/AbstractDatabase.h: Removed.
        * Modules/webdatabase/AbstractDatabaseServer.h:
        (WebCore):
        (AbstractDatabaseServer):
        * Modules/webdatabase/DBBackendServer.cpp:
        (WebCore::DBBackend::Server::databaseChanged):
        (WebCore::DBBackend::Server::addOpenDatabase):
        (WebCore::DBBackend::Server::removeOpenDatabase):
        (WebCore::DBBackend::Server::getMaxSizeForDatabase):
        * Modules/webdatabase/DBBackendServer.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::version):
        (WebCore::Database::performOpenAndVerify):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackend.cpp: Copied from Source/WebCore/Modules/webdatabase/AbstractDatabase.cpp.
        (WebCore):
        (WebCore::DatabaseBackend::databaseInfoTableName):
        (WebCore::DatabaseBackend::DatabaseBackend):
        (WebCore::DatabaseBackend::~DatabaseBackend):
        (WebCore::DatabaseBackend::closeDatabase):
        (WebCore::DatabaseBackend::version):
        (WebCore::DatabaseBackend::performOpenAndVerify):
        (WebCore::DatabaseBackend::scriptExecutionContext):
        (WebCore::DatabaseBackend::securityOrigin):
        (WebCore::DatabaseBackend::stringIdentifier):
        (WebCore::DatabaseBackend::displayName):
        (WebCore::DatabaseBackend::estimatedSize):
        (WebCore::DatabaseBackend::fileName):
        (WebCore::DatabaseBackend::details):
        (WebCore::DatabaseBackend::getVersionFromDatabase):
        (WebCore::DatabaseBackend::setVersionInDatabase):
        (WebCore::DatabaseBackend::setExpectedVersion):
        (WebCore::DatabaseBackend::getCachedVersion):
        (WebCore::DatabaseBackend::setCachedVersion):
        (WebCore::DatabaseBackend::getActualVersionForTransaction):
        (WebCore::DatabaseBackend::disableAuthorizer):
        (WebCore::DatabaseBackend::enableAuthorizer):
        (WebCore::DatabaseBackend::setAuthorizerReadOnly):
        (WebCore::DatabaseBackend::setAuthorizerPermissions):
        (WebCore::DatabaseBackend::lastActionChangedDatabase):
        (WebCore::DatabaseBackend::lastActionWasInsert):
        (WebCore::DatabaseBackend::resetDeletes):
        (WebCore::DatabaseBackend::hadDeletes):
        (WebCore::DatabaseBackend::resetAuthorizer):
        (WebCore::DatabaseBackend::maximumSize):
        (WebCore::DatabaseBackend::incrementalVacuumIfNeeded):
        (WebCore::DatabaseBackend::interrupt):
        (WebCore::DatabaseBackend::isInterrupted):
        (WebCore::DatabaseBackend::logErrorMessage):
        (WebCore::DatabaseBackend::reportOpenDatabaseResult):
        (WebCore::DatabaseBackend::reportChangeVersionResult):
        (WebCore::DatabaseBackend::reportStartTransactionResult):
        (WebCore::DatabaseBackend::reportCommitTransactionResult):
        (WebCore::DatabaseBackend::reportExecuteStatementResult):
        (WebCore::DatabaseBackend::reportVacuumDatabaseResult):
        * Modules/webdatabase/DatabaseBackend.h: Copied from Source/WebCore/Modules/webdatabase/AbstractDatabase.h.
        (DatabaseBackend):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::databaseChanged):
        (WebCore::DatabaseManager::addOpenDatabase):
        (WebCore::DatabaseManager::removeOpenDatabase):
        (WebCore::DatabaseManager::getMaxSizeForDatabase):
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::DatabaseSync::DatabaseSync):
        * Modules/webdatabase/DatabaseSync.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::databaseChanged):
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * Modules/webdatabase/DatabaseTracker.h:
        (WebCore):
        (DatabaseTracker):
        * Modules/webdatabase/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::markDatabase):
        * Modules/webdatabase/OriginQuotaManager.h:
        (WebCore):
        (OriginQuotaManager):
        * Modules/webdatabase/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * Modules/webdatabase/SQLTransactionClient.h:
        (WebCore):
        (SQLTransactionClient):
        * Modules/webdatabase/chromium/DatabaseObserver.h:
        (WebCore):
        (DatabaseObserver):
        * Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::NotifyDatabaseObserverOnCloseTask::create):
        (WebCore::NotifyDatabaseObserverOnCloseTask::NotifyDatabaseObserverOnCloseTask):
        (NotifyDatabaseObserverOnCloseTask):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::CloseOneDatabaseImmediatelyTask::create):
        (WebCore::DatabaseTracker::CloseOneDatabaseImmediatelyTask::CloseOneDatabaseImmediatelyTask):
        (DatabaseTracker::CloseOneDatabaseImmediatelyTask):
        (WebCore::DatabaseTracker::closeOneDatabaseImmediately):
        * Modules/webdatabase/chromium/SQLTransactionClientChromium.cpp:
        (WebCore::NotifyDatabaseChangedTask::create):
        (WebCore::NotifyDatabaseChangedTask::NotifyDatabaseChangedTask):
        (NotifyDatabaseChangedTask):
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140983.
        http://trac.webkit.org/changeset/140983
        https://bugs.webkit.org/show_bug.cgi?id=108277

        Unfortunately, this API has one last client (Requested by
        abarth on #webkit).

        * Configurations/FeatureDefines.xcconfig:
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore):
        (WebCore::Notification::create):
        * Modules/notifications/Notification.h:
        (Notification):
        (WebCore::Notification::isHTML):
        (WebCore::Notification::setHTML):
        (WebCore::Notification::url):
        (WebCore::Notification::setURL):
        * Modules/notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification):
        (NotificationCenter):
        * Modules/notifications/NotificationCenter.idl:
        * page/FeatureObserver.h:

2013-01-29  Rafael Weinstein  <rafaelw@chromium.org>

        parserAppendChild and parserInsertBefore should ensure that child nodes are in the same document
        https://bugs.webkit.org/show_bug.cgi?id=108260

        Reviewed by Eric Seidel.

        Test: fast/parser/xml-error-adopted.xml

        The check and adoption if the documents don't match is now moved into ContainerNode::parser* from HTMLConstructionSite.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::parserAppendChild):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::findFosterSite):
        (WebCore::HTMLConstructionSite::fosterParent):

2013-01-29  Shinya Kawanaka  <shinyak@chromium.org>

        [Chromium] Cannot copy text when selecting readonly (or disabled) input elements
        https://bugs.webkit.org/show_bug.cgi?id=106287

        Reviewed by Hajime Morita.

        When an input element is disabled or readonly, its inner element is not editable. So its rootEditableElement
        does not exist. In WebViewImpl::caretOrSelectionRange, if rootEditableElement does not exist, it uses
        a document element. However, the inner element and document element have a different tree scope, the selection range
        cannot be gotten correctly.

        We should use ShadowRoot instead of document so that we can stay in the same tree scope.

        * WebCore.exp.in:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::rootEditableElementOrTreeScopeRootNode): Added. Returns ShadowRoot so that we can
        stay in the same tree scope.
        (WebCore):
        * editing/FrameSelection.h:
        (FrameSelection):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::getLocationAndLengthFromRange):
        * editing/TextIterator.h:
        (TextIterator):

2013-01-29  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: The content should not overflow the <input> boundary
        https://bugs.webkit.org/show_bug.cgi?id=108069

        Reviewed by Hajime Morita.

        To avoid the overflow, we do:
        A) Specify overflow:hidden to <input>.

        However, we need to make sub-fields and buttons workable even if the
        width is smaller than the intrinsic size. So, we do:
        B) Make DateTimeEditElement shrinkable, and
        C) Make the sub-fields scrollable horizontally like input[type=text].

        To achieve B, we need to remove -webkit-date-and-time-container (D)
        because width property for <input> can shrink only the direct child
        elements.

        Tests: fast/forms/time-multiple-fields/time-multiple-fields-narrow-width-scroll.html
        and new test cases in fast/forms/date/date-appearance-basic.html.

        * css/html.css:
        (input[type="date"]):
        Change -webkit-align-items value. (D)
        Specify overflow:hidden. (A)
        (input[type="datetime"]): Ditto.
        (input[type="datetime-local"]): Ditto.
        (input[type="month"]): Ditto.
        (input[type="time"]): Ditto.
        (input[type="week"]): Ditto.
        (input::-webkit-datetime-edit):
        Add min-width:0 (B), and overflow:hidden. (C)
        Remove unnecessary white-space:pre because of white-space:nowrap below.
        (input::-webkit-datetime-edit-fields-wrapper):
        Added. This is the child of -webkit-datetime-edit, and contains
        sub-fields. (C)
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
        Remove -webkit-date-and-time-container, and append DateTimeEditElement,
        spin button, and picker indicator element to the ShadowRoot. (D)
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldApplyLocaleDirection):
        <input> for multiple fields UI should have the direction of the browser
        locale. This is a replacement of the code for dir attribute in
        updateInnerTextValue below. (D)
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue):
        Remove the code to set dir= to -webkit-date-and-time-container.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):
        Declare shouldApplyLocaleDirection. (D)
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        Calls setHasCustomCallbacks for customStyleForRenderer. (D)
        (WebCore::HTMLInputElement::customStyleForRenderer):
        Set direction to RenderStyle if shouldApplyLocaleDirection is true. This
        is a replacement of the dir setting code in
        BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue. (D)
        * html/HTMLInputElement.h:
        (HTMLInputElement): Declare customStyleForRenderer. (D)
        * html/InputType.cpp:
        (WebCore::InputType::shouldApplyLocaleDirection):
        Add default implmentation of shouldApplyLocaleDirection. (D)
        * html/InputType.h:
        (InputType): Declare shouldApplyLocaleDirection. (D)

        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitLiteral):
        Add elements to -webkit-datetime-edit-fields-wrapper element. (C)
        (WebCore::DateTimeEditElement::fieldsWrapperElement):
        A helper to get -webkit-datetime-edit-fields-wrapper element. (C)
        (WebCore::DateTimeEditElement::addField):
        Add elements to -webkit-datetime-edit-fields-wrapper element. (C)
        (WebCore::DateTimeEditElement::customStyleForRenderer):
        - Iterate over children of -webkit-datetime-edit-fields-wrapper element. (C)
        - Set width property instead of min-width. (B)
        (WebCore::DateTimeEditElement::layout):
        - Prepare -webkit-datetime-edit-fields-wrapper element. (C)
        - Handle children of -webkit-datetime-edit-fields-wrapper element. (C)
        - Need to do style recalc because child structure is changed. (C)
        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement): Declare fieldsWrapperElement. (C)

2013-01-29  Tom Sepez  <tsepez@chromium.org>

        [v8] Enable binding integrity on linux
        https://bugs.webkit.org/show_bug.cgi?id=108242

        Reviewed by Adam Barth.

        Patch is correct if existing tests pass.

        * html/TextMetrics.idl:
        Suppress check to allow link on linux.

2013-01-29  Tim Horton  <timothy_horton@apple.com>

        Don't updateTileCoverageMap() from setScrollingModeIndication if we don't need to.

        Reviewed by Simon Fraser.

        Only do the work if the tiled scrolling indicator/map is enabled.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setScrollingModeIndication):

2013-01-29  Chris Fleizach  <cfleizach@apple.com>

        AX: Add support for aria-autocomplete="list" on ARIA combobox
        https://bugs.webkit.org/show_bug.cgi?id=108228

        Reviewed by Ryosuke Niwa.

        Comboboxes behave much like textfields, and so they need
        to respond like text controls.

        Test: platform/mac/accessibility/combox-box-value.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isTextControl):
        (WebCore):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):

2013-01-29  Nico Weber  <thakis@chromium.org>

        [chromium] Do not mark translation-unit-local functions as extern "C"
        https://bugs.webkit.org/show_bug.cgi?id=108218

        Reviewed by Adam Barth.

        Requested by darin in https://bugs.webkit.org/show_bug.cgi?id=107845
        This also allows enabling -Wreturn-type-c-linkage again, but I'd like to
        wait for the next clang roll (which tweaks this warning) before undoing
        r140800 (which removed that warning).

        No behavior change.

        * bindings/v8/npruntime.cpp:

2013-01-29  Geoffrey Garen  <ggaren@apple.com>

        Removed GGC because it has been disabled for a long time
        https://bugs.webkit.org/show_bug.cgi?id=108245

        Reviewed by Filip Pizlo.

        * ForwardingHeaders/heap/CardSet.h: Removed.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-01-29  Elliott Sprehn  <esprehn@chromium.org>
        Refactor ShadowRoot exception handling
        https://bugs.webkit.org/show_bug.cgi?id=108209

        Reviewed by Dimitri Glazkov.

        Many of the exception cases for ShadowRoot are actually impossible and
        should be asserts instead. We can also move the one case of exception logic,
        for elements that don't allow author shadows into Element::createShadowRoot
        instead of having it all over the ShadowRoot and ElementShadow classes. This
        is the first step in centralizing all ShadowRoot creation inside ElementShadow.

        No new tests, covered by existing tests.

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::createShadowRoot): Be explicit about what kind of ShadowRoot you're creating.
        (WebCore::Element::ensureUserAgentShadowRoot): No more exceptions.
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::addShadowRoot): This never actually throws exceptions, remove ExceptionCode.
        * dom/ElementShadow.h:
        (ElementShadow):
        * dom/ShadowRoot.cpp:
        (WebCore::determineUsageType): Merge with Element::createShadowRoot.
        (WebCore):
        (WebCore::ShadowRoot::ShadowRoot): Moved Histogram logic here since it's actually about the constructor anyway.
        (WebCore::ShadowRoot::create): Removed overload that made the code less obvious.
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::getDecorationRootAndDecoratedRoot):
        * testing/Internals.cpp:
        (WebCore::Internals::ensureShadowRoot):
        (WebCore::Internals::createShadowRoot):

2013-01-29  Mark Lam  <mark.lam@apple.com>

        Change DatabaseContext lookup to be thread-safe.
        https://bugs.webkit.org/show_bug.cgi?id=107784.

        Reviewed by Geoffrey Garen.

        DatabaseContext will no longer be a Supplement of ScriptExecutionContext.
        Instead we will maintain a mutex guarded contextMap in the DatabaseManager
        which maps ScriptExecutionContexts to DatabaseContexts.

        Also cleaned up the shutdown mechanism of the DatabaseContext,
        DatabaseThread, and Databases when their owner ScriptExecutionContext
        destructs.

        No new tests.

        * Modules/webdatabase/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::AbstractDatabase):
        * Modules/webdatabase/AbstractDatabase.h:
        (WebCore::AbstractDatabase::databaseContext):
        (AbstractDatabase):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        * Modules/webdatabase/Database.h:
        (WebCore):
        (Database):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore):
        (WebCore::DatabaseContext::DatabaseContext):
        (WebCore::DatabaseContext::~DatabaseContext):
        (WebCore::DatabaseContext::contextDestroyed):
        (WebCore::DatabaseContext::stop):
        (WebCore::DatabaseContext::databaseThread):
        (WebCore::DatabaseContext::stopDatabases):
        * Modules/webdatabase/DatabaseContext.h:
        (DatabaseContext):
        (WebCore::DatabaseContext::scriptExecutionContext):
        (WebCore::DatabaseContext::hasOpenDatabases):
        (WebCore::DatabaseContext::stopDatabases):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::manager):
        (WebCore::DatabaseManager::DatabaseManager):
        (WebCore::DatabaseManager::getExistingDatabaseContext):
        (WebCore):
        (WebCore::DatabaseManager::getDatabaseContext):
        (WebCore::DatabaseManager::registerDatabaseContext):
        (WebCore::DatabaseManager::unregisterDatabaseContext):
        (WebCore::DatabaseManager::notifyDatabaseContextConstructed):
        (WebCore::DatabaseManager::notifyDatabaseContextDestructed):
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseManager::openDatabaseSync):
        (WebCore::DatabaseManager::hasOpenDatabases):
        (WebCore::DatabaseManager::stopDatabases):
        (WebCore::DatabaseManager::interruptAllDatabasesForContext):
        * Modules/webdatabase/DatabaseManager.h:
        (WebCore):
        (DatabaseManager):
        (WebCore::DatabaseManager::notifyDatabaseContextConstructed):
        (WebCore::DatabaseManager::notifyDatabaseContextDestructed):
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::DatabaseSync::DatabaseSync):
        * Modules/webdatabase/DatabaseSync.h:
        (WebCore):
        (DatabaseSync):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::~DatabaseThread):
        (WebCore::DatabaseThread::requestTermination):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::~ActiveDOMObject):

2013-01-29  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Make resolveContentBasedTrackSizingFunctionsForItems reuse distributeSpaceToTracks
        https://bugs.webkit.org/show_bug.cgi?id=108110

        Reviewed by Tony Chang.

        This change makes us match more closely the specification by reusing distributeSpaceToTracks inside
        resolveContentBasedTrackSizingFunctionsForItems. This also removes some existing code duplication.

        Refactoring covered by existing tests.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        Updated after distributeSpaceToTracks new arguments. Copying the tracks to a Vector<GridTrack*> is
        now done here.

        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Removed code duplication and switched to using distributeSpaceToTracks.

        (WebCore::RenderGrid::distributeSpaceToTracks):
        Refactored distributeSpaceToTracks to implement the distribution of any extra space above max breadth
        as it was required to pass the tests (required to properly handling min-content > max). Also changed
        the arguments of the function to better match the intent of the function.

        * rendering/RenderGrid.h: Updated distributeSpaceToTracks's arguments.

2013-01-29  Elliott Sprehn  <esprehn@chromium.org>

        Remove all ShadowRoots during ElementShadow destruction
        https://bugs.webkit.org/show_bug.cgi?id=108207

        Reviewed by Dimitri Glazkov.

        There's no reason to expose removeAllShadowRoots since the only legitimate
        place to call it is right as we're destroying the ElementShadow.

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::~Element): Remove call to removeAllShadowRoots()
        * dom/ElementShadow.h:
        (WebCore::ElementShadow::~ElementShadow): Call removeAllShadowRoots().
        (ElementShadow): Make removeAllShadowRoots() private.

2013-01-29  Justin Novosad  <junov@google.com>

        REGRESSION (r135628-135632): Double box shadow failure to render
        https://bugs.webkit.org/show_bug.cgi?id=107833

        Reviewed by Simon Fraser.

        Regression caused by http://trac.webkit.org/changeset/135629
        The regression was due to faulty occlusion logic that was assuming
        that drawing the background color of a render box background layer
        could be skipped when the same layer also has an opaque image attached.
        In the case where the background color is drawn for the purpose of
        rendering a box shadow, the shadow is typically not
        completely occluded by the background image because of the shadow
        blur and/or offset.  This patch fixes the problem by not culling a
        background draw if it is used to draw a box shadow.

        Test: fast/backgrounds/gradient-background-shadow.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Changing occlusion culling test to never cull background color
        draw if it is used to draw a box shadow. This is because box shadows
        can draw outside the border fill region.

2013-01-29  Ian Vollick  <vollick@chromium.org>

        Add RenderLayer::enclosingStackingContainer
        https://bugs.webkit.org/show_bug.cgi?id=108211

        Reviewed by Simon Fraser.

        No new tests, no change in functionality.

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::enclosingStackingContainer):
          This function is similar to RenderLayer::stackingContainer, but may return the
          layer itself if it's a stacking container.

2013-01-29  Patrick Gansterer  <paroga@webkit.org>

        Rename TextBreakIteratorWinCE to TextBreakIteratorWchar
        https://bugs.webkit.org/show_bug.cgi?id=108094

        Reviewed by Ryosuke Niwa.

        TextBreakIteratorWinCE does not contain any Windows CE specific code.
        Rename it to TextBreakIteratorWchar to match the name in wtf/unicode.

        * platform/text/wchar/TextBreakIteratorWchar.cpp: Renamed from Source/WebCore/platform/text/wince/TextBreakIteratorWinCE.cpp.

2013-01-29  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: A MediaStreamComponent should be able to return the MediaStreamDescriptor it belongs to
        https://bugs.webkit.org/show_bug.cgi?id=108173

        Reviewed by Adam Barth.

        To be able to return the MediaStreamDescriptor a MediaStreamComponent belongs to the "ownership"
        of the MediaStreamDescriptor needed to move from a MediaStreamTrack to the MediaStreamComponent.
        This is also better from an architectonic view as well.

        Patch covered by existing tests.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::addRemoteTrack):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::create):
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::setEnabled):
        * Modules/mediastream/MediaStreamTrack.h:
        (MediaStreamTrack):
        * Modules/mediastream/RTCStatsRequestImpl.cpp:
        (WebCore::RTCStatsRequestImpl::RTCStatsRequestImpl):
        * platform/chromium/support/WebMediaStreamComponent.cpp:
        (WebKit::WebMediaStreamComponent::stream):
        (WebKit):
        * platform/mediastream/MediaStreamComponent.h:
        (WebCore):
        (WebCore::MediaStreamComponent::create):
        (MediaStreamComponent):
        (WebCore::MediaStreamComponent::stream):
        (WebCore::MediaStreamComponent::setStream):
        (WebCore::MediaStreamComponent::MediaStreamComponent):
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):

2013-01-29  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Pass metadata in to IDBOpenDBRequest.onUpgradeNeeded/onSuccess
        https://bugs.webkit.org/show_bug.cgi?id=103920

        Reviewed by Dimitri Glazkov.

        Update IDBCallbacks::onSuccess and IDBCallbacks::onUpgradeNeeded to
        pass through a metadata parameter. While there, remove the unused
        IDBTransactionBackendInterface parameter to onUpgradeNeeded.

        As this is another step in the IDB refactor, I've simplified future cleanup
        work by making the WebKit API code still use the old API. This
        will make it possible to outright remove code on the chromium side rather
        than another three-step checkin.

        No new tests, as this is more refactoring.

        * Modules/indexeddb/IDBCallbacks.h:
        (WebCore::IDBCallbacks::onUpgradeNeeded): new method signature.
        (WebCore::IDBCallbacks::onSuccess): new method signature.
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded): use passed-in metadata.
        (WebCore::IDBOpenDBRequest::onSuccess): use passed-in metadata.
        * Modules/indexeddb/IDBOpenDBRequest.h:
        (IDBOpenDBRequest):

2013-01-29  Dirk Schulze  <dschulze@adobe.com>

        Canvas support for isPointInStroke
        https://bugs.webkit.org/show_bug.cgi?id=108185

        Reviewed by Dean Jackson.

        isPointInStroke(x,y) returns true if a point hits the stroke
        with applied stroke styles like dashArray, lineCap, lineJoin, lineWidth.
        The syntax is similar to isPointInPath, which returns true if a point hits
        the fill area of a path.
        Firefox implemented isPointInStroke originally and unprefixed it recently:

        https://bugzilla.mozilla.org/show_bug.cgi?id=803124

        Test: fast/canvas/canvas-isPointInStroke.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasStrokeStyleApplier::strokeStyle): Take dashArray and lineDashOffset into account.
        (WebCore):
        (WebCore::CanvasRenderingContext2D::isPointInStroke): The implementation of the function.
        * html/canvas/CanvasRenderingContext2D.h:
        (CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.idl: Added operation to interface.

2013-01-29  Nate Chapin  <japhet@chromium.org>

        Enable reuse of cached main resources
        https://bugs.webkit.org/show_bug.cgi?id=105667

        Reviewed by Adam Barth.

        Test: http/tests/cache/cached-main-resource.html

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::hasManifest): Returns true if the <html> element has a non-empty manifest attribute.
        (WebCore):
        * dom/Document.h:
        (Document):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache): Don't send delegate callbacks for cache hit here, since
            MainResourceLoader will take care of it.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::responseReceived): Don't try to cache loads from the application cache.
        (WebCore::MainResourceLoader::didFinishLoading): Don't try to cache loads from the application cache.
        (WebCore::MainResourceLoader::load): Ensure we create a resource load identifier for cache hits. Also,
            ensure we correctly popualate fragment identifiers in the ResourceRequest reported to DocumentLoader.
        (WebCore::MainResourceLoader::identifier):
        * loader/MainResourceLoader.h: Rename m_substituteDataLoadIdentifier to m_identifierForLoadWithoutResourceLoader
            to better describe when it is used.
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient): Synthesize redirect notifications for cache hits if necessary.
        (WebCore::CachedRawResource::willSendRequest): Note the redirects we received.
        (WebCore::CachedRawResource::canReuse): Don't reuse a resource if the redirect chain included a "Cache-control: no-store".
        * loader/cache/CachedRawResource.h:
        (CachedRawResource):
        (RedirectPair):
        (WebCore::CachedRawResource::RedirectPair::RedirectPair):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClientToSet): Don't return cached data for a main resource synchronously
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::canReuse):
        (CachedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource): Leave cahce reuse of main resources off for chromium for now.
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Permit cache reuse for main resources.
        * testing/Internals.cpp:
        (WebCore::Internals::isPreloaded):
        (WebCore):
        (WebCore::Internals::isLoadingFromMemoryCache):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-01-29  Min Qin  <qinmin@chromium.org>

        Fix a problem that deferred image decoding is enabled for multiframe images
        https://bugs.webkit.org/show_bug.cgi?id=108152

        Reviewed by Stephen White.

        Deferred image decoding should only work for single frame images now.
        However, using ImageDecoder::repetitionCount() does not capture all the cases.
        Enforce the rule using ImageDecoder::frameCount()==1.
        Fixing a failing layout test: platform/chromium/virtual/deferred/fast/images/icon-0colors.html

        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::frameBufferAtIndex):

2013-01-29  Elliott Sprehn  <esprehn@chromium.org>

        Move ElementShadow creation to ElementRareData
        https://bugs.webkit.org/show_bug.cgi?id=108195

        Reviewed by Dimitri Glazkov.

        Move the creation of ElementShadow to ElementRareData
        for better encapsulation, and get rid of ElementRareData::setShadow.

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::~Element): Use clearShadow() instead of setShadow which is removed.
        (WebCore::Element::shadow):
        (WebCore::Element::ensureShadow): Use ElementRareData::ensureShadow().
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::clearShadow): Added.
        (WebCore::ElementRareData::ensureShadow): Added.

2013-01-29  Alpha Lam  <hclam@chromium.org>

        [chromium] Unreviewed build fix.

        Revert my revert at 141033 which can cause deadlock.

        * platform/graphics/chromium/DiscardablePixelRef.cpp:
        (WebCore::DiscardablePixelRefAllocator::allocPixelRef):
        (WebCore::DiscardablePixelRef::DiscardablePixelRef):
        * platform/graphics/chromium/DiscardablePixelRef.h:
        (DiscardablePixelRef):

2013-01-29  Joshua Bell  <jsbell@chromium.org>

        [Chromium] IndexedDB: Let callers specify reason (error) for aborting transaction
        https://bugs.webkit.org/show_bug.cgi?id=107851

        Reviewed by Tony Chang.

        Internal to the back-end, callers are able to abort transactions and specify a reason
        as an IDBDatabaseError, e.g. ConstraintError. Expose this to the WebKit/chromium/public
        API so that intermediate layers can specify reasons as well, e.g. QuotaExceededError.

        Test will land in Chromium as fix for crbug.com/113118

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::abort): Added overload that takes error.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h: Ditto.
        * Modules/indexeddb/IDBDatabaseBackendInterface.h: Ditto.

2013-01-29  Victor Carbune  <vcarbune@chromium.org>

        Heap-use-after-free in WebCore::RenderTextTrackCue::layout
        https://bugs.webkit.org/show_bug.cgi?id=108197

        Reviewed by Eric Carlson.

        Test: media/track/track-cue-rendering-tree-is-removed-properly.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackRemoveCue): Ensure the display tree
        is removed when the cue is removed from the list of cues.
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::~TextTrackCue): Enfore display tree removal.

2013-01-29  Eli Fidler  <efidler@rim.com>

        On HarfbuzzNG ports, Arabic TATWEEL is not joined.
        https://bugs.webkit.org/show_bug.cgi?id=108037

        Reviewed by Tony Chang.

        The tatweel (U+0640) is being split into a separate run, because its script is USCRIPT_COMMON.
        It has script extensions for USCRIPT_ARABIC, so I think it shouldn't trigger a new run.

        Test: fast/text/international/arabic-tatweel-join.html

        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::collectHarfBuzzRuns):

2013-01-29  Martin Robinson  <mrobinson@igalia.com>

        [Freetype] Cannot use characters outside the BMP
        https://bugs.webkit.org/show_bug.cgi?id=108102

        Reviewed by Carlos Garcia Campos.

        Test: platform/gtk/fonts/non-bmp-characters.html

        Instead of never handling surrogate pairs when dealing with UChar arrays,
        abstract way the logic for this into UTF16UChar32Iterator and use it
        everywhere in Freetype. This allows the Freetype backend to render
        non-BMP characters which are always represented as surrogate pairs in
        UTF-16.

        * GNUmakefile.list.am: Added UTF16UChar32Iterator to the source list.
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::createFontConfigPatternForCharacters): Use the new iterator.
        (WebCore::FontCache::getFontDataForCharacters): Ditto.
        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        (WebCore::GlyphPage::fill): Ditto. Remove the early return when dealing
        with non-BMP data.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::containsCharacters): Use the new iterator.
        * platform/graphics/freetype/UTF16UChar32Iterator.h: Added. An iterator that
        extracts UChar32 from UTF-16 UChar arrays.

        * GNUmakefile.list.am:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::createFontConfigPatternForCharacters):
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::containsCharacters):
        * platform/graphics/freetype/UTF16UChar32Iterator.h: Added.
        (WebCore):
        (UTF16UChar32Iterator):
        (WebCore::UTF16UChar32Iterator::UTF16UChar32Iterator):
        (WebCore::UTF16UChar32Iterator::end):
        (WebCore::UTF16UChar32Iterator::next):

        * GNUmakefile.list.am:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::createFontConfigPatternForCharacters):
        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::containsCharacters):
        * platform/graphics/freetype/UTF16UChar32Iterator.h: Added.
        (WebCore):
        (UTF16UChar32Iterator):
        (WebCore::UTF16UChar32Iterator::UTF16UChar32Iterator):
        (WebCore::UTF16UChar32Iterator::end):
        (WebCore::UTF16UChar32Iterator::next):

2013-01-29  Glenn Hartmann  <hartmanng@chromium.org>

        Don't overlap test for composited scroll DIVs after scroll
        https://bugs.webkit.org/show_bug.cgi?id=107471

        Reviewed by Simon Fraser.

        We don't need to test for overlap after scroll when both
        usesCompositedScrolling and !hasOutOfFlowPositionedDescendant
        because:

        a) Since we're using composited-scrolling, the composited region
        presented by the composited-scrolling element to other non-descendant
        layers doesn't change during composited scrolling (it's always the
        entire scroll layer), and

        b) Since we have no out of flow positioned descendants, the scrolling
        descendants all move together, so their overlap with respect to each
        other cannot change.

        So no descendants nor any non-descendants can have their overlap
        affected, so it's safe to skip testing.

        No new tests (no change in behaviour).

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderLayerCompositor.h:

2013-01-29  Alexis Menard  <alexis@webkit.org>

        Implement pseudoElement attribute on transition DOM events.
        https://bugs.webkit.org/show_bug.cgi?id=107986

        Reviewed by Julien Chaffraix.

        Implement the pseudoElement attribute documented here :
        http://dev.w3.org/csswg/css3-transitions/#transition-events.
        This add a new attribute to the transition DOM event useful when
        animating pseudo elements. As they are not accessible in JS, it's
        very useful to get on which pseudo element the transition just ended.
        This patch adds the new attribute on the IDLs of DOM transition events as well
        as adding it to the C++ classes representing them. The event
        dispatching code have been patched to change the target of the event
        (we can't send the current target as it is the actual DOM
        representation of the pseudo element).

        Test: fast/css-generated-content/pseudo-transition-event.html

        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingTargetRules): Change the target of the
        event in the case of a pseudo element. We can't expose them through the
        public interface so the target is the node they belong to.
        (WebCore::EventDispatcher::ensureEventAncestors):
        (WebCore::EventDispatcher::dispatchScopedEvent):
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventDispatcher::dispatchEventPostProcess):
        * dom/EventTarget.cpp:
        (WebCore::createMatchingPrefixedEvent):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::pseudoElementNameForEvents):
        (WebCore):
        * dom/PseudoElement.h:
        * dom/TransitionEvent.cpp:
        (WebCore::TransitionEventInit::TransitionEventInit):
        (WebCore::TransitionEvent::TransitionEvent):
        (WebCore::TransitionEvent::pseudoElement):
        (WebCore):
        * dom/TransitionEvent.h:
        (TransitionEventInit):
        (WebCore::TransitionEvent::create):
        (TransitionEvent):
        * dom/TransitionEvent.idl:
        * dom/WebKitTransitionEvent.cpp:
        (WebCore::WebKitTransitionEventInit::WebKitTransitionEventInit):
        (WebCore::WebKitTransitionEvent::WebKitTransitionEvent):
        (WebCore::WebKitTransitionEvent::pseudoElement):
        (WebCore):
        * dom/WebKitTransitionEvent.h:
        (WebKitTransitionEventInit):
        (WebCore::WebKitTransitionEvent::create):
        (WebKitTransitionEvent):
        * dom/WebKitTransitionEvent.idl:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Pass
        the pseudo element name when creating the Event objects. If the element
        is not a pseudo element then the name will be empty which is what the
        spec is telling to do. If the element is a pseudo element then the name
        will be the pseudo element's name with "::" as a prefix.

2013-01-29  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Implement GCActivityCallback
        https://bugs.webkit.org/show_bug.cgi?id=103998

        Reviewed by Simon Hausmann.

        Implements the activity triggered garbage collector,
        and disables the timer based fallback.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::GCController):
        (WebCore::GCController::garbageCollectSoon):
        * bindings/js/GCController.h:
        (GCController):

2013-01-29  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix bottom span in token highlight in DTE
        https://bugs.webkit.org/show_bug.cgi?id=108194

        Reviewed by Pavel Feldman.

        Change css style for token highlight from "border" to "outline" to
        avoid border included in box dimensions.

        No new tests: no change in behaviour.

        * inspector/front-end/textEditor.css:
        (.text-editor-token-highlight):

2013-01-29  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: introduce HighlightDescriptor interface in DTE.
        https://bugs.webkit.org/show_bug.cgi?id=108161

        Reviewed by Pavel Feldman.

        Introduce new HighlightDescriptor interface and its
        RegexHighlightDescriptor implementation and use it in DTE to
        support overlay highlight.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.highlightRegex):
        (WebInspector.DefaultTextEditor.prototype.removeRegexHighlight):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.highlightRegex):
        (WebInspector.TextEditorMainPanel.prototype.removeRegexHighlight):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._measureHighlightDescriptor):
        (WebInspector.TextEditorMainPanel.HighlightDescriptor): Added.
        (WebInspector.TextEditorMainPanel.HighlightDescriptor.prototype.affectsLine):
        (WebInspector.TextEditorMainPanel.HighlightDescriptor.prototype.rangesForLine):
        (WebInspector.TextEditorMainPanel.HighlightDescriptor.prototype.cssClass):
        (WebInspector.TextEditorMainPanel.RegexHighlightDescriptor): Added.
        (WebInspector.TextEditorMainPanel.RegexHighlightDescriptor.prototype.affectsLine):
        (WebInspector.TextEditorMainPanel.RegexHighlightDescriptor.prototype.rangesForLine):
        (WebInspector.TextEditorMainPanel.RegexHighlightDescriptor.prototype.cssClass):
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype._highlight):
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype._removeHighlight):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.removeRegexHighlight):

2013-01-29  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Unified text checker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=107682

        Reviewed by Anders Carlsson.

        No new tests, covered by editing/spelling tests.

        * platform/text/TextChecking.h:
        (WebCore):
        Enabling unified text checker feature for WebKit-EFL.

2013-01-29  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Wrong indent in Styles sidebar pane
        https://bugs.webkit.org/show_bug.cgi?id=108186

        Reviewed by Alexander Pavlov.

        Added an extra selector to prevent a conflict with a rule in elementsPanel.css.

        No new tests.

        * inspector/front-end/inspector.css:
        (.pane.expanded .section .properties, .event-bar .event-properties):

2013-01-29  Florin Malita  <fmalita@chromium.org>

        [Chromium] Unreviewed gardening.

        Update bindings-tests results after http://trac.webkit.org/changeset/141034.

        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8Float64Array::createWrapper):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestActiveDOMObject::createWrapper):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestCustomNamedGetter::createWrapper):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestEventConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestEventTarget::createWrapper):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestException::createWrapper):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestInterface::createWrapper):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestMediaQueryListListener::createWrapper):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestNamedConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestNode::createWrapper):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestObj::createWrapper):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestOverloadedConstructors::createWrapper):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::checkTypeOrDieTrying):
        (WebCore::V8TestSerializedScriptValueInterface::createWrapper):

2013-01-29  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] support instrumenting canvases in iframes (backend side)
        https://bugs.webkit.org/show_bug.cgi?id=107951

        Reviewed by Pavel Feldman.

        Accept optional FrameId argument for captureFrame and startCapturing commands.
        Add event to the protocol to inform about instrumented canvas context creation.

        * inspector/Inspector.json:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::hasUninstrumentedCanvases):
        (WebCore::InspectorCanvasAgent::captureFrame):
        (WebCore::InspectorCanvasAgent::startCapturing):
        (WebCore::InspectorCanvasAgent::getTraceLog):
        (WebCore::InspectorCanvasAgent::replayTraceLog):
        (WebCore::InspectorCanvasAgent::getResourceInfo):
        (WebCore::InspectorCanvasAgent::getResourceState):
        (WebCore::InspectorCanvasAgent::wrapCanvas2DRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::wrapWebGLRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore):
        (WebCore::InspectorCanvasAgent::findFramesWithUninstrumentedCanvases):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::frameDetached):
        * inspector/InspectorCanvasAgent.h:
        (WebCore):
        (WebCore::InspectorCanvasAgent::create):
        (InspectorCanvasAgent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):

2013-01-29  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [CPU Profile] Taking profile crashes renderer.
        https://bugs.webkit.org/show_bug.cgi?id=108072

        Reviewed by Yury Semikhatsky.

        Test: inspector/profiler/cpu-profiler-agent-crash-on-start.html

        Fixed null-pointer access.

        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::start): Fixed null-pointer access.
        (WebCore::ScriptProfiler::stop): Ditto.

2013-01-29  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        REGRESSION: ChildrenAffectedBy flags lost between siblings which have child elements sharing style
        https://bugs.webkit.org/show_bug.cgi?id=105672

        Reviewed by Andreas Kling.

        Change in how childrenAffectedBy bits were stored made it easier to trigger an issue where childrenAffectedBy bits
        were not set due to sharing of styles between cousin elements.

        This patch fixes the issue by not sharing styles from children with parents who prevent sharing.

        Tests: fast/selectors/cousin-stylesharing-adjacent-selector.html
               fast/selectors/cousin-stylesharing-last-child-selector.html

        * css/StyleResolver.cpp:
        (WebCore::parentElementPreventsSharing):
        (WebCore::StyleResolver::locateCousinList):
        * dom/Element.cpp:
        (WebCore::Element::hasFlagsSetDuringStylingOfChildren):
        * dom/Element.h:
        (Element):

2013-01-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Search across all sources is broken.
        https://bugs.webkit.org/show_bug.cgi?id=108157

        Reviewed by Pavel Feldman.

        Test: http/tests/inspector/search/scripts-search-scope.html

        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchScope.prototype._sortedUISourceCodes):

2013-01-29  Mike West  <mkwst@chromium.org>

        IDBFactory::webkitGetDatabaseNames should raise DOMExceptions.
        https://bugs.webkit.org/show_bug.cgi?id=108154

        Reviewed by Jochen Eisinger.

        In order to properly support blocking third-party IndexedDB usage,
        open(), getDatabaseNames(), and deleteDatabase() should all throw
        SECURITY_ERR when used in a blocked third-party context. That's possible
        now for open() and deleteDatabase(), but getDatabaseNames() can't
        currently raise exceptions.

        This patch adjusts the IDL file and implementation. No exceptions are
        currently thrown, but that will change as soon as wkbug.com/94171 lands.

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::getDatabaseNames):
        * Modules/indexeddb/IDBFactory.h:
        (IDBFactory):
        * Modules/indexeddb/IDBFactory.idl:
            Add "raises (DOMException)" to getDatabaseNames, and adjust the
            implementation to match.
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
            Pass in an ExceptionCode when calling getDatabaseNames, and handle
            possible exceptions.

2013-01-29  Hayato Ito  <hayato@chromium.org>

        Revert an accidentally changed line of EventHander::handleMousePressEvent(PlatformMouseEvent&) in r135650.
        https://bugs.webkit.org/show_bug.cgi?id=108165

        Reviewed by Hajime Morita.

        No new tests.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):

2013-01-29  Kent Tamura  <tkent@chromium.org>

        FeatureObserver: Input types are counted unexpectedly in a page with Modernizr
        https://bugs.webkit.org/show_bug.cgi?id=108141

        Reviewed by Kentaro Hara.

        We don't want to record input type instantiation by Modernizr. Modernizr
        creates input elements with these types, append it to document.body, and
        render it with visibility:hidden. So, we record input types only when
        they are attached without visibility:hidden.

        No new tests. FeatureObserver is not testable by layout test.

        * html/InputType.cpp:
        (WebCore::InputType::create): Remove FeatureObserver::observe
        callsites. They are moved to TextInputType::attach.
        (WebCore::InputType::observeFeatureIfVisible):
        Added. A helper for attach().
        * html/InputType.h:
        (InputType): Add observeFeatureIfVisible.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::create):
        Remove a FeatureObserver::observe callsite.
        (WebCore::ColorInputType::attach):
        Calls FetureObserver through InputType::observeFeatureIfVisible.
        * html/ColorInputType.h:
        (ColorInputType): Declare attach.
        * html/DateInputType.cpp: Ditto.
        * html/DateInputType.h: Ditto.
        * html/DateTimeInputType.cpp: Ditto.
        * html/DateTimeInputType.h: Ditto.
        * html/DateTimeLocalInputType.cpp: Ditto.
        * html/DateTimeLocalInputType.h: Ditto.
        * html/MonthInputType.cpp: Ditto.
        * html/MonthInputType.h: Ditto.
        * html/RangeInputType.cpp: Ditt
        * html/RangeInputType.h: Ditto.
        * html/TimeInputType.cpp: Ditto.
        * html/TimeInputType.h: Ditto.
        * html/WeekInputType.cpp: Ditto.
        * html/WeekInputType.h: Ditto.

        * html/TextFieldInputType.h:
        (TextFieldInputType):
        Make attach protected in order that sub classes can call it.
        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::create):
        Remove a FeatureObserver::observe callsite.
        (WebCore::EmailInputType::attach): Calls FetureObserver through
        InputType::observeFeatureIfVisible after TextFieldInptuType::attach.
        * html/EmailInputType.h:
        (EmailInputType):Declare attach.
        * html/NumberInputType.cpp: Ditto.
        * html/NumberInputType.h: Ditto.
        * html/SearchInputType.cpp: Ditto.
        * html/SearchInputType.h: Ditto.
        * html/TelephoneInputType.cpp: Ditto.
        * html/TelephoneInputType.h: Ditto.
        * html/URLInputType.cpp: Ditto.
        * html/URLInputType.h: Ditto.

        * html/TextInputType.cpp:
        (WebCore::TextInputType::attach):
        Move the code for type fallback from InputType::create.
        * html/TextInputType.h:
        (TextInputType): Declare attach.

2013-01-29  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK1] Reflect recursion limit and loop checks also for list conversions.
        https://bugs.webkit.org/show_bug.cgi?id=107950

        Reviewed by Allan Sandfeld Jensen.

        No new tests, bugfix, no behavioral change.

        Make conversions from Javascript values to QLists take the maximum
        recursion depth into consideration and check for objects that were
        already visited. Otherwise, the conversion may recurse until the
        stack is full and then cause a segmentation fault.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertToList):
        (JSC::Bindings::convertValueToQVariant):

2013-01-29  Elliott Sprehn  <esprehn@chromium.org>

        Clean up interface to ElementShadow
        https://bugs.webkit.org/show_bug.cgi?id=108158

        Reviewed by Hajime Morita.

        Lots of general clean up to ElementShadow removing unused headers,
        adding a create() method that returns a PassOwnPtr, adding missing const,
        and moving short inline methods into the class definition so it's easier
        to understand what methods do what.

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::ensureShadow):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::childNeedsStyleRecalc):
        (WebCore::ElementShadow::needsStyleRecalc):
        * dom/ElementShadow.h:
        (WebCore::ElementShadow::create):
        (ElementShadow):
        (WebCore::ElementShadow::~ElementShadow):
        (WebCore::ElementShadow::youngestShadowRoot):
        (WebCore::ElementShadow::oldestShadowRoot):
        (WebCore::ElementShadow::distributor):
        (WebCore::ElementShadow::ElementShadow):
        (WebCore::ElementShadow::containingShadow):

2013-01-29  Elliott Sprehn  <esprehn@chromium.org>

        Store ShadowRootType inside the bitfield
        https://bugs.webkit.org/show_bug.cgi?id=108147

        Reviewed by Dimitri Glazkov.

        We can simplify the interface to ShadowRoot by storing the enum value of
        ShadowRootType inside the bitfield like we do in the rest of WebCore.

        No new tests, just refactoring.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::create):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::type):
        (ShadowRoot):

2013-01-29  Jochen Eisinger  <jochen@chromium.org>

        REGRESSION(r141070): Broke debug build
        https://bugs.webkit.org/show_bug.cgi?id=108159

        Unreviewed build fix.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):

2013-01-28  Adam Barth  <abarth@webkit.org>

        HTMLDocumentParser should hold the HTMLToken using an OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=107762

        Reviewed by Eric Seidel.

        Using an OwnPtr will let us detach the HTMLToken from the
        HTMLDocumentParser and send it to the BackgroundHTMLParser for further
        processing.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):
        * html/parser/CompactHTMLToken.cpp:
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        * html/parser/CompactHTMLToken.h:
        (CompactHTMLToken):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):

2013-01-28  Huang Dongsung  <luxtella@company100.net>

        [Texmap] Refactor code related to debug border and repaint count.
        https://bugs.webkit.org/show_bug.cgi?id=105787

        Reviewed by Noam Rosenthal.

        It is a follow-up patch not to change layout test results.

        The previous patch sets GraphicsLayer::m_usingTiledLayer to true when using a
        backing store. When the variable is true, dumpLayer() adds (usingTiledLayer 1),
        but most of ports don't set m_usingTiledLayer to true. So we don't use
        m_usingTiledLayer to match the test results of other ports.

        After this patch, Texture Mapper draws debug visuals for a tiled backing
        with different color from safari.

        No new tests. Debug feature, not covered in tests.

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

2013-01-28  Elliott Sprehn  <esprehn@chromium.org>

        Handle createShadowSubtree inside of ensureUserAgentShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=108116

        Reviewed by Dimitri Glazkov.

        Instead of making everyone create the UserAgentShadowRoot manually all
        over, centralize it in ensureUserAgentShadowRoot() and add a notification
        Element::didAddUserAgentShadowRoot that lets elements fill in the subtree.
        This lets us get rid of lots of code duplication.

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::ensureUserAgentShadowRoot):
        * dom/Element.h:
        (WebCore::Element::didAddUserAgentShadowRoot):
        (Element):
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSummaryElement::create):
        (WebCore::HTMLDetailsElement::create):
        (WebCore::HTMLDetailsElement::didAddUserAgentShadowRoot):
        * html/HTMLDetailsElement.h:
        (HTMLDetailsElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::create):
        (WebCore::HTMLInputElement::didAddUserAgentShadowRoot):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::willAddAuthorShadowRoot):
        (WebCore::HTMLMediaElement::createMediaControls):
        * html/HTMLMediaElement.h:
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::create):
        (WebCore::HTMLMeterElement::didAddUserAgentShadowRoot):
        * html/HTMLMeterElement.h:
        (HTMLMeterElement):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::create):
        (WebCore::HTMLProgressElement::didAddUserAgentShadowRoot):
        * html/HTMLProgressElement.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::create):
        (WebCore::HTMLSummaryElement::didAddUserAgentShadowRoot):
        * html/HTMLSummaryElement.h:
        (HTMLSummaryElement):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::create):
        (WebCore::HTMLTextAreaElement::didAddUserAgentShadowRoot):
        * html/HTMLTextAreaElement.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelMuteButtonElement::create):
        (WebCore::MediaControlVolumeSliderMuteButtonElement::create):
        (WebCore::MediaControlPlayButtonElement::create):
        (WebCore::MediaControlOverlayPlayButtonElement::create):
        (WebCore::MediaControlSeekForwardButtonElement::create):
        (WebCore::MediaControlSeekBackButtonElement::create):
        (WebCore::MediaControlRewindButtonElement::create):
        (WebCore::MediaControlReturnToRealtimeButtonElement::create):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
        (WebCore::MediaControlTimelineElement::create):
        (WebCore::MediaControlPanelVolumeSliderElement::create):
        (WebCore::MediaControlFullscreenVolumeSliderElement::create):
        (WebCore::MediaControlFullscreenButtonElement::create):
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::create):
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::create):
        * html/shadow/MediaControlsBlackBerry.cpp:
        (WebCore::MediaControlFullscreenPlayButtonElement::create):
        (WebCore::MediaControlFullscreenFullscreenButtonElement::create):
        (WebCore::MediaControlFullscreenTimelineElement::create):
        (WebCore::MediaControlAudioMuteButtonElement::create):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::create):
        * svg/SVGTRefElement.h:
        (SVGTRefElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::create):
        * svg/SVGUseElement.h:
        (SVGUseElement):

2013-01-28   Vineet Chaudhary  <rgf748@motorola.com>

        HTMLOutputElement::htmlFor should be readonly
        https://bugs.webkit.org/show_bug.cgi?id=101898

        Reviewed by Kentaro Hara.

        The spec says htmlFor should be readonly, but WebKit implements it as no-readonly.
        Spec: http://dev.w3.org/html5/spec-preview/the-output-element.html

        No new tests. Modified existing test fast/dom/HTMLOutputElement/dom-settable-token-list.html
        to work as expected.

        * GNUmakefile.list.am: Removed JSHTMLOutputElementCustom.cpp
        * Target.pri: Ditto
        * UseJSC.cmake: Ditto
        * UseV8.cmake: Removed V8HTMLOutputElementCustom.cpp
        * WebCore.gypi: Removed V8HTMLOutputElementCustom.cpp
        * WebCore.vcproj/WebCore.vcproj: Removed JSHTMLOutputElementCustom.cpp
        * WebCore.vcxproj/WebCore.vcxproj: Ditto
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto
        * WebCore.xcodeproj/project.pbxproj: Ditto
        * bindings/js/JSBindingsAllInOne.cpp: Ditto
        * bindings/js/JSHTMLOutputElementCustom.cpp: Removed.
        * bindings/v8/custom/V8HTMLOutputElementCustom.cpp: Removed.
        * html/HTMLOutputElement.idl: Made htmlFor attribute readonly.

2013-01-28  Tien-Ren Chen  <trchen@chromium.org>

        Fix disambiguation popup for new-style page scale
        https://bugs.webkit.org/show_bug.cgi?id=107391

        Reviewed by Adam Barth.

        This patch corrects various coordinate conversion for disambiguation
        popup for the new-style page scale mode.

        New unit test: WebFrameTest.DisambiguationPopupPageScale

        * page/TouchDisambiguation.cpp:
        (WebCore::findGoodTouchTargets):
        * page/TouchDisambiguation.h:
        (WebCore):

2013-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141049.
        http://trac.webkit.org/changeset/141049
        https://bugs.webkit.org/show_bug.cgi?id=108151

        Caused some indexed tests to crash. (Requested by keishi on
        #webkit).

        * Modules/indexeddb/IDBCallbacks.h:
        (WebCore::IDBCallbacks::onUpgradeNeeded):
        (WebCore::IDBCallbacks::onSuccess):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        (WebCore::IDBOpenDBRequest::onSuccess):
        * Modules/indexeddb/IDBOpenDBRequest.h:
        (IDBOpenDBRequest):

2013-01-28  Adam Barth  <abarth@webkit.org>

        Layout Test http/tests/workers/terminate-during-sync-operation.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=79013

        Reviewed by David Levin.

        We need to use an isolated copy because we're going to use it on a
        different thread.

        * Modules/webdatabase/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::AbstractDatabase):

2013-01-28  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Gesture event is not fired in ShadowDOM
        https://bugs.webkit.org/show_bug.cgi?id=107797

        Reviewed by Dimitri Glazkov.

        Gesture event (e.g. touchstart) is not fired in ShadowDOM.

        We have to run event retargetting algorithm to retarget touchTarget, however it is not implemented yet (Bug 107800).
        Until it's implemented, we use the shadow ancestor node of touchTarget in Document treescope as touchTarget
        for backward compatibility. If a touch event is fired in nested ShadowDOM, touchTarget will be always element in
        document tree, so an event listener in ShadowDOM will get a wrong touchTarget. However we prioritized
        the correctness of document tree.

        Test: fast/dom/shadow/touch-event.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Allows us to take elements in ShadowDOM.

2013-01-28  Alexandre Elias  <aelias@chromium.org>

        Make page scale shrink FrameView in applyPageScaleInCompositor mode
        https://bugs.webkit.org/show_bug.cgi?id=107424

        Reviewed by Levi Weintraub.

        If applyPageScaleFactorInCompositor is enabled (Chromium-only setting),
        instead of the entire document expanding as the user pinch zooms, the
        viewport shrinks instead. This patch applies the pageScaleFactor to
        visibleContentRect to get this behavior, and simplifies Chromium's
        resize logic to stop hiding the true viewport size from WebCore.

        I verified that the scaling makes sense for all the callers of
        visibleContentRect. The exceptions are clip-layer size,
        layout size in non-fixed-layout mode, and text autosizing, which need
        the original unscaled size. Therefore I added a new method
        unscaledVisibleContentSize() to ScrollView/FrameView.

        This patch also modifies Page::setPageScaleFactor to perform no
        invalidates or layout when applyPageScaleFactorInCompositor is true,
        and also writes pageScaleFactor into HistoryItems instead of using
        frameScaleFactor.

        Since all behavior changes are tied to applyPageScaleFactorInCompositor,
        this patch should be a no-op for non-Chromium ports.

        New unit tests in WebFrameTest.cpp.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        Use pageScaleFactor here because frameScaleFactor always returns 1
        with our setting.
        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentScaleFactor):
        (WebCore):
        * page/FrameView.h:
        (FrameView):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor): Make setPageScaleFactor stop
        invalidating/layouting as this is handled by our compositor.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize): This new method
        just returns the original visible rect without pageScaleFactor being
        applied.
        (WebCore):
        (WebCore::ScrollView::visibleContentRect): This now is divided by
        pageScaleFactor if our setting is active.
        (WebCore::ScrollView::layoutSize):
        * platform/ScrollView.h:
        (WebCore::ScrollView::visibleContentScaleFactor): Returns
        pageScaleFactor if the visible rect is scaled, 1 normally.
        (ScrollView):
        (WebCore::ScrollView::layoutWidth):
        (WebCore::ScrollView::layoutHeight):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition): Clip layer
        should use unscaled size, because it's above the root scroll layer
        on the layer tree (i.e. page scale isn't applied on it).
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processSubtree): Text autosizer should use
        unscaled size, because it cares about physical screen size.

2013-01-28  Geoffrey Garen  <ggaren@apple.com>

        Static size inference for JavaScript objects
        https://bugs.webkit.org/show_bug.cgi?id=108093

        Reviewed by Phil Pizlo.

        * ForwardingHeaders/runtime/ObjectConstructor.h: Added.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/js/JSSQLResultSetRowListCustom.cpp: Include ObjectConstructor.h because
        that's where createEmptyObject() is located now.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::deserialize): Updated for interface change.

2013-01-28  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Pass metadata in to IDBOpenDBRequest.onUpgradeNeeded/onSuccess
        https://bugs.webkit.org/show_bug.cgi?id=103920

        Reviewed by Dimitri Glazkov.

        Update IDBCallbacks::onSuccess and IDBCallbacks::onUpgradeNeeded to
        pass through a metadata parameter. While there, remove the unused
        IDBTransactionBackendInterface parameter to onUpgradeNeeded.

        As this is another step in the IDB refactor, I've simplified future cleanup
        work by making the WebKit API code still use the old API. This
        will make it possible to outright remove code on the chromium side rather
        than another three-step checkin.

        No new tests, as this is more refactoring.

        * Modules/indexeddb/IDBCallbacks.h:
        (WebCore::IDBCallbacks::onUpgradeNeeded): new method signature.
        (WebCore::IDBCallbacks::onSuccess): new method signature.
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded): use passed-in metadata.
        (WebCore::IDBOpenDBRequest::onSuccess): use passed-in metadata.
        * Modules/indexeddb/IDBOpenDBRequest.h:
        (IDBOpenDBRequest):

2013-01-28  Simon Fraser  <simon.fraser@apple.com>

        position:fixed that doesn't render any content should not force compositing
        https://bugs.webkit.org/show_bug.cgi?id=108112

        Reviewed by Beth Dakin.
        
        It's not uncommon for pages to have position:fixed elements with no content.
        When these are behind other elements, they can cause those other elements
        to become composited, using lots of backing store memory.
        
        Optimize for the case where the position:fixed element has no rendered
        content and no children by not making it composited in that case.

        Test: compositing/layer-creation/fixed-position-no-content.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasNonEmptyChildRenderers): Moved from RenderLayerBacking.cpp.
        (WebCore::hasBoxDecorations): Ditto.
        (WebCore::RenderLayer::hasBoxDecorationsOrBackground): Ditto.
        (WebCore::RenderLayer::hasVisibleBoxDecorations): Check for visibility:visible, box decorations and
        overflow controls.
        (WebCore::RenderLayer::isVisuallyNonEmpty): Returns true if this layer has some visible
        representation.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Need to call updateDescendantDependentFlags()
        to ensure that the visibility flags are up to date.
        (WebCore::RenderLayerBacking::updateDrawsContent): Call RenderLayer::hasBoxDecorationsOrBackground() now.
        (WebCore::RenderLayerBacking::paintsBoxDecorations): Call RenderLayer::hasVisibleBoxDecorations() now.
        (WebCore::RenderLayerBacking::paintsChildren): Call RenderLayer::hasNonEmptyChildRenderers().
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): Whitespace.
        (WebCore::RenderLayerBacking::containsPaintedContent): Call RenderLayer::hasBoxDecorationsOrBackground().
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage): Ditto.
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition): If the layer has no content to paint,
        or visible descendant layers, then don't make it composited.

2013-01-28  Simon Fraser  <simon.fraser@apple.com>

        Avoid doing work at 60fps for tiled layers when not necessary
        https://bugs.webkit.org/show_bug.cgi?id=108135

        Reviewed by Dean Jackson.

        When there were any tiled layers on the page, we would run a CVDisplayLink
        to cause GraphicsLayerCA to flush, in order to update tiled layer visible rects.
        This is overkill; we should only do this if the tiled layer is affected by
        an accelerated animation.
        
        Fix by tracking whether an ancestor has a running animation when committing
        GraphicsLayerCAs.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingState): Start with an empty CommitState.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): Push CommitState for
        each layer, which tracks whether an ancestor has a running transform animation.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): updateLayerAnimations() renamed.
        (WebCore::GraphicsLayerCA::updateAnimations): Renamed from updateLayerAnimations().
        (WebCore::GraphicsLayerCA::isRunningTransformAnimation): Look in the map of running
        animations for one affecting transform. This list is normally small (one item).
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::CommitState::CommitState):

2013-01-28  Simon Fraser  <simon.fraser@apple.com>

        compositing/reflections/become-simple-composited-reflection.html pixel result shows bug
        https://bugs.webkit.org/show_bug.cgi?id=107174

        Reviewed by Dean Jackson.
        
        When we have a content layer for solid color, we need to update reflection
        clones when that color changes.

        Tested by the pixel test for compositing/reflections/become-simple-composited-reflection.html.

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

2013-01-28  Tom Sepez  <tsepez@chromium.org>

        [v8] Security feature: JavaScript Bindings hardening
        https://bugs.webkit.org/show_bug.cgi?id=106608

        The patch adds a check at wrapper creation time to enuse that the
        object being wrapped is not already free, to the extent that we know
        the information about the type of the object as provided in the IDL.

        Reviewed by Adam Barth.

        Patch is correct if existing tests pass without new crashes.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):
        (GenerateToV8Converters):
        (GetNativeTypeForConversions):
        (GetGnuVTableRefForInterface):
        (GetGnuVTableNameForInterface):
        (GetGnuMangledNameForInterface):
        (GetGnuVTableOffsetForType):
        (GetWinVTableRefForInterface):
        (GetWinVTableNameForInterface):
        (GetWinMangledNameForInterface):
        (GetNamespaceForInterface):
        (GetImplementationLacksVTableForInterface):
        (GetV8SkipVTableValidationForInterface):
        Update code generation to add object validity tests under the control
        of the ENABLE_BINDING_INTEGRITY option.
        
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/DirectoryReaderSync.idl:
        * Modules/filesystem/EntryArray.idl:
        * Modules/filesystem/EntryArraySync.idl:
        * Modules/filesystem/Metadata.idl:
        * Modules/gamepad/Gamepad.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/geolocation/Geoposition.idl:
        * Modules/geolocation/PositionError.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/mediastream/RTCStatsElement.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/speech/SpeechGrammar.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognitionAlternative.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioDestinationNode.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioSourceNode.idl:
        * Modules/webaudio/WaveTable.idl:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLException.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * bindings/scripts/IDLAttributes.txt:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSValue.idl:
        * css/CSSValueList.idl:
        * css/Counter.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/RGBColor.idl:
        * css/Rect.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSMixFunctionValue.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/ClientRect.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/DOMCoreException.idl:
        * dom/DOMError.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMNamedFlowCollection.idl:
        * dom/DOMStringList.idl:
        * dom/DOMStringMap.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/MessageChannel.idl:
        * dom/MouseEvent.idl:
        * dom/MutationObserver.idl:
        * dom/MutationRecord.idl:
        * dom/NamedNodeMap.idl:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/NodeList.idl:
        * dom/Range.idl:
        * dom/RangeException.idl:
        * dom/Touch.idl:
        * dom/TouchList.idl:
        * dom/TreeWalker.idl:
        * fileapi/FileError.idl:
        * fileapi/FileException.idl:
        * fileapi/FileList.idl:
        * html/DOMFormData.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDialogElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLSpanElement.idl:
        * html/HTMLUnknownElement.idl:
        * html/ImageData.idl:
        * html/MediaError.idl:
        * html/MediaKeyError.idl:
        * html/TimeRanges.idl:
        * html/ValidityState.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/ArrayBufferView.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPattern.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLActiveInfo.idl:
        * html/canvas/WebGLShaderPrecisionFormat.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueList.idl:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorFrontendHost.idl:
        * inspector/JavaScriptCallFrame.idl:
        * page/Coordinates.idl:
        * page/Crypto.idl:
        * page/MemoryInfo.idl:
        * page/PagePopupController.idl:
        * page/PerformanceEntryList.idl:
        * page/SpeechInputResult.idl:
        * page/SpeechInputResultList.idl:
        * page/WebKitPoint.idl:
        * svg/SVGAnimatedAngle.idl:
        * svg/SVGAnimatedBoolean.idl:
        * svg/SVGAnimatedEnumeration.idl:
        * svg/SVGAnimatedInteger.idl:
        * svg/SVGAnimatedLength.idl:
        * svg/SVGAnimatedLengthList.idl:
        * svg/SVGAnimatedNumber.idl:
        * svg/SVGAnimatedNumberList.idl:
        * svg/SVGAnimatedPreserveAspectRatio.idl:
        * svg/SVGAnimatedRect.idl:
        * svg/SVGAnimatedString.idl:
        * svg/SVGAnimatedTransformList.idl:
        * svg/SVGColor.idl:
        * svg/SVGException.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathSeg.idl:
        * svg/SVGRenderingIntent.idl:
        * svg/SVGUnitTypes.idl:
        * svg/SVGZoomAndPan.idl:
        * testing/MallocStatistics.idl:
        * testing/TypeConversions.idl:
        * workers/WorkerLocation.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathException.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:
        Add exceptions to binding integrity checks to IDL.
        
2013-01-28  Alpha Lam  <hclam@chromium.org>

        [chromium] Build fix.

        Unreviewed build fix. Remove the use of SkMutex from DiscardablePixelRef.

        * platform/graphics/chromium/DiscardablePixelRef.cpp:
        (WebCore::DiscardablePixelRefAllocator::allocPixelRef):
        (WebCore::DiscardablePixelRef::DiscardablePixelRef):
        * platform/graphics/chromium/DiscardablePixelRef.h:
        (DiscardablePixelRef):

2013-01-28  Benjamin Poulain  <benjamin@webkit.org>

        String constructed from Literals should be non-empty
        https://bugs.webkit.org/show_bug.cgi?id=108103

        Reviewed by Eric Carlson.

        Strings from literal should not be constructed from empty strings. Use emptyString()
        instead.

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

2013-01-27  Kentaro Hara  <haraken@chromium.org>

        Implement CompositionEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=107919

        Reviewed by Sam Weinig.

        This patch implements a CompositionEvent constructor under
        a DOM4_EVENTS_CONSTRUCTOR flag.

        Spec: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm

        Test: fast/events/constructors/composition-event-constructor.html

        * dom/CompositionEvent.cpp:
        (WebCore::CompositionEventInit::CompositionEventInit):
        (WebCore):
        (WebCore::CompositionEvent::CompositionEvent):
        * dom/CompositionEvent.h:
        (CompositionEventInit):
        (WebCore):
        (CompositionEvent):
        (WebCore::CompositionEvent::create):
        (WebCore::CompositionEvent::data):
        * dom/CompositionEvent.idl:

2013-01-28  Pratik Solanki  <psolanki@apple.com>

        PLATFORM(IOS) should come before __MAC_OS_X_VERSION_MIN_REQUIRED
        https://bugs.webkit.org/show_bug.cgi?id=108101

        Reviewed by Benjamin Poulain.

        Since iOS does not define __MAC_OS_X_VERSION_MIN_REQUIRED, any usage of
        __MAC_OS_X_VERSION_MIN_REQUIRED should be after a PLATFORM(IOS) check.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-01-28  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Pass ICU cppflags to libWebCoreSVG.la build
        https://bugs.webkit.org/show_bug.cgi?id=108032

        Reviewed by Martin Robinson.

        Fixes a linking error with new libicu 50 on Fedora rawhide.

        * GNUmakefile.am:

2013-01-28  Min Qin  <qinmin@chromium.org>

        adding support for DiscardablePixelRef for caching lazily decoded images
        https://bugs.webkit.org/show_bug.cgi?id=106842

        Reviewed by Stephen White.

        This change allows using discardable memory in the deferred image decoding path.
        Fully decoded images are unpinned and stored in ImageDecodingStore.
        Partially decoded images are pinned and stored in ImageDecodingStore.
        Discardable memory allocation could fail. Fall back to heap allocation in that case.
        There is a separate size limit for heap entries and no limit on discardable entries.
        New tests are added to ImageDecodingStoreTests

        * WebCore.gypi:
        * platform/graphics/chromium/DiscardablePixelRef.cpp: Added.
          Added implementation of the DiscardablePixelRef object that is backed by discardable memory.
          Memory allocated to the DiscardablePixelRef can be purged when it is unlocked.
        (WebCore::DiscardablePixelRefAllocator::allocPixelRef):
        (WebCore):
        (WebCore::DiscardablePixelRef::DiscardablePixelRef):
        (WebCore::DiscardablePixelRef::~DiscardablePixelRef):
        (WebCore::DiscardablePixelRef::allocAndLockDiscardableMemory):
        (WebCore::DiscardablePixelRef::onLockPixels):
        (WebCore::DiscardablePixelRef::onUnlockPixels):
        (WebCore::DiscardablePixelRef::isDiscardable):
        * platform/graphics/chromium/DiscardablePixelRef.h: Added.
          Added class definition of the DiscardablePixelRef.
        (WebCore):
        (DiscardablePixelRefAllocator):
        (DiscardablePixelRef):
        * platform/graphics/chromium/ImageDecodingStore.cpp:
          Added new cache replacement strategy for DiscardablePixelRef.
        (WebCore::ImageDecodingStore::lockCache):
        (WebCore::ImageDecodingStore::overwriteAndLockCache):
        (WebCore::ImageDecodingStore::prune):
        (WebCore::ImageDecodingStore::insertCacheInternal):
        (WebCore::ImageDecodingStore::removeFromCacheInternal):
        * platform/graphics/chromium/ImageDecodingStore.h:
          Added isDiscardable() calls to check if a cache entry is discardable.
        (WebCore::ImageDecodingStore::CacheEntry::CacheEntry):
        (WebCore::ImageDecodingStore::CacheEntry::overwriteCachedImage):
        (WebCore::ImageDecodingStore::CacheEntry::isDiscardable):
        (CacheEntry):
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
          Added some code to pass DiscardableMemoryAllocator to the image decoder.
        (WebCore::ImageFrameGenerator::tryToScale):
        (WebCore::ImageFrameGenerator::decode):
        * platform/graphics/chromium/ImageFrameGenerator.h:
          Added a new member variable of type DiscardableMemoryAllocator.
        (ImageFrameGenerator):
        * platform/image-decoders/ImageDecoder.h:
          Added methods to pass Allocator to ImageFrame.
        (ImageFrame):
        (WebCore::ImageFrame::setMemoryAllocator):
        (WebCore::ImageFrame::allocator):
        (ImageDecoder):
        (WebCore::ImageDecoder::setMemoryAllocator):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
          Added code to allocate pixel memory using the allocator passed from the caller.
        (WebCore::ImageFrame::ImageFrame):
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::setSize):

2013-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140869.
        http://trac.webkit.org/changeset/140869
        https://bugs.webkit.org/show_bug.cgi?id=108120

        "Crashes on http://en.wikipedia.org/wiki/Wikipedia" (Requested
        by tonyg-cr on #webkit).

        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentsResized):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFixedLayoutSize):
        (WebCore::ScrollView::setUseFixedLayout):

2013-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140934, r140935, and r140937.
        http://trac.webkit.org/changeset/140934
        http://trac.webkit.org/changeset/140935
        http://trac.webkit.org/changeset/140937
        https://bugs.webkit.org/show_bug.cgi?id=108117

        Re-land some speculative rollouts - see wkbug.com/108048 for
        context (Requested by jsbell on #webkit).

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBCallbacks.h:
        (IDBCallbacks):
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        (IDBCursorBackendImpl):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::onVersionChange):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setIndexesReady):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBFactory.h:
        (WebCore):
        (IDBFactory):
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        (IDBObjectStore):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::create):
        (WebCore::IDBOpenDBRequest::IDBOpenDBRequest):
        (WebCore::IDBOpenDBRequest::onBlocked):
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        (WebCore::IDBOpenDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBOpenDBRequest.h:
        (IDBOpenDBRequest):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::IDBRequest):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):
        (WebCore::IDBRequest::taskType):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/IDBUpgradeNeededEvent.cpp: Removed.
        * Modules/indexeddb/IDBUpgradeNeededEvent.h: Removed.
        * Modules/indexeddb/IDBUpgradeNeededEvent.idl: Removed.
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        (IDBVersionChangeEvent):
        (WebCore::IDBVersionChangeEvent::oldVersion):
        (WebCore::IDBVersionChangeEvent::newVersion):
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * Modules/indexeddb/IDBVersionChangeRequest.cpp: Removed.
        * Modules/indexeddb/IDBVersionChangeRequest.h: Removed.
        * Modules/indexeddb/IDBVersionChangeRequest.idl: Removed.
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.in:
        * dom/EventTarget.h:
        (WebCore):
        * dom/EventTargetFactory.in:

2013-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Mac build fix. Add an export for a function that may be
        accessed outside of WebCore (RenderLayer::needsCompositedScrolling).

        * WebCore.exp.in:

2013-01-28  Julien Chaffraix  <jchaffraix@webkit.org>

        Crash inside RenderBlock::layoutRunsAndFloatsInRange in the widow code
        https://bugs.webkit.org/show_bug.cgi?id=108084

        Reviewed by Dean Jackson.

        This is a blind fix based on the code and Chromium's stack-traces.

        Unfortunately no new test as I couldn't get a local reproduction.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        Added a missing NULL-check: the previous 'while' finish if |lineBox|
        is NULL and we don't want to crash in this case.

2013-01-28  Tony Chang  <tony@chromium.org>

        "clang: warning: not using the clang compiler for C++ inputs" due to hard-coding of /usr/bin/clang in WebCore.gyp
        https://bugs.webkit.org/show_bug.cgi?id=108089

        Reviewed by Ojan Vafai.

        Use gcc since older versions of clang (with Xcode 3.2) warn that they are going to use gcc anyway.
        These warnings are showing up on the main Chromium waterfall too:
        http://build.chromium.org/p/chromium/builders/Mac/builds/19113/steps/compile/logs/stdio

        No new tests, this is a build change.

        * WebCore.gyp/WebCore.gyp:

2013-01-28  Elliott Sprehn  <esprehn@chromium.org>

        Move hasAuthorShadowRoot to Element
        https://bugs.webkit.org/show_bug.cgi?id=108071

        Reviewed by Dimitri Glazkov.

        Move hasAuthorShadowRoot to Element and get rid of unneccesary booleans
        in HTMLProgressElement and HTMLMeterElement. Also get rid of
        ShadowRoot::isAccessible since it obfuscates what's actually happening
        inside of Element::shadowRoot().

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::shadowRoot):
        (WebCore::Element::hasAuthorShadowRoot):
        * dom/Element.h:
        (Element):
        * dom/ShadowRoot.h:
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::HTMLMeterElement):
        * html/HTMLMeterElement.h:
        (HTMLMeterElement):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::HTMLProgressElement):
        * html/HTMLProgressElement.h:
        (HTMLProgressElement):

2013-01-28  Elliott Sprehn  <esprehn@chromium.org>

        Move ensureUserAgentShadowRoot to Element
        https://bugs.webkit.org/show_bug.cgi?id=108070

        Reviewed by Dimitri Glazkov.

        Move ensureUserAgentShadowRoot to Element where the other
        methods related to shadow roots are and get rid of the
        unnecessarily specific cast to HTMLElement.

        No new tests, just refactoring.

        * dom/Element.cpp:
        (WebCore::Element::ensureUserAgentShadowRoot): Moved from FormAssociatedElement.
        * dom/Element.h:
        (Element):
        * html/FormAssociatedElement.cpp:
        * html/FormAssociatedElement.h:
        (FormAssociatedElement):

2013-01-28  Ian Vollick  <vollick@chromium.org>

        Promote composited-scrolling layers to stacking containers.
        https://bugs.webkit.org/show_bug.cgi?id=106142

        Reviewed by Simon Fraser.

        With this patch, RenderLayers that use composited scrolling are
        treated as stacking contexts. Since isStackingContainer now depends on
        the value of m_needsCompositedScrolling, special care needed to be
        taken to ensure that the value of isStackingContainer is not used when
        updating m_needsCompositedScrolling. In particular, the code for
        rebuilding the layer lists needed to be generalized so that we could
        build the layer lists using the value of isStackingContext rather than
        isStackingContainer when building the layer lists used to determine if
        the descendants are contiguous in stacking order. Also, updating
        m_needsCompositedScrolling can now affect stacking container status
        and can therefore dirty layer lists.

        Test: compositing/overflow/composited-scrolling-creates-a-stacking-container.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder):
          Modified to use layer lists built based on isStackingContext rather
          than isStackingContainer.
        (WebCore::RenderLayer::updateNeedsCompositedScrolling):
          This function can now affect stacking container status and layer
          lists.
        (WebCore::RenderLayer::rebuildZOrderLists):
          Refactored to generalize layer list building.
        (WebCore::RenderLayer::collectLayers):
          This function can now stop at either stacking containers or
          contexts.
        (WebCore::RenderLayer::updateLayerListsIfNeeded):
          Layer lists may need to be built a 2nd time if we opt into
          composited scrolling.
        * rendering/RenderLayer.h:
        (RenderLayer):
        (WebCore::RenderLayer::isStackingContainer):
          Returns true if we use composited scrolling.

2013-01-28  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Parse @-webkit-filter
        https://bugs.webkit.org/show_bug.cgi?id=106837

        Reviewed by Dean Jackson.

        The new CSS Custom Filters syntax includes an @filter rule:
        @filter IDENT { <custom-filter-description> }

        IDENT is the filter name. For example:
        @filter my-filter { ... }

        <custom-filter-description> is a set of CSS properties, which are still under discussion in
        the CSSWG.

        This patch adds parsing and JS bindings for the prefixed at-rule. It does not add parsing
        for any of the at-rule's internal properties.

        Spec: https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#the-atfilter-rule

        Tests: css3/filters/custom/custom-filter-parsing-at-rule-invalid.html
               css3/filters/custom/custom-filter-parsing-at-rule-valid.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::wrap):
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createFilterRule):
        (WebCore::CSSParser::detectAtToken):
        * css/CSSParser.h:
        * css/CSSPropertySourceData.h:
        * css/CSSRule.h:
        * css/CSSRule.idl:
            Only contains a CSSStyleDeclaration "style" property, like the other at-rules that are
            supposed to contain properties (e.g. CSSStyleRule, CSSFontFaceRule, CSSPageRule).
            Eventually, when it's specified, we should expose the filter name as well.
            Other at-rules IDL Spec: http://www.w3.org/TR/DOM-Level-2-Style/idl-definitions.html
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::reportMemoryUsage):
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        (WebCore::StyleRuleFilter::StyleRuleFilter):
        (WebCore::StyleRuleFilter::~StyleRuleFilter):
        (WebCore::StyleRuleFilter::mutableProperties):
        (WebCore::StyleRuleFilter::setProperties):
        (WebCore::StyleRuleFilter::reportDescendantMemoryUsage):
        * css/StyleRule.h:
        (StyleRuleBase):
        (WebCore::StyleRuleBase::isFilterRule):
        (StyleRuleFilter):
        (WebCore::StyleRuleFilter::create):
        (WebCore::StyleRuleFilter::filterName):
        (WebCore::StyleRuleFilter::properties):
        (WebCore::StyleRuleFilter::copy):
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * css/WebKitCSSFilterRule.cpp: Added.
            WebKitCSSFilterRule is implemented similar to CSSFontFaceRule.
        (WebCore::WebKitCSSFilterRule::WebKitCSSFilterRule):
        (WebCore::WebKitCSSFilterRule::~WebKitCSSFilterRule):
        (WebCore::WebKitCSSFilterRule::style):
        (WebCore::WebKitCSSFilterRule::cssText):
            The CSS text implementation for WebKitCSSFilterRule is almost the same as
            CSSFontFaceRule. WebKitCSSFilterRule additionally needs to output the filter name in its
            syntax (e.g. @-webkit-filter my-filter { }).
        (WebCore::WebKitCSSFilterRule::reattach):
        (WebCore::WebKitCSSFilterRule::reportMemoryUsage):
        * css/WebKitCSSFilterRule.h: Added.
        (WebKitCSSFilterRule):
        (WebCore::WebKitCSSFilterRule::create):
        * css/WebKitCSSFilterRule.idl: Added.

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

        Add StorageStrategy member functions to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=108105

        Reviewed by Tim Horton.

        StorageStrategy::sessionStorageNamespace should be virtual, not static...

        * WebCore.exp.in:
        * storage/StorageStrategy.h:
        (StorageStrategy):

2013-01-28  Uday Kiran  <udaykiran@motorola.com>

        getComputedStyle returns "left" instead of "none" for "float" on abspos elements
        https://bugs.webkit.org/show_bug.cgi?id=105836

        Reviewed by Tony Chang.

        If 'position' has the value absolute, page or fixed, and the value of float is
        left or right, the box is absolutely positioned and the computed value of float is none.
        http://www.w3.org/TR/css3-positioning/#dis-pos-flo
        This matches behavior of Firefox 18, Opera 12 and IE9.

        Test: fast/css/position-absolute-float.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2013-01-28  Tony Gentilcore  <tonyg@chromium.org>

        Don't use threaded HTML parser for data: URLs
        https://bugs.webkit.org/show_bug.cgi?id=108096

        Reviewed by Eric Seidel.

        data: URLs are currently loaded synchronously. Using the main thread parser for them preserves this behavior.
        This fixes fast/dom/HTMLDocument/document-open-return-value.html and probably others.

        No new tests because covered by existing tests.

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

2013-01-28  Tony Gentilcore  <tonyg@chromium.org>

        Don't use the threaded HTML parser for javascript: URLs
        https://bugs.webkit.org/show_bug.cgi?id=107975

        Reviewed by Adam Barth.

        Several layout tests depend on javascript: URL iframes loading synchronously including fast/loader/javascript-url-encoding.html.
        This patch avoids using the threaded parser for those URLs so they will continue to be synchronous.

        No new tests because covered by existing tests.

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

2013-01-27  Sam Weinig  <sam@webkit.org>

        SVGPathStringSource should not up-convert 8-bit strings to UTF-16
        https://bugs.webkit.org/show_bug.cgi?id=108050

        Reviewed by Anders Carlsson.

        Should save around ~400k on Membuster3.

        * svg/SVGParserUtilities.cpp:
        (WebCore::parseNumber):
        (WebCore::genericParseArcFlag):
        (WebCore::parseArcFlag):
        * svg/SVGParserUtilities.h:
        Add LChar variants of parseNumber and parseArcFlag.

        * svg/SVGPathSource.h:
        (WebCore):
        Move forward declaration of FloatPoint here, where it belongs.

        * svg/SVGPathStringSource.cpp:
        (WebCore::parseFloatPoint):
        (WebCore::parseFloatPoint2):
        (WebCore::parseFloatPoint3):
        Add helpers for parsing float points.

        (WebCore::SVGPathStringSource::SVGPathStringSource):
        (WebCore::SVGPathStringSource::hasMoreData):
        (WebCore::SVGPathStringSource::moveToNextToken):
        (WebCore::parseSVGSegmentTypeHelper):
        (WebCore::SVGPathStringSource::parseSVGSegmentType):
        (WebCore::nextCommandHelper):
        (WebCore::SVGPathStringSource::nextCommand):
        (WebCore::SVGPathStringSource::parseMoveToSegment):
        (WebCore::SVGPathStringSource::parseLineToSegment):
        (WebCore::SVGPathStringSource::parseLineToHorizontalSegment):
        (WebCore::SVGPathStringSource::parseLineToVerticalSegment):
        (WebCore::SVGPathStringSource::parseCurveToCubicSegment):
        (WebCore::SVGPathStringSource::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathStringSource::parseCurveToQuadraticSegment):
        (WebCore::SVGPathStringSource::parseCurveToQuadraticSmoothSegment):
        (WebCore::parseArcToSegmentHelper):
        (WebCore::SVGPathStringSource::parseArcToSegment):
        * svg/SVGPathStringSource.h:
        (SVGPathStringSource):
        Make 8-bit aware.

2013-01-28  Simon Fraser  <simon.fraser@apple.com>

        Repaint issues in background tabs after r138858
        https://bugs.webkit.org/show_bug.cgi?id=108092
        <rdar://problem/13076430>

        Reviewed by Tim Horton.

        In r138858, we unparented all tiles in the tile caches of background tabs.
        That broke repaints in background tabs; when bringing that tab back to the
        foreground, we would call -setNeedsDisplayInRect:, and then reparent the tiles
        on a zero-delay timer. Those repaints would then be flipped (possibly because
        CA can't look up the layer tree to check for flipped geometry).
        
        Fix by revalidating tiles (which reparents the tiles) at the time we're told
        we're moving into the window, which happens before repaints are flushed.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setIsInWindow):

2013-01-28  Adam Barth  <abarth@webkit.org>

        Remove webkitNotifications.createHTMLNotification
        https://bugs.webkit.org/show_bug.cgi?id=107598

        Reviewed by Benjamin Poulain.

        As discussed in http://lists.webkit.org/pipermail/webkit-dev/2012-February/019354.html,
        we've been slowly deprecating HTML notificiations for about a year.
        FeatureObserver says that HTML notifications are used by 0.0008% of web
        pages, which means we should be able to remove them without causing too
        much trouble.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/notifications/Notification.cpp:
        (WebCore):
        (WebCore::Notification::Notification):
        * Modules/notifications/Notification.h:
        (Notification):
        * Modules/notifications/NotificationCenter.h:
        (NotificationCenter):
        * Modules/notifications/NotificationCenter.idl:

2013-01-28  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions] Refactor ExclusionShapeInsideInfo to more general ExclusionShapeInfo
        https://bugs.webkit.org/show_bug.cgi?id=100766

        Reviewed by Dirk Schulze.

        Refactoring, covered by existing tests.

        Factoring out code common to ExclusionShapeInsideInfo and ExclusionShapeOutsideInfo
        into common classes in ExclusionShapeInfo.h. Since the ExclusionShapeInsideInfo and
        ExclusionShapeOutsideInfo share almost all of their code, save the RenderObject type
        they work with and the specific shapeInside/Outside methods they call on RenderStyle
        and ExclusionShape, the code has been templated. The code responsible for maintaining
        global maps has also been factored out into a MappedInfo class.

        * CMakeLists.txt: Adding ExclusionShapeInfo files.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/ExclusionShapeInfo.cpp: Added.
        (WebCore::::computedShape): Determine the shape based on the current logical
        dimensions. Call this method rather than accessing m_shape directly.
        * rendering/ExclusionShapeInfo.h: Added.
        (MappedInfo): Helper class that maintains a global info map.
        (WebCore::MappedInfo::ensureInfo): Look up the info for a key and add it if not present.
        (WebCore::MappedInfo::removeInfo): Remove the info associated with a key.
        (WebCore::MappedInfo::info): Look up the info associated with a key.
        (WebCore::MappedInfo::infoMap): The map used to store key/info pairs.
        (ExclusionShapeInfo): A common parent class for ExclusionShapeInside/OutsideInfos.
        The methods were factored out of the code common to ExclusionShapeInside/OutsideInfo.
        (WebCore::ExclusionShapeInfo::~ExclusionShapeInfo): Destructor.
        (WebCore::ExclusionShapeInfo::setShapeSize): Sets the shape's logical size.
        (WebCore::ExclusionShapeInfo::shapeLogicalTop/Bottom/Left/Right/Width/Height):
        Returns the shape's logical dimensions.
        (WebCore::ExclusionShapeInfo::dirtyShapeSize): Mark the shape for recomputation.
        (WebCore::ExclusionShapeInfo::owner): The renderer to which this info belongs.
        (WebCore::ExclusionShapeInfo::ExclusionShapeInfo): Constructor.
        (WebCore::ExclusionShapeInfo::floatLogicalTopToLayoutUnit/floatLogicalBottomToLayoutUnit):
        Helper methods that round float units from ExclusionShapes to LayoutUnits for layout.
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::computeSegmentsForLine): Modified to use
        computedShape() rather than m_shape.
        (WebCore::ExclusionShapeInsideInfo::adjustLogicalLineTop): Ditto.
        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::createInfo): Renamed to match MappedInfo.
        (WebCore::ExclusionShapeInsideInfo::isEnabledFor): Renamed to match shorter naming.
        (WebCore::ExclusionShapeInsideInfo::lineOverlapsShapeBounds): Modified to use
        computedShape().
        * rendering/ExclusionShapeOutsideInfo.cpp:
        (WebCore::ExclusionShapeOutsideInfo::isEnabledFor): Renamed to match shorter naming.
        * rendering/ExclusionShapeOutsideInfo.h:
        (WebCore::ExclusionShapeOutsideInfo::createInfo): Renamed to match MappedInfo.
        (WebCore::ExclusionShapeOutsideInfo::ExclusionShapeOutsideInfo): Constructor.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed): Use shortened MappedInfo names for looking
        up infos.
        (WebCore::RenderBlock::exclusionShapeInsideInfo): Ditto.
        (WebCore::RenderBlock::updateExclusionShapeInsideInfoAfterStyleChange): Ditto.
        (WebCore::RenderBlock::computeExclusionShapeSize): Ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed): Ditto.
        (WebCore::RenderBox::updateExclusionShapeOutsideInfoAfterStyleChange): Ditto.
        * rendering/RenderBox.h:
        (WebCore):
        (WebCore::RenderBox::exclusionShapeOutsideInfo): Ditto.

2013-01-28  Stephen Chenney  <schenney@chromium.org>

        SVGViewSpec fails when corresponding element has been removed
        https://bugs.webkit.org/show_bug.cgi?id=106957

        Reviewed by Dirk Schulze.

        When JS holds an SVGViewSpec object while deleting the object that
        defines the spec (an SVGSVGElement, or one of a few others) the
        pointer to the target is cleared in the SVGViewSpec but the methods
        that serve JS queries do not check and try to access the now null
        target. This patch fixes the prooblem, returning null when the
        corresponding object has been deleted.

        Also removing SVGViewSpec::setPreserveAspectRatioString, which is no
        longer used by any callers.

        Test: svg/dom/SVGViewSpec-invalid-ref-crash.html

        * svg/SVGViewSpec.cpp:
        (WebCore):
        (WebCore::SVGViewSpec::viewTarget): Check for null target and return null.
        (WebCore::SVGViewSpec::transform): Check for null target and return null..
        (WebCore::SVGViewSpec::viewBoxAnimated): Check for null target and return null.
        (WebCore::SVGViewSpec::preserveAspectRatioAnimated): Check for null target and return null.
        (WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper): ASSERT non-null target.
        (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper): ASSERT non-null target.
        (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper): ASSERT non-null target.
        * svg/SVGViewSpec.h:
        (SVGViewSpec): Move some methods out of the header and into the implementation file.

        * svg/SVGViewSpec.cpp:
        (WebCore):
        (WebCore::SVGViewSpec::transform):
        (WebCore::SVGViewSpec::viewBoxAnimated):
        (WebCore::SVGViewSpec::preserveAspectRatioAnimated):
        (WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper):
        (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper):
        (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper):
        * svg/SVGViewSpec.h:
        (SVGViewSpec):

2013-01-28  James Craig  <james@cookiecrook.com>

        HTML5 promotes DL from specific 'definition list' to superset 'description list'; accessibility strings and accessors should be updated to match.
        https://bugs.webkit.org/show_bug.cgi?id=107650

        Reviewed by Chris Fleizach.

        Updating accessibility strings and accessors for DL/DT/DD; new one for [role="definition"] (previously it reused the role/desc for DD).

        Test: platform/mac/accessibility/definition-list-term.html:
        Test: accessibility/lists.html

        * English.lproj/Localizable.strings:
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::isDescriptionList):
        * accessibility/AccessibilityList.h:
        (AccessibilityList):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::createARIARoleMap):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXDefinitionText):
        (WebCore::AXDescriptionListTermText):
        (WebCore):
        (WebCore::AXDescriptionListDetailText):
        * platform/LocalizedStrings.h:
        (WebCore):
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        (WebCore::AXDefinitionText):
        (WebCore::AXDescriptionListDetailText):
        (WebCore):
        (WebCore::AXDescriptionListTermText):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXDefinitionText):
        (WebCore):
        (WebCore::AXDescriptionListTermText):
        (WebCore::AXDescriptionListDetailText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXDefinitionText):
        (WebCore):
        (WebCore::AXDescriptionListTermText):
        (WebCore::AXDescriptionListDetailText):
        * platform/qt/LocalizedStringsQt.cpp:
        (WebCore::AXDefinitionText):
        (WebCore::AXDescriptionListTermText):
        (WebCore):
        (WebCore::AXDescriptionListDetailText):

2013-01-28  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Inherit SidebarPane from View.
        https://bugs.webkit.org/show_bug.cgi?id=108075

        Reviewed by Pavel Feldman.

        Inherited WebInspector.SidebarPane from WebInspector.View to streamlines the code and
        simplify further enhancements to sidebar panes. Got rid of obsolete onattach calls.

        No new tests.

        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditResultView):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.wasShown):
        (WebInspector.ElementsPanel.prototype.willHide):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onCreateSidebarPane):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.wasShown):
        * inspector/front-end/SidebarPane.js:
        (WebInspector.SidebarPane):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane.prototype._refreshExpressionsIfNeeded):

2013-01-28  Martin Robinson  <mrobinson@igalia.com>

        [Freetype] Synthetic bold not applied to fallback fonts properly
        https://bugs.webkit.org/show_bug.cgi?id=107733

        Reviewed by Gustavo Noronha Silva.

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

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): When we detect a situation in which
        we are a bold font, but the Fontconfig pattern does not describe the font as
        bold, we should activate synthetic bolding.

2013-01-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Search all sources should not search across service projects.
        https://bugs.webkit.org/show_bug.cgi?id=108068

        Reviewed by Pavel Feldman.

        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchScope):
        (WebInspector.ScriptsSearchScope.prototype._sortedUISourceCodes):

2013-01-28  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: SourceURL and SourceMappingURL together in evalled code
        https://bugs.webkit.org/show_bug.cgi?id=107939

        Reviewed by Vsevolod Vlasov.

        Resolve map's sources URLs wrt script URL in case sourceMap is defined as data:.

        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.loadSourceMapForScript):
        * inspector/front-end/ParsedURL.js:
        (WebInspector.ParsedURL.completeURL):
        * inspector/front-end/SourceMap.js:
        (WebInspector.SourceMap.prototype._parseMap):

2013-01-28  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] refactoring in CanvasAgent to reduce code dups
        https://bugs.webkit.org/show_bug.cgi?id=108064

        Reviewed by Pavel Feldman.

        Introduce private methods injectedScriptCanvasModule() in InspectorCanvasAgent to reduce much of code duplication.
        Drive-by: in InspectorPageAgent.assertFrame convert "String" argument to "const String&".

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::dropTraceLog):
        (WebCore::InspectorCanvasAgent::captureFrame):
        (WebCore::InspectorCanvasAgent::startCapturing):
        (WebCore::InspectorCanvasAgent::stopCapturing):
        (WebCore::InspectorCanvasAgent::getTraceLog):
        (WebCore::InspectorCanvasAgent::replayTraceLog):
        (WebCore::InspectorCanvasAgent::getResourceInfo):
        (WebCore::InspectorCanvasAgent::getResourceState):
        (WebCore::InspectorCanvasAgent::wrapCanvas2DRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::wrapWebGLRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::injectedScriptCanvasModule):
        (WebCore):
        (WebCore::InspectorCanvasAgent::findFramesWithUninstrumentedCanvases):
        * inspector/InspectorCanvasAgent.h:
        (InspectorCanvasAgent):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::assertFrame):
        (WebCore::InspectorPageAgent::assertDocumentLoader):
        * inspector/InspectorPageAgent.h:
        (InspectorPageAgent):

2013-01-28  Kihong Kwon  <kihong.kwon@samsung.com>

        Replace the type of Proximity's supplementName for char*
        https://bugs.webkit.org/show_bug.cgi?id=108049

        Reviewed by Benjamin Poulain.

        There are some changes for supplementName by Bug 107535.
        It makes build break when PROXIMITY_EVENT feature is enabled.
        Therefore ProximityController need to change the type of supplementName for char* also.

        No new tests. Functionality is not changed.

        * Modules/proximity/DeviceProximityController.cpp:
        (WebCore::DeviceProximityController::supplementName):
        * Modules/proximity/DeviceProximityController.h:
        (DeviceProximityController):

2013-01-28  Keishi Hattori  <keishi@webkit.org>

        [REGRESSION] Calendar Picker focus ring is gone
        https://bugs.webkit.org/show_bug.cgi?id=108055

        Reviewed by Kent Tamura.

        The focus ring wasn't visible because -webkit-focus-ring-color value
        only works for outline property in strict mode. Using fixed color
        instead.

        No new tests. Can't reproduce in layout test because mock popup writes a
        script tag in front of the doctype.

        * Resources/pagepopups/chromium/calendarPickerChromium.css:
        (.days-area-container:focus):
        * Resources/pagepopups/chromium/pickerCommonChromium.css:
        (:enabled:focus:-webkit-any(button, input[type='button'])):

2013-01-25  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: remove unused isElement and similar methods from HeapProfiler
        https://bugs.webkit.org/show_bug.cgi?id=107940

        Reviewed by Vsevolod Vlasov.

        - Removed some unused methods.
        - Moved JS specific edge filters to JSHeapSnapshot.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshot.prototype.createEdgesProviderForTest):
        (WebInspector.HeapSnapshot.prototype.retainingEdgesFilter):
        (WebInspector.HeapSnapshot.prototype.containmentEdgesFilter):
        (WebInspector.HeapSnapshot.prototype.createRetainingEdgesProvider):
        (WebInspector.HeapSnapshot.prototype.classNodesFilter):
        (WebInspector.HeapSnapshot.prototype.createNodesProviderForClass):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createRetainingEdgesProvider):
        * inspector/front-end/JSHeapSnapshot.js:
        (WebInspector.JSHeapSnapshot.prototype.classNodesFilter):
        (WebInspector.JSHeapSnapshot.prototype._markDetachedDOMTreeNodes):
        * inspector/front-end/NativeHeapSnapshot.js:

2013-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140554.
        http://trac.webkit.org/changeset/140554
        https://bugs.webkit.org/show_bug.cgi?id=108057

        Caused tables/table-section-overflow-clip-crash.html and
        bug2479-5.html to crash. (Requested by keishi on #webkit).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::minPreferredLogicalWidth):
        (WebCore::RenderBox::maxPreferredLogicalWidth):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::computePreferredLogicalWidths):

2013-01-24  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: each node in a detached DOM tree is shown in its own "detached DOM tree" entry in heap profiler
        https://bugs.webkit.org/show_bug.cgi?id=107819

        Reviewed by Adam Barth.

        Provide single RetainedDOMInfo for each group of DOM Node wrappers reported to GC.
        Otherwise we have unequal RetainedDOMInfo groups for each wrapped node.

        * bindings/v8/V8GCController.cpp:
        (WebCore::ImplicitConnection::ImplicitConnection):
        (WebCore::ImplicitConnection::retainedObjectInfo):
        (ImplicitConnection):
        (WebCore::WrapperGrouper::addObjectToGroup):
        (WrapperGrouper):
        (WebCore::WrapperGrouper::addNodeToGroup):
        (WebCore::WrapperGrouper::apply):
        (WebCore::V8GCController::opaqueRootForGC):
        * bindings/v8/V8GCController.h:
        (V8GCController):

2013-01-27  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] RenderFlowThread should keep a count of auto height regions
        https://bugs.webkit.org/show_bug.cgi?id=105185

        Reviewed by Julien Chaffraix.

        Keep the count of auto height regions on the flow thread instead of flow thread controller.
        This way, we can streamline the operations associated with the two-pass layout only to those
        flow threads that have auto height regions associated.
        The flow thread controller will keep a count of flow thread with auto height regions instead.
        This is a performance refactoring without an expected change in behavior, therefore no new tests were added.

        * rendering/FlowThreadController.cpp: Keep a count of flow threads with auto logical height regions.
        (WebCore::FlowThreadController::FlowThreadController):
        (WebCore::FlowThreadController::layoutRenderNamedFlowThreads): Check the count of auto height regions for all the flow threads.
        (WebCore::FlowThreadController::isAutoLogicalHeightRegionsCountConsistent):
        Make sure that we call these methods only when we have auto logical height regions.
        (WebCore::FlowThreadController::resetRegionsOverrideLogicalContentHeight):
        (WebCore::FlowThreadController::markAutoLogicalHeightRegionsForLayout):
        * rendering/FlowThreadController.h:
        (WebCore::FlowThreadController::hasFlowThreadsWithAutoLogicalHeightRegions):
        (WebCore::FlowThreadController::incrementFlowThreadsWithAutoLogicalHeightRegions):
        (WebCore::FlowThreadController::decrementFlowThreadsWithAutoLogicalHeightRegions):
        * rendering/RenderFlowThread.cpp: Keep a count of auto logical height regions.
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::resetRegionsOverrideLogicalContentHeight): Iterate the region chain only if the region chain has auto height regions.
        (WebCore::RenderFlowThread::initializeRegionsOverrideLogicalContentHeight): Ditto.
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout): Ditto.
        (WebCore::RenderFlowThread::incrementAutoLogicalHeightRegions):
        (WebCore::RenderFlowThread::decrementAutoLogicalHeightRegions):
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.cpp: Add increment/decrementAutoLogicalHeightCount to increase/decrease
        the counter inside the flow thread and use them throughout the code as needed.
        (WebCore::RenderRegion::incrementAutoLogicalHeightCount):
        (WebCore::RenderRegion::decrementAutoLogicalHeightCount):
        (WebCore::RenderRegion::updateRegionHasAutoLogicalHeightFlag):
        (WebCore::RenderRegion::attachRegion):
        (WebCore::RenderRegion::detachRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::checkTwoPassLayoutForAutoHeightRegions): Use the count of flow threads with auto height regions
        instead of the count of auto height regions when deciding whether we should attempt the 2 pass layout for auto height regions.

2013-01-27  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow DOM] Selecting a node to another node in ShadowDOM fires 'click' event unexpectedly
        https://bugs.webkit.org/show_bug.cgi?id=107233

        Reviewed by Dimitri Glazkov.

        When selecting from a node to another node in ShadowDOM, 'click' event is unexpectedly fired.

        The root cause of the bug is using shadow ancestor nodes for checking the node mouse is pressed on
        and the node mouse is released on is the same. This was introduced to fire a click event for a slider
        in <input> or etc.

        However, we don't need to check shadow ancestor if we're in Author ShadowDOM.

        Test: fast/dom/shadow/selecting-anchor.html

        * page/EventHandler.cpp:
        (WebCore::mouseIsReleasedOnPressedElement):
        (WebCore):
        (WebCore::EventHandler::handleMouseReleaseEvent):

2013-01-27  Kentaro Hara  <haraken@chromium.org>

        An [ActiveDOMObject] IDL attribute should be inherited
        https://bugs.webkit.org/show_bug.cgi?id=107877

        Reviewed by Adam Barth.

        Now we support IDL attribute inheritance. We can remove
        [ActiveDOMObject] from subclasses.

        No tests. No change in behavior.

        * Modules/indexeddb/IDBOpenDBRequest.idl:
        * Modules/webaudio/OfflineAudioContext.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * workers/SharedWorker.idl:
        * workers/Worker.idl:

2013-01-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140602.
        http://trac.webkit.org/changeset/140602
        https://bugs.webkit.org/show_bug.cgi?id=108045

        Caused 8 indexed tests to crash. (Requested by keishi on
        #webkit).

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBCallbacks.h:
        (WebCore::IDBCallbacks::onBlocked):
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBDatabase.h:
        (WebCore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBFactory.h:
        (WebCore):
        (IDBFactory):
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::create):
        (WebCore::IDBOpenDBRequest::IDBOpenDBRequest):
        (WebCore::IDBOpenDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBOpenDBRequest.h:
        (IDBOpenDBRequest):
        * Modules/indexeddb/IDBVersionChangeRequest.cpp: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.
        (WebCore):
        (WebCore::IDBVersionChangeRequest::create):
        (WebCore::IDBVersionChangeRequest::IDBVersionChangeRequest):
        (WebCore::IDBVersionChangeRequest::~IDBVersionChangeRequest):
        (WebCore::IDBVersionChangeRequest::interfaceName):
        (WebCore::IDBVersionChangeRequest::onBlocked):
        * Modules/indexeddb/IDBVersionChangeRequest.h: Copied from Source/WebCore/Modules/indexeddb/IDBFactory.idl.
        (WebCore):
        (IDBVersionChangeRequest):
        * Modules/indexeddb/IDBVersionChangeRequest.idl: Copied from Source/WebCore/Modules/indexeddb/IDBFactory.idl.
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventTarget.h:
        (WebCore):
        * dom/EventTargetFactory.in:

2013-01-27  Shinya Kawanaka  <shinyak@chromium.org>

        Disabled input/textarea doesn't trigger selection change
        https://bugs.webkit.org/show_bug.cgi?id=85244

        Reviewed by Ryosuke Niwa.

        Only rootEditableNode is there in <input> or <textarea>, 'select' event is fired.
        Since readonly or disabled input/textarea element does not have editable element,
        'select' event was not fired.

        We don't need the check.

        Test: fast/forms/input-readonly-select.html

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

2013-01-27  Keishi Hattori  <keishi@webkit.org>

        Unreviewed, rolling out r140850.
        http://trac.webkit.org/changeset/140850
        https://bugs.webkit.org/show_bug.cgi?id=107960

        r14602 caused 8 indexed tests to crash.

        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        (IDBCursorBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setIndexesReady):
        (WebCore::OpenCursorOperation::perform):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        (IDBObjectStore):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::IDBOpenDBRequest):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::IDBRequest):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):
        (WebCore::IDBRequest::taskType):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        (IDBTransactionBackendInterface):

2013-01-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140741.
        http://trac.webkit.org/changeset/140741
        https://bugs.webkit.org/show_bug.cgi?id=108044

        Caused 8 indexed tests to fail on Mac and Win. (Requested by
        keishi on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::onVersionChange):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onBlocked):
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBUpgradeNeededEvent.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.cpp.
        (WebCore):
        (WebCore::IDBUpgradeNeededEvent::create):
        (WebCore::IDBUpgradeNeededEvent::IDBUpgradeNeededEvent):
        (WebCore::IDBUpgradeNeededEvent::~IDBUpgradeNeededEvent):
        (WebCore::IDBUpgradeNeededEvent::oldVersion):
        (WebCore::IDBUpgradeNeededEvent::newVersion):
        (WebCore::IDBUpgradeNeededEvent::interfaceName):
        * Modules/indexeddb/IDBUpgradeNeededEvent.h: Copied from Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.h.
        (WebCore):
        (IDBUpgradeNeededEvent):
        * Modules/indexeddb/IDBUpgradeNeededEvent.idl: Copied from Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.idl.
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        (WebCore::IDBVersionChangeEvent::version):
        (WebCore):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        (WebCore):
        (IDBVersionChangeEvent):
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * WebCore.gypi:
        * dom/EventNames.in:

2013-01-27  Matt Falkenhagen  <falken@chromium.org>

        Elements must be reattached when inserted/removed from top layer
        https://bugs.webkit.org/show_bug.cgi?id=105489

        Relanding r139402 as the apparent perf regression has been explained as not real (bug 106726).

        Reviewed by Julien Chaffraix.

        Ensure a reattach occurs when an element is inserted/removed from top layer, so its renderer can be inserted correctly:
        as a child of RenderView in top layer sibling order if it's in the top layer, and in the usual place otherwise.

        We previously relied on style recalc to catch when an element is inserted/removed from the top layer, because it
        only happens on dialog.show/close which toggle display: none. But that is incorrect because, for example, close()
        followed immediately by show() results in no style change.

        Tests: fast/dom/HTMLDialogElement/removed-element-is-removed-from-top-layer.html
               fast/dom/HTMLDialogElement/top-layer-stacking-correct-order-remove-readd.html

        * dom/Element.cpp:
        (WebCore::Element::removedFrom): Call Document::removeFromTopLayer to let the element be removed from the top layer vector.
        removeFromTopLayer calls Element::setIsInTopLayer(false) itself if needed.
        (WebCore::Element::setIsInTopLayer): Ensure a reattach occurs if the element is already attached.

2013-01-27  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Fixing atomicIncrement implementation for Windows by dropping support before XP SP2.
        https://bugs.webkit.org/show_bug.cgi?id=106740

        Reviewed by Benjamin Poulain.

        * WebCorePrefix.h:
        * config.h:

2013-01-27  Jochen Eisinger  <jochen@chromium.org>

        Check notification permissions in the show() method
        https://bugs.webkit.org/show_bug.cgi?id=108009

        Reviewed by Adam Barth.

        Tests: fast/notifications/notifications-constructor-with-permission.html
               fast/notifications/notifications-constructor-without-permission.html

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::show):
        (WebCore::Notification::taskTimerFired):

2013-01-26  Tony Chang  <tony@chromium.org>

        [chromium] Don't use goma to preprocess bindings idl files
        https://bugs.webkit.org/show_bug.cgi?id=107984

        Reviewed by Adam Barth.

        On Linux and Mac, use a local gcc or clang to preprocess the bindings idl files.
        On my machine, this drops the bindings generation from 137s to 24s when
        using goma and -j400.

        No new tests, this is a build change.

        * WebCore.gyp/WebCore.gyp: Force the use of the local gcc or clang for preprocessing.

2013-01-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140880.
        http://trac.webkit.org/changeset/140880
        https://bugs.webkit.org/show_bug.cgi?id=108023

        Caused mathml/presentation and tests to crash and fail
        (Requested by keishi on #webkit).

        * mathml/MathMLTextElement.cpp:
        * mathml/MathMLTextElement.h:
        (MathMLTextElement):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::computePreferredLogicalWidths):
        (WebCore):
        (WebCore::RenderMathMLBlock::computeChildrenPreferredLogicalHeights):
        (WebCore::RenderMathMLBlock::preferredLogicalHeightAfterSizing):
        * rendering/mathml/RenderMathMLBlock.h:
        (RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::isPreferredLogicalHeightDirty):
        (WebCore::RenderMathMLBlock::preferredLogicalHeight):
        (WebCore::RenderMathMLBlock::setPreferredLogicalHeight):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::styleDidChange):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        (WebCore):
        (WebCore::RenderMathMLOperator::glyphHeightForCharacter):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::createGlyph):
        (WebCore::RenderMathMLOperator::firstLineBoxBaseline):
        * rendering/mathml/RenderMathMLOperator.h:
        (RenderMathMLOperator):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::index):
        (WebCore::RenderMathMLRoot::computePreferredLogicalWidths):
        (WebCore):
        (WebCore::RenderMathMLRoot::layout):
        * rendering/mathml/RenderMathMLRoot.h:
        (RenderMathMLRoot):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::computePreferredLogicalWidths):
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLRow.h:
        (RenderMathMLRow):

2013-01-26  Alexey Proskuryakov  <ap@apple.com>

        Remove code for handling NetworkProcess authentication challenges in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=108003

        Reviewed by Sam Weinig.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        Once again, there can be no authentication without an in-process network request.

        * WebCore.exp.in:
        * platform/network/AuthenticationChallengeBase.cpp:
        (WebCore::AuthenticationChallengeBase::AuthenticationChallengeBase):
        * platform/network/AuthenticationChallengeBase.h:
        (AuthenticationChallengeBase):
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/cf/AuthenticationChallenge.h:
        (AuthenticationChallenge):
        * platform/network/curl/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/qt/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/soup/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/win/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        Removed everything related to AuthenticationChallengeBase::m_identifier.
        The identifier is now tracked for IPC only, which is the right thing, because
        nothing can guarantee identifier uniqueness across processes.

2013-01-26  Laszlo Gombos  <l.gombos@samsung.com>

        Fix the test for CHANNEL_MESSAGING in idl files
        https://bugs.webkit.org/show_bug.cgi?id=108006

        Reviewed by Alexey Proskuryakov.

        No new tests, this is a build fix.

        * workers/WorkerContext.idl: Make sure ENABLE_CHANNEL_MESSAGING is
        defined before using it to be consitent with other guards inside idl
        files.

2013-01-26  Tim Volodine  <timvolodine@chromium.org>

        Text Autosizing: simplify and clean-up preOrderTraversal skipping containers
        https://bugs.webkit.org/show_bug.cgi?id=107446

        Reviewed by Julien Chaffraix.

        Simplify nextInPreOrderSkippingDescendantsOfContainers implementation
        using RenderObject tree traversal methods.

        No new tests because functionality is unchanged.

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::nextInPreOrderSkippingDescendantsOfContainers):

2013-01-26  Dan Carney  <dcarney@google.com>

        [v8] prepare SerializedScriptValue for transition to Latin-1
        https://bugs.webkit.org/show_bug.cgi?id=107655

        Reviewed by Kentaro Hara.

        No new tests. Covered by existing tests.

        * bindings/v8/SerializedScriptValue.cpp:

2013-01-26  Justin Schuh  <jschuh@chromium.org>

        [CHROMIUM] Suppress more c4267 build warnings for Win64 targets
        https://bugs.webkit.org/show_bug.cgi?id=107993

        No new tests. No behavior change.

        Reviewed by Abhishek Arya.

        * WebCore.gyp/WebCore.gyp:

2013-01-24  Patrick Gansterer  <paroga@webkit.org>

        Build fix for USE(JSC) && !ENABLE(WORKERS) after r136686.

        * bindings/js/DOMRequestState.h:
        (WebCore::DOMRequestState::DOMRequestState):

2013-01-26  Robert Hogan  <robert@webkit.org>

        REGRESSION(r120616): Cell's logical height wrongly computed with vertical-align: baseline and rowspan
        https://bugs.webkit.org/show_bug.cgi?id=106571

        Reviewed by Julien Chaffraix.

        When a cell spans multiple rows, its baseline is set on the first row it spans. r120616 contained a
        couple of errors in its attempt to ensure the row height calculated in such cases was correct. When it
        calculated the baseline on the first row in the span, it didn't ensure that the row height was increased
        if necessary. It also suffered from allowing the baseline descent calculated on a rowspan to affect the
        height of the other cells in the first row of the span.

        Fix both of these errors in calcRowLogicalHeight() and refactor the calculation of the baseline and baseline
        descent so that it is freestanding (rather than depending on the height of the section so far). 

        Tests: fast/css/vertical-align-baseline-rowspan-010.html
               fast/css/vertical-align-baseline-rowspan-011.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2013-01-26  James Simonsen  <simonjam@chromium.org>

        [chromium] Export ResourceRequest's priority through WebURLRequest
        https://bugs.webkit.org/show_bug.cgi?id=107985

        Reviewed by Adam Barth.

        No new tests.

        * platform/chromium/support/WebURLRequest.cpp:
        (WebKit::WebURLRequest::priority):
        (WebKit):

2013-01-25  Roger Fong  <roger_fong@apple.com>

        Unreviewed Windows build fix. All it wanted was one more line.

        * css/plugIns.css:

2013-01-25  Joone Hur  <joone.hur@intel.com>

        [GTK][AC] Use new Clutter APIs instead of deprecated APIs
        https://bugs.webkit.org/show_bug.cgi?id=105736

        Reviewed by Gustavo Noronha Silva.

        ClutterCairoTexture class and several APIs have been deprecated since version 1.10, 
        so ClutterCanvas and ClutterContent should be used instead of ClutterCairoTexture.
        clutter_actor_add_child should be used instead of clutter_actor_set_parent and clutter_container_add_clutter.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (_GraphicsLayerActorPrivate):
        (graphics_layer_actor_init):
        (graphicsLayerActorDispose):
        (graphicsLayerActorAllocate):
        (graphicsLayerActorPaint):
        (graphicsLayerActorDraw):
        (graphicsLayerActorUpdateTexture):
        (graphicsLayerActorNew):
        (graphicsLayerActorRemoveAll):
        (graphicsLayerActorInvalidateRectangle):
        (graphicsLayerActorInsertSublayer):
        (graphicsLayerActorSetSublayers):

2013-01-25  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix for Windows.

        * css/plugIns.css:
        (p):

2013-01-25  Julien Chaffraix  <jchaffraix@webkit.org>

        Share code between the different min-content / max-content code paths
        https://bugs.webkit.org/show_bug.cgi?id=107740

        Reviewed by Tony Chang.

        This change enables sharing between the different content based computations
        by using function pointers to specialize the behavior as needed.

        Refactoring, covered by existing tests.

        * rendering/RenderGrid.cpp:
        (WebCore::GridTrack::growUsedBreadth):
        (WebCore::GridTrack::usedBreadth):
        (WebCore::GridTrack::growMaxBreadth):
        Added the previous getters / setters that will be passed to resolveContentBasedTrackSizingFunctionsForItems.

        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        Updated to reuse resolveContentBasedTrackSizingFunctionsForItems instead of duplicating code.
        One change is that now, we properly apply the min on all branches, which was an oversight of
        the previous patches.

        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Added this function as the core content-sized resolution function. For now, we pass the
        current track by direction & index to be able to filter grid items.

        * rendering/RenderGrid.h:
        Added resolveContentBasedTrackSizingFunctionsForItems and the function pointers typedef's.

2013-01-25  Kentaro Hara  <haraken@chromium.org>

        Remove InjectedScript::wrapSerializedObject()
        https://bugs.webkit.org/show_bug.cgi?id=107906

        Reviewed by Abhishek Arya.

        InjectedScript::wrapSerializedObject() is unused.
        (This is one of steps to remove raw pointers of SerializedScriptValue*,
        which can be a security concern.)

        * inspector/InjectedScript.cpp:
        * inspector/InjectedScript.h:
        (InjectedScript):

2013-01-25  Kentaro Hara  <haraken@chromium.org>

        Keep a RefPtr<SerializedScriptValue*> when we call serialize()/deserialize() in code generators
        https://bugs.webkit.org/show_bug.cgi?id=107902

        Reviewed by Abhishek Arya.

        If you use a raw SerializedScriptValue* for serialize()/deserialize(),
        it can potentially cause a use-after-free. This is because serialize()/
        deserialize() can destruct a RefPtr of the SerializedScriptValue*,
        depending on data that is serialized/deserialized. So we should keep a
        RefPtr<SerializedScriptValue*> when we call serialize()/deserialize().
        (See https://bugs.webkit.org/show_bug.cgi?id=107792 for more details.)

        No tests. This is just a just-in-case fix.

        * Modules/intents/Intent.h:
        (WebCore::Intent::data):
        * Modules/intents/IntentRequest.cpp:
        (WebCore::IntentRequest::postResult):
        (WebCore::IntentRequest::postFailure):
        * Modules/intents/IntentRequest.h:
        (IntentRequest):
        * Modules/intents/IntentResultCallback.h:
        (IntentResultCallback):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetNativeTypeForCallbacks):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GetNativeTypeForCallbacks):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrGetter):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedReadonlyValueAttrGetter):
        * dom/MessagePortChannel.h:
        (WebCore::MessagePortChannel::EventData::message):

2013-01-25  Kentaro Hara  <haraken@chromium.org>

        Keep a RefPtr<SerializedScriptValue*> when we call serialize()/deserialize() for MessageEvent
        https://bugs.webkit.org/show_bug.cgi?id=107900

        Reviewed by Abhishek Arya.

        If you use a raw SerializedScriptValue* for serialize()/deserialize(),
        it can potentially cause a use-after-free. This is because serialize()/
        deserialize() can destruct a RefPtr of the SerializedScriptValue*,
        depending on data that is serialized/deserialized. So we should keep a
        RefPtr<SerializedScriptValue*> when we call serialize()/deserialize().
        (See https://bugs.webkit.org/show_bug.cgi?id=107792 for more details.)

        No tests. This is just a just-in-case fix. I couldn't find any bug
        even in an ASAN build.

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAccessorGetter):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::dataAsSerializedScriptValue):

2013-01-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Keep a RefPtr<SerializedScriptValue*> when we call serialize()/deserialize() (part 1)
        https://bugs.webkit.org/show_bug.cgi?id=107891

        Reviewed by Abhishek Arya.

        If you use a raw SerializedScriptValue* for serialize()/deserialize(),
        it can potentially cause a use-after-free. This is because serialize()/
        deserialize() can destruct a RefPtr of the SerializedScriptValue*,
        depending on data that is serialized/deserialized. So we should keep a
        RefPtr<SerializedScriptValue*> when we call serialize()/deserialize().
        (See https://bugs.webkit.org/show_bug.cgi?id=107792 for more details.)

        No tests. This is just a just-in-case fix. I couldn't find any bug
        even in an ASAN build.

        * bindings/v8/custom/V8CustomEventCustom.cpp:
        (WebCore::V8CustomEvent::detailAccessorGetter):

2013-01-25  Kentaro Hara  <haraken@chromium.org>

        Keep a RefPtr<SerializedScriptValue*> when we call serialize()/deserialize() in PopStateEvent
        https://bugs.webkit.org/show_bug.cgi?id=107904

        Reviewed by Abhishek Arya.

        If you use a raw SerializedScriptValue* for serialize()/deserialize(),
        it can potentially cause a use-after-free. This is because serialize()/
        deserialize() can destruct a RefPtr of the SerializedScriptValue*,
        depending on data that is serialized/deserialized. So we should keep a
        RefPtr<SerializedScriptValue*> when we call serialize()/deserialize().
        (See https://bugs.webkit.org/show_bug.cgi?id=107792 for more details.)

        No tests. This is just a just-in-case fix.

        * dom/PopStateEvent.h:
        (WebCore::PopStateEvent::serializedState):
        * page/History.cpp:
        (WebCore::History::isSameAsCurrentState):
        * page/History.h:
        (History):

2013-01-25  Kentaro Hara  <haraken@chromium.org>

        Rename CodeGenerator::IsSubType() to CodeGenerator::InheritsInterface()
        https://bugs.webkit.org/show_bug.cgi?id=107874

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (InheritsInterface):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GetInternalFields):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateFunctionCallback):
        (GenerateImplementationIndexer):
        (GenerateToV8Converters):

2013-01-25  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to GetRawTemplate()
        https://bugs.webkit.org/show_bug.cgi?id=107927

        Reviewed by Adam Barth.

        This is one of steps to kill an optional Isolate parameter of GetRawTemplate().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateImplementation):
        (CreateCustomSignature):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::ConfigureV8Float64ArrayTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageAttrGetter):
        (WebCore::ConfigureV8TestActiveDOMObjectTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::ConfigureV8TestCustomNamedGetterTemplate):
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::ConfigureV8TestEventConstructorTemplate):
        (WebCore::V8TestEventConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::ConfigureV8TestEventTargetTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::ConfigureV8TestExceptionTemplate):
        (WebCore::V8TestException::GetTemplate):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::ConfigureV8TestInterfaceTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::ConfigureV8TestNamedConstructorTemplate):
        (WebCore::V8TestNamedConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::ConfigureV8TestNodeTemplate):
        (WebCore::V8TestNode::GetTemplate):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        (WebCore::V8TestObj::GetTemplate):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::ConfigureV8TestOverloadedConstructorsTemplate):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createContext):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAccessorGetter):
        (WebCore::V8Location::replaceAccessorGetter):
        (WebCore::V8Location::assignAccessorGetter):

2013-01-25  Pan Deng  <pan.deng@intel.com>

        [User Timing]Change class name that presented in Javascript for user timing entry.
        https://bugs.webkit.org/show_bug.cgi?id=107925.

        Reviewed by Tony Gentilcore.

        In current implementation, class type of user timing entries are PerformanceEntry, according
        to W3C spec, they should be PerformanceMark and PerformanceMeasure.

        Test: http/tests/w3c/webperf/submission/Intel/user-timing/test_user_timing_entry_type.html

        * bindings/v8/custom/V8PerformanceEntryCustom.cpp:
        (WebCore::wrap):
        * page/PerformanceEntry.h:
        (WebCore::PerformanceEntry::isMark):
        (WebCore::PerformanceEntry::isMeasure):
        * page/PerformanceMark.h:
        (WebCore::PerformanceMark::isMark):
        (PerformanceMark):
        * page/PerformanceMeasure.h:
        (WebCore::PerformanceMeasure::isMeasure):
        (PerformanceMeasure):

2013-01-24  Roger Fong  <roger_fong@apple.com>

        Updated WebCore property sheets and added a WebCore solution file.
        https://bugs.webkit.org/show_bug.cgi?id=106988.

        Rubberstamped by Brent Fulgham.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj:
        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj.filters:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCommon.props:
        * WebCore.vcxproj/WebCore.sln: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreDebug.props:

2013-01-24  Ojan Vafai  <ojan@chromium.org>

        MathML preferred widths should not depend on layout information
        https://bugs.webkit.org/show_bug.cgi?id=107353

        Reviewed by Levi Weintraub.

        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::attach):
        (WebCore::MathMLTextElement::childrenChanged):
        * mathml/MathMLTextElement.h:
        Need to update the render tree when the text of a <mo> changes.

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::styleDidChange):
        Need to update the rendertree to apply operator stretching.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::glyphHeightForCharacter):
        (WebCore::RenderMathMLOperator::widthForCharacter):
        (WebCore::RenderMathMLOperator::computeIntrinsicLogicalWidths):
        (WebCore::RenderMathMLOperator::stretchDisabledByMarkup):
        (WebCore::RenderMathMLOperator::firstTextCharacter):
        (WebCore::RenderMathMLOperator::stretchyCharacterIndex):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::firstLineBoxBaseline):
        -Make the preferred widths of operators the max of all possible
        characters to be used in the operator and center the operator in that width.
        -For stretching where we don't use multiple glyphs, use transforms
        instead of font-size. This both looks better and avoids affecting the width.
        -Now that preferred widths don't depends on height, we don't need to
        override computePreferredLogicalWidths at all in MathML code.

        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::index):
        Tighten up the type.

        (WebCore::RenderMathMLRoot::layout):
        Move the laying out of children to the layout method.

        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::logicalHeightExcludingOperators):
        (WebCore::RenderMathMLRow::stretchOperatorsAndLayout):
        (WebCore::RenderMathMLRow::layout):
        Move the laying out of children and the subsequent setting of stretchHeight
        to the layout method.

        * rendering/mathml/RenderMathMLRow.h:

2013-01-25  Raymond Toy  <rtoy@google.com>

        Don't subtract too much from nonSilentFramesToProcess
        https://bugs.webkit.org/show_bug.cgi?id=107966

        Reviewed by Kenneth Russell.

        No new tests.

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::updateSchedulingInfo):

2013-01-25  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix by Dean.

        * css/plugIns.css:
        (object):

2013-01-25  Dima Gorbik  <dgorbik@apple.com>

        Support language WebVTT Nodes
        https://bugs.webkit.org/show_bug.cgi?id=107907

        Reviewed by Eric Carlson.

        Language stack and WebVTT language nodes are added as 
        required by specs.

        Test: media/track/track-css-matching-lang.html

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::copyWebVTTNodeToDOMTree): WebVTT language nodes should be
        spans in DOM and the lang attribute should be set for all nodes if applicable.
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::langElementTagName):
        (TextTrackCue):
        (WebCore::TextTrackCue::langAttributeName):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::createDocumentFragmentFromCueText): clear the language stack in case
        we use the same parser object for multiple cues that have incorrect syntax.
        (WebCore::isLangToken):
        (WebCore):
        (WebCore::WebVTTParser::constructTreeFromToken): parse lang WebVTT objects.
        * html/track/WebVTTParser.h:
        (WebVTTParser):

2013-01-25  Andy Estes  <aestes@apple.com>

        Wrap content filtering code in an object
        https://bugs.webkit.org/show_bug.cgi?id=107914

        Reviewed by Alexey Proskuryakov.

        Content filtering code currently requires explicit and somewhat complex
        lifetime management of the WebFilterEvaluator object for correct
        behavior. Simplify this by wrapping WebFilterEvaluator in an object and
        have MainResourceLoader implicitly manage its lifetime by holding it in
        an OwnPtr.

        This change has benefits other than the simplified lifetime management.
        It removes direct calls into WebKitSystemInterface from the loader, and
        it allows us to keep a strong reference to the replacement data
        returned from wkFilterAddData() and wkFilterDataComplete() rather than
        relying on it being autoreleased.

        * WebCore.exp.in: Updated to match changes in WebCoreSystemInterface.
        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader): Removed unneeded initialization.
        (WebCore::MainResourceLoader::~MainResourceLoader): Removed an unneeded ASSERT().
        (WebCore::MainResourceLoader::cancel): Removed unneeded wkFilterRelease().
        (WebCore::MainResourceLoader::responseReceived): Created a
        ContentFilter object rather than calling wkFilterCreateInstance().
        (WebCore::MainResourceLoader::dataReceived): Rewrote content filtering
        logic in terms of the wrapper object. Removed any explicit lifetime
        management.
        (WebCore::MainResourceLoader::didFinishLoading): Ditto.
        (WebCore::MainResourceLoader::notifyFinished): Removed unneeded wkFilterRelease().
        * loader/MainResourceLoader.h:
        * platform/ContentFilter.h: Added.
        * platform/mac/ContentFilterMac.mm: Added.
        (WebCore::ContentFilter::create):
        (WebCore::ContentFilter::ContentFilter):
        (WebCore::ContentFilter::isEnabled): Returned the result of wkFilterIsManagedSession().
        (WebCore::ContentFilter::addData): Called wkFilterAddData() and stored
        the resulting NSData in m_replacementData.
        (WebCore::ContentFilter::finishedAddingData): Called wkFilterDataComplete()
        and stored the resulting NSData in m_replacementData.
        (WebCore::ContentFilter::needsMoreData): Returned the result of wkFilterIsBuffering().
        (WebCore::ContentFilter::didBlockData): Returned the result of wkFilterWasBlocked().
        (WebCore::ContentFilter::getReplacementData): Returned the data stored in m_replacementData.
        * platform/mac/WebCoreSystemInterface.h: Updated to reflect changes in WKSI.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::~MainResourceLoader):
        (WebCore::MainResourceLoader::cancel):
        (WebCore::MainResourceLoader::responseReceived):
        (WebCore::MainResourceLoader::dataReceived):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::notifyFinished):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):
        * platform/ContentFilter.h: Added.
        (WebCore):
        (ContentFilter):
        * platform/mac/ContentFilterMac.mm: Added.
        (WebCore):
        (WebCore::ContentFilter::create):
        (WebCore::ContentFilter::ContentFilter):
        (WebCore::ContentFilter::isEnabled):
        (WebCore::ContentFilter::addData):
        (WebCore::ContentFilter::finishedAddingData):
        (WebCore::ContentFilter::needsMoreData):
        (WebCore::ContentFilter::didBlockData):
        (WebCore::ContentFilter::getReplacementData):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-01-25  Simon Fraser  <simon.fraser@apple.com>

        When the FrameView has a non-opaque background color, make sure the TileCache tiles are not opaque
        https://bugs.webkit.org/show_bug.cgi?id=107989

        Reviewed by Dean Jackson.

        If a WKView was told to draw a transparent background, make sure that we
        set the TileCache tiles to be non-opaque.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateRootLayerConfiguration):

2013-01-25  Alexandre Elias  <aelias@chromium.org>

        Call FrameView::contentsResized() when setting fixed layout size
        https://bugs.webkit.org/show_bug.cgi?id=107922

        Reviewed by James Robinson.

        In fixed layout mode, we should be calling contentsResized() when the
        fixed layout size is changed; on the other hand, we don't need to layout
        when the visible contents size changes.

        This fixes test WebFrameTest::FixedLayoutInitializeAtMinimumPageScale.

        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentsResized):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFixedLayoutSize):
        (WebCore::ScrollView::setUseFixedLayout):

2013-01-25  Tony Gentilcore  <tonyg@chromium.org>

        Fix an ASSERT in BackgroundHTMLParser::appendPartial
        https://bugs.webkit.org/show_bug.cgi?id=107983

        Reviewed by Eric Seidel.

        The complier may create a temporary for the isolatedCopy of the source string. This could cause the refCount of the
        StringImpl to be greater than one when appendPartial is invoked on the background thread.
        This patch ensures the temporary is gone by that time which fixes the ASSERT in numerous layout tests.

        No new tests because covered by existing tests.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::append):

2013-01-25  Dean Jackson  <dino@apple.com>

        Add a user agent stylesheet for plugins
        https://bugs.webkit.org/show_bug.cgi?id=107890

        Reviewed by Alexey Proskuryakov.

        As a step along the way to providing a Shadow DOM for plug-in elements, add a
        User Agent stylesheet that is loaded when an embed or object element is
        in the document. At the moment the stylesheet is empty.

        The stylesheet can be overridden by the RenderTheme or the ChromeClient, allowing
        ports to provide a custom appearance. This involved hooking up some virtual methods
        on ChromeClient, the stubs of which are already implemented in WK2.
        As a drive-by, since snapshotted plugins will need some localization I've also
        exposed the ChromeClient methods to get text labels.

        * CMakeLists.txt: Add plugIns.css.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gyp/WebCore.gyp: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditoo.
        * css/StyleResolver.cpp:
        (WebCore::ensureDefaultStyleSheetsForElement): Load and inject new plugInsStyleSheet if there is an object or embed element.
        * css/plugIns.css: Added. Empty for now.
        * page/ChromeClient.h: New methods for querying the client.
        (WebCore::ChromeClient::plugInStartLabelTitle):
        (WebCore::ChromeClient::plugInStartLabelSubtitle):
        (WebCore::ChromeClient::plugInExtraStyleSheet):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::extraPlugInsStyleSheet): Allow the theme to provide an extra stylesheet.

2013-01-25  Eric Carlson  <eric.carlson@apple.com>

        Adding a text track should not make controls visible
        https://bugs.webkit.org/show_bug.cgi?id=107956

        Reviewed by Dean Jackson.

        Test: media/media-captions-no-controls.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Call updateTextTrackDisplay.
        (WebCore::HTMLMediaElement::updateTextTrackDisplay): New, call mediaControls->updateTextTrackDisplay()
            if we have controls.
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible):  Call updateTextTrackDisplay.
        (WebCore::HTMLMediaElement::createMediaControls): Hide controls if they should not be 
            visible. Minor drive by cleanup.
        (WebCore::HTMLMediaElement::configureTextTrackDisplay): Drive by cleanup, pull the three lines
            from updateClosedCaptionsControls inline and delete it because this was the only caller.
        * html/HTMLMediaElement.h:

2013-01-25  Elliott Sprehn  <esprehn@chromium.org>

        Consider all ancestors not just parentElement when disconnecting frames
        https://bugs.webkit.org/show_bug.cgi?id=107769

        Reviewed by Eric Seidel.

        Previous we only used the parentElement of the frame owner to decide if
        we should disconnect the frame, but this means if you reparent a subtree
        that contains multiple frames from inside an unload handler we'll disconnect
        the subframes even though they're now in a different part of the document.

        We can fix this by using containsIncludingShadowDOM, and also simplify the
        code by removing ChildFrameDisconnector::Target.

        Test: fast/frames/unload-reparent-sibling-frame.html

        * dom/ContainerNodeAlgorithms.cpp:
        * dom/ContainerNodeAlgorithms.h:
        (ChildFrameDisconnector):
        (ChildFrameDisconnector::Target): Removed.
        (WebCore::ChildFrameDisconnector::collectFrameOwners):
        (WebCore::ChildFrameDisconnector::disconnectCollectedFrameOwners):

2013-01-25  Tony Chang  <tony@chromium.org>

        Re-layout child blocks when border/padding of the box-sizing:border-box parent is updated
        https://bugs.webkit.org/show_bug.cgi?id=104997

        Reviewed by Ojan Vafai.

        Original patch by Kent Tamura:
        When padding or border is updated for a parent block with
        box-sizing:border-box and width, the width of its child block was not
        updated.

        The change is to look at border width specifically, not all changes to the border style
        since changes to border color should not trigger a relayout.

        Tests: fast/css/box-sizing-border-box-dynamic-padding-border-update.html
               fast/forms/border-color-relayout.html
               fast/forms/text/text-padding-dynamic-change.html

        * rendering/RenderBox.cpp:
        (WebCore::borderWidthChanged): Helper method to compare border widths.
        (WebCore::RenderBox::styleDidChange):
        If box-sizing of the old style and/or the new style is border-box and
        padding or border is changed, apply setChildNeedsLayout(true) for child
        boxes.

2013-01-25  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        Move WebGLErrorsToConsole page setting to window.internals.settings
        https://bugs.webkit.org/show_bug.cgi?id=107218

        Reviewed by Kenneth Russell.

        Define webGLErrorsToConsoleEnabled as true by default. Also,
        WebGLRenderingContext::m_synthesizedErrorsToConsole is true by default
        and can be disabled by settings.

        Add a ConsoleDisplayPreference parameter to synthesizeGLError
        (defaults to DisplayInConsole). When called with DontDisplayInConsole,
        an error message will not be displayed (even if
        m_synthesizedErrorsToConsole is true).

        Call synthesizeGLError with DontDisplayInConsole in case of synthetic
        context lost.

        No new tests: covered by existing tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::setupFlags):
        (WebCore::WebGLRenderingContext::validateRenderingState):
        (WebCore::WebGLRenderingContext::loseContextImpl):
        (WebCore::WebGLRenderingContext::synthesizeGLError):
        * html/canvas/WebGLRenderingContext.h:
        * page/Settings.in:

2013-01-25  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Move TaskType enum to IDBDatabaseBackendInterface
        https://bugs.webkit.org/show_bug.cgi?id=107960

        Reviewed by Tony Chang.

        The IDBTransactionBackendInterface class is going away,
        this is an easy search-and-replace patch to keep these
        changes out of more complex patches.

        No new tests, just part of a refactor.

        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        (IDBCursorBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setIndexesReady):
        (WebCore::OpenCursorOperation::perform):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        (IDBObjectStore):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::IDBOpenDBRequest):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::IDBRequest):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):
        (WebCore::IDBRequest::taskType):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

2013-01-25  Abhishek Arya  <inferno@chromium.org>

        Regression(r139836): Crash in WTF::equalIgnoringCase
        https://bugs.webkit.org/show_bug.cgi?id=107703

        Reviewed by Eric Seidel.

        Check |a| is a CSS_IDENT before considering it a string and
        calling equalIgnoringCase on it. To avoid future mistakes like
        this, add a function override for equalIgnoringCase that takes
        CSSParserValue as a parameter and ASSERTs if that CSSParserValue
        is not a CSS_STRING/CSS_IDENT.       

        Test: fast/gradients/parse-radial-gradient-crash.html

        * css/CSSParser.cpp:
        (WebCore):
        (WebCore::equalIgnoringCase):
        (WebCore::CSSParser::parseAnimationName):
        (WebCore::CSSParser::parseAnimationProperty):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::parseDeprecatedGradientPoint):
        (WebCore::CSSParser::parseDeprecatedGradient):
        (WebCore::CSSParser::parseLinearGradient):
        (WebCore::CSSParser::parseRadialGradient):

2013-01-25  Chang Shu  <cshu@webkit.org>

        Build broken when svg is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=92393.

        Unreviewed build fix.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):

2013-01-25  Tony Gentilcore  <tonyg@chromium.org>

        Abort parsing when pending location change for threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=107876

        Reviewed by Eric Seidel.

        The main thread parser does this in canTakeNextToken. Adding this check to the threaded parser causes us to pass
        fast/loader/location-change-aborts-parsing.html.

        No new tests because covered by existing tests.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processTokensFromBackgroundParser):

2013-01-25  Mike West  <mkwst@chromium.org>

        ScriptController::executeIfJavaScriptURL incorrectly checks viewsource mode.
        incorrectly blocks execution based on the frame's viewsource state.
        https://bugs.webkit.org/show_bug.cgi?id=101683

        Reviewed by Adam Barth.

        ScriptController::executeIfJavaScriptURL currently checks whether the
        frame in which a 'javascript:' URL might be executed is in viewsource
        mode. This incorrectly handles the case where the viewsource attribute
        is added after a document loads: the _frame_ is in viewsource mode, the
        _document_ is not. The latter should control execution, not the former.

        This patch drops the inViewSourceMode check from executeIfJavaScriptURL
        entirely, as the document's viewsource state is checked in
        canExecuteScripts, which is already called when the 'javascript:' URL is
        passed to executeScript. The checks should remain centralized there.

        Test: http/tests/security/view-source-javascript-url-in-document.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
            Drop the incorrect check against the Frame's viewsource mode. The
            correct check against the Document's viewsource mode is performed
            in canExecuteScripts (which is called via executeScript).

2013-01-25  Gustavo Noronha Silva  <gns@gnome.org>

        [Soup] Streamline cancellation and client checks
        https://bugs.webkit.org/show_bug.cgi?id=107808

        Reviewed by Martin Robinson.

        Covered by existing tests.

        * platform/network/ResourceHandle.h:
        (ResourceHandle):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::cancelledOrClientless): new method to check for cancellation and lack of client.
        (WebCore):
        (WebCore::gotHeadersCallback): use the new method.
        (WebCore::restartedCallback): ditto.
        (WebCore::redirectCloseCallback): ditto.
        (WebCore::redirectSkipCallback): ditto.
        (WebCore::wroteBodyDataCallback): ditto.
        (WebCore::nextMultipartResponsePartCallback): ditto.
        (WebCore::sendRequestCallback): ditto.
        (WebCore::networkEventCallback): ditto.
        (WebCore::ResourceHandle::platformSetDefersLoading): ditto.
        (WebCore::readCallback): ditto.

2013-01-25  Victor Carbune  <vcarbune@chromium.org>

        Heap-use-after-free in WebCore::TextTrackCue::isActive
        https://bugs.webkit.org/show_bug.cgi?id=104594

        Reviewed by Eric Carlson.

        Test: media/track/track-remove-active-cue-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::textTrackAddCue):
        (WebCore::HTMLMediaElement::textTrackRemoveCue): Remove the cue
        from the active cue set as well.
        * html/HTMLMediaElement.h:
        (WebCore):

2013-01-25  Mike West  <mkwst@chromium.org>

        Web Inspector: Cleanup console.* API MessageSource/Levels.
        https://bugs.webkit.org/show_bug.cgi?id=107946

        Reviewed by Pavel Feldman.

        This patch does some light cleanup on sources and levels of console.*
        messages as part of a broader effort to offer better filtering options
        in the console. Specifically:

        -   console.timeEnd and console.count now come from
            ConsoleAPIMessageSource.
        -   console.count is now DebugMessageLevel (to match console.timeEnd).
        -   console.profile and console.profileEnd now comr from
            ConsoleAPIMessageSource, and are DebugMessageLevel.

        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::stopTiming):
        (WebCore::InspectorConsoleAgent::count):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):

2013-01-25  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: highlight occurences of word in DefaultTextEditor
        https://bugs.webkit.org/show_bug.cgi?id=105523

        Reviewed by Pavel Feldman.

        Highlight occurrences of selected word in DefaultTextEditor by the means of new highlight regex API.

        Test: inspector/editor/text-editor-highlight-token.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._handleSelectionChange):
        (WebInspector.TextEditorMainPanel.TokenHighlighter): Added.
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype.handleSelectionChange):
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype._regexString):
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype._highlight):
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype._removeHighlight):
        (WebInspector.TextEditorMainPanel.TokenHighlighter.prototype._isWord):
        * inspector/front-end/textEditor.css:
        (.text-editor-token-highlight):

2013-01-25  Alexander Paschenko  <alexander.pashenko@lge.com>

        [TexMap] Flickering after transitions on Apple HTML5 demo
        https://bugs.webkit.org/show_bug.cgi?id=102501

        Reviewed by Noam Rosenthal.

        The problem is caused by inconsistent state of TextureMapperLayer's transformation matrix
        and opacity data during and after the end of animation.
        This patch solves the problem by introducing three additional private flags
        to TextureMapperLayer:
        m_shouldUpdateCurrentTransformFromGraphicsLayer,
        m_shouldUpdateCurrentOpacityFromGraphicsLayer, and
        m_shouldUpdateCurrentFiltersFromGraphicsLayer.
        The latter has been introduced in order to avoid similar future problems
        with m_currentFilters.
        On these flags' basis, TextureMapperLayer is able to decide whether to update
        its inner state or not.
        These flags themselves are set based on GraphicsLayerTextureMapper's changeMask
        which indicates what details of the state have been changed since the last sync.

        No new tests - this doesn't expose any testable surface.
        Eyes-only check has been made to ensure that the problem is gone now.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setAnimatedTransform):
        sets m_shouldUpdateCurrentTransformFromGraphicsLayer to false and
        updates m_currentTransform based on the updated state from GraphicsLayerAnimation.
        (WebCore):
        (WebCore::TextureMapperLayer::setAnimatedOpacity):
        sets m_shouldUpdateCurrentOpacityFromGraphicsLayer to false and
        updates m_currentOpacity based on the updated state from GraphicsLayerAnimation.
        (WebCore::TextureMapperLayer::setAnimatedFilters):
        sets m_shouldUpdateCurrentFiltersFromGraphicsLayer to false and
        updates m_currentFilters based on the updated state from GraphicsLayerAnimation.
        (WebCore::TextureMapperLayer::flushCompositingStateForThisLayerOnly):
        sets m_shouldUpdateCurrent* flags based on GLTM's changeMask. Also illegal modification
        of m_currentTransform that caused flickering has been removed from this method.
        (WebCore::TextureMapperLayer::syncAnimations): updates m_currentTransform and/or
        m_currentOpacity and/or m_currentFilters if corresponding flags allow to do so.
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::TextureMapperLayer): aforementioned flags
        get initialized in ctor.
        (TextureMapperLayer): aforementioned flags are declared in the class.


2013-01-25  Marja Hölttä  <marja@chromium.org>

        Refactor InspectorMemoryAgent: memory data as a map.

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

        Reviewed by Yury Semikhatsky.

        No new tests (no functional changes, only refactoring).

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::getProcessMemoryDistribution):
        (WebCore):
        * inspector/InspectorController.h:
        (WebCore):
        (InspectorController):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::addPlatformComponentsInfo):
        (WebCore):
        (WebCore::addMemoryInstrumentationDebugData):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        (WebCore::InspectorMemoryAgent::reportMemoryUsage):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionAsMap):
        * inspector/InspectorMemoryAgent.h:
        (InspectorMemoryAgent):

2013-01-25  Huang Dongsung  <luxtella@company100.net>

        [Texmap] Refactor code related to debug border and repaint count.
        https://bugs.webkit.org/show_bug.cgi?id=105787

        Reviewed by Noam Rosenthal.

        Currently, TextureMapperBackingStore, CoordinatedBackingStore and
        GraphicsLayerTextureMapper have duplicated code to draw debug border or
        repaint count. This patch refactors that all platform layers draw debug
        border and repaint count in the consistent way:
        TextureMapper::drawBorder() and TextureMapper::drawRepaintCounter().

        There are three big changes:
        1. TextureMapperLayer has the debug visuals like GraphicsLayer.
        Both debug border and repaint count are called as the debug visuals.
        2. We use the same color and width to Mac port because we get that info using
        GraphicsLayer::updateDebugIndicators().
        3. Draw borders for background color, backing store and contents layer,
        while drawing repaint count only for backing store.

        No new tests. This functionality is for debugging, so we cannot test using DRT.

        * platform/graphics/cairo/GraphicsContext3DPrivate.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setShowDebugBorder):
        (WebCore):
        (WebCore::GraphicsLayerTextureMapper::setShowRepaintCounter):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerTextureMapper::updateDebugBorderAndRepaintCountIfNeeded):
        (WebCore::GraphicsLayerTextureMapper::setDebugBorder):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIfNeeded):
        (WebCore::GraphicsLayerTextureMapper::prepareBackingStore):
        (WebCore::GraphicsLayerTextureMapper::setRepaintCount):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::debugBorderColor):
        (WebCore::GraphicsLayerTextureMapper::debugBorderWidth):
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::adjustedTransformForRect):
        (WebCore):
        (WebCore::TextureMapperTiledBackingStore::paintToTextureMapper):
        (WebCore::TextureMapperTiledBackingStore::drawBorder):
            Override TextureMapperPlatformLayer::drawBorder() to draw the border
            for each tile.
        (WebCore::TextureMapperTiledBackingStore::drawRepaintCounter):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (WebCore::TextureMapperBackingStore::drawRepaintCounter):
        (TextureMapperBackingStore):
        (TextureMapperTiledBackingStore):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawRepaintCounter):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::TextureMapperImageBuffer::drawBorder):
        (WebCore):
        (WebCore::TextureMapperImageBuffer::drawRepaintCounter):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (TextureMapperImageBuffer):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (State):
        (WebCore::TextureMapperLayer::State::State):
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (WebCore::TextureMapperPlatformLayer::drawBorder):

2013-01-24  Patrick Gansterer  <paroga@webkit.org>

        Build fix for !ENABLE(DRAG_SUPPORT) after r140286.

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::autoscrollTimerFired):

2013-01-25  Ken Kania  <kkania@chromium.org>

        Web Inspector: Move dispatchMouseEvent optional params after x,y
        https://bugs.webkit.org/show_bug.cgi?id=107828

        Reviewed by Pavel Feldman.

        No new tests, as this just rearranges the order of arguments to make
        JSCompiler happy. The params were rearranged in r140649 to match
        dispatchKeyEvent's params.

        * inspector/Inspector.json:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::dispatchMouseEvent):
        * inspector/InspectorInputAgent.h:
        (InspectorInputAgent):

2013-01-25  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Editing a property value containing a trimmed data: URL breaks the style
        https://bugs.webkit.org/show_bug.cgi?id=107936

        Reviewed by Yury Semikhatsky.

        Restore the original CSS property value before editing.

        Test: inspector/styles/edit-value-with-trimmed-url.html

        * inspector/front-end/StylesSidebarPane.js:

2013-01-25  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Use DataGrid column alignment instead of custom styling.
        https://bugs.webkit.org/show_bug.cgi?id=107935

        Reviewed by Pavel Feldman.

        On Network Panel column alignment is specified both in
        column descriptors and in CSS stylesheet.

        Only one alignment specifier should last.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGridNode.prototype.createTD): Extracted common code.
        (WebInspector.DataGridNode.prototype.createCell): Use "createTD". 
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._createDivInTD): Ditto.
        * inspector/front-end/networkLogView.css: Remove exheberant rules.
        * inspector/front-end/networkPanel.css: Fix whitespaces.

2013-01-25  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: Add explanation for Console object expansion behaviour
        https://bugs.webkit.org/show_bug.cgi?id=107793

        Reviewed by Pavel Feldman.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsArrayOrObject):
        * inspector/front-end/inspector.css:
        (.object-info-state-note):
        (.object-info-state-note::before):
        (.object-info-state-note:hover):
        (.section.expanded .object-info-state-note):
        (.section.expanded .properties, .event-bar.expanded .event-properties):
        (.pane.expanded .properties, .event-bar .event-properties):

2013-01-25  Claudio Saavedra  <csaavedra@igalia.com>

        Missing files in GNUmakefile.list.am for Notifications support
        https://bugs.webkit.org/show_bug.cgi?id=107934

        Reviewed by Philippe Normand.

        * GNUmakefile.list.am: Add DOMWindowNotifications.idl and
        WorkerContextNotifications.idl to dom_binding_idls and
        JSNotificationCustom.{cpp,h} to webcore_sources, since without
        this the Notifications will be broken.

2013-01-25  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: implement search for workspace sources
        https://bugs.webkit.org/show_bug.cgi?id=107814

        Reviewed by Pavel Feldman.

        Implement generic WebInspector.ContentProvider.performSearchInContent method and use it in both
        StaticContentProvider and fileSystemWorkspaceProvider.

        No new tests.

        * inspector/front-end/ContentProvider.js:
        (WebInspector.ContentProvider.performSearchInContent): Added.
        * inspector/front-end/ContentProviders.js:
        (WebInspector.StaticContentProvider.prototype.):
        (WebInspector.StaticContentProvider.prototype.searchInContent):
        * inspector/front-end/FileSystemWorkspaceProvider.js:
        (WebInspector.FileSystemWorkspaceProvider.prototype.contentCallback):
        (WebInspector.FileSystemWorkspaceProvider.prototype.searchInFileContent):

2013-01-25  Elliott Sprehn  <esprehn@gmail.com>

        Assert the connectedSubframeCount is consistent and fix over counting
        https://bugs.webkit.org/show_bug.cgi?id=107302

        Reviewed by Alexey Proskuryakov.

        Add a debug assertion that walks the subtree during frame disconnection
        and manually counts the number of connected subframes to assert that the
        value from Node::connectedSubframeCount() is the same as if we traversed
        through the tree.

        In fixing the places where this assertion failed I made document destruction
        faster by not walking the entire document looking for frames if the entire
        frame tree has been destroyed by way of FrameLoader::detachChildren().
        I had inadvertently introduced this improvement in r133933, but then I
        regressed it in r140090 when we switched to counting because I didn't
        realize we destroy the frame tree separate of frame disconnection on
        document unload so all frames could have been destroyed but the counts
        left on the ancestors.

        I also fixed another overcounting case where the adoption agency algorithm
        may call ContainerNode::takeAllChildrenFrom() which in turn calls
        ContainerNode::removeAllChildren() and could have left a connected subframe
        count on the node even though all the frames had been removed.

        This assertion did not uncover any cases of undercounting the number of
        frames.

        This also fixes a rare edge case where removeChild of an iframe that
        was already being unloaded would not unload the frame until the top level
        unload was done, and a reparenting of the iframe would not cause it to load.

        Test: fast/frames/reparent-in-unload-contentdocument.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildren):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::parserAppendChild):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore):
        (WebCore::assertConnectedSubframeCountIsConsistent):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore):
        (WebCore::ChildFrameDisconnector::disconnect):
        * dom/Node.cpp:
        (WebCore::Node::updateAncestorConnectedSubframeCountForRemoval):
        (WebCore):
        (WebCore::Node::updateAncestorConnectedSubframeCountForInsertion):
        * dom/Node.h:
        (Node):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::clearContentFrame):
        (WebCore):
        (WebCore::HTMLFrameOwnerElement::disconnectContentFrame):
        * html/HTMLFrameOwnerElement.h:
        (HTMLFrameOwnerElement):

2013-01-25  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: inspector slows down pages with many anonymous scripts.
        https://bugs.webkit.org/show_bug.cgi?id=107928

        Reviewed by Alexander Pavlov.

        The problem was that workspace code introduced n^2 complexity for unique URI calculation.

        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleWorkspaceProvider):
        (WebInspector.SimpleWorkspaceProvider.prototype.uniqueURI):

2013-01-25  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [CMake][EFL] Build ThirdParty/leveldb when IndexedDB is enabled
        https://bugs.webkit.org/show_bug.cgi?id=106443

        Reviewed by Laszlo Gombos.

        LevelDB is now included in ThirdParty. Use it when IndexDB is
        enabled for EFL.

        * CMakeLists.txt:
        Build ThirdParty/leveldb when WTF_USE_LEVELDB is set

2013-01-25  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Inconsistent value of aria-valuetext attribute
        https://bugs.webkit.org/show_bug.cgi?id=107897

        Reviewed by Kentaro Hara.

        aria-valuetext and aria-valuenow attributes had inconsistent values in
        a case of initial empty state and a case that a user clears a field.

        - aria-valuetext attribute should have "blank" message in the initial
          empty state.
        - aria-valuenow attribute should be removed in the cleared empty state.

        Also, we have a bug that aira-valuenow had a symbolic value such as "AM"
        "January". It should always have a numeric value according to the
        specification.
        http://www.w3.org/TR/wai-aria/states_and_properties#aria-valuenow

        No new tests. Updates fast/forms/*-multiple-fields/*-multiple-fields-ax-aria-attributes.html.

        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::DateTimeFieldElement):
        Set "blank" message to aria-valuetext attribute.
        (WebCore::DateTimeFieldElement::updateVisibleValue):
        aria-valuenow attribute should be a numeric value. Apply String::number
        to the return value of valueForARIAValueNow.
        Remove aria-valuenow attribute if nothing is selected.
        (WebCore::DateTimeFieldElement::valueForARIAValueNow):
        Added.
        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement): Declare valueForARIAValueNow.

        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::valueForARIAValueNow):
        Added. Returns 1 + internal selection index.
        For example, the function returns 1 for January.
        * html/shadow/DateTimeSymbolicFieldElement.h:
        (DateTimeSymbolicFieldElement): Declare valueForARIAValueNow.

2013-01-24  Hans Wennborg  <hans@chromium.org>

        Disable Clang's -Wreturn-type-c-linkage for Source/WebCore/bindings/v8/
        https://bugs.webkit.org/show_bug.cgi?id=107845

        Reviewed by Adam Barth.

        A recent version of Clang started warning about code in
        Source/WebCore/bindings/v8/npruntime.cpp.

        In this case it is warning about an 'extern "c"' function returning a
        non-POD type. But because the function has internal linkage, the
        warning doesn't really apply.

        This change suppresses the warning in the meantime.

        Tested by building with Clang r172454.

        * WebCore.gyp/WebCore.gyp:

2013-01-25  Eberhard Graether  <egraether@google.com>

        Web Inspector: add checkbox for continuous painting to the inspector's settings
        https://bugs.webkit.org/show_bug.cgi?id=107352

        Reviewed by Pavel Feldman.

        This change adds a checkbox to activate continuous painting to the WebInspector's
        rendering settings and plumbs the setting to Chromium's WebLayerTreeView. The
        setting is visible if InspectorClient::canContinuouslyPaint() returns true.

        No new tests.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::canContinuouslyPaint):
        (WebCore::InspectorClient::setContinuousPaintingEnabled):
        (InspectorClient):
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::canContinuouslyPaint):
        (WebCore):
        (WebCore::InspectorPageAgent::setContinuousPaintingEnabled):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):
        (WebInspector.GenericSettingsTab.prototype.get _continuousPaintingChanged):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2013-01-25  Dominic Mazzoni  <dmazzoni@google.com>

        REGRESSION (r140658): Multiple accessibility failures on GTK
        https://bugs.webkit.org/show_bug.cgi?id=107832

        Reviewed by Chris Fleizach.

        In the ATK accessibility implementation, attachWrapper
        might create a different object depending on the role of
        the WebCore AccessibilityObject, whereas on other platforms
        attachWrapper doesn't care. Calling init before attachWrapper
        solves the problem.

        Re-enables 7 skipped tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):

2013-01-24  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Refactoring: Remove confusing minimum() and maximum() of DateTimeSymbolicFieldElement
        https://bugs.webkit.org/show_bug.cgi?id=107918

        Reviewed by Kentaro Hara.

        DateTimeSymbolicFieldElement::minimum() and maximum() are very
        confusing. They don't return minimum/maximum value of 0-based symbol
        index though valueAsInteger is 0-based. These functions are used only
        for ARIA attributes in DateTimeFieldElement::initialize().

        - Remove DateTimeFieldElement::minimum() and maximum(), and pass
        minimum/maximum values for ARIA attributes as function arguments.
        - DateTimeNumericFieldElement::maximum() is now non-virtual.
          It is called by subclasses.

        No new tests. This should not change any behavior.

        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::initialize):
        Add axMimimum/axMaximum arguments. Don't use minimum() and maximum().
        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement): Ditto.
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::initialize):
        Pass m_range.minimum and maximum to DateTimeFieldElement::initialize().
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement):
        - Add initialize()
        - Make maximum() non-virtual
        - Remove minimum().
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::initialize):
        Pass m_minimumIndex + 1 and m_maximumIndex + 1 to
        DateTimeFieldElement::initialize().
        * html/shadow/DateTimeSymbolicFieldElement.h:
        (DateTimeSymbolicFieldElement):
        Add initialize() and remove minimum() and maximum().

2013-01-24  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Refactoring: Remove unused DateTimeHourFieldElement::valueAsInteger
        https://bugs.webkit.org/show_bug.cgi?id=107915

        Reviewed by Kentaro Hara.

        DateTimeHourFieldElement::valueAsInteger is never called. Remove it and
        make valueAsInteger non-public.

        No new tests. This shouldn't change any behavior.

        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement): Make valueAsInteger protected.
        * html/shadow/DateTimeFieldElements.cpp:
        Remove DateTimeHourFieldElement::valueAsInteger.
        (WebCore::DateTimeHourFieldElement::populateDateTimeFieldsState):
        Remove unnecessary DateTimeNumericFieldElement:: prefix.
        * html/shadow/DateTimeFieldElements.h:
        (DateTimeHourFieldElement): Remove valueAsInteger.
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement):
        Make valueAsInteger FINAL.

2013-01-24  Hajime Morrita  <morrita@google.com>

        Refactoring: The name ContainerNode::removeChildren and ContainerNde::removeAllChilren() is confusing
        https://bugs.webkit.org/show_bug.cgi?id=107640

        Reviewed by Eric Seidel.

        This change renames unsafe removeAllChilren() function to
        removeDetachedChildren() and move it to protected visibility.

        In theory, the removed nodes should be detached() before. But some
        tests violates that assumption. It should be fixed.

        No new tests. No behavior change.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeDetachedChildren):
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::~ContainerNode):
        * dom/ContainerNode.h:
        (ContainerNode):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::removeDetachedChildrenInContainer):
        (WebCore):
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::~ShadowRoot):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::detach):
        * svg/SVGElementInstance.h:
        (SVGElementInstance):

2013-01-24  Keishi Hattori  <keishi@webkit.org>

        Adjust design of the Calendar Picker
        https://bugs.webkit.org/show_bug.cgi?id=107507

        Reviewed by Kent Tamura.

        Covered by existing calendar picker appearance tests.

        * Resources/pagepopups/calendarPicker.css:
        (body): Use bigger font.
        (.calendar-picker):
        (.month-selector):
        (.month-selector svg):
        (.month-selector-popup-contents):
        (.year-month-button-left .year-month-button):
        (.year-month-button-right .year-month-button):
        (.days-area-container):
        (.days-area):
        (.day-label):
        (.day):
        (.available):
        (.month-mode .day):
        (.today-clear-area .today-button):
        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker.prototype.fixWindowSize): Calculate the width of today-clear-area too.
        (YearMonthController.prototype.attachTo):
        (YearMonthController.prototype._attachLeftButtonsTo): Use svg icons inside buttons.
        (YearMonthController.prototype._attachRightButtonsTo): Use svg icons inside buttons.
        (YearMonthController.prototype.setMonth):
        (YearMonthController.prototype._handleButtonClick):
        * Resources/pagepopups/calendarPickerMac.css: Removed.
        * Resources/pagepopups/chromium/calendarPickerChromium.css: Added.
        (.year-month-button):
        (.days-area-container:focus):
        * Resources/pagepopups/chromium/pickerCommonChromium.css: Added. Use Chrome-style buttons.
        (button):
        (:enabled:hover:-webkit-any(button, input[type='button'])):
        (:enabled:active:-webkit-any(button, input[type='button'])):
        (:disabled:-webkit-any(button, input[type='button'])):
        (:enabled:focus:-webkit-any(button, input[type='button'])):
        * WebCore.gyp/WebCore.gyp: Include pickerCommonChromium.css and calendarPickerChromium.css.
        * rendering/RenderTheme.cpp: Remove extraCalendarPickerStyleSheet
        * rendering/RenderTheme.h: Ditto.
        * rendering/RenderThemeChromiumMac.h: Ditto.
        * rendering/RenderThemeChromiumMac.mm: Ditto.
        (WebCore):

2013-01-24  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix.

        * page/History.h:
        (WebCore):

2013-01-24  Beth Dakin  <bdakin@apple.com>

        Fixed elements sometimes marked out-of-view if you have rubber-banded too far, 
        affects flickr.com
        https://bugs.webkit.org/show_bug.cgi?id=107882
        -and corresponding-
        <rdar://problem/13065897>

        Reviewed by Simon Fraser.

        It is possible to rubber band so far that our fixed object appears to be outside 
        of the visibleContentArea(). We should use the 
        viewportConstrainedVisibleContentRect() since that is what fixed objects are 
        positioned based on anyway. 

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

2013-01-24  Kentaro Hara  <haraken@chromium.org>

        Unreviewed build fix.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::state):

2013-01-24  Julien Brianceau  <jbrianceau@nds.com>

        NPN_InitializeVariantWithStringCopy is wrong for platforms returning NULL from malloc(0)
        https://bugs.webkit.org/show_bug.cgi?id=96272

        Reviewed by Alexey Proskuryakov.

        No new tests. This is platform dependent.

        * bridge/npruntime.cpp:
        (NPN_InitializeVariantWithStringCopy):

2013-01-24  Christian Biesinger  <cbiesinger@chromium.org>

        resize property doesn't work on iframes
        https://bugs.webkit.org/show_bug.cgi?id=9221

        Reviewed by Eric Seidel.

        Test: fast/css/resize-corner-tracking-transformed-iframe.html
        and fast/css/resize-corner-tracking.html

        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::requiresLayer):
        (WebCore):
        * rendering/RenderIFrame.h:
        <iframe>s need a layer to be resizable, so make requiresLayer return
        true if the css property is set.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::canResize):
        (WebCore):
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::isPointInResizeControl):
        (WebCore::RenderLayer::hitTestOverflowControls):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderLayer.h:
        (RenderLayer):
        Add a new canResize() function and use it instead of hasOverflowClip()
        to check whether resizing should be allowed (there's still the
        additional check of style()->resize() != RESIZE_NONE, of course)

        Make hitTestLayer return |this| when the point is inside the
        resizer rectangle.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        Call layer()->paintResizer() to actually paint the resizer.

2013-01-24  Kentaro Hara  <haraken@chromium.org>

        Regression(r107058): Use-after-free in SerializedScriptValue::deserialize
        https://bugs.webkit.org/show_bug.cgi?id=107792

        Reviewed by Abhishek Arya.

        Imagine the following call path:

        (1) history.state is accessed.
        (2) V8History::stateAccessorGetter() calls History::state(), which calls
        HistoryItem::stateObject().
        (3) HistoryItem holds m_stateObject as RefPtr<SerializedScriptValue>,
        but HistoryItem::stateObject() returns SerializedScriptValue*.
        (4) V8History::stateAccessorGetter calls SerializedScriptValue::deserialize()
        for the SerializedScriptValue* obtained in (3).
        (5) SerializedScriptValue::deserialize() can call history.replaceState()
        in its deserialization process (See the test case in the Chromium bug).
        (6) history.replaceState() replaces HistoryItem::m_stateObject.
        This replacement destructs the original HistoryItem::m_stateObject.
        (7) The current deserialization process can crash due to the premature destruction.

        To avoid the problem, we have to pass PassRefPtr<SerializedScriptValue> around
        instead of SerializedScriptValue*.

        Test: fast/history/replacestate-nocrash.html

        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::stateAccessorGetter):
        * history/HistoryItem.h:
        (WebCore):
        (WebCore::HistoryItem::stateObject):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument):
        * loader/FrameLoader.h:
        * page/History.cpp:
        (WebCore::History::state):
        (WebCore::History::stateInternal):
        * page/History.h:
        (History):

2013-01-24  Beth Dakin  <bdakin@apple.com>

        Some formerly-fixed objects scroll as if they are still fixed
        https://bugs.webkit.org/show_bug.cgi?id=107869

        Reviewed by Simon Fraser.

        Removing nodes need to mark m_hasChangedProperties on the state tree, otherwise 
        they will not be committed to the scrolling tree until something else changes, 
        which could actually take a while. During the delay, the scrolling tree will 
        continue to move around the formerly-fixed object as long as it still has a layer.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::didRemoveNode):

2013-01-24  Arko Saha  <arko@motorola.com>

        Microdata: itemtype attribute must update correctly on adding or removing tokens
        https://bugs.webkit.org/show_bug.cgi?id=106616

        Reviewed by Ryosuke Niwa.

        Added a new class MicroDataAttributeTokenList, it overrides setValue() method of
        DOMSettableTokenList. setValue() is responsible to set the new attribute value for
        a given element.

        Tests: fast/dom/MicroData/microdata-domtokenlist-attribute-add-remove-tokens.html
               fast/dom/MicroData/propertynodelist-add-remove-itemprop-tokens.html
               fast/dom/MicroData/propertynodelist-add-remove-itemref-tokens.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Node.cpp:
        (WebCore::Node::itemProp):
        (WebCore::Node::setItemProp):
        (WebCore::Node::itemRef):
        (WebCore::Node::setItemRef):
        (WebCore::Node::itemType):
        (WebCore::Node::setItemType):
        * dom/NodeRareData.h:
        (WebCore::NodeMicroDataTokenLists::itemProp):
        (WebCore::NodeMicroDataTokenLists::itemRef):
        (WebCore::NodeMicroDataTokenLists::itemType):
        (NodeMicroDataTokenLists):
        * html/DOMSettableTokenList.h: Made the constructor as protected, so that we can
        override setValue() method.
        (DOMSettableTokenList):
        * html/MicroDataAttributeTokenList.cpp: Added.
        (WebCore):
        (WebCore::MicroDataAttributeTokenList::MicroDataAttributeTokenList):
        (WebCore::MicroDataAttributeTokenList::setValueInternal):
        (WebCore::MicroDataAttributeTokenList::setValue): It calls
        DOMSettableTokenList::setValue to set internal tokens and value.
        * html/MicroDataAttributeTokenList.h: Added.
        (WebCore):
        (MicroDataAttributeTokenList):
        (WebCore::MicroDataAttributeTokenList::create):

2013-01-24  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove IDBUpgradeNeededEvent, merge with IDBVersionChangeEvent
        https://bugs.webkit.org/show_bug.cgi?id=107754

        Reviewed by Tony Chang.

        The IndexedDB spec calls deleteDatabase() to fire a "blocked" event with the
        IDBVersionChangeEvent interface which we were doing, but with an older interface - just
        a "version" property. We were already firing an event on "versionchange" with the new
        "oldVersion" and "newVersion" properties, but with an IDBUpgradeNeededEvent interface that
        doesn't exist in the spec. This patch merges the event types to match the spec, including
        that the newVersion property is null when deleting.

        Test: storage/indexeddb/events.html
              storage/indexeddb/deletedatabase-*.html

        * CMakeLists.txt: Remove references to deleted files.
        * GNUmakefile.list.am: Ditto.
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::onVersionChange): Generate IDBVersionChangeEvent.
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onBlocked): Ditto.
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded): Ditto.
        * Modules/indexeddb/IDBUpgradeNeededEvent.cpp: Removed.
        * Modules/indexeddb/IDBUpgradeNeededEvent.h: Removed.
        * Modules/indexeddb/IDBUpgradeNeededEvent.idl: Removed.
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::create): Take IDBAny's as old/new versions
        may be integers, strings (for legacy databases), or null (when deleting).
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        (IDBVersionChangeEvent): Remove version property.
        (WebCore::IDBVersionChangeEvent::oldVersion): Added new property.
        (WebCore::IDBVersionChangeEvent::newVersion): Added new property.
        * Modules/indexeddb/IDBVersionChangeEvent.idl: Updated properties.
        * WebCore.gypi: Remove references to deleted files.
        * dom/EventNames.in: Ditto.

2013-01-24  Pratik Solanki  <psolanki@apple.com>

        CertificateChain functions in ResourceResponse should be inside proper ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=107865

        Reviewed by Brady Eidson.

        Move ResourceResponse::setCertificateChain() and ResourceResponse::certificateChain()
        be under the same ifdefs that they are declared in.

        No new tests because no change in functionality.

        * platform/network/mac/ResourceResponseMac.mm:

2013-01-24  Leo Yang  <leoyang@rim.com>

        [BlackBerry] Display HTML5 Appcache manifest
        https://bugs.webkit.org/show_bug.cgi?id=107858

        Reviewed by Yong Li.
        Reviewed internally by Jeff Rogers.

        MIME alias no new tests.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::mimeTypeAssociationMap):

2013-01-24  Mike West  <mkwst@chromium.org>

        Web Inspector: "XHR loaded!" messages should be DebugMessageLevel.
        https://bugs.webkit.org/show_bug.cgi?id=107817

        Reviewed by Pavel Feldman.

        The 'XHR finished loading:' message is currently sent at
        LogMessageLevel. Upon reflection, the only messages that should be
        sent at that level are messages the developer generates herself via
        'console.*' calls. This message is better categorized as 'debug'.

        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
            Change the message to DebugMessageLevel.

2013-01-24  James Robinson  <jamesr@chromium.org>

        REGRESSION(140571): Crash in ScrollingCoordinator::mainThreadScrollingReasons during Frame::createView
        https://bugs.webkit.org/show_bug.cgi?id=107868

        Reviewed by Beth Dakin.

        When using fixed layout mode, it's possible to update the scrollbar state of the main FrameView before
        it's set on the main frame, which can lead to calling in to ScrollingCoordinator to compute main thread
        scrolling regions when m_page->mainFrame()->view() is 0. In this case, we don't have any main
        thread scrolling reasons and should just return 0.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::mainThreadScrollingReasons):

2013-01-24  Martin Robinson  <mrobinson@igalia.com>

        Abstract the logic for appending a UChar32 onto StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=107505

        Reviewed by Darin Adler.

        * css/CSSOMUtils.cpp:
        (WebCore::serializeCharacter): Use the new StringBuilder append.
        (WebCore::serializeIdentifier): Ditto.
        (WebCore::serializeString): Ditto.
        * html/parser/HTMLEntityParser.cpp:
        (WebCore::HTMLEntityParser::consumeNamedEntity): Ditto.
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::createStringWithMirroredCharacters): Ditto.
        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::consumeCharacterReference): Ditto.
        * xml/parser/XMLCharacterReferenceParser.cpp: Remove an older helper
        superseded by StringBuilder::append.

2013-01-24  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to GetTemplate() in v8/*.cpp
        https://bugs.webkit.org/show_bug.cgi?id=107789

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::retrieveFrameWithGlobalObjectCheck):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toDOMWindow):
        (WebCore::toScriptExecutionContext):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::clearForNavigation):
        * bindings/v8/V8Initializer.cpp:
        (WebCore::findFrame):
        (WebCore::failedAccessCheckCallbackInMainThread):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::controllerForContext):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::eventAccessorGetter):
        (WebCore::V8DOMWindow::eventAccessorSetter):
        (WebCore::V8DOMWindow::toStringCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAccessorGetter):
        (WebCore::V8Location::replaceAccessorGetter):
        (WebCore::V8Location::assignAccessorGetter):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallback):

2013-01-24  Emil A Eklund  <eae@chromium.org>

        [svg] Remove unnecessary rounding in SVGRootInlineBox::layoutRootBox
        https://bugs.webkit.org/show_bug.cgi?id=107771

        Reviewed by Levi Weintraub.
        
        SVGRootInlineBox::layoutRootBox rounds the location and size of
        the container to the nearest enclosing integer values. Now that
        layout uses subpixel positioning this is no longer needed and
        results in undesirable rounding. For high-dpi screens in
        particular this is especially noticeable as it is rounded to
        "pixels" which can map to two our more device pixels.

        Test: svg/text/text-rect-precision.html

        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutRootBox):
        Change from enclosingIntRect to enclosingLayoutRect to align to
        the closest containing LayoutRect now that layout is done using
        subpixel precision.

2013-01-24  Philip Rogers  <pdr@google.com>

        Preserve container size requests across image loads
        https://bugs.webkit.org/show_bug.cgi?id=106733

        Reviewed by Tim Horton.

        Some images, such as SVG with relative dimensions, depend on the renderer's container size.
        r137981 introduced the ability to store pending container size requests that are made
        after the image element lays out but before the image loads. Before this patch, cached
        images could discard these pending container size requests during cache revalidation.

        During a cached image load, two CachedImages exist: the image in cache and a new CachedImage
        that will be used if the cache is stale. Pending container size requests are stored
        on the second cached image which is discarded if a 304 not modified response is received.

        This patch modifies the switchClientsToRevalidatedResource logic to maintain pending
        container size requests. This fixes a bug where cached SVG images would be sized
        incorrectly.

        Test: http/tests/svg/cached-image-sizing.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::switchClientsToRevalidatedResource):

            In this virtual call we special-case images with pending size requests and
            transfer these requests to the revalidating resource. Note that all container size
            requests received before revalidation will be pending because the image has not loaded.
            Therefore, there is no risk of discarding non-pending container size requests.

        (WebCore):
        * loader/cache/CachedImage.h:
        (CachedImage):
        * loader/cache/CachedResource.h:
        (CachedResource):

2013-01-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140296.
        http://trac.webkit.org/changeset/140296
        https://bugs.webkit.org/show_bug.cgi?id=107857

        Cause several regresssions (Requested by smfr on #webkit).

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

2013-01-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        Objective-C API: Rename JSValue.h/APIJSValue.h to JSCJSValue.h/JSValue.h
        https://bugs.webkit.org/show_bug.cgi?id=107327

        Reviewed by Filip Pizlo.

        No new tests.

        We're renaming these two files, so we have to replace the names everywhere.

        * ForwardingHeaders/runtime/JSCJSValue.h: Copied from Source/WebCore/ForwardingHeaders/runtime/JSValue.h.
        * ForwardingHeaders/runtime/JSValue.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSArrayBufferViewHelper.h:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        * bindings/js/JSIntentConstructor.cpp:
        * bindings/js/JSMessagePortCustom.h:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JavaScriptCallFrame.cpp:
        * bindings/js/ScriptCallStackFactory.cpp:
        * bindings/js/ScriptValue.h:
        * bindings/js/SerializedScriptValue.h:
        * bindings/objc/WebScriptObjectPrivate.h:
        * bridge/c/c_utility.h:
        * bridge/testbindings.cpp:
        * bridge/testbindings.mm:
        * bridge/testqtbindings.cpp:
        * plugins/PluginView.cpp:
        * plugins/blackberry/PluginViewBlackBerry.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.mm:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2013-01-24  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix for Mac/Lion.

        Protect Lion from the absence of VideoToolbox.h by wrapping in #if
        guards.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

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

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

        Reviewed by Sam Weinig.

        Make StorageNamespace.h and StorageArea.h private headers.

        * WebCore.xcodeproj/project.pbxproj:

2013-01-24  Tony Chang  <tony@chromium.org>

        Remove document as a parameter from a few internals methods
        https://bugs.webkit.org/show_bug.cgi?id=107757

        Reviewed by Hajime Morita.

        Remove document as a parameter since there's already one associated with internals.

        No new tests, this refactors some testing code and is covered by
        exisiting tests.

        * testing/Internals.cpp:
        (WebCore::Internals::isPreloaded):
        (WebCore::Internals::createContentElement):
        (WebCore::Internals::absoluteCaretBounds):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-01-24  Mike West  <mkwst@chromium.org>

        Web Inspector: 'console.debug' should generate messages at DebugMessageLevel.
        https://bugs.webkit.org/show_bug.cgi?id=107816

        Reviewed by Pavel Feldman.

        'console.debug' is currently aliased to 'console.log'. Since we now
        render debug-level messages differently to log messages, we should use
        the proper message level for 'console.debug'.

        * page/Console.cpp:
        (WebCore::Console::debug):
            Replace the alias to 'console.log' with message creation at
            DebugMessageLevel.

2013-01-24  Dima Gorbik  <dgorbik@apple.com>

        Implement :past pseudo class for the WebVTT ::cue pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=105482

        Reviewed by Eric Carlson.

        It is good to have a designated pseudo class for this, though same could
        be achieved by using a combination of ::cue and ::cue(:future).
        Tests also check that nested timestamps work properly.

        Test: media/track/track-css-matching-timestamps.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):

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

        Mac: Avoid using k32BGRAPixelFormat on certain platforms.
        https://bugs.webkit.org/show_bug.cgi?id=107732

        Reviewed by Eric Carlson.

        Using a AVPlayerItemVideoOutput to generate ARGB pixel buffers is a potential performance
        hit, as the AVPlayerItemVideoOutput will send YUV buffers through a VTPixeBufferTransferSession
        to convert them to ARGB regardless of whether or not a given buffer will be used. Instead,
        ask the AVPlayerItemVideoOutput for pixel buffers in the decoder's native pixel format and use
        the VTPixelBufferTransferSession to convert to ARGB only those pixel buffers which were actually
        requested.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput): Ask for the decoder's native
            pixel format.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createPixelBuffer): Lazily create a VTPixelTransferSession
            and convert output pixel buffers to k32BGRAPixelFormat.

2013-01-24  Christian Biesinger  <cbiesinger@chromium.org>

        Convert RenderFullScreen to use the non-deprecated flexbox
        https://bugs.webkit.org/show_bug.cgi?id=107746

        Reviewed by Ojan Vafai.

        Tests: covered by existing tests in fullscreen/.

        * rendering/RenderFullScreen.h:
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::RenderFullScreen):
        (RenderFullScreen::willBeDestroyed):
        Inherit from RenderFlexibleBox

        (createFullScreenStyle):
        Use the new-style CSS properties (justify-content, etc)

        * css/fullscreen.css:
        (video:-webkit-full-screen, audio:-webkit-full-screen):
        * css/fullscreenQuickTime.css:
        (video:-webkit-full-screen::-webkit-media-controls-panel):
        (video:-webkit-full-screen::-webkit-media-controls-seek-back-button):
        (video:-webkit-full-screen::-webkit-media-controls-return-to-realtime-button):
        (video:-webkit-full-screen::-webkit-media-controls-seek-forward-button):
        * css/mediaControlsBlackBerryFullscreen.css:
        (video:-webkit-full-screen::-webkit-media-controls-panel):
        (video:-webkit-full-screen::-webkit-media-controls-button-group-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-time-display-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-play-button):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-timeline-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-current-time-display):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-time-remaining-display):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-timeline):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-fullscreen-button):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-button-divider):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-button-container, video:-webkit-full-screen::-webkit-media-controls-play-button-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-button-container):
        (video:-webkit-full-screen::-webkit-media-controls-play-button-container):
        (video:-webkit-full-screen::-webkit-media-controls-placeholder):
        * css/mediaControlsQtFullscreen.css:
        (video::-webkit-media-controls-panel):
        (video::-webkit-media-controls-play-button):
        Update fullscreen-related CSS to use the new flexbox

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

        Mac: Video appears in wrong place during pinch operations
        https://bugs.webkit.org/show_bug.cgi?id=107730

        Reviewed by Eric Carlson.

        Send the correct input and output rects, post translation and scaling,
        to the CIContext for drawing.

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

2013-01-24  Max Vujovic  <mvujovic@adobe.com>

        [CSS Filters] CSS opacity property clips filter outsets
        https://bugs.webkit.org/show_bug.cgi?id=106549

        Reviewed by Dirk Schulze.

        Expand the transparencyClipBox for filter outsets and pass the filter output rect instead of
        the input rect to beginTransparencyLayers for clipping. Details below.

        Test: css3/filters/css-opacity-with-drop-shadow.html

        * rendering/RenderLayer.cpp:
        (WebCore):
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
            Replace filter outset calcuation with a call to expandRectForFilterOutsets.
        (WebCore::expandRectForFilterOutsets):
            New method to factor out repeated filter outset calculation code.
        (WebCore::transparencyClipBox):
            After expanding the clip rect for descendants and reflection, expand it for filter
            outsets, so they don't get clipped when we begin a transparency layer.
        (WebCore::RenderLayer::paintLayerContents):
            Pass paintingInfo.paintDirtyRect instead of localPaintingInfo.paintDirtyRect to
            beginTransparencyLayers for clipping. localPaintingInfo.paintDirtyRect (aka the filter
            input rect) does not contain filter outsets, so they would get clipped. Now, we pass
            paintingInfo.paintDirtyRect (the filter output rect), which includes the filter outsets.
        (WebCore::RenderLayer::calculateLayerBounds):
            Replace filter outset calcuation with a call to expandRectForFilterOutsets.
        * rendering/RenderLayer.h:
        (RenderLayer):

2013-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Fix a typo after r139838.

        * dom/NodeRareData.h:
        (NodeRareData):

2013-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Abandoned Memory: SVGFontElement and Corresponding SVGDocument Never Deconstructed
        https://bugs.webkit.org/show_bug.cgi?id=66438

        Reviewed by Dirk Schulze.

        The memory leak was caused by SVGFontFaceElement storing its own parent in a RefPtr.

        Fixed the bug by storing a raw pointer instead, and clearing the pointer in removedFrom
        when the node detached from the document. Also added several sanity check assertions.

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::associatedFontElement):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::insertedInto):
        (WebCore::SVGFontFaceElement::removedFrom):
        * svg/SVGFontFaceElement.h:
        (SVGFontFaceElement):

2013-01-22  Robert Hogan  <robert@webkit.org>

        Inline Containing Only Collapsed Whitespace Not Getting a Linebox
        https://bugs.webkit.org/show_bug.cgi?id=31397

        Reviewed by David Hyatt.

        Treat inlines containing only collapsed whitespace as empty. This allows them
        to get a linebox.

        Test: fast/inline/inline-containing-collapsed-whitespace-treated-as-empty.html

        * dom/Position.cpp:
        (WebCore::boundingBoxLogicalHeight):
        (WebCore):
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        * rendering/InlineIterator.h:
        (WebCore::isEmptyInline):
        (WebCore):
        (WebCore::bidiNextShared):
        (WebCore::bidiFirstSkippingEmptyInlines):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::alwaysRequiresLineBox):
        (WebCore::requiresLineBox):
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        (RenderText):

2013-01-24  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: expand more chunks in DTE
        https://bugs.webkit.org/show_bug.cgi?id=107698

        Reviewed by Pavel Feldman.

        Mock DefaultTextEditor visible area as if it is slightly larger than real one and
        do all chunk expandings and repaints based on this new area.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorChunkedPanel.prototype.findVisibleChunks):

2013-01-24  Victor Jaquez  <vjaquez@igalia.com>

        [GStreamer] Implement setPreservesPitch()
        https://bugs.webkit.org/show_bug.cgi?id=31155

        Enables audio pitch preservation by using the scaletempo GStreamer
        element when required by the MediaPlayer.

        Reviewed by Philippe Normand.

        No new tests, but a layout test shall be implemented at some point
        using WebAudio API.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setPreservesPitch):
        (WebCore):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2013-01-24  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Removing deleted files from WebCore/Target.pri after r140399.
        https://bugs.webkit.org/show_bug.cgi?id=107815

        Reviewed by Csaba Osztrogonác.

        * Target.pri:

2013-01-24  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the Qt Windows build

        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::decodeNamedEntity): Use a reinterpret_cast to const QChar* like StringQt.cpp.

2013-01-24  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] REGRESSION: stack traces in the replay log are gone
        https://bugs.webkit.org/show_bug.cgi?id=107805

        Reviewed by Pavel Feldman.

        The V8's Error.prepareStackTrace is now called from the Error.captureStackTrace
        function instead of the "stack" getter function.

        Test: inspector/profiler/canvas2d/canvas-stack-trace.html

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2013-01-23  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] UI: add a selector to capture a single canvas frame vs consecutive frames
        https://bugs.webkit.org/show_bug.cgi?id=107688

        Reviewed by Pavel Feldman.

        Allow capturing several canvas frames in a row.

        * English.lproj/localizedStrings.js:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::traceLog):
        * inspector/InjectedScriptCanvasModule.h:
        (InjectedScriptCanvasModule):
        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::getTraceLog):
        * inspector/InspectorCanvasAgent.h:
        (InspectorCanvasAgent):
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype._didReceiveTraceLog):
        (WebInspector.CanvasProfileView.prototype._requestTraceLog):
        (WebInspector.CanvasProfileType):
        (WebInspector.CanvasProfileType.prototype.get statusBarItems):
        (WebInspector.CanvasProfileType.prototype.get buttonTooltip):
        (WebInspector.CanvasProfileType.prototype.buttonClicked):
        (WebInspector.CanvasProfileType.prototype._runSingleFrameCapturing):
        (WebInspector.CanvasProfileType.prototype._startFrameCapturing):
        (WebInspector.CanvasProfileType.prototype._stopFrameCapturing.didStopCapturing):
        (WebInspector.CanvasProfileType.prototype._stopFrameCapturing):
        (WebInspector.CanvasProfileType.prototype._didStartCapturingFrame):
        (WebInspector.CanvasProfileType.prototype.setRecordingProfile):
        (WebInspector.CanvasProfileType.prototype._isSingleFrameMode):
        (WebInspector.CanvasProfileHeader):
        (WebInspector.CanvasProfileHeader.prototype._updateCapturingStatus):
        (WebInspector.CanvasProfileHeader.prototype._requestCapturingStatus):
        * inspector/front-end/ProfileLauncherView.js:
        (WebInspector.ProfileLauncherView):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype._onProfileTypeSelected):
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype._showLauncherView):
        (WebInspector.ProfilesPanel.prototype.showProfile):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfilesPanel.prototype._resize):

2013-01-24  Andreas Kling  <akling@apple.com>

        Add CSSSelectorList::isValid().
        <http://webkit.org/b/107809>

        Reviewed by Antti Koivisto.

        Add an isValid() method to CSSSelectorList and use that where applicable instead of checking
        if first() is a null pointer.

        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        * css/CSSSelectorList.cpp:
        * css/CSSSelectorList.h:
        (WebCore::CSSSelectorList::isValid):
        (WebCore::CSSSelectorList::first):
        (CSSSelectorList):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::validateSelect):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::checkStyleRuleSelector):

2013-01-24  Kai Koehne  <kai.koehne@digia.com>

        [Qt] Webkit debug build links against release binaries of ANGLE libEGL, libGLESv2
        https://bugs.webkit.org/show_bug.cgi?id=106217

        Reviewed by Jocelyn Turcotte.

        Use libEGLd, libEGLSv2d if qtbase was compiled with ANGLE.

        * WebCore.pri: Mirror logic of qtbase\mkspecs\features\win32\opengl.prf

2013-01-24  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Unreviewed build fix.

        Do not include the header file WebKitDOMPerformanceEntryList.h in
        the build sources because we do not want the DOM bindings
        generator to include it in webkitdomdefes.h twice.

        * bindings/gobject/GNUmakefile.am:

2013-01-24  Julien BRIANCEAU   <jbrianceau@nds.com>

        Fix Qt build (KO since r140610), typo error for QString::fromUtf16 function.
        https://bugs.webkit.org/show_bug.cgi?id=107803

        Reviewed by Andreas Kling.

        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::decodeNamedEntity):

2013-01-24  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: breakpoints are not restored upon reload for scripts with script mapping.
        https://bugs.webkit.org/show_bug.cgi?id=107799

        The problem is that source mapping is set after UISourceCode gets into the workspace.
        Breakpoint manager will now only restore breakpoints upon setting the source maps.

        Reviewed by Alexander Pavlov.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._uiSourceCodeAdded):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeMappingChanged):
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.get addScript.get this):
        (WebInspector.CompilerScriptMapping.prototype.get addScript):

2013-01-24  Kent Tamura  <tkent@chromium.org>

        Refactoring: Use AtomicString for an InputType::create argument
        https://bugs.webkit.org/show_bug.cgi?id=107791

        Reviewed by Kentaro Hara.

        A string passed to InputType::create is a 'type' attribute value, which
        is an AtomicString. Also, InputTypeFactoryMap is created with members of
        InputTypeName, which are AtomicStrings. We had better use AtomicStrings
        for them.

        No new tests. This is just a refactoring.

        * html/InputType.cpp:
        Change the key type of InputTypeFactoryMap from String to AtomicString.
        (WebCore::InputType::create):
        Change an argument type from const String& to const AtomicString&.
        * html/InputType.h:
        (InputType): Ditto.

2013-01-24  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Build fix.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::isDOMWrapper):

2013-01-24  Andreas Kling  <akling@apple.com>

        AX: Fix the debug build after r140658. (Constructor initializer order.)

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

2013-01-24  Hajime Morrita  <morrita@google.com>

        There are a few of wrong removeAllChildren() call
        https://bugs.webkit.org/show_bug.cgi?id=107790

        Reviewed by Ryosuke Niwa.

        removeAllChildren() is designed for trashing deleting children out.
        It doesn't detach() children and could have possible leak.
        This change replaces such removeAllChildren() usage with safer removeChildren().

        No new tests. Covered by existing tests.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2013-01-24  Dominic Mazzoni  <dmazzoni@google.com>

        AX: should init an AXObject only after AXObjectCache has added it
        https://bugs.webkit.org/show_bug.cgi?id=107533

        Reviewed by Chris Fleizach.

        Initialize each AXObject after the AXObjectCache has
        finished adding it to its hash maps, so that it's
        impossible for initialization of an AXObject to result in
        exploring the tree and creating another AXObject instance
        that points to the same renderer / node.

        Test: accessibility/duplicate-axrenderobject-crash.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::create):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::create):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::create):
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::create):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::create):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::create):
        (WebCore::AccessibilityMediaControlsContainer::create):
        (WebCore::AccessibilityMediaTimeline::create):
        (WebCore::AccessibilityMediaTimeDisplay::create):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::create):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::create):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::init):
        (AccessibilityObject):
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::create):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::create):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
            assert that the object has been initialized
        * accessibility/AccessibilitySVGRoot.cpp:
        (WebCore::AccessibilitySVGRoot::create):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::create):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::create):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::create):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::create):

2013-01-23  Kentaro Hara  <haraken@chromium.org>

        Implement MouseEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=107630

        Reviewed by Adam Barth.

        Spec: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm

        The MouseEvent constructor should be implemented under a DOM4_EVENTS_CONSTRUCTOR flag.
        This significantly simplifies JavaScript code to construct a MouseEvent.

        Before:
          event = document.createEvent("MouseEvents");
          event.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);

        After:
          event = new MouseEvent("click");

        Test: fast/events/constructors/mouse-event-constructor.html

        * bindings/scripts/CodeGenerator.pm:
        (IsSubType):
        (IsInheritExtendedAttribute):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        (WebCore::V8Float64Array::createWrapper):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        (WebCore::V8TestActiveDOMObject::createWrapper):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        (WebCore::V8TestCustomNamedGetter::createWrapper):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        (WebCore::V8TestEventConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        (WebCore::V8TestEventTarget::toEventTarget):
        (WebCore::V8TestEventTarget::createWrapper):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore):
        (WebCore::V8TestException::createWrapper):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        (WebCore::V8TestInterface::toActiveDOMObject):
        (WebCore::V8TestInterface::createWrapper):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        (WebCore::V8TestMediaQueryListListener::createWrapper):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        (WebCore::V8TestNamedConstructor::toActiveDOMObject):
        (WebCore::V8TestNamedConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore):
        (WebCore::V8TestNode::toEventTarget):
        (WebCore::V8TestNode::createWrapper):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        (WebCore::V8TestObj::createWrapper):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore):
        (WebCore::V8TestOverloadedConstructors::createWrapper):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::V8TestSerializedScriptValueInterface::createWrapper):
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        (WebCore):
        * bindings/v8/Dictionary.h:
        (Dictionary):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::isDOMWrapper):
        (WebCore):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WebCore::WrapperTypeInfo::toEventTarget):
        (WrapperTypeInfo):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventInit::MouseEventInit):
        (WebCore):
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        * dom/MouseEvent.h:
        (MouseEventInit):
        (WebCore):
        (MouseEvent):
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::button):
        (WebCore::MouseEvent::buttonDown):
        (WebCore::MouseEvent::relatedTarget):
        (WebCore::MouseEvent::setRelatedTarget):
        (WebCore::MouseEvent::clipboard):
        (WebCore::MouseEvent::dataTransfer):
        * dom/MouseEvent.idl:

2013-01-23  Kent Tamura  <tkent@chromium.org>

        Add form-related instrumentations, and support 33+ features in FeatureObserver
        https://bugs.webkit.org/show_bug.cgi?id=107770

        Reviewed by Kentaro Hara.

        No new tests. This doesn't make behavior changes.

        * page/FeatureObserver.h:
        - Add form-related features.
        - Add a Document* version of observe().
        - Use BitVector to represent features to support 33+ features.
        (WebCore::FeatureObserver::didObserve):
        (FeatureObserver):
        * page/FeatureObserver.cpp:
        (WebCore::FeatureObserver::FeatureObserver):
        (WebCore::FeatureObserver::~FeatureObserver):
        (WebCore::FeatureObserver::observe):

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::create): Calls FeatureObserver::observe.
        * html/DateInputType.cpp:
        (WebCore::DateInputType::create): Ditto.
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::create): Ditto.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::create): Ditto.
        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::create): Ditto.
        * html/HTMLDataListElement.cpp:
        (WebCore::HTMLDataListElement::create): Ditto.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseAttribute): Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute): Ditto.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::parseAttribute): Ditto.
        * html/InputType.cpp:
        (WebCore::InputType::create):
        Record type=datetime and type=week even if these types are not enabled.
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::create): Calls FeatureObserver::observe.
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::create): Ditto.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::create): Ditto.
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::create): Ditto.
        * html/TelephoneInputType.cpp:
        (WebCore::TelephoneInputType::create): Ditto.
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::create): Ditto.
        * html/URLInputType.cpp:
        (WebCore::URLInputType::create): Ditto.
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::create): Ditto.

2013-01-23  Ken Kania  <kkania@chromium.org>

        [Inspector] Add events for tracking page loads and scheduled navigations.
        https://bugs.webkit.org/show_bug.cgi?id=104168

        Reviewed by Pavel Feldman.

        These events are needed for clients who need to be aware of when a page is
        navigating or about to navigate. Some clients may wish to prevent interaction
        with the page during this time. Two of the new events track loading start and
        stop, as measured by the ProgressTracker. The other two events track when a
        page has a new scheduled navigation and when it no longer has a scheduled
        navigation. These latter two events won't allow the client to determine if
        a load is going to happen in all circumstances, but is sufficient for many cases.
        Make sure we hold a reference to the frame in NavigationScheduler::timerFired
        in case the redirect causes the frame to be detached.

        Also, minor update to InspectorInputAgent::dispatchMouseEvent to reorder params
        to match dispatchKeyEvent.

        Tests: inspector-protocol/page/frameScheduledNavigation.html
               inspector-protocol/page/frameStartedLoading.html

        * inspector/Inspector.json:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::dispatchMouseEvent):
        * inspector/InspectorInputAgent.h:
        (InspectorInputAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::frameStartedLoadingImpl):
        (WebCore::InspectorInstrumentation::frameStoppedLoadingImpl):
        (WebCore::InspectorInstrumentation::frameScheduledNavigationImpl):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigationImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        (WebCore):
        (WebCore::InspectorInstrumentation::frameStoppedLoading):
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameStartedLoading):
        (WebCore):
        (WebCore::InspectorPageAgent::frameStoppedLoading):
        (WebCore::InspectorPageAgent::frameScheduledNavigation):
        (WebCore::InspectorPageAgent::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.PageDispatcher.prototype.frameDetached):
        (WebInspector.PageDispatcher.prototype.frameStartedLoading):
        (WebInspector.PageDispatcher.prototype.frameStoppedLoading):
        (WebInspector.PageDispatcher.prototype.frameScheduledNavigation):
        (WebInspector.PageDispatcher.prototype.frameClearedScheduledNavigation):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::clear):
        (WebCore::NavigationScheduler::timerFired):
        (WebCore::NavigationScheduler::startTimer):
        (WebCore::NavigationScheduler::cancel):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):

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

        Avoid creating background layers on pages with a fixed background, but no image
        https://bugs.webkit.org/show_bug.cgi?id=107783
        <rdar://problem/13074450>

        Reviewed by Beth Dakin.
        
        http://www.nme.com has background-attachment: fixed on the <body>, but
        not background image. In that case there's no point making a layer
        for the fixed root background.

        Test: platform/mac/tiled-drawing/fixed-background/fixed-background-no-image.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::allLayersAreFixed): Check to see if we have an image, as well
        as fixed attachment.

2013-01-23  Wei Jia  <wjia@chromium.org>

        Enable autoplay when <video>'s src is from media stream
        https://bugs.webkit.org/show_bug.cgi?id=105224

        Reviewed by Eric Carlson.

        Enable autoplay when <video>'s src is from media stream. This would avoid requesting multiple gestures when <video> is used for WebRTC.
        The test is done by modifying platform/chromium/media/video-capture-preview.html.

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

2013-01-23  Roger Fong  <roger_fong@apple.com>

        Remove ForwardingHeaders/wtf from WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=107723

        The folders are empty, nothings actually being copied over anymore from the ForwardingHeaders/wtf folder.

        Reviewed by Benjamin Poulain.

        * ForwardingHeaders/wtf: Removed.
        * ForwardingHeaders/wtf/dtoa: Removed.
        * ForwardingHeaders/wtf/text: Removed.
        * ForwardingHeaders/wtf/unicode: Removed.
        * ForwardingHeaders/wtf/unicode/icu: Removed.
        * ForwardingHeaders/wtf/unicode/wince: Removed.
        * ForwardingHeaders/wtf/url: Removed.
        * WebCore.vcproj/copyForwardingHeaders.cmd:

2013-01-23  Hayato Ito  <hayato@chromium.org>

        Group parameters (firstRuleIndex and lastRuleIndex) into a parameter object, RuleRange.
        https://bugs.webkit.org/show_bug.cgi?id=107095

        Reviewed by Darin Adler.

        This is a continued effort after r139817.

        Factoring, no change in behavior.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::matchHostRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::RuleRange::RuleRange):
        (RuleRange): Newly introduced to group parameters.
        (StyleResolver):
        (WebCore::StyleResolver::MatchRanges::UARuleRange):
        (WebCore::StyleResolver::MatchRanges::authorRuleRange):
        (WebCore::StyleResolver::MatchRanges::userRuleRange):

2013-01-23  Luke Macpherson   <macpherson@chromium.org>

        Support variables inside -webkit-box-reflect CSS property.
        https://bugs.webkit.org/show_bug.cgi?id=106856

        Reviewed by Tony Chang.

        The primary change is to make the direction parameter a CSSPrimitiveValue style ident,
        so that it can also be a variable reference.

        Covered by existing LayoutTests/compositing/reflections/ tests.
        Added Test: fast/css/variables/var-inside-box-reflect.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForReflection):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseReflect):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore):
        (WebCore::CSSPrimitiveValue::operator CSSReflectionDirection):
        (WebCore::CSSPrimitiveValue::convertToLength):
        * css/CSSReflectValue.cpp:
        (WebCore::CSSReflectValue::customCssText):
        Use String addition operator instead of StringBuilder.
        (WebCore):
        (WebCore::CSSReflectValue::customSerializeResolvingVariables):
        Use String addition operator instead of StringBuilder.
        * css/CSSReflectValue.h:
        (WebCore::CSSReflectValue::create):
        (WebCore::CSSReflectValue::direction):
        (CSSReflectValue):
        (WebCore::CSSReflectValue::CSSReflectValue):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::serializeResolvingVariables):
        * css/StyleResolver.cpp:
        (WebCore::hasVariableReference):
        (WebCore::StyleResolver::applyProperty):

2013-01-23  Abhishek Arya  <inferno@chromium.org>

        Add ASSERT_WITH_SECURITY_IMPLICATION to detect bad casts in rendering
        https://bugs.webkit.org/show_bug.cgi?id=107743

        Reviewed by Eric Seidel.

        * rendering/InlineFlowBox.h:
        (WebCore::toInlineFlowBox):
        * rendering/RenderBR.h:
        (WebCore::toRenderBR):
        * rendering/RenderBlock.h:
        (WebCore::toRenderBlock):
        * rendering/RenderBox.h:
        (WebCore::toRenderBox):
        * rendering/RenderBoxModelObject.h:
        (WebCore::toRenderBoxModelObject):
        * rendering/RenderButton.h:
        (WebCore::toRenderButton):
        * rendering/RenderCombineText.h:
        (WebCore::toRenderCombineText):
        * rendering/RenderCounter.h:
        (WebCore::toRenderCounter):
        * rendering/RenderDetailsMarker.h:
        (WebCore::toRenderDetailsMarker):
        * rendering/RenderEmbeddedObject.h:
        (WebCore::toRenderEmbeddedObject):
        * rendering/RenderFieldset.h:
        (WebCore::toRenderFieldset):
        * rendering/RenderFileUploadControl.h:
        (WebCore::toRenderFileUploadControl):
        * rendering/RenderFlowThread.h:
        (WebCore::toRenderFlowThread):
        * rendering/RenderFrame.h:
        (WebCore::toRenderFrame):
        * rendering/RenderFrameSet.h:
        (WebCore::toRenderFrameSet):
        * rendering/RenderFullScreen.h:
        (WebCore::toRenderFullScreen):
        * rendering/RenderIFrame.h:
        (WebCore::toRenderIFrame):
        * rendering/RenderImage.h:
        (WebCore::toRenderImage):
        * rendering/RenderInline.h:
        (WebCore::toRenderInline):
        * rendering/RenderLayerModelObject.h:
        (WebCore::toRenderLayerModelObject):
        * rendering/RenderListBox.h:
        (WebCore::toRenderListBox):
        * rendering/RenderListItem.h:
        (WebCore::toRenderListItem):
        * rendering/RenderListMarker.h:
        (WebCore::toRenderListMarker):
        * rendering/RenderMedia.h:
        (WebCore::toRenderMedia):
        * rendering/RenderMenuList.h:
        (WebCore::toRenderMenuList):
        * rendering/RenderMeter.h:
        (WebCore::toRenderMeter):
        * rendering/RenderMultiColumnBlock.h:
        (WebCore::toRenderMultiColumnBlock):
        * rendering/RenderMultiColumnSet.h:
        (WebCore::toRenderMultiColumnSet):
        * rendering/RenderNamedFlowThread.h:
        (WebCore::toRenderNamedFlowThread):
        * rendering/RenderPart.h:
        (WebCore::toRenderPart):
        * rendering/RenderProgress.h:
        (WebCore::toRenderProgress):
        * rendering/RenderQuote.h:
        (WebCore::toRenderQuote):
        * rendering/RenderRegion.h:
        (WebCore::toRenderRegion):
        * rendering/RenderRubyRun.h:
        (WebCore::toRenderRubyRun):
        * rendering/RenderScrollbarPart.h:
        (WebCore::toRenderScrollbarPart):
        * rendering/RenderSearchField.h:
        (WebCore::toRenderSearchField):
        * rendering/RenderSlider.h:
        (WebCore::toRenderSlider):
        * rendering/RenderSnapshottedPlugIn.h:
        (WebCore::toRenderSnapshottedPlugIn):
        * rendering/RenderTable.h:
        (WebCore::toRenderTable):
        * rendering/RenderTableCaption.h:
        (WebCore::toRenderTableCaption):
        * rendering/RenderTableCell.h:
        (WebCore::toRenderTableCell):
        * rendering/RenderTableCol.h:
        (WebCore::toRenderTableCol):
        * rendering/RenderTableRow.h:
        (WebCore::toRenderTableRow):
        * rendering/RenderTableSection.h:
        (WebCore::toRenderTableSection):
        * rendering/RenderText.h:
        (WebCore::toRenderText):
        * rendering/RenderTextControl.h:
        (WebCore::toRenderTextControl):
        * rendering/RenderTextControlMultiLine.h:
        (WebCore::toRenderTextControlMultiLine):
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::toRenderTextControlSingleLine):
        * rendering/RenderVideo.h:
        (WebCore::toRenderVideo):
        * rendering/RenderView.h:
        (WebCore::toRenderView):
        * rendering/RenderWidget.h:
        (WebCore::toRenderWidget):
        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::toRenderMathMLBlock):
        * rendering/svg/RenderSVGContainer.h:
        (WebCore::toRenderSVGContainer):
        * rendering/svg/RenderSVGGradientStop.h:
        (WebCore::toRenderSVGGradientStop):
        * rendering/svg/RenderSVGImage.h:
        (WebCore::toRenderSVGImage):
        * rendering/svg/RenderSVGInlineText.h:
        (WebCore::toRenderSVGInlineText):
        * rendering/svg/RenderSVGRoot.h:
        (WebCore::toRenderSVGRoot):
        * rendering/svg/RenderSVGShape.h:
        (WebCore::toRenderSVGShape):
        * rendering/svg/RenderSVGText.h:
        (WebCore::toRenderSVGText):

2013-01-23  Elliott Sprehn  <esprehn@gmail.com>

        Don't allocate rare data on every Element on removal
        https://bugs.webkit.org/show_bug.cgi?id=107756

        Reviewed by Eric Seidel.

        We should not allocate an ElementRareData for every element
        in Element::removedFrom. Previously calls to setIsInTopLayer
        would unconditionally call ensureElementRareData(), and this was
        called from Element::removedFrom meaning removing an element
        made the entire subtree suddenly balloon to huge in size as each
        one got an ElementRareData.

        This is a regression from my patch on Bug 103912 where I removed a check
        that avoided this allocation.

        No new tests needed, covered by existing tests.

        * dom/Element.cpp:
        (WebCore::Element::setIsInTopLayer):

2013-01-23  Adam Barth  <abarth@webkit.org>

        BackgroundHTMLParser should use more const references to avoid copy constructors
        https://bugs.webkit.org/show_bug.cgi?id=107763

        Reviewed by Tony Gentilcore.

        I doubt this optimization is visible anywhere, but it's just a nit.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::createPartial):
        * html/parser/BackgroundHTMLParser.h:
        (WebCore::BackgroundHTMLParser::create):
        (BackgroundHTMLParser):

2013-01-23  Abhishek Arya  <inferno@chromium.org>

        Add support for ASSERT_WITH_SECURITY_IMPLICATION.
        https://bugs.webkit.org/show_bug.cgi?id=107699

        Reviewed by Eric Seidel.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserInsertBefore): Use ASSERT_WITH_SECURITY_IMPLICATION
        for document confusion ASSERT(document() == newChild->document())
        (WebCore::ContainerNode::parserAppendChild): same.

2013-01-23  Ian Vollick  <vollick@chromium.org>

        Unreviewed build fix.

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

2013-01-23  Rafael Weinstein  <rafaelw@chromium.org>

        Template element should parse in XHTML just as it does in HTML
        https://bugs.webkit.org/show_bug.cgi?id=106491

        Reviewed by Ryosuke Niwa.

        https://dvcs.w3.org/hg/webcomponents/raw-file/f33622c39c5e/spec/templates/index.html#parsing-xhtml-documents.
        https://dvcs.w3.org/hg/webcomponents/raw-file/f33622c39c5e/spec/templates/index.html#serializing-xhtml-documents.

        This patch modifies the XML parser in two ways: (1) when nodes are created, their owner document is
        the owner document of the current node, rather than the containing document, and (2) when an HTMLTemplateElement
        is encountered, its content document fragment is pushed onto the stack, rather than the element itself, so that children
        are appended to the template content. Also, because XSLT operates on the serialized input document, transforms consider
        template contents to be descendants.

        Tests: fast/dom/HTMLTemplateElement/xhtml-parsing-and-serialization.xml
               fast/xpath/xpath-template-element.html
               fast/xsl/xslt-processor-template.html
               fast/xsl/xslt-xhtml-template.xml

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::enterText):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):

2013-01-23  Tony Gentilcore  <tonyg@chromium.org>

        Teach threaded HTML parser to update InspectorInstrumentation when writing HTML
        https://bugs.webkit.org/show_bug.cgi?id=107755

        Reviewed by Eric Seidel.

        The current length is unused, so it doesn't cause any noticeable behavior difference to not pass it here.

        No new tests because covered by existing tests.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processTokensFromBackgroundParser):

2013-01-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in NativeToJS()
        https://bugs.webkit.org/show_bug.cgi?id=107663

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackImplementation):
        (NativeToJSValue):
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithClass1Param):
        (WebCore::V8TestCallback::callbackWithClass2Param):
        (WebCore::V8TestCallback::callbackWithStringList):
        (WebCore::V8TestCallback::callbackWithBoolean):
        (WebCore::V8TestCallback::callbackRequiresThisToPass):

2013-01-23  Stephanie Lewis  <slewis@apple.com>

        Add ordering for WebCore __DATA.
        https://bugs.webkit.org/show_bug.cgi?id=107765
        <rdar://problem/13019603>

        Rubber stamped by Oliver Hunt.

        No Change in functionality.

        * WebCore.order:

2013-01-23  Benjamin Poulain  <bpoulain@apple.com>

        RenderProgress does not repaint on value change
        https://bugs.webkit.org/show_bug.cgi?id=106977

        Reviewed by Joseph Pecoraro.

        No test because the ouput depends on the code of RenderTheme, and
        we use the platform theme for testing.

        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::updateAnimationState):
        Previously, repaint() was only called on two occasions:
        -On animationTimerFired().
        -In response to updateFromElement() if and only if the RenderTheme start/stop an
         animation previously stopped/running.

        When changing the value of HTMLProgressElement, no repaint was called until
        the next timer fired for the animation.
        This is a problem if:
        -The animation of RenderTheme is slow.
        -If there is no animation (the element is never updated in that case).

2013-01-23  Ian Vollick  <vollick@chromium.org>

        Introduce the "stacking container" concept.
        https://bugs.webkit.org/show_bug.cgi?id=107734

        Reviewed by Simon Fraser.

        A stacking container is treated just like a stacking context. That
        is, it has z-order lists, it and its descendants are stacked as a
        unit, and when the RenderLayerCompositor does its overlap testing,
        the composited regions for all layer lists take effect only once the
        stacking container is done being processed.

        This patch also adds the function RenderLayer::isStackingContainer().
        Currently, this is equivalent to RenderLayer::isStackingContext(),
        but in future, the definition of stacking container will be broadened
        to encompass more than just stacking contexts.

        Other than the addition of this extra function, the patch is mostly
        comprised of name changes. Any code that used to refer to the
        stacking context concept, but didn't necessarily require a stacking
        context in the strict, CSS-sense, was switched to refer to stacking
        container. No functionality was changed.

        No new tests, no change in functionality.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore):
        (WebCore::RenderLayer::updatePagination):
        (WebCore::RenderLayer::canBeStackingContainer):
        (WebCore::RenderLayer::setHasVisibleContent):
        (WebCore::RenderLayer::dirty3DTransformedDescendantStatus):
        (WebCore::RenderLayer::stackingContainer):
        (WebCore::compositingContainer):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::updateNeedsCompositedScrolling):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        (WebCore::RenderLayer::paintPaginatedChildLayer):
        (WebCore::RenderLayer::hitTestPaginatedChildLayer):
        (WebCore::RenderLayer::calculateLayerBounds):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyStackingContainerZOrderLists):
        (WebCore::RenderLayer::collectLayers):
        (WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded):
        (WebCore::RenderLayer::updateStackingContextsAfterStyleChange):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        (RenderLayer):
        (WebCore::RenderLayer::isStackingContainer):
        (WebCore::RenderLayer::posZOrderList):
        (WebCore::RenderLayer::negZOrderList):
        (WebCore::RenderLayer::isDirtyStackingContainer):
        (WebCore::RenderLayer::clearZOrderLists):
        (WebCore::RenderLayer::updateZOrderLists):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::compositingOpacity):
        (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enclosingNonStackingClippingLayer):
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::layerHas3DContent):
        (WebCore::isRootmostFixedOrStickyLayer):

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

        Have scrollperf logging log information about wheel event handlers
        https://bugs.webkit.org/show_bug.cgi?id=107761
        <rdar://problem/12281015>

        Reviewed by Tim Horton.

        Log when the wheel event handler count of a ScrollingTreeScrollingNodeMac changes.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::update):
        (WebCore::logWheelEventHandlerCountChanged):

2013-01-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Add an optional Isolate parameter to GetTemplate() and GetRawTemplate()
        https://bugs.webkit.org/show_bug.cgi?id=107679

        Reviewed by Adam Barth.

        It is important to pass an Isolate to GetTemplate() and GetRawTemplate().
        To proceed the work incrementally, this patch adds an optional Isolate parameter
        to GetTemplate() and GetRawTemplate(). Once all call sites are updated, the
        Isolate parameter will be made mandatory.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::GetRawTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::GetRawTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetRawTemplate):
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetRawTemplate):
        (WebCore::V8TestEventConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::GetRawTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetRawTemplate):
        (WebCore::V8TestException::GetTemplate):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::GetRawTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetRawTemplate):
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructor::GetTemplate):
        (WebCore::V8TestNamedConstructor::GetRawTemplate):
        (WebCore::V8TestNamedConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructorConstructor):
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetRawTemplate):
        (WebCore::V8TestNode::GetTemplate):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::GetRawTemplate):
        (WebCore::V8TestObj::GetTemplate):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::GetRawTemplate):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetRawTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WebCore::WrapperTypeInfo::getTemplate):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLImageElementConstructor.h:
        (V8HTMLImageElementConstructor):

2013-01-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Move V8DOMWrapper::getEventListener() to V8EventListerList
        https://bugs.webkit.org/show_bug.cgi?id=107683

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter):
        (GenerateEventListenerCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::addEventListenerCallback):
        (WebCore::TestEventTargetV8Internal::removeEventListenerCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::addEventListenerCallback):
        (WebCore::TestObjV8Internal::removeEventListenerCallback):
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        * bindings/v8/V8EventListenerList.cpp:
        (WebCore::V8EventListenerList::getEventListener):
        (WebCore):
        * bindings/v8/V8EventListenerList.h:
        (WebCore):
        (V8EventListenerList):
        (WebCore::V8EventListenerList::findWrapper):
        (WebCore::V8EventListenerList::clearWrapper):
        (WebCore::V8EventListenerList::doFindWrapper):
        (WebCore::V8EventListenerList::getHiddenProperty):
        (WebCore::V8EventListenerList::findOrCreateWrapper):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallback):
        (WebCore::V8DOMWindow::removeEventListenerCallback):

2013-01-23  Dominic Mazzoni  <dmazzoni@google.com>

        AX: AXObjectCache should be initialized with topDocument
        https://bugs.webkit.org/show_bug.cgi?id=107638

        Reviewed by Chris Fleizach.

        Initialize AXObjectCache with the top document, not the
        document that axObjectCache happened to be called on, which
        could be an iframe. Having an AXObjectCache with the wrong
        document could cause a heap-use-after-free in
        notificationPostTimerFired if the inner document was deleted
        while notifications were pending.

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

2012-12-12  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: WebKit does not render selection in non-first ruby text nodes.
        https://bugs.webkit.org/show_bug.cgi?id=92818

        Reviewed by Levi Weintraub.

        The patch is based on the one submitted by Sukolsak Sakshuwong.

        The bug was caused by the fact isSelectionRoot was returning false on RenderRubyRun even though
        it doesn't lay down its children in block direction.

        The selection painting code assumes that all blocks in each selection root are laid down in
        the containing block direction. In particular, InlineTextBox::paintSelection calls
        RootInlineBox::selectionTopAdjustedForPrecedingBlock in order to determine the end of the previous
        line, which in turn calls blockBeforeWithinSelectionRoot. blockBeforeWithinSelectionRoot goes
        through block nodes that appears before "this" block, and selectionTopAdjustedForPrecedingBlock
        assumes that to compute the end of the previous line.

        Now suppose we have markup such as <ruby>Ichi<rt>One</rt></ruby><ruby>Ni<rt>Two</rt></ruby>. When
        selectionTopAdjustedForPrecedingBlock is called on the line box generated for "Two", it tries to
        determine the bottom of the inline box above that of "Two", which blockBeforeWithinSelectionRoot
        determines to be that of "One". At this point, everything goes wrong and the selection height is
        computed to be 0.

        The fix to this problem is to allow RenderRubyRun to be a selection root. Since RenderRubyRun is
        already an inline-block, it suffices to bypass the !nonPseudoNode() check. In fact, there is no
        need to check this condition anymore as far as I can tell. The check was added in
        http://trac.webkit.org/changeset/12986 but all tests added by this change set as well as the rest
        of layout tests pass without this condition.

        Test: fast/ruby/select-ruby.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot):

2013-01-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Reduce usage of deprecatedV8String() and deprecatedV8Integer()
        https://bugs.webkit.org/show_bug.cgi?id=107674

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * bindings/v8/NPV8Object.cpp:
        (_NPN_Enumerate):
        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::bindToWindowObject):
        (WebCore::ScriptController::disableEval):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::setScriptSource):
        (WebCore::ScriptDebugServer::ensureDebuggerScriptCompiled):
        (WebCore::ScriptDebugServer::compileScript):
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptCallArgumentHandler::appendArgument):
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptFunctionCall::construct):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        (WebCore::V8DOMWindowShell::namedItemAdded):
        (WebCore::V8DOMWindowShell::namedItemRemoved):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8MutationCallback.cpp:
        (WebCore::V8MutationCallback::handleEvent):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createInjectedScript):

2013-01-23  Martin Robinson  <mrobinson@igalia.com>

        WebKit should support decoding multi-byte entities in XML content
        https://bugs.webkit.org/show_bug.cgi?id=107459

        Reviewed by Adam Barth.

        Test: fast/parser/entities-in-xhtml.xhtml

        * html/parser/HTMLEntityParser.cpp:
        (WebCore::appendUChar32ToUCharArray): Added this helper function. Later patches
        may try to move this code to somewhere that it can be shared more easily.
        (WebCore::decodeNamedEntityToUCharArray): Modify this function to work on a UChar
        array four elements long, so that multi-byte and multi-character entities can be resolved.
        * html/parser/HTMLEntityParser.h: Updated function declaratoin.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore): Modify the statically allocated entity string memory area to accommodate
        up to two UTF-8 characters. Each UTF-8 character can be 4 bytes, so this brings the
        total size to 9 bytes.
        (WebCore::getXHTMLEntity): Use the new entity decoding API.
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::EntityResolver::resolveUndeclaredEntity): Ditto.
        (WebCore::XMLDocumentParser::parse): Ditto.

2013-01-23  Eric Seidel  <eric@webkit.org>

        Stop the background-parser during HTMLDocumentParser::detatch to prevent crashes/asserts
        https://bugs.webkit.org/show_bug.cgi?id=107751

        Reviewed by Tony Gentilcore.

        This appears to fix the 2 intermitent crashers we were seeing while
        running fast/parser.  And definitely fixes 8 ASSERTs seen using a Debug build.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::detach):

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

        [CSS Exclusions] Add support for computing first included interval position for polygons
        https://bugs.webkit.org/show_bug.cgi?id=103429

        Reviewed by Dirk Schulze.

        Added support for computing the "first fit" location, i.e. the logical shape-inside
        location where a line's layout begins. The algorithm for doing so is described here:
        http://hansmuller-webkit.blogspot.com/2012/08/revised-algorithm-for-finding-first.html.

        Tests: fast/exclusions/shape-inside/shape-inside-first-fit-001.html
               fast/exclusions/shape-inside/shape-inside-first-fit-002.html
               fast/exclusions/shape-inside/shape-inside-first-fit-003.html

        * platform/graphics/FloatSize.h:
        (WebCore::operator*): Scale a FloatSize. This simplified the final expression in VertexPair::intersection().
        * rendering/ExclusionPolygon.cpp:
        (WebCore::isPointOnLineSegment): Returns true if the specified point is collinear and within the line segement's bounds.
        (WebCore::leftSide): Return a value > 0 if point is on the left side of the line segment, < 0 if it's on the right, 0 if it's collinear.
        (WebCore::ExclusionPolygon::contains): Return true if the point is within the polygon or on an edge.
        (WebCore::VertexPair::overlapsRect): Returns true if the line segment from vertex1 to vertex2 overlaps the specified FloatRect.
        (WebCore::VertexPair::intersection): Finds the intersection of a pair of line segments defined by VertexPairs.
        (WebCore::ExclusionPolygon::firstFitRectInPolygon): Returns true if none of the polygon's edges, except the two used
            to define by the offset edges, overlap the FloatRect.
        (WebCore::aboveOrToTheLeft): Defines the top/left preference for "first fit" locations.
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop): Replaced the stub implementation of this method.
        * rendering/ExclusionPolygon.h:
        (ExclusionPolygon): Added declarations noted above.
        (VertexPair): Abstract class that defines a pair of FloatPoints.
        (OffsetPolygonEdge): Represents an edge that's horizontally offset from a polygon edge.
        (WebCore::OffsetPolygonEdge::edgeIndex): The ExclusionPolygon edge index used to define this OffsetEdge.

2013-01-23  Dirk Schulze  <dschulze@adobe.com>

        Implement Canvas Path object
        https://bugs.webkit.org/show_bug.cgi?id=97333

        Reviewed by Dean Jackson.

        The Canvas part of the WHATWG specification defines a Path object. This Path object
        shares several path segment functions (path methods) with the CanvasRenderingContext2D
        interface. This patch introduces the Path object and shares the path segment functions
        in the class CanvasPathMethods.
        This patch does just implement the basic path functions that have a general agreement on
        the WHAT WG and W3C mailing lists.
        This feature is behind a flag and won't be activated by default.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#path-objects

        Test: fast/canvas/canvas-path-object.html

        * CMakeLists.txt: Add DOMPath and CanvasPathMedthods to build system.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * html/canvas/CanvasPathMethods.cpp: Added.
        (WebCore): This class shares the path segment functions (moveTo, lineTo, ...) between
            DOMPath (the Path object) and CanvasRenderingContext2D.
        (WebCore::CanvasPathMethods::closePath):
        (WebCore::CanvasPathMethods::moveTo):
        (WebCore::CanvasPathMethods::lineTo):
        (WebCore::CanvasPathMethods::quadraticCurveTo):
        (WebCore::CanvasPathMethods::bezierCurveTo):
        (WebCore::CanvasPathMethods::arcTo):
        (WebCore::CanvasPathMethods::arc):
        (WebCore::CanvasPathMethods::rect):
        * html/canvas/CanvasPathMethods.h: Added.
        (WebCore):
        (CanvasPathMethods):
        (WebCore::CanvasPathMethods::~CanvasPathMethods):
        (WebCore::CanvasPathMethods::transformIsInvertible):
        (WebCore::CanvasPathMethods::CanvasPathMethods):
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h: Remove the path segment functions here.
        (CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::transformIsInvertible): This checks if the CTM
            of the context is still invertible. Drawing should stop if it is not.
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.h: Added.
        (WebCore):
        (DOMPath):
        (WebCore::DOMPath::create):
        (WebCore::DOMPath::~DOMPath):
        (WebCore::DOMPath::DOMPath):
        * html/canvas/DOMPath.idl: Added.
        * page/DOMWindow.idl: Added CTOR for Path.

2013-01-23  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove IDBVersionChangeRequest
        https://bugs.webkit.org/show_bug.cgi?id=107711

        Reviewed by Tony Chang.

        When the setVersion() API was removed from the Indexed DB spec the IDBVersionChangeRequest
        interface was replaced with IDBOpenDBRequest. We switched over for open(), this completes
        the work by switching over for deleteDatabase() and removing the old code. (On the Event
        side we still need to combine IDBVersionChangeEvent and IDBUpgradeNeededEvent.)

        Test: storage/indexeddb/intversion-long-queue.html
              storage/indexeddb/intversion-upgrades.html

        * CMakeLists.txt: Remove references to deleted code.
        * DerivedSources.make: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Modules/indexeddb/IDBCallbacks.h: Remove unused onBlocked() overload.
        * Modules/indexeddb/IDBDatabase.cpp: Remove references to deleted code.
        * Modules/indexeddb/IDBDatabase.h: Ditto.
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase): Fire onBlocked with current version.
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal): Don't need to specify source.
        (WebCore::IDBFactory::deleteDatabase): Use an IDBOpenDBRequest.
        * Modules/indexeddb/IDBFactory.h: Change return type of deleteDatabase()
        * Modules/indexeddb/IDBFactory.idl: Ditto.
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::create): Always use a null source.
        (WebCore::IDBOpenDBRequest::IDBOpenDBRequest): Pass null source to base class.
        (WebCore::IDBOpenDBRequest::dispatchEvent): Don't assume result is a database in existing
        special case.
        * Modules/indexeddb/IDBOpenDBRequest.h: Don't need a source argument (always null).
        * Modules/indexeddb/IDBVersionChangeRequest.cpp: Removed.
        * Modules/indexeddb/IDBVersionChangeRequest.h: Removed.
        * Modules/indexeddb/IDBVersionChangeRequest.idl: Removed.
        * WebCore.gypi: Remove references to deleted code.
        * WebCore.xcodeproj/project.pbxproj: Remove references to deleted code.
        * dom/EventTarget.h: Remove references to deleted code.
        * dom/EventTargetFactory.in: Ditto.

2013-01-23  Scott Graham  <scottmg@chromium.org>

        [Chromium] Fix inclusion of pch .cpp in webcore_platform and webcore_rendering
        https://bugs.webkit.org/show_bug.cgi?id=107700

        Reviewed by Dirk Pranke.

        No new tests, Chromium should link on VS 2012.

        * WebCore.gyp/WebCore.gyp:

2013-01-23  Jun Jiang  <jun.a.jiang@intel.com>

        Avoid unnecessary format conversion for tex{Sub}Image2D() for ImageData of WebGL
        https://bugs.webkit.org/show_bug.cgi?id=107532

        Reviewed by Kenneth Russell.

        This patch removes the unnecessary format conversion in tex{Sub}Image2D() for ImageData in WebGL to improve performance.

        Already covered by current tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):

2013-01-23  Xianzhu Wang  <wangxianzhu@chromium.org>

        Should update compositing state when an out-of-view fixed position element becomes in-view
        https://bugs.webkit.org/show_bug.cgi?id=107410

        Reviewed by Simon Fraser.

        When a non-compositing page contains some not-composited fixed position element because of bounds out-of-view, when the element changes position and RenderLayerCompositor::updateCompositingLayers() is called, the function may return early because of "if (!m_reevaluateCompositingAfterLayout && !m_compositing)" without updating the compositing layers.

        Set m_reevaluateCompositingAfterLayout when a fixed position element is not composited because of bounds out-of-view.

        Test: compositing/layer-creation/fixed-position-change-out-of-view-in-view.html

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

2013-01-23  Tony Chang  <tony@chromium.org>

        Unreviewed, set svn:eol-style to CRLF on Windows .sln files.

        * WebCore.vcproj/WebCore.sln: Modified property svn:eol-style.
        * WebCore.vcproj/WebCore.submit.sln: Modified property svn:eol-style.

2013-01-23  Adam Barth  <abarth@webkit.org>

        BackgroundHTMLParser::sendTokensToMainThread should use bind
        https://bugs.webkit.org/show_bug.cgi?id=107637

        Reviewed by Eric Seidel.

        This patch replaces our hand-written implementation of bind for
        didReceiveTokensFromBackgroundParser with bind from Functional.h. To
        use the generic version of bind, we need to switch to using WeakPtr to
        hold a reference to the main thread parser in the BackgroundHTMLParser.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        (WebCore::BackgroundHTMLParser::createPartial):
        * html/parser/BackgroundHTMLParser.h:
        (WebCore::BackgroundHTMLParser::create):
        (BackgroundHTMLParser):
        (ParserMap):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        (WebCore::HTMLDocumentParser::stopBackgroundParser):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):

2013-01-23  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Cleanup VS2010 WebCore project. 
        Lots of files that no longer exist in solution.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-01-23  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Add support for max-content
        https://bugs.webkit.org/show_bug.cgi?id=107604

        Reviewed by Tony Chang.

        Tests: fast/css-grid-layout/minmax-max-content-resolution-columns.html
               fast/css-grid-layout/minmax-max-content-resolution-rows.html

        This change implements max-content on top of the infrastructure introduced as part
        of implementing min-content (bug 106474). No effort was made to share code, which
        is what was done for min-content. The sharing will occur in follow-up refactoring(s)
        to benefit from the extra testing but also the extra code to make the direction more
        obvious.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::maxContentForChild):
        Added this helper, similar to minContentForChild.

        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        Patched the function to handle max-content per the specification's algorithm.

        * rendering/RenderGrid.h:
        Added maxContentForChild.

2013-01-23  Mark Lam  <mark.lam@apple.com>

        Assert that Supplementable objects is only used in their creator thread.
        https://bugs.webkit.org/show_bug.cgi?id=107717.

        Reviewed by Adam Barth.

        No new tests.

        * platform/Supplementable.h:
        (WebCore):
        (WebCore::Supplementable::provideSupplement):
        (WebCore::Supplementable::removeSupplement):
        (WebCore::Supplementable::requireSupplement):
        (Supplementable):
        (WebCore::Supplementable::Supplementable):

2013-01-23  Tony Chang  <tony@chromium.org>

        Incorrect scrollable height during simplified layout
        https://bugs.webkit.org/show_bug.cgi?id=107193

        Reviewed by David Hyatt.

        When computing overflow we need the height of the block before
        it was clamped (i.e., before updateLogicalHeight() has been called).

        During simplified layout, we don't have this information and we were
        using the clamped height by mistake. To fix this, we now store the
        pre-clamped height on RenderOverflow so we can properly compute
        overflow.

        Test: fast/overflow/height-during-simplified-layout.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow): Save the height if we have overflow.
        (WebCore::RenderBlock::simplifiedLayout): If we have overflow, use the height that we saved
        in computeOverflow.
        * rendering/RenderOverflow.h:
        (WebCore::RenderOverflow::layoutClientAfterEdge):
        (WebCore::RenderOverflow::setLayoutClientAfterEdge):
        (RenderOverflow): Add a member variable to save the height.

2013-01-23  Tom Sepez  <tsepez@chromium.org>

        [chromium] harden ScriptWrappable::m_wrapper against tampering
        https://bugs.webkit.org/show_bug.cgi?id=107318

        Reviewed by Adam Barth.

        Patch is correct if existing tests past without crashing.

        * bindings/v8/ScriptWrappable.h:
        (WebCore::ScriptWrappable::ScriptWrappable):
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper):
        (WebCore::ScriptWrappable::disposeWrapper):
        (WebCore::ScriptWrappable::reportMemoryUsage):
        (ScriptWrappable):
        (WebCore::ScriptWrappable::maskOrUnmaskPointer):

2013-01-22  Roger Fong  <roger_fong@apple.com>

        WebCore property sheets, modified build scripts, and project files for compiling in VS2010.
        https://bugs.webkit.org/show_bug.cgi?id=106988

        Reviewed by Brent Fulgham.

        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcxproj: Added.
        * WebCore.vcxproj/MigrateScripts: Added.
        * WebCore.vcxproj/QTMovieWin: Added.
        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj: Added.
        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj.filters: Added.
        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj.user: Added.
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCommon.props: Added.
        * WebCore.vcxproj/QTMovieWin/QTMovieWinDebug.props: Added.
        * WebCore.vcxproj/QTMovieWin/QTMovieWinRelease.props: Added.
        * WebCore.vcxproj/WebCore.vcxproj: Added.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Added.
        * WebCore.vcxproj/WebCore.vcxproj.user: Added.
        * WebCore.vcxproj/WebCoreCFNetwork.props: Added.
        * WebCore.vcxproj/WebCoreCG.props: Added.
        * WebCore.vcxproj/WebCoreCommon.props: Added.
        * WebCore.vcxproj/WebCoreDebug.props: Added.
        * WebCore.vcxproj/WebCoreGenerated.make: Added.
        * WebCore.vcxproj/WebCoreGenerated.vcxproj: Added.
        * WebCore.vcxproj/WebCoreGenerated.vcxproj.filters: Added.
        * WebCore.vcxproj/WebCoreGenerated.vcxproj.user: Added.
        * WebCore.vcxproj/WebCoreGeneratedCommon.props: Added.
        * WebCore.vcxproj/WebCoreGeneratedDebug.props: Added.
        * WebCore.vcxproj/WebCoreGeneratedRelease.props: Added.
        * WebCore.vcxproj/WebCoreMediaQT.props: Added.
        * WebCore.vcxproj/WebCorePostBuild.cmd: Added.
        * WebCore.vcxproj/WebCorePreBuild.cmd: Added.
        * WebCore.vcxproj/WebCorePreLink.cmd: Added.
        * WebCore.vcxproj/WebCorePthreads.props: Added.
        * WebCore.vcxproj/WebCoreQuartzCore.props: Added.
        * WebCore.vcxproj/WebCoreRelease.props: Added.
        * WebCore.vcxproj/build-generated-files.sh: Added.
        * WebCore.vcxproj/copyForwardingHeaders.cmd: Added.
        * WebCore.vcxproj/copyWebCoreResourceFiles.cmd: Added.
        * WebCore.vcxproj/migrate-scripts.sh: Added.
        * WebCore.vcxproj/xcopy.excludes: Added.
        * WebCorePrefix.h:
        * config.h:

2013-01-23  Eric Seidel  <eric@webkit.org>

        HTMLCompactToken needs to include the forceQuirks bool from HTMLToken
        https://bugs.webkit.org/show_bug.cgi?id=107713

        Reviewed by Tony Gentilcore.

        Before we were only getting "quirks mode" when the system/public identifiers
        were known quirks identifiers.  Now we'll correctly get quirks mode for any
        parse error during DOCTYPE parsing.
        This passes a bunch more tests.

        * html/parser/CompactHTMLToken.cpp:
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        * html/parser/CompactHTMLToken.h:
        (WebCore::CompactHTMLToken::doctypeForcesQuirks):
        (CompactHTMLToken):
        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):

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

        Recursion handling cancelled authentication challenges in NetworkProcess
        <rdar://problem/13024541> and https://bugs.webkit.org/show_bug.cgi?id=107702

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in:

2013-01-23  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=107628
        Sometimes scroll position is jerky during rubber-band, affects nytimes.com
        -and corresponding-
        <rdar://problem/12679549>

        Reviewed by Simon Fraser.

        The basic problem here is that isRubberBandInProgress() was only implemented for 
        main thread scrolling. So when we were actually scrolling on the scrolling thread, 
        that function would always return false regardless.

        New ScrollableArea virtual function isRubberBandInProgress() will allow us to ask 
        the ScrollingCoordinator when the scrolling thread is scrolling, or the 
        ScrollAnimator otherwise.
        * page/FrameView.cpp:
        (WebCore::FrameView::isRubberBandInProgress):
        * page/FrameView.h:
        (FrameView):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isRubberBandInProgress):

        New ScrollingCoordinator function isRubberBandInProgress() always returns false 
        for non-Mac ports, and is overridden in ScrollingCoordinatorMac to consult the 
        ScrollingTree.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::isRubberBandInProgress):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::isRubberBandInProgress):

        New variable m_mainFrameIsRubberBanding keeps track of whether there is currently 
        a rubber-band happening on the scrolling thread.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        (WebCore::ScrollingTree::isRubberBandInProgress):
        (WebCore::ScrollingTree::setMainFrameIsRubberBanding):
        * page/scrolling/ScrollingTree.h:
        (ScrollingTree):
        (WebCore::ScrollingTree::rootNode):

        Call setMainFrameIsRubberBanding() whenever the stretchAmount is calculated and 
        whenever we stop the rubber-band timer.
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::stretchAmount):
        (WebCore::ScrollingTreeScrollingNodeMac::stopSnapRubberbandTimer):

        Consult FrameView for isRubberBandInProgress().
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2013-01-23  Robert Hogan  <robert@webkit.org>

        Abspos Inline block not positioned correctly in text-aligned container
        https://bugs.webkit.org/show_bug.cgi?id=105695

        Reviewed by Ojan Vafai.

        Inline positioned elements should still obey the text-alignment of their container
        even when we don't do a line layout.

        Test: fast/text/container-align-with-inlines.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::updateStaticInlinePositionForChild):
        (WebCore):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setStaticPositions):

2013-01-23  Eric Seidel  <eric@webkit.org>

        Remove DocType support from MarkupTokenBase now that NEW_XML is gone
        https://bugs.webkit.org/show_bug.cgi?id=107709

        Reviewed by Adam Barth.

        Just moving code out of MarkupTokenBase and into HTMLToken.
        The test for this change is if it compiles. :)  Which it does.

        * html/parser/HTMLToken.h:
        (DoctypeData):
        (WebCore::DoctypeData::DoctypeData):
        (WebCore):
        (WebCore::HTMLToken::appendToName):
        (WebCore::HTMLToken::name):
        (HTMLToken):
        (WebCore::HTMLToken::beginDOCTYPE):
        (WebCore::HTMLToken::publicIdentifier):
        (WebCore::HTMLToken::systemIdentifier):
        (WebCore::HTMLToken::setPublicIdentifierToEmptyString):
        (WebCore::HTMLToken::setSystemIdentifierToEmptyString):
        (WebCore::HTMLToken::appendToPublicIdentifier):
        (WebCore::HTMLToken::appendToSystemIdentifier):
        (WebCore::HTMLToken::releaseDoctypeData):
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (AtomicHTMLToken):
        * html/parser/HTMLTokenTypes.h:
        * xml/parser/MarkupTokenBase.h:
        (WebCore):
        (MarkupTokenBase):

2013-01-23  Alexis Menard  <alexis@webkit.org>

        transition-property accepts incorrect "all, none" as value
        https://bugs.webkit.org/show_bug.cgi?id=105428

        Reviewed by Dean Jackson.

        http://www.w3.org/TR/css3-transitions/#transition-property-property
        disallows any value like none, all or all, none as it doesn't make
        sense. This patch fixes the problem by rejecting the value if set by
        the user.

        Test: transitions/transitions-parsing.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAnimationProperty):
        * css/CSSParser.h:

2013-01-23  Eric Seidel  <eric@webkit.org>

        Clarify some usage of shouldUseThreading vs m_haveBackgroundParser, fixing about:blank parsing
        https://bugs.webkit.org/show_bug.cgi?id=107664

        Reviewed by Adam Barth.

        The HTMLDocumentParser can be "supposed" to use a background parser
        but not end up ever doing so for blank documents.  It's important
        that we spin the forground parser at least once, so we end up
        actually creating the about:blank document.

        shouldUseThreading() means that threading is enabled and we should use it if we can.
        m_haveBackgroundParser means that we actually are already using threading.
        When we add full document.write support this will get a bit trickier still as
        we'll need to be using both the foreground and background parsers.

        This fixes about 20 tests in fast/frames and many others outside of fast/frames. :)

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield):
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::lineNumber):
        (WebCore::HTMLDocumentParser::textPosition):

2013-01-17  Roger Fong  <roger_fong@apple.com>

        [Win] Remove dependence on Microsoft Embedded OpenType Font Engine (T2EMBED.DLL)  from FontCustomPlatformData.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=107153

        Reviewed by Dan Bernstein.

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore):
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):

2013-01-23  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: speedup highlight regex API in DefaultTextEditor
        https://bugs.webkit.org/show_bug.cgi?id=107238

        Reviewed by Pavel Feldman.

        Move overlay highlight measurement (highlight regex API) from DefaultTextEditor._paintLine
        method to the DefaultTextEditor._paintLines method which allows to relayout dom only
        once. This is a significant improvement to the current state of the
        art which does relayout on each regex occurence.
        In addition, use "left" css attribute instead of "margin-left": this
        way it will be possible to avoid an unnecessary relayouting during
        appending overlay highlight.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype.markAndRevealRange):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._measureRegexHighlight):
        (WebInspector.TextEditorMainPanel.prototype._measureSpans):
        (WebInspector.TextEditorMainPanel.prototype._appendOverlayHighlight):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.ElementMetrics):
        (WebInspector.TextEditorMainPanel.LineOverlayHighlight):
        (WebInspector.TextEditorMainChunk.prototype.expand):

2013-01-23  Ojan Vafai  <ojan@chromium.org>

        Assert that computePreferredLogicalWidths never calls setNeedsLayout
        https://bugs.webkit.org/show_bug.cgi?id=107613

        Reviewed by Eric Seidel.

        computePreferredLogicalWidths should only set m_minPreferredLogicalWidth
        and m_maxPreferredLogicalWidth. It shouldn't have other side-effects.
        The mathml bits can be removed once https://bugs.webkit.org/show_bug.cgi?id=107353
        is resolved.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::minPreferredLogicalWidth):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::computePreferredLogicalWidths):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::computePreferredLogicalWidths):

2013-01-23  Noam Rosenthal  <noam@webkit.org>

        REGRESSION(r140518): Broke Chromium Win build (gyp file not updated) (Requested by arv on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=107691

        Unreviewed build fix. Removed TextureMapperShaderManager.* from WebCore.gypi.

        * WebCore.gypi:

2013-01-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140307, r140411, and r140512.
        http://trac.webkit.org/changeset/140307
        http://trac.webkit.org/changeset/140411
        http://trac.webkit.org/changeset/140512
        https://bugs.webkit.org/show_bug.cgi?id=107689

        Perf regression on DOMDivWalk (bug 106726) (Requested by
        falken on #webkit).

        * dom/Element.cpp:
        (WebCore::Element::removedFrom):
        (WebCore):
        (WebCore::Element::isInTopLayer):
        (WebCore::Element::setIsInTopLayer):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::isInTopLayer):
        (WebCore::ElementRareData::setIsInTopLayer):
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        * dom/Node.h:
        (Node):
        * dom/NodeRenderingContext.cpp:
        (WebCore::isRendererReparented):
        (WebCore::NodeRenderingContext::previousRenderer):
        (WebCore::NodeRenderingContext::parentRenderer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isInTopLayer):
        (WebCore::RenderLayer::rebuildZOrderLists):

2013-01-23  Dmitry Gozman  <dgozman@chromium.org>

        Web Inspector: allow user to resize inspector window by dragging the toolbar
        https://bugs.webkit.org/show_bug.cgi?id=107648

        Reviewed by Pavel Feldman.

        This did not work before you click dock button once.
        Also, last drag position was not respected.

        No new tests, because of pure inspector UI change.

        * inspector/front-end/DockController.js:
        (WebInspector.DockController.prototype.isDockedToBottom):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar.prototype._isDockedToBottom):
        (WebInspector.Toolbar.prototype._toolbarDragStart):
        (WebInspector.Toolbar.prototype._toolbarDragEnd):
        (WebInspector.Toolbar.prototype._toolbarDrag):

2013-01-23  Shinya Kawanaka  <shinyak@chromium.org>

        shadowAncestorNode() should be renamed to deprecatedShadowAncestorNode()
        https://bugs.webkit.org/show_bug.cgi?id=107624

        Reviewed by Dimitri Glazkov.

        Since Node::shadowAncestorNode() is deprecated, we would like to rename it to prevent from further use.

        No new tests, simple refactoring.

        * WebCore.order:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        * dom/Document.cpp:
        (WebCore::Document::handleZeroPadding):
        * dom/Node.cpp:
        (WebCore::Node::deprecatedShadowAncestorNode):
        * dom/Node.h:
        (Node):
        * editing/Editor.cpp:
        (WebCore::Editor::rangeOfString):
        (WebCore::Editor::countMatchesForText):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::bestClickableNodeForTouchPoint):
        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintSearchFieldCancelButton):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setToNonShadowAncestor):
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):

2013-01-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: only allow evaluateForTestInFrontend for front-ends under test.
        https://bugs.webkit.org/show_bug.cgi?id=107523

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::isUnderTest):
        (WebCore):
        (WebCore::InspectorController::evaluateForTestInFrontend):
        * inspector/InspectorController.h:
        (InspectorController):
        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::canAttachWindow):
        (WebCore::InspectorFrontendClientLocal::isUnderTest):
        (WebCore):
        * inspector/InspectorFrontendClientLocal.h:
        (InspectorFrontendClientLocal):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::isUnderTest):
        (WebCore):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/DOMExtension.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.canInspectWorkers):
        (.WebInspector.InspectorFrontendHostStub.prototype.isUnderTest):
        * inspector/front-end/TestController.js:
        (.invokeMethod):
        (WebInspector.evaluateForTestInFrontend):
        * inspector/front-end/externs.js:

2013-01-23  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: remove invisibleLineRow code from paintLines DTE method
        https://bugs.webkit.org/show_bug.cgi?id=107649

        Reviewed by Pavel Feldman.

        Remove invisibleLineRow logic from TextEditorMainPanel._paintLines method.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._paintLines):

2013-01-23  Rafael Weinstein  <rafaelw@chromium.org>

        REGRESSION(r140101): caused debug asserts in fast/forms/associated-element-crash.html and html5lib/run-template.html
        https://bugs.webkit.org/show_bug.cgi?id=107237

        Reviewed by Adam Barth.

        No new tests needed.

        When the parser foster-parent's a node out of a table context and the foster parent is a template element, set the Task.parent
        to be the template element's content, rather than the element itself. This ensures the foster-parented node isn't errorenously
        reparented.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::findFosterSite):

2013-01-23  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: heap profiler shows nodes with distance 0
        https://bugs.webkit.org/show_bug.cgi?id=107425

        Reviewed by Pavel Feldman.

        "Document DOM tree" entities now have distance 1. So if there is a DOM
        wrapper that is not referenced from javascript it will anyways be shown
        in the heap snapshot and will have distance 2. Also such DOM wrappers
        are considered to be reachable from user roots (e.g. global Window objects)
        otherwice they are not event shown in the heap snapshots.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.distanceForUserRoot):
        (WebInspector.HeapSnapshot.prototype._calculateDistances):
        * inspector/front-end/JSHeapSnapshot.js:
        (WebInspector.JSHeapSnapshot.prototype.distanceForUserRoot): distance for 
        "(Document DOM trees)" is set to 0 to make sure distance of "Ddocument DOM tree" is 1.
        (WebInspector.JSHeapSnapshot.prototype._markPageOwnedNodes):
        (WebInspector.JSHeapSnapshotNode.prototype.isDocumentDOMTreesRoot):

2013-01-23  Adrian Perez de Castro  <aperez@igalia.com>

        [GStreamer] Add Opus MIME type to the list of supported ones
        https://bugs.webkit.org/show_bug.cgi?id=98759

        Reviewed by Philippe Normand.

        GStreamer has support for the Opus codec (http://opus-codec.org) by
        using a plugin present in the "gst-plugins-bad" repository. Opus
        streams may be embedded in a Ogg container, or standalone. The case
        of the Ogg container is already covered by the "*/ogg" MIME types
        declared as supported by the GStreamer media playing code, but for
        standalone streams to work, "audio/opus" has to be added.

        With this, and the needed GStreamer plugin installed, the GTK+
        launcher is able to correctly play the example streams from
        http://opus-codec.org/examples

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

2013-01-23  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] Remove elementParentStyle from SelectorCheckerContext
        https://bugs.webkit.org/show_bug.cgi?id=107496

        Reviewed by Darin Adler.

        Since childrenAffectedBy bits were moved from RenderStyle to element,
        now elementParentStyle is not used in SelectorChecker and
        StyleResolver. We should remove the member varaiable from
        SelectorCheckerContext.

        No new tests, because just refactoring.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        (SelectorCheckingContext):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::ruleMatches):
        Removed elementParentStyle.

2013-01-23  Andreas Kling  <akling@apple.com>

        Pass CSSSelector pointers around as const after parsing stage.
        <http://webkit.org/b/107645>

        Reviewed by Antti Koivisto.

        Have CSSSelectorList vend const CSSSelector* and make the style resolution code
        operate on const pointers instead.

        This gives us some compile-time confidence that nobody is changing the selectors
        after we've parsed them.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::operator==):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::parseNth):
        (WebCore::CSSSelector::matchNth):
        * css/CSSSelector.h:
        (CSSSelector):
        (WebCore::CSSSelector::tagHistory):
        (WebCore::CSSSelector::selectorList):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::selectorsText):
        (WebCore::forEachTagSelector):
        (WebCore::forEachSelector):
        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        (WebCore::SelectorHasInvalidSelectorFunctor::operator()):
        * css/CSSSelectorList.h:
        (WebCore::CSSSelectorList::first):
        (CSSSelectorList):
        (WebCore::CSSSelectorList::selectorAt):
        (WebCore::CSSSelectorList::indexOfNextSelectorAfter):
        (WebCore::CSSSelectorList::next):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::generateSelectorText):
        * css/RuleSet.cpp:
        (WebCore::selectorListContainsUncommonAttributeSelector):
        (WebCore::collectFeaturesFromRuleData):
        * css/RuleSet.h:
        (WebCore::RuleData::selector):
        (WebCore::RuleSet::RuleSetSelectorPair::RuleSetSelectorPair):
        (RuleSetSelectorPair):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matches):
        (WebCore::SelectorChecker::match):
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::checkScrollbarPseudoClass):
        (WebCore::SelectorChecker::determineLinkMatchType):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        (SelectorCheckingContext):
        (SelectorChecker):
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::determineSelectorScopes):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::checkRegionSelector):
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::initialize):
        (WebCore::SelectorDataList::execute):
        * dom/SelectorQuery.h:
        (WebCore::SelectorDataList::SelectorData::SelectorData):
        (SelectorData):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::collectSelectFeatureSetFrom):
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorChecker::checkContentSelector):
        (WebCore::ContentSelectorDataList::initialize):
        * html/shadow/ContentSelectorQuery.h:
        (ContentSelectorChecker):
        (ContentSelectorDataList):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::validateSubSelector):
        (WebCore::validateSelector):
        (WebCore::HTMLContentElement::validateSelect):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):

2013-01-23  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Unreviewed build fix after r140518.

        * GNUmakefile.list.am: rename TextureMapperShaderManager to
        TextureMapperShaderProgram.

2013-01-23  Yoshifumi Inoue  <yosin@chromium.org>

        REGRESSION(r139044): Pan icon remains on screen on Chromium-WinXP
        https://bugs.webkit.org/show_bug.cgi?id=107623

        Reviewed by Hajime Morita.

        The issue is caused by AutoscrollController::stopAutoscrollTimer()
        doesn't call View::removePanScrollIcon() because m_autoscrollType
        is reset before checking it.

        This patch changes to reset m_autoscrollType after all references.

        Test: platform/chromium-win/fast/events/panScroll-panIcon.html

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::stopAutoscrollTimer):

2013-01-23  Sergio Villar Senin  <svillar@igalia.com>

        REGRESSION(r140338): WebKitGtk+ trying to allocate a buffer too big
        https://bugs.webkit.org/show_bug.cgi?id=107646

        Reviewed by Carlos Garcia Campos.

        g_input_stream_skip_async() was replaced in r140338 by
        g_input_stream_read_async() to workaround a glib buffer. The former
        was using G_MAXSSIZE to skip the whole redirect message but we
        cannot use it for the latter because it will try to
        allocate a buffer of that size. Replaced it by READ_BUFFER_SIZE. No
        new tests required, functionality already covered by network tests..

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

2013-01-23  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: use inspectedWindow.document instead of document in InjectedScript
        https://bugs.webkit.org/show_bug.cgi?id=107642

        Reviewed by Pavel Feldman.

        * inspector/InjectedScriptSource.js:
        (.):

2013-01-23  Vivek Galatage  <vivek.vg@samsung.com>

        xml-stylesheet XSL is not requested with JavaScript disabled
        https://bugs.webkit.org/show_bug.cgi?id=103902

        Reviewed by Adam Barth.

        Currently CachedResourceLoader::canRequest() calls allowScriptFromSource() on
        ContentSecurityPolicy and FrameLoaderClient for the given XSLStyleSheet. This
        should be restricted to only calling allowScriptFromSource() for the
        ContentSecurityPolicy.

        Test: http/tests/xsl/xslt-transform-with-javascript-disabled.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):

2013-01-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove if(isolate) checks from v8String() and v8Integer()
        https://bugs.webkit.org/show_bug.cgi?id=107540

        Reviewed by Adam Barth.

        Now there is no optional Isolate parameter in the code base
        (except for throwError()). We can safely remove if(isolate) checks
        from v8String() and v8Integer().

        div.id:       17.8 ns => 17.8 ns (no performance change)
        div.nodeType:  9.7 ns =>  8.9 ns (+8.9% performance improvement)

        No tests. No change in behavior.

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        * bindings/v8/V8Binding.h:
        (WebCore::v8String):
        (WebCore::v8Integer):
        * bindings/v8/V8WindowErrorHandler.cpp:
        (WebCore::V8WindowErrorHandler::callListenerFunction):
        * bindings/v8/V8WorkerContextErrorHandler.cpp:
        (WebCore::V8WorkerContextErrorHandler::callListenerFunction):

2013-01-23  Hajime Morrita  <morrita@google.com>

        Invalidated SVG shadow tree should be always detached.
        https://bugs.webkit.org/show_bug.cgi?id=107634

        Reviewed by Ryosuke Niwa.

        SVGUseElement::clearResourceReferences() uses removeAllChildren() for
        clearing its shadow DOM, but this is wrong.
        removeAllChildren() is designed for removing children of an out-of-document Node.
        For efficiency, it skips a series of cleanup sequences like detach().

        For removing SVG shadow tree which is in Document, removeChildren() should be used.
        It does proper cleanup for the chilren.

        Test: svg/custom/use-invalidate-click-crash.xhtml

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::clearResourceReferences):

2013-01-23  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Don't call GraphicsLayer::setNeedsDisplay() from TextureMapperLayer.
        https://bugs.webkit.org/show_bug.cgi?id=107629

        Reviewed by Noam Rosenthal.

        We are removing the dependency on GraphicsLayer from TextureMapperLayer.

        This is in preparation for refactoring TextureMapper to work in an actor
        model (http://webkit.org/b/103854).

        No new tests, refactoring only.

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

2013-01-23  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Rename TextureMapperShaderManager.* TextureMapperShaderProgram.*
        https://bugs.webkit.org/show_bug.cgi?id=105847

        TextureMapperShaderManager contains very little "manager" code.
        Moved the map of shaders to TextureMapperGL, and renamed the files containing
        the shader implementation TextureMapperShaderProgram.cpp|h.

        Reviewed by Kenneth Rohde Christiansen.

        No new tests - renames/refactors only.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * Target.pri:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::SharedGLData::getShaderProgram):
                This function is copied from TextureMapperShaderManager.
        (SharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::SharedGLData):
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::optionsForFilterType):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::TextureMapperGL::beginClip):
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp: Renamed from Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp.
        (WebCore):
        (WebCore::compositingLogEnabled):
        (WebCore::TextureMapperShaderProgram::TextureMapperShaderProgram):
        (WebCore::TextureMapperShaderProgram::setMatrix):
        (WebCore::TextureMapperShaderProgram::getLocation):
        (WebCore::TextureMapperShaderProgram::~TextureMapperShaderProgram):
        (WebCore::TextureMapperShaderProgram::create):
        * platform/graphics/texmap/TextureMapperShaderProgram.h: Renamed from Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.h.
        (WebCore):
        (TextureMapperShaderProgram):
        (WebCore::TextureMapperShaderProgram::programID):
        (WebCore::TextureMapperShaderProgram::context):

2013-01-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in throwError()
        https://bugs.webkit.org/show_bug.cgi?id=107636

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/NPV8Object.cpp:
        (_NPN_SetException):
        * bindings/v8/V8Binding.cpp:
        (WebCore::handleMaxRecursionDepthExceeded):
        * bindings/v8/V8Binding.h:
        (WebCore):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setException):

2013-01-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in throwTypeError()
        https://bugs.webkit.org/show_bug.cgi?id=107632

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        (GenerateConstructorHeader):
        (JSValueToNative):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::constructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::methodWithSequenceArgCallback):
        (WebCore::V8TestObj::constructorCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructorCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::acceptTransferListCallback):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::multiTransferListCallback):
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::toRefPtrNativeArray):
        (WebCore::toV8Sequence):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::extractTransferables):
        (WebCore::getMessagePortArray):

2013-01-22  Matt Falkenhagen  <falken@chromium.org>

        20% regression on dom_perf/DomDivWalk
        https://bugs.webkit.org/show_bug.cgi?id=106726

        Reviewed by Hajime Morita.

        This patch moves the checks in Element::removedFrom for Fullscreen and top layer flags
        into a slow path. The idea is for the two checks for Fullscreen and top layer
        to be replaced by one faster check in the fast path.

        The plan is to migrate the Fullscreen implementation to use top layer, so this is just a
        short-term fix for the perf regression.

        No new tests: no functionality change

        * dom/Element.cpp:
        (WebCore::Element::removedFrom): Create a slow path to move the Fullscreen and top layer checks into.
        * dom/Node.cpp:
        (WebCore::Node::setIsInTopLayer): To allow for cleaner code in Element::removedFrom, define
        setIsInTopLayer and isInTopLayer even when the feature flag is off.
        * dom/Node.h:
        (WebCore::Node::isInTopLayer): Ditto.
        (Node):

2013-01-22  Mark Lam  <mark.lam@apple.com>

        Change the Supplementable class to not use AtomicString.
        https://bugs.webkit.org/show_bug.cgi?id=107535.

        Reviewed by Adam Barth.

        Replaced the use of AtomicString keys with literal const char* keys.
        This simplifies the SupplementMap and makes it slightly leaner and faster.

        No new tests.

        * Modules/battery/BatteryController.cpp:
        (WebCore::BatteryController::supplementName):
        * Modules/battery/BatteryController.h:
        (BatteryController):
        * Modules/battery/NavigatorBattery.cpp:
        (WebCore::NavigatorBattery::supplementName):
        (WebCore):
        (WebCore::NavigatorBattery::from):
        * Modules/battery/NavigatorBattery.h:
        (NavigatorBattery):
        * Modules/filesystem/chromium/DraggedIsolatedFileSystem.cpp:
        (WebCore::DraggedIsolatedFileSystem::supplementName):
        * Modules/filesystem/chromium/DraggedIsolatedFileSystem.h:
        (DraggedIsolatedFileSystem):
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::supplementName):
        (WebCore):
        (WebCore::NavigatorGamepad::from):
        * Modules/gamepad/NavigatorGamepad.h:
        (NavigatorGamepad):
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::supplementName):
        * Modules/geolocation/GeolocationController.h:
        (GeolocationController):
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::supplementName):
        (WebCore):
        (WebCore::NavigatorGeolocation::from):
        * Modules/geolocation/NavigatorGeolocation.h:
        (NavigatorGeolocation):
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::supplementName):
        (WebCore):
        (WebCore::DOMWindowIndexedDatabase::from):
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        (DOMWindowIndexedDatabase):
        * Modules/indexeddb/PageGroupIndexedDatabase.cpp:
        (WebCore::PageGroupIndexedDatabase::supplementName):
        (WebCore):
        (WebCore::PageGroupIndexedDatabase::from):
        * Modules/indexeddb/PageGroupIndexedDatabase.h:
        (PageGroupIndexedDatabase):
        * Modules/indexeddb/WorkerContextIndexedDatabase.cpp:
        (WebCore::WorkerContextIndexedDatabase::supplementName):
        (WebCore):
        (WebCore::WorkerContextIndexedDatabase::from):
        * Modules/indexeddb/WorkerContextIndexedDatabase.h:
        (WorkerContextIndexedDatabase):
        * Modules/intents/DOMWindowIntents.cpp:
        (WebCore::DOMWindowIntents::supplementName):
        (WebCore):
        (WebCore::DOMWindowIntents::from):
        * Modules/intents/DOMWindowIntents.h:
        (DOMWindowIntents):
        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::UserMediaController::supplementName):
        * Modules/mediastream/UserMediaController.h:
        (UserMediaController):
        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::NavigatorContentUtils::supplementName):
        * Modules/navigatorcontentutils/NavigatorContentUtils.h:
        (NavigatorContentUtils):
        * Modules/networkinfo/NavigatorNetworkInfoConnection.cpp:
        (WebCore::NavigatorNetworkInfoConnection::supplementName):
        (WebCore):
        (WebCore::NavigatorNetworkInfoConnection::from):
        * Modules/networkinfo/NavigatorNetworkInfoConnection.h:
        (NavigatorNetworkInfoConnection):
        * Modules/networkinfo/NetworkInfoController.cpp:
        (WebCore::NetworkInfoController::supplementName):
        * Modules/networkinfo/NetworkInfoController.h:
        (NetworkInfoController):
        * Modules/notifications/DOMWindowNotifications.cpp:
        (WebCore::DOMWindowNotifications::supplementName):
        (WebCore):
        (WebCore::DOMWindowNotifications::from):
        * Modules/notifications/DOMWindowNotifications.h:
        (DOMWindowNotifications):
        * Modules/notifications/NotificationController.cpp:
        (WebCore::NotificationController::supplementName):
        * Modules/notifications/NotificationController.h:
        (NotificationController):
        * Modules/notifications/WorkerContextNotifications.cpp:
        (WebCore::WorkerContextNotifications::supplementName):
        (WebCore):
        (WebCore::WorkerContextNotifications::from):
        * Modules/notifications/WorkerContextNotifications.h:
        (WorkerContextNotifications):
        * Modules/quota/DOMWindowQuota.cpp:
        (WebCore::DOMWindowQuota::supplementName):
        (WebCore):
        (WebCore::DOMWindowQuota::from):
        * Modules/quota/DOMWindowQuota.h:
        (DOMWindowQuota):
        * Modules/speech/DOMWindowSpeechSynthesis.cpp:
        (WebCore::DOMWindowSpeechSynthesis::supplementName):
        (WebCore):
        (WebCore::DOMWindowSpeechSynthesis::from):
        * Modules/speech/DOMWindowSpeechSynthesis.h:
        (DOMWindowSpeechSynthesis):
        * Modules/speech/SpeechRecognitionController.cpp:
        (WebCore::SpeechRecognitionController::supplementName):
        * Modules/speech/SpeechRecognitionController.h:
        (SpeechRecognitionController):
        * Modules/vibration/Vibration.cpp:
        (WebCore::Vibration::supplementName):
        * Modules/vibration/Vibration.h:
        (Vibration):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::supplementName):
        (WebCore):
        (WebCore::DatabaseContext::existingDatabaseContextFrom):
        (WebCore::DatabaseContext::from):
        * Modules/webdatabase/DatabaseContext.h:
        (DatabaseContext):
        * dom/ContextFeatures.cpp:
        (WebCore::ContextFeatures::supplementName):
        * dom/ContextFeatures.h:
        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::supplementName):
        * dom/DeviceMotionController.h:
        (DeviceMotionController):
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::supplementName):
        * dom/DeviceOrientationController.h:
        (DeviceOrientationController):
        * loader/PrerendererClient.cpp:
        (WebCore::PrerendererClient::supplementName):
        * loader/PrerendererClient.h:
        (PrerendererClient):
        * page/DOMWindowPagePopup.cpp:
        (WebCore::DOMWindowPagePopup::supplementName):
        * page/DOMWindowPagePopup.h:
        (DOMWindowPagePopup):
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::supplementName):
        * page/SpeechInput.h:
        (SpeechInput):
        * platform/RefCountedSupplement.h:
        (WebCore::RefCountedSupplement::provideTo):
        (WebCore::RefCountedSupplement::from):
        * platform/Supplementable.h:
        (WebCore):
        (WebCore::Supplement::provideTo):
        (WebCore::Supplement::from):
        (WebCore::Supplementable::provideSupplement):
        (WebCore::Supplementable::removeSupplement):
        (WebCore::Supplementable::requireSupplement):
        (Supplementable):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::supplementName):
        (WebCore):
        (WebCore::InternalSettings::from):
        * testing/InternalSettings.h:
        (InternalSettings):

2013-01-22  Hajime Morrita  <morrita@google.com>

        non-ENABLE(DETAILS_ELEMENT) build fails.
        https://bugs.webkit.org/show_bug.cgi?id=107626

        Reviewed by Kent Tamura.

        No new tests, build configuration change.

        * rendering/RenderObject.h:
        (RenderObject): Added a missing condition.

2013-01-22  Dima Gorbik  <dgorbik@apple.com>

        Whitelist should also work for the WebVTT ::cue element without an argument
        https://bugs.webkit.org/show_bug.cgi?id=107488

        Reviewed by Andreas Kling.
        
        Apply filtering if the cue shadow pseudoId is set on the selector.

        Existing tests were modified to cover this case.

        * css/RuleSet.cpp:
        (WebCore::determinePropertyWhitelistType):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createSubtrees):
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::cueShadowPseudoId):

2013-01-22  Hayato Ito  <hayato@chromium.org>

        Make MediaQueryEvaluator(bool) constructor explicit.
        https://bugs.webkit.org/show_bug.cgi?id=107620

        Reviewed by Hajime Morita.

        No new tests: no change in behavior.

        * css/MediaQueryEvaluator.h:
        (MediaQueryEvaluator):

2013-01-22  Anders Carlsson  <andersca@apple.com>

        Use a platform strategy for local storage
        https://bugs.webkit.org/show_bug.cgi?id=107600

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * platform/PlatformStrategies.h:
        Add a way to create/get the storage strategy.

        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::localStorageNamespace):
        (WebCore::StorageNamespace::sessionStorageNamespace):
        Call the storage strategy.

        * storage/StorageNamespace.h:
        * storage/StorageStrategy.cpp: Added.
        (WebCore::StorageStrategy::localStorageNamespace):
        (WebCore::StorageStrategy::sessionStorageNamespace):
        Call through to StorageNamespaceImpl.

        * storage/StorageStrategy.h: Added.

2013-01-22  Jun Jiang  <jun.a.jiang@intel.com>

        Optimize the texture packing for texImage2D() and texSubImage2D() in WebGL
        https://bugs.webkit.org/show_bug.cgi?id=105821

        Reviewed by Kenneth Russell.

        The original texture packing code uses function pointers to denote each unpack and pack operations for different combination of Source formats,
        Destination formats and Alpha Operations. It could be made cleaner and simpler. In this patch, template functions are used and try best to avoid
        generating useless code for unreachable path to avoid code bloat. Moreover, the flipY operation is moved into the pack operation instead of
        operating in a standalone method to improve performance.

        Already covered by current test.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::texImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::packImageData):
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::extractTextureData):
        (WebCore):
        (WebCore::GraphicsContext3D::packPixels):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::srcFormatComeFromDOMElementOrImageData):
        (GraphicsContext3D):
        (WebCore::GraphicsContext3D::ImageExtractor::imageSourceFormat):
        (ImageExtractor):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::getSourceDataFormat):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

2013-01-21  Kentaro Hara  <haraken@chromium.org>

        Implement UIEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=107430

        Reviewed by Adam Barth.

        Editor's draft: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm

        UIEvent constructor is implemented under a DOM4_EVENTS_CONSTRUCTOR flag,
        which is enabled on Safari and Chromium for now.

        Test: fast/events/constructors/ui-event-constructor.html

        * Configurations/FeatureDefines.xcconfig:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * dom/UIEvent.cpp:
        (WebCore::UIEventInit::UIEventInit):
        (WebCore):
        (WebCore::UIEvent::UIEvent):
        * dom/UIEvent.h:
        (WebCore):
        (UIEventInit):
        (UIEvent):
        (WebCore::UIEvent::create):
        (WebCore::UIEvent::view):
        (WebCore::UIEvent::detail):
        (FocusInEventDispatchMediator):
        (FocusOutEventDispatchMediator):
        * dom/UIEvent.idl:

2013-01-22  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove IDBKey from WebKitIDL
        https://bugs.webkit.org/show_bug.cgi?id=97375

        Reviewed by Kentaro Hara.

        Now that references to the artificial IDBKey type have been removed from all IDLs, remove
        the support code, and move the conversion code into the IDBBindingUtilities. Removes
        references to the autogenerated {V8,JS}IDBKey{Custom,}.{cpp,h} from the project files.

        No new tests - just code moves/removing unused code. Updated binding reference test results.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBKey.idl: Removed.
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::toJS): Moved here from JSIDBKeyCustom.cpp
        (WebCore):
        * bindings/js/JSIDBKeyCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallString):
        (GetNativeType):
        (JSValueToNative):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl: Removed IDBKey-specific test.
        * bindings/scripts/test/V8/V8TestObj.cpp:
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::toV8): Moved here from V8IDBKeyCustom.cpp
        (WebCore):
        * bindings/v8/custom/V8IDBKeyCustom.cpp: Removed.

2013-01-22  Tony Gentilcore  <tonyg@chromium.org>

        Fix assertions in make8BitFrom16BitSource() with threaded parser
        https://bugs.webkit.org/show_bug.cgi?id=107596

        Reviewed by Adam Barth.

        This fixes an assertion in several fast/parser tests. We need to keep track of whether the data is all 8bit.
        Luckily this doesn't cost us any size on CompactHTMLToken because the bitfields are collapsed (verified by COMPILE_ASSERT).

        No new tests because covered by existing fast/parser tests.

        * html/parser/CompactHTMLToken.cpp:
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        * html/parser/CompactHTMLToken.h:
        (WebCore::CompactHTMLToken::isAll8BitData):
        (CompactHTMLToken):
        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):

2013-01-22  Tony Gentilcore  <tonyg@chromium.org>

        Fix ASSERT(!hasInsertionPoint()) in threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=107593

        Reviewed by Adam Barth.

        Prior to this patch, several fast/parser tests hit ASSERT(!hasInsertionPoint()) in prepareToStopParsing().
        That was because hasInsertionPoint() checks m_input.haveSeenEndOfFile() which was skipped for the threaded
        parser case. This patch causes us to call markEndOfFile().

        No new tests because covered by existing fast/parser tests.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveTokensFromBackgroundParser): This FIXME was done in a previous patch.
        (WebCore::HTMLDocumentParser::finish):

2013-01-22  Joshua Bell  <jsbell@chromium.org>

        Prevent race condition during Worker shutdown
        https://bugs.webkit.org/show_bug.cgi?id=107577

        Reviewed by Dmitry Titov.

        During worker shutdown, from the main thread a cleanup task is posted followed by
        terminating the message queue, which prevents further tasks from being processed. It was
        possible for another task be posted by another thread between the main thread calls
        to postTask and terminate(), which would cause that task to run after cleanup. Expose
        a new WTF::MessageQueue::appendAndKill() method which keeps a mutex around the two steps,
        and use that during worker shutdown.

        No reliable tests for the race - problem identified by inspection of user crash stacks.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::postTaskAndTerminate): New method, uses MessageQueue::appendAndKill()
        * workers/WorkerRunLoop.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop): Uses postTaskAndTerminate() to avoid race.

2013-01-22  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r140171.
        http://trac.webkit.org/changeset/140171
        https://bugs.webkit.org/show_bug.cgi?id=107193

        Regressed scrollable region size in other cases.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):

2013-01-22  Alexey Proskuryakov  <ap@apple.com>

        [WK2] WebProcessService is not terminated when page is closed
        https://bugs.webkit.org/show_bug.cgi?id=107595

        Reviewed by Anders Carlsson.

        * platform/mac/RunLoopMac.mm: (WebCore::RunLoop::stop): Allow stopping XPC service
        run loop. Also, harmonized NSApp vs. [NSApplication sharedApplication] usage.

2013-01-22  Ojan Vafai  <ojan@chromium.org>

        REGRESION(r130774): preferred width of tables does not take max-width into account
        https://bugs.webkit.org/show_bug.cgi?id=107576

        Reviewed by Tony Chang.

        Constrain preferred widths by min/max the way we do in other
        RenderBlock subclasses. Eventually, we'll shared the code with
        RenderBlock, but this is an incremental step in that direction
        that we can safely merge into release branches.

        Test: fast/table/min-max-width-preferred-size.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computePreferredLogicalWidths):

2013-01-22  Adam Barth  <abarth@webkit.org>

        The BackgroundHTMLParser shouldn't pause when waiting for scripts
        https://bugs.webkit.org/show_bug.cgi?id=107584

        Reviewed by Eric Seidel.

        Previously, the BackgroundHTMLParser would pause itself when it
        encountered a scrip tag and wait for a signal from the main thread to
        continue. After this patch, the BackgroundHTMLParser continues ahead
        and the main thread keeps a queue of pending tokens.

        This patch brings us closer to speculative parsing because when the
        BackgroundHTMLParser is continuing ahead, it is speculating that it is
        in the correct state. A future patch will let us abort incorret
        speculations and resume from an eariler point in the input stream.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::checkThatTokensAreSafeToSendToAnotherThread):
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::simulateTreeBuilder):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::TokenDelivery::TokenDelivery):
        (TokenDelivery):
        (WebCore::TokenDelivery::execute):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):
        * html/parser/CompactHTMLToken.h:
        (WebCore):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveTokensFromBackgroundParser):
        (WebCore):
        (WebCore::HTMLDocumentParser::processTokensFromBackgroundParser):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):

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

        Fix scrollperf logging
        https://bugs.webkit.org/show_bug.cgi?id=107589

        Reviewed by Tim Horton.

        The scrollperf logging had two issues:

        1. It relied on a paint logging a "filled" event, but it's possible
        for existing tiles to be moved into the viewport and filling it, so
        we need to log from the scrolling thread both when we have unfilled pixels,
        and when the last scroll revealed unfilled pixels.
        
        2. On some pages, z-index:-1 elements behind the body cause the root
        TileCache to have drawsContent set to false, so none of its tiles paint. In
        that case, the check for a non-zero paintCount in TileCache::blankPixelCountForTiles()
        was wrong; we don't think there's a way to have an unpainted tile in the tree.
        
        Also fix the signature of blankPixelCountForTiles() to take references.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        (ScrollingTreeScrollingNodeMac):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::ScrollingTreeScrollingNodeMac):
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):
        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::blankPixelCountForTiles):

2013-01-22  Eric Seidel  <eric@webkit.org>

        Make CompactHTMLToken a little more compact
        https://bugs.webkit.org/show_bug.cgi?id=107317

        Reviewed by Adam Barth.

        The windows builders got sad because MSVC won't combine
        adjacent bit-fields with different types.  Changing
        bool to unsigned should fix the problem.

        * html/parser/CompactHTMLToken.h:
        (CompactHTMLToken):

2013-01-22  Anthony Scian  <ascian@rim.com>

        [Blackberry] Static code analysis warning fixes
        https://bugs.webkit.org/show_bug.cgi?id=107464

        Reviewed by Rob Buis.

        Klocwork issues: 1367, 2367
        - add NULL pointer checks detected by static code analysis

        * platform/blackberry/WidgetBlackBerry.cpp:
        (WebCore::Widget::setCursor):
        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::updatePluginWidget):

2013-01-22  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Enable Page Visibility (PAGE_VISIBILITY_API)
        https://bugs.webkit.org/show_bug.cgi?id=107230

        Reviewed by David Kilzer.

        No new tests. Covered by existing tests which are now unskipped.

        * Configurations/FeatureDefines.xcconfig:

2013-01-22  Tony Gentilcore  <tonyg@chromium.org>

        Make BackgroundHTMLParser track line/column numbers
        https://bugs.webkit.org/show_bug.cgi?id=107561

        Reviewed by Adam Barth.

        No new tests because covered by existing fast/parser tests.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        * html/parser/CompactHTMLToken.cpp:
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        * html/parser/CompactHTMLToken.h:
        (CompactHTMLToken):
        (WebCore::CompactHTMLToken::textPosition):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveTokensFromBackgroundParser):
        (WebCore::HTMLDocumentParser::lineNumber):
        (WebCore::HTMLDocumentParser::textPosition):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):

2013-01-22  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Don't assert when deprecated setCallbacks is called
        https://bugs.webkit.org/show_bug.cgi?id=107580

        Reviewed by Tony Chang.

        Remove an assert for IDBTransactionBackendImpl that was deprecated
        in a previous commit, but is still called by old chromium code.
        After the chromium code is removed, this method will be removed
        entirely.

        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::setCallbacks):

2013-01-22  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Disable CSS Regions in release builds
        https://bugs.webkit.org/show_bug.cgi?id=106541

        Reviewed by Martin Robinson.

        The CSS Regions feature is not yet deemed stable enough to be enabled
        in release builds, so disable it. It's still enabled for development
        builds, via FeatureList.pm.

        No new tests - no testable changes.

        * GNUmakefile.features.am.in:

2013-01-22  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable the <template> element support in development builds
        https://bugs.webkit.org/show_bug.cgi?id=106575

        Reviewed by Martin Robinson.

        Add a missing build target that contains the custom JS bindings.

        No new tests - the related tests are being unskipped and mostly pass.

        * GNUmakefile.list.am:

2013-01-22  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove dependency on IDBKey type from IDLs
        https://bugs.webkit.org/show_bug.cgi?id=106912

        Reviewed by Kentaro Hara.

        This is a preamble to wkbug.com/97375 "Remove IDBKey from WebKitIDL"; IDBKey is
        not a concept from the Indexed DB spec but a convenient internal type. It was
        exposed in the IDL with custom binding code and special cases in the generator
        to map from script values to the WebCore type. To remove those special cases
        and match the WebIDL in the spec, the IDLs are changed to use "any" and the
        implementations now take ScriptValues. This does mean that each call site must
        call into IDBBindingUtilities to map from ScriptValue to IDBKey.

        No new tests - just a refactor.

        * Modules/indexeddb/IDBAny.cpp: Remove IDBKey as a variant type - just use ScriptValue.
        * Modules/indexeddb/IDBAny.h:
        (WebCore):
        (IDBAny):
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::continueFunction): Now takes any/ScriptValue.
        (WebCore):
        * Modules/indexeddb/IDBCursor.h:
        (WebCore::IDBCursor::continueFunction):
        (IDBCursor):
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::cmp): Now takes any/ScriptValue.
        * Modules/indexeddb/IDBFactory.h:
        (IDBFactory):
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor): Now takes any/ScriptValue.
        (WebCore::IDBIndex::count): Now takes any/ScriptValue.
        (WebCore::IDBIndex::openKeyCursor): Now takes any/ScriptValue.
        (WebCore::IDBIndex::get): Now takes any/ScriptValue.
        (WebCore::IDBIndex::getKey): Now takes any/ScriptValue.
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (IDBIndex):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::create): Add helper for back-end creation of single-key ranges.
        (WebCore):
        (WebCore::IDBKeyRange::lowerValue): Impl. of new "any" type accessor exposed to script.
        (WebCore::IDBKeyRange::upperValue): Ditto.
        (WebCore::IDBKeyRange::only): Now takes any/ScriptValue.
        (WebCore::IDBKeyRange::lowerBound): Now takes any/ScriptValue.
        (WebCore::IDBKeyRange::upperBound): Now takes any/ScriptValue.
        (WebCore::IDBKeyRange::bound): Now takes any/ScriptValue.
        * Modules/indexeddb/IDBKeyRange.h:
        (IDBKeyRange):
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get): Now takes any/ScriptValue.
        (WebCore::IDBObjectStore::add): Now takes any/ScriptValue.
        (WebCore):
        (WebCore::IDBObjectStore::put): Now takes any/ScriptValue.
        (WebCore::IDBObjectStore::deleteFunction): Now takes any/ScriptValue.
        (WebCore::IDBObjectStore::openCursor): Now takes any/ScriptValue.
        (WebCore::IDBObjectStore::count): Now takes any/ScriptValue.
        * Modules/indexeddb/IDBObjectStore.h:
        (IDBObjectStore):
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBRequest.cpp: Result IDBAny type is now ScriptValue.
        (WebCore::IDBRequest::onSuccess):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::scriptValueToIDBKey): The inverse of idbKeyToScriptValue().
        (WebCore):
        * bindings/js/IDBBindingUtilities.h:
        (WebCore):
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::scriptValueToIDBKey): Ditto.
        (WebCore):
        * bindings/v8/IDBBindingUtilities.h:
        (WebCore):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8): Remove IDBKey variant type.

2013-01-22  Justin Schuh  <jschuh@chromium.org>

        TRANSFORMATION_MATRIX_USE_X86_64_SSE2 broken for 64-bit Windows builds
        https://bugs.webkit.org/show_bug.cgi?id=107498

        Reviewed by James Robinson.
        
        Enable TRANSFORMATION_MATRIX_USE_X86_64_SSE2 for 64-bit Windows.

        No new tests. Covered by existing tests.

        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore):
        (TransformationMatrix):

2013-01-22  Min Qin  <qinmin@chromium.org>

        Fix a race condition on SkBitmap::lockPixels()/unlockPixels() for lazy image decoding
        https://bugs.webkit.org/show_bug.cgi?id=107404

        Reviewed by Stephen White.

        Skbitmap::lockPixels()/unlockPixels() are not threadsafe.
        unlike SkPixelRef, these 2 calls are not protected by an internal mutex.
        Bugfix, no behaviral change and hard to test as tests will be flaky.

        * platform/graphics/chromium/ImageDecodingStore.cpp:
        (WebCore::ImageDecodingStore::lockCache):
        (WebCore::ImageDecodingStore::unlockCache):
        (WebCore::ImageDecodingStore::insertAndLockCache):
        (WebCore::ImageDecodingStore::overwriteAndLockCache):
        * platform/graphics/chromium/ImageDecodingStore.h:
        (ImageDecodingStore):

2013-01-22  Eric Seidel  <eric@webkit.org>

        Make CompactHTMLToken a little more compact
        https://bugs.webkit.org/show_bug.cgi?id=107317

        Reviewed by Darin Adler.

        Reduce the size of CompactHTMLToken by two pointers.
        The abuse of the attribute vector to store the DOCTYPE strings
        is kinda lame, but makes a lot of sense given how rare DOCTYPE tokens are.

        The resulting CompactHTMLToken vector should be a smaller malloc and thus faster.
        However I saw no perf change on html-parser-srcdoc.html.

        * html/parser/CompactHTMLToken.cpp:
        (SameSizeAsCompactHTMLToken):
        (WebCore):
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        (WebCore::CompactHTMLToken::isSafeToSendToAnotherThread):
        * html/parser/CompactHTMLToken.h:
        (WebCore::CompactHTMLToken::type):
        (CompactHTMLToken):
        (WebCore::CompactHTMLToken::publicIdentifier):
        (WebCore::CompactHTMLToken::systemIdentifier):

2013-01-22  Elliott Sprehn  <esprehn@chromium.org>

        Assertion parent->inDocument() failed in WebCore::PseudoElement::PseudoElement
        https://bugs.webkit.org/show_bug.cgi?id=106224

        Reviewed by Ojan Vafai.

        Appending a node that contains a <style> and also elements that should have
        generated content can cause us to create PseudoElements in nodes that are not
        yet inDocument because we may recalcStyle in HTMLStyleElement::insertedInto
        triggering a reattach() which could then traverse into the siblings of the
        <style> attaching them even though they are not yet inDocument.

        This means that we should not assert about the parent of a PseudoElement
        being inDocument as this is not always the case.

        Instead forward Node::insertedInto and removedFrom notifications to
        PseudoElements so they will correctly get their inDocument bit set. Nothing
        in the code appears to depend on them being inDocument we just make sure to
        set it so they're consistent with the rest of the document.

        No new tests, there's no way to test that PseudoElements are really inDocument.

        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::PseudoElement):

2013-01-22  Alexis Menard  <alexis@webkit.org>

        Allow construction of unprefixed transition DOM events.
        https://bugs.webkit.org/show_bug.cgi?id=107319

        Reviewed by Dean Jackson.

        Make possible to construct unprefixed DOM events for transitions.
        Unfortunately I have to duplicate the C++ implementation class of the
        events (TransitionEvent.h and TransitionEvent.cpp). I can't find a
        better way to re-use the WebKitTransitionEvent class to back the
        TransitionEvent.idl as our code generators don't allow to have a
        different name for the C++ class used in the generated file than the
        interface name specified in the IDL file. Unfortunately
        https://trac.webkit.org/wiki/WebKitIDL#InterfaceName doesn't help as
        it's only a way to unlink the interface name specified in the IDL with
        the one exposed in JavaScript. I don't think we should support such a
        feature in our code generators as WebKitTransitionEvent class and more
        exactly prefixed DOM events for transitions will be removed one day so
        this use case will become obselete.

        Test: fast/events/constructors/transition-event-constructor.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/EventNames.in:
        * dom/TransitionEvent.cpp: Added.
        (WebCore):
        (WebCore::TransitionEventInit::TransitionEventInit):
        (WebCore::TransitionEvent::TransitionEvent):
        (WebCore::TransitionEvent::~TransitionEvent):
        (WebCore::TransitionEvent::propertyName):
        (WebCore::TransitionEvent::elapsedTime):
        (WebCore::TransitionEvent::interfaceName):
        * dom/TransitionEvent.h: Added.
        (WebCore):
        (TransitionEventInit):
        (TransitionEvent):
        (WebCore::TransitionEvent::create):
        * dom/TransitionEvent.idl: Added.
        * page/DOMWindow.idl:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): always
        create a TransitionEvent now. EventTarget will be responsible to create
        a WebKitTransitionEvent if necessary.

2013-01-22  Adam Barth  <abarth@webkit.org>

        Wean BackgroundHTMLParser off HTMLInputStream
        https://bugs.webkit.org/show_bug.cgi?id=107575

        Reviewed by Eric Seidel.

        The BackgroundHTMLParser doesn't need to use HTMLInputStream because it
        doesn't need to handle nested calls to document.write. Instead, we can
        just use a SegmentedString directly, which will let us checkpoint
        m_input for speculation.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::append):
        (WebCore::BackgroundHTMLParser::finish):
        (WebCore::BackgroundHTMLParser::markEndOfFile):
        (WebCore):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):

2013-01-22  Sergio Villar Senin  <svillar@igalia.com>

        [Soup] Random thread crashes
        https://bugs.webkit.org/show_bug.cgi?id=107439

        Reviewed by Martin Robinson.

        Process all pending requests in the inner GMainContext created to
        perform synchronous requests before restoring the thread default. No
        new tests required, already covered by network tests.

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

2013-01-22  Christophe Dumez  <christophe.dumez@intel.com>

        [gstreamer] GstBus signal watch should be removed on clean up
        https://bugs.webkit.org/show_bug.cgi?id=107544

        Reviewed by Philippe Normand.

        Our gstreamer backend code currently calls gst_bus_add_signal_watch()
        on GstBus to add a signal watch. As per the gstreamer  documentation,
        "To clean up, the caller is responsible for calling
        gst_bus_remove_signal_watch() as many times as this function is
        called". This is because gst_bus_add_signal_watch() causes the GstBus
        object to be ref'd and gst_bus_remove_signal_watch() needs to be
        called to properly unref it.

        This patch makes sure that gst_bus_remove_signal_watch() is called
        on the GstBus object when cleaning up. This patch also uses smart
        pointers for GstBus objects for consistency.

        No new tests, no behavior change for layout tests.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::GStreamerGWorld):
        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        (webkitGstPipelineGetBus):
        * platform/graphics/gstreamer/GStreamerVersioning.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):

2013-01-22  Adam Barth  <abarth@webkit.org>

        BackgroundHTMLParser should simulate tree building in a separate function
        https://bugs.webkit.org/show_bug.cgi?id=107569

        Reviewed by Eric Seidel.

        This patch cleans up BackgroundHTMLParser::pumpTokenizer to prepare for
        implementing speculative parsing.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::simulateTreeBuilder):
        (WebCore):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        * html/parser/BackgroundHTMLParser.h:
        (BackgroundHTMLParser):
        * page/Settings.in:

2013-01-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140435.
        http://trac.webkit.org/changeset/140435
        https://bugs.webkit.org/show_bug.cgi?id=107565

        Crashes on ClusterFuzz due to float not removed (Requested by
        inferno-sec on #webkit).

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

2013-01-22  Robert Hogan  <robert@webkit.org>

        When we do setAttribute("border", null) on a table we should create a border like every other browser
        https://bugs.webkit.org/show_bug.cgi?id=102112

        Reviewed by Ryosuke Niwa.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/rendering.html#tables says:
        "If the [table's border] attribute is present but parsing the attribute's value using the rules for parsing 
        non-negative integers generates an error, a default value of 1px is expected to be used for that property instead."

        Match the spec and bring us into line with other browsers by observing the 'parsing non-negative integers' algorithm.

        Tests: fast/dom/HTMLTableElement/table-with-invalid-border.html
               fast/table/table-with-borderattr-null.html
               fast/table/table-with-borderattr-set-to-null.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseBorderWidthAttribute):
        (WebCore::HTMLElement::applyBorderAttributeToStyle):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectStyleForPresentationAttribute):
        (WebCore::HTMLTableElement::parseAttribute):

2013-01-22  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::RenderObject::isDescendantOf
        https://bugs.webkit.org/show_bug.cgi?id=107226

        Reviewed by Emil A Eklund.

        Test: fast/block/float/overhanging-float-not-removed-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists):
        Skip anonymous blocks in the chain to get the enclosing block and
        be able to correctly mark the overhanging floats in the next siblings.

2013-01-22  Justin Schuh  <jschuh@chromium.org>

        Silence MSVC 64-bit build warning c4309 for FrameTree::invalidCount
        https://bugs.webkit.org/show_bug.cgi?id=107439

        Reviewed by Dimitri Glazkov.
        
        MSVC detects that the constant notFound is truncated on assignment to
        invalidCount. Since we never compare them (as it would always fail on
        64-bit anyway), just initialize invalidCount directly to -1.

        No new tests. No behavior changed.

        * page/FrameTree.h:
        (FrameTree):

2013-01-22  Zan Dobersek  <zdobersek@igalia.com>

        [Autotools] Remove the Canvas Path configuration option
        https://bugs.webkit.org/show_bug.cgi?id=107537

        Reviewed by Martin Robinson.

        No new tests - no new testable functionality.

        * GNUmakefile.am: Remove the Automake conditional analysis, the related
        configuration option is being removed as well.
        * GNUmakefile.features.am.in: Add the ENABLE_CANVAS_PATH feature define,
        defaulting to 0 in release builds (but is disabled in development builds
        of the GTK port as well at the moment).

2013-01-18  Stephen Chenney  <schenney@chromium.org>

        Asserts when textPath is used with no path
        https://bugs.webkit.org/show_bug.cgi?id=107324

        Reviewed by Eric Seidel.

        We assert when there is no path associated with an SVG text path
        element. Instead, this patch detects the condition and stops trying to
        layout text for that textPath  element.

        Test: svg/text/tpath-without-path.svg

        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::beginTextPathLayout):
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):

2013-01-22  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] jump to prev/next drawing call in the replay
        https://bugs.webkit.org/show_bug.cgi?id=107551

        Reviewed by Pavel Feldman.

        Implement jumping to the next(previous) drawing call in the WebGL and canvas 2D replay.

        * English.lproj/localizedStrings.js:
        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype.dispose):
        (WebInspector.CanvasProfileView.prototype._onReplayDrawingCallClick):
        * inspector/front-end/canvasProfiler.css:
        (.canvas-replay-prev-draw img):
        (.canvas-replay-next-draw img):

2013-01-22  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: remove asynchronous behavior from DTE paintLines method
        https://bugs.webkit.org/show_bug.cgi?id=107550

        Reviewed by Pavel Feldman.

        Remove paintLinesOperationCredit and all asynchronous behaviour from paintLines method;
        also, remove paintLineChunks method.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype.expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._highlightDataReady):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._renderRanges):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):

2013-01-22  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] "Secure" cookies can not be deleted.
        https://bugs.webkit.org/show_bug.cgi?id=107543

        Reviewed by Pavel Feldman.

        To delete secure cookie URL schema need to be "https" instead of "http".

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._deleteCookie):
        Take care of secure cookies.

2013-01-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140420.
        http://trac.webkit.org/changeset/140420
        https://bugs.webkit.org/show_bug.cgi?id=107557

        Still causes crashes (EFL this time) (Requested by kov on
        #webkit).

        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        * platform/graphics/gstreamer/GStreamerVersioning.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient):
        (_WebKitWebSrcPrivate):
        (webKitWebSrcFinalize):
        (webKitWebSrcStop):
        (StreamingClient::didReceiveData):
        * platform/network/ResourceHandleClient.h:
        (ResourceHandleClient):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::nextMultipartResponsePartCallback):
        (WebCore::sendRequestCallback):
        (WebCore::readCallback):

2013-01-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Crash in PasteboardQt.cpp Pasteboard::writeSelection
        https://bugs.webkit.org/show_bug.cgi?id=102192

        Patch by Fabien Valée
        Reviewed by Jocelyn Turcotte.

        QClipboard::setMimeData transfers ownership of QMimeData to the clipboard,
        so we should not access it afterwards.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):

2013-01-22  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r140414): It is causing crashes with gstreamer 0.10
        https://bugs.webkit.org/show_bug.cgi?id=107554

        Reviewed by Philippe Normand.

        gstreamer 0.10 doc led me to believe that gst_element_factory_make()
        was not returning a floating reference. However, based on testing
        (and results on Qt port) it does so we should NOT adopt the
        returned GstElement object.

        No new tests, already covered by existing tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

2013-01-22  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: do not highlight really long lines in DTE.
        https://bugs.webkit.org/show_bug.cgi?id=107531

        Reviewed by Pavel Feldman.

        Improve TextEditorHighlighter.orderedRangesPerLine method to return
        only ranges that start before particular column.

        Test: inspector/editor/text-editor-long-line.html

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.setHighlightLineLimit):
        (WebInspector.TextEditorHighlighter.prototype.orderedRangesPerLine.comparator):
        (WebInspector.TextEditorHighlighter.prototype.orderedRangesPerLine):

2013-01-22  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GStreamer][Soup] Let GStreamer provide the buffer data is downloaded to, to avoid copying
        https://bugs.webkit.org/show_bug.cgi?id=105552

        Reviewed by Philippe Normand.

        Makes it possible for the GStreamer media backend to provide the buffer to which
        the Soup networking backend will use to download data to. This makes copying
        memory unnecessary when ResourceHandle hands data over to the media player's
        StreamingClient. Thanks to Dan Winship for help designing the interface.

        No behaviour change, covered by existing tests.

        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        (createGstBufferForData): New helper to create a GstBuffer when
        we have a data pointer and a length.
        (getGstBufferSize): Abstract obtaining the size of the buffer, so the code
        is cleaner while still working for both GST 0.10 and 1.0.
        (setGstBufferSize): Ditto, but for setting the size.
        (getGstBufferDataPointer): Ditto, but for grabbing the data pointer.
        (mapGstBuffer): Convenience method to take care of mapping the buffer so that
        we can provide the data pointer to ResourceHandle.
        (unmapGstBuffer): Convenience method which takes care of unmapping the buffer
        and properly freeing the GstMapInfo.
        * platform/graphics/gstreamer/GStreamerVersioning.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient): New methods.
        (_WebKitWebSrcPrivate): We now store the GstBuffer we provided the data pointer from
        so we can later unmap it and push it to the pipeline.
        (webKitWebSrcDispose): Deal with the GstBuffer in case it exists when the source is
        destroyed.
        (webKitWebSrcStop): Also clear the GstBuffer in this case.
        (StreamingClient::didReceiveData): Handle the hand-over of the buffer.
        (StreamingClient::getBuffer): Provide ResourceHandle with a new GstBuffer's data pointer.
        * platform/network/ResourceHandleClient.h:
        (ResourceHandleClient):
        (WebCore::ResourceHandleClient::ResourceHandleClient): Constructor to initialize the buffer
        member variable to 0.
        (WebCore::ResourceHandleClient::~ResourceHandleClient): Destructor to free the buffer if it
        has been allocated.
        (WebCore::ResourceHandleClient::getBuffer): Default implementation which returns a
        newly allocated char pointer.
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (ResourceHandleInternal): Store actual buffer size, which is no longer a constant.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupSoupRequestOperation): Clear the buffer pointer, the life-cycle of the
        buffer is handled by the ResourceHandleClient.
        (WebCore::nextMultipartResponsePartCallback): Get a new buffer from the client before reading.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::readCallback): Ditto.

2013-01-22  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Fix context menu localized string
        https://bugs.webkit.org/show_bug.cgi?id=107536

        One of localized string has a marker. Since EFL port does not support them
        it has to be removed, so the string will be displayed properly.

        Reviewed by Laszlo Gombos.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping)

2013-01-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140412.
        http://trac.webkit.org/changeset/140412
        https://bugs.webkit.org/show_bug.cgi?id=107549

        Broke rendering of buttons on gmail (Requested by carewolf on
        #webkit).

        * platform/graphics/qt/TransparencyLayer.h:
        (WebCore::TransparencyLayer::TransparencyLayer):

2013-01-22  Christophe Dumez  <christophe.dumez@intel.com>

        [gstreamer] MediaPlayerPrivateGStreamer should take ownership of the playbin
        https://bugs.webkit.org/show_bug.cgi?id=107445

        Reviewed by Philippe Normand.

        In gstreamer 1.0, gst_element_factory_make() now returns a floating reference.
        MediaPlayerPrivateGStreamer calls gst_element_factory_make() to create the
        playbin object but does not take ownership of the object. As a consequence,
        the object keeps floating until it is unref'd in the
        MediaPlayerPrivateGStreamer destructor.

        This patch uses a GRefPtr<GstElement> to store the playbin object and only
        adopt the object returned by gst_element_factory_make() if gstreamer 0.10
        is used. When gstreamer 1.0 is used, the returned object will not be adopted,
        which will remove the floating reference. This way, we ensure that the
        playbin object is owned by MediaPlayerPrivateGStreamer.

        No new tests, no behavior change for layout tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition):
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        (WebCore::MediaPlayerPrivateGStreamer::duration):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::paused):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::setVolume):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVolumeChange):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::buffered):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2013-01-22  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix closure compiler warning in inspector front-end after r140390.

        * inspector/front-end/HeapSnapshotView.js:

2013-01-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Box shadows on a transparency layer is very slow
        https://bugs.webkit.org/show_bug.cgi?id=107547

        Reviewed by Noam Rosenthal.

        Set an initial clip on the transparency layer, so that the clipping
        bounds will never end up larger than the layer.

        * platform/graphics/qt/TransparencyLayer.h:
        (WebCore::TransparencyLayer::TransparencyLayer):

2013-01-22  Matt Falkenhagen  <falken@chromium.org>

        Move top layer flag from ElementRareData to NodeFlags
        https://bugs.webkit.org/show_bug.cgi?id=107542

        Reviewed by Hajime Morita.

        This is a speculative fix for a perf regression (https://bugs.webkit.org/show_bug.cgi?id=106726)
        likely due to checking the top layer flag in Element::removedFrom. It
        also simplifies code dealing with top layer and makes it no longer
        necessary to allocate rare data for top layer.

        * dom/Element.cpp:
        (WebCore::Element::removedFrom): Check isInTopLayer first in case it helps fix the perf regression.
        (WebCore):
        * dom/Element.h: Move top layer functions from Element to Node.
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData): Remove top layer flag from ElementRareData.
        * dom/Node.cpp: Move top layer functions from Element to Node.  
        (WebCore):
        (WebCore::Node::setIsInTopLayer):
        * dom/Node.h:
        (Node):
        (WebCore::Node::isInTopLayer):
        * dom/NodeRenderingContext.cpp: Remove unnecessary casts to Element for isInTopLayer().
        (WebCore::isRendererReparented):
        (WebCore::NodeRenderingContext::previousRenderer):
        (WebCore::NodeRenderingContext::parentRenderer):
        * rendering/RenderLayer.cpp: Ditto.
        (WebCore::RenderLayer::isInTopLayer):
        (WebCore::RenderLayer::rebuildZOrderLists):

2013-01-22  Mark Lam  <mark.lam@apple.com>

        Fix broken mac builds due to <http://trac.webkit.org/changeset/140399>.
        https://bugs.webkit.org/show_bug.cgi?id=100710.

        Not reviewed.

        No new tests.

        * WebCore.xcodeproj/project.pbxproj:

2013-01-22  Dan Carney  <dcarney@google.com>

        [v8] Convert string conversion calls to one byte versions
        https://bugs.webkit.org/show_bug.cgi?id=107524

        Reviewed by Kentaro Hara.

        No new tests. No change in functionality.

        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/V8StringResource.cpp:
        (WebCore::WebCoreStringResourceBase::toWebCoreStringResourceBase):
        (StringTraits):
        (WebCore::true):
        (WebCore::v8StringToWebCoreString):

2013-01-22  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] CookiesTable refactoring.
        https://bugs.webkit.org/show_bug.cgi?id=107511

        Reviewed by Pavel Feldman.

        CookiesTable uses integer indexes as column identifiers.
        This leads to cryptic code.

        Descriptive column identifiers will make code clearer.
        Also "addCookiesFolder" replaced with "setCookieFolders" to avoid
        repetitive "_rebuildTable" invocation.

        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable): Use descriptive column identifiers.
        (WebInspector.CookiesTable.prototype.setCookieFolders):
        Accept multiple folders.
        (WebInspector.CookiesTable.prototype._rebuildTable):
        Use descriptive column identifiers.
        (WebInspector.CookiesTable.prototype._sortCookies):
        Ditto.
        (WebInspector.CookiesTable.prototype._createGridNode):
        Ditto.
        * inspector/front-end/RequestCookiesView.js:
        (WebInspector.RequestCookiesView.prototype._buildCookiesTable):
        Use "setCookieFolders".

2013-01-22  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Disable support for unprefixed CSS animations, transitions, transforms in release builds
        https://bugs.webkit.org/show_bug.cgi?id=107436

        Reviewed by Alexis Menard.

        Disable the unprefixed CSS animations, transitions and transforms support
        in the release builds for now. The work in this area is not yet complete
        and should not ship in such state.

        No new tests - no new functionality.

        * GNUmakefile.features.am.in:

2013-01-22  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] SASSSourceMapping broken: _bindUISourceCode method is absent
        https://bugs.webkit.org/show_bug.cgi?id=107529

        Reviewed by Pavel Feldman.

        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping.prototype._fileSaveFinished):

2013-01-22  Adam Barth  <abarth@webkit.org>

        AtomicMarkupTokenBase must die
        https://bugs.webkit.org/show_bug.cgi?id=107513

        Reviewed by Eric Seidel.

        Now that NEW_XML has been removed from the tree, there is no reason to
        have AtomicMarkupTokenBase exist as a templated base class for
        AtomicHTMLToken. This patch just merges the code back into
        AtomicHTMLToken.

        * html/parser/HTMLToken.h:
        (AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::type):
        (WebCore::AtomicHTMLToken::name):
        (WebCore::AtomicHTMLToken::setName):
        (WebCore::AtomicHTMLToken::selfClosing):
        (WebCore::AtomicHTMLToken::getAttributeItem):
        (WebCore::AtomicHTMLToken::attributes):
        (WebCore::AtomicHTMLToken::characters):
        (WebCore::AtomicHTMLToken::charactersLength):
        (WebCore::AtomicHTMLToken::isAll8BitData):
        (WebCore::AtomicHTMLToken::comment):
        (WebCore::AtomicHTMLToken::publicIdentifier):
        (WebCore::AtomicHTMLToken::systemIdentifier):
        (WebCore::AtomicHTMLToken::clearExternalCharacters):
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (WebCore::AtomicMarkupTokenBase::initializeAttributes):
        (WebCore):
        * xml/parser/MarkupTokenBase.h:

2013-01-22  Eric Seidel  <eric@webkit.org>

        Turn on ENABLE_THREADED_HTML_PARSER for Chromium (it's still disabled at runtime)
        https://bugs.webkit.org/show_bug.cgi?id=107519

        Reviewed by Adam Barth.

        Add some ASSERTs to be double-dog-sure that we're never using
        any of the threading code when threading is not enabled.

        I also removed an if-branch in the !ENABLE_THREADED_HTML_PARSER case
        as it's not needed.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        (WebCore::HTMLDocumentParser::stopBackgroundParser):

2013-01-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in toV8()
        https://bugs.webkit.org/show_bug.cgi?id=107520

        Reviewed by Adam Barth.

        Now it's safe to remove an optional Isolate parameter.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::toV8):
        * css/MediaQueryListListener.cpp:
        (WebCore::MediaQueryListListener::queryChanged):
        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):

2013-01-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] min-max height will not trigger a relayout when set on a region with auto-height
        https://bugs.webkit.org/show_bug.cgi?id=103738

        Reviewed by David Hyatt.

        When the style of an auto-height region changes with different min/max-height, we have to make sure
        that the 2-pass layout algorithm is run so that the region height is properly computed. When doing a 2-pass layout 
        for auto-height regions, we have to make sure that in the first pass, all auto-height regions start without a previously
        computed overrideLogicalContentHeight, otherwise we may end-up with incorrect results, illustrated by tests
        autoheight-two-pass-layout-complex-001.html and autoheight-two-pass-layout-complex-002.html.

        If we do not have auto height regions, a single pass layout in enough to correctly flow content inside regions.
        When we have auto height regions, the algorithm to lay out content should be:
        1. If the flow thread content does not need lay out, we do a single pass layout.
        If during the layout, an auto-height region needs layout or a normal (not auto height) region changes its box dimensions,
        we need to perform a new 2-pass layout after this layout completes. If not, we bail out and skip step 2.
        2. Do a full two pass layout and make sure that all auto height regions start the 2-pass layout without a previously computed
        override logical content height.

        Tests: fast/regions/autoheight-region-decrease-maxheight.html
               fast/regions/autoheight-region-decrease-minheight.html
               fast/regions/autoheight-region-decrease-width.html
               fast/regions/autoheight-region-increase-maxheight.html
               fast/regions/autoheight-region-increase-minheight.html
               fast/regions/autoheight-region-increase-width.html
               fast/regions/autoheight-region-new-maxheight-vrl.html
               fast/regions/autoheight-region-new-maxheight.html
               fast/regions/autoheight-region-new-minheight-vlr.html
               fast/regions/autoheight-region-new-minheight.html
               fast/regions/autoheight-region-remove-maxheight.html
               fast/regions/autoheight-region-remove-minheight.html
               fast/regions/autoheight-two-pass-layout-complex-001.html
               fast/regions/autoheight-two-pass-layout-complex-002.html
               fast/regions/region-height-auto-to-defined.html
               fast/regions/region-height-defined-to-auto.html

        * rendering/FlowThreadController.cpp: Added a flag that is needed to mark whether we need a full 2-pass layout.
        (WebCore::FlowThreadController::FlowThreadController):
        * rendering/FlowThreadController.h:
        (WebCore::FlowThreadController::needsTwoPassLayoutForAutoHeightRegions):
        (WebCore::FlowThreadController::setNeedsTwoPassLayoutForAutoHeightRegions):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::resetRegionsOverrideLogicalContentHeight): Use invalidateRegions because we need also to mark the flow thread as needing layout.
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::layout): Make sure we do a 2-pass layout if needed.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layoutContentInAutoLogicalHeightRegions): Added a new function that models the layout algorithm for the case when we have auto height regions
        and flow threads.
        (WebCore::RenderView::layout):
        (WebCore::RenderView::checkTwoPassLayoutForAutoHeightRegions):
        * rendering/RenderView.h:

2013-01-22  Adam Barth  <abarth@webkit.org>

        ENABLE(NEW_XML) isn't used by anyone and no one is actively working on it
        https://bugs.webkit.org/show_bug.cgi?id=100710

        Reviewed by Eric Seidel.

        As discussed on webkit-dev
        <http://lists.webkit.org/pipermail/webkit-dev/2012-August/022103.html>,
        ENABLE(NEW_XML) isn't used by anyone and no one is actively working on
        it. We should remove it from the code base for the time being. If folks
        want to work on it again, we can restore it from SVN history.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::createParser):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::parseXML):
        * xml/parser/NewXMLDocumentParser.cpp: Removed.
        * xml/parser/NewXMLDocumentParser.h: Removed.
        * xml/parser/XMLCharacterReferenceParser.cpp: Removed.
        * xml/parser/XMLCharacterReferenceParser.h: Removed.
        * xml/parser/XMLToken.h: Removed.
        * xml/parser/XMLTokenizer.cpp: Removed.
        * xml/parser/XMLTokenizer.h: Removed.
        * xml/parser/XMLTreeBuilder.cpp: Removed.
        * xml/parser/XMLTreeBuilder.h: Removed.

2013-01-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to toV8() of event listeners
        https://bugs.webkit.org/show_bug.cgi?id=107517

        Reviewed by Adam Barth.

        By using Context::GetIsolate(), this patch passes an Isolate to toV8().
        I think this would be the last patch to pass an Isolate to toV8().
        In the next patch, I will make an Isolate parameter mandatory for toV8().

        No tests. No change in behavior.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8AbstractEventListener.h:
        (V8AbstractEventListener):
        * bindings/v8/V8EventListener.cpp:
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::toObjectWrapper):
        (WebCore::V8LazyEventListener::callListenerFunction):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::getReceiverObject):

2013-01-22  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Build PDFPlugin everywhere, enable at runtime
        https://bugs.webkit.org/show_bug.cgi?id=107117

        Reviewed by Alexey Proskuryakov.

        Since PDFLayerController SPI is all forward-declared, the plugin should build
        on all Mac platforms, and can be enabled at runtime.

        * Configurations/FeatureDefines.xcconfig:

2013-01-22  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Should assert if we try to create two AXObjects that point to the same renderer or node
        https://bugs.webkit.org/show_bug.cgi?id=107504

        Reviewed by Chris Fleizach.

        If two accessibility objects get created that point to the
        same widget, renderer, or node, that can lead to crashes or
        memory corruption later; make it assert instead of crashing.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):

2013-01-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to toV8()
        https://bugs.webkit.org/show_bug.cgi?id=107512

        Reviewed by Adam Barth.

        By using Context::GetIsolate(), this patch passes an Isolate to toV8().

        No tests. No change in behavior.

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::idbKeyToScriptValue):
        * bindings/v8/ScriptController.cpp:
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::currentCallFrame):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::updateDocumentProperty):
        * bindings/v8/V8MutationCallback.cpp:
        (WebCore::V8MutationCallback::handleEvent):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8SQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::nodeAsScriptValue):

2013-01-22  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: Show requests in `curl` syntax in DevTools → Network → Headers
        https://bugs.webkit.org/show_bug.cgi?id=107276

        Reviewed by Pavel Feldman.

        Test: inspector/curl-command.html

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._generateCurlCommand):

2013-01-22  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: reuse JS heap profiler UI for native heap graph representaion
        https://bugs.webkit.org/show_bug.cgi?id=107452

        Reviewed by Pavel Feldman.

        NativeHeapSnapshot is introduced to leverage JS heap snapshot processing algorithms
        for native heap graph. New snapshot type ("Native Heap Snapshot") is added to the
        profiles panel. It will represent native heap snapshots using the same UI as we use
        for JS heap snapshots.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype._init):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapProfileHeader.prototype.load):
        (WebInspector.HeapProfileHeader.prototype.startSnapshotTransfer): extracted a few methods
        to support overrides for native heap snapshots.
        (WebInspector.HeapProfileHeader.prototype.snapshotConstructorName):
        (WebInspector.HeapProfileHeader.prototype._setupWorker):
        * inspector/front-end/NativeHeapSnapshot.js: Added.
        (WebInspector.NativeHeapSnapshot):
        (WebInspector.NativeHeapSnapshot.prototype.createNode):
        (WebInspector.NativeHeapSnapshot.prototype.createEdge):
        (WebInspector.NativeHeapSnapshot.prototype.createRetainingEdge):
        (WebInspector.NativeHeapSnapshot.prototype._markInvisibleEdges):
        (WebInspector.NativeHeapSnapshot.prototype._calculateFlags):
        (WebInspector.NativeHeapSnapshot.prototype.canHaveDistanceOne):
        (WebInspector.NativeHeapSnapshot.prototype.userObjectsMapAndFlag):
        (WebInspector.NativeHeapSnapshotNode):
        (WebInspector.NativeHeapSnapshotNode.prototype.canBeQueried):
        (WebInspector.NativeHeapSnapshotNode.prototype.isUserObject):
        (WebInspector.NativeHeapSnapshotNode.prototype.className):
        (WebInspector.NativeHeapSnapshotNode.prototype.classIndex):
        (WebInspector.NativeHeapSnapshotNode.prototype.id):
        (WebInspector.NativeHeapSnapshotNode.prototype.name):
        (WebInspector.NativeHeapSnapshotNode.prototype.isHidden):
        (WebInspector.NativeHeapSnapshotNode.prototype.isSynthetic):
        (WebInspector.NativeHeapSnapshotNode.prototype.isWindow):
        (WebInspector.NativeHeapSnapshotNode.prototype.isDetachedDOMTreesRoot):
        (WebInspector.NativeHeapSnapshotNode.prototype.isDetachedDOMTree):
        (WebInspector.NativeHeapSnapshotEdge):
        (WebInspector.NativeHeapSnapshotEdge.prototype.clone):
        (WebInspector.NativeHeapSnapshotEdge.prototype.hasStringName):
        (WebInspector.NativeHeapSnapshotEdge.prototype.isElement):
        (WebInspector.NativeHeapSnapshotEdge.prototype.isHidden):
        (WebInspector.NativeHeapSnapshotEdge.prototype.isWeak):
        (WebInspector.NativeHeapSnapshotEdge.prototype.isInternal):
        (WebInspector.NativeHeapSnapshotEdge.prototype.isInvisible):
        (WebInspector.NativeHeapSnapshotEdge.prototype.isShortcut):
        (WebInspector.NativeHeapSnapshotEdge.prototype.name):
        (WebInspector.NativeHeapSnapshotEdge.prototype.toString):
        (WebInspector.NativeHeapSnapshotEdge.prototype._nameOrIndex):
        (WebInspector.NativeHeapSnapshotRetainerEdge):
        (WebInspector.NativeHeapSnapshotRetainerEdge.prototype.clone):
        (WebInspector.NativeHeapSnapshotRetainerEdge.prototype.isElement):
        (WebInspector.NativeHeapSnapshotRetainerEdge.prototype.isHidden):
        (WebInspector.NativeHeapSnapshotRetainerEdge.prototype.isInternal):
        (WebInspector.NativeHeapSnapshotRetainerEdge.prototype.isInvisible):
        (WebInspector.NativeHeapSnapshotRetainerEdge.prototype.isShortcut):
        (WebInspector.NativeHeapSnapshotRetainerEdge.prototype.isWeak):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotProfileType):
        (WebInspector.NativeSnapshotProfileType.prototype.get buttonTooltip):
        (WebInspector.NativeSnapshotProfileType.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeSnapshotProfileType.prototype.buttonClicked):
        (WebInspector.NativeSnapshotProfileType.prototype.get treeItemTitle):
        (WebInspector.NativeSnapshotProfileType.prototype.get description):
        (WebInspector.NativeSnapshotProfileType.prototype.createTemporaryProfile):
        (WebInspector.NativeSnapshotProfileType.prototype.createProfile):
        (WebInspector.NativeSnapshotProfileHeader):
        (WebInspector.NativeSnapshotProfileHeader.prototype.createView):
        (WebInspector.NativeSnapshotProfileHeader.prototype.startSnapshotTransfer):
        (WebInspector.NativeSnapshotProfileHeader.prototype.snapshotConstructorName):
        (WebInspector.NativeSnapshotProfileHeader.prototype._takeNativeSnapshot): build a datastructure
        resembling one used for JS heap snapshots but populated with the data from the native snaphot.
        (WebInspector.NativeHeapSnapshotView):
        (WebInspector.NativeHeapSnapshotView.prototype.get profile):
        (WebInspector.NativeMemoryProfileType):
        (WebInspector.NativeMemoryProfileType.prototype.get buttonTooltip):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/WebKit.qrc:

2013-01-21  Kentaro Hara  <haraken@chromium.org>

        [V8] ScriptState::isolate() should use Context::GetIsolate()
        https://bugs.webkit.org/show_bug.cgi?id=107490

        Reviewed by Adam Barth.

        Now V8 provides Context::GetIsolate(). We should use it
        in ScriptState::isolate().

        * bindings/v8/ScriptState.h:
        (WebCore::ScriptState::isolate):
        (ScriptState):

2013-01-21  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Missing context menus strings
        https://bugs.webkit.org/show_bug.cgi?id=107104

        Reviewed by Kenneth Rohde Christiansen.

        Add 5 missing localization strings for text direction context menus.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):

2013-01-21  Kent Tamura  <tkent@chromium.org>

        Date selection from calendar picker should dispatch 'input' event in addition to 'change' event
        https://bugs.webkit.org/show_bug.cgi?id=107427

        Reviewed by Kentaro Hara.

        According to the specification and Opera's behavior, we should dispatch
        not only 'change' event but also 'input' event when a user chooses a
        date from the calender picker.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#common-event-behaviors
        > When the user agent changes the element's value on behalf of the user
        > (e.g. as part of a form prefilling feature), the user agent must follow
        > these steps:
        > 1. If the input event applies, queue a task to fire a simple event
        > that bubbles named input at the input element.
        > 2. If the change event applies, queue a task to fire a simple event
        > that bubbles named change at the input element.

        Tests: platform/chromium/fast/forms/calendar-picker/date-picker-events.html
               platform/chromium/fast/forms/calendar-picker/datetimelocal-picker-events.html

        * html/InputType.cpp:
        (WebCore::InputType::setValue): Add DispatchInputAndChangeEvent support.
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::didChooseValue):
        Use DispatchInputAndChangeEvent, not DispatchChangeEvent.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::pickerIndicatorChooseValue):
        Ditto.

2013-01-21  Justin Schuh  <jschuh@chromium.org>

        [CHROMIUM] Suppress c4267 build warnings for Win64 targets
        https://bugs.webkit.org/show_bug.cgi?id=107499

        Reviewed by Abhishek Arya.

        No new tests. No code changes.

        * WebCore.gyp/WebCore.gyp:

2013-01-21  Andreas Kling  <akling@apple.com>

        CSSSelector::value() should assert that m_match != Tag.
        <http://webkit.org/b/107500>

        Reviewed by Anders Carlsson.

        Add an assertion to catch anyone trying to extract a value() from a Tag selector.

        * css/CSSSelector.h:
        (CSSSelector):
        (WebCore::CSSSelector::value):

2013-01-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Move HTML Attribute case-sensitivity logic out of SelectorChecker to HTMLDocument.
        https://bugs.webkit.org/show_bug.cgi?id=107460

        The case-sensitivity of HTML attributes is defined in HTML spec and is only applicable in HTML documents,
        so having this logic in HTMLDocument seems like a good thing.

        Reviewed by Eric Seidel.

        Refactoring, covered by existing tests.

        * css/SelectorChecker.cpp:
        (WebCore): Moved code out of here.
        (WebCore::isFastCheckableMatch): Changed the callsite to use new location.
        (WebCore::SelectorChecker::checkOne): Ditto.
        * html/HTMLDocument.cpp:
        (WebCore::addLocalNameToSet): Moved the code into here.
        (WebCore): Ditto.
        (WebCore::createHtmlCaseInsensitiveAttributesSet): Ditto.
        (WebCore::HTMLDocument::isCaseSensitiveAttribute): Ditto.
        * html/HTMLDocument.h:
        (HTMLDocument): Added decl for the newly moved function.

2013-01-21  Shinya Kawanaka  <shinyak@chromium.org>

        FrameSelection should use shadowHost instead of shadowAncestorNode
        https://bugs.webkit.org/show_bug.cgi?id=107220

        Reviewed by Kent Tamura.

        shadowAncestorNode() is deprecated and we want to use shadowHost.
        Here, all objects calling shadowAncestorNode() is in ShadowDOM, we can safely convert
        the call to shadowHost().

        No new tests, simple refactoring.

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

2013-01-21  Dirk Schulze  <dschulze@adobe.com>

        Add build flag for Canvas's Path object (disabled by default)
        https://bugs.webkit.org/show_bug.cgi?id=107473

        Reviewed by Dean Jackson.

        Add CANVAS_PATH build flag to build systems.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:

2013-01-21  Andreas Kling  <akling@apple.com>

        CSS: Make tag sub-selectors standalone CSSSelectors.
        <http://webkit.org/b/107111>

        Reviewed by Antti Koivisto.

        TL;DR: Instead of storing a QualifiedName with every CSSSelector, special-case tag selectors
               by promoting them to stand-alone CSSSelectors.
               33% reduction in CSS selector memory usage, 4.77 MB progression on Membuster3.
               Fixed some bugs in Shadow DOM that were exposed by these changes.

        A selector like this:

            div.tripp.trapp#trull { }

        Would previously be represented by a chain of 3 CSSSelector objects like so:

            [ Tag: "div",  Type: Class,  Value: "tripp" ]
            [ Tag:     *,  Type: Class,  Value: "trapp" ]
            [ Tag:     *,  Type: ID,     Value: "trull" ]

        After this change, the memory layout becomes:

            [ Type: Tag,    Value: "div"   ]
            [ Type: Class,  Value: "tripp" ]
            [ Type: Class,  Value: "trapp" ]
            [ Type: ID,     Value: "trull" ]

        This is a huge net memory win since the majority of selectors don't even have a tag name
        and those that do now have a flat cost of one more CSSSelector.
        Traversal is also slightly cleaner since any tag name will now be in a predictable place.

        * css/SelectorChecker.cpp:
        (WebCore::isFastCheckableMatch):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::validateSubSelector):

            Renamed CSSSelector::None to CSSSelector::Tag.

        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::tagMatches):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::ruleMatches):

            Changed SelectorChecker::tagMatches() to take a QualifiedName instead of a CSSSelector.

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::deref):
        (WebCore::QualifiedName::QualifiedNameImpl::~QualifiedNameImpl):
        * dom/QualifiedName.h:
        (QualifiedNameImpl):

            Give QualifiedNameImpl a destructor so it can remove itself from the global cache instead of
            having QualifiedName do it. This makes it possible to participate in ownership of QualifiedNames
            via a QualifiedNameImpl pointer, as used by the union member in CSSSelector.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createFloatingSelectorWithTagName):
        (WebCore::CSSParser::updateSpecifiersWithNamespaceIfNeeded):
        (WebCore::CSSParser::updateSpecifiersWithElementName):
        * css/CSSParser.h:
        * css/CSSParserValues.h:
        (CSSParserSelector):
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::CSSParserSelector):
        (WebCore::CSSParserSelector::prependTagSelector):

            Make the CSS parser slap a CSSSelector with m_match=Tag at the head of all selectors that match
            one or more of these criteria:

            - The selector starts with a tag, e.g "div.foo" or just plain "span"
            - There is a @namespace rule in effect, and the override namespace needs to be stored with the selector.
              These will have CSSSelectors::m_isTagForNamespaceRule set, this is only so that selector serialization
              can avoid outputting a '*' tag where we previously didn't.

        (WebCore::CSSParserSelector::isSimple):

            Merged the CSSSelector::isSimple() logic into CSSParserSelector, since it's only needed during parsing
            to figure out if a selector is allowed within :not().

        * css/CSSSelector.h:
        (CSSSelector):
        (WebCore::CSSSelector::setValue):
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::tagQName):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::createRareData):
        (WebCore::CSSSelector::operator==):

            Add a QualifiedNameImpl* m_tagQName member to the CSSSelector data union. This union pointer is used
            if m_match == Tag. tagQName() is used to retrieve the tag (renamed from tag().) 

        (WebCore::CSSSelector::selectorText):

            Only serialize Tag selector components that aren't namespace placeholders. This behavior is web-facing
            so we make an effort to stay consistent.

        (WebCore::CSSSelector::specificityForOneSelector):
        (WebCore::CSSSelector::specificityForPage):
        * css/CSSSelectorList.cpp:
        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        * css/RuleSet.cpp:
        (WebCore::isSelectorMatchingHTMLBasedOnRuleHash):
        * css/SelectorFilter.cpp:
        (WebCore::collectDescendantSelectorIdentifierHashes):
        (WebCore::SelectorFilter::collectIdentifierHashes):

            Adapt algorithms to having Tag selectors.

        (WebCore::selectorListContainsUncommonAttributeSelector):

            Loop through all selector components when looking for uncommon attributes.

        (WebCore::determinePropertyWhitelistType):

            Loop through all selector components when looking for ::cue().

        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::findBestRuleSetAndAdd):

            Break addRule into two methods to be able to peek ahead if the first selector is a Tag.
            Otherwise we'd end up sticking most selectors in m_tagRules, breaking the class/ID/etc optimizations.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::fastCheck):
        (WebCore::SelectorChecker::fastCheckSingleSelector):

            It's no longer necessary to check the tagQName for every selector component, so don't.
            Also simplified the signature of the template argument function.

        (WebCore::SelectorChecker::fastCheckRightmostSelector):

            Updated for Tag selectors.

        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::matches):
        (WebCore::SelectorChecker::match):

            Have match() take a SiblingTraversalStrategy so it can forward that to checkOne().
            This is necessary for shadow DOM code that was incorrectly calling checkOne() instead of match().

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

            The meaning of "single-part selector" changes a bit with this patch, and no longer includes "div.foo"
            as that is now a Tag, followed by a Class. Given that, we can't assume the tag check is unnecessary
            just because the rightmost descendant was found in one of the hashes.

        (WebCore::StyleResolver::matchPageRulesForList):

            Loop through all selector components when matching @page since pseudo types may not always be in
            the first subselector now.

        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::collectSelectFeatureSetFrom):

            Collect feature information from subselectors to make sure nothing is missed. (This bug was exposed
            by offsetting the subselectors.)

        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorChecker::checkContentSelector):

            Call SelectorChecker::match() instead of checkOne() to make subselector traversal work properly.

2013-01-21  Levi Weintraub  <leviw@chromium.org>

        Event target rects on the top level document shouldn't be clipped.
        https://bugs.webkit.org/show_bug.cgi?id=107339

        Reviewed by James Robinson.

        clippedOverflowRectForRepaint clips the top-level RenderView to the viewport, which
        is wrong for generating event target rects, as the result will not extend to the bounds
        of the document on pages that scroll. Changing the top-level view to use documentRect
        instead.

        Tests updated to cover bug: platform/chromium/fast/events/touch/touch-hit-rects-in-iframe.html
                                    platform/chromium/fast/events/touch/compositor-touch-hit-rects.html

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::accumulateRendererTouchEventTargetRects): Use converToRootView instead of
        a loop around convertToContaining view. This is not a change in behavior.
        (WebCore::accumulateDocumentEventTargetRects): Switch to use documentRect instead of
        clippedOverflowRectForRepaint for the top-level Document, and use converToRootView
        to put rects in the coordinates of the top-level document.

2013-01-17  Andy Estes  <aestes@apple.com>

        Add a USE() macro for content filtering code
        https://bugs.webkit.org/show_bug.cgi?id=107098

        Reviewed by Mark Rowe.

        * WebCore.exp.in: Use USE(CONTENT_FILTERING).
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader): Ditto.
        (WebCore::MainResourceLoader::~MainResourceLoader): Ditto.
        (WebCore::MainResourceLoader::cancel): Ditto.
        (WebCore::MainResourceLoader::responseReceived): Ditto.
        (WebCore::MainResourceLoader::dataReceived): Ditto.
        (WebCore::MainResourceLoader::didFinishLoading): Ditto.
        (WebCore::MainResourceLoader::notifyFinished): Ditto.
        * loader/MainResourceLoader.h:
        (MainResourceLoader): Ditto.
        * platform/mac/WebCoreSystemInterface.h: Ditto.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2013-01-21  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] shape-outside on floats for rectangle shapes positioning
        https://bugs.webkit.org/show_bug.cgi?id=100399

        Reviewed by David Hyatt.

        When a float has a shape-outside with non-zero x or y, the float's
        exclusion behavior can happen at a completely different location than
        where the float's content is painted. This patch brings initial
        support for this behavior.

        Test: fast/exclusions/shape-outside-floats/shape-outside-floats-positioning.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::flipFloatForWritingModeForChild): If called
            during painting, make sure to pass that state down to the float
            positioning so that it can use the proper position.
        (WebCore::RenderBlock::paintFloats): Since this is concerned with
            painting, use the position of the float, not the shape.
        (WebCore::RenderBlock::positionNewFloats): Set the correct location
            for the float, relative to the location of the shape.
        (WebCore::RenderBlock::addOverhangingFloats): Add FIXME.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::xPositionForFloatIncludingMargin): 
        (WebCore::RenderBlock::yPositionForFloatIncludingMargin): Since the 
            position of the shape (FloatingObject) can be different from the
            position of the float's box (RenderBox), the position needs to be
            computed differently for painting than for determining layout.
        (WebCore::RenderBlock::flipFloatForWritingModeForChild): Change
            signature to take painting flag.

2013-01-21  Eric Carlson  <eric.carlson@apple.com>

        Support non-WebVTT cues from in-band text tracks
        https://bugs.webkit.org/show_bug.cgi?id=107046

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Add new files.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Pass video size to getDisplayTree.

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::addGenericCue): New, create a generic cue if it doesn't already exist.
        (WebCore::InbandTextTrack::addWebVTTCue): Renamed from addCue.
        * html/track/InbandTextTrack.h:

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::hasCue): Moved from InbandTextTrack.cpp, use operator == instead of inline
            comparison so derived TextTrackCues can be compared.
        * html/track/TextTrack.h:

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::applyCSSProperties): Interface change.
        (WebCore::TextTrackCue::TextTrackCue): Don't create the display tree in the constructor, it may
            never be needed.
        (WebCore::TextTrackCue::createDisplayTree): New, create the display tree.
        (WebCore::TextTrackCue::displayTreeInternal): Display tree accessor, allows it to be created lazily.
        (WebCore::TextTrackCue::setAlign): Alignment -> CueAlignment.
        (WebCore::TextTrackCue::setIsActive): Use displayTreeInternal().
        (WebCore::TextTrackCue::getDisplayTree): Use displayTreeInternal(), pass video size to applyCSSProperties.
        (WebCore::TextTrackCue::removeDisplayTree): Use displayTreeInternal().
        (WebCore::TextTrackCue::operator==): New.
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::getAlignment): Alignment -> CueAlignment.
        (WebCore::TextTrackCue::operator!=): New.
        (WebCore::TextTrackCue::cueType): New, cue type identified needed by operator==.
        (WebCore::TextTrackCue::ownerDocument): New.

        * html/track/TextTrackCueGeneric.cpp: Added.
        (WebCore::TextTrackCueGenericBox::create):
        (WebCore::TextTrackCueGenericBox::TextTrackCueGenericBox):
        (WebCore::TextTrackCueGenericBox::applyCSSProperties):
        (WebCore:::TextTrackCue):
        (WebCore::TextTrackCueGeneric::createDisplayTree):
        (WebCore::TextTrackCueGeneric::operator==):
        * html/track/TextTrackCueGeneric.h: Added.
        (WebCore::TextTrackCueGeneric::create):
        (WebCore::TextTrackCueGeneric::~TextTrackCueGeneric):
        (WebCore::TextTrackCueGeneric::baseFontSizeRelativeToVideoHeight):
        (WebCore::TextTrackCueGeneric::setBaseFontSizeRelativeToVideoHeight):
        (WebCore::TextTrackCueGeneric::fontSizeMultiplier):
        (WebCore::TextTrackCueGeneric::setFontSizeMultiplier):
        (WebCore::TextTrackCueGeneric::fontName):
        (WebCore::TextTrackCueGeneric::setFontName):
        (WebCore::TextTrackCueGeneric::operator!=):
        (WebCore::TextTrackCueGeneric::cueType):

        * platform/graphics/InbandTextTrackPrivateClient.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes): Copy cue attributes into GenericCueData
            struct instead of trying to convert to WebVTT settings string. Process font size,font base
            size, font name, and vertical layout attributes,
        (WebCore::InbandTextTrackPrivateAVF::processCue): Create separate cues for each attributed
            string in the array because each one can be at a different screen location.
        (WebCore::InbandTextTrackPrivateAVF::resetCueValues):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        (InbandTextTrackPrivateAVF):

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Reset any partially accumulated cues
            delivered since the seek was started.
        (WebCore::MediaPlayerPrivateAVFoundation::addGenericCue): Renamed from flushCurrentCue.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Whitespace cleanup.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Tell legible output to deliver cues
            without any additional styling needed by the internal renderer.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processTextTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Do nothing if asked to change
            to the track that is already current.
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
            Check to make sure that the client callback isn't NULL.

2013-01-21  Robert Hogan  <robert@webkit.org>

        Misaligned logo on www.nzherald.co.nz possibly due to negative margin-top
        https://bugs.webkit.org/show_bug.cgi?id=14664

        Reviewed by David Hyatt.

        Test: fast/block/float/clear-negative-margin-top.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins): If a negative margin pulls a block up so that floats from
        siblings overhang, then ensure addOverHangingFloats() uses the revised logical top position when
        deciding whether a float does indeed overhang into the block after margin-collapsing.
        (WebCore::RenderBlock::clearFloatsIfNeeded):

2013-01-21  Rik Cabanier  <cabanier@adobe.com>

        Proposal: Add support for even-odd fill and clip to Canvas
        https://bugs.webkit.org/show_bug.cgi?id=106188

        Reviewed by Dirk Schulze.

        This patch adds support for an optional winding rule to fill, clip
        and isPointInPath in canvas 2d. By default, the fill is non-zero but
        you can now pass in an optional winding rule string ("nonzero" or "evenodd")
        to make an explicit choice.

        Tests: fast/canvas/canvas-clip-rule.html
               fast/canvas/canvas-fill-rule.html
               fast/canvas/canvas-isPointInPath-winding.html

        * html/canvas/CanvasRenderingContext2D.cpp: Change implementation so it sets the windig rule in the context.
        (WebCore::parseWinding):
        (WebCore):
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::clip):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        * html/canvas/CanvasRenderingContext2D.h: 
        (CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.idl: Change the idl so the new API is exposed to JavaScript.
        * platform/graphics/cg/GraphicsContextCG.cpp: Fixes a bug where the wrong winding rule was set for clipping in Core Graphics.
        (WebCore::GraphicsContext::clip):

2013-01-21  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK][AC] setOpacity doesn't work for GraphicsLayerClutter
        https://bugs.webkit.org/show_bug.cgi?id=105436

        Reviewed by Gustavo Noronha Silva.

        Implement GraphicsLayerClutter::setOpacity based on Mac's GraphicsLayer implementation.

        No new tests since this patch can be covered by already existing gtk ac tests.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::setOpacity):
        (WebCore):
        (WebCore::GraphicsLayerClutter::updateOpacityOnLayer):
        (WebCore::GraphicsLayerClutter::commitLayerChangesBeforeSublayers):
        * platform/graphics/clutter/GraphicsLayerClutter.h:

2013-01-21  ChangSeok Oh  <shivamidow@gmail.com>

        [Texmap][GTK] The poster-circle doesn't appear.
        https://bugs.webkit.org/show_bug.cgi?id=106672

        Reviewed by Noam Rosenthal.

        We need to call setNeedsDisplay to redraw GraphicsLayer after we set drawsContent
        a new value for the layer. Otherwise we can't get a chance for first drawing the layer.

        Test: compositing/visibility/visibility-composited-animation.html

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::flushCompositingStateForThisLayerOnly):

2013-01-21  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [EFL][Qt][WebGl] Random crash in GraphicsContext3D::drawArrays
        https://bugs.webkit.org/show_bug.cgi?id=107178

        Reviewed by Noam Rosenthal.

        Workaround for the problem in mesa when internal llvm pipe object is deleted
        later than the screen object. Screen object is deleted because the corresponding 
        X server display connection closed.
        Keep X server display connection open until program shutdown. 
        OffScreenRootWindow::display is now static, so there is no need to create
        OffScreenRootWindow object on client side.

        Fixes crash that appears during run of fast/canavs/webgl tests.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::DisplayConnection::DisplayConnection):
        (DisplayConnection):
        (WebCore::OffScreenRootWindow::DisplayConnection::~DisplayConnection):
        (WebCore::OffScreenRootWindow::DisplayConnection::display):
        (WebCore::OffScreenRootWindow::display):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (WebCore):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (WebCore::GraphicsSurfacePrivate::createPixmap):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
        (WebCore::GraphicsSurfacePrivate::display):
        (WebCore::GraphicsSurfacePrivate::size):
        (WebCore::GraphicsSurfacePrivate::findFBConfigWithAlpha):
        (WebCore::GraphicsSurfacePrivate::clear):
        (GraphicsSurfacePrivate):

2013-01-21  Michael[tm] Smith  <mike@w3.org>

        Implement the HTML <main> element.
        https://bugs.webkit.org/show_bug.cgi?id=103172

        Reviewed by Chris Fleizach.

        Authored by Steve Faulkner <faulkner.steve@gmail.com>

        <main> should behave the same as <nav>, <section>, and <article>, and <aside>.
        <main> should expose AXLandmarkMain correctly on each platform.

        Tests: fast/html/main-element.html
               platform/chromium/accessibility/main-element.html
               platform/mac/accessibility/main-element.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * css/html.css:
        (article, aside, footer, header, hgroup, main, nav, section):
        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock):
        * html/HTMLTagNames.in:
        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::isSpecialNode):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):

2013-01-21  Joanmarie Diggs  <jdiggs@igalia.com>

        Crash in AccessibilityTableCell::parentTable()
        https://bugs.webkit.org/show_bug.cgi?id=107261

        Reviewed by Chris Fleizach.

        Test: accessibility/table-destroyed-crash.html

        Getting the parent table in order to get the role value should not be
        done when objects are being destroyed. Also, it does not seem safe to
        assume we have an AXObjectCache.

        Moving the logic from roleValue() to determineAccessibilityRole() has
        the side effect of not being able to verify the cell is in an AXTable
        when that AXTable has not yet been created. Therefore isTableCell()
        should look to see if it is the descendant of an AXRow.

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::isTableCell):
        (WebCore::AccessibilityTableCell::determineAccessibilityRole):
        * accessibility/AccessibilityTableCell.h:
        (AccessibilityTableCell):

2013-01-21  Halton Huo  <halton.huo@intel.com>

        [GTK] Volume button should not be shown for videos without audio
        https://bugs.webkit.org/show_bug.cgi?id=106436

        Reviewed by Philippe Normand.

        The volume control is no longer shown for videos with no audio.

        No new tests, tested by media/video-no-audio.html.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::hasOwnDisabledStateHandlingFor):
        (WebCore):
        * platform/gtk/RenderThemeGtk.h:

2013-01-21  Dan Winship  <danw@gnome.org>

        [Soup] Work around a glib bug
        https://bugs.webkit.org/show_bug.cgi?id=106789

        Reviewed by Martin Robinson.

        In glib <= 2.35.4, g_input_stream_skip_async() applied to a
        libsoup response stream will do a synchronous skip() in another
        thread, which libsoup isn't expecting and doesn't have proper
        locking for. Work around this until the next time we bump the glib
        requirement by using read_async() (and throwing away the result)
        instead of skip_async().

        No new tests; fixes a race condition in existing tests with older
        glib

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

2013-01-18  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: data grid resize is slow
        https://bugs.webkit.org/show_bug.cgi?id=107291

        Reviewed by Pavel Feldman.

        - avoid (most of) unnecessary relayouts and style recalculation when dragging data grid resizer.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._positionResizers):
        (WebInspector.DataGrid.prototype._resizerDragging):

2013-01-21  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        [Inspector] Layout Elements panel in a single column when docked right.
        https://bugs.webkit.org/show_bug.cgi?id=107129

        Reviewed by Pavel Feldman.

        If the Inspector is docked right, the style panes in the Elements panel
        are put below the DOM tree pane, not to the right. This behavior
        is experimental (hidden behind a new flag "elementsPanelSingleColumn").

        No new tests.

        * inspector/front-end/DockController.js:
        (WebInspector.DockController.prototype.dockSide):
        (WebInspector.DockController.prototype._updateUI):
        (WebInspector.DockController.prototype._toggleDockState):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.onResize):
        (WebInspector.ElementsPanel.prototype._onDockStateChanged):
        (WebInspector.ElementsPanel.prototype._sidebarPosition):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.createSidebarView):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SidebarView.js:
        (WebInspector.SidebarView):
        (WebInspector.SidebarView.prototype.get mainElement):
        (WebInspector.SidebarView.prototype.get sidebarElement):
        (WebInspector.SidebarView.prototype._setSidebarElementStyle):
        (WebInspector.SidebarView.prototype.setSidebarPosition):
        (WebInspector.SidebarView.prototype._innerSetSidebarPosition):
        (WebInspector.SidebarView.prototype.setMinimumSidebarHeight):
        (WebInspector.SidebarView.prototype.setMinimumMainHeightPercent):
        (WebInspector.SidebarView.prototype.applyConstraints):
        (WebInspector.SidebarView.prototype.hideMainElement):
        (WebInspector.SidebarView.prototype.hideSidebarElement):
        * inspector/front-end/SplitView.js:
        (WebInspector.SplitView):
        * inspector/front-end/splitView.css:
        (.split-view-sidebar-top):
        (.split-view-sidebar-top.maximized):
        (.split-view-sidebar-bottom):
        (.split-view-sidebar-bottom.maximized):

2013-01-21  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: do not serialize native heap graph when collecting information about memory distribution
        https://bugs.webkit.org/show_bug.cgi?id=107450

        Reviewed by Pavel Feldman.

        Native heap graph is not reported when we need to show only high-level memory distribution.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeMemorySnapshotView):
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked):

2013-01-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] Forced :visited pseudoclass has no effect on A elements
        https://bugs.webkit.org/show_bug.cgi?id=107448

        Reviewed by Antti Koivisto.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sortAndTransferMatchedRules): Remove totally bad code.
        (WebCore::StyleResolver::styleForElement):
          Use InsideVisitedLink if PseudoVisited has been forced by Inspector.

2013-01-18  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: modify generate_protocol_externs.py to generate JSON typedef's for @constructors
        https://bugs.webkit.org/show_bug.cgi?id=107287

        Reviewed by Pavel Feldman.

        Modify generate_protocol_externs.py to generate @typedefs instead of @constructors,

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/InjectedScriptSource.js:
        * inspector/compile-front-end.py:
        * inspector/generate_protocol_externs.py:
        (param_type):

2013-01-21  Oleg Smirnov  <oleg.smirnov@lge.com>

        [Gtk] [Cairo] Memory leak when is WebView destroy.
        https://bugs.webkit.org/show_bug.cgi?id=107112

        Reviewed by Martin Robinson.

        Make createSurfaceForBackingStore return a smart pointer in all supported
        build configurations to avoid a memory leak.
        
        No new tests. There is memory leak only.

        * platform/cairo/WidgetBackingStoreCairo.cpp:
        (WebCore::createSurfaceForBackingStore):

2013-01-21  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: should not dispatch 'input' events if the element value is not updated
        https://bugs.webkit.org/show_bug.cgi?id=107429

        Reviewed by Kentaro Hara.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#common-event-behaviors
        > any time the user causes the element's value to change, the user agent
        > must queue a task to fire a simple event that bubbles named input at the
        > input element.

        Tests:
        fast/forms/time-multiple-fields/time-multiple-fields-keyboard-event.html
        is updated to cover this change.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::editControlValueChanged):
        If the new value is equivalent to the old value, don't dispatch events.
        However we should recalculate validity and call notifyFormStateChanged
        because input.validity.badInput state might be changed.

2013-01-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Do not dispatch mousemove when emulating touch event and no touch is active
        https://bugs.webkit.org/show_bug.cgi?id=107419

        Reviewed by Pavel Feldman.

        mousemove event should not be dispatched when emulating touch events and mouse button is not pressed

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):

2013-01-21  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix highlight bug in DTE.
        https://bugs.webkit.org/show_bug.cgi?id=107433

        Reviewed by Pavel Feldman.

        Do not re-create |state.ranges| array when it already contains highlight.

        Test: inpector/editor/highlighter-chunk-limit.txt

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):

2013-01-21  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] rename StyleRuleBlock -> StyleRuleGroup
        https://bugs.webkit.org/show_bug.cgi?id=107415

        Reviewed by Antti Koivisto.

        StyleRuleBlock should be renamed StyleRuleGroup, because
        CSSGroupingRule (not CSSBlockRule) is an interface for an at-rule that
        contains other rules nested inside itself:
        http://www.w3.org/TR/2012/WD-css3-conditional-20121213/#the-cssgroupingrule-interface
        To match the name: CSSGroupingRule, StyleRuleGroup looks better.

        No new tests, because just refactoring.

        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::CSSGroupingRule):
        (WebCore::CSSGroupingRule::reattach):
        * css/CSSGroupingRule.h:
        (CSSGroupingRule):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleGroup::StyleRuleGroup):
        (WebCore::StyleRuleGroup::wrapperInsertRule):
        (WebCore::StyleRuleGroup::wrapperRemoveRule):
        (WebCore::StyleRuleGroup::reportDescendantMemoryUsage):
        (WebCore::StyleRuleMedia::StyleRuleMedia):
        (WebCore::StyleRuleSupports::StyleRuleSupports):
        (WebCore::StyleRuleRegion::StyleRuleRegion):
        * css/StyleRule.h:
        (StyleRuleGroup):
        (WebCore::StyleRuleHost::StyleRuleHost):
        (WebCore::toStyleRuleMedia):
        (WebCore::toStyleRuleSupports):
        (WebCore::toStyleRuleRegion):
        Just replaced StyleRuleBlock with StyleRuleGroup.

2013-01-21  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: refactoring to use string as argument for highlightRegex API
        https://bugs.webkit.org/show_bug.cgi?id=107243

        Reviewed by Pavel Feldman.

        Use string as argument for highlightRegex API instead of using regex object.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype.highlightRegex):
        * inspector/front-end/TextEditor.js:

2013-01-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140311.
        http://trac.webkit.org/changeset/140311
        https://bugs.webkit.org/show_bug.cgi?id=107431

        Broke selection-related tests (Requested by apavlov on
        #webkit).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):

2013-01-21  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Build fix.

        * bindings/v8/V8NPObject.cpp:
        (WebCore::createV8ObjectForNPObject):

2013-01-20  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Do not dispatch mousemove when emulating touch event and no touch is active
        https://bugs.webkit.org/show_bug.cgi?id=107419

        Reviewed by Pavel Feldman.

        mousemove event should not be dispatched when emulating touch events and mouse button is not pressed

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):

2013-01-21  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update the RTCPeerConnection states to match the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=107120

        Reviewed by Adam Barth.

        http://dev.w3.org/2011/webrtc/editor/webrtc.html#interface-definition

        RTCPeerConnection::readyState and iceState are history and instead signalingState,
        iceConnectionState and iceGatheringState have been introduced.

        Existing tests updated to cover this patch.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::localDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::remoteDescription):
        (WebCore::RTCPeerConnection::updateIce):
        (WebCore::RTCPeerConnection::addIceCandidate):
        (WebCore::RTCPeerConnection::readyState):
        (WebCore):
        (WebCore::RTCPeerConnection::signalingState):
        (WebCore::RTCPeerConnection::iceConnectionState):
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::removeStream):
        (WebCore::RTCPeerConnection::createDataChannel):
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::didChangeSignalingState):
        (WebCore::RTCPeerConnection::didChangeIceGatheringState):
        (WebCore::RTCPeerConnection::didChangeIceConnectionState):
        (WebCore::RTCPeerConnection::didAddRemoteStream):
        (WebCore::RTCPeerConnection::didRemoveRemoteStream):
        (WebCore::RTCPeerConnection::didAddRemoteDataChannel):
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::changeSignalingState):
        (WebCore::RTCPeerConnection::changeIceGatheringState):
        (WebCore::RTCPeerConnection::changeIceConnectionState):
        * Modules/mediastream/RTCPeerConnection.h:
        (RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.idl:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        (RTCPeerConnectionHandlerClient):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::didChangeSignalingState):
        (WebCore::RTCPeerConnectionHandlerChromium::didChangeICEConnectionState):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (RTCPeerConnectionHandlerChromium):

2013-01-21  Kent Tamura  <tkent@chromium.org>

        Use ISO8601 date/time formats as fallbacks for date/time input types
        https://bugs.webkit.org/show_bug.cgi?id=107418

        Reviewed by Kentaro Hara.

        We obtain date/time formats from OSes to build date/time input type
        UIs. If something wrong happens in the code, fallback formats are
        used. Such fallback formats should not be English formats in order that
        we can find defects easily.

        No new tests. These formats should not be used unless the current code
        has defects.

        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::setupLayoutParameters):
        Use an ISO8601 format which is same as a format used in HTML5.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::setupLayoutParameters): Ditto.
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::setupLayoutParameters): Ditto.
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::setupLayoutParameters): Ditto.
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::dateFormat): Ditto.
        * platform/text/LocaleNone.cpp:
        (WebCore::LocaleNone::dateFormat): Ditto.
        (WebCore::LocaleNone::dateTimeFormatWithSeconds): Ditto.
        (WebCore::LocaleNone::dateTimeFormatWithoutSeconds): Ditto.

2013-01-20  Matt Falkenhagen  <falken@chromium.org>

        Elements must be reattached when inserted/removed from top layer
        https://bugs.webkit.org/show_bug.cgi?id=105489

        Relanding r139402 as rollout due to suspected perf regression did not help (bug 106726).

        Reviewed by Julien Chaffraix.

        Ensure a reattach occurs when an element is inserted/removed from top layer, so its renderer can be inserted correctly:
        as a child of RenderView in top layer sibling order if it's in the top layer, and in the usual place otherwise.

        We previously relied on style recalc to catch when an element is inserted/removed from the top layer, because it
        only happens on dialog.show/close which toggle display: none. But that is incorrect because, for example, close()
        followed immediately by show() results in no style change.

        Tests: fast/dom/HTMLDialogElement/removed-element-is-removed-from-top-layer.html
               fast/dom/HTMLDialogElement/top-layer-stacking-correct-order-remove-readd.html

        * dom/Element.cpp:
        (WebCore::Element::removedFrom): Call Document::removeFromTopLayer to let the element be removed from the top layer vector.
        removeFromTopLayer calls Element::setIsInTopLayer(false) itself if needed.
        (WebCore::Element::setIsInTopLayer): Ensure a reattach occurs if the element is already attached.

2013-01-20  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: change HeapSnapshotLoader to allow loading native heap snapshots
        https://bugs.webkit.org/show_bug.cgi?id=107282

        Reviewed by Pavel Feldman.

        Conctete heap snapshot constructor name is passed as a parameter to HeapSnapshotLoaderProxy and
        propagated to HeapSnapshotLoader.buildSnapshot to support different types of heap snapshots.

        * inspector/front-end/HeapSnapshotLoader.js:
        (WebInspector.HeapSnapshotLoader.prototype.buildSnapshot):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker.prototype.createLoader):
        (WebInspector.HeapSnapshotLoaderProxy):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.close):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapProfileHeader.prototype._setupWorker):

2013-01-20  Kentaro Hara  <haraken@chromium.org>

        Implement MediaStreamEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=107411

        Reviewed by Adam Barth.

        Spec: http://www.w3.org/TR/webrtc/#mediastreamevent

        Test: fast/events/constructors/media-stream-event-constructor.html

        * Modules/mediastream/MediaStreamEvent.cpp:
        (WebCore::MediaStreamEventInit::MediaStreamEventInit):
        (WebCore):
        (WebCore::MediaStreamEvent::create):
        (WebCore::MediaStreamEvent::MediaStreamEvent):
        * Modules/mediastream/MediaStreamEvent.h:
        (MediaStreamEventInit):
        (WebCore):
        (MediaStreamEvent):
        * Modules/mediastream/MediaStreamEvent.idl:
        * bindings/js/JSDictionary.cpp:
        (WebCore):
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        (WebCore):
        * bindings/v8/Dictionary.cpp:
        (WebCore):
        (WebCore::Dictionary::get):
        * bindings/v8/Dictionary.h:
        (Dictionary):

2013-01-20  Vladislav Kaznacheev  <kaznacheev@chromium.org>

        Web Inspector: Allow SplitView to change orientation after the construction.
        https://bugs.webkit.org/show_bug.cgi?id=107263

        Added SplitView.prototype.setIsVertical to change the orientation on the fly.
        Instead of passing default sidebar size to the constructor the client
        may now pass separate defaults for the sidebar width and height. Passing
        just one default works as before.

        Reviewed by Pavel Feldman.

        No new tests.

        * inspector/front-end/SplitView.js:
        (WebInspector.SplitView):
        (WebInspector.SplitView.prototype.isVertical):
        (WebInspector.SplitView.prototype.setIsVertical):
        (WebInspector.SplitView.prototype._innerSetIsVertical):
        (WebInspector.SplitView.prototype._updateLayout):
        (WebInspector.SplitView.prototype.isSidebarSecond):
        (WebInspector.SplitView.prototype.showBoth):
        (WebInspector.SplitView.prototype._updateTotalSize):
        (WebInspector.SplitView.prototype._innerSetSidebarSize):
        (WebInspector.SplitView.prototype.wasShown):
        (WebInspector.SplitView.prototype.onResize):
        (WebInspector.SplitView.prototype.installResizer):
        (WebInspector.SplitView.prototype._onDragStart):
        (WebInspector.SplitView.prototype._sizeSetting):
        (WebInspector.SplitView.prototype._lastSidebarSize):
        (WebInspector.SplitView.prototype.get _saveSidebarSize):

2013-01-20  Kentaro Hara  <haraken@chromium.org>

        Add a [ConstructorConditional] IDL attribute
        https://bugs.webkit.org/show_bug.cgi?id=107407

        Reviewed by Adam Barth.

        Per discussion in webkit-dev, we need to implement DOM4 event constructors
        under a enable flag. For that purpose, we implement a [ConstructorConditional]
        IDL attribute.

        Test: bindings/scripts/test/TestInterface.idl

        * bindings/scripts/CodeGenerator.pm:
        (GenerateConstructorConditionalString):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDeclaration):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (JSTestInterfaceConstructor):
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::ConfigureV8TestInterfaceTemplate):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):

2013-01-18  Kentaro Hara  <haraken@chromium.org>

        [V8] We should set a class id for a NPObject wrapper
        https://bugs.webkit.org/show_bug.cgi?id=107249

        Reviewed by Adam Barth.

        This is one of steps to avoid hitting an ASSERT()
        that will be added in https://bugs.webkit.org/show_bug.cgi?id=107137 .

        No tests. No change in behavior.

        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::setWrapperClass):
        (WebCore):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::createV8ObjectForNPObject):

2013-01-20  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: unprefix implementation
        https://bugs.webkit.org/show_bug.cgi?id=91951

        Reviewed by Ojan Vafai.

        Add support for the unprefixed 'calc()' function, while retaining support for the prefixed version.

        Test: css3/calc/simple-calcs-prefixed.html

        * css/CSSCalculationValue.cpp:
        (WebCore::buildCssText):
        (WebCore::CSSCalcValue::create):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::isCalculation):
        (WebCore::CSSParser::detectFunctionTypeToken):

2013-01-20  Shinya Kawanaka  <shinyak@chromium.org>

        Distribution state becomes inconsistent with content/shadow reprojection
        https://bugs.webkit.org/show_bug.cgi?id=106634

        Reviewed by Hajime Morita.

        Distribution should be resolved from shallower ShadowDOM to deeper Shadow DOM. However, in the current implementation,
        there is a case that distribution for deeper ShadowDOM happens to be resolved before distribution
        for shallower ShadowDOM is resolved.

        Here, we have 2 problems about distribution.
        1) Invalidation state is not propagated to nested (= deeper) ShadowDOM.
            - This causes deeper ShadowDOM looks having a valid distribution though it should be invalid.
        2) We are not resolving shallower ShadowDOM when deeper ShadowDOM's distribution is needed.
            - Because of (1), we have to check all the ancestor ShadowDOM.

        For (1), we change invalidate() to invalidate nested ShadowDOM's distribution as well.
        For (2), when resolving distribution, we will check the ancestor ShadowDOM's distribution state. If the ancestor's
        distribution is not valid, we resolve it first.

        For optimization of (1), actually we can skip invalidating distribution of some ShadowDOMs.
        If ShadowRoot of deeper ShadowDOM does not have an InsertionPoint as children, we can skip invalidating
        its distribution, because only children can be distributed to InsertionPoint.

        Tests: fast/dom/shadow/distribution-crash.html
               fast/dom/shadow/nested-reprojection-inconsistent.html

        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::attach): Should resolve distribution from ancestor.
        * dom/ElementShadow.h:
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute): Added ASSERT that the parent ShadowRoot's distribution is resolved.
        (WebCore::ContentDistributor::invalidate): For each InsertionPoint, we have to invalidate
        its parent element's distribution (if it has ElementShadow).
        (WebCore::ContentDistributor::ensureDistribution):
        * html/shadow/ContentDistributor.h:
        (WebCore::ContentDistributor::isValid):
        * html/shadow/HTMLShadowElement.cpp:
        (WebCore::HTMLShadowElement::olderShadowRoot): Should resolve distribution from ancestor.
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::attach): ditto.
        (WebCore::InsertionPoint::detach): ditto.
        (WebCore::InsertionPoint::getDistributedNodes): ditto.
        (WebCore::resolveReprojection): ditto.

2013-01-20  Dominic Mazzoni  <dmazzoni@google.com>

        Make SpeechSynthesis compile in the Chromium port
        https://bugs.webkit.org/show_bug.cgi?id=107382

        Reviewed by Adam Barth.

        Add stubs for the Chromium implementation of speech synthesis,
        and add all source and header files to WebCore.gypi. Everything
        is behind the ENABLE_SPEECH_SYNTHESIS flag.

        * Modules/speech/chromium/SpeechSynthesisChromium.cpp: Added.
        (WebCore):
        (WebCore::SpeechSynthesis::initializeVoiceList):
        (WebCore::SpeechSynthesis::pending):
        (WebCore::SpeechSynthesis::speaking):
        (WebCore::SpeechSynthesis::paused):
        (WebCore::SpeechSynthesis::speak):
        (WebCore::SpeechSynthesis::cancel):
        (WebCore::SpeechSynthesis::pause):
        (WebCore::SpeechSynthesis::resume):
        * WebCore.gypi:

2013-01-20  Kent Tamura  <tkent@chromium.org>

        Re-layout child blocks when border/padding of the box-sizing:border-box parent is updated
        https://bugs.webkit.org/show_bug.cgi?id=104997

        Reviewed by Tony Chang.

        When padding or border is updated for a parent block with
        box-sizing:border-box and width, the width of its child block was not
        updated.

        Tests: fast/css/box-sizing-border-box-dynamic-padding-border-update.html
               fast/forms/text/text-padding-dynamic-change.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        If box-sizing of the old style and/or the new style is border-box and
        padding or border is changed, apply setChildNeedsLayout(true) for child
        boxes.

2013-01-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove custom V8ScriptProfileCustom::toV8()
        https://bugs.webkit.org/show_bug.cgi?id=107246

        Reviewed by Adam Barth.

        V8ScriptProfileCustom::toV8() needs not to be custom.
        Furthermore, the current custom toV8() is wrong in that
        it doesn't use a creationContext and it doesn't set a
        wrapper class id. This is one of steps to avoiding
        ASSERT()s that will be added in
        https://bugs.webkit.org/show_bug.cgi?id=107137 .

        No tests. No change in behavior.

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/custom/V8ScriptProfileCustom.cpp: Removed.
        * inspector/ScriptProfile.idl:

2013-01-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140290.
        http://trac.webkit.org/changeset/140290
        https://bugs.webkit.org/show_bug.cgi?id=107412

        Broke tests of inspector and calendar picker in debug build
        (Requested by tkent on #webkit).

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

2013-01-20  Yongsheng Zhu  <yongsheng.zhu@intel.com>

        Dispatch LongPress to inner frames
        https://bugs.webkit.org/show_bug.cgi?id=106874

        Reviewed by Antonio Gomes.

        Do check whether a LongPress gesture event should be passed
        to inner frames. If needed, dispatch it.

        Tests: fast/events/touch/gesture/long-press-on-draggable-element-in-iframe-triggers-drag.html
               fast/events/touch/gesture/long-press-on-draggable-element-in-nested-iframes-triggers-drag.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureLongPress):

2013-01-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up missing *explicit* keyword in ctors of WebCore/rendering.
        https://bugs.webkit.org/show_bug.cgi?id=107373

        Reviewed by Darin Adler.

        Need to add *explicit* keyword to avoid implicit type conversion.

        * rendering/RenderApplet.h:
        (RenderApplet):
        * rendering/RenderArena.h:
        (RenderArena):
        * rendering/RenderBR.h:
        (RenderBR):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderDetailsMarker.h:
        (RenderDetailsMarker):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):
        * rendering/RenderFlowThread.h:
        * rendering/RenderFullScreen.h:
        (RenderFullScreen):
        * rendering/RenderGeometryMap.h:
        (WebCore::RenderGeometryMapStep::RenderGeometryMapStep):
        * rendering/RenderGrid.h:
        (RenderGrid):
        * rendering/RenderImage.h:
        (RenderImage):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):
        * rendering/RenderLayerModelObject.h:
        (RenderLayerModelObject):
        * rendering/RenderListBox.h:
        (RenderListBox):
        * rendering/RenderListMarker.h:
        (RenderListMarker):
        * rendering/RenderMedia.h:
        (RenderMedia):
        * rendering/RenderMeter.h:
        (RenderMeter):
        * rendering/RenderMultiColumnBlock.h:
        (RenderMultiColumnBlock):
        * rendering/RenderMultiColumnFlowThread.h:
        (RenderMultiColumnFlowThread):
        * rendering/RenderObject.h:
        (RenderObject):
        * rendering/RenderPart.h:
        (RenderPart):
        * rendering/RenderProgress.h:
        (RenderProgress):
        * rendering/RenderReplaced.h:
        (RenderReplaced):
        * rendering/RenderReplica.h:
        (RenderReplica):
        * rendering/RenderRuby.h:
        (RenderRubyAsInline):
        * rendering/RenderRubyBase.h:
        (RenderRubyBase):
        * rendering/RenderRubyRun.h:
        (RenderRubyRun):
        * rendering/RenderRubyText.h:
        (RenderRubyText):
        * rendering/RenderSearchField.h:
        (RenderSearchField):
        * rendering/RenderSlider.h:
        (RenderSlider):
        * rendering/RenderSnapshottedPlugIn.h:
        (RenderSnapshottedPlugIn):
        * rendering/RenderTextControlMultiLine.h:
        (RenderTextControlMultiLine):
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):
        * rendering/RenderView.h:
        (RenderView):
        * rendering/RenderWidgetProtector.h:
        (WebCore::RenderWidgetProtector::RenderWidgetProtector):
        * rendering/RootInlineBox.h:
        (RootInlineBox): Remove meaningless parameter name.
        * rendering/TableLayout.h:
        (WebCore::TableLayout::TableLayout):

2013-01-20  Kent Tamura  <tkent@chromium.org>

        Re-layout child blocks when border/padding of the box-sizing:border-box parent is updated
        https://bugs.webkit.org/show_bug.cgi?id=104997

        Reviewed by Tony Chang.

        When padding or border is updated for a parent block with
        box-sizing:border-box and width, the width of its child block was not
        updated.

        Tests: fast/css/box-sizing-border-box-dynamic-padding-border-update.html
               fast/forms/text/text-padding-dynamic-change.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        If box-sizing of the old style and/or the new style is border-box and
        padding or border is changed, apply setChildNeedsLayout(true) for child
        boxes.

2013-01-20  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r140270.
        http://trac.webkit.org/changeset/140270
        https://bugs.webkit.org/show_bug.cgi?id=107253

        Hit asserts in a debug build

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):

2013-01-20  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow DOM] Specifying scrollbar style of an element having RenderLayer in ShadowDOM does not work.
        https://bugs.webkit.org/show_bug.cgi?id=107222

        Reviewed by Simon Fraser.

        When specifying scrollbar style in ShadowDOM, it's not used. If the host element of ShadowDOM has scrollbar style,
        it's used instead.

        The root cause of this bug is that RenderLayer always see shadowAncestorNode's style. Some elements having
        UserAgent ShadowDOM (e.g. <textarea>) should see host's style, but most of elements should see its style.

        Test: fast/dom/shadow/scrollbar.html

        * rendering/RenderLayer.cpp:
        (WebCore::rendererForScrollbar):
        (WebCore):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):

2013-01-20  Yoshifumi Inoue  <yosin@chromium.org>

        Dragging over an element with scrollbars should scroll the element when dragging near edges
        https://bugs.webkit.org/show_bug.cgi?id=39725

        Reviewed by Hajime Morita.

        This patch introduces auto scrolling functionality during drag-and-drop
        when drop source is near edge of scrollable element.

        When drop source is inside 20px of scrollable element more than 200ms,
        scrollable element is automatically scrolled every 50ms toward drop
        source position, e.g. vertically scroll up when drop source is in top
        edge.

        Test: fast/events/drag-and-drop-autoscroll.html

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::AutoscrollController): Changed to initialize m_dragAndDropAutoscrollStartTime.
        (WebCore::AutoscrollController::updateDragAndDrop): Added for start/stop autoscroll during drag-and-drop.
        (WebCore::AutoscrollController::autoscrollTimerFired): Changed to add autoscroll for drag-and-drop, and to pass last know position to RenderBox::autoscroll().
        * page/AutoscrollController.h:
        (AutoscrollController): Changed to add updateDragAndDrop() and m_dragAndDropAutoscrollReferencePosition and m_dragAndDropAutoscrollStartTime.
        * page/ChromeClient.h:
        (WebCore::ChromeClient): Changed to add new function shouldAutoscrollForDragAndDrop().
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop): Changed to call AutoscrollController::updateDragAndDrop().
        (WebCore::EventHandler::clearDragState): Changed to call stopAutoscrollTimer().
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::autoscroll): Changed for new parameter position.
        (WebCore::RenderBox::calculateAutoscrollDirection): Added for autoscroll.
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):  Changed for new parameter position and move updateSelectionForMouseDrag() to AutoscrollController.
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::autoscroll):  Changed for new parameter position.
        * rendering/RenderListBox.h:
        (RenderListBox):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::autoscroll):  Changed for new parameter position.
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):

2013-01-20  Laszlo Gombos  <l.gombos@samsung.com>

        Simplify a list of negative PLATFORM() tests
        https://bugs.webkit.org/show_bug.cgi?id=107365

        Reviewed by Eric Seidel.

        Simplify a list of negative PLATFORM() tests into a simpler list
        of positive tests for better readability and maintenance.

        No new tests as there is no new functionality.

        * config.h:

2013-01-20  Simon Fraser  <simon.fraser@apple.com>

        Avoid filling a rounded rect when radii are zero
        https://bugs.webkit.org/show_bug.cgi?id=107402
        <rdar://problem/12793315>

        Reviewed by Sam Weinig.

        It's more efficient to clip and fill rects than rounded rects,
        so optimize for the case where rounded rect radii are zero.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipRoundedRect):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        (WebCore::GraphicsContext::fillRoundedRect):

2013-01-20  Alexey Proskuryakov  <ap@apple.com>

        Remove obsolete plug-in sandboxing code.
        https://bugs.webkit.org/show_bug.cgi?id=107362

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * plugins/npapi-sandbox.h: Removed.

2013-01-20  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: Make V8 LiveEdit API disabled by default
        https://bugs.webkit.org/show_bug.cgi?id=106668

        Reviewed by Yury Semikhatsky.

        Initialize method is patched accordingly.

        * bindings/v8/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::restart): missing enable/disable calls added for restart
        * bindings/v8/V8Initializer.cpp:
        (WebCore::initializeV8Common): initializer method patched

2013-01-20  Christophe Dumez  <christophe.dumez@intel.com>

        [gstreamer]  assertion in g_object_unref from _WebKitWebAudioSourcePrivate destructor
        https://bugs.webkit.org/show_bug.cgi?id=107374

        Reviewed by Philippe Normand.

        WebKitWebAudioSrc object gets unrefed one time too many in
        _WebKitWebAudioSourcePrivate destructor, causing an assertion
        in g_object_unref. This patch passes NULL instead of
        g_object_unref to gst_task_new() so that the WebKitWebAudioSrc
        object does not get unrefed when the GstTask is destroyed.

        No new tests, already covered by webaudio tests.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkit_web_audio_src_init):

2013-01-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Create a persistent wrapper for Window.prototype and innerGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=107253

        Reviewed by Adam Barth.

        This is one of steps to avoid hitting an ASSERT()
        that will be added in https://bugs.webkit.org/show_bug.cgi?id=107137 .
        We should have a persistent wrapper for all DOM objects
        and set a class id on the wrapper.

        No tests. No change in behavior.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):

2013-01-19  Philip Rogers  <pdr@google.com>

        Refactor SVGSVGElement to inherit from SVGStyledTransformableElement
        https://bugs.webkit.org/show_bug.cgi?id=107393

        Reviewed by Dirk Schulze.

        This patch refactors SVGSVGElement to inherit from SVGStyledTransformableElement instead
        of SVGStyledLocatableElement. In a followup patch, SVGStyledTransformableElement will
        be refactored into SVGGraphicsElement which will match the spec:
        https://svgwg.org/svg2-draft/single-page.html#struct-InterfaceSVGSVGElement

        Tests: svg/transforms/svgsvgelement-transform-expected.svg
               svg/transforms/svgsvgelement-transform.svg

        * svg/SVGSVGElement.cpp:
        (WebCore):
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::didMoveToNewDocument):
        (WebCore::SVGSVGElement::parseAttribute):
        (WebCore::SVGSVGElement::insertedInto):
        (WebCore::SVGSVGElement::removedFrom):
        * svg/SVGSVGElement.h:
        (SVGSVGElement):
        * svg/SVGSVGElement.idl:

2013-01-19  Philip Rogers  <pdr@google.com>

        Merge SVGStylable into SVGStyledElement
        https://bugs.webkit.org/show_bug.cgi?id=106877

        Reviewed by Dirk Schulze.

        SVG2 changes element inheritance so all SVGElements are stylable. As a first-step towards a
        cleaner class hierarchy, this patch moves SVGStylable into SVGStyledElement.

        No new tests as this is just a refactoring.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMSVG.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * page/DOMWindow.idl:
        * svg/SVGAElement.idl:
        * svg/SVGAllInOne.cpp:
        * svg/SVGCircleElement.idl:
        * svg/SVGClipPathElement.idl:
        * svg/SVGDefsElement.idl:
        * svg/SVGDescElement.idl:
        * svg/SVGEllipseElement.idl:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFEComponentTransferElement.idl:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEConvolveMatrixElement.idl:
        * svg/SVGFEDiffuseLightingElement.idl:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEFloodElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEImageElement.idl:
        * svg/SVGFEMergeElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFEOffsetElement.idl:
        * svg/SVGFESpecularLightingElement.idl:
        * svg/SVGFETileElement.idl:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGFilterPrimitiveStandardAttributes.idl:
        * svg/SVGForeignObjectElement.idl:
        * svg/SVGGElement.idl:
        * svg/SVGGlyphRefElement.idl:
        * svg/SVGGradientElement.idl:
        * svg/SVGImageElement.idl:
        * svg/SVGLineElement.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMaskElement.idl:
        * svg/SVGMissingGlyphElement.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGPatternElement.idl:
        * svg/SVGPolygonElement.idl:
        * svg/SVGPolylineElement.idl:
        * svg/SVGRectElement.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStopElement.idl:
        * svg/SVGStylable.cpp: Removed.
        * svg/SVGStylable.h: Removed.
        * svg/SVGStylable.idl: Removed.
        * svg/SVGStyledElement.h:
        (WebCore):
        * svg/SVGStyledElement.idl: Added.
        * svg/SVGSwitchElement.idl:
        * svg/SVGSymbolElement.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTitleElement.idl:
        * svg/SVGUseElement.idl:

2013-01-19  Tim Horton  <timothy_horton@apple.com>

        CanvasRenderingContext2D::drawTextInternal should create a mask buffer compatible with that of the canvas
        https://bugs.webkit.org/show_bug.cgi?id=107372

        Reviewed by Simon Fraser.

        No new tests, just matching acceleration modes.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal): Create a buffer with the same acceleration mode as the canvas
        instead of forcing the use of an accelerated buffer if we support acceleration; the canvas could be unaccelerated
        even if USE(IOSURFACE_CANVAS_BACKING_STORE) is on.

2013-01-19  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Delegated scrolling: Assertion on attempt to show a CSS sticky element
        https://bugs.webkit.org/show_bug.cgi?id=106890

        Reviewed by Kenneth Rohde Christiansen.

        The problem was that frame view (when delegated scrolling enabled) calculated the positions of sticky elements for
        a scroll event before sending scroll request. In case of multiple scroll events that caused assertion as the response
        for previous scroll request was received after the expected sticky elements positions had been already updated for the following
        scroll request.

        No new tests. Covered by existing 'fast/css/sticky' tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollTo):

2013-01-19  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Regression: WebGL Content is not drawn after resizing the canvas.
        https://bugs.webkit.org/show_bug.cgi?id=107366

        Reviewed by Kenneth Rohde Christiansen.

        Window is shared between GraphicsSurface and its client.
        Client doesn't own the Window. This patch ensures that client
        doesn't delete the shared Window handle.

        Covered by existing WebGL tests.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::clear):

2013-01-18  Antti Koivisto  <antti@apple.com>

        Make renderer constructors take Element where possible
        https://bugs.webkit.org/show_bug.cgi?id=107138

        Reviewed by David Hyatt.
        
        Tighter typing prevents bugs and enables optimizations.

        The patch changes how anonymous rendererer are constructed. Previously Document* as the node parameter
        indicated that the renderer was anonymous. This forced the code to operate on ContainerNodes (Document
        is not an Element). Now anonymous renderers are constructed by passing null and the document is set by
        separate setDocumentForAnonymous() call. The patch uses RenderFoo::createAnonymous() pattern consistently.

        Most constructors are switched to take Element. RenderBlock still takes ContainerNode due to a few subclasses
        (RenderView and RenderFlowThread) that pass in a Document.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateScrollCorner):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createAnonymous):
        (WebCore::RenderBlock::createReplacementRunIn):
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):
        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
        (WebCore::RenderBlock::createAnonymousColumnsWithParentRenderer):
        (WebCore::RenderBlock::createAnonymousColumnSpanWithParentRenderer):
        * rendering/RenderBlock.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
        (WebCore::RenderDeprecatedFlexibleBox::createAnonymous):
        * rendering/RenderDeprecatedFlexibleBox.h:
        (RenderDeprecatedFlexibleBox):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
        * rendering/RenderDetailsMarker.h:
        (RenderDetailsMarker):
        * rendering/RenderDialog.h:
        (WebCore::RenderDialog::RenderDialog):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::RenderFieldset):
        * rendering/RenderFieldset.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        * rendering/RenderFlowThread.h:
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreenPlaceholder::RenderFullScreenPlaceholder):
        (RenderFullScreen::RenderFullScreen):
        (RenderFullScreen::createAnonymous):
        (RenderFullScreen::wrapRenderer):
        * rendering/RenderFullScreen.h:
        (RenderFullScreen):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        * rendering/RenderGrid.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::createAnonymous):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::createAnonymous):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        * rendering/RenderInline.h:
        (RenderInline):
        (WebCore::RenderInline::node):
        
            Add version with covariant Element return type.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        (WebCore::RenderLayer::createReflection):
        (WebCore::RenderListItem::RenderListItem):
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        (WebCore::RenderListMarker::createAnonymous):
        * rendering/RenderListMarker.h:
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
        (WebCore::RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay):
        (WebCore::RenderTextTrackContainerElement::RenderTextTrackContainerElement):
        * rendering/RenderMediaControlElements.h:
        (RenderMediaVolumeSliderContainer):
        (RenderMediaControlTimeDisplay):
        (RenderTextTrackContainerElement):
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        (WebCore::RenderMultiColumnBlock::ensureColumnSets):
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnFlowThread.h:
        (RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::createAnonymous):
        * rendering/RenderMultiColumnSet.h:
        (RenderMultiColumnSet):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        * rendering/RenderNamedFlowThread.h:
        (RenderNamedFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        
             Passed in null node indicates that the renderer is anonymous. Remove now unnecessary setIsAnonymous() function.

        (WebCore::RenderObject::isAnonymous):
        (WebCore::RenderObject::setDocumentForAnonymous):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.cpp:
        (WebCore::RenderRegionSet::RenderRegionSet):
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::RenderReplica):
        (WebCore::RenderReplica::createAnonymous):
        * rendering/RenderReplica.h:
        (RenderReplica):
        * rendering/RenderRuby.cpp:
        (WebCore::createAnonymousRubyInlineBlock):
        (WebCore::RenderRubyAsInline::RenderRubyAsInline):
        (WebCore::RenderRubyAsBlock::RenderRubyAsBlock):
        * rendering/RenderRuby.h:
        (RenderRubyAsInline):
        (RenderRubyAsBlock):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::RenderRubyBase):
        (WebCore::RenderRubyBase::createAnonymous):
        * rendering/RenderRubyBase.h:
        (RenderRubyBase):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::RenderRubyRun):
        (WebCore::RenderRubyRun::createRubyBase):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::RenderRubyText):
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::RenderScrollbarPart):
        (WebCore::RenderScrollbarPart::createAnonymous):
        * rendering/RenderScrollbarPart.h:
        (RenderScrollbarPart):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::RenderSearchField):
        * rendering/RenderSearchField.h:
        (RenderSearchField):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::createAnonymousWithParentRenderer):
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::RenderTableCaption):
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::createAnonymousWithParentRenderer):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::RenderTableCol):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::RenderTableRow):
        (WebCore::RenderTableRow::createAnonymousWithParentRenderer):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::createAnonymousWithParentRenderer):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        
            Pass null and use setDocumentForAnonymous() if a RenderText is created with the Document as renderer
            to keep them working. Text renderers should be factored similarly to the rest.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        * rendering/RenderTextControlMultiLine.h:
        (RenderTextControlMultiLine):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::RenderTextTrackCue):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget):
        * rendering/RenderWidget.h:
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::createAnonymousMathMLBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::createMathMLOperator):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::createGlyph):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::RenderMathMLRow):
        (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createRenderer):
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::RenderSVGBlock):
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::RenderSVGInline):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::RenderSVGTSpan):
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::RenderSVGTextPath):
        * rendering/svg/RenderSVGTextPath.h:

2013-01-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix.

        Add the build targets introduced in r140231 to the list.

        * GNUmakefile.list.am:

2013-01-18  Huang Dongsung  <luxtella@company100.net>

        [Mac] Remove unused pageScaleFactor and positionRelativeToBase arguments in GraphicsLayerCA.
        https://bugs.webkit.org/show_bug.cgi?id=107357

        Reviewed by Ryosuke Niwa.

        Several methods in GraphicsLayerCA receive a pageScaleFactor or a
        positionRelativeToBase argument but don't use the arguments, so this patch
        removes them.

        No new tests. This is just a refactoring of the existing code.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::updateStructuralLayer):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent):
        (WebCore::GraphicsLayerCA::updateContentsScale):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):

2013-01-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Move attributeNameMatches from SelectorChecker to its proper place on Attribute.
        https://bugs.webkit.org/show_bug.cgi?id=107358

        Reviewed by Andreas Kling.

        Refactoring, covered by existing tests.

        * css/SelectorChecker.cpp:
        (WebCore::anyAttributeMatches): Changed to use the new name.
        * css/SelectorChecker.h:
        (SelectorChecker): Moved attributeNameMatches out of here.
        (WebCore::SelectorChecker::checkExactAttribute): Changed to use the new name.
        * dom/Attribute.h:
        (WebCore::Attribute::matches): Moved attributeNameMatches to here.

2013-01-18  Simon Fraser  <simon.fraser@apple.com>

        Fix bug that caused pages with fixed backgrounds to not be fast scrollable
        https://bugs.webkit.org/show_bug.cgi?id=107354

        Reviewed by Sam Weinig.

        Correct the change to RenderObject::styleWillChange() made in r140223. This
        condition is checking that we're painting the root background, so it checks if
        the renderer is the root, or if it's the body, and the document element's renderer
        has no background (which means that the body's background propagates to the root).

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):

2013-01-18  Dima Gorbik  <dgorbik@apple.com>

        Remove a TextTrack.h include from the Element.h and move WebVTT related stuff outside the Element
        https://bugs.webkit.org/show_bug.cgi?id=107080

        Reviewed by Sam Weinig.

        WebVTT objects are now subclasses of the Element. This allows us to remove major WebVTT chunks of code from
        Element.h and NodeRareData. WebVTTElement is deriving from HTMLElement and not Element to prevent possible
        problems that could happen because we reuse qTags that are being used in HTML like <b>, <i> and <u>.

        No new tests. This is just a refactoring of the existing code.

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::canShareStyleWithElement):
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.h:
        (WebCore::Node::isWebVTTElement):
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::copyWebVTTNodeToDOMTree):
        (WebCore::TextTrackCue::markFutureAndPastNodes):
        * html/track/WebVTTElement.cpp: Added.
        (WebCore::WebVTTElement::create):
        (WebCore::WebVTTElement::cloneElementWithoutAttributesAndChildren):
        * html/track/WebVTTElement.h: Added.
        (WebCore::WebVTTElement::setWebVTTNodeType):
        (WebCore::WebVTTElement::webVTTNodeType):
        (WebCore::WebVTTElement::WebVTTElement):
        (WebCore::toWebVTTElement):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::constructTreeFromToken):

2013-01-18  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=106946
        Sticky-position elements can jump around/hide on rubber-banding

        Reviewed by Simon Fraser.

        This patch adds a new function called viewportConstrainedVisibleContentRect() 
        since there are a number of places where we need a visibleContectRect() that does 
        not allow scroll offsets that indicate the rubber-banding that is happening. And 
        this patch fixes the bug for sticky by calling this function in two new places.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportConstrainedVisibleContentRect):
        (WebCore):
        * page/FrameView.h:
        (FrameView):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::stickyPositionOffset):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):

2013-01-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140206.
        http://trac.webkit.org/changeset/140206
        https://bugs.webkit.org/show_bug.cgi?id=107346

        Caused crash on wordpress.com (Requested by smfr on #webkit).

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

2013-01-18  Simon Fraser  <simon.fraser@apple.com>

        Allow fixed background layers to be moved by the ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=107213

        Reviewed by Tim Horton.
        
        Start using the RenderView's RenderLayerBacking's background layer for
        fixed root backgrounds (those which have background images all of which have
        background-attachment: fixed).
        
        The background-layer is contained in the RenderLayer's RenderLayerBacking's
        containment view, so it gets page scale applied to it, but scrolling happens
        above this layer, so the background has to be counter-scrolled. We plumb
        this layer through to the ScrollingCoordinator so that this counter-scrolling
        can be done on the scrolling thread.
        
        Test: platform/mac/tiled-drawing/fixed-background/fixed-body-background-positioned.html

        * WebCore.xcodeproj/project.pbxproj: Add ScrollingStateScrollingNodeMac.mm
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::counterScrollingLayerForFrameView): New function to get
        the counter-scrolling layer.
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition): Sync or set the position of the
        counter-scrolling layer just like we do for the main scrolling layer.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateScrollingNode):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode): setScrollLayer() renamed to setScrollPlatformLayer(),
        and added a FIXME comment because this code is confusing and possibly wrong.
        * page/scrolling/ScrollingStateNode.h: Renamed setScrollLayer() to setScrollPlatformLayer().
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (ScrollingStateScrollingNode): Track the counter-scrolling layer.
        (WebCore::ScrollingStateScrollingNode::counterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::counterScrollingLayerDidChange):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayerDidChange):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac): Add updateScrollingNode() which is less expensive than frameViewRootLayerDidChange()
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewRootLayerDidChange): Fetch the counter-scrolling layer if we have one.
        (WebCore::ScrollingCoordinatorMac::setCounterScrollingLayerForNode):
        (WebCore::ScrollingCoordinatorMac::updateScrollingNode):
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        (WebCore::ScrollingStateNode::setScrollPlatformLayer):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm: New file for implementation of setCounterScrollingLayer().
        (WebCore::ScrollingStateScrollingNode::counterScrollingPlatformLayer):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        (ScrollingTreeScrollingNodeMac):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::update):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::fixedBackgroundPaintsInLocalCoordinates):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): If we're painting into the fixed root layer,
        we want to always paint with the top,left at 0,0.
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): In the fixed root background case,
        we can make the background layer viewport-sized, and we have to set its counter-scrolled position.
        (WebCore::RenderLayerBacking::updateBackgroundLayer): If the background layer was created or destroyed,
        we have to tell the ScrollingCoordinator.
        (WebCore::RenderLayerBacking::didCommitChangesForLayer): Send the GraphicsLayer down.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer): If the background layer changed (e.g. it became
        tiled) we need to tell the ScrollingCoordinator.
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): We failed to update the borders on new
        layers sometimes; this fixes that.
        (WebCore::RenderLayerCompositor::frameViewDidScroll): In the non-threaded scrolling case, if we have
        a fixed background layer, we need to update its position.
        (WebCore::RenderLayerCompositor::fixedRootBackgroundLayerChanged): Feed the newly created/destroyed layer
        down to the ScrollingCoordinator.
        (WebCore::RenderLayerCompositor::supportsFixedRootBackgroundCompositing):
        (WebCore::RenderLayerCompositor::needsFixedRootBackgroundLayer):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderObject.cpp:
        (WebCore::rendererHasBackground):
        (WebCore::RenderObject::styleWillChange): If the compositor supports fixed root backgrounds, we no longer
        treat these as slow repaint objects.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::rootBackgroundIsEntirelyFixed): Helper function called by RLC.
        * rendering/RenderView.h:

2013-01-18  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Switch to new createTransaction call
        https://bugs.webkit.org/show_bug.cgi?id=107311

        Reviewed by Tony Chang.

        Convert frontend callers to use the new backend createTransaction
        call which is the final divorce between the frontend and backend
        transaction objects. This allows an asynchronous call in Chromium
        and allows the front and backend to have their own lifecycle,
        allowing the backend to be cleaned up as soon as a transaction is complete,
        rather than waiting for the JS object to get cleaned up.

        No new tests, this is a refactor covered by existing tests.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::commit):
        (WebCore::IDBDatabaseBackendImpl::abort):
        (WebCore::IDBDatabaseBackendImpl::createTransaction):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp:
        (WebCore::IDBDatabaseCallbacksImpl::onAbort):
        (WebCore::IDBDatabaseCallbacksImpl::onComplete):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::setActive):
        (WebCore::IDBTransaction::abort):
        * Modules/indexeddb/IDBTransaction.h:
        (WebCore):
        (IDBTransaction):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::setCallbacks):

2013-01-18  Brady Eidson  <beidson@apple.com>

        Rework NetworkProcess resource load identifiers.
        <rdar://problem/12934449> and https://bugs.webkit.org/show_bug.cgi?id=107192

        Reviewed by Alexey Proskuryakov.

        No new tests (No effect in tested configs).

        * WebCore.exp.in:

        Include an identifier argument for synchronous loads:
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::loadResourceSynchronously):
        * loader/LoaderStrategy.h:

        Pass along a unique identifier to the synchronous load:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):

        Remove the "setIdentifier" method:
        * loader/ResourceLoader.cpp:
        * loader/ResourceLoader.h:

2013-01-18  Shinya Kawanaka  <shinyak@chromium.org>

        Introduce isHTMLTextFormControlElement and toHTMLTextFormControlElement instead of toTextFormControl
        https://bugs.webkit.org/show_bug.cgi?id=107089

        Reviewed by Kent Tamura.

        toTextFormControl(node) returns 0 if node is not HTMLTextFormControl. In recent coding convention,
        we only have ASSERT and statc_cast in this kind of conversion function. So this code looks like
        having a bad cast, though it does not.

        In this patch, we convert toTextFromControl to isHTMLTextFormControlElement and toHTMLFormControlElement,
        which aligns our coding convention.

        No new tests, simple refactoring.

        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::Editor::setBaseWritingDirection):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::directionality):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::enclosingTextFormControl):
        * html/HTMLTextFormControlElement.h:
        (WebCore::isHTMLTextFormControlElement):
        (WebCore):
        (WebCore::toHTMLTextFormControlElement):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::layoutSpecialExcludedChild):
        * testing/Internals.cpp:
        (WebCore::Internals::visiblePlaceholder):

2013-01-18  Emil A Eklund  <eae@chromium.org>

        Change RenderStyle::getRoundedInnerBorderFor to take ints for border widths
        https://bugs.webkit.org/show_bug.cgi?id=107331

        Reviewed by Levi Weintraub.
        
        Borders are always represented as ints yet RenderStyle::
        getRoundedInnerBorderFor upcasts from int to LayoutUnit when
        calling getRoundedInnerBorderFor.

        No new tests, no change in functionality.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedInnerBorderFor):
        * rendering/style/RenderStyle.h:
        Change getRoundedInnerBorderFor to use ints for border widths.

2013-01-18  Adam Barth  <abarth@webkit.org>

        BackgroundHTMLParser shouldn't create AtomicStrings
        https://bugs.webkit.org/show_bug.cgi?id=107150

        Reviewed by Tony Gentilcore.

        Previously, we were creating an AtomicString from the HTMLToken for
        every start and end tag. This caused us to have a static dependency on
        the parser thread's atomic string table. We want to avoid static
        dependencies because we want to eventually run the background parser
        using a library like libdispatch that will let us run many version in
        parallel.

        This patch uses a different approach whereby we use the tag name from
        the CompactHTMLToken. In order to avoid calling strcmp excessively, we
        use StringImpl::hash to quickly reject matches with some common tag
        names. As a side effect, the hash value will be cached in the
        StringImpl, speeding up atomization once these StringImpls arrive on
        the main thread.

        This patch also improves the performance on html-parser-srcdoc.html.
        With the patch in bug 107236 applied (which focuses the benchmark more
        tightly on the parser), we spend 2.3% less time on the main thread
        (likely due to pre-caching the hash values) and 11.5% less time on the
        parser thread.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore):
        (WebCore::threadSafeEqual):
        (WebCore::threadSafeMatch):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):

2013-01-18  Tony Gentilcore  <tonyg@chromium.org>

        Run defer scripts in the threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=107320

        Reviewed by Eric Seidel.

        No new tests because covered by http/tests/misc/script-defer.html.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::didReceiveTokensFromBackgroundParser):

2013-01-18  Robert Hogan  <robert@webkit.org>

        fast/inline/fixed-pos-moves-with-abspos-parent-relative-ancestor.html is crashing after r140024
        https://bugs.webkit.org/show_bug.cgi?id=107209

        Reviewed by David Hyatt.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutPositionedObjects): r140024 forgot to layout the fixedpos object after
        marking it.

2013-01-18  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::RenderObject::isDescendantOf
        https://bugs.webkit.org/show_bug.cgi?id=107226

        Reviewed by David Hyatt.

        Test: fast/block/float/overhanging-float-not-removed-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists):
        Skip anonymous blocks in the chain to get the enclosing block and
        be able to correctly mark the overhanging floats in the next siblings.

2013-01-18  Chris Hopman  <cjhopman@google.com>

        Fix scrollRectToVisible in the presence of transforms
        https://bugs.webkit.org/show_bug.cgi?id=105574

        Reviewed by Simon Fraser.

        When scrolling to reveal an overflow layer, the required scroll was
        being calculated in absolute coordinates. To properly account for
        transforms, this calculation should be done in the local coordinates
        of the renderBox.

        Tests: editing/input/reveal-selection-transformed-overflow-parent.html
               editing/input/reveal-selection-transformed-textarea.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        When scrolling to reveal an overflow layer, calculate the required
        scroll in the local coordinates of the RenderBox.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteToLocalQuad):
        (WebCore):
        * rendering/RenderObject.h:
        (RenderObject):
        Add function to convert an absolute quad to a local quad.

2013-01-18  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Add support for min-content
        https://bugs.webkit.org/show_bug.cgi?id=106474

        Reviewed by Ojan Vafai.

        Tests: fast/css-grid-layout/minmax-min-content-column-resolution-columns.html
               fast/css-grid-layout/minmax-min-content-column-resolution-rows.html

        This change adds support to properly size min-content as long as the grid items and the grid element
        don't have orthogonal writing-modes. Orthogonal writing modes will be handled in a follow-up bug
        to keep the patch small-ish.

        This change implements a subset of the specification's algorithm, taking some shortcuts where the
        extra complexity wasn't a clear win for now: e.g. the specification relies on behavior customization
        through functors to share code among more complex cases - like spanning columns / rows. These shortcuts
        have been marked as FIXME / comments in the code so that they can be evaluated and fixed as we implement
        more of the complexity.

        * platform/Length.h:
        (WebCore::Length::isMinContent):
        (WebCore::Length::isMaxContent):
        Helper functions.

        * rendering/RenderGrid.cpp:
        (WebCore::GridTrack::maxBreadthIfNotInfinite):
        Helper function that returns the max breadth if finite and the used breadth otherwise.

        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        Updated to call resolveContentBasedTrackSizingFunctions.

        (WebCore::RenderGrid::computeUsedBreadthOfMinLength):
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength):
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):
        Split computeUsedBreadthOfLength into min and max side so that we can return the default values accordingly.
        computeUsedBreadthOfSpecifiedLength shares the common code. Also made these functions 'const'.

        (WebCore::RenderGrid::minContentForChild):
        This function returns the 'min-content' value based on layout / compute preferred logical widths information.

        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        This is the core function that implements the sizing. It currently doesn't share much code between the branches,
        which will be done as we implement more of the algorithm.

        (WebCore::RenderGrid::distributeSpaceToTracks):
        Clamped the growthShare to positive value only. This is required to handle cases where min-content is bigger
        than max track breadth. Added a comment about this deviation from the specification.

        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        Debug only method. It is a sanity check as our algorithm should *never* shrink the used breadth to a value
        smaller than the computed min track breadth.

        (WebCore::RenderGrid::layoutGridItems):
        Added 2 ASSERT using tracksAreWiderThanMinTrackBreadth.

        (WebCore::RenderGrid::resolveGridPosition):
        Helper overriden instance.
        * rendering/RenderGrid.h:
        Added the new functions. Also made more core functions take both grid tracks.

2013-01-18  Geoffrey Garen  <ggaren@apple.com>

        Weak GC maps should be easier to use
        https://bugs.webkit.org/show_bug.cgi?id=107312

        Reviewed by Sam Weinig.

        Since weak GC maps are so easy to use now, let's use them for the DOM
        string cache.

        * WebCore.exp.in:
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore):
        (WebCore::DOMWrapperWorld::globalData):
        (DOMWrapperWorld):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore):
        * bindings/js/JSDOMBinding.h:
        (WebCore):
        (WebCore::jsStringWithCache):

2013-01-18  Tim Volodine  <timvolodine@chromium.org>

        Text Autosizing: don't autosize headers with multiple inline links.
        https://bugs.webkit.org/show_bug.cgi?id=106792

        Reviewed by Kenneth Rohde Christiansen.

        This patch includes code for detecting rows of links typically seen
        in headers or footers of webpages. Such rows of links should not be
        autosized.

        The heuristics to detect such rows of links are based on the appearance
        of headers in most websites: i.e. links are inline, there are at least three
        of them, they should have the same font size with possibly only short textual
        separators between them (max 3 characters) and there should be no line breaks
        (i.e. <br> elements) between them.

        Tests: fast/text-autosizing/header-li-links-autosizing.html
               fast/text-autosizing/header-links-autosizing-different-fontsize.html
               fast/text-autosizing/header-links-autosizing.html

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::containerShouldBeAutosized):
        (WebCore::TextAutosizer::containerIsRowOfLinks):
        (WebCore):
        * rendering/TextAutosizer.h:

2013-01-18  Levi Weintraub  <leviw@chromium.org>

        LayoutUnit should round half consistently, not away from zero
        https://bugs.webkit.org/show_bug.cgi?id=107208

        Reviewed by Eric Seidel.

        The current implementation of LayoutUnit::round() always rounds half away from zero. This can result in
        a shift of 1 pixel moving an element aligned at a half-pixel by 2. This problem is particularly common with
        RenderLayers, which pass the sub-pixel accumulation into their renderers after translating the graphics
        context passed in by their rounded location. This changes round() to always round 0.5 up.

        Test: fast/sub-pixel/sub-pixel-root-layer.html

        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::round): Always round 0.5 up.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents): We no longer need to prevent rootLayers from passing in a
        sub-pixel offset. This eliminates the shifting of elements when applying translateZ(0) or similar.

2013-01-18  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove custom V8ScriptProfileNodeCustom::toV8()
        https://bugs.webkit.org/show_bug.cgi?id=107245

        Reviewed by Adam Barth.

        V8ScriptProfileNodeCustom::toV8() needs not to be custom.
        Furthermore, the current custom toV8() is wrong in that
        it doesn't use a creationContext and it doesn't set a wrapper
        class id. This is one of steps to avoiding ASSERT()s
        that will be added in https://bugs.webkit.org/show_bug.cgi?id=107137 .

        No tests. No change in behavior.

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/custom/V8ScriptProfileNodeCustom.cpp: Removed.
        * inspector/ScriptProfileNode.idl:

2013-01-18  Ali Juma  <ajuma@chromium.org>

        [chromium] Convert WebTransformOperations into pure virtual
        https://bugs.webkit.org/show_bug.cgi?id=105553

        Reviewed by James Robinson.

        This removes the implementation of WebTransformOperations and updates
        users to construct instances using a factory function. This also adds
        the implementation of WebTransformKeyFrame.

        No new tests, no change in functionality.

        * WebCore.gypi:
        * platform/chromium/support/WebTransformKeyframe.cpp: Copied from Source/Platform/chromium/public/WebTransformKeyframe.h.
        (WebKit):
        (WebKit::WebTransformKeyframe::WebTransformKeyframe):
        (WebKit::WebTransformKeyframe::~WebTransformKeyframe):
        (WebKit::WebTransformKeyframe::time):
        (WebKit::WebTransformKeyframe::value):
        * platform/chromium/support/WebTransformOperations.cpp: Removed.
        * platform/graphics/chromium/AnimationTranslationUtil.cpp:
        (WebCore::toWebTransformOperations):
        (WebCore::WebTransformAnimationCurve):

2013-01-18  Arko Saha  <arko@motorola.com>

        PropertyCollection test fails on JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=106997

        Reviewed by Kentaro Hara.

        Made changes in CodeGeneratorJS.pm so that it can use
        toJS(JSC::ExecState*, JSDOMGlobalObject*, PropertyNodeList*)
        to wrap the object and return PropertyNodeList instead of NodeList.

        Test: fast/dom/MicroData/propertiescollection-crash.html
              fast/dom/MicroData/properties-collection-namedgetter-with-invalid-name.html

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

2013-01-18  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Improve table-guessing heuristics
        https://bugs.webkit.org/show_bug.cgi?id=107042

        Reviewed by Chris Fleizach.

        Adds some more rules so that tables with cell borders, empty-cells,
        col, colgroup, or >= 20 rows are all considered data tables, not
        layout tables.

        Test: accessibility/table-detection.html (modified)

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

2013-01-18  Terry Anderson  <tdanderson@chromium.org>

        Scroll gestures should not create wheel events
        https://bugs.webkit.org/show_bug.cgi?id=103952

        Reviewed by James Robinson.

        Tests: fast/events/touch/gesture/touch-gesture-scroll-div-propagated.html
               fast/events/touch/gesture/touch-gesture-scroll-div-twice-propagated.html
               fast/events/touch/gesture/touch-gesture-scroll-iframe-editable.html
               fast/events/touch/gesture/touch-gesture-scroll-iframe-propagated.html
               fast/events/touch/gesture/touch-gesture-scroll-page-propagated.html

        In EventHandler::handleGestureEvent(), scroll gestures should not be handled by synthesizing
        and dispatching wheel events; we should instead scroll the relevant layer directly.

        Note that this patch should be landed together with the patch for
        https://bugs.webkit.org/show_bug.cgi?id=106589.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::passGestureEventToWidget):
        (WebCore::EventHandler::passGestureEventToWidgetIfPossible):
        (WebCore):
        (WebCore::closestScrollableNodeInDocumentIfPossibleOrSelfIfNotScrollable):
        (WebCore::EventHandler::handleGestureScrollBegin):
        (WebCore::EventHandler::handleGestureScrollUpdate):
        (WebCore::EventHandler::isScrollbarHandlingGestures):
        * page/EventHandler.h:
        (EventHandler):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):
        * rendering/RenderLayer.h:

2013-01-18  Nate Chapin  <japhet@chromium.org>

        Cannot abort multiple XHR POSTs made to same url
        https://bugs.webkit.org/show_bug.cgi?id=106937

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/cache/cancel-multiple-post-xhrs.html

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::removeClient): Call allClientsRemoved() regardless
            of whether this resource is inCache(). Otherwise, CachedRawResources will
            not have the opportunity to cancel as expected. However, don't cancel
            if the last client was removed because we're in the middle of switching
            the clients over to a successfully revalidated resource.

2013-01-18  Dima Gorbik  <dgorbik@apple.com>

        Implement ::cue() pseudo element property whitelist
        https://bugs.webkit.org/show_bug.cgi?id=105477

        Reviewed by Antti Koivisto.

        Only allowed by specs properties are applied to WebVTT nodes. We used whitelists before for the region
        style rule so this refactors the code a little bit to pass bitfields that contain the information on which 
        whitelists should be used.

        Test: media/track/track-css-property-whitelist.html

        * css/RuleSet.cpp: 
        (WebCore::RuleData::RuleData): set a region bit when creating a RuleData.
        (WebCore::RuleSet::addRule): set a cue bit when PseudoCue type is set for a selector.
        * css/RuleSet.h: add the new bitfield as an ivar and setters/getters to access it.
        (WebCore::RuleData::isInRegionRule):
        (WebCore::RuleData::whitelistType):
        (WebCore::RuleData::isInCueRule):
        (WebCore::RuleData::setIsInCueRule):
        * css/StyleResolver.cpp: refactor the code to pass a bitfield instead of single bits.
        (WebCore::StyleResolver::addMatchedProperties):
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::isValidCueStyleProperty): 
        * css/StyleResolver.h:

2013-01-18  Tony Chang  <tony@chromium.org>

        Incorrect scrollable height during simplified layout
        https://bugs.webkit.org/show_bug.cgi?id=107193

        Reviewed by Ojan Vafai.

        Test: fast/overflow/height-during-simplified-layout.html

        When computing overflow, we use the height of the block before it was clamped
        (i.e., before updateLogicalHeight() has been called).

        During simplfied layout, we use the previous sizes rather than doing a full
        layout. We still compute overflow, but we were using the clamped height rather
        than the full height.

        This caused us to incorrectly compute the overflow by the vertical padding.
        Since we were passing in the already clamped clientHeight to RenderBlock::computeOverflow,
        we would only include the overflow from our children sizes and not include the overflow
        from ourselves caused by padding + content.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout): Use the scrollable height rather than the
        already clamped height.

2013-01-18  Joe Mason  <jmason@rim.com>

        [BlackBerry] fix compile warnings in NetworkJob
        https://bugs.webkit.org/show_bug.cgi?id=107293

        Reviewed by Yong Li.

        Internal PR: 283096

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore):
        (WebCore::isAppendableHeader):

2013-01-18  Dominic Mazzoni  <dmazzoni@google.com>

        REGRESSION (r132699): Crashes in WebCore::TextIterator::handleTextNodeFirstLetter
        https://bugs.webkit.org/show_bug.cgi?id=100688

        Reviewed by Martin Robinson.

        Prevent crashes when accessibilityObjectIsIgnored calls textUnderElement
        while a subtree is being destroyed.

        Covered by existing tests.

        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):

2013-01-18  Joe Mason  <jmason@rim.com>

        [BlackBerry] Only clear credentials when purgeCredentials is called
        https://bugs.webkit.org/show_bug.cgi?id=107124

        Reviewed by Yong Li.

        Stop clearing credentials when sending out a request just in case they're wrong. That's stupid and
        has race conditions. Only clear them when we know they're wrong.

        Internal PR: 231158
        Internal Reviewer: George Staikos

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):
        (WebCore::NetworkJob::purgeCredentials):

2013-01-18  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] UI: add a context selector to show screenshot of any canvas in the log
        https://bugs.webkit.org/show_bug.cgi?id=107274

        Reviewed by Pavel Feldman.

        Adding a canvas context selector to display in the replay image screenshot.
        Drive-by: Reuse common CSS class "status-bar-item" to remove a lot of CSS duplication.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype._createControlButton):
        (WebInspector.CanvasProfileView.prototype._onReplayContextChanged):
        (WebInspector.CanvasProfileView.prototype._onReplayFirstStepClick):
        (WebInspector.CanvasProfileView.prototype._onReplayLastStepClick):
        (WebInspector.CanvasProfileView.prototype._enableWaitIcon):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog.didReplayTraceLog):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog):
        (WebInspector.CanvasProfileView.prototype._didReceiveTraceLog):
        (WebInspector.CanvasProfileView.prototype._requestReplayContextInfo.didReceiveResourceInfo):
        (WebInspector.CanvasProfileView.prototype._requestReplayContextInfo):
        * inspector/front-end/canvasProfiler.css:
        * inspector/front-end/inspector.css:
        (.status-bar button.status-bar-item img):

2013-01-18  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] add getResourceInfo and getResourceState methods to the protocol
        https://bugs.webkit.org/show_bug.cgi?id=107280

        Reviewed by Pavel Feldman.

        We need to expose replayable resource info and replay state via the protocol.
        The ResourceInfo describes a replayable resource, i.e. the info about a resource that was stored to replay it later.
        The ResourceState describes a current state of a resource being replayed on the back-end.

        * inspector/CodeGeneratorInspector.py:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::replayTraceLog):
        (WebCore):
        (WebCore::InjectedScriptCanvasModule::resourceInfo):
        (WebCore::InjectedScriptCanvasModule::resourceState):
        * inspector/InjectedScriptCanvasModule.h:
        (InjectedScriptCanvasModule):
        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::replayTraceLog):
        (WebCore):
        (WebCore::InspectorCanvasAgent::getResourceInfo):
        (WebCore::InspectorCanvasAgent::getResourceState):
        * inspector/InspectorCanvasAgent.h:
        (InspectorCanvasAgent):
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView.prototype._replayTraceLog.didReplayTraceLog):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog):

2013-01-18  Sergio Villar Senin  <svillar@igalia.com>

        [Soup] Frequent crashes on redirections
        https://bugs.webkit.org/show_bug.cgi?id=107240

        Reviewed by Martin Robinson.

        We must ensure that the ResourceHandle has not being cancelled
        before performing a redirect. This could happen while we close the
        stream used to read the redirect response because it is done
        asynchronously.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::redirectCloseCallback): also renamed res to result.

2013-01-18  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: array grouping does not work big sparse arrays
        https://bugs.webkit.org/show_bug.cgi?id=106897

        Reviewed by Pavel Feldman.

        Now we will choose between array index iteration and object properties iteration for sparse arrays.

        * inspector/front-end/ObjectPropertiesSection.js:
        (.doLoop):
        (.countIterationCallback):
        (.loopIterationCallback):

2013-01-18  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Fix Memory leaks in EGL and GLX surface.
        https://bugs.webkit.org/show_bug.cgi?id=107100

        Reviewed by Laszlo Gombos.

        GLX and EGL surface don't release GL resources created by them.
        This patch ensures that the leaks are fixed and
        native display is not closed before releasing the current
        context and surface.

        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (GraphicsContext3DPrivate::releaseResources):
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLWindowTransportSurface::destroy): Call base class to free any allocated GL resources.
        * platform/graphics/surfaces/glx/GLXContext.cpp:
        (WebCore::GLXOffScreenContext::platformReleaseCurrent):
        (WebCore::GLXOffScreenContext::freeResources): Don't reset the display to null.
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::destroy): Call base class to free any allocated GL resources.
        (WebCore::GLXPBuffer::freeResources): Call base class to free any allocated GL resources.

2013-01-18  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] introduce Resource.toDataURL
        https://bugs.webkit.org/show_bug.cgi?id=107019

        Reviewed by Pavel Feldman.

        Resource.toDataURL will return string data url representation of a resource, if applicable.
        For example, for a rendering context resource (2D or WebGL) it will return canvas.toDataURL().

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2013-01-18  Csaba Osztrogonác  <ossy@webkit.org>

        One more unreviewed Windows buildfix after r140097.

        * html/HTMLPlugInElement.h: Remove non-existent include.

2013-01-18  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Windows buildfix after r140097.

        * html/HTMLPlugInElement.h:

2013-01-18  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: remove dead code from heap profiler front-end
        https://bugs.webkit.org/show_bug.cgi?id=107265

        Reviewed by Pavel Feldman.

        * inspector/front-end/HeapSnapshotView.js: removed unused methods.

2013-01-18  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Qt minimal compilation after r140127

        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentationCookie):

2013-01-18  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: make sure InspectorInstrumentationCookie is invalidated if inspected page was destroyed
        https://bugs.webkit.org/show_bug.cgi?id=107232

        Reviewed by Pavel Feldman.

        Made InstrumentingAgents reference counted to make sure it is not deleted while there is
        InspectorInstrumentationCookie with reference to it.

        Introduced InstrumentingAgents::reset that is called from inspector controller destructor
        to double check that references to all deleted agents are cleared.

        InspectorInstrumentationCookie turned from std::pair into a custom class so that
        we can avoid inclusion of InstrumentingAgents.h into InspectorInstrumentation.h

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        * inspector/InspectorController.h:
        (InspectorController):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentationCookie::InspectorInstrumentationCookie):
        (WebCore::InspectorInstrumentationCookie::operator=):
        (WebCore::InspectorInstrumentationCookie::~InspectorInstrumentationCookie):
        (WebCore::InspectorInstrumentation::didHandleEventImpl):
        (WebCore::InspectorInstrumentation::didFireTimerImpl):
        (WebCore::InspectorInstrumentation::didLayoutImpl):
        (WebCore::InspectorInstrumentation::didPaintImpl):
        (WebCore::InspectorInstrumentation::didRecalculateStyleImpl):
        (WebCore::InspectorInstrumentation::didMatchRuleImpl):
        (WebCore::InspectorInstrumentation::didProcessRuleImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentationCookie):
        (WebCore::InspectorInstrumentation::didCallFunction):
        (WebCore::InspectorInstrumentation::didDispatchXHRReadyStateChangeEvent):
        (WebCore::InspectorInstrumentation::didDispatchEvent):
        (WebCore::InspectorInstrumentation::didHandleEvent):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::didEvaluateScript):
        (WebCore::InspectorInstrumentation::didFireTimer):
        (WebCore::InspectorInstrumentation::didLayout):
        (WebCore::InspectorInstrumentation::didDispatchXHRLoadEvent):
        (WebCore::InspectorInstrumentation::didPaint):
        (WebCore::InspectorInstrumentation::didRecalculateStyle):
        (WebCore::InspectorInstrumentation::didMatchRule):
        (WebCore::InspectorInstrumentation::didProcessRule):
        (WebCore::InspectorInstrumentation::didReceiveResourceData):
        (WebCore::InspectorInstrumentation::didWriteHTML):
        (WebCore::InspectorInstrumentation::didFireAnimationFrame):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::create):
        (InstrumentingAgents):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::~WorkerInspectorController):
        * inspector/WorkerInspectorController.h:
        (WorkerInspectorController):

2013-01-18  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [CMake] Fix indexeddb module build
        https://bugs.webkit.org/show_bug.cgi?id=107247

        Reviewed by Kentaro Hara.

        Add missing files to WebCore_SOURCES so the indexeddb module
        can be built.

        * CMakeLists.txt:

2013-01-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add early version of file system mappings editor to settings.
        https://bugs.webkit.org/show_bug.cgi?id=107136

        Reviewed by Pavel Feldman.

        FileMapping simplified to use only one type of entries.
        Added start/stopBatchUpdates to FileSystemWorkspaceProvider for better TabbedPane performance.
        Added fileSystemProject experiment for file system support and (early and ugly) file system mappings editor behind this experiment.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * inspector/front-end/FileMapping.js:
        (WebInspector.FileMapping):
        (WebInspector.FileMapping.prototype._entryMatchesURL):
        (WebInspector.FileMapping.prototype._entryURIPrefix):
        (WebInspector.FileMapping.prototype.hasMappingForURL):
        (WebInspector.FileMapping.prototype._innerURIForURL):
        (WebInspector.FileMapping.prototype.uriForURL):
        (WebInspector.FileMapping.prototype.urlForURI):
        (WebInspector.FileMapping.prototype.mappingEntries):
        (WebInspector.FileMapping.prototype.setMappingEntries):
        (WebInspector.FileMapping.prototype.set _loadFromSettings.get this):
        (WebInspector.FileMapping.prototype.set _loadFromSettings):
        (WebInspector.FileMapping.Entry):
        * inspector/front-end/FileSystemWorkspaceProvider.js:
        (WebInspector.FileSystemWorkspaceProvider.prototype._fileSystemRemoved):
        * inspector/front-end/IsolatedFileSystemModel.js:
        (WebInspector.IsolatedFileSystemModel.prototype._fileSystemAdded):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.WorkspaceSettingsTab):
        (WebInspector.WorkspaceSettingsTab.prototype._createFileSystemsEditor):
        (WebInspector.WorkspaceSettingsTab.prototype._createShowTextInput):
        (WebInspector.WorkspaceSettingsTab.prototype._createEditTextInput):
        (WebInspector.WorkspaceSettingsTab.prototype._createRemoveButton):
        (WebInspector.WorkspaceSettingsTab.prototype._createAddButton):
        (WebInspector.WorkspaceSettingsTab.prototype._addFileSystemRow.removeFileSystemClicked):
        (WebInspector.WorkspaceSettingsTab.prototype._addFileSystemRow.fileSystemRemoved):
        (WebInspector.WorkspaceSettingsTab.prototype._addFileSystemRow):
        (WebInspector.WorkspaceSettingsTab.prototype._addFileSystemClicked):
        (WebInspector.WorkspaceSettingsTab.prototype._fileSystemAdded):
        (WebInspector.WorkspaceSettingsTab.prototype._createFileMappingEditor):
        (WebInspector.WorkspaceSettingsTab.prototype._addMappingRow.removeMappingClicked):
        (WebInspector.WorkspaceSettingsTab.prototype._addMappingRow):
        (WebInspector.WorkspaceSettingsTab.prototype._addFileMappingClicked):
        * inspector/front-end/helpScreen.css:
        (.settings-tab .file-systems-editor input.file-system-path):
        (.settings-tab .file-mappings-editor .workspace-settings-row input):
        (.settings-tab .file-mappings-editor .workspace-settings-row input.file-mapping-url):
        (#workspace-tab-content .button:hover):
        (#workspace-tab-content .workspace-settings-row:hover .button):
        (#workspace-tab-content .workspace-settings-row .button):
        (#workspace-tab-content .workspace-settings-row .remove-button):
        (#workspace-tab-content .workspace-settings-row .add-button):
        (#workspace-tab-content .workspace-settings-row .file-system-add-button):
        (#workspace-tab-content .workspace-settings-row .file-system-add-button:hover):
        * inspector/front-end/addIcon.png: Added.

2013-01-18  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: nest time/timeEnd records when possible (in glue-mode)
        https://bugs.webkit.org/show_bug.cgi?id=100114

        Reviewed by Pavel Feldman.

        Nesting time/timeEnd intervals will provide a better overview on
        what is happening.

        * inspector/front-end/TimelinePresentationModel.js: Added logic that
        reparents "time" record when "timeEnd" arrives.

2013-01-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: do not use localeCompare unless necessary
        https://bugs.webkit.org/show_bug.cgi?id=107242

        Reviewed by Vsevolod Vlasov.

        Saving on performance here.

        * inspector/front-end/CSSSelectorProfileView.js:
        (WebInspector.CSSSelectorProfileView.prototype._sortProfile.selectorComparator):
        (WebInspector.CSSSelectorProfileView.prototype._sortProfile.sourceComparator):
        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable.prototype._sortCookies.compareTo):
        (WebInspector.CookiesTable.prototype._sortCookies):
        * inspector/front-end/DirectoryContentView.js:
        (.nameCompare):
        (.typeCompare):
        * inspector/front-end/FileSystemModel.js:
        (WebInspector.FileSystemModel.Entry.compare):
        * inspector/front-end/FileSystemView.js:
        (WebInspector.FileSystemView.EntryTreeElement.prototype._directoryContentReceived):
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.OpenResourceDialog.compareFunction):
        (WebInspector.OpenResourceDialog):
        * inspector/front-end/NetworkRequest.js:
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchScope.prototype._sortedUISourceCodes.comparator):
        (WebInspector.ScriptsSearchScope.prototype._sortedUISourceCodes):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):
        * inspector/front-end/utilities.js:

2013-01-18  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix Closure r2388 warnings
        https://bugs.webkit.org/show_bug.cgi?id=107252

        Reviewed by Pavel Feldman.

        Surround all casts with brackets to avoid Closure warnings.

        No new tests: no change in behaviour.

        * inspector/front-end/BottomUpProfileDataGridTree.js:
        (WebInspector.BottomUpProfileDataGridTree):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._filteredBreakpointLocations):
        (WebInspector.BreakpointManager.prototype.toggleAllBreakpoints):
        (WebInspector.BreakpointManager.prototype.removeAllBreakpoints):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.DOMAgent.prototype.querySelector):
        (WebInspector.DOMAgent.prototype.querySelectorAll):
        * inspector/front-end/DefaultScriptMapping.js:
        (WebInspector.DefaultScriptMapping.prototype._scriptEdited):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.SnippetScriptMapping.prototype.rawLocationToUILocation):
        * inspector/front-end/TopDownProfileDataGridTree.js:
        (WebInspector.TopDownProfileDataGridTree):
        (WebInspector.TopDownProfileDataGridTree.prototype.exclude):

2013-01-18  Takashi Sakamoto  <tasak@google.com>

        Implement CSSHostRule for @host @-rules.
        https://bugs.webkit.org/show_bug.cgi?id=102344

        Reviewed by Dimitri Glazkov.

        CSSHostRule is defined in Shadow DOM spec:
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#css-host-rule-interface
        To see or to modify @host @-rules by using inspector, we need to
        implement CSSHostRule interface.

        Test: fast/dom/shadow/css-hostrule-api.html

        * DerivedSources.cpp:
        Modified to include JSCSSHostRule.cpp.
        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added CSSHostRule.cpp, CSSHostRule.h, and CSSHostRule.idl.
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        Add a new case that the given rule is @host @-rules to support @host
        @-rules.
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        Add a new case that the given rule is @host @-rules to support @host
        @-rules.
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::wrap):
        * css/CSSAllInOne.cpp:
        * css/CSSHostRule.cpp: Added.
        (WebCore):
        (WebCore::CSSHostRule::CSSHostRule):
        (WebCore::CSSHostRule::cssText):
        * css/CSSHostRule.h: Added.
        (WebCore):
        (CSSHostRule):
        (WebCore::CSSHostRule::create):
        Implemented class CSSHostRule which inherits CSSGroupingRule.
        Since CSSHostRule has the same interface as CSSGroupingRule, it is
        required to implement its constructor and to override only type
        method and cssText method.
        * css/CSSHostRule.idl: Added.
        * css/CSSRule.h:
        * css/CSSRule.idl:
        Added internal HOST_RULE type number.
        * css/StyleResolver.cpp:
        (WebCore::collectCSSOMWrappers):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::reportMemoryUsage):
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        Modified to handle StyleRuleHost.
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::isHostRule):
        (WebCore::StyleRuleHost::StyleRuleHost):
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * page/DOMWindow.idl:
        Added CSSHostRule constructor.

2013-01-18  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: inspectedWindow.eval("IamUndefined.prop", callback) fails to give exception text
        https://bugs.webkit.org/show_bug.cgi?id=106926

        Reviewed by Pavel Feldman.

        Return .description from exceptions rather than .value (which is undefined)

        New test added to extensions/extensions-eval.html

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.):
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):

2013-01-14  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Update freetype in jhbuild to 2.4.11 and activate subpixel layout
        https://bugs.webkit.org/show_bug.cgi?id=106774

        In order to fix a long standing linespacing/font ascent & descent issue
        we found that FreeType commit b0962ac34e660 solves that problem.
        Let's update FreeType accordingly, but bump it to 2.4.11 due to the
        maintainer recommending several security updates after that said commit.

        Also, in order to avoid extra rebaselining, let's activate subpixel
        layout at the same time. With subpixel layout I propose to remove
        rounding of the linespacing value in order to not introduce rounding
        inaccuracies at the SimpleFontData level. Other platforms don't do that
        anymore, furthermore the linegap value is not rounded either.

        Reviewed by Martin Robinson.

        No new tests, affects a large number of tests that will require rebaselining.

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformInit): Remove rounding when setting linespacing.

2013-01-18  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: Search shortcut clears the current search box contents
        https://bugs.webkit.org/show_bug.cgi?id=107109

        Reviewed by Pavel Feldman.

        The search box contents should be changed only when the current focus element is
        different than the _searchInputElement.

        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype.showSearchField):

2013-01-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Fix JSDocs and deduplicate code.
        https://bugs.webkit.org/show_bug.cgi?id=107116

        Reviewed by Pavel Feldman.

        Add / fix JSDocs to see possible type mismatches.
        Deduplicate code for styling network log items.

        * inspector/front-end/NetworkPanel.js: Fix JSDocs.
        (WebInspector.NetworkDataGridNode.prototype._updateElementStyleClasses):
        Extract common code.
        * inspector/front-end/NetworkRequest.js: Fix JSDocs.

2013-01-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140005.
        http://trac.webkit.org/changeset/140005
        https://bugs.webkit.org/show_bug.cgi?id=107235

        broke downstream Chromium interactive_ui_tests (Requested by
        dominicc on #webkit).

        * WebCore.exp.in:
        * dom/Document.cpp:
        * dom/Document.h:
        (WebCore::Document::documentElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::responseReceived):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::identifier):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient):
        (WebCore::CachedRawResource::willSendRequest):
        (WebCore::CachedRawResource::canReuse):
        * loader/cache/CachedRawResource.h:
        (CachedRawResource):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClientToSet):
        * loader/cache/CachedResource.h:
        (CachedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        * testing/Internals.cpp:
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-01-18  Yoshifumi Inoue  <yosin@chromium.org>

        REGRESSION(r137726): Spring Loaded Pan Scrolling doesn't stop
        https://bugs.webkit.org/show_bug.cgi?id=107205

        Reviewed by Hajime Morita.

        The bug is caused by forgetting to set true m_panScrollButtonPressed
        in AutoscrollController::startPanScroll().

        This patch changes state management during pan scroll by replacing
        m_panScrollButtonPressed and m_springLoadedPanScrollInProgress by
        m_autoscrollType with introducing new AutoscrollController state
        AutoscrollForPanCanStop.

        Tests: platform/chromium-win/fast/events/panScroll-click.html
               platform/chromium-win/fast/events/panScroll-drag.html

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::AutoscrollController): Changed to remove initialization of m_panScrollButtonPressed and m_springLoadedPanScrollInProgress.
        (WebCore::AutoscrollController::stopAutoscrollTimer): Changed to remove resetting m_panScrollButtonPressed and m_springLoadedPanScrollInProgress.
        (WebCore::AutoscrollController::handleMouseReleaseEvent): Changed to handle AutoscrollForPan and AutoscrollForPanCanStop.
        (WebCore::AutoscrollController::panScrollInProgress): Changed to check AutoscrollForPanCanStop too.
        (WebCore::AutoscrollController::startPanScrolling): Changed to remove setting of m_springLoadedPanScrollInProgress.
        (WebCore::AutoscrollController::autoscrollTimerFired): Changed to add case for AutoscrollForPanCanStop.
        (WebCore::AutoscrollController::updatePanScrollState): Chagned to use AutoscrollForPan and AutoscrollForPanCanStop.
        * page/AutoscrollController.h:
        (AutoscrollController): Changed to add AutoscrollForPanCanStop to AutoscrollType.

2013-01-17  Takashi Sakamoto  <tasak@google.com>

        Heap-use-after-free in WebCore::LiveNodeListBase::invalidateCache
        https://bugs.webkit.org/show_bug.cgi?id=106958

        Reviewed by Ryosuke Niwa.

        Need to update node lists that nodes in shadow dom trees have
        when document is changed.

        No new tests; it is difficult to reproduce crash by using
        DumpRenderTree. Manually tested by using attached repro.html.

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptTreeScope):
        Added to adopt node lists when tree scope is changed.
        (WebCore::NodeListsNodeData::adoptDocument):
        Renamed the original adoptTreeScope to adoptDocument.
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        If document scope is not changed, modify to invoke adoptTreeScope.
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):
        Modify to invoked adoptDocument.

2013-01-17  Sankeerth V S  <sankeerth.vs@samsung.com>

        Search for a selected word should trigger _performSearch to populate
        search results
        https://bugs.webkit.org/show_bug.cgi?id=106423

        Reviewed by Pavel Feldman.

        No new tests as this is a UI related change.

        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype.showSearchField):

2013-01-17  Rafael Weinstein  <rafaelw@chromium.org>

        Ensure the parser adopts foster-parented children into the document of their parent.
        https://bugs.webkit.org/show_bug.cgi?id=107023

        Reviewed by Adam Barth.

        Tests: fast/parser/foster-parent-adopted.html
               fast/parser/foster-parent-adopted2.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::fosterParent):

2013-01-17  Martin Robinson  <mrobinson@igalia.com>

        2013-01-17  Martin Robinson  <mrobinson@igalia.com>

        IndexedDB: Conditionalize usage of env_idb.h to fix build for non-Chromium ports
        https://bugs.webkit.org/show_bug.cgi?id=107182

        No new tests. This is a build fix.

        * platform/leveldb/LevelDBDatabase.cpp: Use the default environment for non-Chromium
        ports instead of the Chromium-specific one provided by env_idb.h.

2013-01-17  Rik Cabanier  <cabanier@adobe.com>

        Update GraphicsContext to support winding rule in clip operator for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=106872

        Reviewed by Dirk Schulze.

        Added support for winding to clip() and canvasClip() functions.

        No new tests, no change in behavior.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clip): Call clipPath() instead with winding rule.
        (WebCore::GraphicsContext::canvasClip): Honor the winding rule.

2013-01-17  Shinya Kawanaka  <shinyak@chromium.org>

        Revert r122824 for a while
        https://bugs.webkit.org/show_bug.cgi?id=97867

        Reviewed by Hajime Morita.

        In r122824, we have introduced ImageInnerElement for making an image element ShadowDOM-available.
        However, it turned out that making a replaced-element ShadowDOM-available has a lot of difficulty.
        So we would like to postpone it for a while.

        Since that patch makes an image element really complicated, we would like to revert it.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/html.css:
        * html/HTMLImageElement.cpp:
        (WebCore):
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::createRenderer):
        (WebCore::HTMLImageElement::attach):
        * html/HTMLImageElement.h:
        (WebCore):
        (HTMLImageElement):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        (WebCore::HTMLImageLoader::sourceURI):
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLImageLoader.h:
        (HTMLImageLoader):
        * html/HTMLInputElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInElement.h:
        (WebCore):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLTagNames.in:
        * html/HTMLVideoElement.h:
        * html/shadow/ImageInnerElement.cpp: Removed.
        * html/shadow/ImageInnerElement.h: Removed.
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::renderImageResource):
        (WebCore::ImageLoader::updatedHasPendingEvent):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        (WebCore::ImageLoader::dispatchPendingLoadEvent):
        (WebCore::ImageLoader::dispatchPendingErrorEvent):
        * loader/ImageLoader.h:
        (WebCore):
        (ImageLoader):
        (WebCore::ImageLoader::element):
        * loader/ImageLoaderClient.h: Removed.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::imageMap):
        (WebCore::RenderImage::updateAltText):
        * rendering/RenderImage.h:
        (WebCore):
        (RenderImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):
        * svg/SVGImageElement.h:
        (SVGImageElement):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::SVGImageLoader):
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        (WebCore::SVGImageLoader::sourceURI):
        * svg/SVGImageLoader.h:
        (SVGImageLoader):

2013-01-17  Joanmarie Diggs  <jdiggs@igalia.com>

        REGRESSION (r139444): Crashes in three accessibility tests on GTK
        https://bugs.webkit.org/show_bug.cgi?id=106922

        Reviewed by Chris Fleizach.

        r139444 exposed an infinite loop that was just waiting to happen.
        Currently, getting the role value of an ARIA table row involves
        getting the parent table via parentObjectUnignored() which in turn
        can lead to the role value of the table row being checked. Moving
        the roleValue() logic to determineAccessibilityRole() avoids this.

        This fix, however, introduced a regression when an accessible row
        was examined without having first examined the parent table for
        non-ARIA tables. Now that it is safe to call parentObjectUnignored(),
        the parentTable() method used for ARIA table rows can also be used
        by non-ARIA table rows.

        No new tests; instead unskipped the three crashing tests.

        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::determineAccessibilityRole):
        * accessibility/AccessibilityTableRow.h:
        (AccessibilityTableRow):

2013-01-17  Rik Cabanier  <cabanier@adobe.com>

        Update GraphicsContext to support winding rule in clip operator for QT
        https://bugs.webkit.org/show_bug.cgi?id=106873

        Reviewed by Dirk Schulze.

        Added support for winding to clip() and canvasClip() functions.

        No new tests, no change in behavior.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clip): Use passed in winding rule.
        (WebCore::GraphicsContext::canvasClip): Rename variable.

2013-01-17  Rik Cabanier  <cabanier@adobe.com>

        Update GraphicsContext to support winding rule in clip operator for Cairo
        https://bugs.webkit.org/show_bug.cgi?id=107065

        Reviewed by Dirk Schulze.

        Added support for winding to clip() and canvasClip() functions.

        No new tests, no change in behavior.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clip): Use passed in winding rule.
        (WebCore::GraphicsContext::canvasClip): Rename variable.

2013-01-17  Elliott Sprehn  <esprehn@chromium.org>

        Track subframe count to avoid traversing the tree when there's no subframes
        https://bugs.webkit.org/show_bug.cgi?id=101821

        Reviewed by Ojan Vafai.

        Make removeChild 9-14% faster by not walking the descendants looking for
        frames when there's known to be no frames.

        This is a more generalized version of the fix in Bug 101619 that only
        avoided this walk when the whole document had no frames. This patch extends
        it to skip traversing subtrees that have no frames by tracking the number of
        frames in subtrees and then only walking those subtrees that are known to
        contain frames in removeChild.

        Test: fast/frames/parser-append-subframe-count.html

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChildren):
        (WebCore::parserAppendChild):
        (WebCore::parserRemoveChild):
        (WebCore::parserInsertBefore):
            The parser may move nodes without doing frame disconnection so we
            must maintain the connected subframe count manually during these
            mutations.
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildFrameDisconnector::collectFrameOwners):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::ChildFrameDisconnector):
        (ChildFrameDisconnector):
        (WebCore::ChildFrameDisconnector::collectFrameOwners):
          Renamed from collectDescendant() to better reflect what it really does.
        (WebCore::ChildFrameDisconnector::disconnectCollectedFrameOwners):
          Renamed from disconnect() to better reflect what it really does.
        (WebCore::ChildFrameDisconnector::disconnect):
          New method that does the collection of frame owners on either the root
          or only it's descendants.
        * dom/Node.cpp:
        (WebCore::Node::connectedSubframeCount):
        (WebCore::Node::incrementConnectedSubframeCount):
        (WebCore::Node::decrementConnectedSubframeCount):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::connectedSubframeCount):
        (WebCore::NodeRareData::incrementConnectedSubframeCount):
        (WebCore::NodeRareData::decrementConnectedSubframeCount):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::setContentFrame):
        (WebCore::HTMLFrameOwnerElement::disconnectContentFrame):

2013-01-17  Tim Horton  <timothy_horton@apple.com>

        [WK2] Minimum layout width auto-sizing should use FrameView::enableAutoSizeMode so that it can shrink the viewport
        https://bugs.webkit.org/show_bug.cgi?id=107200
        <rdar://problem/12849029>

        Reviewed by Simon Fraser.

        * WebCore.exp.in: Export FrameView::enableAutoSize(...).

2013-01-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r139402.
        http://trac.webkit.org/changeset/139402
        https://bugs.webkit.org/show_bug.cgi?id=107212

        Perf regression on DOMDivWalk (Requested by falken_ on
        #webkit).

        * dom/Element.cpp:
        (WebCore::Element::removedFrom):
        (WebCore::Element::setIsInTopLayer):

2013-01-17  Adam Barth  <abarth@webkit.org>

        BackgroundHTMLParser should go 18% faster on html-parser-srcdoc benchmark
        https://bugs.webkit.org/show_bug.cgi?id=107201

        Reviewed by Tony Gentilcore.

        Prior to this patch, we would tokenize all the input before delivering
        any tokens to the main thread. Effectively, that prevented the
        background parser from running in parallel with the main thread.

        This patch causes us to send tokens to the main thread periodically.
        The constant in this patch is somewhat arbitrary. We'll need to tune it
        later with more realistic workloads.

        This patch improves the performance of the html-parser-srcdoc benchmark
        by 18%. (This patch is based on Eric's work in
        https://github.com/tonygentilcore/webkit/commit/072331194520c7770b5e34baefbbbba948834971.)

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):

2013-01-17  Matt Falkenhagen  <falken@chromium.org>

        Top layer fails for inline elements
        https://bugs.webkit.org/show_bug.cgi?id=106538

        Reviewed by Hajime Morita.

        This patch makes position 'static' and 'relative' compute to
        'absolute' for elements in the top layer, as mandated by the
        Fullscreen spec.[1] By doing so, we also fix a crash that occurred in
        RenderLayer::rebuildZOrderLists when an inline element wrapped in an
        anonymous block was added to the top layer.

        [1]: http://fullscreen.spec.whatwg.org/#new-stacking-layer

        Tests: fast/dom/HTMLDialogElement/element-removed-from-top-layer-has-original-position.html
               fast/dom/HTMLDialogElement/top-layer-position-relative.html
               fast/dom/HTMLDialogElement/top-layer-position-static.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): Set position 'absolute'
        for an element in the top layer. Typically, absolutely positioned
        elements also automatically get display 'block', but it seems we must do
        that manually here. We require display 'block' to ensure the renderer is not
        considered inline and consequently wrapped in an anonymous block.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rebuildZOrderLists): Check node() so we don't
        crash on, e.g., an anonymous block. We don't expect top layer
        renderers to have anonymous blocks anymore, but we nevertheless
        shouldn't crash if some other renderer is parented by RenderView.

2013-01-17  Simon Fraser  <simon.fraser@apple.com>

        Fix crash accessing RenderView's layer's backing when not composited
        https://bugs.webkit.org/show_bug.cgi?id=107203

        Reviewed by Benjamin Poulain.

        The RenderView isn't always layer-backed in WebKit1, so null-check the backing.

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

2013-01-16  Ryosuke Niwa  <rniwa@webkit.org>

        Remove NodeListsNodeData when it's no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=107074

        Reviewed by Darin Adler.

        Remove NodeListsNodeData when the last node list is removed from it.

        If we detect that we have only one node list left in the data structure,
        we'll simply destroy the entire "this" object to free up the memory space.

        This reduced the memory usage of the micro benchmark by roughly 3%.

        Performance Tests: DOM/TraverseChildNodes.html

        * dom/Node.cpp:
        (WebCore::Node::clearNodeLists): Added.
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::removeChildNodeList):
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName):
        (WebCore::NodeListsNodeData::removeCacheWithName):
        (WebCore::NodeListsNodeData::removeCacheWithQualifiedName):
        (WebCore::NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList): Added.
        Removes "this" NodeListsNodeData if there is only one node list left.

2013-01-17  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::RenderBlock::checkFloatsInCleanLine
        https://bugs.webkit.org/show_bug.cgi?id=90802

        Reviewed by Julien Chaffraix.

        Test: fast/multicol/float-not-removed-crash.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildrenTo):
        1. When fullRemoveInsert is True, make sure to clear the
        floating objects from our list (similar to positioned objects).
        Our children are getting moved to another block and we won't
        get notified when they are going away.
        2. Remove the redundant hasPositionedObjects check since it
        is already done inside removePositionedObjects.

2013-01-17  Simon Fraser  <simon.fraser@apple.com>

        Make it possible for the root background to be painted into its own GraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=107177

        Reviewed by Dave Hyatt.
        
        Make it possible to paint the root background into its own GraphicsLayer, and enable
        this when the root background has background-images that are all background-attachment: fixed.
        
        This is a step towards optimizing scrolling on pages with fixed root backgrounds.        

        Tests: platform/mac/tiled-drawing/fixed-background/fixed-body-background-body-layer.html
               platform/mac/tiled-drawing/fixed-background/fixed-body-background-opacity-html.html
               platform/mac/tiled-drawing/fixed-background/fixed-body-background-transformed-html.html
               platform/mac/tiled-drawing/fixed-background/fixed-body-background-zoomed.html
               platform/mac/tiled-drawing/fixed-background/fixed-body-background.html
               platform/mac/tiled-drawing/fixed-background/fixed-html-background.html
               platform/mac/tiled-drawing/fixed-background/fixed-non-propagated-body-background.html

        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::skipRootBackground): Utility function to check the paintBehavior flag.
        (WebCore::PaintInfo::paintRootBackgroundOnly): Ditto.
        * rendering/PaintPhase.h: New paint behavior flags to indicate that we should skip painting
        the root background, and only paint the root background.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint): When we're only painting the root background, avoid painting column
        rules, and bail early.
        (WebCore::RenderBlock::paintObject): Don't paint children if we're just painting the root background.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange): If this box can paint the root background, tell the compositor
        when the fixedness of those backgrounds changes.
        (WebCore::RenderBox::paintRootBoxFillLayers): If the paintBehavior flag is set to skip painting the root
        background, bail. This will be true for the non-background GraphicsLayers which are painting the root.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents): We can bail early if we're not a root-like renderer and the
        flag is set to paint the root background only. This avoids walking the whole layer tree when just painting
        into the root background GraphicsLayer.
        Migrate layer paint flags into PaintBehavior flags, and use them.
        * rendering/RenderLayer.h: Layer painting flags that replicate the paintBehavior flags.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking): Init the m_backgroundLayerPaintsFixedRootBackground bit.
        (WebCore::RenderLayerBacking::~RenderLayerBacking): Clear the background layer.
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): No need to handle the transparent background
        stuff here. We'll do it later in updateRootLayerConfiguration().
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Actually make a background layer now
        if the compositor says we should.
        Call updateRootLayerConfiguration() to adjust the background color and opaqueness of the background/primary layers.
        (WebCore::RenderLayerBacking::updateInternalHierarchy): Parent the m_backgroundLayer in the containment layer,
        not m_graphicsLayer (this is a bug fix).
        (WebCore::RenderLayerBacking::updateDrawsContent):
        (WebCore::RenderLayerBacking::setBackgroundLayerPaintsFixedRootBackground):
        (WebCore::RenderLayerBacking::paintingPhaseForPrimaryLayer):
        (WebCore::RenderLayerBacking::updateBackgroundColor): This no longer needs to update the tile cache
        background color; updateRootLayerConfiguration() does this now.
        (WebCore::RenderLayerBacking::updateRootLayerConfiguration): Update the opaqueness and background color
        of the background and/or main graphics layers.
        (WebCore::RenderLayerBacking::setContentsNeedDisplay): Invalidate the background layer if we have one.
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect): Invalidate the background layer if we have one.
        This will be optimized to only repaint the background if it was the background that changed.
        (WebCore::RenderLayerBacking::paintIntoLayer): Take a GraphicsLayer, not a RenderLayer argument.
        Adjust the paintFlags if we're being asked to paint the background layer, or if we have one, but are painting the foreground.
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::backingStoreMemoryEstimate):
        (WebCore::RenderLayerBacking::reportMemoryUsage):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::backgroundLayer):
        (WebCore::RenderLayerBacking::backgroundLayerPaintsFixedRootBackground):
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootFixedBackgroundsChanged): If we're told that the fixed-ness of
        the root background changed and we're using a TileCache, we need to re-evaluate compositing (this could be
        optimized to only update the root layer).
        (WebCore::RenderLayerCompositor::needsFixedRootBackgroundLayer): For the root (RenderView's) layer,
        check whether the renderer that will paint the root (taking background propagation into account) has
        background images that are all fixed.
        (WebCore::RenderLayerCompositor::fixedRootBackgroundLayer): Accessor for the GraphicsLayer that paints
        the root background (will be used later).
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::hasEntirelyFixedBackground): Returns true there are background images
        and all are fixed.
        * rendering/RenderObject.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations): This function paints a solid color if we know that the root
        isn't going to fill the viewport; we want to avoid this painting if we're not painting the root background
        in this pass.
        * rendering/style/RenderStyle.cpp:
        (WebCore::allLayersAreFixed):
        (WebCore::RenderStyle::hasEntirelyFixedBackground): New helper function.
        * rendering/style/RenderStyle.h:

2013-01-17  Rafael Weinstein  <rafaelw@chromium.org>

        [Template] Avoid reading beyond the end of the buffer in preload scanner when check for </template>
        https://bugs.webkit.org/show_bug.cgi?id=107143

        Reviewed by Adam Barth.

        This patch corrects to use AtomicString constructor which takes an explicit size. Additionally, the logic
        for exiting early is slightly improved.

        No new tests.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::PreloadTask::PreloadTask):
        (WebCore::HTMLPreloadScanner::processToken):

2013-01-17  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Match initializing members in GraphicsLayerTransform to initializing members in GraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=107090

        Reviewed by Noam Rosenthal.

        GraphicsLayer initializes m_anchorPoint to FloatPoint3D(0.5, 0.5, 0) and
        m_preserves3D to false, while GraphicsLayerTransform initializes m_anchorPoint
        to FloatPoint3D(0, 0, 0) and m_flattening (= !m_preserves3D) to false. It is a
        potential bug. This patch corrects initialization of GraphicsLayerTransform.

        Covered by existing compositing pixel tests.

        * platform/graphics/GraphicsLayerTransform.cpp:
        (WebCore::GraphicsLayerTransform::GraphicsLayerTransform):

2013-01-17  Filip Pizlo  <fpizlo@apple.com>

        ScriptDebugServer::didExecuteProgram should not try to pop stack if there is no stack to pop
        https://bugs.webkit.org/show_bug.cgi?id=107186

        Reviewed by Geoffrey Garen.

        No new tests, because I'm not sure how to test this. I can repro it on a gnarly web site,
        but I don't know how to create a reduced case that triggers it.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::didExecuteProgram):

2013-01-17  Michael Pruett  <michael@68k.org>

        [GTK] IndexedDB: Add LevelDB headers to include path if IndexedDB is enabled
        https://bugs.webkit.org/show_bug.cgi?id=107181

        Reviewed by Martin Robinson.

        No new tests as this is just a build change.

        * GNUmakefile.am:

2013-01-17  Eric Seidel  <eric@webkit.org>

        The threaded html parser hangs when parsing empty documents (and about:blank)
        https://bugs.webkit.org/show_bug.cgi?id=107160

        Reviewed by Tony Gentilcore.

        This is covered by many existing tests including the html5lib suite.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::finish):

2013-01-17  Alexis Hetu  <sugoi@chromium.org>

        imageSmoothingEnabled frequent, unpredictable crashes
        https://bugs.webkit.org/show_bug.cgi?id=107161

        Reviewed by Stephen White.

        Added a NULL pointer check to fix a crash.

        Test: fast/canvas/canvas-imageSmoothingEnabled-zero-size.html

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

2013-01-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140049.
        http://trac.webkit.org/changeset/140049
        https://bugs.webkit.org/show_bug.cgi?id=107187

        Breaks lots of stuff (Requested by schenney on #webkit).

        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::setPreserveAspectRatioString):
        (WebCore):
        (WebCore::SVGViewSpec::viewTarget):
        (WebCore::SVGViewSpec::transform):
        (WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper):
        (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper):
        (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper):
        * svg/SVGViewSpec.h:
        (SVGViewSpec):
        (WebCore::SVGViewSpec::viewBoxAnimated):
        (WebCore::SVGViewSpec::preserveAspectRatioAnimated):
        * svg/SVGViewSpec.idl:

2013-01-17  Eric Seidel  <eric@webkit.org>

        Threaded parser hangs when encountering an unmatched </script> tag
        https://bugs.webkit.org/show_bug.cgi?id=107170

        Reviewed by Adam Barth.

        The bug was that the BackgroundHTMLParser naively yields to the
        main thread every time it encounters a </script>
        (as we may have to run script on the main thread).  However, not every
        </script> results in script execution, so the main thread needs to know
        how to tell the BackgroundHTMLParser to continue in cases where no
        script execution is needed.

        This whole infrastructure will be replaced when we let the BackgroundHTMLParser
        continue speculatively tokenizing after yielding.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::TokenDelivery::TokenDelivery):
        (TokenDelivery):
        (WebCore::TokenDelivery::execute):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveTokensFromBackgroundParser):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):

2013-01-17  Eric Seidel  <eric@webkit.org>

        Stop the background parser when canceling parsing to avoid crashing on many layout tests
        https://bugs.webkit.org/show_bug.cgi?id=107159

        Reviewed by Adam Barth.

        Covered by many existing tests.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::stopParsing):

2013-01-17  Stephen Chenney  <schenney@chromium.org>

        SVGViewSpec fails when corresponding element has been removed
        https://bugs.webkit.org/show_bug.cgi?id=106957

        Reviewed by Dirk Schulze.

        When JS holds an SVGViewSpec object while deleting the object that
        defines the spec (an SVGSVGElement, or one of a few others) the
        pointer to the target is cleared in the SVGViewSpec but the methods
        that serve JS queries do not check and try to access the now null
        target. This atch fixes the prooblem, throwing JS exceptions where
        possible and returning null where necessary.

        Test: svg/dom/SVGViewSpec-invalid-ref-crash.html

        * svg/SVGViewSpec.cpp:
        (WebCore):
        (WebCore::SVGViewSpec::viewTarget): Check for null target and throw an exception.
        (WebCore::SVGViewSpec::transform): Check for null target and return
        null. It is not possible to throw an exception here because it leads
        to an invalid cast in the code generated from IDLs.
        (WebCore::SVGViewSpec::viewBoxAnimated): Check for null target and throw an exception.
        (WebCore::SVGViewSpec::preserveAspectRatioAnimated): Check for null target and throw an exception.
        (WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper): ASSERT non-null target
        (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper): ASSERT non-null target
        (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper): ASSERT non-null target
        * svg/SVGViewSpec.h:
        (SVGViewSpec): Add Exception arguments to getter methods.
        * svg/SVGViewSpec.idl: Mark attributes as throwing exceptions.

2013-01-17  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Remove unnecessary call to IDBDatabaseBackendInterface::metadata()
        https://bugs.webkit.org/show_bug.cgi?id=107142

        Reviewed by Kentaro Hara.

        This call isn't necessary, and probably slipped through an earlier review
        because of the mention of 'm_metadata'.

        No new tests, as this code has no side effects and all tests sill pass.

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::count):

2013-01-17  Ojan Vafai  <ojan@chromium.org>

        Table layout does not need to explicitly call computePreferredLogicalWidths
        https://bugs.webkit.org/show_bug.cgi?id=106931

        Reviewed by Julien Chaffraix.

        Code shouldn't need to explicitly call computePreferredLogicalWidths.
        It should only get called as a by-product of calling minPreferredLogicalWidth
        or maxPreferredLogicalWidth.

        Instead, make it clear that the calling code is just trying to clear
        preferred width dirty bits.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        The computePreferredLogicalWidths call on the table cell is redundant
        with the minPreferredLogicalWidth call on the next line.

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        We only need to clear the dirty bit here. Table cells don't use
        their preferred widths in fixed table layout calculations.

        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::clearPreferredLogicalWidthsDirtyBits):
        * rendering/RenderTableCol.h:

2013-01-17  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Updating -webkit-grid-rows or -webkit-grid-columns doesn't work as expected
        https://bugs.webkit.org/show_bug.cgi?id=107062

        Reviewed by Tony Chang.

        Tests: fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update.html
               fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update.html

        This change makes -webkit-grid-rows and -webkit-grid-columns dynamic change properly
        relayout their children, thus making them work!

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):
        Fixed the logic to force a grid item relayout if the grid area size changes. This is the
        safest approach as margins or paddings can also be a percent of the grid area's size.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        Fixed a dumb mistake.

2013-01-17  Timothy Hatcher  <timothy@apple.com>

        Make logging console messages to STDOUT work in WebKit2 via a new setting.

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

        Reviewed by Joseph Pecoraro.

        * page/Console.cpp:
        (WebCore::Console::addMessage): Check logsPageMessagesToSystemConsoleEnabled(). 
        (WebCore::internalAddMessage): Ditto. Refactored to return early and drop printExceptions argument.
        (WebCore::Console::error): Removed call to shouldPrintExceptions().
        (WebCore::Console::log): Ditto.
        (WebCore::Console::warn): Ditto.
        (WebCore::Console::dir): Ditto.
        (WebCore::Console::dirxml): Ditto.
        (WebCore::Console::clear): Ditto.
        (WebCore::Console::trace): Ditto.
        (WebCore::Console::assertCondition): Ditto.
        * page/Settings.in: Added logsPageMessagesToSystemConsoleEnabled.

2013-01-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140023.
        http://trac.webkit.org/changeset/140023
        https://bugs.webkit.org/show_bug.cgi?id=107176

        Broke some tests (Requested by anttik on #webkit).

        * page/FrameView.cpp:
        (WebCore::FrameView::updateScrollCorner):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createReplacementRunIn):
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):
        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
        (WebCore::RenderBlock::createAnonymousColumnsWithParentRenderer):
        (WebCore::RenderBlock::createAnonymousColumnSpanWithParentRenderer):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
        * rendering/RenderDeprecatedFlexibleBox.h:
        (RenderDeprecatedFlexibleBox):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
        * rendering/RenderDetailsMarker.h:
        (RenderDetailsMarker):
        * rendering/RenderDialog.h:
        (WebCore::RenderDialog::RenderDialog):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::RenderFieldset):
        * rendering/RenderFieldset.h:
        (RenderFieldset):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        * rendering/RenderFlowThread.h:
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreenPlaceholder::RenderFullScreenPlaceholder):
        (RenderFullScreen::RenderFullScreen):
        (RenderFullScreen::wrapRenderer):
        * rendering/RenderFullScreen.h:
        (RenderFullScreen):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        * rendering/RenderGrid.h:
        (RenderGrid):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * rendering/RenderImage.h:
        (RenderImage):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        (WebCore::RenderLayer::createReflection):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::RenderListItem):
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderListItem.h:
        (RenderListItem):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        * rendering/RenderListMarker.h:
        (RenderListMarker):
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
        (WebCore::RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay):
        (WebCore::RenderTextTrackContainerElement::RenderTextTrackContainerElement):
        * rendering/RenderMediaControlElements.h:
        (RenderMediaVolumeSliderContainer):
        (RenderMediaControlTimeDisplay):
        (RenderTextTrackContainerElement):
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        (WebCore::RenderMultiColumnBlock::ensureColumnSets):
        * rendering/RenderMultiColumnBlock.h:
        (RenderMultiColumnBlock):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnFlowThread.h:
        (RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        * rendering/RenderMultiColumnSet.h:
        (RenderMultiColumnSet):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        * rendering/RenderNamedFlowThread.h:
        (RenderNamedFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setIsAnonymous):
        (RenderObject):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        * rendering/RenderRegion.h:
        (RenderRegion):
        * rendering/RenderRegionSet.cpp:
        (WebCore::RenderRegionSet::RenderRegionSet):
        * rendering/RenderRegionSet.h:
        (RenderRegionSet):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        * rendering/RenderReplaced.h:
        (RenderReplaced):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::RenderReplica):
        * rendering/RenderReplica.h:
        (RenderReplica):
        * rendering/RenderRuby.cpp:
        (WebCore::createAnonymousRubyInlineBlock):
        (WebCore::RenderRubyAsInline::RenderRubyAsInline):
        (WebCore):
        (WebCore::RenderRubyAsBlock::RenderRubyAsBlock):
        * rendering/RenderRuby.h:
        (RenderRubyAsInline):
        (RenderRubyAsBlock):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::RenderRubyBase):
        * rendering/RenderRubyBase.h:
        (RenderRubyBase):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::RenderRubyRun):
        (WebCore::RenderRubyRun::createRubyBase):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        * rendering/RenderRubyRun.h:
        (RenderRubyRun):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::RenderRubyText):
        * rendering/RenderRubyText.h:
        (RenderRubyText):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::RenderScrollbarPart):
        * rendering/RenderScrollbarPart.h:
        (RenderScrollbarPart):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::RenderSearchField):
        * rendering/RenderSearchField.h:
        (RenderSearchField):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::createAnonymousWithParentRenderer):
        * rendering/RenderTable.h:
        (RenderTable):
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::RenderTableCaption):
        * rendering/RenderTableCaption.h:
        (RenderTableCaption):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::createAnonymousWithParentRenderer):
        * rendering/RenderTableCell.h:
        (RenderTableCell):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::RenderTableCol):
        * rendering/RenderTableCol.h:
        (RenderTableCol):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::RenderTableRow):
        (WebCore::RenderTableRow::createAnonymousWithParentRenderer):
        * rendering/RenderTableRow.h:
        (RenderTableRow):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::createAnonymousWithParentRenderer):
        * rendering/RenderTableSection.h:
        (RenderTableSection):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        * rendering/RenderTextControl.h:
        (RenderTextControl):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        * rendering/RenderTextControlMultiLine.h:
        (RenderTextControlMultiLine):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::RenderTextTrackCue):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget):
        * rendering/RenderWidget.h:
        (RenderWidget):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::createAnonymousMathMLBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        (RenderMathMLBlock):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::createMathMLOperator):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::createGlyph):
        * rendering/mathml/RenderMathMLOperator.h:
        (RenderMathMLOperator):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::RenderMathMLRow):
        (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):
        * rendering/mathml/RenderMathMLRow.h:
        (RenderMathMLRow):
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createRenderer):
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::RenderSVGBlock):
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::RenderSVGInline):
        * rendering/svg/RenderSVGInline.h:
        (RenderSVGInline):
        * rendering/svg/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::RenderSVGTSpan):
        * rendering/svg/RenderSVGTSpan.h:
        (RenderSVGTSpan):
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::RenderSVGTextPath):
        * rendering/svg/RenderSVGTextPath.h:
        (RenderSVGTextPath):

2013-01-17  Alexey Proskuryakov  <ap@apple.com>

        Fix a logic error in AuthenticationChallengeMac
        https://bugs.webkit.org/show_bug.cgi?id=107164

        Reviewed by Brady Eidson.

        No new tests, as this is not currently observable.

        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::createCF): Added a FIXME about making this more like Mac counterpart.

        * platform/network/cf/AuthenticationChallenge.h:
        (AuthenticationChallenge): Corrected an slightly misleading explanation.

        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::AuthenticationChallenge::setAuthenticationClient): Don't create a dummy
        m_nsChallenge object in place of a nil one.

2013-01-17  Tony Gentilcore  <tonyg@chromium.org>

        Remove unused finishWasCalled() method
        https://bugs.webkit.org/show_bug.cgi?id=107148

        Reviewed by Eric Seidel.

        Based on patch by Eric Seidel.

        No new tests because no new functionality.

        * dom/DocumentParser.h:
        (DocumentParser):
        * dom/RawDataDocumentParser.h:
        (WebCore::RawDataDocumentParser::append):
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        * html/parser/HTMLViewSourceParser.cpp:
        * html/parser/HTMLViewSourceParser.h:
        (HTMLViewSourceParser):
        * xml/parser/NewXMLDocumentParser.cpp:
        (WebCore::NewXMLDocumentParser::NewXMLDocumentParser):
        (WebCore::NewXMLDocumentParser::finish):
        * xml/parser/NewXMLDocumentParser.h:
        (NewXMLDocumentParser):
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParser.h:
        (XMLDocumentParser):

2013-01-17  Ojan Vafai  <ojan@chromium.org>

        MathML padding overrides only need to be on RenderMathMLRoot
        https://bugs.webkit.org/show_bug.cgi?id=107151

        Reviewed by Tony Chang.

        RenderMathMLRoot is the only class that uses these.
        No need for them to be on the generic MathML superclass.

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
        (WebCore::RenderMathMLRoot::paddingTop):
        (WebCore::RenderMathMLRoot::paddingBottom):
        (WebCore::RenderMathMLRoot::paddingLeft):
        (WebCore::RenderMathMLRoot::paddingRight):
        (WebCore::RenderMathMLRoot::paddingBefore):
        (WebCore::RenderMathMLRoot::paddingAfter):
        (WebCore::RenderMathMLRoot::paddingStart):
        (WebCore::RenderMathMLRoot::paddingEnd):
        * rendering/mathml/RenderMathMLRoot.h:

2013-01-17  Poul Sysolyatin  <psytonx@gmail.com>

        32-bit build for Qt5 on Mac OS fails.
        https://bugs.webkit.org/show_bug.cgi?id=107094

        We need to define NS_BUILD_32_LIKE_64 for 32-bit build for Mac OS.
        Fixed 32-bit build detection for support Qt5.

        Reviewed by Benjamin Poulain.
 
        * Target.pri:

2013-01-17  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Prevent crash dereferencing null if script context has stopped
        https://bugs.webkit.org/show_bug.cgi?id=107146

        Reviewed by Tony Chang.

        We have crash reports from Chromium users (but no local repro) for a crash coming
        from IDBRequest::dispatchEvent() that looks like it's calling toV8Context() after
        the script execution context has stopped. The dispatch shouldn't be occurring
        and we ASSERT as such, but something weird is going on during Worker tear down.
        If this patch prevents the crash it would indicate that stop() is called before
        dispatchEvent() which shouldn't be happening, and would let us continue chasing
        the issue.

        No new tests - this shouldn't be happening.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):

2013-01-17  Robert Hogan  <robert@webkit.org>

        Nested fixed position element not staying with parent
        https://bugs.webkit.org/show_bug.cgi?id=65477

        Reviewed by David Hyatt.

        Tests: fast/inline/fixed-pos-moves-with-abspos-inline-parent.html
               fast/inline/fixed-pos-moves-with-abspos-parent-relative-ancestor.html
               fast/inline/fixed-pos-moves-with-abspos-parent.html
               fast/inline/fixed-pos-with-transform-container-moves-with-abspos-parent.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        If an absolute position element inside a relative positioned container moves, and the absolute element has a fixed position
        child, neither the container nor the fixed element learn of the movement since posChildNeedsLayout() is only marked as far as the 
        relative positioned container. So if our positioned objects list can contain fixed position elements perform the
        checks in markFixedPositionObjectForLayoutIfNeeded for each fixed pos object in the container's positioned object list. 
        (WebCore::RenderBlock::markFixedPositionObjectForLayoutIfNeeded):
        For a fixed position element in the positioned objects list that has a static x or y position check for an absolute positioned ancestor
        and if we find one, see if the static x or y position of the fixed pos element has changed. If it has, mark it for layout.
        (WebCore):
        (WebCore::RenderBlock::layoutPositionedObjects):
        A fixed position element with an absolute position ancestor has no way of learning if the latter has changed position. So perform the
        checks in markFixedPositionObjectForLayoutIfNeeded for each fixed pos object in the container's positioned object list. 
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock): Use new helper function canContainFixedPositionObjects().
        * rendering/RenderObject.h:
        (WebCore::RenderObject::canContainFixedPositionObjects):
        (RenderObject):

2013-01-17  Antti Koivisto  <antti@apple.com>

        Make renderer constructors take Element where possible
        https://bugs.webkit.org/show_bug.cgi?id=107138

        Reviewed by David Hyatt.
        
        Tighter typing prevents bugs and enables optimizations.

        The patch changes how anonymous rendererer are constructed. Previously Document* as the node parameter
        indicated that the renderer was anonymous. This forced the code to operate on ContainerNodes (Document
        is not an Element). Now anonymous renderers are constructed by passing null and the document is set by
        separate setDocumentForAnonymous() call. The patch uses RenderFoo::createAnonymous() pattern consistently.

        Most constructors are switched to take Element. RenderBlock still takes ContainerNode due to a few subclasses
        (RenderView and RenderFlowThread) that pass in a Document.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateScrollCorner):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createAnonymous):
        (WebCore):
        (WebCore::RenderBlock::createReplacementRunIn):
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):
        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
        (WebCore::RenderBlock::createAnonymousColumnsWithParentRenderer):
        (WebCore::RenderBlock::createAnonymousColumnSpanWithParentRenderer):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
        (WebCore::RenderDeprecatedFlexibleBox::createAnonymous):
        (WebCore):
        * rendering/RenderDeprecatedFlexibleBox.h:
        (RenderDeprecatedFlexibleBox):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
        * rendering/RenderDetailsMarker.h:
        (RenderDetailsMarker):
        * rendering/RenderDialog.h:
        (WebCore::RenderDialog::RenderDialog):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::RenderFieldset):
        * rendering/RenderFieldset.h:
        (RenderFieldset):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):
        * rendering/RenderFlowThread.cpp:
        (WebCore):
        (WebCore::RenderFlowThread::RenderFlowThread):
        * rendering/RenderFlowThread.h:
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreenPlaceholder::RenderFullScreenPlaceholder):
        (RenderFullScreen::RenderFullScreen):
        (RenderFullScreen::createAnonymous):
        (RenderFullScreen::wrapRenderer):
        * rendering/RenderFullScreen.h:
        (RenderFullScreen):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        * rendering/RenderGrid.h:
        (RenderGrid):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::createAnonymous):
        (WebCore):
        * rendering/RenderImage.h:
        (RenderImage):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::createAnonymous):
        (WebCore):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        * rendering/RenderInline.h:
        (RenderInline):
        (WebCore::RenderInline::node):
        
            Add version with covariant Element return type.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        (WebCore::RenderLayer::createReflection):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::RenderListItem):
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderListItem.h:
        (RenderListItem):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        (WebCore::RenderListMarker::createAnonymous):
        (WebCore):
        * rendering/RenderListMarker.h:
        (RenderListMarker):
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
        (WebCore::RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay):
        (WebCore::RenderTextTrackContainerElement::RenderTextTrackContainerElement):
        * rendering/RenderMediaControlElements.h:
        (RenderMediaVolumeSliderContainer):
        (RenderMediaControlTimeDisplay):
        (RenderTextTrackContainerElement):
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        (WebCore::RenderMultiColumnBlock::ensureColumnSets):
        * rendering/RenderMultiColumnBlock.h:
        (RenderMultiColumnBlock):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnFlowThread.h:
        (RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::createAnonymous):
        (WebCore):
        * rendering/RenderMultiColumnSet.h:
        (RenderMultiColumnSet):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        * rendering/RenderNamedFlowThread.h:
        (RenderNamedFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        
             Passed in null node indicates that the renderer is anonymous. Remove now unnecessary setIsAnonymous() function.

        (WebCore::RenderObject::isAnonymous):
        (WebCore::RenderObject::setDocumentForAnonymous):
        (RenderObject):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        * rendering/RenderRegion.h:
        (RenderRegion):
        * rendering/RenderRegionSet.cpp:
        (WebCore::RenderRegionSet::RenderRegionSet):
        * rendering/RenderRegionSet.h:
        (RenderRegionSet):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        * rendering/RenderReplaced.h:
        (RenderReplaced):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::RenderReplica):
        (WebCore::RenderReplica::createAnonymous):
        (WebCore):
        * rendering/RenderReplica.h:
        (RenderReplica):
        * rendering/RenderRuby.cpp:
        (WebCore::createAnonymousRubyInlineBlock):
        (WebCore::RenderRubyAsInline::RenderRubyAsInline):
        (WebCore):
        (WebCore::RenderRubyAsBlock::RenderRubyAsBlock):
        * rendering/RenderRuby.h:
        (RenderRubyAsInline):
        (RenderRubyAsBlock):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::RenderRubyBase):
        (WebCore::RenderRubyBase::createAnonymous):
        (WebCore):
        * rendering/RenderRubyBase.h:
        (RenderRubyBase):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::RenderRubyRun):
        (WebCore::RenderRubyRun::createRubyBase):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        * rendering/RenderRubyRun.h:
        (RenderRubyRun):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::RenderRubyText):
        * rendering/RenderRubyText.h:
        (RenderRubyText):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::RenderScrollbarPart):
        (WebCore::RenderScrollbarPart::createAnonymous):
        (WebCore):
        * rendering/RenderScrollbarPart.h:
        (RenderScrollbarPart):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::RenderSearchField):
        * rendering/RenderSearchField.h:
        (RenderSearchField):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::createAnonymousWithParentRenderer):
        * rendering/RenderTable.h:
        (RenderTable):
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::RenderTableCaption):
        * rendering/RenderTableCaption.h:
        (RenderTableCaption):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::createAnonymousWithParentRenderer):
        * rendering/RenderTableCell.h:
        (RenderTableCell):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::RenderTableCol):
        * rendering/RenderTableCol.h:
        (RenderTableCol):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::RenderTableRow):
        (WebCore::RenderTableRow::createAnonymousWithParentRenderer):
        * rendering/RenderTableRow.h:
        (RenderTableRow):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::createAnonymousWithParentRenderer):
        * rendering/RenderTableSection.h:
        (RenderTableSection):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        * rendering/RenderTextControl.h:
        (RenderTextControl):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        * rendering/RenderTextControlMultiLine.h:
        (RenderTextControlMultiLine):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::RenderTextTrackCue):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget):
        * rendering/RenderWidget.h:
        (RenderWidget):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        (WebCore::RenderMathMLBlock::createAnonymousMathMLBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        (RenderMathMLBlock):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::createMathMLOperator):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::createGlyph):
        * rendering/mathml/RenderMathMLOperator.h:
        (RenderMathMLOperator):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::RenderMathMLRow):
        (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):
        * rendering/mathml/RenderMathMLRow.h:
        (RenderMathMLRow):
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createRenderer):
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::RenderSVGBlock):
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::RenderSVGInline):
        * rendering/svg/RenderSVGInline.h:
        (RenderSVGInline):
        * rendering/svg/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::RenderSVGTSpan):
        * rendering/svg/RenderSVGTSpan.h:
        (RenderSVGTSpan):
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::RenderSVGTextPath):
        * rendering/svg/RenderSVGTextPath.h:
        (RenderSVGTextPath):

2013-01-17  Leo Yang  <leoyang@rim.com>

        [BlackBerry] Update Authentication Type and Scheme implementation
        https://bugs.webkit.org/show_bug.cgi?id=107045
        PR #281292

        Reviewed by Yong Li.

        Reviewed internally by Joe Mason. A typo is also fixed by Joe Mason.

        The BlackBerry platform layer has defined both authentication type and authentication scheme.
        This patch is adapting the porting layer to the platform layer change.

        No functionalities changed no new tests.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyAuthReceived):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):

2013-01-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Build with LevelDB when IndexedDB is enabled
        https://bugs.webkit.org/show_bug.cgi?id=103220

        Reviewed by Gustavo Noronha Silva.

        No new tests. This is just a build change. IndexedDatabase support
        is already covered by the suite of storage layout tests.

        * GNUmakefile.am: Add the leveldb convenience library.
        * GNUmakefile.list.am: Add the list of sources.

2013-01-17  Tony Gentilcore  <tonyg@chromium.org>

        Wire BackgroundHTMLParser to HTMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=107140

        Reviewed by Adam Barth.

        With this patch, we now pass the majority of html5lib and fast/parser tests with threaded HTML parsing enabled.

        No new tests because covered by existing fast/parser tests.

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::TokenDelivery::execute):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::~HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::processingData):
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield):
        (WebCore::HTMLDocumentParser::canTakeNextToken):
        (WebCore::HTMLDocumentParser::feedTokens):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore):
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        (WebCore::HTMLDocumentParser::stopBackgroundParser):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        (WebCore):
        (HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::hasPreloadScanner):
        (WebCore::HTMLDocumentParser::shouldUseThreading):

2013-01-17  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Move all ExtraDataContainers into anonymous namespaces
        https://bugs.webkit.org/show_bug.cgi?id=107128

        Reviewed by Kentaro Hara.

        Tests not needed.

        * platform/chromium/support/WebMediaStreamDescriptor.cpp:
        * platform/chromium/support/WebMediaStreamSource.cpp:
        * platform/chromium/support/WebRTCSessionDescriptionRequest.cpp:
        * platform/chromium/support/WebRTCVoidRequest.cpp:

2013-01-17  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: InstrumentingAgents should be registered in InspectorInstrumentation only when there is a front-end
        https://bugs.webkit.org/show_bug.cgi?id=107127

        Reviewed by Vsevolod Vlasov.

        InspectorInstrumentation::registerInstrumentingAgents is called when front-end
        is connected to corresponding InspectorController. When the front-end disconnects
        InspectorInstrumentation::unregisterInstrumentingAgents is called.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):

2013-01-17  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Content flows incorrectly in autoheight regions with min/max-height set
        https://bugs.webkit.org/show_bug.cgi?id=102099

        Reviewed by David Hyatt.

        The current layout algorithm for auto-height regions is gives wrong results when the max-height property is set on them. The reason is we
        consider the max-height restriction too late in the layout, when applying a forced break. This is what happens when content is laid out
        in an auto-height region.
        1. The content flows without a limit until a forced break appears. If there's no forced break in the content, one is forced anyway at the end
        of the layout.
        2. The region where the forced break is placed is not always the one where content is laid out because of max-height restrictions.
        3. All the regions with max-height are iterated and their height accumulated until the break offset is reached and the region at that point is ended.
        This gives wrong results because the forced break position in the content was computed assuming there's only one region where the content is laid out.
        The regions with max-height could have generated unforced breaks at their height and the forced break actually should have a different position.

        This patch changes the algorithm in this way:
        1. From the flow thread perspective all the regions start with a height: max-height for auto-height regions (or LayoutSize.max()/2 if not defined)
        or the fixed height value when specified.
        2. When the content is laid out, if there's no forced break, the height of the content is correctly estimated because the layout sees unforced breaks
        at the max-height values.
        3. If a forced break appears, the affected region can be obtained only by looking at the break offset in the region chain. If the region has auto-height,
        its height is updated by the forced break.
        4. At the end of the layout, there's the additional task to clear the height of all the regions that didn't receive content. This can be done optimally
        without adding a new iteration through the regions by attaching to the RegionOverset computation loop.

        Tests:  fast/regions/autoheight-maxheight-mixed-break.html
                fast/regions/autoheight-maxheight-simple-break.html
                fast/regions/autoheight-maxheight-simple-nobreak.html
                fast/regions/autoheight-minmaxheight-mixed-break-hbt.html
                fast/regions/autoheight-minmaxheight-mixed-break-vlr.html
                fast/regions/autoheight-minmaxheight-mixed-break-vrl.html
                fast/regions/autoheight-minmaxheight-mixed-break.html
                fast/regions/autoheight-minmaxheight-simple-break.html
                fast/regions/autoheight-minmaxheight-simple-nobreak.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::computeLogicalHeight):
        (WebCore::RenderFlowThread::regionAtBlockOffset):
        (WebCore::RenderFlowThread::pageLogicalHeightForOffset):
        (WebCore::RenderFlowThread::pageRemainingLogicalHeightForOffset):
        (WebCore::RenderFlowThread::computeOverflowStateForRegions): Attach to the loop in this function to clear the overrideLogicalHeight on empty regions.
        (WebCore):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect): Add an ASSERT that a region always has overrideLogicalHeight or a fixed height.
        (WebCore::RenderFlowThread::initializeRegionsOverrideLogicalContentHeight): A new function that updates the region chain height to use the max-height value
        for auto-height regions.
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::pageLogicalHeight): the decorations size is incorrectly considered in the page height.
        (WebCore):
        (WebCore::RenderRegion::maxPageLogicalHeight): new function that returns the max page size for a region. It shouldn't be called too often
        or the returned value can be cached
        (WebCore::RenderRegion::logicalHeightOfAllFlowThreadContent): the decorations size is incorrectly considered in the logical height of
        the flow thread content.
        * rendering/RenderRegion.h:
        (RenderRegion):


2013-01-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Open resource dialog has poor performance.
        https://bugs.webkit.org/show_bug.cgi?id=107122

        Reviewed by Pavel Feldman.

        Open resource dialog does not make linear number of relayouts on highlight anymore.
        Replaced localeCompare with string compare since it is significantly faster.

        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.FilteredItemSelectionDialog.prototype._highlightItems):
        (WebInspector.OpenResourceDialog.compareFunction):
        (WebInspector.OpenResourceDialog):

2013-01-17  Alexis Menard  <alexis@webkit.org>

        Add ontransitionend attribute on HTML elements.
        https://bugs.webkit.org/show_bug.cgi?id=107134

        Reviewed by Simon Fraser.

        Add ontransitionend attribute on HTML elements to match the prefixed
        attribute onwebkittransitionend. As it uses the same plumbing as a
        regular event listener, it behaves the same which means that if
        ontransitionend only is defined then only the code attached to this
        attribute will be called, if only onwebkittransitionend is defined then
        only the code attached to this attribute will be called and finally if
        both attributes are defined then only the code attached to the
        unprefixed attribute will be called.

        Tests: transitions/transition-end-event-unprefixed-03.html
               transitions/transition-end-event-unprefixed-04.html

        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/DOMWindow.idl: only define the property if the unprefixing is
        turn on.

2013-01-17  Andrei Bucur  <abucur@adobe.com>

        Widows and orphans test4 fails if isolated
        https://bugs.webkit.org/show_bug.cgi?id=106006

        Reviewed by Dean Jackson.

        To determine if the orphans condition is not respected, every time a fragmentation break is encountered adjustLinePositionForPagination() is called for the current line.
        If the index on the line in the block is smaller than the number of orphans specified in the style object, the block is shifted in the next fragmentainer. The index of
        the line is obtained by calling RenderBlock::lineCount. However, this only works in a full layout when lineCount() will coincidentally return the index of the line.
        In subsequent layouts, during the determineStartPosition() phase, lineCount() returns all the lines in the block so the orphans condition is never triggered.
        The patch modifies the lineCount() function to have two optional parameters. The first parameter is the line where lineCount should stop counting lines. The second
        is an output boolean parameter indicating if the line was found or not. This change makes the lineCount() more flexible and allows retreiving the index of a
        specific line (e.g. the index of the current line inside adjustLinePositionForPagination()).

        Tests: fast/multicol/orphans-relayout.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineCount): See the detailed description.
        (WebCore::RenderBlock::adjustLinePositionForPagination): Make use of the modified lineCount() function.
        * rendering/RenderBlock.h:
        (RenderBlock):

2013-01-17  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION (r137487): Crashes in editing/execCommand/indent-paragraphs.html on GTK, EFL
        https://bugs.webkit.org/show_bug.cgi?id=105042

        Reviewed by Gustavo Noronha Silva.

        Explicitly handle the situation where the creation of a SoupURI fails. This
        can happen if the URI is invalid. In that case the constructor returns null.

        No new tests. This patch unskips a failing test.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupRequestAndMessageForHandle): Handle a null Soup URI.

2013-01-17  Nate Chapin  <japhet@chromium.org>

        Enable reuse of cached main resources
        https://bugs.webkit.org/show_bug.cgi?id=105667

        Reviewed by Antti Koivisto.

        Test: http/tests/cache/cached-main-resource.html

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::hasManifest): Returns true if the <html> element has a non-empty manifest attribute.
        * dom/Document.h:
        (Document):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache): Don't send delegate callbacks for cache hit here, since
            MainResourceLoader will take care of it.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::responseReceived): Don't try to cache loads from the application cache.
        (WebCore::MainResourceLoader::didFinishLoading): Don't try to cache loads from the application cache.
        (WebCore::MainResourceLoader::load): Ensure we create a resource load identifier for cache hits. Also,
            ensure we correctly popualate fragment identifiers in the ResourceRequest reported to DocumentLoader.
        (WebCore::MainResourceLoader::identifier):
        * loader/MainResourceLoader.h: Rename m_substituteDataLoadIdentifier to m_identifierForLoadWithoutResourceLoader
            to better describe when it is used.
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient): Synthesize redirect notifications for cache hits if necessary.
        (WebCore::CachedRawResource::willSendRequest): Note the redirects we received.
        (WebCore::CachedRawResource::canReuse): Don't reuse a resource if the redirect chain included a "Cache-control: no-store".
        * loader/cache/CachedRawResource.h:
        (CachedRawResource):
        (RedirectPair):
        (WebCore::CachedRawResource::RedirectPair::RedirectPair):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClientToSet):: Don't return cached data for a main resource synchronously
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::canReuse):
        (CachedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Permit cache reuse for main resources.
        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-01-17  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Remove boilerplate CSS selectors.
        https://bugs.webkit.org/show_bug.cgi?id=107121

        Reviewed by Vsevolod Vlasov.

        There are rules that are used for filtration and styling
        whose selectors should be autogenerated.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._injectStyles):
        * inspector/front-end/networkLogView.css:

2013-01-17  Tim Horton  <timothy_horton@apple.com>

        Fix the Mac build sans ENABLE(CSS_FILTERS)

        Reviewed by Darin Adler.

        Move an export from a USE(ACCELERATED_COMPOSITING) block to a ENABLE(CSS_FILTERS)
        block, to match the code that backs it.

        * WebCore.exp.in:

2013-01-17  Shinya Kawanaka  <shinyak@chromium.org>

        [Mac] svg/custom/text-use-click-crash.xhtml added by r139029 hits assertion in enclosingTextFormControl
        https://bugs.webkit.org/show_bug.cgi?id=106361

        Reviewed by Darin Adler.

        When ASSERT hit in enclosingTextFormControl(Position), position.anchorNode() was /use/shadow-root/text,
        and position.anchorType() was PositionIsBeforeAnchor. In this case, position.containerNode() should be
        ShadowRoot if SHADOW_DOM flag is enabled. However, SHADOW_DOM flag is not enabled in mac port,
        position.containerNode() returns 0. This hits ASSERT.

        We have two options to solve this problem. (1) is to allow Position to have ShadowRoot as a container node,
        but this will affect a lot of code. (2) is to loosen ASSERT condition.

        I've chosen (2) option in this patch.

        Test: svg/custom/text-use-click-crash.xhtml should cover this.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::enclosingTextFormControl):

2013-01-17  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Profiler: split "getProfile" to "getCPUProfile" and "loadHeapSnapshot"
        https://bugs.webkit.org/show_bug.cgi?id=104545

        Reviewed by Yury Semikhatsky.

        This change will allow stronger typing of profiler output.

        * inspector/Inspector.json:
        Split "getProfile" to "getCPUProfile" and "getHeapSnapshot".
        * inspector/InspectorProfilerAgent.cpp: Ditto.
        * inspector/InspectorProfilerAgent.h: Ditto.
        * inspector/front-end/CPUProfileView.js: Adopd changes.
        * inspector/front-end/HeapSnapshotView.js: Ditto.

2013-01-17  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Memory leaks when user walks between requests.
        https://bugs.webkit.org/show_bug.cgi?id=107114

        Reviewed by Vsevolod Vlasov.

        Unregister event listeners when view is detached.

        * inspector/front-end/RequestCookiesView.js: Fixed memory leak.
        * inspector/front-end/RequestHeadersView.js: Ditto.
        * inspector/front-end/RequestTimingView.js: Ditto.

2013-01-17  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Timeline] REGRESSION: Sidebar shrinks when user switches to memory statistics mode.
        https://bugs.webkit.org/show_bug.cgi?id=105857

        Reviewed by Pavel Feldman.

        Fix: do not apply constraints to sidebar width while view is offscreen;
        constraint check will be applied when view goes visible.

        * inspector/front-end/SidebarView.js:
        (WebInspector.SidebarView.prototype.applyConstraints): Check if view is
        offscreen.

2013-01-17  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Spectrum] Color picker in CSS editor does not update textual color value
        https://bugs.webkit.org/show_bug.cgi?id=107110

        Reviewed by Vsevolod Vlasov.

        The Spectrum picker was never told to update the textual color upon user-initiated color changes.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):

2013-01-17  Jae Hyun Park  <jae.park@company100.net>

        Remove unnecessary public method TiledBackingStore::supportsAlpha()
        https://bugs.webkit.org/show_bug.cgi?id=107067

        Reviewed by Kentaro Hara.

        This patch removes unnecessary public method TiledBackingStore::supportsAlpha()
        because supportsAlpha() is never called from other classes.

        No new tests, no change in behavior.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::setSupportsAlpha):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2013-01-17  Peter Rybin  <peter.rybin@gmail.com>

        [V8] Remove a --es5_readonly flag from V8 initialization and address duplicated code
        https://bugs.webkit.org/show_bug.cgi?id=106790

        Reviewed by Kentaro Hara.

        Couple of statements are moved to a newly created method. Old V8 flag setter is removed
        according to FIXME and per V8 change http://code.google.com/p/v8/source/detail?r=12415

        * bindings/v8/V8Initializer.cpp:
        (WebCore::initializeV8Common): newly created method
        (WebCore):
        (WebCore::V8Initializer::initializeMainThreadIfNeeded):
        (WebCore::V8Initializer::initializeWorker):

2013-01-17  John Bauman  <jbauman@chromium.org>

        Fix texImage2D from a WebGL canvas.
        https://bugs.webkit.org/show_bug.cgi?id=106941

        Reviewed by Kenneth Russell.

        Clear the copied image whenever the canvas is modified, even if using
        accelerated compositing.

        Test: fast/canvas/webgl/tex-image-webgl.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::markContextChanged):

2013-01-17  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [AC] Memory leak in GLXConfigSelector::createConfig()
        https://bugs.webkit.org/show_bug.cgi?id=106657

        Reviewed by Laszlo Gombos.

        Free the memory returned by glXGetVisualFromFBConfig() using
        XFree to avoid a memory leak.

        No new tests. No change in behavior.

        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        (WebCore::GLXConfigSelector::createConfig):

2013-01-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r139929.
        http://trac.webkit.org/changeset/139929
        https://bugs.webkit.org/show_bug.cgi?id=107141

        Speculative fix didn't work (Requested by jsbell on #webkit).

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):

2013-01-16  Alexey Proskuryakov  <ap@apple.com>

        Don't use NSApplication run loop in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=107061

        Reviewed by Anders Carlsson.

        Added a way to tell RunLoop whether it should use NSApplication run loop
        (defaulting to not using it, as this should be an exception for child processes).

        * WebCore.exp.in:
        * platform/RunLoop.cpp:
        (WebCore::RunLoop::setUseApplicationRunLoopOnMainRunLoop):
        * platform/RunLoop.h:
        * platform/mac/RunLoopMac.mm:
        (WebCore::RunLoop::setUseApplicationRunLoopOnMainRunLoop):
        (WebCore::RunLoop::run):
        (WebCore::RunLoop::stop):

2013-01-17  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix DefaultTextEditor's broken backspace
        https://bugs.webkit.org/show_bug.cgi?id=107130

        Reviewed by Pavel Feldman.

        Remove css "position: relative;" style from "webkit-line-content" class, which
        somehow brakes editing experience. Remove "height: 100%" from text-editor-overlay-highlight
        class and cast necessary height via inserting "&nbsp;" into overlay span elements.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._appendOverlayHighlight):
        * inspector/front-end/textEditor.css:
        (.text-editor-overlay-highlight):

2013-01-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce FileSystemWorkspaceProvider to allow showing files from file system in workspace.
        https://bugs.webkit.org/show_bug.cgi?id=107021

        Reviewed by Pavel Feldman.

        Added FileSystemWorkspaceProvider that populates workspace with files
        loaded from file systems registered in FileSystemMapping and listens
        for FileSystemAdded / FileSystemRemoved events to update workspace.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/FileMapping.js:
        (WebInspector.FileMapping.prototype.urlForURI):
        (WebInspector.FileMapping.MappingEntry.prototype.urlForURI):
        * inspector/front-end/FileSystemMapping.js:
        (WebInspector.FileSystemMapping.prototype.uriForPath):
        (WebInspector.FileSystemMapping.prototype.addEventListener):
        (WebInspector.FileSystemMapping.prototype.removeEventListener):
        (WebInspector.FileSystemMappingImpl):
        (get WebInspector.FileSystemMappingImpl.prototype.uriForPath):
        * inspector/front-end/FileSystemWorkspaceProvider.js: Added.
        * inspector/front-end/IsolatedFileSystemModel.js:
        (WebInspector.IsolatedFileSystemModel):
        (WebInspector.IsolatedFileSystemModel.prototype._innerAddFileSystem):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/Workspace.js:
        * inspector/front-end/externs.js:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        * inspector/front-end/navigatorView.css:
        (.navigator-other-tree-item .icon):

2013-01-17  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: add createOption method to WebInspector.StatusBarComboBox
        https://bugs.webkit.org/show_bug.cgi?id=107102

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/CPUProfileView.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._addFrame):
        (WebInspector.ConsoleView.prototype._appendContextOption):
        * inspector/front-end/StatusBarButton.js:
        (WebInspector.StatusBarButton.prototype.set state):
        (WebInspector.StatusBarButton.prototype.set visible):
        (WebInspector.StatusBarComboBox.prototype.createOption):

2013-01-16  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][GTK] checkSpellingOfString treats the multiple words as spelled correctly
        https://bugs.webkit.org/show_bug.cgi?id=106662

        Reviewed by Antonio Gomes.

        No new tests, covered by spelling-backspace-between-lines.html.

        TextCheckerEnchant::checkSpellingOfString() method, treats the multiple words
        as spelled correctly if one of them is ok. For example, string such as
        "OK zz OK" is spelled correctly!

        The method at the beginning assumes that the given string is spelled correctly,
        then it iterates over the words to find out the misspelled location and length
        in the whole string. In checkSpellingOfWord, if the word is ok, we mark
        it as spelled correctly and we do return to check the next words. In the fact,
        the location and length of the previously misspelled words are overwritten.

        * platform/text/enchant/TextCheckerEnchant.cpp:
        (WebCore::TextCheckerEnchant::checkSpellingOfWord):
        Update of the word's misspeling location and length was moved out the loop.

        (WebCore::TextCheckerEnchant::checkSpellingOfString):
        Stop checking the next words If the current word is misspelled, to do not overwrite
        its misspelled location and length.

2013-01-17  Chris Fleizach  <cfleizach@apple.com>

        WebSpeech: implement voices list
        https://bugs.webkit.org/show_bug.cgi?id=107014

        Reviewed by Adam Barth.

        Add in the Mac side code to return a list of voices. 
        Adds a layout test, which is skipped for now, until the feature is enabled.

        Test: platform/mac/fast/speechsynthesis/speech-synthesis-voices.html

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        * Modules/speech/SpeechSynthesis.h:
        (SpeechSynthesis):
        * Modules/speech/mac/SpeechSynthesisMac.mm:
        (WebCore::SpeechSynthesis::initializeVoiceList):

2013-01-16  Rik Cabanier  <cabanier@adobe.com>

        Update GraphicsContext to support winding rule in clip operator for Core Graphics
        https://bugs.webkit.org/show_bug.cgi?id=106871

        Reviewed by Dirk Schulze.

        Changed the interface to GraphicsContext so it's possible to pass the winding
        rule to canvasClip() and clip().

        No new tests, no change in functionality.

        * WebCore.exp.in: Change signature of canvasClip function.
        * platform/graphics/GraphicsContext.h: Change canvasClip and clip signature with default winding rule.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Update interface with new signature so it still compiles.
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/cg/GraphicsContextCG.cpp: Update interface with new signature and implement winding rules.
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp: Update interface with new signature so it still compiles.
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/qt/GraphicsContextQt.cpp: Update interface with new signature so it still compiles.
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/skia/GraphicsContextSkia.cpp: Update interface with new signature so it still compiles.
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/wince/GraphicsContextWinCE.cpp: Update interface with new signature so it still compiles.
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/wx/GraphicsContextWx.cpp: Update interface with new signature so it still compiles.
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):

2013-01-16  Hajime Morrita  <morrita@google.com>

        NoEventDispatchAssertion in ContainerNode::removeChildren is too strict
        https://bugs.webkit.org/show_bug.cgi?id=106985

        Reviewed by Ryosuke Niwa.

        This change narrowed the lifetime of NoEventDispatchAssertion in removeChildren().
        It is as safe as other mutation method even after this change: childrenChanged() and
        ChildNodeRemovalNotifier are used outside the assertion scope.

        Test: svg/custom/use-mutation-crash.xhtml

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

2013-01-16  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] HTMLTextFormControlElement should use shadowHost instead of shadowAncestorNode
        https://bugs.webkit.org/show_bug.cgi?id=106533

        Reviewed by Kent Tamura.

        Since Node::shadowAncestorNode() is deprecated, we would like to use Node::shadowHost().

        No new tests, simple refactoring.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionRange): Here, startPosition and endPosition is in ShadowDOM,
        converting shadowAncestorNode to shadowHost is safe.
        (WebCore::enclosingTextFormControl): Actually ASSERT in this method is wrong since shadowAncestorNode() does not
        return NULL. This should be shadowHost().

2013-01-16  Tony Gentilcore  <tonyg@chromium.org>

        Disable an ASSERT for the threaded parser
        https://bugs.webkit.org/show_bug.cgi?id=107087

        Reviewed by Adam Barth.

        Since tokenizing happens on the background thread, when the tree builder runs there isn't a valid tokenizer for which to check the state.
        The background parser has minimal code to update its tokenizer's state properly.

        No new tests because covered by existing fast/parser tests.

        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/parser/HTMLParserOptions.h:
        (HTMLParserOptions):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2013-01-16  MORITA Hajime  <morrita@google.com>

        Attr.ownerDocument should change if its parent's owner did
        https://bugs.webkit.org/show_bug.cgi?id=97644

        Reviewed by Darin Adler.

        moveTreeToNewScope() didn't traverse its Attr instances. But it should.

        Test: fast/dom/Attr/parent-adopt-node.html

        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::getExistingAttrs):
        (WebCore):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):

2013-01-16  Adam Barth  <abarth@webkit.org>

        Address tonyg's feedback on BackgroundHTMLParser
        https://bugs.webkit.org/show_bug.cgi?id=107086

        Reviewed by Tony Gentilcore.

        As requested in https://bugs.webkit.org/show_bug.cgi?id=107083#c5

        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (TokenDelivery):
        (WebCore::TokenDelivery::TokenDelivery):
        (WebCore::TokenDelivery::execute):

2013-01-16  Tony Gentilcore  <tonyg@chromium.org>

        Introduce a method to build the tree from a CompactHTMLToken
        https://bugs.webkit.org/show_bug.cgi?id=107082

        Reviewed by Adam Barth.

        No new tests because covered by existing fast/parser tests.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore):
        (WebCore::HTMLDocumentParser::constructTreeFromCompactHTMLToken):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLToken.h:
        (AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::create):
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
        (AtomicMarkupTokenBase):

2013-01-16  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix following r139918.
        Add speech synthesis to include path and WebCore vcproj file.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:

2013-01-16  Chris Rogers  <crogers@google.com>

        Switch AudioDestinationChromium over to new createAudioDevice() method
        https://bugs.webkit.org/show_bug.cgi?id=106816

        Reviewed by James Robinson.

        * platform/audio/chromium/AudioDestinationChromium.cpp:
        (WebCore::AudioDestinationChromium::AudioDestinationChromium):

2013-01-16  Adam Barth  <abarth@webkit.org>

        Introduce BackgroundHTMLParser for parsing HTML on a background thread
        https://bugs.webkit.org/show_bug.cgi?id=107083

        Reviewed by Eric Seidel.

        This patch contains a basic version of an HTML parser that runs on a
        background thread. The parser passes the majority of the tests in
        fast/parser and a large number of the subtests in html5lib.

        Notably absent from this early version of the parser is speculation
        (which will eventually replace preload scanning) and atomization (which
        we suspect will be important for performance). Our plan is to introduce
        those elements in subsequent patches.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/BackgroundHTMLParser.cpp: Added.
        (WebCore):
        (WebCore::checkThatTokensAreSafeToSendToAnotherThread):
        (WebCore::parserMap):
        (WebCore::ParserMap::backgroundParsers):
        (WebCore::ParserMap::mainThreadParsers):
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::append):
        (WebCore::BackgroundHTMLParser::continueParsing):
        (WebCore::BackgroundHTMLParser::finish):
        (WebCore::BackgroundHTMLParser::pumpTokenizer):
        (TokenDelivery):
        (WebCore::TokenDelivery::execute):
        (WebCore::BackgroundHTMLParser::sendTokensToMainThread):
        (WebCore::BackgroundHTMLParser::createPartial):
        (WebCore::BackgroundHTMLParser::stopPartial):
        (WebCore::BackgroundHTMLParser::appendPartial):
        (WebCore::BackgroundHTMLParser::continuePartial):
        (WebCore::BackgroundHTMLParser::finishPartial):
        * html/parser/BackgroundHTMLParser.h: Added.
        (WebCore):
        (BackgroundHTMLParser):
        (WebCore::BackgroundHTMLParser::create):
        (ParserMap):
        (WebCore::ParserMap::identifierForParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore):
        (WebCore::HTMLDocumentParser::didReceiveTokensFromBackgroundParser):
        * html/parser/HTMLDocumentParser.h:
        (WebCore):
        (HTMLDocumentParser):

2013-01-16  Donghyun Kim  <dhkim715@hotmail.com>

        [soup] Fix build warning in ResourceHandleSoup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=107063

        Reviewed by Martin Robinson.

        The restartedCallback has unused parameter 'message', 
        remove the parameter name to fix 'unused parameter' build warning.

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

2013-01-16  Tony Gentilcore  <tonyg@chromium.org>

        Introduce a CompactHTMLToken for the threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=107069

        Reviewed by Adam Barth.

        This class is used for transporting tokens from the parser thread to the main thread where they are fed to the tree builder.

        No new tests because covered by existing fast/parser tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/CompactHTMLToken.cpp: Added.
        (WebCore):
        (WebCore::CompactHTMLToken::CompactHTMLToken):
        (WebCore::isStringSafeToSendToAnotherThread):
        (WebCore::CompactHTMLToken::isSafeToSendToAnotherThread):
        * html/parser/CompactHTMLToken.h: Added.
        (WebCore):
        (CompactAttribute):
        (WebCore::CompactAttribute::CompactAttribute):
        (WebCore::CompactAttribute::name):
        (WebCore::CompactAttribute::value):
        (CompactHTMLToken):
        (WebCore::CompactHTMLToken::type):
        (WebCore::CompactHTMLToken::data):
        (WebCore::CompactHTMLToken::selfClosing):
        (WebCore::CompactHTMLToken::attributes):
        (WebCore::CompactHTMLToken::publicIdentifier):
        (WebCore::CompactHTMLToken::systemIdentifier):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::MarkupTokenBase::data):
        (MarkupTokenBase):

2013-01-16  Adam Barth  <abarth@webkit.org>

        Introduce HTMLParserThread to be able to parse on a background thread
        https://bugs.webkit.org/show_bug.cgi?id=107071

        Reviewed by Tony Gentilcore.

        This patch introduces a simple thread class that we can use to parse
        HTML. This patch is unlikely to be the final design because we'll
        likely want to use libdispatch or some other platform-specific thread
        pool. However, this implementation is enough to let us work on the
        parser-specific aspects of this feature.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLParserThread.cpp: Added.
        (WebCore):
        (WebCore::HTMLParserThread::HTMLParserThread):
        (WebCore::HTMLParserThread::~HTMLParserThread):
        (WebCore::HTMLParserThread::start):
        (WebCore::HTMLParserThread::stop):
        (WebCore::HTMLParserThread::shared):
        (WebCore::HTMLParserThread::postTask):
        (WebCore::HTMLParserThread::threadStart):
        (WebCore::HTMLParserThread::runLoop):
        * html/parser/HTMLParserThread.h: Added.
        (WebCore):
        (HTMLParserThread):
        (WebCore::HTMLParserThread::create):
        (WebCore::HTMLParserThread::threadId):

2013-01-16  MORITA Hajime  <morrita@google.com>

        WebCore::ScriptRunner::timerFired() is reported to crash.
        https://bugs.webkit.org/show_bug.cgi?id=92211

        Reviewed by Darin Adler.

        This is a speculative fix to address some crash reports.
        Here is my rough guess.

        The crash report says there is a PendingScript instance whose m_element is null.
        - It happens only if the instance is created through the default constructor,
        - that could happen if m_pendingAsyncScripts doesn't contains matched PendingScript in ScriptRunner::notifyScriptReady(),
        - that could happen when notifyScriptReady() is called more than once.
        - It turns out that the call site, ScriptElement::notifyFinished(), could be called multiple times since
          it doesn't remove itself from the CachedResource, which is done separately in ScriptElement::execute().
        - So if notifyFinished() is called before execute(), it could happen

        This change added a guard to prevent notifyFinished() from being invoked multiple times.
        We should watch if these crash reports disappear.

        No new tests. I couldn't create any repro for this.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::notifyFinished):

2013-01-16  Pablo Flouret  <pablof@motorola.com>

        Fix mac build system warnings introduced by r139866
        https://bugs.webkit.org/show_bug.cgi?id=107056

        Reviewed by Benjamin Poulain.

        warning: no rule to process file '$(PROJECT_DIR)/css/CSSSupportsRule.h' of type sourcecode.c.h for architecture x86_64
        warning: no rule to process file '$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSCSSSupportsRule.h' of type sourcecode.c.h for architecture x86_64

        {JS,}CSSSupportsRule.h somehow ended up marked as sources in the XCode
        project. 

        No new tests. Build warning fix.

        * WebCore.xcodeproj/project.pbxproj:

2013-01-16  Elliott Sprehn  <esprehn@chromium.org>

        Merge RenderObjectChildList::appendChildNode and insertChildNode
        https://bugs.webkit.org/show_bug.cgi?id=106392

        Reviewed by Eric Seidel.

        insertChildNode and appendChildNode are nearly identical methods and
        we can combine them into insertChildNode and handle cases where the
        renderer to insert before is null as if it was an append.

        No new tests, just refactoring.

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::insertChildNode):
        * rendering/RenderObjectChildList.h:
        (RenderObjectChildList):
        (WebCore::RenderObjectChildList::appendChildNode):
            Now inline and delegates to insertChildNode.

2013-01-16  Elliott Sprehn  <esprehn@chromium.org>

        Cursor stops blinking after clicking on scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=106470

        Reviewed by Ojan Vafai.

        Restore the caret blinking when doing a mouseup on a
        scrollbar so scrolling a textarea doesn't cause the
        caret to freeze.

        No new tests, there doesn't seem to be any way to test
        cursor blinking.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):

2013-01-16  Adam Barth  <abarth@webkit.org>

        Teach HTMLParserOptions about Settings::threadedHTMLParser
        https://bugs.webkit.org/show_bug.cgi?id=107068

        Reviewed by Tony Gentilcore.

        We use this option to enable the threaded HTML parser at runtime.

        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/parser/HTMLParserOptions.h:
        (HTMLParserOptions):

2013-01-16  Brady Eidson  <beidson@apple.com>

        Synchronous XMLHTTPRequests need to go to the NetworkProcess.
        <rdar://problem/12951765> and https://bugs.webkit.org/show_bug.cgi?id=106826

        Reviewed by Sam Weinig and Alexey Proskuryakov.

        No new tests (No changes to any config that is currently tested)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously): Consult the LoaderStrategy when strategies are
          being used.

        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::loadResourceSynchronously): Defaults to using ResourceHandle directly.
        * loader/LoaderStrategy.h:

        Break out the StoredCredentials enum to a new header:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleTypes.h:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2013-01-16  Robert Iannucci  <iannucci@chromium.org>

        Explicitly set msvs_cygwin_shell to true for bison rule
        https://bugs.webkit.org/show_bug.cgi?id=107058

        Reviewed by Tony Chang.

        Currently, msvs_cygwin_shell is set to 1 by default. This patch
        explicitly sets it on the actions which will break if msvs_cygwin_shell
        were set to 0. This is in preparation for changing the default value of
        msvs_cygwin_shell, which in turn is in preparation of the removal of
        cygwin as a buld-system requirement.

        Since this change will have no semantic effect, no new tests are
        required.

        A previous instance of this bug is here:
        https://bugs.webkit.org/show_bug.cgi?id=106706

        * WebCore.gyp/WebCore.gyp:

2013-01-16  Benjamin Poulain  <bpoulain@apple.com>

        Fix the warning for the exported Objective-C binding of DOMCSSSupportsRule

        Rubber-stamped by Simon Fraser.

        * WebCore.exp.in: r139866 exported the Objective-C class DOMCSSSupportsRule
        without #ifdefing the symbol between its feature flag.

2013-01-16  Victor Carbune  <vcarbune@chromium.org>

        Cues not rendered when they should be
        https://bugs.webkit.org/show_bug.cgi?id=106943

        Reviewed by Eric Carlson.

        Forced rendering update, even if the active set of cues didn't change.

        Test: media/track/track-cue-rendering-mode-changed.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): If exiting early,
        update the cues rendered by the text track container.
        (WebCore::HTMLMediaElement::textTrackModeChanged): Trigger update of the
        re-checking the active cues and render the ones not yet on screen.

2013-01-16  Benjamin Poulain  <bpoulain@apple.com>

        Force a rebuild of RenderObject

        Unreviewed. One bot is using old object file. Change RenderObject.cpp to force it
        to build the file again.

        * rendering/RenderObject.cpp:
        (WebCore::addLayers):
        (WebCore::RenderObject::findNextLayer):

2013-01-16  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Possible null ScriptExecutionContext passed to callbacks during frame destruction
        https://bugs.webkit.org/show_bug.cgi?id=107050

        Reviewed by Tony Chang.

        Temporary code to defend against null contexts. Will either refute a hypothesis, or we'll
        need to make a more systemic fix elsewhere. Either way it will be removed in a few days.
        We're unable to repro, but watching crash reports from users. One possible source is
        that during page tear-down WorkerScriptController::controllerForContext() returns null
        (there's a comment about that case) leading to a null context.

        No new tests - this shouldn't be happening.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):

2013-01-16  Kenneth Russell  <kbr@google.com>

        Simplify validation and data copying in WebGLBuffer
        https://bugs.webkit.org/show_bug.cgi?id=106975

        Reviewed by Dean Jackson.

        Re-landing after testing locally; was not able to reproduce the
        crash seen once with the earlier patch.

        No new tests; covered by existing tests. Ran WebGL layout tests and conformance tests.

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferDataImpl):
            Take (void*, int) pair instead of ArrayBuffer and offset. Simplifies code significantly.
        (WebCore::WebGLBuffer::associateBufferData):
            Pass down base pointers and sizes rather than ArrayBuffer and optional offset.
        (WebCore::WebGLBuffer::associateBufferSubDataImpl):
            Take (void*, int) pair instead of ArrayBuffer and offset. Simplifies code significantly.
        (WebCore::WebGLBuffer::associateBufferSubData):
            Pass down base pointers and sizes rather than ArrayBuffer and optional offset.
        * html/canvas/WebGLBuffer.h:
        (WebGLBuffer):
            Change signatures of associateBufferDataImpl and associateBufferSubDataImpl.

2013-01-16  Timothy Hatcher  <timothy@apple.com>

        Fix a crash when printing console messages to STDOUT.

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

        Reviewed by Joseph Pecoraro.

        * page/Console.cpp:
        (WebCore::internalAddMessage): Don't release the RefPtr early. Also log the line number
        and convert non-string arguments to strings when printing them.

2013-01-16  Kenneth Russell  <kbr@google.com>

        Unreviewed, rolling out r139914.
        http://trac.webkit.org/changeset/139914
        https://bugs.webkit.org/show_bug.cgi?id=106975

        Caused crashes in compositing/visibility/visibility-simple-
        webgl-layer.html

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferDataImpl):
        (WebCore::WebGLBuffer::associateBufferData):
        (WebCore::WebGLBuffer::associateBufferSubDataImpl):
        (WebCore::WebGLBuffer::associateBufferSubData):
        * html/canvas/WebGLBuffer.h:
        (WebGLBuffer):

2013-01-16  Alexis Menard  <alexis@webkit.org>

        Monitor usage of unprefixed and prefixed DOM events for CSS Transitions.
        https://bugs.webkit.org/show_bug.cgi?id=107004

        Reviewed by Adam Barth.

        Monitor the usage of transitionEnd events as well as
        webkitTransitionEnd events so we can know in the future how much the
        prefixed version is used to remove it becomes irrelevant.

        No new tests : no behavior changes, we're just adding monitoring.

        * dom/EventTarget.cpp:
        (WebCore):
        (WebCore::EventTarget::fireEventListeners):
        * page/FeatureObserver.h:

2013-01-16  Antti Koivisto  <antti@apple.com>

        Tighten RenderLayerModelObject subclass constructors to operate on ContainerNodes.
        https://bugs.webkit.org/show_bug.cgi?id=107041

        Reviewed by Simon Fraser.

        In rendering code only Nodes that are not ContainerNodes are used by RenderText. Tighter typing is better in general. 
        It also enables better code generation (especially with Document* moving from Node to ContainerNode).

        This patch tightens constuctors for better static type checking. It also overrides node() with a covariant ContainerNode* return type
        version in RenderLayerModelObject. RenderObject::createObject() is tightened to take Element*.
        
        This patch does not change Node* usage in non-construction code (expect for the node() override).
        
        With some further work it should be possible to tighten most of the rendering tree to operate on Elements for even less branchiness.

        * dom/Document.cpp:
        (WebCore::Document::attach):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderThumb::RenderSliderThumb):
        (WebCore::RenderSliderContainer::RenderSliderContainer):
        * html/shadow/SliderThumbElement.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::RenderBoxModelObject):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::RenderButton):
        * rendering/RenderButton.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderDialog.h:
        (WebCore::RenderDialog::RenderDialog):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::RenderFieldset):
        * rendering/RenderFieldset.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        * rendering/RenderFlowThread.h:
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::RenderFullScreen):
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        * rendering/RenderGrid.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        * rendering/RenderInline.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::RenderLayerModelObject):
        * rendering/RenderLayerModelObject.h:
        (WebCore::RenderLayerModelObject::node):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::RenderListItem):
        * rendering/RenderListItem.h:
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
        (WebCore::RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay):
        (WebCore::RenderTextTrackContainerElement::RenderTextTrackContainerElement):
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        * rendering/RenderMultiColumnSet.h:
        (RenderMultiColumnSet):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        * rendering/RenderNamedFlowThread.h:
        (RenderNamedFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderObject.h:
        (RenderObject):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        * rendering/RenderRegion.h:
        (RenderRegion):
        * rendering/RenderRegionSet.cpp:
        (WebCore::RenderRegionSet::RenderRegionSet):
        * rendering/RenderRegionSet.h:
        (RenderRegionSet):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        * rendering/RenderReplaced.h:
        (RenderReplaced):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::RenderReplica):
        (WebCore::RenderReplica::~RenderReplica):
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::RenderRubyAsInline):
        (WebCore::RenderRubyAsBlock::RenderRubyAsBlock):
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::RenderRubyBase):
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::RenderRubyRun):
        * rendering/RenderRubyRun.h:
        (RenderRubyRun):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::RenderRubyText):
        * rendering/RenderRubyText.h:
        (RenderRubyText):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::RenderScrollbarPart):
        * rendering/RenderScrollbarPart.h:
        (RenderScrollbarPart):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::RenderSearchField):
        * rendering/RenderSearchField.h:
        (RenderSearchField):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        * rendering/RenderTable.h:
        (RenderTable):
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::RenderTableCaption):
        * rendering/RenderTableCaption.h:
        (RenderTableCaption):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        * rendering/RenderTableCell.h:
        (RenderTableCell):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::RenderTableCol):
        * rendering/RenderTableCol.h:
        (RenderTableCol):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::RenderTableRow):
        * rendering/RenderTableRow.h:
        (RenderTableRow):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        * rendering/RenderTableSection.h:
        (RenderTableSection):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        * rendering/RenderTextControlMultiLine.h:
        (RenderTextControlMultiLine):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::RenderTextTrackCue):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget):
        * rendering/RenderWidget.h:
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLTable::RenderMathMLTable):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::RenderMathMLRow):
        * rendering/mathml/RenderMathMLRow.h:
        (RenderMathMLRow):
        (WebCore::RenderSVGInline::RenderSVGInline):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGTSpan.cpp:
        (WebCore::RenderSVGTSpan::RenderSVGTSpan):
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::RenderSVGTextPath):
        * rendering/svg/RenderSVGTextPath.h:

2013-01-16  Chris Fleizach  <cfleizach@apple.com>

        Stub out WebSpeech synthesis
        https://bugs.webkit.org/show_bug.cgi?id=106847

        Reviewed by Adam Barth.

        This adds in the necessary IDLs and stubs out the code for the WebSpeech
        synthesis specification.
        It does not turn on the feature in any platform, but it can be enabled
        and built for Mac.

        The feature flag is SPEECH_SYNTHESIS.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * Modules/speech/DOMWindowSpeechSynthesis.cpp: Added.
        (WebCore::DOMWindowSpeechSynthesis::DOMWindowSpeechSynthesis):
        (WebCore::DOMWindowSpeechSynthesis::~DOMWindowSpeechSynthesis):
        (WebCore::DOMWindowSpeechSynthesis::from):
        (WebCore::DOMWindowSpeechSynthesis::speechSynthesis):
        * Modules/speech/DOMWindowSpeechSynthesis.h: Added.
        * Modules/speech/DOMWindowSpeechSynthesis.idl: Added.
        * Modules/speech/SpeechSynthesis.cpp: Added.
        (WebCore::SpeechSynthesis::create):
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        * Modules/speech/SpeechSynthesis.h: Added.
        (SpeechSynthesis):
        (WebCore::SpeechSynthesis::getVoices):
        * Modules/speech/SpeechSynthesis.idl: Added.
        * Modules/speech/SpeechSynthesisEvent.cpp: Added.
        (WebCore::SpeechSynthesisEvent::create):
        (WebCore::SpeechSynthesisEvent::SpeechSynthesisEvent):
        * Modules/speech/SpeechSynthesisEvent.h: Added.
        (SpeechSynthesisEvent):
        (WebCore::SpeechSynthesisEvent::charIndex):
        (WebCore::SpeechSynthesisEvent::elapsedTime):
        (WebCore::SpeechSynthesisEvent::name):
        * Modules/speech/SpeechSynthesisEvent.idl: Added.
        * Modules/speech/SpeechSynthesisUtterance.cpp: Added.
        (WebCore::SpeechSynthesisUtterance::create):
        (WebCore::SpeechSynthesisUtterance::SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::scriptExecutionContext):
        (WebCore::SpeechSynthesisUtterance::interfaceName):
        * Modules/speech/SpeechSynthesisUtterance.h: Added.
        (SpeechSynthesisUtterance):
        (WebCore::SpeechSynthesisUtterance::text):
        (WebCore::SpeechSynthesisUtterance::setText):
        (WebCore::SpeechSynthesisUtterance::lang):
        (WebCore::SpeechSynthesisUtterance::setLang):
        (WebCore::SpeechSynthesisUtterance::voiceURI):
        (WebCore::SpeechSynthesisUtterance::setVoiceURI):
        (WebCore::SpeechSynthesisUtterance::volume):
        (WebCore::SpeechSynthesisUtterance::setVolume):
        (WebCore::SpeechSynthesisUtterance::rate):
        (WebCore::SpeechSynthesisUtterance::setRate):
        (WebCore::SpeechSynthesisUtterance::pitch):
        (WebCore::SpeechSynthesisUtterance::setPitch):
        * Modules/speech/SpeechSynthesisUtterance.idl: Added.
        * Modules/speech/SpeechSynthesisVoice.cpp: Added.
        (WebCore::SpeechSynthesisVoice::create):
        (WebCore::SpeechSynthesisVoice::SpeechSynthesisVoice):
        * Modules/speech/SpeechSynthesisVoice.h: Added.
        (SpeechSynthesisVoice):
        (WebCore::SpeechSynthesisVoice::voiceURI):
        (WebCore::SpeechSynthesisVoice::name):
        (WebCore::SpeechSynthesisVoice::lang):
        (WebCore::SpeechSynthesisVoice::localService):
        (WebCore::SpeechSynthesisVoice::isDefault):
        * Modules/speech/SpeechSynthesisVoice.idl: Added.
        * Modules/speech/mac: Added.
        * Modules/speech/mac/SpeechSynthesisMac.mm: Added.
        (WebCore::SpeechSynthesis::pending):
        (WebCore::SpeechSynthesis::speaking):
        (WebCore::SpeechSynthesis::paused):
        (WebCore::SpeechSynthesis::speak):
        (WebCore::SpeechSynthesis::cancel):
        (WebCore::SpeechSynthesis::pause):
        (WebCore::SpeechSynthesis::resume):
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:

2013-01-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r139853.
        http://trac.webkit.org/changeset/139853
        https://bugs.webkit.org/show_bug.cgi?id=107049

        Broke the ChromeOS ppapi_unittests (Requested by leviw on
        #webkit).

        * inspector/Inspector.json:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.PageDispatcher.prototype.frameDetached):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::clear):
        (WebCore::NavigationScheduler::timerFired):
        (WebCore::NavigationScheduler::startTimer):
        (WebCore::NavigationScheduler::cancel):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):

2013-01-16  Kenneth Russell  <kbr@google.com>

        Simplify validation and data copying in WebGLBuffer
        https://bugs.webkit.org/show_bug.cgi?id=106975

        Reviewed by Dean Jackson.

        No new tests; covered by existing tests. Ran WebGL layout tests and conformance tests.

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferDataImpl):
            Take (void*, int) pair instead of ArrayBuffer and offset. Simplifies code significantly.
        (WebCore::WebGLBuffer::associateBufferData):
            Pass down base pointers and sizes rather than ArrayBuffer and optional offset.
        (WebCore::WebGLBuffer::associateBufferSubDataImpl):
            Take (void*, int) pair instead of ArrayBuffer and offset. Simplifies code significantly.
        (WebCore::WebGLBuffer::associateBufferSubData):
            Pass down base pointers and sizes rather than ArrayBuffer and optional offset.
        * html/canvas/WebGLBuffer.h:
        (WebGLBuffer):
            Change signatures of associateBufferDataImpl and associateBufferSubDataImpl.

2013-01-16  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        inconsistency in drawImage with target rect negative dimensions.
        https://bugs.webkit.org/show_bug.cgi?id=100026

        Reviewed by Dean Jackson.

        Remove -1, -1 special case in drawImage and drawImageBuffer. Replace
        all -1 -1 arguments calls to with the correct rectangle dimensions.

        Remove FloatRect(0, 0, -1, -1) default argument for srcRect, and
        instead, add new overloaded functions to create a FloatRect from image
        size.

        Replace -1 -1 arguments calls in FEComposite::platformApplySoftware
        with correct rectangle dimensions.

        Replace ImageGStreamer rect method (which may return -1 -1 rectangle)
        with cropRect method, and make caller check for rectangle emptiness.

        * fast/canvas/drawImage-with-negative-source-destination-expected.txt:
        * fast/canvas/drawImage-with-negative-source-destination.js:

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore):
        (WebCore::GraphicsContext::drawImageBuffer):
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/gstreamer/ImageGStreamer.h:
        (WebCore::ImageGStreamer::rect):

2013-01-16  Simon Fraser  <simon.fraser@apple.com>

        Allow PaintInfo to carry all PaintBehavior flags
        https://bugs.webkit.org/show_bug.cgi?id=106980

        Reviewed by Beth Dakin.

        In r139908 I missed one instance of the PaintInfo constructor that should take PaintBehaviorNormal
        instead of "false".

        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):

2013-01-16  Simon Fraser  <simon.fraser@apple.com>

        Allow PaintInfo to carry all PaintBehavior flags
        https://bugs.webkit.org/show_bug.cgi?id=106980

        Reviewed by Sam Weinig.
        
        PaintInfo has a single boolean for forceBlackText, but I'll be adding additional
        paint behaviors that I'd like to access from PaintInfo, so it makes sense for
        PaintInfo to just include the set of PaintBehavior flags.
        
        Also add default values in the constructor arguments for rarely used parameters.

        No behavior change, no tests.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint): Use the forceBlackText() function.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Call forceBlackText().
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo): Pass PaintBehavior rather than a forceBlackText boolean.
        (WebCore::PaintInfo::forceBlackText): Return true if the behavior flags contain PaintBehaviorForceBlackText.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Pass PaintBehaviorForceBlackText instead of 'true'
        when painting for background-clip: text.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents): Pass PaintBehaviorNormal where we used to pass 'false',
        and omit default 0 parameters.
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer): PaintBehaviorNormal and remove default params.

2013-01-16  Tim Horton  <timothy_horton@apple.com>

        Add a missing #if to fix the Mac build sans ENABLE_CSS_FILTERS.

        Rubber-stamped by Simon Fraser.

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

2013-01-16  Kentaro Hara  <haraken@chromium.org>

        [V8] Make a creationContext parameter of toV8() mandatory
        https://bugs.webkit.org/show_bug.cgi?id=107020

        Reviewed by Adam Barth.

        Currently a creationContext parameter of toV8() is optional:

          Handle<Value> toV8(..., Handle<Object> creationContext = Handle<Object>(), ...) {
            ...;
          }

        On the other hand, looking at the implementation of
        V8WrapperInstantiationScope:

            explicit V8WrapperInstantiationScope(v8::Handle<v8::Object> creationContext)
                : m_didEnterContext(false)
                , m_context(v8::Context::GetCurrent())
            {
                if (creationContext.IsEmpty()) // We do nothing for this case!
                    return;
                v8::Handle<v8::Context> contextForWrapper = creationContext->CreationContext();
                if (contextForWrapper == m_context)
                    return;
                m_context = v8::Local<v8::Context>::New(contextForWrapper);
                m_didEnterContext = true;
                m_context->Enter();
            }

        we're assuming that a creationContext parameter is passed
        to toV8() when a creationContext exists. In other words,
        if we forget to pass a creationContext parameter, we will
        end up with creating an object on the current context, which
        is wrong. To avoid the mistake, we should make the
        creationContext parameter mandatory. When we really do not
        have a creationContext, we can pass Handle<Object>() explicitly.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::toV8):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::idbKeyToScriptValue):
        * bindings/v8/ScriptController.cpp:
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::currentCallFrame):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::updateDocumentProperty):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::toObjectWrapper):
        * bindings/v8/V8MutationCallback.cpp:
        (WebCore::V8MutationCallback::handleEvent):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8SQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        * css/MediaQueryListListener.cpp:
        (WebCore::MediaQueryListListener::queryChanged):
        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):

2013-01-15  Jer Noble  <jer.noble@apple.com>

        Add a Setting to disable QTKit media engine.
        https://bugs.webkit.org/show_bug.cgi?id=106972

        Reviewed by Eric Carlson.

        Allow the MediaPlayerPrivateQTKit engine to be disabled by adding a
        runtime setting to Settings. Make the setting 'live' by requerying the
        installed media engines when the setting changes.

        * WebCore.exp.in: Add new symbols to export list.
        * page/Settings.cpp: Add new gQTKitEnabled global.
        (WebCore::Settings::setAVFoundationEnabled): Requery media engines.
        (WebCore::Settings::setQTKitEnabled): Ditto. Setter for global setting variable.
        * page/Settings.h:
        (WebCore::Settings::isQTKitEnabled): Getter for same.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Check isQTKitEnabled() before adding
            MediaPlayerPrivateQTKit engine.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::requeryMediaEngines): Pass through to MediaPlayer.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Take an optional requery options parameter.
        (WebCore::MediaPlayer::requeryMediaEngines): Pass through to installedMediaEngines().
        * platform/graphics/MediaPlayer.h:

2013-01-16  Christophe Dumez  <christophe.dumez@intel.com>

        [gstreamer] Some media tests occasionally crash with gstreamer 1.0 backend
        https://bugs.webkit.org/show_bug.cgi?id=106551

        Reviewed by Philippe Normand.

        ImageGStreamerCairo was passing mapped memory to
        cairo_image_surface_create_for_data() and then unmapping it straight
        away even though the cairo_surface_t is still used. The cairo
        documentation states:
        "The output buffer must be kept around until the cairo_surface_t is
        destroyed or cairo_surface_finish() is called on the surface."

        This patch keeps the GstBuffer memory mapped until the ImageGStreamer
        is destroyed so that the internal cairo_surface_t stays valid while
        avoiding copying the image data.

        No new tests, already covered by existing tests.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF):
        (WTF::GstBuffer):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        (WTF): Add support for using GRefPtr with GstBuffer.
        * platform/graphics/gstreamer/ImageGStreamer.h:
        (ImageGStreamer):
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (ImageGStreamer::ImageGStreamer):
        (ImageGStreamer::~ImageGStreamer):

2013-01-16  Mike Reed  <reed@google.com>

        Use SkMatrix::I() when we need to pass identity, rather than constructing a new matrix.
        https://bugs.webkit.org/show_bug.cgi?id=107016

        Reviewed by James Robinson.

        No new tests. existing tests exercise this code.

        The default constructor is being deprecated, so this change is also part of that effort,
        though it is a perf-improvement regardless, since we avoid making a new (temp) matrix.

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

2013-01-16  Ojan Vafai  <ojan@chromium.org>

        RenderListMarker::computePreferredLogicalWidth should not be public
        https://bugs.webkit.org/show_bug.cgi?id=106956

        Reviewed by Tony Chang.

        RenderListItem was calling computePreferredLogicalWidths for the side
        effects of updating the marker content and margins. Instead, call
        updateMarginsAndContent directly.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        The isImage() codepath never calls computePreferredLogicalWidths, so we need to make
        sure the content and margins are updated.

        (WebCore::RenderListMarker::updateContent):
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        (WebCore::RenderListMarker::updateMarginsAndContent):
        * rendering/RenderListMarker.h:

2013-01-16  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Safeguard against possible NULL-dereference
        https://bugs.webkit.org/show_bug.cgi?id=104931

        Reviewed by Martin Robinson.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetIndexInParent): Move the NULL-safeguard to a
        place where it actually makes sense.

2013-01-16  Avi Drissman  <avi@google.com>

        West-panning cursor does not match resize cursor, unlike all other directions
        https://bugs.webkit.org/show_bug.cgi?id=89405

        Reviewed by Alexey Proskuryakov.

        Existing manual tests.

        * platform/mac/CursorMac.mm:
        (WebCore::Cursor::ensurePlatformCursor):

2013-01-16  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: array grouping does not work for float number keys
        https://bugs.webkit.org/show_bug.cgi?id=106998

        Reviewed by Pavel Feldman.

        Now we do the array index check according to the ECMAScript 5, section 15.4:
        "A property name P (in the form of a String value) is an array index if and only if ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal to 2^32-1."

        * inspector/front-end/ObjectPropertiesSection.js:
        (.buildObjectFragment):

2013-01-16  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: Show formatted content of JSON request
        https://bugs.webkit.org/show_bug.cgi?id=106900

        Reviewed by Vsevolod Vlasov.

        "Request payload" section showed raw content for POST requests.
        This change show it in structured format if it's JSON parsable.
        Raw format is also available.

        * inspector/front-end/RequestHeadersView.js:
        (WebInspector.RequestHeadersView.prototype._refreshQueryString):
        (WebInspector.RequestHeadersView.prototype._refreshFormData):
        (WebInspector.RequestHeadersView.prototype.toggleViewSource):
        (WebInspector.RequestHeadersView.prototype._refreshParams):

2013-01-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: UISourceCode scriptFile / styleFile should be reset on navigation (debugger or css model reset).
        https://bugs.webkit.org/show_bug.cgi?id=107008

        Reviewed by Pavel Feldman.

        ScriptFiles and styleFiles are now reset and disposed on UISourceCodes on corresponding models reset.
        StyleSourceMapping now tries to setup mapping for newly added resource as well as for uiSourceCodes previously.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel):
        (WebInspector.CSSStyleModel.prototype._mainFrameCreatedOrNavigated):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping):
        (WebInspector.ResourceScriptMapping.prototype._unbindUISourceCodeFromScripts):
        (WebInspector.ResourceScriptMapping.prototype._initialize):
        (WebInspector.ResourceScriptMapping.prototype._debuggerReset):
        (WebInspector.ResourceScriptFile.prototype.dispose):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._addFrame):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel):
        (WebInspector.ScriptSnippetModel.prototype._debuggerReset):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping):
        (WebInspector.StylesSourceMapping.prototype._resourceAdded):
        (WebInspector.StylesSourceMapping.prototype._uiSourceCodeAddedToWorkspace):
        (WebInspector.StylesSourceMapping.prototype._bindUISourceCode):
        (WebInspector.StylesSourceMapping.prototype._projectWillReset):
        (WebInspector.StylesSourceMapping.prototype._initialize):
        (WebInspector.StylesSourceMapping.prototype._mainFrameCreatedOrNavigated):
        (WebInspector.StyleFile.prototype.dispose):

2013-01-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GStreamer][Soup] Let GStreamer provide the buffer data is downloaded to, to avoid copying
        https://bugs.webkit.org/show_bug.cgi?id=105552

        Reverting 139877. It made a couple of API tests fail.

        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        * platform/graphics/gstreamer/GStreamerVersioning.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient):
        (_WebKitWebSrcPrivate):
        (webKitWebSrcFinalize):
        (webKitWebSrcStop):
        (StreamingClient::didReceiveData):
        * platform/network/ResourceHandleClient.h:
        (ResourceHandleClient):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::nextMultipartResponsePartCallback):
        (WebCore::sendRequestCallback):
        (WebCore::readCallback):

2013-01-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: cookies with empty value are parsed incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=107012

        Reviewed by Pavel Feldman.

        Require cookie value to be a string, not a non-empty string, before
        employing legacy compatibility hack of treating bare token as value
        for the cookie with an empty name.

        * inspector/front-end/CookieParser.js:
        (WebInspector.CookieParser.prototype._addCookie):

2013-01-16  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Unreviewed EFL build fix after r139877.

        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        (getGstBufferDataPointer): Add const modifier to webkitGstMapInfoQuarkString.

2013-01-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: [Extensions API] remove inspectedWindow.onReset event
        https://bugs.webkit.org/show_bug.cgi?id=107009

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ExtensionAPI.js:
        (defineCommonExtensionSymbols):
        (injectedExtensionAPI.InspectorExtensionAPI):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.initExtensions):

2013-01-16  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix text-editor-highlight-regexp test
        https://bugs.webkit.org/show_bug.cgi?id=107006

        Reviewed by Vsevolod Vlasov.

        Use 'height: 100%' instead of pixel values on highlight spans to bring in some platform independency in test expectations.

        No new tests: no changes in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._measureRegex):
        (WebInspector.TextEditorMainPanel.prototype._appendOverlayHighlight):
        * inspector/front-end/textEditor.css:
        (.text-editor-overlay-highlight):
        (.webkit-line-content):

2013-01-16  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Use the shared HistoryItem serialization for QWebHistory
        https://bugs.webkit.org/show_bug.cgi?id=106671

        Reviewed by Allan Sandfeld Jensen.

        This allows a few things missing from the previous serialization code
        to function while using commonly maintained code:
        - The itemSequenceNumber and documentSequenceNumber that were needed
          to properly restore same-document navigations
        - The form data
        - The navigation hierarchy mapping the frame tree

        * history/HistoryItem.h:
        (HistoryItem):
        * history/qt/HistoryItemQt.cpp:
        (QDataStreamCoder):
        (WebCore):
        (WebCore::QDataStreamCoder::QDataStreamCoder):
        (WebCore::QDataStreamCoder::encodeBytes):
        (WebCore::QDataStreamCoder::encodeBool):
        (WebCore::QDataStreamCoder::encodeUInt32):
        (WebCore::QDataStreamCoder::encodeUInt64):
        (WebCore::QDataStreamCoder::encodeInt32):
        (WebCore::QDataStreamCoder::encodeInt64):
        (WebCore::QDataStreamCoder::encodeFloat):
        (WebCore::QDataStreamCoder::encodeDouble):
        (WebCore::QDataStreamCoder::encodeString):
        (WebCore::QDataStreamCoder::decodeBytes):
        (WebCore::QDataStreamCoder::decodeBool):
        (WebCore::QDataStreamCoder::decodeUInt32):
        (WebCore::QDataStreamCoder::decodeUInt64):
        (WebCore::QDataStreamCoder::decodeInt32):
        (WebCore::QDataStreamCoder::decodeInt64):
        (WebCore::QDataStreamCoder::decodeFloat):
        (WebCore::QDataStreamCoder::decodeDouble):
        (WebCore::QDataStreamCoder::decodeString):
        (WebCore::HistoryItem::restoreState):
        (WebCore::WebCore::HistoryItem::saveState):

2013-01-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GStreamer][Soup] Let GStreamer provide the buffer data is downloaded to, to avoid copying
        https://bugs.webkit.org/show_bug.cgi?id=105552

        Reviewed by Philippe Normand.

        Makes it possible for the GStreamer media backend to provide the buffer to which
        the Soup networking backend will use to download data to. This makes copying
        memory unnecessary when ResourceHandle hands data over to the media player's
        StreamingClient. Thanks to Dan Winship for help designing the interface.

        No behaviour change, covered by existing tests.

        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        (getGstBufferSize): Abstract obtaining the size of the buffer, so the code
        is cleaner while still working for both GST 0.10 and 1.0.
        (setGstBufferSize): Ditto, but for setting the size.
        (getGstBufferDataPointer): Ditto, but for grabbing the data pointer.
        (mapGstBuffer): Convenience method to take care of mapping the buffer so that
        we can provide the data pointer to ResourceHandle.
        (unmapGstBuffer): Convenience method which takes care of unmapping the buffer
        and properly freeing the GstMapInfo.
        * platform/graphics/gstreamer/GStreamerVersioning.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient): New methods.
        (_WebKitWebSrcPrivate): We now store the GstBuffer we provided the data pointer from
        so we can later unmap it and push it to the pipeline.
        (webKitWebSrcDispose): Deal with the GstBuffer in case it exists when the source is
        destroyed.
        (webKitWebSrcStop): Also clear the GstBuffer in this case.
        (StreamingClient::didReceiveData): Handle the hand-over of the buffer.
        (StreamingClient::getBuffer): Provide ResourceHandle with a new GstBuffer's data pointer.
        * platform/network/ResourceHandleClient.h:
        (ResourceHandleClient):
        (WebCore::ResourceHandleClient::ResourceHandleClient): Constructor to initialize the buffer
        member variable to 0.
        (WebCore::ResourceHandleClient::~ResourceHandleClient): Destructor to free the buffer if it
        has been allocated.
        (WebCore::ResourceHandleClient::getBuffer): Default implementation which returns a
        newly allocated char pointer.
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (ResourceHandleInternal): Store actual buffer size, which is no longer a constant.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupSoupRequestOperation): Clear the buffer pointer, the life-cycle of the
        buffer is handled by the ResourceHandleClient.
        (WebCore::nextMultipartResponsePartCallback): Get a new buffer from the client before reading.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::readCallback): Ditto.

2013-01-16  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Crash in WebCore::CachedFrame::destroy
        https://bugs.webkit.org/show_bug.cgi?id=104525

        Reviewed by Adam Barth.

        Add an assert to increase the chances of catching this crash
        early on in the future.

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

2013-01-16  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix Сlosure warnings in devTools front-end
        https://bugs.webkit.org/show_bug.cgi?id=106993

        Reviewed by Vsevolod Vlasov.

        Add missing annotations and rename Element.remove() method to avoid collision with HTMLSelectElement.remove() method.

        No new tests: no change in behaviour.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.hasChildNodes):
        (WebInspector.DOMNode.prototype.getChildNodes):
        * inspector/front-end/DOMExtension.js:
        (Element.prototype.removeSelf):
        (removeSubsequentNodes):
        * inspector/front-end/DefaultTextEditor.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.OverridesSettingsTab):
        * inspector/front-end/SourceTokenizer.js:
        (WebInspector.SourceTokenizer):

2013-01-16  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: fix backward compatibility issues with Element.remove() method
        https://bugs.webkit.org/show_bug.cgi?id=106996

        Reviewed by Vsevolod Vlasov.

        Add javascript implementations for CharacterData.prototype.remove and DocumentType.prototype.remove.

        No new tests: no change in behaviour.

        * inspector/front-end/DOMExtension.js:

2013-01-16  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurfaceGLX is leaking an XWindow
        https://bugs.webkit.org/show_bug.cgi?id=107002

        The XWindow created as a backing surface for
        the GraphicsSurfaceGLX needs to be destroyed
        together with the GraphicsSurface.

        Reviewed by Noam Rosenthal.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::clear):

2013-01-16  Pablo Flouret  <pablof@motorola.com>

        Implement CSSSupportsRule
        https://bugs.webkit.org/show_bug.cgi?id=104822

        Reviewed by Allan Sandfeld Jensen.

        http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface

        Right now, @supports is not implemented as a proper CSSRule. Apart from
        the CSSOM implications it gives wrong results when, for instance, an
        @supports rule is nested inside a @media rule.

        Test: css3/supports-cssom.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Add CSSSupportsRule.* and associated files.

        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::wrap):
            Create the correct wrappers for the rule.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::createSupportsRule):
        (WebCore::CSSParser::markSupportsRuleHeaderStart):
        (WebCore::CSSParser::markSupportsRuleHeaderEnd):
        * css/CSSParser.h:
            Create the supports rule when parsing and add it where it corresponds,
            instead of directly adding the child rules to the stylesheet.

        * css/CSSPropertySourceData.h:
        * css/CSSRule.h:
        * css/CSSRule.idl:
            Add SUPPORTS_RULE type to enums.

        * css/CSSSupportsRule.cpp: Added.
        (WebCore::CSSSupportsRule::CSSSupportsRule):
        (WebCore::CSSSupportsRule::~CSSSupportsRule):
        (WebCore::CSSSupportsRule::cssText):
        (WebCore::CSSSupportsRule::conditionText):
        * css/CSSSupportsRule.h: Added.
        (WebCore::CSSSupportsRule::create):
        * css/CSSSupportsRule.idl: Added.
            DOM interface.

        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
            Add rules included in the @supports rule.

        * css/StyleResolver.cpp:
        (WebCore::collectCSSOMWrappers):
            Collect CSSSupportsRule wrappers.

        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::reportMemoryUsage):
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        (WebCore::StyleRuleSupports::StyleRuleSupports):
        * css/StyleRule.h:
        (StyleRuleBase):
        (WebCore::StyleRuleBase::isSupportsRule):
        (StyleRuleSupports):
        (WebCore::StyleRuleSupports::create):
        (WebCore::StyleRuleSupports::conditionText):
        (WebCore::StyleRuleSupports::conditionIsSupported):
        (WebCore::StyleRuleSupports::copy):
        (WebCore::toStyleRuleSupports):
            New subclass of StyleRuleBlock: StyleRuleSupports.

        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * inspector/InspectorStyleSheet.cpp:
        (flattenSourceData):
        (WebCore::asCSSRuleList):
            Handle @supports rules where needed.

2013-01-16  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Unable to edit a time field with step=86400, and confusing appearance
        https://bugs.webkit.org/show_bug.cgi?id=106983

        Reviewed by Kentaro Hara.

        For example, we show a read-only hour field and a read-only minutes
        field for <input type=time min="17:00" step=86400> because the step
        value is 24 hours and the hour field can be only 17. However, we need to
        provide a way to clear the value of the time field in such case. We
        shouldn't make the hour field read-only if no other fields are editable.

        - We don't make hour fields read-only for input[type=time].

        - We make hour fields read-only for input[type=datetime-local] only if
          year, month, or day field is editable. e.g.
          <input type=datetime-local min=2013-01-16T17:00 step=86400>:
            The hour field is read-only, and year/month/day fields are editable.
          <input type=datetime-local min=2013-01-16T17:00 max=2013-01-16T18:00 step=86400>:
            The hour field is editable, and year/month/day fields are read-only.

        Test: fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-readonly-subfield.html

        * html/shadow/DateTimeEditElement.cpp:
        (DateTimeEditBuilder): Declare new functions.
        (WebCore::DateTimeEditBuilder::getRangeOfDayOfMonthField):
        Added a function by extracting some code from visitField.
        (WebCore::DateTimeEditBuilder::visitField):
        (WebCore::DateTimeEditBuilder::shouldDayOfMonthFieldReadOnly):
        Added a function by extracting some code from visitField.
        (WebCore::DateTimeEditBuilder::shouldHourFieldReadOnly):
        If the type is "time", we don't make hour fields read-only.
        Otherwise, we don't make hour fields read-only if year/month/day fields
        are read-only. Note that we don't need to check read-only status of year
        and month fields explicitly here because a day field can be read-only
        only if the year field and the month field are read-only.

2013-01-16  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [TexMap] Composited CSS shaders crash when using non-GL TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=106796

        Reviewed by Noam Rosenthal.

        Fail gracefully when FilterEffectRenderer fails to build the filter effects.

        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):

2013-01-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Store project UISourceCodes in a map with uri as a key for faster lookup.
        https://bugs.webkit.org/show_bug.cgi?id=106911

        Reviewed by Pavel Feldman.

        * inspector/front-end/Workspace.js:
        (WebInspector.Project):
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):
        (WebInspector.Project.prototype._reset):
        (WebInspector.Project.prototype.uiSourceCodeForOriginURL):
        (WebInspector.Project.prototype.uiSourceCodeForURI):
        (WebInspector.Project.prototype.uiSourceCodes):

2013-01-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce file mapping allowing to map network loaded scripts and stylesheets to file system files.
        https://bugs.webkit.org/show_bug.cgi?id=106795

        Reviewed by Pavel Feldman.

        Introduced file mapping for inspector.
        FileMapping is essentially an array of MappingEntries where each MappingEntry is a pair of urlPrefix and pathPrefix.
        When scripts and stylesheets are mapped to uiSourceCodes FileMapping methods are used to establish
        prefix based matching with file system uiSourceCodes if possible.

        Test: inspector/file-mapping.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping):
        (WebInspector.CompilerScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.CompilerScriptMapping.prototype.uiLocationToRawLocation):
        (WebInspector.CompilerScriptMapping.prototype.get addScript.get this):
        (WebInspector.CompilerScriptMapping.prototype.get addScript):
        (WebInspector.CompilerScriptMapping.prototype._bindUISourceCode):
        (WebInspector.CompilerScriptMapping.prototype._uiSourceCodeAddedToWorkspace):
        * inspector/front-end/FileMapping.js: Added.
        (WebInspector.FileMapping):
        (WebInspector.FileMapping.prototype.hasMappingForURL):
        (WebInspector.FileMapping.prototype.uriForURL):
        (WebInspector.FileMapping.prototype.urlForURI):
        (WebInspector.FileMapping.prototype.setMappings):
        (WebInspector.FileMapping.prototype.mappings):
        (WebInspector.FileMapping.prototype._deserialize):
        (WebInspector.FileMapping.prototype._serialize):
        (WebInspector.FileMapping.MappingEntry):
        (WebInspector.FileMapping.MappingEntry.deserialize):
        (WebInspector.FileMapping.MappingEntry.prototype.matchesURL):
        (WebInspector.FileMapping.MappingEntry.prototype.matchesURI):
        (WebInspector.FileMapping.MappingEntry.prototype.uriForURL):
        (WebInspector.FileMapping.MappingEntry.prototype.urlForURI):
        (WebInspector.FileMapping.MappingEntry.prototype.serialize):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider.prototype._addFile):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._workspaceUISourceCodeForScript):
        (WebInspector.ResourceScriptMapping.prototype._scriptsForUISourceCode):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.displayNameForURL):
        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping):
        (WebInspector.SASSSourceMapping.prototype._reloadCSS):
        (_addURLMapping):
        (rawLocationToUILocation):
        (_reset):
        (WebInspector.SASSSourceMapping.MappingEntry):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping):
        (WebInspector.StylesSourceMapping.prototype.rawLocationToUILocation):
        (WebInspector.StylesSourceMapping.prototype._uiSourceCodeAddedToWorkspace):
        (WebInspector.StylesSourceMapping.prototype._projectWillReset):
        (WebInspector.StyleContentBinding.prototype.):
        (WebInspector.StyleContentBinding.prototype._innerStyleSheetChanged):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/Workspace.js:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2013-01-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce UISourceCode.originURL().
        https://bugs.webkit.org/show_bug.cgi?id=106909

        Reviewed by Pavel Feldman.

        Introduced originURL on UISourceCode showing where UISourceCode in workspace was loaded from.
        This is neeeded to distinguish it from network request url used by mappings.

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.FileBasedSearchResultsPane.prototype._createAnchor):
        (WebInspector.FileBasedSearchResultsPane.prototype.addSearchResult):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._compareBreakpoints):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.Placard.prototype._update):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._handleOpenURL):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        (WebInspector.ExtensionServer.prototype._onSetResourceContent):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._setBreakpoint):
        * inspector/front-end/Linkifier.js:
        (WebInspector.Linkifier.prototype._updateAnchor):
        (WebInspector.Linkifier.DefaultFormatter.prototype.formatLiveAnchor):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorSourceTreeElement):
        * inspector/front-end/SASSSourceMapping.js:
        (uiLocationToRawLocation):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.canShowAnchorLocation):
        (WebInspector.ScriptsPanel.prototype._showSourceLine):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSource):
        * inspector/front-end/ScriptsSearchScope.js:
        (WebInspector.ScriptsSearchScope.prototype._sortedUISourceCodes):
        (WebInspector.ScriptsSearchScope.prototype._sortedUISourceCodes.comparator):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleWorkspaceProvider.prototype.addFile):
        * inspector/front-end/StyleSheetOutlineDialog.js:
        (WebInspector.StyleSheetOutlineDialog.prototype.requestItems):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping.prototype.uiLocationToRawLocation):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype._tooltipForFile):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.originURL):
        (WebInspector.UISourceCode.prototype.urlChanged):
        (WebInspector.UISourceCode.prototype.contentURL):
        (WebInspector.Revision.prototype.contentURL):
        * inspector/front-end/Workspace.js:
        (WebInspector.FileDescriptor):
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype.uiSourceCodeForOriginURL):
        (WebInspector.Workspace.prototype.uiSourceCodeForOriginURL):

2013-01-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Move 'DefaultTheme' folder to WebCore/platform/efl
        https://bugs.webkit.org/show_bug.cgi?id=106969

        Reviewed by Benjamin Poulain.

        DefaultTheme is used by both EFL WK1 and WK2 ports. So, WebCore/platform/efl is appropriate place for it.

        * platform/efl/DefaultTheme/CMakeLists.txt: Renamed from Source/WebKit/efl/DefaultTheme/CMakeLists.txt.
        * platform/efl/DefaultTheme/default.edc: Renamed from Source/WebKit/efl/DefaultTheme/default.edc.
        * platform/efl/DefaultTheme/widget/button/button.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/button/button.edc.
        * platform/efl/DefaultTheme/widget/button/img_button_focus.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/button/img_button_focus.png.
        * platform/efl/DefaultTheme/widget/button/img_button_hover.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/button/img_button_hover.png.
        * platform/efl/DefaultTheme/widget/button/img_button_normal.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/button/img_button_normal.png.
        * platform/efl/DefaultTheme/widget/button/img_button_press.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/button/img_button_press.png.
        * platform/efl/DefaultTheme/widget/check/check.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/check/check.edc.
        * platform/efl/DefaultTheme/widget/check/img_check_bg_disabled.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/check/img_check_bg_disabled.png.
        * platform/efl/DefaultTheme/widget/check/img_check_bg_enabled.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/check/img_check_bg_enabled.png.
        * platform/efl/DefaultTheme/widget/check/img_check_off.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/check/img_check_off.png.
        * platform/efl/DefaultTheme/widget/check/img_check_off_focus.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/check/img_check_off_focus.png.
        * platform/efl/DefaultTheme/widget/check/img_check_off_hover.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/check/img_check_off_hover.png.
        * platform/efl/DefaultTheme/widget/check/img_check_on.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/check/img_check_on.png.
        * platform/efl/DefaultTheme/widget/check/img_check_on_focus.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/check/img_check_on_focus.png.
        * platform/efl/DefaultTheme/widget/check/img_check_on_hover.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/check/img_check_on_hover.png.
        * platform/efl/DefaultTheme/widget/combo/combo.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/combo.edc.
        * platform/efl/DefaultTheme/widget/combo/combo_focus.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/combo_focus.png.
        * platform/efl/DefaultTheme/widget/combo/combo_focus_button.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/combo_focus_button.png.
        * platform/efl/DefaultTheme/widget/combo/combo_hover.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/combo_hover.png.
        * platform/efl/DefaultTheme/widget/combo/combo_hover_button.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/combo_hover_button.png.
        * platform/efl/DefaultTheme/widget/combo/combo_normal.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/combo_normal.png.
        * platform/efl/DefaultTheme/widget/combo/combo_normal_button.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/combo_normal_button.png.
        * platform/efl/DefaultTheme/widget/combo/combo_press.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/combo_press.png.
        * platform/efl/DefaultTheme/widget/combo/combo_press_button.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/combo_press_button.png.
        * platform/efl/DefaultTheme/widget/combo/icon.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/combo/icon.png.
        * platform/efl/DefaultTheme/widget/entry/entry.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/entry/entry.edc.
        * platform/efl/DefaultTheme/widget/entry/img_focused.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/entry/img_focused.png.
        * platform/efl/DefaultTheme/widget/entry/img_hovered.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/entry/img_hovered.png.
        * platform/efl/DefaultTheme/widget/entry/img_normal.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/entry/img_normal.png.
        * platform/efl/DefaultTheme/widget/file/file.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/file/file.edc.
        * platform/efl/DefaultTheme/widget/file/file_focus.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/file/file_focus.png.
        * platform/efl/DefaultTheme/widget/file/file_hover.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/file/file_hover.png.
        * platform/efl/DefaultTheme/widget/file/file_normal.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/file/file_normal.png.
        * platform/efl/DefaultTheme/widget/file/file_press.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/file/file_press.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/enterfullscreenbutton.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/enterfullscreenbutton.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/exitfullscreenbutton.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/exitfullscreenbutton.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/fullscreen_button.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/fullscreen_button.edc.
        * platform/efl/DefaultTheme/widget/mediacontrol/mutebutton/mute_button.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/mutebutton/mute_button.edc.
        * platform/efl/DefaultTheme/widget/mediacontrol/mutebutton/mutebutton.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/mutebutton/mutebutton.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/mutebutton/unmutebutton.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/mutebutton/unmutebutton.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/playpausebutton/pausebutton.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/playpausebutton/pausebutton.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/playpausebutton/playbutton.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/playpausebutton/playbutton.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/playpausebutton/playpause_button.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/playpausebutton/playpause_button.edc.
        * platform/efl/DefaultTheme/widget/mediacontrol/seekbackwardbutton/seekbackward_button.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/seekbackwardbutton/seekbackward_button.edc.
        * platform/efl/DefaultTheme/widget/mediacontrol/seekbackwardbutton/seekbackwardbutton.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/seekbackwardbutton/seekbackwardbutton.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/seekforwardbutton/seekforward_button.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/seekforwardbutton/seekforward_button.edc.
        * platform/efl/DefaultTheme/widget/mediacontrol/seekforwardbutton/seekforwardbutton.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/seekforwardbutton/seekforwardbutton.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/closedcaption.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/closedcaption.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/closedcaption_disabled.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/closedcaption_disabled.png.
        * platform/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/toggle_captions_button.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/toggle_captions_button.edc.
        * platform/efl/DefaultTheme/widget/progressbar/bt_base.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/progressbar/bt_base.png.
        * platform/efl/DefaultTheme/widget/progressbar/progressbar.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/progressbar/progressbar.edc.
        * platform/efl/DefaultTheme/widget/progressbar/shelf_inset.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/progressbar/shelf_inset.png.
        * platform/efl/DefaultTheme/widget/radio/img_radio_bg_disabled.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/radio/img_radio_bg_disabled.png.
        * platform/efl/DefaultTheme/widget/radio/img_radio_bg_enabled.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/radio/img_radio_bg_enabled.png.
        * platform/efl/DefaultTheme/widget/radio/img_radio_off.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/radio/img_radio_off.png.
        * platform/efl/DefaultTheme/widget/radio/img_radio_off_focus.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/radio/img_radio_off_focus.png.
        * platform/efl/DefaultTheme/widget/radio/img_radio_off_hover.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/radio/img_radio_off_hover.png.
        * platform/efl/DefaultTheme/widget/radio/img_radio_on.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/radio/img_radio_on.png.
        * platform/efl/DefaultTheme/widget/radio/img_radio_on_focus.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/radio/img_radio_on_focus.png.
        * platform/efl/DefaultTheme/widget/radio/img_radio_on_hover.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/radio/img_radio_on_hover.png.
        * platform/efl/DefaultTheme/widget/radio/radio.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/radio/radio.edc.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/scrollbar/scrollbar.edc.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_h.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/scrollbar/scrollbar_h.png.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_knob_h.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/scrollbar/scrollbar_knob_h.png.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_knob_v.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/scrollbar/scrollbar_knob_v.png.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_v.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/scrollbar/scrollbar_v.png.
        * platform/efl/DefaultTheme/widget/search/cancel/cancel_normal_button.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/search/cancel/cancel_normal_button.png.
        * platform/efl/DefaultTheme/widget/search/cancel/cancel_normal_button2.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/search/cancel/cancel_normal_button2.png.
        * platform/efl/DefaultTheme/widget/search/cancel/search_cancel.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/search/cancel/search_cancel.edc.
        * platform/efl/DefaultTheme/widget/search/decoration/decoration_normal_button.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/search/decoration/decoration_normal_button.png.
        * platform/efl/DefaultTheme/widget/search/decoration/search_decoration.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/search/decoration/search_decoration.edc.
        * platform/efl/DefaultTheme/widget/search/field/field_focused.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/search/field/field_focused.png.
        * platform/efl/DefaultTheme/widget/search/field/field_hovered.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/search/field/field_hovered.png.
        * platform/efl/DefaultTheme/widget/search/field/field_normal.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/search/field/field_normal.png.
        * platform/efl/DefaultTheme/widget/search/field/search_field.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/search/field/search_field.edc.
        * platform/efl/DefaultTheme/widget/slider/slider.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/slider/slider.edc.
        * platform/efl/DefaultTheme/widget/slider/slider_fill_h.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/slider/slider_fill_h.png.
        * platform/efl/DefaultTheme/widget/slider/slider_fill_v.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/slider/slider_fill_v.png.
        * platform/efl/DefaultTheme/widget/slider/slider_h.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/slider/slider_h.png.
        * platform/efl/DefaultTheme/widget/slider/slider_thumb_h.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/slider/slider_thumb_h.png.
        * platform/efl/DefaultTheme/widget/slider/slider_thumb_press_h.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/slider/slider_thumb_press_h.png.
        * platform/efl/DefaultTheme/widget/slider/slider_thumb_press_v.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/slider/slider_thumb_press_v.png.
        * platform/efl/DefaultTheme/widget/slider/slider_thumb_v.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/slider/slider_thumb_v.png.
        * platform/efl/DefaultTheme/widget/slider/slider_v.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/slider/slider_v.png.
        * platform/efl/DefaultTheme/widget/spinner/sp_bg.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/spinner/sp_bg.png.
        * platform/efl/DefaultTheme/widget/spinner/sp_down_default.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/spinner/sp_down_default.png.
        * platform/efl/DefaultTheme/widget/spinner/sp_down_hover.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/spinner/sp_down_hover.png.
        * platform/efl/DefaultTheme/widget/spinner/sp_down_pressed.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/spinner/sp_down_pressed.png.
        * platform/efl/DefaultTheme/widget/spinner/sp_up_default.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/spinner/sp_up_default.png.
        * platform/efl/DefaultTheme/widget/spinner/sp_up_hover.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/spinner/sp_up_hover.png.
        * platform/efl/DefaultTheme/widget/spinner/sp_up_pressed.png: Renamed from Source/WebKit/efl/DefaultTheme/widget/spinner/sp_up_pressed.png.
        * platform/efl/DefaultTheme/widget/spinner/spinner.edc: Renamed from Source/WebKit/efl/DefaultTheme/widget/spinner/spinner.edc.

2013-01-16  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in SerializedScriptValue::deserialize()
        https://bugs.webkit.org/show_bug.cgi?id=106916

        Reviewed by Adam Barth.

        This is one of steps to remove optional Isolate parameters.

        No tests. No change in behavior.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserialize):
        (WebCore):
        (WebCore::SerializedScriptValue::deserializeForInspector):
        * bindings/v8/SerializedScriptValue.h:
        (SerializedScriptValue):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::stateAccessorGetter):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAccessorGetter):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::stateAccessorGetter):

2013-01-16  Ken Kania  <kkania@chromium.org>

        [Inspector] Add events for tracking page loads and scheduled navigations.
        https://bugs.webkit.org/show_bug.cgi?id=104168

        Reviewed by Pavel Feldman.

        These events are needed for clients who need to be aware of when a page is
        navigating or about to navigate. Some clients may wish to prevent interaction
        with the page during this time. Two of the new events track loading start and
        stop, as measured by the ProgressTracker. The other two events track when a
        page has a new scheduled navigation and when it no longer has a scheduled
        navigation. These latter two events won't allow the client to determine if
        a load is going to happen in all circumstances, but is sufficient for many cases.

        Tests: inspector-protocol/page/frameScheduledNavigation.html
               inspector-protocol/page/frameStartedLoading.html

        * inspector/Inspector.json:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::frameStartedLoadingImpl):
        (WebCore::InspectorInstrumentation::frameStoppedLoadingImpl):
        (WebCore::InspectorInstrumentation::frameScheduledNavigationImpl):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigationImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        (WebCore):
        (WebCore::InspectorInstrumentation::frameStoppedLoading):
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameStartedLoading):
        (WebCore):
        (WebCore::InspectorPageAgent::frameStoppedLoading):
        (WebCore::InspectorPageAgent::frameScheduledNavigation):
        (WebCore::InspectorPageAgent::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.PageDispatcher.prototype.frameDetached):
        (WebInspector.PageDispatcher.prototype.frameStartedLoading):
        (WebInspector.PageDispatcher.prototype.frameStoppedLoading):
        (WebInspector.PageDispatcher.prototype.frameScheduledNavigation):
        (WebInspector.PageDispatcher.prototype.frameClearedScheduledNavigation):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::clear):
        (WebCore::NavigationScheduler::timerFired):
        (WebCore::NavigationScheduler::startTimer):
        (WebCore::NavigationScheduler::cancel):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):

2013-01-16  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update MediaStreamTrack::readyState to match specification
        https://bugs.webkit.org/show_bug.cgi?id=106781

        Reviewed by Kentaro Hara.

        MediaStreamTrack::readyState now returns a string like the rest of the RTC classes.

        Existing tests expanded to cover patch.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::processTrack):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::readyState):
        (WebCore::MediaStreamTrack::ended):
        (WebCore):
        * Modules/mediastream/MediaStreamTrack.h:
        (MediaStreamTrack):
        * Modules/mediastream/MediaStreamTrack.idl:

2013-01-16  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: array grouping does not work for big and negative number keys
        https://bugs.webkit.org/show_bug.cgi?id=106891

        Reviewed by Pavel Feldman.

        Fixing array grouping for arrays that contain big or negative number representations as object keys.

        * inspector/front-end/ObjectPropertiesSection.js:
        (.buildObjectFragment):

2013-01-16  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: highlight regexp API for DefaultTextEditor
        https://bugs.webkit.org/show_bug.cgi?id=106801

        Reviewed by Pavel Feldman.

        Add highlightRegexp and removeRegexpHighlight methods to DefaultTextEditor that highlight
        all occurrences of given regexp in text with given css class.
        Highlight is done via spans positioned absolutely over the regexp occurences in text.

        Test: inspector/editor/text-editor-highlight-regexp.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.highlightRegex):
        (WebInspector.DefaultTextEditor.prototype.removeRegexHighlight):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.highlightRegex):
        (WebInspector.TextEditorMainPanel.prototype.removeRegexHighlight):
        (WebInspector.TextEditorMainPanel.prototype._repaintVisibleChunks):
        (WebInspector.TextEditorMainPanel.prototype._findRegexOccurrences):
        (WebInspector.TextEditorMainPanel.prototype._measureRegex):
        (WebInspector.TextEditorMainPanel.prototype._appendOverlayHighlight):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.highlightRegex):
        (WebInspector.TextEditor.prototype.removeRegexHighlight):
        * inspector/front-end/textEditor.css:
        (.text-editor-overlay-highlight):
        (.debug-fadeout):

2013-01-16  Ryosuke Niwa  <rniwa@webkit.org>

        Get rid of Node::createRareData
        https://bugs.webkit.org/show_bug.cgi?id=106981

        Reviewed by Benjamin Poulain.

        Deleted Node::createRareData. Node::ensureRareData() instantiates NodeRareData
        or ElementRareData according to the node type. Also encapsulate new by create
        functions in NodeRareData and ElementRareData.

        * dom/Element.cpp:
        (WebCore):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::create):
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::ensureRareData):
        (WebCore):
        * dom/Node.h:
        (WebCore::NodeRareDataBase::NodeRareDataBase):
        * dom/NodeRareData.h:
        (NodeRareData):
        (WebCore::NodeRareData::create):
        (WebCore::NodeRareData::NodeRareData):

2013-01-15  Ryosuke Niwa  <rniwa@webkit.org>

        GTK+ and Qt build fix after r139833.
        Explicitly cast NodeRareDataBase to NodeRareData before deleting it.

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

2013-01-15  Qiankun Miao  <qiankun.miao@intel.com>

        Remove extra space in CustomFilterRenderer.h
        https://bugs.webkit.org/show_bug.cgi?id=105783

        Reviewed by Dean Jackson.

        * platform/graphics/filters/CustomFilterRenderer.h:
        (CustomFilterRenderer):

2013-01-15  Tab Atkins  <tabatkins@google.com>

        Update CSS3 gradient support to the latest spec version and unprefix.
        https://bugs.webkit.org/show_bug.cgi?id=67166

        Reviewed by Dean Jackson.

        Tests: fast/gradients/unprefixed-color-stop-units.html
               fast/gradients/unprefixed-color-stops.html
               fast/gradients/unprefixed-generated-gradients.html
               fast/gradients/unprefixed-gradient-parsing.html
               fast/gradients/unprefixed-linear-angle-gradients.html
               fast/gradients/unprefixed-linear-right-angle-gradients.html
               fast/gradients/unprefixed-list-item-gradient.html
               fast/gradients/unprefixed-radial-gradients.html
               fast/gradients/unprefixed-radial-gradients2.html
               fast/gradients/unprefixed-radial-gradients3.html
               fast/gradients/unprefixed-repeating-end-fill.html
               fast/gradients/unprefixed-repeating-linear-gradient.html
               fast/gradients/unprefixed-repeating-radial-gradients.html
               fast/gradients/unprefixed-zero-range-repeating-gradient-hang.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::computeEndPoint): Rename parameters to make more sense.
        (WebCore::CSSLinearGradientValue::customCssText):
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::customCssText):
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSGradientValue.h:
        (CSSGradientValue):
        (CSSRadialGradientValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseLinearGradient):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::isGeneratedImageValue):
        (WebCore::CSSParser::parseGeneratedImage):
        * css/CSSParser.h:

2013-01-15  Ryosuke Niwa  <rniwa@webkit.org>

        NodeRareData doesn't need to have a vtable pointer
        https://bugs.webkit.org/show_bug.cgi?id=106965

        Reviewed by Benjamin Poulain.

        Made the destructor and reportMemoryUsage of NodeRareDataBase and NodeRareData
        respectively and their subclasses non-virtual.

        * dom/ElementRareData.cpp:
        (SameSizeAsElementRareData): Added.
        (WebCore): Added a compile assertion for the size of ElementRareData.
        * dom/ElementRareData.h:
        (ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::clearRareData): Explicitely delete NodeRareData or ElementRareData.
        (WebCore::Node::reportMemoryUsage): Explicitely add NodeRareData or ElementRareData.
        * dom/Node.h:
        (NodeRareDataBase): Deleted the virtual destructor.
        * dom/NodeRareData.cpp:
        (SameSizeAsNodeRareData): Removed one pointer.
        * dom/NodeRareData.h:
        (NodeRareData): Removed the virtual destructor.
        (NodeRareData::reportMemoryUsage): Made non-virtual.

2013-01-15  Ian Vollick  <vollick@chromium.org>

        [chromium] Create GraphicsLayerChromiums using a factory
        https://bugs.webkit.org/show_bug.cgi?id=103635

        Reviewed by James Robinson.

        Refactor graphics layer creation for chromium to go through a factory.

        No new tests, no change in functionality.

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

2013-01-15  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry]  LayerRenderingResults doesn't need to maintain the hole punch rect
        https://bugs.webkit.org/show_bug.cgi?id=106896

        Reviewed by George Staikos.
        Internally reviewed by Arvid Nilsson and John Griggs.

        No new tests,clean up code which is not used anymore.

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::drawHolePunchRect):
        * platform/graphics/blackberry/LayerRenderer.h:
        (LayerRenderingResults):

2013-01-15  Charles Wei  <charles.wei@torchmobile.com.cn>

        Fullscreen element should not share styles with it's siblings.
        https://bugs.webkit.org/show_bug.cgi?id=106888

        Reviewed by George Staikos.

        Test: fullscreen/full-screen-no-style-sharing.html

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

2013-01-15  Tim Horton  <timothy_horton@apple.com>

        Clamp TileCache visibleRect to WKView's visibleRect
        https://bugs.webkit.org/show_bug.cgi?id=106601
        <rdar://problem/12843164>

        Reviewed by Simon Fraser.

        * platform/graphics/TiledBacking.h:
        (TiledBacking): Add setExposedRect and setClipsToExposedRect.
        * platform/graphics/ca/mac/TileCache.h:
        (TileCache): Add setExposedRect, setClipsToExposedRect, and storage for their respective values.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache): Initialize m_clipsToExposedRect to false.
        (WebCore::TileCache::setExposedRect): Update exposedRect and revalidate tiles.
        (WebCore::TileCache::setClipsToExposedRect): Update clipsToExposedRect and revalidate tiles;
        if we're going from unclipped to clipped, we already have tiles, so we can skip tile revalidation.
        (WebCore::TileCache::computeTileCoverageRect): Intersect exisiting visible rect with
        exposed rect to get the visible rect we actually care about.
        (WebCore::TileCache::revalidateTiles): Ditto.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresOverhangAreasLayer): Don't create an overhang layer if the frame isn't scrollable.
        (WebCore::RenderLayerCompositor::requiresContentShadowLayer): Don't create a shadow layer if the frame isn't scrollable.

2013-01-15  Roger Fong  <roger_fong@apple.com>

        Get rid of a straggling dependency on SafariThemeConstants in RenderThemeWin.

        Rubberstamped by Timothy Horton.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::supportsClosedCaptioning):
        * rendering/RenderThemeWin.h:

2013-01-15  Hayato Ito  <hayato@chromium.org>

        Group all request parameters which are used to match CSS Rules into a parameter object.
        https://bugs.webkit.org/show_bug.cgi?id=106879

        Reviewed by Dimitri Glazkov.

        Introduces a MatchRequest which groups all request parameters to match CSS rules.

        Factoring, no change in behavior.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::collectMatchingRulesForRegion):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::matchHostRules):
        (WebCore::StyleResolver::matchAuthorRules):
        (WebCore::StyleResolver::matchUserRules):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::MatchRequest::MatchRequest):
        (MatchRequest):
        (StyleResolver):

2013-01-15  Simon Fraser  <simon.fraser@apple.com>

        Add the ability for a RenderLayerBacking to have a layer that renders backgrounds.
        https://bugs.webkit.org/show_bug.cgi?id=106961

        Reviewed by Dean Jackson.

        In some cases we need a compositing layer to render its background into
        a separate GraphicsLayer (e.g. for background-attachment: fixed in some scenarios).
        
        To support this, have RenderLayer optionally create a GraphicsLayer for the background.
        Currently nothing causes background layers to get created.
        
        Having a background layer requires that we add an additional containment layer
        which encloses the background, primary and foreground layers, since the 
        background layer has to be composited behind the primary content. This containment
        layer gets any transform, including page scale on the RenderView's layer.
        
        No new tests; there's no way to create a background layer yet. This was tested during
        development by forcing a background layer.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDebugIndicators): Show borders on both new layers
        and repaint counters on the background layer.
        (WebCore::RenderLayerBacking::destroyGraphicsLayers): Clear the two new layers.
        (WebCore::RenderLayerBacking::updateTransform): If we have a containment layer, it
        takes the transform (and clear the transform on the primary layer).
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Make the background
        layer if we need one (currently never).
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Position and size
        the containment layer if we have one. If we do, then the m_graphicsLayer will
        be at 0,0 in that containment layer. The background layer is also sized similarly
        to the foreground layer.
        (WebCore::RenderLayerBacking::updateInternalHierarchy): Adapt to the new hierarchy
        with containment and background layers if we have them.
        (WebCore::RenderLayerBacking::updateBackgroundLayer): Here's where we create the background
        and containment layers.
        (WebCore::RenderLayerBacking::childForSuperlayers): If we have a containment layer, that's
        what gets attached to our parent.
        (WebCore::RenderLayerBacking::getCurrentTransform): The containment layer gets the transform
        if we have one, so check that here.
        (WebCore::RenderLayerBacking::backingStoreMemoryEstimate):
        (WebCore::RenderLayerBacking::reportMemoryUsage):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::deviceOrPageScaleFactorChanged): We need to start notifying
        about page/device scale on the containment layer if there is one (since it takes page scale), so
        use childForSuperlayers() rather than just getting the primary layer.

2013-01-15  Pan Deng  <pan.deng@intel.com>

        Remove Key3 and Challenge Response fields from Websocket implementation and Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=105738.

        Reviewed by Kent Tamura.

        Key3 and Challenge Response fields were obsoleted in IETF websocket spec, this patch removes related
        code in Websocket and Web Inspector

        No new tests as no new functionality added.

        * Modules/websockets/WebSocketHandshakeRequest.cpp: remove Key3 related code
        * Modules/websockets/WebSocketHandshakeRequest.h: 
        (WebSocketHandshakeRequest):
        * Modules/websockets/WebSocketHandshakeResponse.cpp: remove Challenge response related code
        * Modules/websockets/WebSocketHandshakeResponse.h: 
        (WebSocketHandshakeResponse):
        * inspector/Inspector.json: remove Key3 and Challenge response fields definition
        * inspector/InspectorResourceAgent.cpp: remove Key3 and Challenge response field from inspector agent
        (WebCore):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        * inspector/front-end/NetworkManager.js: 
        (WebInspector.NetworkDispatcher.prototype.webSocketWillSendHandshakeRequest): 
        (WebInspector.NetworkDispatcher.prototype.webSocketHandshakeResponseReceived): 
        * inspector/front-end/RequestHeadersView.js: remove Key3 and Challenge response item from front-end.
        (WebInspector.RequestHeadersView.prototype._refreshRequestHeaders):
        (WebInspector.RequestHeadersView.prototype._refreshResponseHeaders):
        (WebInspector.RequestHeadersView.prototype._refreshHeaders):

2013-01-15  Antti Koivisto  <antti@apple.com>

        ASSERT(!m_queue.killed() && m_threadID) hit in StorageThread::scheduleTask on low memory warning
        https://bugs.webkit.org/show_bug.cgi?id=106960

        Reviewed by Mark Rowe.

        We were scheduling a memory clearing task to terminated StorageThreads.
        
        Remove thread from the active thread list when terminate is scheduled. Add when thread is started.

        * storage/StorageThread.cpp:
        (WebCore::activeStorageThreads):
        (WebCore::StorageThread::StorageThread):
        (WebCore::StorageThread::~StorageThread):
        (WebCore::StorageThread::start):
        (WebCore::StorageThread::terminate):
        (WebCore::StorageThread::releaseFastMallocFreeMemoryInAllThreads):

2013-01-15  Luke Macpherson   <macpherson@chromium.org>

        Don't do indiscriminate cast & call in StylePropertySet::PropertyReference::cssName() on release builds.
        https://bugs.webkit.org/show_bug.cgi?id=106867

        Reviewed by Darin Adler.

        Check CSSValue::isVariableValue() before casting to CSSVariableValue.

        Covered by existing variables tests.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::PropertyReference::cssName):

2013-01-15  Emil A Eklund  <eae@chromium.org>

        [Sub pixel layout] RTL cells with padding wraps
        https://bugs.webkit.org/show_bug.cgi?id=106843

        Reviewed by Levi Weintraub.
        
        At certain zoom levels table cells with padding wraps for rtl
        content.

        Test: fast/sub-pixel/table-rtl-padding.html

        * rendering/RenderTable.h: Override paddingStart/End to return
        integer values for padding as we do elsewhere in the table code.

2013-01-15  Dominic Mazzoni  <dmazzoni@google.com>

        Use-after-free in AXObjectCache::notificationPostTimerFired
        https://bugs.webkit.org/show_bug.cgi?id=106106

        Reviewed by Ryosuke Niwa.

        Fixes a crash that occurs when a Node is adopted by another document,
        in particular one that isn't part of the page, and then deleted,
        which wasn't triggering the code that removed the Node from
        AXObjectCache. Now, a Node is removed from the AXObjectCache whenever
        its Document changes.

        Test: accessibility/crash-adopt-node-from-new-document.html

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

2013-01-15  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        Add Canvas blend modes to Cairo
        https://bugs.webkit.org/show_bug.cgi?id=105074

        Reviewed by Martin Robinson.

        Blend mode implementation for cairo. If BlendMode is normal, use
        CompositeOperator; otherwise, consider CompositeOperator is
        source-over.

        Add toCairoOperator(BlendMode) to translate BlendMode to matching
        cairo_operator_t. 

        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::toCairoOperator):
        * platform/graphics/cairo/CairoUtilities.h:
        (WebCore):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):

2013-01-15  Dima Gorbik  <dgorbik@apple.com>
        Implement matching by the voice attribute for WebVTT ::cue pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=106762

        Reviewed by Eric Carlson.

        Implemented matching cue WebVTT elements by a voice attribute by adding a WebVTT specific voice attribute.
        For DOM trees title attribute is used instead as this is required by specs.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::copyWebVTTNodeToDOMTree): set a title argument instead of a voice attribute for the DOM tree.
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::voiceAttributeName):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::constructTreeFromToken):

2013-01-15  Simon Fraser  <simon.fraser@apple.com>

        Some ScrollingCoördinator-related cleanup in RenderLayerBacking
        https://bugs.webkit.org/show_bug.cgi?id=106950

        Reviewed by Beth Dakin.
        
        Wrap up code that gets the ScrollingCoordinator into a utility function.
        Pull code out of updateGraphicsLayerGeometry() that registers layers with
        the ScrollingCoordinator, for cleanliness.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::scrollingCoordinatorFromLayer):
        (WebCore::RenderLayerBacking::adjustTileCacheCoverage):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::registerScrollingLayers):
        (WebCore::RenderLayerBacking::attachToScrollingCoordinatorWithParent):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

2013-01-15  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=106940
        Suspend CSS animations for background tabs

        Reviewed by Simon Fraser.

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

2013-01-15  Levi Weintraub  <leviw@chromium.org>

        Unreviewed, rolling out r139790.
        http://trac.webkit.org/changeset/139790
        https://bugs.webkit.org/show_bug.cgi?id=106948

        The patch is failing its own test.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::parserAppendChild):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executeParsingBlockingScript):
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::execute):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForLoad):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForStylesheets):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForParsing):
        (WebCore::HTMLScriptRunner::runScript):

2013-01-15  Emil A Eklund  <eae@chromium.org>

        REGRESSION (r121599): incorrect border scaling when zoomed
        https://bugs.webkit.org/show_bug.cgi?id=106944

        Reviewed by Levi Weintraub.
        
        Fix bug in ApplyPropertyComputeLength::applyValue where zooming
        of non-pixel values was incorrect.

        Test: fast/sub-pixel/zoomed-em-border.html

        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyComputeLength::applyValue):

2013-01-15  Simon Fraser  <simon.fraser@apple.com>

        Rename RenderLayerBacking's m_containmentLayer to m_childContainmentLayer to better describe its purpose
        https://bugs.webkit.org/show_bug.cgi?id=106947

        Reviewed by Dean Jackson.
        
        Simple rename of m_containmentLayer to m_childContainmentLayer. I'll
        be adding another "container" layer for background layers shortly,
        and wanted to improve clarity.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::destroyGraphicsLayers):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::updateClippingLayers):
        (WebCore::RenderLayerBacking::parentForSublayers):
        (WebCore::RenderLayerBacking::backingStoreMemoryEstimate):
        (WebCore::RenderLayerBacking::reportMemoryUsage):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::hasClippingLayer):
        (WebCore::RenderLayerBacking::clippingLayer):
        (WebCore::RenderLayerBacking::hasTileCacheFlatteningLayer):
        (WebCore::RenderLayerBacking::tileCacheFlatteningLayer):
        (RenderLayerBacking):

2013-01-15  Enrica Casucci  <enrica@apple.com>

        Add a new set of WebKit2 APIs for text search and
        search results management.
        https://bugs.webkit.org/show_bug.cgi?id=106834.
        <rdar://problem/12597159>

        Reviewed by Simon Fraser.
        
        Adding new API to perform text search in WebKit2 without using
        the stock UI. The new interface provides all the information
        necessary to write a custom UI for search.

        Added new TextWebKitAPI test.

        * WebCore.exp.in: Added new exported methods.
        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText): Added new parameter to store
        all the ranges relative to the matches found.
        * editing/Editor.h: Modified the interface of countMatchesForText and removed
        the other definition of countMatchesForText with a different signature.
        * page/Page.cpp:
        (WebCore::Page::findStringMatchingRanges): Added.
        (WebCore::Page::markAllMatchesForText): Changed to use the new unified
        countMatchesForText.
        * page/Page.h:

2013-01-15  Alexandru Chiculita  <achicu@adobe.com>

        [Compositor] Do not disable overlap testing for layers in front of 3D transformed layers
        https://bugs.webkit.org/show_bug.cgi?id=106721

        Reviewed by Simon Fraser.

        RenderLayerCompositor is checking for overlapping layers and tries to figure out all the layers that need
        to be drawn using composited layers. It doesn't know anything about animations yet and it only works with "start"
        and "end" states. However, it knows that animations might happen, so in that cases it will avoid to do any optimizations,
        as layers might get moved.

        The overlapping layers optimization was also disabled for 3D layers. However, 3D layers can be computed in WebKit and 
        can be checked for overlap using just the "start"/"stop" states. In this patch I enable that optimization for 3D layers, too.
        The result is that more layers are drawn in software mode now, so I've updated a couple of test results.

        Tests: compositing/layer-creation/overlap-transformed-3d.html
               compositing/layer-creation/overlap-transformed-preserved-3d.html

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

2013-01-15  Elliott Sprehn  <esprehn@gmail.com>

        HTML parser should queue MutationRecords for its operations
        https://bugs.webkit.org/show_bug.cgi?id=89351

        Reviewed by Eric Seidel.

        Generate mutation records inside the parser. This is done by using a
        ChildListMutationScope in the ContainerNode::parser* methods and then
        adding delivery before each <script> element would be processed by
        the parser.

        Test: fast/dom/MutationObserver/parser-mutations.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::parserAppendChild):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executeParsingBlockingScript):
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::execute):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForLoad):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForStylesheets):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForParsing):
        (WebCore::HTMLScriptRunner::runScript):

2013-01-15  Ojan Vafai  <ojan@chromium.org>

        Unreviewed, rolling out r139782.
        http://trac.webkit.org/changeset/139782
        https://bugs.webkit.org/show_bug.cgi?id=106939

        Broke preferred widths on list markers.

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::computePreferredLogicalWidths):

2013-01-15  Elliott Sprehn  <esprehn@chromium.org>

        Heap-use-after-free in WebCore::RenderObject::willBeRemovedFromTree
        https://bugs.webkit.org/show_bug.cgi?id=106384

        Reviewed by Abhishek Arya.

        Always walk up from beforeChild until the parent() is the owner of the
        child list, otherwise we can end up in situations where
        newChild->parent() == owner but newChild->nextSibling()->parent() != owner
        which is a recipe for security bugs. Previously we only walked up through
        anonymous blocks, but missed anonymous inline blocks like those generated
        by <ruby>.

        Test: fast/css-generated-content/bug-106384.html

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::insertChildNode):

2013-01-15  Ojan Vafai  <ojan@chromium.org>

        Remove bogus assert added in http://trac.webkit.org/changeset/139772.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::computePreferredLogicalWidths):

2013-01-15  Ojan Vafai  <ojan@chromium.org>

        Moving updating of margins from computePreferredLogicalWidths to layout
        https://bugs.webkit.org/show_bug.cgi?id=106939

        Reviewed by Levi Weintraub.

        The margins don't affect it's preferred width. We should update them
        during layout like we do in other classes (e.g. RenderBlock).

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::computePreferredLogicalWidths):

2013-01-15  Adam Barth  <abarth@webkit.org>

        Generalize DocumentWeakReference into WTF::WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=106854

        Reviewed by Darin Adler.

        This patch replaces DocumentWeakReference with WeakPtr. There should be
        no change in behavior.

        * dom/Document.cpp:
        (WebCore):
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::PerformTaskContext::PerformTaskContext):
        (PerformTaskContext):
        (WebCore::Document::didReceiveTask):
        (WebCore::Document::postTask):
        (WebCore::Document::reportMemoryUsage):
        * dom/Document.h:
        (WebCore):
        (Document):

2013-01-15  James Simonsen  <simonjam@chromium.org>

        [User Timing] INVALID_ACCESS_ERR should be thrown if measuring from a 0 Nav Timing value
        https://bugs.webkit.org/show_bug.cgi?id=106935

        Reviewed by Tony Gentilcore.

        Test: http/tests/w3c/webperf/submission/Intel/user-timing/test_user_timing_measure_exception.html

        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::findExistingMarkStartTime):

2013-01-15  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Rename the [add|remove]Track callbacks to [add|remove]RemoteTrack for clarity
        https://bugs.webkit.org/show_bug.cgi?id=106791

        Reviewed by Adam Barth.

        No tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addRemoteTrack):
        (WebCore::MediaStream::removeRemoteTrack):
        * Modules/mediastream/MediaStream.h:
        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore::MediaStreamCenter::addMediaStreamTrack):
        (WebCore::MediaStreamCenter::removeMediaStreamTrack):
        * platform/mediastream/MediaStreamDescriptor.h:
        (MediaStreamDescriptorClient):

2013-01-15  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Move SocketStreamHandle and SocketStreamHandleInternal to WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=106899

        Reviewed by Adam Barth.

        Part of a larger refactoring series; see tracking bug 106829.

        * WebCore.gypi:
        * platform/network/chromium/SocketStreamHandle.cpp: Copied from Source/WebKit/chromium/src/SocketStreamHandle.cpp.
        (WebCore::SocketStreamHandleInternal::send):
        (WebCore::SocketStreamHandleInternal::didOpenStream):
        (WebCore::SocketStreamHandleInternal::didSendData):
        (WebCore::SocketStreamHandleInternal::didReceiveData):
        (WebCore::SocketStreamHandleInternal::didClose):
        (WebCore::SocketStreamHandleInternal::didFail):
        * platform/network/chromium/SocketStreamHandleInternal.h: Copied from Source/WebKit/chromium/src/SocketStreamHandleInternal.h.

2013-01-15  Ojan Vafai  <ojan@chromium.org>

        RenderText::computePreferredLogicalWidths does not need to be public
        https://bugs.webkit.org/show_bug.cgi?id=106934

        Reviewed by Levi Weintraub.

        * rendering/RenderCounter.h:
        Add OVERRIDE keyword.
        * rendering/RenderText.h:
        Make protected.

2013-01-15  Ojan Vafai  <ojan@chromium.org>

        Cleanup visibility of some computePreferredLogicalWidths calls
        https://bugs.webkit.org/show_bug.cgi?id=106933

        Reviewed by Levi Weintraub.

        No need for these to be public.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::computePreferredLogicalWidths):
        This should never get called in practice. Add an assert to that effect.

        * rendering/RenderGrid.h:
        (RenderGrid):
        * rendering/RenderReplica.h:
        (RenderReplica):
        * rendering/RenderScrollbarPart.h:
        (RenderScrollbarPart):

2013-01-13  Dirk Schulze  <dschulze@adobe.com>

        [CSS Filters] brightness() function doesn't work as specified
        https://bugs.webkit.org/show_bug.cgi?id=106674

        Reviewed by Dean Jackson.

        The brightness filter implementation modified the intercept instead of the slope on
        the feComponentTransfer function. The passed amount acts as multiplier for each
        color chanel now.

        Existing tests cover the changes and were updated.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBuiltinFilterArguments):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setFilters):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):

2013-01-15  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable Performance Timeline, Resource Timing, Navigation Timing features
        https://bugs.webkit.org/show_bug.cgi?id=106197

        Reviewed by Martin Robinson.

        No new tests - existing layout tests are being unskipped, only a few fail
        (but their failures are of cross-platform nature).

        * GNUmakefile.features.am.in: Add feature defines for all three features.
        They are disabled by default for now.
        * GNUmakefile.list.am: Add missing build targets.
        * bindings/gobject/GNUmakefile.am: Ditto.
        * bindings/js/JSPerformanceEntryCustom.cpp: Added the necessary custom bindings.
        Mimics the custom V8 bindings.
        (WebCore):
        (WebCore::toJS):

2013-01-15  Alexis Menard  <alexis@webkit.org>

        Unprefixed transitionend event doesn't seem to be implemented, which breaks many sites
        https://bugs.webkit.org/show_bug.cgi?id=105647

        Reviewed by Julien Chaffraix.

        Add support for transitionend event delivery as part as the unprefixing
        work on CSS Transitions. This patch adds some code in EventTarget to
        figure out if the current event to dispatch has a prefixed version or
        not. Then from the list of listeners we deduce which event should be delivered
        (prefixed or unprefixed).

        In the case of the CSS Transitions, WebKit will now behave as follow :
        if an event listener is attached to the prefixed version of the
        transition end event then only the prefixed event will be send.
        If an event listener is attached to the unprefixed version
        of the transition end event then only the unprefixed event will be
        send. If there are event listeners on both unprefixed and prefixed
        events then only the unprefixed event will be send.

        The behavior was discussed here :
        http://lists.webkit.org/pipermail/webkit-dev/2013-January/023301.html.

        Tests: transitions/transition-end-event-unprefixed-01.html
               transitions/transition-end-event-unprefixed-02.html

        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded): Register the prefixed
        listener too as transitionend listeners so that we properly dispatch
        events for them.
        * dom/EventNames.h:
        (WebCore): Add the new transitionend name.
        * dom/EventTarget.cpp:
        (WebCore::createMatchingPrefixedEvent):
        (WebCore::prefixedType):
        (WebCore::EventTarget::fireEventListeners): Find out if somebody is
        listening for unprefixed events, if so we always send the unprefixed
        event, if not then we create a prefixed event and send it.
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent): Always create by
        default unprefixed events.

2013-01-15  Tony Gentilcore  <tonyg@chromium.org>

        Make AtomicMarkupTokenBase use a bare UChar* for external characters
        https://bugs.webkit.org/show_bug.cgi?id=106919

        Reviewed by Eric Seidel.

        This allows an arbitrary backing for external characters which is necessary for the threaded HTML parser.

        No new tests because no new functionality.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
        (WebCore::AtomicMarkupTokenBase::characters):
        (AtomicMarkupTokenBase):
        (WebCore::AtomicMarkupTokenBase::charactersLength):
        (WebCore::AtomicMarkupTokenBase::clearExternalCharacters):
        * xml/parser/XMLTreeBuilder.cpp:
        (WebCore::XMLTreeBuilder::processCharacter):

2013-01-15  Arko Saha  <arko@motorola.com>

        Microdata: propertiesCollection[name] should return undefined if item doesn't have a property named 'name'
        https://bugs.webkit.org/show_bug.cgi?id=106849

        Reviewed by Kentaro Hara.

        We should return undefined if hasNamedItem() is false.

        Test: fast/dom/MicroData/properties-collection-namedgetter-with-invalid-name.html

        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::V8HTMLCollection::namedPropertyGetter):

2013-01-15  Michael Pruett  <michael@68k.org>

        [GTK] Fix build after r139665
        https://bugs.webkit.org/show_bug.cgi?id=106917

        Reviewed by Dean Jackson.

        * GNUmakefile.list.am:

2013-01-15  Antti Koivisto  <antti@apple.com>

        Move parent pointer from TreeShared to subclass
        https://bugs.webkit.org/show_bug.cgi?id=106910

        Reviewed by Darin Adler.

        This simplifies both TreeShared and clients, and makes code dealing with parents more understandable in general.

        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/Node.cpp:
        (WebCore::Node::reportMemoryUsage):
        * dom/Node.h:
    
            Add m_parentOrHostNode variable (matching the accessor names).

        (Node):
        (WebCore::Node::hasTreeSharedParent):
        (WebCore::Node::parentNode):
        (WebCore::Node::setParentOrHostNode):
        (WebCore::Node::parentOrHostNode):
        * platform/TreeShared.h:
        (WebCore):
        (WebCore::TreeShared::TreeShared):
        (WebCore::TreeShared::deref):
        
            Call subclass hasTreeSharedParent() to figure out if it is time to delete.

        (TreeShared):

            Remove parent pointer and accessors.
            Remove ParentNodeType template parameter.
            Remove now unnecessay reportMemoryUsage().

        (WebCore::adopted):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        * svg/SVGElementInstance.h:
        
            Add m_parentInstance variable.

        (WebCore::SVGElementInstance::setParentOrHostNode):
        (WebCore::SVGElementInstance::parentNode):
        (SVGElementInstance):
        (WebCore::SVGElementInstance::hasTreeSharedParent):

2013-01-15  Simon Fraser  <simon.fraser@apple.com>

        Allow tiled WKViews to have transparent backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=106400

        Reviewed by Anders Carlsson.
        
        When WKViews were set to have transparent backgrounds, they still
        obscured content behind the view, for several reasons.
        
        First, when in tiled scrolling mode, WKView set the background
        of its layer to opaque white. Fix by using the clearColor (effectively
        removing the background color) if the view has a non-opaque background.
        
        Second, RenderLayerBacking just looked at FrameViews's isTransparent()
        when deciding to make TileCache tiles non-opaque, but it also needs to
        consider FrameViews with a non-opaque base background color. The
        same logic was necessary to avoid setting an opaque white background
        color on the TileCache layer.
        
        Finally, for views with non-opaque backgrounds, we don't want to display
        linen, so RenderLayerCompositor::requiresOverhangAreasLayer() was changed
        to return false in that case.
        
        View transparency is not testable in layout tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::hasOpaqueBackground):
        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateBackgroundColor):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresOverhangAreasLayer):

2013-01-15  Ojan Vafai  <ojan@chromium.org>

        RenderView does not need to override computePreferredLogicalWidth
        https://bugs.webkit.org/show_bug.cgi?id=106852

        Reviewed by Levi Weintraub.

        Calling minPreferredLogicalWidth calls computePreferredLogicalWidth,
        which happens a few lines later in layoutWithFlattening. No need
        to call it explicitly.

        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening):
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:

2013-01-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed, remove file that was accidentally added to the wrong patch.

        * inspector/front-end/FileSystemWorkspaceProvider.js: Removed.

2013-01-15  Florin Malita  <fmalita@chromium.org>

        [Chromium] Incorrect opaque region tracking for PlatformContextSkia::drawRRect
        https://bugs.webkit.org/show_bug.cgi?id=106898

        Reviewed by Stephen White.

        Since drawRRect() doesn't cover the whole bounding rect, it needs to pass a didDrawBounded
        notification down to the opaque region tracker (instead of didDrawRect as it currently
        does).

        Test: platform/chromium/compositing/rounded-corners.html

        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::drawRRect):

2013-01-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] WebGL does not require accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=106892

        Reviewed by Jocelyn Turcotte.

        Allow the creation of WebGL canvas even when accelerated compositing is not enabled.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2013-01-15  Andrey Lushnikov  <lushnikov@chromium.org>

        Web Inspector: refactor DefaultTextEditor's paintLine method
        https://bugs.webkit.org/show_bug.cgi?id=106893

        Reviewed by Pavel Feldman.

        Move render ranges functionality out of paintLine method into separate subroutine.

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._renderRanges): Added.
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._insertSpanBefore):

2013-01-15  Elliott Sprehn  <esprehn@gmail.com>

        display:inline's hover behavior is not applied to ::before and ::after pseudo elements
        https://bugs.webkit.org/show_bug.cgi?id=91723

        Reviewed by Eric Seidel.

        When hovering over the anonymous text renderers inside :before and :after
        we would correctly detect a hit in InlineTextBox::nodeAtPoint, but would
        then fail to set the correct node for the hit test because in
        RenderObject::updateHitTestResult node() is null. Instead we should walk
        up the render tree to the PseudoElement and treat it as if we hit that.

        Test: fast/css-generated-content/hover-inline.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateHitTestResult):

2013-01-15  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurface: Canvas with WebGL content is painted off by one pixel
        https://bugs.webkit.org/show_bug.cgi?id=106446

        When painting to TextureMapper the provided targetRect is in contents
        coordinate system. This leads to an off by one pixel error when painting
        outlines of 1px.
        This needs to be taken into account in the transformation matrix
        and in the TextureMapperGL::drawTexture call.

        Test: fast/canvas/webgl/webgl-composite-modes.html

        Reviewed by Noam Rosenthal.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        * platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):

2013-01-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in SerializedScriptValue methods
        https://bugs.webkit.org/show_bug.cgi?id=106800

        Reviewed by Adam Barth.

        SerializedScriptValue methods are used by both V8 bindings
        and WebCore. So they should support both an Isolate-version
        method and an non-Isolate version method.

        There are two ways to accomplish that:

        [1] Use an optional Isolate parameter.

        [2] Implement two versions and delegate the non-Isolate
        version method to the Isolate version method.

        I would prefer the approach [2], because I'd like to statically
        make sure that we never pass a 0 Isolate. If we take the approach
        [1], we need to insert ASSERT(isolate) here and there.

        This patch implements the approach [2].

        No tests. No change in behavior.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        (WebCore):
        (WebCore::SerializedScriptValue::nullValue):
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::booleanValue):
        (WebCore::SerializedScriptValue::numberValue):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/v8/SerializedScriptValue.h:
        (SerializedScriptValue):

2013-01-15  Dongwoo Joshua Im  <dw.im@samsung.com>

        [CSS] Rename the enum, from "ETextAlignLast" to "TextAlignLast"
        https://bugs.webkit.org/show_bug.cgi?id=106887

        Reviewed by Alexis Menard.

        No new tests are added since there is no behavior changes.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextAlignLast):
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData):

2013-01-15  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Fixing crashing bug in MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=106886

        Reviewed by Eric Seidel.

        Fixing crashing bug during destruction.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::contextDestroyed):

2013-01-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][CSS Shaders] Make custom filter render in Wk1 mode
        https://bugs.webkit.org/show_bug.cgi?id=101532

        Reviewed by Noam Rosenthal.

        Handle ValidatedCustomFilterOperations which are used by WebKit1. To keep the cache of compiled programs working, 
        the cache has been updated to use CustomFilterProgramInfo as a hash key. CustomFilterProgramInfo is an existing
        class specifically designed for this purpose.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::getPassesRequiredForFilter):
        (WebCore::TextureMapperGL::removeCachedCustomFilterProgram):
        (WebCore::TextureMapperGL::drawUsingCustomFilter):
        (WebCore::BitmapTextureGL::applyFilters):
        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL):

2013-01-15  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] introduce CallArgument type into the protocol
        https://bugs.webkit.org/show_bug.cgi?id=106640

        Reviewed by Yury Semikhatsky.

        CallArgument type abstraction to describe arguments of a canvas context call.
        Drive-by: Introduce a CanvasContext to fix the wrong contextId value in the protocol.
        The contextId should point to the Resource that represents a context (2D or 3D canvas).

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/front-end/CanvasProfileView.js:

2012-12-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Support inspector file system access with isolated file system through InspectorFrontendHost.
        https://bugs.webkit.org/show_bug.cgi?id=105727

        Reviewed by Pavel Feldman.

        File system access through isolated file system is implemented in inspector.
        File system access requests are sent through InspectorFrontendHost.
        Introduced IsolatedFileSystemModel encapsulating file system access logic. 
        Introduced FileSystemMapping that provides mapping between workspace uris and file system pathes.
        DOMFileSystem.createIsolatedFileSystem modified to accept optional registeredName parameter.

        * Modules/filesystem/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::createIsolatedFileSystem):
        * Modules/filesystem/DOMFileSystem.h:
        (DOMFileSystem):
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.h:
        (WebCore::InspectorFrontendClientLocal::supportsFileSystems):
        (WebCore::InspectorFrontendClientLocal::requestFileSystems):
        (WebCore::InspectorFrontendClientLocal::addFileSystem):
        (WebCore::InspectorFrontendClientLocal::removeFileSystem):
        (InspectorFrontendClientLocal):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::supportsFileSystems):
        (WebCore):
        (WebCore::InspectorFrontendHost::requestFileSystems):
        (WebCore::InspectorFrontendHost::addFileSystem):
        (WebCore::InspectorFrontendHost::removeFileSystem):
        (WebCore::InspectorFrontendHost::isolatedFileSystem):
        * inspector/InspectorFrontendHost.h:
        (WebCore):
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/compile-front-end.py:
        * inspector/front-end/FileSystemMapping.js: Added.
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.fileSystemsLoaded):
        (InspectorFrontendAPI.fileSystemRemoved):
        (InspectorFrontendAPI.fileSystemAdded):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.supportsFileSystems):
        (.WebInspector.InspectorFrontendHostStub.prototype.requestFileSystems):
        (.WebInspector.InspectorFrontendHostStub.prototype.addFileSystem):
        (.WebInspector.InspectorFrontendHostStub.prototype.removeFileSystem):
        (.WebInspector.InspectorFrontendHostStub.prototype.isolatedFileSystem):
        * inspector/front-end/IsolatedFileSystemModel.js: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/externs.js:
        (DOMFileSystem):
        (InspectorFrontendHostAPI.prototype.supportsFileSystems):
        (InspectorFrontendHostAPI.prototype.requestFileSystems):
        (InspectorFrontendHostAPI.prototype.addFileSystem):
        (InspectorFrontendHostAPI.prototype.removeFileSystem):
        (InspectorFrontendHostAPI.prototype.isolatedFileSystem):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2013-01-15  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Add error handling to carefully manage Window backing pixmaps.
        https://bugs.webkit.org/show_bug.cgi?id=106582

        Reviewed by Kenneth Rohde Christiansen.

        We use XCompositeNameWindowPixmap to create a pixmap that serves as a reference to
        the off-screen storage for a Window Handle. We expect the Window to be valid and
        the created glx pixmap to be a valid drawable. This may not be true always.
        This patch adds support for X Error checks and handles the generated errors.

        Covered by existing WebGL layout tests.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore):
        (WebCore::handleXPixmapCreationError):
        (ScopedXPixmapCreationErrorHandler):
        (WebCore::ScopedXPixmapCreationErrorHandler::ScopedXPixmapCreationErrorHandler):
        (WebCore::ScopedXPixmapCreationErrorHandler::~ScopedXPixmapCreationErrorHandler):
        (WebCore::ScopedXPixmapCreationErrorHandler::isValidOperation):
        Helper Class to catch XErrors.

        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createPixmap): Added support to check and handle generated XErrors.
        (WebCore::GraphicsSurfacePrivate::findFBConfigWithAlpha):
        (WebCore::GraphicsSurfacePrivate::clear): Destroys GL Resources.
        (GraphicsSurfacePrivate):

2013-01-15  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] [WebGL] Minor cleanup in PlatformContext.
        https://bugs.webkit.org/show_bug.cgi?id=106758

        Reviewed by Kenneth Rohde Christiansen.

        We currently have different implementations of CurrentContextWrapper for EGL and GLX.
        This patch cleans up the code to use same implementation for both the backends.

        * platform/graphics/opengl/GLPlatformContext.cpp:
        (GLCurrentContextWrapper):
        (WebCore::GLCurrentContextWrapper::GLCurrentContextWrapper):
        (WebCore::GLCurrentContextWrapper::~GLCurrentContextWrapper):

        Common implementation for both EGL and GLX.
        (WebCore::createOffScreenContext):
        (WebCore::GLPlatformContext::createContext):
        * platform/graphics/surfaces/egl/EGLContext.cpp:
        * platform/graphics/surfaces/egl/EGLContext.h:
        * platform/graphics/surfaces/glx/GLXContext.h:

        Removed code related to CurrentContextWrapper.

2013-01-14  Ryosuke Niwa  <rniwa@webkit.org>

        platform/mac/accessibility/progressbar.html fails on Mac WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=106850

        Reviewed by Chris Fleizach.

        The bug was caused by some callers of supportsFocus directly calling that of Node.
        Fixed the bug by calling HTMLElement's so that the virtual function on Element gets
        called as needed.

        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::supportsFocus):
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::supportsFocus):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::supportsFocus):

2013-01-14  Dima Gorbik  <dgorbik@apple.com>

        Implement ID selector matching for the WebVTT ::cue pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=105481

        Reviewed by Eric Carlson.

        Implemented matching cue WebVTT elements by an identifier. Identifiers of all WebVTT nodes in the rendering tree for 
        a given cue are set to match the cue identifier.

        Existing tests were modified to cover this case.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::markFutureAndPastNodes):

2013-01-14  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Use explicit WebKit prefixes in BlobRegistryProxy
        https://bugs.webkit.org/show_bug.cgi?id=106859

        Reviewed by Adam Barth.

        As requested in https://bugs.webkit.org/show_bug.cgi?id=106831#c2

        * platform/network/chromium/BlobRegistryProxy.cpp:
        (WebCore::BlobRegistryProxy::registerBlobURL):

2013-01-14  Max Vujovic  <mvujovic@adobe.com>

        [ANGLE] Update ANGLE in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106274

        Unreviewed build fix for GTK after http://trac.webkit.org/changeset/139702

        * GNUmakefile.am:

2013-01-14  Dean Jackson  <dino@apple.com>

        Yet another unreviewed attempted QT build fix, this time because
        it's falling over on Filters.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore):
        (WebCore::RenderSnapshottedPlugIn::paintReplacedSnapshotWithLabel):

2013-01-14  Dean Jackson  <dino@apple.com>

        Unreviewed EFL build fix.

        * CMakeLists.txt:

2013-01-14  Dean Jackson  <dino@apple.com>

        Blur the label background of a snapshotted plugin
        https://bugs.webkit.org/show_bug.cgi?id=106630

        Reviewed by Simon Fraser.

        When we are showing a label indicating the plugin has been snapshotted,
        slightly blur the snapshot behind the label so that it is more clear. I expect
        that if/when other ports pick up this code, we'll need to separate the
        UI treatment somewhat, but this is ok for a first step.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (RenderSnapshottedPlugInBlurFilter): Private class to use FEGaussianBlur to blur an image.
        (WebCore::RenderSnapshottedPlugInBlurFilter::create):
        (WebCore::RenderSnapshottedPlugInBlurFilter::setSourceImageRect):
        (WebCore::RenderSnapshottedPlugInBlurFilter::sourceImageRect):
        (WebCore::RenderSnapshottedPlugInBlurFilter::filterRegion):
        (WebCore::RenderSnapshottedPlugInBlurFilter::output):
        (WebCore::RenderSnapshottedPlugInBlurFilter::RenderSnapshottedPlugInBlurFilter):
        (WebCore::RenderSnapshottedPlugInBlurFilter::apply):
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn): New member variable to hold a cached version of a preblurred snapshot.
        (WebCore::RenderSnapshottedPlugIn::~RenderSnapshottedPlugIn): Remember to remove the preblurred image from the cache.
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot): Zero the preblurred version if it exists.
        (WebCore::RenderSnapshottedPlugIn::paintReplaced): Either paint snapshot or blurred snapshot with label.
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot): New method to paint a full sized snapshot.
        (WebCore::RenderSnapshottedPlugIn::paintReplacedSnapshot):
        (WebCore::snapshottedPluginImageForLabelDisplay): Static function to produce the blurred snapshot.
        (WebCore::RenderSnapshottedPlugIn::paintReplacedSnapshotWithLabel): Calls paintSnapshot with the blurred snapshot on Mac.
        * rendering/RenderSnapshottedPlugIn.h:

2013-01-14  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Move BlobRegistryProxy into WebCore
        https://bugs.webkit.org/show_bug.cgi?id=106831

        Reviewed by Adam Barth.

        Part of a larger refactoring series to remove layering violations
        in Chromium. See tracking bug 106829.

        * WebCore.gypi:
        * platform/network/chromium/BlobRegistryProxy.cpp: Added.
        (WebCore):
        (WebCore::blobRegistry):
        (WebCore::BlobRegistryProxy::BlobRegistryProxy):
        (WebCore::BlobRegistryProxy::registerBlobURL):
        (WebCore::BlobRegistryProxy::unregisterBlobURL):
        * platform/network/chromium/BlobRegistryProxy.h: Added.
        (WebCore):
        (BlobRegistryProxy):
        (WebCore::BlobRegistryProxy::loadResourceSynchronously):
        (WebCore::BlobRegistryProxy::~BlobRegistryProxy):

2013-01-14  Levi Weintraub  <leviw@chromium.org>

        Rolling out r139618. Appears to be causing sporadic crashes on Debug bots.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::processTrack):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::readyState):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:

2013-01-14  Levi Weintraub  <leviw@chromium.org>

        Rolling out r139678. This triggered a number of WebAudio crashes on Debug bots.

        * platform/audio/chromium/AudioDestinationChromium.cpp:
        (WebCore::AudioDestinationChromium::AudioDestinationChromium):

2013-01-09  Levi Weintraub <leviw@chromium.org>

        Rolling out r139683. It broke a bunch of webkit_unit_tests.

2013-01-14  Ojan Vafai  <ojan@chromium.org>

        RenderListItem does not need to override computePreferredLogicalWidth
        https://bugs.webkit.org/show_bug.cgi?id=106839

        Reviewed by Levi Weintraub.

        Apparently there was a time when the list marker was considered part of
        the list item's preferred width, but that is no longer the case.
        This code was added in r3421. The code around preferred widths has change
        a lot since then.

        * rendering/RenderListItem.cpp:
        * rendering/RenderListItem.h:

2013-01-13  Dima Gorbik  <dgorbik@apple.com>

        Implement element type selectors for the WebVTT ::cue pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=105480

        Reviewed by Antti Koivisto.

        Implemented tag matching for the WebVTT specific tags "c" and "v". All common html tags like "b" and "i" are 
        handled without any changes to the code. Creating a rendering tree and DOM tree now use different code paths. 
        They both are made by cloning and modifying the tree produced by the parser. Voice tags now use spans for both 
        rendering and DOM trees to conform to specs. Since this changes a lot of code little refactoring has been
        done. Removed m_hasInnerTimestamps since it is no longer needed, it doesn't affect anything. m_documentFragment 
        was renamed to m_webVTTNodeTree.

        Existing tests were modified to cover this case.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::TextTrackCue):
        (WebCore::TextTrackCue::setText): rename m_documentFragment to m_webVTTNodeTree
        (WebCore::TextTrackCue::createWebVTTNodeTree): parse the cue if it hasn't been parsed before.
        (WebCore::TextTrackCue::copyWebVTTNodeToDOMTree): clone and prepare a node for using in the DOM tree according to specs.
        (WebCore::TextTrackCue::getCueAsHTML): get a DOM tree for the cue.
        (WebCore::TextTrackCue::createCueRenderingTree): create a rendering tree (main tree is just being cloned for now).
        (WebCore::TextTrackCue::markFutureAndPastNodes): tightening the argument type.
        (WebCore::TextTrackCue::updateDisplayTree):
        (WebCore::TextTrackCue::getDisplayTree): code cleanup, removed m_hasInnerTimeStamps.
        * html/track/TextTrackCue.h:
        (WebCore::TextTrackCue::voiceElementTagName):
        (TextTrackCue):
        (WebCore::TextTrackCue::classElementTagName):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::constructTreeFromToken): type of the newly created elements was changed to Element to avoid hitting 
        an assertion when cloning because a cloned element will not have HTMLElement type for elements with "v" and "c" tag.

2013-01-14  Xianzhu Wang  <wangxianzhu@chromium.org>

        Sometimes RenderLayer::updateNeedsCompositedScrolling is not called
        https://bugs.webkit.org/show_bug.cgi?id=106271

        Reviewed by Simon Fraser.

        1. If a layer has no out-of-flow descendant, m_hasOutOfFlowPositionedDescendant won't change and won't trigger updateNeedsCompositedScrolling in updateDescendantDependentFlags. Set m_hasOutOfFlowPositionedDescendantDirty to true and call updateNeedsCompositedScrolling when the dirty flag becomes false from true.
        2. When the content size changes causing change of scrollable status, updateNeedsCompositedScrolling should also be called.

        Test: compositing/overflow/dynamic-composited-scrolling-status.html

        * page/FrameView.cpp:
        (WebCore::FrameView::addScrollableArea): Returns whether the scrollable area has just been newly added.
        (WebCore::FrameView::removeScrollableArea): Returns whether the scrollable area has just been removed.
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Changed the initial value of m_hasOutOfFlowPositionedDescendantDirty to true to make sure m_hasOutOfFlowPositionedDescendant will be updated initially.
        (WebCore::RenderLayer::updateDescendantDependentFlags): Call updateNeedsCompositedScrolling when m_hasOutOfFlowPositionedDescendantDirty is true.
        (RenderLayer::updateScrollableAreaSet): Calls updateNeedsCompositedScrolling() when scrollable status changes.
        * rendering/RenderLayer.h:
        (RenderLayer):

2013-01-14  Ryosuke Niwa  <rniwa@webkit.org>

        EFL build fix after r139681.

        * dom/NodeRareData.h:
        (WebCore::NodeMicroDataTokenLists::NodeMicroDataTokenLists):

2013-01-14  Tien-Ren Chen  <trchen@chromium.org>

        Correct FrameView::scrollableAreaBoundingBox() calculation in the presence of transforms
        https://bugs.webkit.org/show_bug.cgi?id=105075

        Reviewed by Simon Fraser.

        As mentioned by the FIXME comment, we need to ask the renderer for the
        absolute bounding box of a frame for correct transformation.
        This fixes the bug that iframe cannot be scrolled properly when it is
        transformed.

        Tests: scrollingcoordinator/non-fast-scrollable-region-scaled-iframe.html
               scrollingcoordinator/non-fast-scrollable-region-transformed-iframe.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollableAreaBoundingBox):

2013-01-14  Nate Chapin  <japhet@chromium.org>

        Enable reuse of cached main resources
        https://bugs.webkit.org/show_bug.cgi?id=105667

        Reviewed by Antti Koivisto.

        Test: http/tests/cache/cached-main-resource.html

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::hasManifest): Returns true if the <html> element has a non-empty manifest attribute.
        * dom/Document.h:
        (Document):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache): Don't send delegate callbacks for cache hit here, since
            MainResourceLoader will take care of it.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::responseReceived): Don't try to cache loads from the application cache.
        (WebCore::MainResourceLoader::didFinishLoading): Don't try to cache loads from the application cache.
        (WebCore::MainResourceLoader::load): Ensure we create a resource load identifier for cache hits. Also,
            ensure we correctly popualate fragment identifiers in the ResourceRequest reported to DocumentLoader.
        (WebCore::MainResourceLoader::identifier):
        * loader/MainResourceLoader.h: Rename m_substituteDataLoadIdentifier to m_identifierForLoadWithoutResourceLoader
            to better describe when it is used.
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient): Synthesize redirect notifications for cache hits if necessary.
        (WebCore::CachedRawResource::willSendRequest): Note the redirects we received.
        (WebCore::CachedRawResource::canReuse): Don't reuse a resource if the redirect chain included a "Cache-control: no-store".
        * loader/cache/CachedRawResource.h:
        (CachedRawResource):
        (RedirectPair):
        (WebCore::CachedRawResource::RedirectPair::RedirectPair):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClientToSet):: Don't return cached data for a main resource synchronously
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::canReuse):
        (CachedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Permit cache reuse for main resources.
        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-01-11  Ryosuke Niwa  <rniwa@webkit.org>

        Move functions from NodeRareData to ElementRareData and other classes
        https://bugs.webkit.org/show_bug.cgi?id=106679

        Reviewed by Benjamin Poulain.

        Moved tab index related functions from NodeRareData to ElementRareData since only
        HTMLElement uses them, and moved related functions on Node to Element accordingly.

        Also replaced transientMutationObserverRegistry and ensureTransientMutationObserverRegistry
        by ensureMutationObserverData, and moved micro-data related member functions into
        NodeMicroDataTokenLists, and moved NodeMutationObserverData and NodeMicroDataTokenLists
        out of NodeRareData as they're used outside of NodeRareData now.

        The intention is to move more code into NodeMutationObserverData and NodeMicroDataTokenLists
        in the follow up patches so that they can detect the removability of NodeRareData.

        No new tests are added since there should be no behavior changes.

        * dom/Element.cpp:
        (WebCore::Element::clearTabIndexExplicitlyIfNeeded):
        (WebCore::Element::setTabIndexExplicitly):
        (WebCore::Element::tabIndex):
        (WebCore::Element::supportsFocus):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::tabIndex):
        (WebCore::ElementRareData::setTabIndexExplicitly):
        (WebCore::ElementRareData::tabIndexSetExplicitly):
        (WebCore::ElementRareData::clearTabIndexExplicitly):
        * dom/Node.cpp:
        (WebCore::Node::tabIndex):
        (WebCore::Node::supportsFocus):
        (WebCore::Node::mutationObserverRegistry):
        (WebCore::Node::transientMutationObserverRegistry):
        (WebCore::Node::registerMutationObserver):
        (WebCore::Node::registerTransientMutationObserver):
        (WebCore::Node::itemProp):
        (WebCore::Node::setItemProp):
        (WebCore::Node::itemRef):
        (WebCore::Node::setItemRef):
        (WebCore::Node::itemType):
        (WebCore::Node::setItemType):
        * dom/Node.h:
        (Node):
        * dom/NodeRareData.h:
        (NodeMutationObserverData):
        (WebCore::NodeMutationObserverData::create):
        (NodeMicroDataTokenLists):
        (WebCore::NodeMicroDataTokenLists::create):
        (WebCore::NodeMicroDataTokenLists::itemProp):
        (WebCore::NodeMicroDataTokenLists::itemRef):
        (WebCore::NodeMicroDataTokenLists::itemType):
        (NodeRareData):
        (WebCore::NodeRareData::mutationObserverData):
        (WebCore::NodeRareData::ensureMutationObserverData):
        (WebCore::NodeRareData::ensureMicroDataTokenLists):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):

2013-01-14  Ojan Vafai  <ojan@chromium.org>

        Remove unnecessary setNeedsLayoutAndPrefWidthsRecalc from RenderTable
        https://bugs.webkit.org/show_bug.cgi?id=106832

        Reviewed by Levi Weintraub.

        These are both called from locations that either set these bits themselves
        or clearly don't need these bits set (e.g. computePreferredLogicalWidths).

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::appendColumn):

2013-01-14  Chris Rogers  <crogers@google.com>

        Switch AudioDestinationChromium over to new createAudioDevice() method
        https://bugs.webkit.org/show_bug.cgi?id=106816

        Reviewed by James Robinson.

        * platform/audio/chromium/AudioDestinationChromium.cpp:
        (WebCore::AudioDestinationChromium::AudioDestinationChromium):

2013-01-14  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Use a premuliplied color in TextureMapperGL.
        https://bugs.webkit.org/show_bug.cgi?id=105786

        Reviewed by Noam Rosenthal.

        TextureMapperGL always uses a premultiplied color, so we must convert
        an unmultiplied color to a premultiplied color before setting the uniform value of
        colorLocation.

        Test: compositing/background-color/background-color-alpha-with-opacity.html

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::prepareFilterProgram):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::blendWithOpacity):
        (WebCore):
        (WebCore::TextureMapperLayer::paintSelf):
            TextureMapperLayer must not convert solidColor to premultiplied
            color, because TextureMapperImageBuffer expects unmultiplied color.

2013-01-14  Arko Saha  <arko@motorola.com>

        Microdata: REGRESSION(r138725): Causes crash in chromium port
        https://bugs.webkit.org/show_bug.cgi?id=106828

        Reviewed by Ryosuke Niwa.

        We should hold PropertyNodeList in RefPtr<PropertyNodeList>.

        Test: fast/dom/MicroData/propertiescollection-crash.html

        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::V8HTMLCollection::namedPropertyGetter):

2013-01-14  Tien-Ren Chen  <trchen@chromium.org>

        Positioned children of an overflow:visible container should ignore scroll offset when updating layer position
        https://bugs.webkit.org/show_bug.cgi?id=106814

        Reviewed by Simon Fraser.

        This patch fixes a bug in RenderLayer::updateLayerPosition that
        scrollLeft / scrollTop of a block should only be effective when the
        block has overflow clipping. The bug results in rendering artifacts
        and triggers a RenderGeometryMap assertion falure.

        Fixes http://crbug.com/167985

        Test: fast/overflow/overflow-visible-should-ignore-scroll.html

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

2013-01-14  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Remove IDBObjectStore/IndexBackendImpl and support functions
        https://bugs.webkit.org/show_bug.cgi?id=106605

        Remove all uses of IDBObjectStoreBackendInterface and IDBIndexBackend*,
        as they are no longer used after recent refactoring.

        Reviewed by Darin Fisher.

        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBCallbacks.h:
        (WebCore):
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (WebCore):
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBFactoryBackendImpl.h:
        (IDBFactoryBackendImpl):
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        (IDBFactoryBackendInterface):
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBIndexBackendInterface.h: Removed.
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        * Modules/indexeddb/IDBObjectStore.h:
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::makeIndexWriters):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::IndexWriter::IndexWriter):
        (IndexWriter):
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h: Removed.
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        (WebCore):
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2013-01-14  Max Vujovic  <mvujovic@adobe.com>

        [ANGLE] Update ANGLE in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106274

        Reviewed by Dean Jackson.

        Update ANGLE to r1641.

        Update the files used in the EFL and GTK builds.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:

2013-01-14  Julien Chaffraix  <jchaffraix@webkit.org>

        REGRESSION (r132591): Underpainting @ uofmchildrenshospital.org
        https://bugs.webkit.org/show_bug.cgi?id=105861

        Reviewed by David Hyatt.

        Test: fast/repaint/overhanging-float-detach-repaint.html

        The issue comes from overhanging float not contributing to their containing block's
        overflow. This meant that repaint() would ignore them leading to an under-repaint.
        The fix is simple: force all the overhanging floats to repaint themselves.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers):

2013-01-14  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Need to implement ColorWellRole
        https://bugs.webkit.org/show_bug.cgi?id=106756

        Reviewed by Chris Fleizach.

        Maps input type=color to the accessible role ColorWellRole.
        Adds a new accessor to AccessibilityObject to get the color
        value in a cross-platform way that doesn't require parsing.

        Test: accessibility/color-well.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        (WebCore::AccessibilityNodeObject::colorValue):
        (WebCore):
        * accessibility/AccessibilityNodeObject.h:
        (AccessibilityNodeObject):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isColorWell):
        (AccessibilityObject):
        (WebCore::AccessibilityObject::colorValue):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLInputElement.cpp:
        (WebCore):
        (WebCore::HTMLInputElement::isColorControl):
        * html/HTMLInputElement.h:
        (HTMLInputElement):

2013-01-11  Emil A Eklund  <eae@chromium.org>

        offsetWidth/height incorrect for images when zoomed
        https://bugs.webkit.org/show_bug.cgi?id=106624

        Reviewed by Levi Weintraub.
        
        offsetWidth and height are incorrect for images at certain zoom
        levels due to flooring the values ones adjusted for zoom.
        By rounding the value instead we avoid the problem and return
        the right size.

        Test: fast/images/zoomed-offset-size.html

        * dom/Element.cpp:
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        Change to round (as opposed to floor) the zoom adjusted value.
        
        * rendering/RenderObject.h:
        (WebCore::adjustLayoutUnitForAbsoluteZoom):
        * rendering/style/RenderStyle.h:
        (WebCore::adjustLayoutUnitForAbsoluteZoom):
        Add LayoutUnit version of adjustForAbsoluteZoom to avoid float
        conversion.

2013-01-14  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Move AudioDestinationChromium into WebCore
        https://bugs.webkit.org/show_bug.cgi?id=106803

        Reviewed by Adam Barth.

        This doesn't really belong in WebKit/chromium/src since it defines
        things directly in the WebCore namespace.

        * WebCore.gypi:
        * platform/audio/chromium/AudioDestinationChromium.cpp: Added.
        (WebCore):
        (WebCore::AudioDestination::create):
        (WebCore::AudioDestinationChromium::AudioDestinationChromium):
        (WebCore::AudioDestinationChromium::~AudioDestinationChromium):
        (WebCore::AudioDestinationChromium::start):
        (WebCore::AudioDestinationChromium::stop):
        (WebCore::AudioDestination::hardwareSampleRate):
        (WebCore::AudioDestinationChromium::render):
        (WebCore::AudioDestinationChromium::provideInput):
        * platform/audio/chromium/AudioDestinationChromium.h: Added.
        (WebCore):
        (AudioDestinationChromium):
        (WebCore::AudioDestinationChromium::isPlaying):
        (WebCore::AudioDestinationChromium::sampleRate):

2013-01-14  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Fix indentation for GStreamer supported MIME types list
        https://bugs.webkit.org/show_bug.cgi?id=106812

        Reviewed by Philippe Normand.

        No tests. No change in behavior.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

2013-01-14  John Bauman  <jbauman@chromium.org>

        Use correct size for DrawingBuffer readback
        https://bugs.webkit.org/show_bug.cgi?id=106744

        Reviewed by Kenneth Russell.

        The value getInternalFramebufferSize is bogus if there's a
        DrawingBuffer, so use size() instead.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):

2013-01-14  Joshua Bell  <jsbell@chromium.org>

        Bindings: Remove special cases for DOMString[]
        https://bugs.webkit.org/show_bug.cgi?id=106506

        Remove special in binding code generators that map DOMString[] to DOMStringList.
        Array (T[]) and sequence (sequence<T>) are supported enough now that to be used
        for Internals, which is the only IDL that needed updating.

        Reviewed by Adam Barth.

        Tests: fast/forms/file/selected-files-from-history-state.html
               fast/forms/state-restore-broken-state.html
               fast/forms/state-restore-skip-stateless.html

        Bindings test results updated for JS/V8.

        * bindings/scripts/CodeGenerator.pm: Remove redundant IsArrayType (use GetArrayType instead)
        (IsRefPtrType): Array and Sequence types are not RefPtr types.
        * bindings/scripts/CodeGeneratorJS.pm:
        (IndexGetterReturnsStrings): Remove special case for DOMString[].
        (AddIncludesForType): Skip Array types, just like Sequence types. (Should probably recurse
        for the base type, but not needed for now.)
        (GenerateParametersCheckExpression): s/IsArrayType/GetArrayType/
        (GetNativeType): Remove special case for DOMString[].
        (GetNativeTypeForCallbacks): Ditto.
        (JSValueToNative): Ditto.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheckExpression): s/IsArrayType/GetArrayType/
        (GetNativeType): Remove special case for DOMString[].
        (JSValueToNative): Ditto.
        (GetV8HeaderName): Ditto.
        (IsWrapperType):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunction):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore):
        * bindings/scripts/test/TestObj.idl: Added explicit new cases for DOMStringList
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::overloadedMethod7Callback):
        (WebCore::TestObjV8Internal::overloadedMethod9Callback):
        (WebCore::TestObjV8Internal::stringArrayFunctionCallback):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::domStringListFunctionCallback):
        (WebCore):
        (WebCore::ConfigureV8TestObjTemplate):
        * testing/Internals.cpp:
        (WebCore::Internals::formControlStateOfPreviousHistoryItem):
        (WebCore::Internals::setFormControlStateOfPreviousHistoryItem):
        (WebCore::Internals::iconURLs):
        (WebCore::Internals::getReferencedFilePaths):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl: Produce DOMString[], consume sequence<DOMString> to match tests.

2013-01-14  Elliott Sprehn  <esprehn@chromium.org>

        Clean up WebVTTNodeType code
        https://bugs.webkit.org/show_bug.cgi?id=106714

        Reviewed by Tony Chang.

        There's no reason for so many methods just to compare some enums.
        The existing code can also be simplified quite a bit.

        No new tests, just refactoring.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRules):
        (WebCore::StyleResolver::canShareStyleWithElement):
        * dom/Element.cpp:
        (WebCore::Element::webVTTNodeType):
        (WebCore::Element::setWebVTTNodeType):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setWebVTTNodeType):
        (WebCore::ElementRareData::webVTTNodeType):
        (ElementRareData):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::markFutureAndPastNodes):

2013-01-14  Antti Koivisto  <antti@apple.com>

        REGRESSION (r139218): Flaky assertion in WebCore::StorageTask::StorageTask releasing memory
        https://bugs.webkit.org/show_bug.cgi?id=106718

        Reviewed by Andreas Kling.

        Type assertion was missing a new type.

        * storage/StorageTask.cpp:
        (WebCore::StorageTask::StorageTask):

2013-01-14  Yury Semikhatsky  <yurys@chromium.org>

        [REGRESSION] Dev Tools popup for Workers forgets sizes/shows tiny in top left
        https://bugs.webkit.org/show_bug.cgi?id=106807

        Reviewed by Pavel Feldman.

        Open dedicated worker inspector 600x600 by default and remember its size
        after resizing.

        * inspector/front-end/Settings.js:
        * inspector/front-end/WorkerManager.js:

2013-01-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in associateObjectWithWrapper()
        https://bugs.webkit.org/show_bug.cgi?id=106784

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):

2013-01-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in ScriptDebugServer::interruptAndRun()
        https://bugs.webkit.org/show_bug.cgi?id=106779

        Reviewed by Adam Barth.

        This is one of steps to make an Isolate parameter mandatory.

        No tests. No change in behavior.

        * bindings/v8/ScriptDebugServer.h:
        (ScriptDebugServer):

2013-01-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in wrap()
        https://bugs.webkit.org/show_bug.cgi?id=106783

        Reviewed by Adam Barth.

        Now it's safe to make an Isolate parameter in wrap().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (WebCore::wrap):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::wrap):

2013-01-14  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update MediaStreamTrack::readyState to match specification
        https://bugs.webkit.org/show_bug.cgi?id=106781

        Reviewed by Adam Barth.

        MediaStreamTrack::readyState now returns a string like the rest of the RTC classes.

        Existing tests expanded to cover patch.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::processTrack):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::readyState):
        (WebCore::MediaStreamTrack::ended):
        (WebCore):
        * Modules/mediastream/MediaStreamTrack.h:
        (MediaStreamTrack):
        * Modules/mediastream/MediaStreamTrack.idl:

2013-01-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Audit Tool's False Positive on Set-Cookie header
        https://bugs.webkit.org/show_bug.cgi?id=106794

        Reviewed by Pavel Feldman.

        Header value is now returned as undefined if there is no such header as it was before regression.

        Test: http/tests/inspector/audits/set-cookie-header-audit-no-false-positive.html

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.CSSRuleBase.prototype.sheetsCallback): Drive-by fix, callback should be called even when there is no headers. 
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype._headerValue):

2013-01-14  Eric Carlson  <eric.carlson@apple.com>

        Do not pass nil when initializing legible output
        https://bugs.webkit.org/show_bug.cgi?id=106799

        Reviewed by Jessie Berlin.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): -[AVPlayerItemLegibleOutput initWithDependencyFactory:mediaSubtypesForNativeRepresentation:]
            wants an empty NSArray rather than nil.

2013-01-14  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] UI: add control buttons for doing the replay steps
        https://bugs.webkit.org/show_bug.cgi?id=106788

        Reviewed by Pavel Feldman.

        Adding UI control buttons for doing the Canvas replay steps.
        Drive-by: fixed a bug in DataGrid (found by the JSCompiler).

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype._createControlButton):
        (WebInspector.CanvasProfileView.prototype._onReplayStepClick):
        (WebInspector.CanvasProfileView.prototype._onReplayFirstStepClick):
        (WebInspector.CanvasProfileView.prototype._onReplayLastStepClick):
        (WebInspector.CanvasProfileView.prototype._enableWaitIcon):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog.didReplayTraceLog):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog):
        (WebInspector.CanvasProfileView.prototype._didReceiveTraceLog):
        (WebInspector.CanvasProfileType.prototype._updateDecorationElement):
        * inspector/front-end/DOMExtension.js:
        (Element.prototype.enableStyleClass):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.setRootNode):
        (WebInspector.DataGrid.prototype._startEditingColumnOfDataGridNode):
        (WebInspector.DataGrid.prototype.moveToNextIfNeeded):
        (WebInspector.DataGrid.prototype._editingCommitted):
        (WebInspector.DataGridNode):
        * inspector/front-end/canvasProfiler.css:
        (.canvas-replay-image):
        (.canvas-replay-image.wait):
        (.canvas-replay-controls):
        (.canvas-replay-log):
        (.canvas-control-button):
        (.canvas-control-button:active):
        (.canvas-control-button:disabled):
        (.canvas-control-button img):
        (.canvas-replay-first-step img):
        (.canvas-replay-next-step img):
        (.canvas-replay-prev-step img):
        (.canvas-replay-last-step img):

2013-01-14  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update the track accessors on MediaStream to match the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=106660

        Reviewed by Adam Barth.

        The spec has significantly changed how tracks are accessed from a MediaStream:
        http://dev.w3.org/2011/webrtc/editor/getusermedia.html

        In short: the attributes audioTrack/videoTrack that returned special MediaStreamTrackLists have been
        replaced by the functions getAudioTracks()/getVideoTracks that return standard sequences of
        MediaStreamTracks.

        Existing tests updated and expanded to cover patch.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::readyState):
        (WebCore):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::streamEnded):
        (WebCore::MediaStream::contextDestroyed):
        (WebCore::MediaStream::scheduleDispatchEvent):
        (WebCore::MediaStream::scheduledEventTimerFired):
        * Modules/mediastream/MediaStream.h:
        (MediaStream):
        (WebCore::MediaStream::getAudioTracks):
        (WebCore::MediaStream::getVideoTracks):
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrackList.cpp: Removed.
        * Modules/mediastream/MediaStreamTrackList.h: Removed.
        * Modules/mediastream/MediaStreamTrackList.idl: Removed.
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource):
        * WebCore.gypi:
        * dom/EventTargetFactory.in:
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::addAudioComponent):
        (WebCore::MediaStreamDescriptor::removeAudioComponent):
        (WebCore::MediaStreamDescriptor::addVideoComponent):
        (WebCore::MediaStreamDescriptor::removeVideoComponent):

2013-01-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Add m_isolate to ScriptController, WorkerScriptController and V8DOMWindowShell
        https://bugs.webkit.org/show_bug.cgi?id=106771

        Reviewed by Adam Barth.

        This is one of the steps to pass an Isolate everywhere.

        No tests. No change in behavior.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::windowShell):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::create):
        (WebCore::V8DOMWindowShell::V8DOMWindowShell):
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        * bindings/v8/V8Initializer.cpp:
        (WebCore::V8Initializer::initializeMainThreadIfNeeded):
        (WebCore::V8Initializer::initializeWorker):
        * bindings/v8/V8Initializer.h:
        (V8Initializer):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::initializeContextIfNeeded):

2013-01-14  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Color names parsed inside "background-image" values
        https://bugs.webkit.org/show_bug.cgi?id=106770

        Reviewed by Pavel Feldman.

        Test: inspector/styles/url-color-swatch.html

        Spaces were not allowed in url(...) CSS property values.

        * inspector/front-end/StylesSidebarPane.js:

2013-01-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass an Isolate to associateObjectWithWrapper()
        https://bugs.webkit.org/show_bug.cgi?id=106773

        Reviewed by Adam Barth.

        In preparation for making an Isolate parameter mandatory
        in associateObjectWithWrapper(), this patch passes an
        Isolate to associateObjectWithWrapper().

        No tests. No change in behavior.

        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCallbackCustom):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::wrapArrayBufferView):
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallbackCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCallbackCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallbackCustom):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8IntentCustom.cpp:
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8MessageChannelCustom.cpp:
        (WebCore::V8MessageChannel::constructorCallbackCustom):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallbackCustom):
        * bindings/v8/custom/V8WebKitPointCustom.cpp:
        (WebCore::V8WebKitPoint::constructorCallbackCustom):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallbackCustom):

2013-01-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Call Isolate::GetCurrent() in a callback from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=106766

        Reviewed by Adam Barth.

        The objective is to pass an Isolate everywhere.
        Given that a callback from WebCore is an entry point to V8,
        we can call Isolate::GetCurrent() at the head of the callback
        and pass it to other places. (In practice, handleEvent() is
        the only callback used in the current WebKit.)

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackImplementation):
        (NativeToJSValue):
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithNoParam):
        (WebCore::V8TestCallback::callbackWithClass1Param):
        (WebCore::V8TestCallback::callbackWithClass2Param):
        (WebCore::V8TestCallback::callbackWithStringList):
        (WebCore::V8TestCallback::callbackWithBoolean):
        (WebCore::V8TestCallback::callbackRequiresThisToPass):

2013-01-14  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Change MediaStream::readyState to an boolean attribute called ended.
        https://bugs.webkit.org/show_bug.cgi?id=106568

        Reviewed by Adam Barth.

        See specification: http://dev.w3.org/2011/webrtc/editor/getusermedia.html

        Existings tests updated to cover patch.

        * Modules/mediastream/LocalMediaStream.cpp:
        (WebCore::LocalMediaStream::stop):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::ended):
        (WebCore::MediaStream::streamEnded):
        * Modules/mediastream/MediaStream.h:
        (MediaStream):
        (WebCore::MediaStream::isLocal):
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrackList.cpp:
        (WebCore::MediaStreamTrackList::add):
        (WebCore::MediaStreamTrackList::remove):

2013-01-14  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] HTML color names not converted to RGB/HEX/HSL when "Color format" feature used
        https://bugs.webkit.org/show_bug.cgi?id=106767

        Reviewed by Vsevolod Vlasov.

        We used to render named colors as names regardless of the selected color format option.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):

2013-01-14  Andrei Bucur  <abucur@adobe.com>

        Crash caused by incomplete cleanup of regions information for anonymous block
        https://bugs.webkit.org/show_bug.cgi?id=106191

        Reviewed by Abhishek Arya.

        When an anonymous block is no longer required it is removed from the render tree and deleted. For example, this can happen when an anonymous block children change
        from inlines to blocks. The patch updates the removeLeftoverAnonymousBlock function to delete the flow thread information attached to the obsolete anonymous block.
        The removeFromRenderFlowThread() function is recursive and it needs to be called after the anonymous block children were reparented and the child list cleared.
        I've also placed the children reset operation before clearing the parent because the latter also deletes the inRenderFlowThread flag from the object and it makes
        flow thread ownership detection impossible.

        Tests: fast/regions/remove-leftover-anon-block-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeLeftoverAnonymousBlock):

2013-01-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate parameter mandatory in v8DateOrNull()
        https://bugs.webkit.org/show_bug.cgi?id=106765

        Reviewed by Adam Barth.

        This is one of the efforts to kill all optional Isolate parameters.

        No tests. No change in behavior.

        * bindings/v8/V8Binding.h:
        (WebCore::v8DateOrNull):

2013-01-14  Pablo Flouret  <pablof@motorola.com>

        Allow nesting of at-rules
        https://bugs.webkit.org/show_bug.cgi?id=106696

        Reviewed by Allan Sandfeld Jensen.

        http://dev.w3.org/csswg/css3-conditional/ introduces the
        concept of grouping rules, and allows for them to be nested. In
        particular, this change affects @media (and is needed for @supports as
        well).

        Test: fast/css/nested-at-rules.html

        * css/CSSGrammar.y.in:
            Move media to the block_valid_rule list.

        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addChildRules):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/RuleSet.h:
            Rip out the rule-adding loop into a new method, for added
            cleanliness and recursing.

2013-01-14  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Add domain column
        https://bugs.webkit.org/show_bug.cgi?id=106757

        Reviewed by Pavel Feldman.

        Adding new column will ease domain tracking / sorting.

        * inspector/front-end/NetworkPanel.js: Added column.
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.get domain): Added getter.

2013-01-14  Qiankun Miao  <qiankun.miao@intel.com>

        Fix a typo error in the comments in PlatformContextSkia.h
        https://bugs.webkit.org/show_bug.cgi?id=105612

        Reviewed by Stephen White.

        "If false we're rendering to a GraphicsContext for a web page, if false
        we're not (as is the case when rendering to a canvas object)." is
        self-contradictory. The second "flase" in the comments should be
        "true". If true, we're rendering to an ImageBuffer which has a canvas
        object.

        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia):

2013-01-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: fix instrumentation for already instrumented classes 3/3
        https://bugs.webkit.org/show_bug.cgi?id=106764

        Reviewed by Vsevolod Vlasov.

        Last three classes with not instrumented members were fixed.

        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::reportMemoryUsage):
        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::reportMemoryUsage):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::reportMemoryUsage):

2013-01-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: fix instrumentation for already instrumented classes 2/N
        https://bugs.webkit.org/show_bug.cgi?id=106546

        Reviewed by Vsevolod Vlasov.

        Many nontrivial class members were added into reportMemoryUsage methods.

        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::reportMemoryUsage):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::reportMemoryUsage):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::reportMemoryUsage):
        * css/MediaList.cpp:
        (WebCore::MediaList::reportMemoryUsage):
        * css/RuleSet.cpp:
        (WebCore::RuleData::reportMemoryUsage):
        (WebCore::RuleSet::reportMemoryUsage):
        (WebCore::RuleSet::RuleSetSelectorPair::reportMemoryUsage):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchedPropertiesCacheItem::reportMemoryUsage):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::reportMemoryUsage):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::reportMemoryUsage):
        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::reportMemoryUsage):
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::reportMemoryUsage):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::reportMemoryUsage):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::reportMemoryUsage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportMemoryUsage):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::reportMemoryUsage):
        * loader/Prerenderer.cpp:
        (WebCore::Prerenderer::reportMemoryUsage):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::reportMemoryUsage):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::reportMemoryUsage):
        * page/Page.cpp:
        (WebCore::Page::reportMemoryUsage):

2013-01-13  Levi Weintraub  <leviw@chromium.org>

        Unreviewed gardening. Rolling out r139537. It broke platforms without sub-pixel layout.

        * dom/Element.cpp:
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        * rendering/RenderObject.h:
        (WebCore::adjustLayoutUnitForAbsoluteZoom):
        * rendering/style/RenderStyle.h:
        (WebCore::adjustLayoutUnitForAbsoluteZoom):

2013-01-13  Dima Gorbik  <dgorbik@apple.com>

        Styling disappears from the cue that's being styled by ::cue pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=106723

        Reviewed by Antti Koivisto.

        Fixes a regression caused by r138966. Setting a pseudoId in TextTrackCue::updateDisplayTree for m_allDocumentNodes
        was triggering recalculating styles the next run loop. Now when this was removed we append the WebVTT tree after its children have
        been marked by markFutureAndPastNodes so that correct styles are set within this append call.

        Test: media/track/track-css-cue-lifetime.html

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::markFutureAndPastNodes): changing the type of the first argument because DocumentFragment is not a subclass
        of Element.
        (WebCore::TextTrackCue::updateDisplayTree): appending the WebVTT rendering tree after its children have been marked properly.
        * html/track/TextTrackCue.h:
        (TextTrackCue):

2013-01-12  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Provide LevelDB with IDBEnv instead of Env::Default
        https://bugs.webkit.org/show_bug.cgi?id=106135

        Reviewed by Tony Chang.

        IDBEnv only changes the name of the histogram where errors are logged.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::destroy):
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::openInMemory):

2013-01-12  Gavin Peters  <gavinp@chromium.org>

        Regression(r119759): Heap-use-after-free in webkit_glue::WebURLLoaderImpl::Context::OnReceivedResponse
        https://bugs.webkit.org/show_bug.cgi?id=103563

        A subresource could receive a body on a 404 if its call to CachedResource::error() resulted in a nested message loop.
        That caused a crash when data was received, as the Subresource was in the Finished state already. Now when receiving
        data we ignore these bodies, avoiding the crash.

        Reviewed by Nate Chapin.

        No new tests in WebKit, since it required a nested message loop which isn't present in chromium DumpRender tree.
        There's a Chrome side browser test, see https://codereview.chromium.org/11778083/

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::checkForHTTPStatusCodeError):

2013-01-12  Robert Hogan  <robert@webkit.org>

        Available height should respect min and max height
        https://bugs.webkit.org/show_bug.cgi?id=106479

        Reviewed by Ojan Vafai.
        
        When calculating a relative positioned block's offset as a percentage of its container, respect the min
        and max height set on the container

        Tests: fast/block/percent-top-respects-max-height.html
               fast/block/percent-top-respects-min-height.html

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

2013-01-12  Victor Carbune  <victor@rosedu.org>

        CC Button doesn't always show up
        https://bugs.webkit.org/show_bug.cgi?id=106653

        Reviewed by Eric Carlson.

        Added extra checks to existing test.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::closedCaptionTracksChanged):
        Enforced visibility of captions button whenever the track list changes.
        (WebCore):
        * html/shadow/MediaControls.h:
        (MediaControls):

2013-01-11  Dan Beam  <dbeam@chromium.org>

        [clean up] Remove HTMLFormElement::AutocompleteResultError in favor of more specific Error reasons
        https://bugs.webkit.org/show_bug.cgi?id=106610

        Reviewed by Darin Fisher.

        No new tests (none needed).

        * html/HTMLFormElement.cpp: 
        (WebCore::HTMLFormElement::finishRequestAutocomplete): Removed handling of AutocompleteResultError.
        * html/HTMLFormElement.h: Removed HTMLFormElement::AutocompleteResultError in favor of more specific errors.

2013-01-10  Filip Pizlo  <fpizlo@apple.com>

        JITThunks should not compile only because of luck
        https://bugs.webkit.org/show_bug.cgi?id=105696

        Rubber stamped by Sam Weinig.

        All .cpp files that use the JSC internal API must now transitively include
        Operations.h, and none of the major JSC headers do it for you to avoid
        circularity. WebCore doesn't have to worry about circularity with JSC, so
        this changes all of the major WebCore JSC base headers to include
        Operations.h.

        * bindings/js/BindingState.h:
        * bindings/js/JSArrayBufferViewHelper.h:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDictionary.h:
        * bindings/js/JSMessagePortCustom.h:
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/ScriptValue.h:
        * bindings/js/ScriptWrappable.h:
        * bindings/js/SerializedScriptValue.cpp:
        * bridge/c/c_utility.h:
        * bridge/jsc/BridgeJSC.h:
        * dom/Node.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLImageLoader.cpp:
        * plugins/efl/PluginViewEfl.cpp:
        * xml/XMLHttpRequest.cpp:

2013-01-11  Emil A Eklund  <eae@chromium.org>

        offsetWidth/height incorrect for images when zoomed
        https://bugs.webkit.org/show_bug.cgi?id=106624

        Reviewed by Levi Weintraub.
        
        offsetWidth and height are incorrect for images at certain zoom
        levels due to flooring the values ones adjusted for zoom.
        By rounding the value instead we avoid the problem and return
        the right size.

        Test: fast/images/zoomed-offset-size.html

        * dom/Element.cpp:
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        Change to round (as opposed to floor) the zoom adjusted value.
        
        * rendering/RenderObject.h:
        (WebCore::adjustLayoutUnitForAbsoluteZoom):
        * rendering/style/RenderStyle.h:
        (WebCore::adjustLayoutUnitForAbsoluteZoom):
        Add LayoutUnit version of adjustForAbsoluteZoom to avoid float
        conversion.

2013-01-11  Ojan Vafai  <ojan@chromium.org>

        Fixed width overrides intrinsic min-width/max-width for text inputs and listboxes
        https://bugs.webkit.org/show_bug.cgi?id=106675

        Reviewed by Emil A Eklund.

        Implement computeIntrinsicLogicalWidths so that RenderBox::computeLogicalWidthInRegionUsing
        can get the correct intrinsic sizes instead of the preferred sizes.

        Test: fast/forms/select/listbox-intrinsic-min-width-applies-with-fixed-width.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computeIntrinsicLogicalWidths):
        (WebCore):
        (WebCore::RenderListBox::computePreferredLogicalWidths):
        * rendering/RenderListBox.h:
        (RenderListBox):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeIntrinsicLogicalWidths):
        (WebCore):
        (WebCore::RenderTextControl::computePreferredLogicalWidths):
        * rendering/RenderTextControl.h:
        (RenderTextControl):

2013-01-10  Ojan Vafai  <ojan@chromium.org>

        Setting width overrides intrinsic min-width/max-width on flexboxes and their subclasses
        https://bugs.webkit.org/show_bug.cgi?id=106617

        Reviewed by Tony Chang.

        Override computeIntrinsicLogicalWidths for all RenderFlexibleBox and RenderDeprecatedFlexibleBox
        classes that override computePreferredLogicalWidths so that RenderBox can use
        computeIntrinsicLogicalWidths in order to get the correct intrinsic values.

        Tests: css3/flexbox/intrinsic-min-width-applies-with-fixed-width.html
               fast/flexbox/intrinsic-min-width-applies-with-fixed-width.html
               fast/forms/select/intrinsic-min-width-applies-with-fixed-width.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        fit-content needs to use the intrinsic sizes not the preferred sizes
        since a fixed width overrides the preferred size.
        As best I can tell, the sizesLogicalWidthToFitContent codepath can keep
        using preferred widths, which are considerably faster, since that's only used
        computing width values. Added a clause to that if-statement to make this more
        explicit.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths):
        (WebCore::RenderDeprecatedFlexibleBox::computePreferredLogicalWidths):
        * rendering/RenderDeprecatedFlexibleBox.h:
        (RenderDeprecatedFlexibleBox):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths):
        (WebCore):
        (WebCore::RenderFlexibleBox::computePreferredLogicalWidths):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::computeIntrinsicLogicalWidths):
        (WebCore):
        (WebCore::RenderMenuList::computePreferredLogicalWidths):
        * rendering/RenderMenuList.h:
        (RenderMenuList):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computeIntrinsicLogicalWidths):
        (WebCore):
        (WebCore::RenderSlider::computePreferredLogicalWidths):
        * rendering/RenderSlider.h:
        (RenderSlider):
        No logic changes in any of these computeIntrinsic methods. Just moving
        the code over from the computePreferred methods.

2013-01-11  Tony Gentilcore  <tonyg@chromium.org>

        Move HTMLTokenTypes to its own file
        https://bugs.webkit.org/show_bug.cgi?id=106722

        Reviewed by Levi Weintraub.

        Also mark AtomicHTMLToken ctor as explicit.

        No new tests because no new functionality.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/parser/HTMLTokenTypes.h: Added.
        (WebCore):
        (HTMLTokenTypes):
        (DoctypeData):
        (WebCore::HTMLTokenTypes::DoctypeData::DoctypeData):

2013-01-11  Elliott Sprehn  <esprehn@chromium.org>

        No need to initialize RefPtrs to 0 in ElementRareData
        https://bugs.webkit.org/show_bug.cgi?id=106717

        Reviewed by Ryosuke Niwa.

        RefPtrs initialize themself to null, so there's no reason
        to do it manually. This was code leftover from when
        PseudoElements were stored in bare ptrs instead of in
        RefPtrs.

        No new tests, just refactoring.

        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):

2013-01-11  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Rename current[Transform|Opacity|Filters] in TextureMapperLayer.
        https://bugs.webkit.org/show_bug.cgi?id=105760

        Reviewed by Noam Rosenthal.

        TextureMapperLayer has two transform members: an original value and a
        changeable value. The changeable value would be changed by animations.
        This patch puts 'current' prefix on the changeable value to clarify
        its purpose. Opacity and filters ditto.

        No new tests. Refactoring only.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeTransformsRecursive):
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::paintSelfAndChildren):
        (WebCore::TextureMapperLayer::intermediateSurfaceRect):
        (WebCore::TextureMapperLayer::shouldPaintToIntermediateSurface):
        (WebCore::TextureMapperLayer::isVisible):
        (WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica):
        (WebCore::TextureMapperLayer::paintRecursive):
        (WebCore::TextureMapperLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::TextureMapperLayer::syncAnimations):
        (WebCore::TextureMapperLayer::setScrollPositionDeltaIfNeeded):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::TextureMapperLayer):
        (TextureMapperLayer):
        (WebCore::TextureMapperLayer::State::State):

2013-01-11  Tony Gentilcore  <tonyg@chromium.org>

        Move constructTreeFromHTMLToken into HTMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=106694

        Reviewed by Adam Barth.

        This way it will sit parallel to a new constructTreeFromCompactHTMLToken method.

        No new tests because no new functionality.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken):
        (WebCore):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLTreeBuilder.cpp:
        * html/parser/HTMLTreeBuilder.h:
        (HTMLTreeBuilder):

2013-01-11  Robert Iannucci  <iannucci@chromium.org>

        Explicitly set msvs_cygwin_shell to true for actions in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106706

        Reviewed by Tony Chang.

        Currently, msvs_cygwin_shell is set to 1 by default. This patch
        explicitly sets it on the actions which will break if msvs_cygwin_shell
        were set to 0. This is in preparation for changing the default value of
        msvs_cygwin_shell, which in turn is in preparation of the removal of
        cygwin as a buld-system requirement.

        Since this change will have no semantic effect, no new tests are
        required.

        * WebCore.gyp/WebCore.gyp:

2013-01-11  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: IDBTransaction should manage lifetime of IDBRequests
        https://bugs.webkit.org/show_bug.cgi?id=106678

        Reviewed by Tony Chang.

        Ensure reference count of IDBRequests don't bounce off zero if there are no script
        references are while the events are arriving.

        No new tests - no detectable behavior changes.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::create): Register with transaction (which now takes a ref) here to...
        (WebCore::IDBRequest::IDBRequest): ...avoid having to relax adoption requirements here.
        * Modules/indexeddb/IDBTransaction.cpp: Keep RefPtr<>s to outstanding requests.
        (WebCore::IDBTransaction::~IDBTransaction):
        (WebCore::IDBTransaction::abort):
        (WebCore::IDBTransaction::onAbort):
        * Modules/indexeddb/IDBTransaction.h:

2013-01-11  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] XMLHttpRequests should have initiator type 'xmlhttprequest'
        https://bugs.webkit.org/show_bug.cgi?id=106409

        Reviewed by Nate Chapin.

        The initiator is passed through ThreadableLoaderOptions to the CachedResourceRequest. This is
        optional, so other users of ThreadableLoader will have the default initiator of 'request'. Note
        that synchronous XHRs don't show up in the Resource Timing buffer yet.

        Test: http/tests/w3c/webperf/submission/resource-timing/html/test_resource_initiator_types.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/ThreadableLoader.h:
        (ThreadableLoaderOptions):
        * loader/cache/CachedResourceRequestInitiators.cpp:
        (WebCore::CachedResourceRequestInitiators::CachedResourceRequestInitiators):
        * loader/cache/CachedResourceRequestInitiators.h:
        (CachedResourceRequestInitiators):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2013-01-11  James Simonsen  <simonjam@chromium.org>

        Restore old semantics to webkitRequestAnimationFrame callbacks
        https://bugs.webkit.org/show_bug.cgi?id=106697

        Reviewed by James Robinson.

        Sites that use GWT <= 2.4 are buggy and rely on Date.now()-like callback values.
        We'll restore that behavior to the prefixed version of webkitRequestAnimationFrame.
        requestAnimationFrame will continue to follow the spec.

        Test: fast/animation/request-animation-frame-prefix.html

        * dom/RequestAnimationFrameCallback.h:
        (RequestAnimationFrameCallback):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestAnimationFrame):
        (WebCore):
        (WebCore::DOMWindow::webkitRequestAnimationFrame):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/DOMWindow.idl:

2013-01-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r139044.
        http://trac.webkit.org/changeset/139044
        https://bugs.webkit.org/show_bug.cgi?id=106702

        Caused various scrolling anomolies on Mac with drag and drop
        (Requested by smfr on #webkit).

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::AutoscrollController):
        (WebCore::AutoscrollController::autoscrollTimerFired):
        * page/AutoscrollController.h:
        (WebCore):
        (AutoscrollController):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop):
        * rendering/RenderBox.cpp:
        (WebCore):
        (WebCore::RenderBox::autoscroll):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::autoscroll):
        * rendering/RenderListBox.h:
        (RenderListBox):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::autoscroll):
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):

2013-01-11  Rafael Weinstein  <rafaelw@chromium.org>

        Prevent HTMLPreloadScanner from fetching resources inside <template>
        https://bugs.webkit.org/show_bug.cgi?id=106687

        Reviewed by Adam Barth.

        This patch adds a simple counter to the preload scanner which increments on template start
        tag and decrements on template element. It only fetchs resources when the counter is at zero
        (i.e. for elements not contained by a template element).

        Test re-enabled within fast/dom/HTMLTemplateElement/inertContents.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        (WebCore::HTMLPreloadScanner::processToken):
        * html/parser/HTMLPreloadScanner.h:
        (HTMLPreloadScanner):

2013-01-11  Tony Gentilcore  <tonyg@chromium.org>

        We should be able to checkpoint and restore the HTMLTokenizer across threads
        https://bugs.webkit.org/show_bug.cgi?id=106597

        Based on patch by Adam Barth.

        This has the ability to create a checkpoint any time the parser is blocked on a script.
        We clear m_appropriateEndTagName after each end tag is flushed so that the ASSERT in
        canCreateCheckpoint() will pass.

        Reviewed by Adam Barth.

        No new tests because no new functionality.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:
        (WebCore):
        (HTMLDocumentParser):
        * html/parser/HTMLTokenizer.cpp:
        (WebCore):
        (WebCore::HTMLTokenizer::canCreateCheckpoint):
        (WebCore::HTMLTokenizer::createCheckpoint):
        (WebCore::HTMLTokenizer::restoreFromCheckpoint):
        * html/parser/HTMLTokenizer.h:
        (HTMLTokenizer):
        (Checkpoint):
        (WebCore::HTMLTokenizer::Checkpoint::Checkpoint):
        * xml/parser/MarkupTokenizerBase.h:
        (WebCore::MarkupTokenizerBase::InputStreamPreprocessor::InputStreamPreprocessor):
        (WebCore::MarkupTokenizerBase::InputStreamPreprocessor::skipNextNewLine):
        (InputStreamPreprocessor):
        (WebCore::MarkupTokenizerBase::InputStreamPreprocessor::reset):

2013-01-11  Tony Chang  <tony@chromium.org>

        [chromium] Don't regenerate all bindings when any idl file changes
        https://bugs.webkit.org/show_bug.cgi?id=106604

        Reviewed by Kentaro Hara.

        Currently, every idl file is a dependency of generating the supplemental dependency map
        and generating bindings is a dependency of the map. This means that touching any idl file
        causes us to regenerate all the bindings.

        Change it so that generating bindings only depends on the idl files that have Supplemental= in them.
        We only have 24 idl files with Supplemental (3.7% of the 638 idl files in WebCore) so modifying
        any of those will cause all bindings to be regenerated.

        If you add or remove a new idl file, you have to rerun gyp which will fix up any dependencies.
        If you edit an existing file and add Supplemental= to it, you will now need to rerun gyp_{webkit,chromium}.
        I think that's a reasonable tradeoff since it seems highly unlikely that you would adding Supplemental=
        to an existing file without renaming it. The bots will always be fine because they always run
        gyp after updating.

        No new tests, this is a build only change.

        * WebCore.gyp/WebCore.gyp: Remove <(SHARED_INTERMEDIATE_DIR)/supplemental_dependency.tmp, which was causing
        the full rebuild. The step to generate this file is still a hard dependency so it will still be generated and
        used by generate-bindings.pl. Also remove <@(webcore_test_support_idl_files). This was saying we should regenerate
        all bindings if a test idl file changed. That doesn't make sense.
        * WebCore.gyp/scripts/supplemental_idl_files.py: Added.
        (DoMain):

2013-01-11  Alexandru Chiculita  <achicu@adobe.com>

        Element is displayed behind a composited layer when clipping is used on a previous element
        https://bugs.webkit.org/show_bug.cgi?id=104981

        Reviewed by Simon Fraser.

        RenderLayerCompositor::computeCompositingRequirements uses the local bounding box of the layers to optimize the number of composited 
        layers that are created. That's needed in order to make sure that composited layers that are displayed behind non-composited
        layers are correctly promoting the layers in front to be composited. Otherwise the non-composited layers are rendered
        in the parent composited layer, displaying behind the other composited layers. That might be wrong as the correct paint order might not be
        preserved.

        In order to make animations work, there's a flag that will disable that optimization. That's because the animations run in the platform
        layer and the platform layer doesn't know about the layers that are not promoted to composited layers. When the overlapping of the layers
        is computed it just uses the start or the stop state, but no intermediate states. For that reason, all the 'top' layers in front of animated 
        elements will become composited.

        When an animation has a clipping rectangle, then we know for sure that the animation is going to be contained inside the clip area, so WebKit 
        uses the bounding box of the clipping area to detect the overlapping layers, so there's no need to disable the optimization in that case.

        However, if there is a different animation displaying behind the clipping container, we cannot safely disable that optimization anymore. That's
        because we still don't know what are the intermediate states of that particular animated layer. The bug was that the optimization was re-enabled
        anyway, even in this particular case.

        In order to fix it, I changed the logic, so that instead of re-enabling the optimization after a clipping container, it will just avoid to propagate 
        the internal state to the following layers when there's no need to so.

        Note that 3D transforms behave like animations for now and disable the optimization. Because of that some of the existing tests ended up
        creating more layers than needed. That's because the tests had an overflow area that recreated the issue that this patch fixes, but with
        3D transforms instead of animations. 3D transforms will be treated in a separate patch.

        Tests: compositing/layer-creation/overlap-animation-clipping.html
               compositing/layer-creation/overlap-animation-container.html

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

2013-01-11  Philip Rogers  <pdr@google.com>

        Skip CachedImage::CreateImage if we don't have image data
        https://bugs.webkit.org/show_bug.cgi?id=106156

        Reviewed by Nate Chapin.

        This patch skips image creation if we do not have image data. This can occur during
        cache revalidation when the revalidation request (304 not modified) comes back without
        any content. In this revalidation case, the http spec requires that a mimetype not be set
        on the response to prevent a cached resource from having a different mimetype
        from the revalidated resource. Because revalidation requests do not have a mimetype,
        CachedImage::CreateImage() will fail on SVG images. This patch prevents
        CachedImage::CreateImage() from being called during revalidation.

        No new tests as there are no observable changes from this patch.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::data):

2013-01-11  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::TestEventConstructorV8Internal::attr1AttrGetter):
        (WebCore::TestEventConstructorV8Internal::attr2AttrGetter):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::TestExceptionV8Internal::nameAttrGetter):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrGetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr1AttrGetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrGetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::staticStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::hashAttrGetter):
        (WebCore::TestObjV8Internal::conditionalMethod1Callback):

2013-01-11  Levi Weintraub  <leviw@chromium.org>

        RenderGeometryMap and TransformState disagree with sub-pixel layout and translations
        https://bugs.webkit.org/show_bug.cgi?id=106047

        Reviewed by Simon Fraser.

        Mirror RenderGeometryMap's optimization for integer-translated transforms in TransformState.
        This avoids the current behavior where the two can disagree on mappings, since RenderGeometryMap
        pixel-snapped later when a translation occurred between two sub-pixel containers.

        Test: fast/layers/geometry-map-transform-state-translation-mismatch.html

        * platform/graphics/transforms/TransformState.h:
        (WebCore::TransformState::setQuad): Clear accumulatedOffset when setting a new quad. Note: this
        implementation only works properly when only tracking a quad.
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::applyTransform): apply integral translations to the accumulatedOffset
        for performance and consistency with RenderGeometryMap.

2013-01-11  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::RenderText::computePreferredLogicalWidths
        https://bugs.webkit.org/show_bug.cgi?id=95901

        Reviewed by Simon Fraser.

        Prevent re-entrancy of view layout. Loading of SVG document during font load
        causes it to re-enter layout and blowing the style away from underneath.
        
        Test: Go to http://www.speckproducts.com and make sure crash does not happen.

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

2013-01-11  Kentaro Hara  <haraken@chromium.org>

        [V8] Do not create a local handle for a cached v8 string that is returned to V8 immediately
        https://bugs.webkit.org/show_bug.cgi?id=106557

        Reviewed by Adam Barth.

        Currently we are always creating a local handle for a cached
        V8 string returned to V8:

          Handle<Value> v8String(StringImpl* impl, Isolate* isolate) {
            ...;
            return Local<String>::New(isolate, m_cachedString);
          }

        However, we don't need to create a local handle in a case
        where it is guaranteed that no V8 object allocation is conducted
        before a control flow returns back to V8. In particular, in a case
        where a cached V8 string is immediately returned to V8, we don't
        need to create a local handle:

          Handle<Value> xxxxAttrGetter() {
            ...;
            return v8String(imp->xxxx(), isolate);  // This can return a persistent handle safely.
          }

        This patch improves performance of div.id by 9.2%.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateCallbackImplementation):
        (GenerateFunctionCallString):
        (NativeToJSValue):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::TestEventConstructorV8Internal::attr1AttrGetter):
        (WebCore::TestEventConstructorV8Internal::attr2AttrGetter):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::TestExceptionV8Internal::nameAttrGetter):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrGetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr1AttrGetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrGetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::staticStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrGetter):
        (WebCore::TestObjV8Internal::hashAttrGetter):
        (WebCore::TestObjV8Internal::conditionalMethod1Callback):
        * bindings/v8/V8Binding.h:
        (WebCore::v8String):
        (WebCore::v8StringOrNull):
        (WebCore::v8StringOrUndefined):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::StringCache::v8ExternalStringSlow):
        * bindings/v8/V8ValueCache.h:
        (WebCore::StringCache::v8ExternalString):
        (StringCache):

2013-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header files.

2013-01-11  Xianzhu Wang  <wangxianzhu@chromium.org>

        RenderLayerCompositor should let ScrollingCoordinator update main thread scrolling reasons after change of layers
        https://bugs.webkit.org/show_bug.cgi?id=105652

        Reviewed by Simon Fraser.

        Let ScrollingCoordinator know the change of ViewportConstrainedNotCompositedReason in time.
        By the way moved RenderLayerCompositor::FixedPositionLayerNotCompositedReason to RenderLayer::ViewportConstrainedNotCompositedReason.

        Tests: compositing/layer-creation/fixed-position-in-view-dynamic.html
               compositing/layer-creation/fixed-position-out-of-view-dynamic.html

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects):
        (WebCore::ScrollingCoordinator::mainThreadScrollingReasons):
        (WebCore::ScrollingCoordinator::mainThreadScrollingReasonsAsText):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (WebCore::ScrollingCoordinatorMac::hasVisibleSlowRepaintViewportConstrainedObjects):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::logThreadedScrollingMode):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:
        (RenderLayer): Moved RenderLayerCompositor::FixedPositionLayerNotCompositedReason to here and renamed it to ViewportConstrainedNotCompositedReason.
        (WebCore::RenderLayer::setViewportConstrainedNotCompositedReason):
        (WebCore::RenderLayer::viewportConstrainedNotCompositedReason):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::updateBacking): Now updates ViewportConstrainedNotCompositedReason here instead of in computeCompositingRequirements before so that the reason is updated in time.
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::needsToBeComposited):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::reasonForCompositing):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::reportMemoryUsage):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-01-11  Kenneth Russell  <kbr@google.com>

        [Chromium] WebGL typed array constructor crashes on exception
        https://bugs.webkit.org/show_bug.cgi?id=106308

        Reviewed by Kentaro Hara.

        Check for empty handles (indicating exception thrown) after calls
        into V8 VM.

        Added new case from Khronos typed array conformance tests to
        fast/canvas/webgl/array-unit-tests.html.

        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
            Check for empty handles after calls into V8 VM.

2013-01-11  Kentaro Hara  <haraken@chromium.org>

        [V8] Slightly optimize getWrapperFast()
        https://bugs.webkit.org/show_bug.cgi?id=106667

        Reviewed by Adam Barth.

        This patch improves an if condition in getWrapperFast(),
        as commented in DOMDataStore.h.

        This patch improves performance of div.firstChild from
        15.1 ns to 14.0 ns (+7.8%), although I couldn't observe
        performance improvement in Dromaeo/dom-traverse.

        No tests. No change in behavior.

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::getWrapperFast):

2013-01-11  Florin Malita  <fmalita@chromium.org>

        [SVG] Suppress resource rebuilding for unattached and shadow elements
        https://bugs.webkit.org/show_bug.cgi?id=106664

        Reviewed by Dirk Schulze.

        SVGStyledElement::buildPendingResourcesIfNeeded() can be called while cloning a subtree
        (as nodes are inserted into the clone, while still detached) or when elements are inserted
        into the shadow tree. Both of these cases are problematic for SVGUseElement and can trigger
        indirect recursion in SVGUseElement::buildPendingResource.

        Since shadow and !inDocument() nodes are of no interest to ID dependents (they cannot be
        found by ID in the document), the patch short-circuits buildPendingResource() for these
        cases.

        Test: svg/custom/use-rebuild-resources-crash.svg

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):

2013-01-11  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Computed hierarchical level is not consistent with aria-level
        https://bugs.webkit.org/show_bug.cgi?id=106638

        Reviewed by Chris Fleizach.

        Make hierarchicalLevel computation 1-based to match the aria-level spec.

        Extends an existing test: platform/mac/accessibility/aria-tree.html.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::hierarchicalLevel):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-01-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Workspace should support several projects and should not have temporary UISourceCodes.
        https://bugs.webkit.org/show_bug.cgi?id=105856

        Reviewed by Pavel Feldman.

        Workspace now supports several projects with the networkProject being a main one.
        Replaced temporary UISourceCodes with specific projects (debugger and liveedit).
        The concept of workspace reset on navigation is now replaced with project reset concept instead.
        Introduced snippets project (that is not reset on navigation).
        Script mappings are now reset on GlobalObjectCleared event.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype._innerSetBreakpoint):
        (WebInspector.BreakpointManager.prototype._filteredBreakpointLocations):
        (WebInspector.BreakpointManager.prototype.toggleAllBreakpoints):
        (WebInspector.BreakpointManager.prototype.removeAllBreakpoints):
        (WebInspector.BreakpointManager.prototype._projectWillReset.get for):
        (WebInspector.BreakpointManager.prototype._projectWillReset):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel):
        (WebInspector.CSSStyleModel.prototype._inspectedURLChanged):
        (WebInspector.CSSStyleModel.prototype._resetSourceMappings):
        (WebInspector.CSSStyleModelResourceBinding):
        (WebInspector.CSSStyleModelResourceBinding.prototype._viaInspectorResourceURL):
        (WebInspector.CSSStyleModelResourceBinding.prototype._reset):
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping):
        (WebInspector.CompilerScriptMapping.prototype._debuggerReset):
        * inspector/front-end/DebuggerScriptMapping.js:
        * inspector/front-end/DefaultScriptMapping.js:
        (WebInspector.DefaultScriptMapping):
        (WebInspector.DefaultScriptMapping.prototype.addScript):
        (WebInspector.DefaultScriptMapping.prototype._debuggerReset):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onGetPageResources):
        * inspector/front-end/FilteredItemSelectionDialog.js:
        (WebInspector.OpenResourceDialog.show):
        * inspector/front-end/LiveEditSupport.js:
        (WebInspector.LiveEditSupport):
        (WebInspector.LiveEditSupport.prototype.uiSourceCodeForLiveEdit):
        (WebInspector.LiveEditSupport.prototype._debuggerReset):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider):
        (WebInspector.NetworkUISourceCodeProvider.prototype._mainFrameNavigated):
        (WebInspector.NetworkUISourceCodeProvider.prototype._addFile):
        (WebInspector.NetworkUISourceCodeProvider.prototype._reset):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeAddedToWorkspace):
        (WebInspector.ResourceScriptMapping.prototype._debuggerReset):
        * inspector/front-end/RevisionHistoryView.js:
        (WebInspector.RevisionHistoryView):
        (WebInspector.RevisionHistoryView.prototype._projectWillReset):
        * inspector/front-end/SASSSourceMapping.js:
        (_bindUISourceCode):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel):
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype.reset):
        * inspector/front-end/ScriptsNavigator.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._addUISourceCode):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeRemoved):
        (WebInspector.ScriptsPanel.prototype._removeUISourceCodes):
        (WebInspector.ScriptsPanel.prototype._debuggerWasDisabled):
        (WebInspector.ScriptsPanel.prototype._debuggerReset):
        (WebInspector.ScriptsPanel.prototype._projectWillReset):
        (WebInspector.ScriptsPanel.prototype.canShowAnchorLocation):
        (WebInspector.ScriptsPanel.prototype._revealExecutionLine):
        (WebInspector.ScriptsPanel.prototype.showGoToSourceDialog):
        * inspector/front-end/SimpleWorkspaceProvider.js:
        (WebInspector.SimpleWorkspaceProvider):
        (WebInspector.SimpleWorkspaceProvider.prototype.addFile):
        (WebInspector.SimpleWorkspaceProvider.prototype.addFileForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.reset):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping):
        (WebInspector.StylesSourceMapping.prototype._projectWillReset):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype.reset):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.project):
        * inspector/front-end/Workspace.js:
        (WebInspector.WorkspaceController):
        (WebInspector.WorkspaceController.prototype._inspectedURLChanged):
        (WebInspector.Project):
        (WebInspector.Project.prototype.name):
        (WebInspector.Project.prototype.isServiceProject):
        (WebInspector.Project.prototype._reset):
        (WebInspector.Workspace):
        (WebInspector.Workspace.prototype.uiSourceCodeForURL):
        (WebInspector.Workspace.prototype.uiSourceCodeForURI):
        (WebInspector.Workspace.prototype.addProject):
        (WebInspector.Workspace.prototype.project):
        (WebInspector.Workspace.prototype.projects):
        (WebInspector.Workspace.prototype.uiSourceCodes):
        (WebInspector.Workspace.prototype.projectForUISourceCode):
        (WebInspector.Workspace.prototype.requestFileContent):
        (WebInspector.Workspace.prototype.setFileContent):
        (WebInspector.Workspace.prototype.searchInFileContent):
        * inspector/front-end/inspector.js:
        * inspector/front-end/utilities.js:

2013-01-11  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Resources] Make grid columns set configurable.
        https://bugs.webkit.org/show_bug.cgi?id=105739

        Reviewed by Pavel Feldman.

        Added context menu on grid header to hide/show grid columns.
        Hidden columns set is persisted.

        * inspector/front-end/DataGrid.js:
        Fixed show/hide behavior, introduced weight control.
        * inspector/front-end/NetworkPanel.js:
        Added member to track visibility of columns in detailerd mode. Added
        context menu for grid header.

2013-01-11  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Fix the build if libxslt is not available but libxml2 is
        https://bugs.webkit.org/show_bug.cgi?id=106661

        Reviewed by Simon Hausmann.

        On Linux building the xml parser sources fails if the needed libxslt
        dependencies are not installed but libxml2 is.

        * WebCore.pri: add libxml2 to pkg-config if not on mac.

2013-01-11  Stephen Chenney  <schenney@chromium.org>
        Objects can be re-added to the AXObjectCache during removal
        https://bugs.webkit.org/show_bug.cgi?id=104171

        The problem occurs when a label's corresponding element is a sibling
        that precedes it in the render tree, and the corresponding element is
        removed. The corresponding element's AX render object is removed, but
        then recreated when accessibilityIsIgnored() invokes correspondingControl()
        on the label. The corresponding renderer then has an AX render object
        that survives beyond the deleted renderer, leading to invalid memory
        accesses.

        The solution is to rearrange the calls to delete the renderer's AX
        render object only when we are sure it will no longer be required.

        Reviewed by Simon Fraser.

        Test: accessibility/corresponding-control-deleted-crash.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed): Move the call to remove the
        renderer from the AXCache to after the renderer is removed from the
        render tree. This means that the AXObject still exists during renderer
        removal, as we require.

2013-01-11  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK1] Web Audio support
        https://bugs.webkit.org/show_bug.cgi?id=106651

        Reviewed by Jocelyn Turcotte.

        Convert JavaScript Uint8Array to QByteArray. This conversion is necessary to support testRunner.setAudioData().

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::isJSUint8Array):
        (Bindings):
        (JSC::Bindings::valueRealType):
        (JSC::Bindings::convertValueToQVariant):

2013-01-11  Anton Vayvod  <avayvod@chromium.org>

        Text Autosizing - elements much narrower than its parent autosizing clusters should be autosized separately.
        https://bugs.webkit.org/show_bug.cgi?id=105188

        Reviewed by Kenneth Rohde Christiansen.

        Some blocks of text might be narrower than their parent clusters and should be autosized separately.
        This helps with autosizing for the pages implementing the sidebars as a narrow blocks of text with wide margins and
        the main content being positioned atop this margin (or vice versa).

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::isContainerAutosizingCluster):

            Returns true if the container is more than 200 pixels narrower than its parent cluster's lowest common
            ancestor of all the text nodes.

2013-01-11  Andreas Kling  <akling@apple.com>

        Remove unused CSSSelector(QualifiedName) constructor.
        <http://webkit.org/b/106652>

        Reviewed by Antti Koivisto.

        * css/CSSSelector.h:
        (CSSSelector):

2013-01-11  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Disable the ENABLE_LEGACY_WEB_AUDIO feature define in release builds
        https://bugs.webkit.org/show_bug.cgi?id=106577

        Reviewed by Philippe Normand.

        The Web Audio feature is not enabled in the release builds, so there's
        no need to enable the legacy Web Audio API either.

        No new tests - no new functionality.

        * GNUmakefile.features.am.in:

2013-01-11  Antoine Quint  <graouts@apple.com>

        Web Inspector: Option+Click on Node Expander Doesn't Work the First Time
        https://bugs.webkit.org/show_bug.cgi?id=66868

        Up to now, the TreeElement.prototype.expandRecursively() method would correctly
        expand children recursively based on the provided depth, but would not wait to
        perform this task until all child nodes had been populated, which means that this
        would only work incrementally with one additional level of child nodes being shown
        expanded in the DOM tree upon alt+clicking a given node with a deep hierarchy.
        
        In order to fix this, this patch adds a new optional argument to the DOMAgent's
        requestChildNodes() methods to provide the depth at which we want to retrieve children
        of a given node. The DOMAgent provides a new .getSubtree() method that calls
        requestChildNodes() with the provided depth.

        Then in ElementsTreeOutline, we subclass .expandRecursively() to first call DOMAgent's
        new .getSubtree() method and then call the default implementation when all nodes
        have been retrieved from the backend.

        Reviewed by Pavel Feldman.

        Tests: inspector-protocol/dom-request-child-nodes-depth.html
               inspector/elements/expand-recursively.html

        * inspector/Inspector.json: Add the new `depth` parameter to DOM.requestChildNodes().
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend): Add a new optional `depth` parameter
        which defaults to 1.
        (WebCore::InspectorDOMAgent::requestChildNodes): Add a new optional `depth` parameter
        which defaults to 1 and allows -1 as an unbound value.
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.):
        (WebInspector.DOMNode.prototype.getSubtree): New method allowing to specify at what depth
        we want to retrieve children of a given node from the backend.
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.expandRecursively): Override default implementation
        to first obtain the deepest subtree for the current node so that deep expansion happens as expected.

2013-01-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Elements] Search in the DOM tree does not scroll horizontally
        https://bugs.webkit.org/show_bug.cgi?id=106648

        Reviewed by Vsevolod Vlasov.

        Scroll into view the first match in every tree element, if needed.

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

2013-01-11  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] a minor follow-up to r137262
        https://bugs.webkit.org/show_bug.cgi?id=106644

        Reviewed by Pavel Feldman.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2013-01-11  Kent Tamura  <tkent@chromium.org>

        BaseDateAndTimeInputType should not inherit from TextFieldInputType
        https://bugs.webkit.org/show_bug.cgi?id=106306

        Reviewed by Hajime Morita.

        Date/time input types don't need text-field features at all.

        No new tests. This should not make any behavior changes except reduction
        of memory usage.

        * html/BaseDateAndTimeInputType.h:
        Inherit InputType instead of TextFieldInputType.
        (WebCore::BaseDateAndTimeInputType::BaseDateAndTimeInputType):
        (BaseDateAndTimeInputType): Update function declarations.
        * html/BaseDateAndTimeInputType.cpp:
        Remove handleKeydownEvent and convertFromVisibleValue, which are for
        TextFieldInputType.
        (WebCore::BaseDateAndTimeInputType::shouldRespectListAttribute):
        Added. This is necessary for <datalist> support. TextFieldInputType has
        the same code.
        (WebCore::BaseDateAndTimeInputType::valueMissing):
        Added. This is necessary for validity.valueMissing. TextFieldInputType
        has the same code.

        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        Remove unnecessary functions which cancel TextFieldInputType behavior.
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        (BaseChooserOnlyDateAndTimeInputType): Remove declarations for them.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        Remove unnecessary functions which cancel TextFieldInputType behavior.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):
        Add SpinButtonOwner interface. We didn't need it because
        TextFieldInputType implements it.

2013-01-11  Mary Wu  <mary.wu@torchmobile.com.cn>

        [BlackBerry] Enable concatenating headers with same field name
        https://bugs.webkit.org/show_bug.cgi?id=106625

        Reviewed by Rob Buis.

        RFC 2616 specifies that headers could concatenate with comma if they have
        same field name. We should enable this if the header allows multiple values.

        RIM PR# 275508, internally reviewed by Joe Mason

        (WebCore):
        (WebCore::isAppendableHeader):
        (WebCore::NetworkJob::handleNotifyHeaderReceived):

2013-01-11  Jochen Eisinger  <jochen@chromium.org>

        Connect UserGestureIndicator for mousedown and mouseup events
        https://bugs.webkit.org/show_bug.cgi?id=105138

        Reviewed by Adam Barth.

        Ports that consume user gestures to prevent certain types of pop-ups
        need to be able to connect mousedown and mouseup events, otherwise, a
        single mouse click will allow for opening multiple pop-ups.

        Note that a mousedown is not always followed by a mouseup and vice
        versa, e.g. when the mousedown results in a context menu being shown, or
        something is dragged into the page.

        Test: platform/chromium/fast/events/popup-allowed-from-gesture-only-once-two-events.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/EventHandler.h:

2013-01-11  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Resources] "Delete" cookie deletes all cookies with matching name.
        https://bugs.webkit.org/show_bug.cgi?id=105633

        Reviewed by Pavel Feldman.

        "Delete" cookie deletes all cookies with matching name,
        ignoring domain and path.

        * inspector/Inspector.json: Change argument "domain" to "url"
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::deleteCookie): Use url to delte cookies.
        * inspector/InspectorPageAgent.h: Adopt new signature.
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._deleteCookie): Ditto.

2013-01-11  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL] Fix unused parameter build error
        https://bugs.webkit.org/show_bug.cgi?id=106639

        Reviewed by Kentaro Hara.

        Use UNUSED_PARAM macro to fix build error.

        No new tests, no behavior change.

        * platform/efl/EflScreenUtilities.cpp:
        (WebCore::isUsingEcoreX):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::supportsDataListUI):

2013-01-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector [chromium]: Debugger.globalObjectCleared is not dispatched on reload after renderer swap
        https://bugs.webkit.org/show_bug.cgi?id=106555

        Reviewed by Vsevolod Vlasov.

        Wrong ::enable was made virtual in the InspectorDebuggerAgent.

        Test: inspector/debugger/debugger-scripts-reload.html

        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::enable):
        (WebCore::PageDebuggerAgent::disable):
        * inspector/PageDebuggerAgent.h:
        (PageDebuggerAgent):

2013-01-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Refactoring, move NetworkWorkspaceProvider to NetworkUISourceCodeProvider.js and rename its parent to SimpleWorkspaceProvider.
        https://bugs.webkit.org/show_bug.cgi?id=106635

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/DebuggerScriptMapping.js:
        (WebInspector.DebuggerScriptMapping):
        * inspector/front-end/DefaultScriptMapping.js:
        (WebInspector.DefaultScriptMapping):
        (WebInspector.DefaultScriptMapping.prototype.addScript):
        (WebInspector.DebuggerWorkspaceProvider):
        (WebInspector.DebuggerWorkspaceProvider.prototype.addDebuggerFile):
        * inspector/front-end/LiveEditSupport.js:
        (WebInspector.LiveEditSupport):
        (WebInspector.LiveEditSupport.prototype.uiSourceCodeForLiveEdit):
        (WebInspector.LiveEditWorkspaceProvider):
        (WebInspector.LiveEditWorkspaceProvider.prototype.addLiveEditFile):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkWorkspaceProvider):
        (WebInspector.NetworkWorkspaceProvider.prototype.addNetworkFile):
        * inspector/front-end/SimpleWorkspaceProvider.js: Renamed from Source/WebCore/inspector/front-end/NetworkWorkspaceProvider.js.
        (WebInspector.SimpleWorkspaceProvider):
        (WebInspector.SimpleWorkspaceProvider.uriForURL):
        (WebInspector.SimpleWorkspaceProvider.prototype.requestFileContent):
        (WebInspector.SimpleWorkspaceProvider.prototype.setFileContent):
        (WebInspector.SimpleWorkspaceProvider.prototype.searchInFileContent):
        (WebInspector.SimpleWorkspaceProvider.prototype.addFile):
        (WebInspector.SimpleWorkspaceProvider.prototype.removeFile):
        (WebInspector.SimpleWorkspaceProvider.prototype.uniqueURI):
        (WebInspector.SimpleWorkspaceProvider.prototype.reset):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2013-01-10  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        On Linux, should be able to get spelling suggestions without selecting the misspelled word
        https://bugs.webkit.org/show_bug.cgi?id=103520

        Reviewed by Ryosuke Niwa.

        Allow to get/insert spelling suggestions without selecting the misspelled word for
        Linux WebKit ports. WebCore assumes that the misspelled word has to be selected
        to get its suggestions.

        In compliance with native application behaviour a new editing policy is introduced,
        to do not highlight the misspelled word to just get its guesses.

        No new tests, covered by context-menu-suggestions.html.

        * WebCore.exp.in:
        Remove _ZN7WebCore6Editor21isSelectionMisspelledEv symbol as Mac port doesn't
        need it any longer.

        * editing/EditingBehavior.h:
        (EditingBehavior):
        (WebCore::EditingBehavior::shouldAllowSpellingSuggestionsWithoutSelection):
        Add a new behavior for Linux, to allow spelling suggestions without selecting
        the misspelled word.

        * editing/Editor.cpp:
        (WebCore::Editor::isContinuousSpellCheckingEnabled):
        Add missing const modifier, to use this method in 'misspelledWordAtCaretOrRange() const'.

        (WebCore::Editor::misspelledWordAtCaretOrRange):
        Allow to check spelling under the caret or selected word.
        Does nothing for selection made on the multiple words.

        (WebCore::Editor::misspelledSelectionString):
        Return the misspelled selection.

        (WebCore::Editor::guessesForMisspelledWord):
        Remove 'Selection' from method name as it may return guesses without selection.

        (WebCore::Editor::guessesForMisspelledOrUngrammatical):
        Ditto.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        Select the word under caret to meet the conditions from misspelledWordAtCaretOrRange.

        (WebCore::ContextMenuController::populate):
        Update guessesForMisspelledOrUngrammatical call.

2013-01-10  Hajime Morrita  <morrita@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=106283
        [Shadow DOM] HTMLContentElement and HTMLShadowElement should be behind SHADOW_DOM

        Reviewed by Kentaro Hara.

        No new tests. Covered by existing tests.

        This change moves <content> and <shadow> behind
        ENABLE(SHADOW_DOM). Note that empty stub definitions are remaining
        even after this change. They are for minimizing #if/#endif usage
        and won't hurt code size.

        * WebCore.exp.in:
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore):
        (WebCore::HTMLContentElement::create):
        (WebCore::HTMLContentElement::HTMLContentElement):
        * html/shadow/HTMLContentElement.h:
        (WebCore):
        (HTMLContentElement):
        * html/shadow/HTMLShadowElement.cpp:
        * html/shadow/HTMLShadowElement.h:
        (WebCore):
        (WebCore::isHTMLShadowElement):
        (WebCore::toHTMLShadowElement):
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::decorate):
        * testing/Internals.cpp:
        (WebCore::Internals::createContentElement):
        (WebCore::Internals::isValidContentSelect):

2013-01-10  Takashi Sakamoto  <tasak@google.com>

        Implement CSSGroupingRule for @host @-rules and @supports.
        https://bugs.webkit.org/show_bug.cgi?id=106418

        Reviewed by Antti Koivisto.

        CSSGroupingRule is to share code between CSSMediaRule, CSSSupportsRule
        and CSSHostRule. @supports and @host @-rules are dervied from
        CSSGroupingRule:
        http://www.w3.org/TR/2012/WD-css3-conditional/#the-cssgroupingrule-interface
        https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#css-host-rule-interface
        Since @media is also derived from CSSGroupingRule and @region has the
        same interface as CSSGroupingRule, modify to use CSSGroupingRule:
        http://dev.w3.org/csswg/css3-regions/#the-at-region-style-rule

        No new tests, because no new feature is implemented.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added CSSGroupingRule.h and CSSGroupingRule.cpp.
        * css/CSSAllInOne.cpp:
        Modified to include CSSGroupingRule.cpp.
        * css/CSSGroupingRule.cpp: Added.
        (WebCore):
        (WebCore::CSSGroupingRule::CSSGroupingRule):
        (WebCore::CSSGroupingRule::~CSSGroupingRule):
        (WebCore::CSSGroupingRule::insertRule):
        (WebCore::CSSGroupingRule::deleteRule):
        (WebCore::CSSGroupingRule::appendCssTextForItems):
        (WebCore::CSSGroupingRule::length):
        (WebCore::CSSGroupingRule::item):
        (WebCore::CSSGroupingRule::cssRules):
        (WebCore::CSSGroupingRule::reattach):
        (WebCore::CSSGroupingRule::reportMemoryUsage):
        These codes are moved from CSSMediaRule and WebKitCSSRegionRule.
        * css/CSSGroupingRule.h:
        (WebCore):
        (CSSGroupingRule):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        (WebCore::CSSMediaRule::~CSSMediaRule):
        Make CSSMediaRule inherit CSSGroupingRule.
        (WebCore::CSSMediaRule::media):
        (WebCore::CSSMediaRule::reattach):
        Keep the code for updating media queries' CSSOMWrapper.
        (WebCore::CSSMediaRule::reportMemoryUsage):
        We need to report media queries' CSSOMWrapper memory usage.
        (WebCore::CSSMediaRule::mediaQueries):
        (WebCore::CSSMediaRule::cssText):
        * css/CSSMediaRule.h:
        * css/WebKitCSSRegionRule.cpp:
        Make WebKitCSSRegionRule inherit CSSGroupingRule.
        (WebCore::WebKitCSSRegionRule::WebKitCSSRegionRule):
        (WebCore::WebKitCSSRegionRule::cssText):
        * css/WebKitCSSRegionRule.h:
        * css/StyleRule.h:
        Added inlined accessor to obtain StyleRuleMedia* and StyleRuleRegion*
        from StyleRuleBlock*.

2012-12-28  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] add an option to reload the page if there is an uninstrumented canvas
        https://bugs.webkit.org/show_bug.cgi?id=105822

        Reviewed by Pavel Feldman.

        Show in the front-end an option to reload the page if there is an uninstrumented canvas.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileType):
        (WebInspector.CanvasProfileType.prototype.decorationElement):
        (WebInspector.CanvasProfileType.prototype._updateDecorationElement):
        (WebInspector.CanvasProfileType.prototype._onReloadPageButtonClick):
        * inspector/front-end/ProfileLauncherView.js:
        (WebInspector.ProfileLauncherView.prototype.addProfileType):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.decorationElement):

2013-01-10  Dimitri Glazkov  <dglazkov@chromium.org>

        The word "selector" is somewhat redundant redundantly used in SelectorChecker.
        https://bugs.webkit.org/show_bug.cgi?id=106413

        In https://bugs.webkit.org/show_bug.cgi?id=105864, Antti suggested reducing some of the redundant uses of the word
        "selector" in SelectorChecker. Here's a start.

        Reviewed by Antti Koivisto.

        Simple renames, no change in behavior.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match): Renamed.
        (WebCore):
        (WebCore::SelectorChecker::fastCheck): Ditto,
        (WebCore::SelectorChecker::checkOne): Ditto.
        * css/SelectorChecker.h:
        (SelectorChecker):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList): Changed to use new name.
        (WebCore::StyleResolver::ruleMatches): Renamed from checkSelector to better match argument and return value.
        (WebCore::StyleResolver::checkRegionSelector): Changed to use new names.
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::matches): Ditto.
        (WebCore::SelectorDataList::execute): Ditto.
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorChecker::checkContentSelector): Ditto.

2013-01-10  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: Pass the script url to the script-preprocessor script
        https://bugs.webkit.org/show_bug.cgi?id=104384

        Reviewed by Pavel Feldman.

        Add url argument to the script-preprocessor script in PageAgent.reload()

        Test: inspector/debugger/debugger-script-preprocessor.html

        * bindings/v8/DebuggerScript.js:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptPreprocessor::ScriptPreprocessor):
        (WebCore::ScriptDebugServer::ScriptPreprocessor::preprocessSourceCode):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createInjectedScript):

2013-01-10  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: DataGrid refactoring: make cell editing more generic.
        https://bugs.webkit.org/show_bug.cgi?id=105849

        Reviewed by Pavel Feldman.

        Editing feature has been added to DataGrid to edit localStorage.
        Column numbers (0 and 1) are hardcoded.

        This patch makes column editing feature more generic: remove hardcoded
        colums, take "editable" column property into account.

        This patch is a prerequisite for cookie editing.

        * inspector/front-end/DOMStorageItemsView.js:
        Use meaningful column names.
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._ondblclick): Check column editability.
        (WebInspector.DataGrid.prototype._contextMenuInDataTable): Ditto.
        (WebInspector.DataGridNode.prototype.createCell):
        Supply cell element with column id.
        (WebInspector.DataGrid.prototype.columnIdentifierFromNode):
        Added utility method.
        (WebInspector.DataGrid.prototype._nextEditableColumn): Ditto.
        (WebInspector.DataGrid.prototype._keyDown): Calculate editable column.
        (WebInspector.DataGrid.prototype._editingCommitted): Ditto.
        (WebInspector.DataGrid.prototype._startEditing): Ditto.
        (WebInspector.DataGrid.prototype._startEditingColumnOfDataGridNode):
        Refined parameter type / name.
        (WebInspector.DataGrid.prototype._resizerDragging):
        Fix resizer index property names.
        (WebInspector.DataGrid.prototype._startResizerDragging): Ditto.
        (WebInspector.DataGrid.prototype._positionResizers): Ditto.
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._updateDividersIfNeeded): Ditto.

2013-01-10  Matt Falkenhagen  <falken@chromium.org>

        Elements must be reattached when inserted/removed from top layer
        https://bugs.webkit.org/show_bug.cgi?id=105489

        Reviewed by Julien Chaffraix.

        Ensure a reattach occurs when an element is inserted/removed from top layer, so its renderer can be inserted correctly:
        as a child of RenderView in top layer sibling order if it's in the top layer, and in the usual place otherwise.

        We previously relied on style recalc to catch when an element is inserted/removed from the top layer, because it
        only happens on dialog.show/close which toggle display: none. But that is incorrect because, for example, close()
        followed immediately by show() results in no style change.

        Tests: fast/dom/HTMLDialogElement/removed-element-is-removed-from-top-layer.html
               fast/dom/HTMLDialogElement/top-layer-stacking-correct-order-remove-readd.html

        * dom/Element.cpp:
        (WebCore::Element::removedFrom): Call Document::removeFromTopLayer to let the element be removed from the top layer vector.
        removeFromTopLayer calls Element::setIsInTopLayer(false) itself if needed.
        (WebCore::Element::setIsInTopLayer): Ensure a reattach occurs if the element is already attached.

2013-01-10  Shinya Kawanaka  <shinyak@chromium.org>

        When a selected node in nested ShadowDOM is deleted, selection have wrong range.
        https://bugs.webkit.org/show_bug.cgi?id=106526

        Reviewed by Ryosuke Niwa.

        Since FrameSelection and htmlediting did not consider nested Shadow DOM, the FrameSelection still selects
        removed elements if selected nodes in nested Shadow DOM are removed.

        We have to use containsIncludingShadowDOM to handle with nested Shadow DOM correctly.

        Test: fast/dom/shadow/selection-in-nested-shadow.html

        * editing/FrameSelection.cpp:
        (WebCore::removingNodeRemovesPosition):
        * editing/htmlediting.cpp:
        (WebCore::updatePositionForNodeRemoval):

2013-01-10  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Refactoring: InsertionPoint could simplify its subclass hooks
        https://bugs.webkit.org/show_bug.cgi?id=106614

        Reviewed by Dimitri Glazkov.

        This change simplifies InsertionPoint overrides and give some flexibility to it.

        The change

        - Removes InsertionPoint::isSelectValid(). now ContentSelectorQuery parses given selector anyway.
          Invalid select attribute is handled by newly introduced matchTypeFor() method.
        - Introduces InsertionPoint::matchTypeFor() to give a chance each InsertionPoint to decide whether it
          accepts the given node as its distribution. Then it lets DetailsSummaryElement adopt it.
        - Pulls some HTMLShadowElement overrides up to InsertionPoint so that other upcoming InsertionPoint
          subclasses don't need to override them.

        No new tests. Refactoring.

        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSummaryElement::DetailsSummaryElement):
        - Implemented matchTypeFor() to get rid of HTMLContentElement machinery which is compiled out in the upcoming change.
        (DetailsSummaryElement):
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorQuery::ContentSelectorQuery):
        (WebCore::ContentSelectorQuery::matches):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::matchTypeFor): Added.
        (WebCore):
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        (WebCore::isHTMLContentElement):
        * html/shadow/HTMLShadowElement.cpp:
        * html/shadow/HTMLShadowElement.h:
        (HTMLShadowElement):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::emptySelectorList): Moved from HTMLShadowElement.
        (WebCore):
        * html/shadow/InsertionPoint.h:
        (WebCore::InsertionPoint::matchTypeFor): Added.
        (WebCore::InsertionPoint::selectorList): Moved from HTMLShadowElement.
        (InsertionPoint):
        * testing/Internals.cpp:
        (WebCore::Internals::isValidContentSelect):

2013-01-10  Dean Jackson  <dino@apple.com>

        Plugin snapshot label should take device resolution and inset into account
        https://bugs.webkit.org/show_bug.cgi?id=106619

        Reviewed by Simon Fraser.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintLabel): Take into account the inset in the label image.
        (WebCore::RenderSnapshottedPlugIn::tryToFitStartLabel): Look at the page's device scale, and adjust the label image accordingly.

2013-01-10  James Robinson  <jamesr@chromium.org>

        [chromium] Store scrollable layer's contents size for coordinated scrollable layers
        https://bugs.webkit.org/show_bug.cgi?id=106518

        Reviewed by Adrienne Walker.

        This stores a scrollable layer's contentsSize in the scroll layer's bounds, which is otherwise not useful. This
        value is currently calculated based on fragile knowledge of the tree structure immediately beneath a scrollable
        layer.

        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated):

2013-01-10  Dan Beam  <dbeam@chromium.org>

        Implement AutocompleteErrorEvent#reason
        https://bugs.webkit.org/show_bug.cgi?id=105568

        Reviewed by Adam Barth.

        Test: fast/events/constructors/autocomplete-error-event-constructor.html

        * WebCore.gypi: Added AutocompleteErrorEvent.idl and AutocompleteErrorEvent.h for chromium port's build.
        * dom/AutocompleteErrorEvent.h: Added.
        (WebCore): Added new type of error named AutocompleteErrorEvent.
        (AutocompleteErrorEventInit): Added init params for AutocompleteErrorEvents (so initEvent() can be used).
        (AutocompleteErrorEvent): Added a new error event that inherits from Event but also has a reason for failure.
        (WebCore::AutocompleteErrorEvent::create): Factory function to create AutocompleteErrorEvents.
        (WebCore::AutocompleteErrorEvent::reason): The reason why a requestAutocomplete() invocation failed. Can be
                                                   "disabled", "cancel", or "invalid".
        (WebCore::AutocompleteErrorEvent::interfaceName): The name of the event's interface (for event.toString()).
        (WebCore::AutocompleteErrorEvent::AutocompleteErrorEvent): Various ways of constructing the error event.
        * dom/AutocompleteErrorEvent.idl: Added.
        * dom/EventNames.in: Added AutocompleteError to this list, based on REQUEST_AUTOCOMPLETE conditional.
        * html/HTMLFormElement.cpp: Updated form elements to dispatch AutocompleteErrorEvents on errors and to give
                                    more details (event.reason) when the request fails.
        (WebCore::HTMLFormElement::requestAutocomplete): Changed to newly added failure type "disabled".
        (WebCore::HTMLFormElement::finishRequestAutocomplete): Changed
        * html/HTMLFormElement.h: Added new results (ErrorDisabled, ErrorCancel, ErrorInvalid).
        * page/DOMWindow.idl: Added global event constructor for new AutocompleteErrorEvent() style event creation.

2013-01-10  Yong Li  <yoli@rim.com>

        HTMLMediaElement::resume() should schedule a load rather than load immediately
        https://bugs.webkit.org/show_bug.cgi?id=106587

        Reviewed by Eric Carlson.

        It is not always safe to start the jobs at the time resume() is called. That is why the jobs are
        suspended. It can also be suspended again right after being resumed.

        No new tests as there is no visible functional change, also it is a theoretically good-to-have change
        that doesn't fix any known cross-platform issue.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::resume): Replace load() with scheduleLoad().

2013-01-10  Adam Barth  <abarth@webkit.org>

        Add an ENABLE macro and a WebCore::Setting for the threaded parser
        https://bugs.webkit.org/show_bug.cgi?id=106595

        Reviewed by Benjamin Poulain.

        This patch adds both a WebCore::Setting and an ENABLE macro for the
        threaded parser. We plan to keep the ENABLE macro off by default for a
        while. The runtime setting will let us more easily conduct A/B
        experiments when the time arises.

        * page/Settings.in:

2013-01-10  Xianzhu Wang  <wangxianzhu@chromium.org>

        Regression(r129944): Heap-use-after-free in WebCore::computeNonFastScrollableRegion
        https://bugs.webkit.org/show_bug.cgi?id=99515

        Reviewed by Simon Fraser.

        The object used-after-freed is a destructed FrameView that is still in the m_scrollableAreas set of the parent FrameView. Actually it has been removed from m_scrollableAreas when setParent(0), but then is added back in updateScrollableAreaSet() because its frameViewParent() is still not 0 (though parent() is already 0).

        No new tests. The heap-use-after-free doesn't always cause crash so it can't be stably tested with a test case. Memory analysis tools like asan discovered the heap-use-after-free and verified that the patch can fix the issue.

        * page/FrameView.cpp:
        (WebCore::FrameView::parentFrameView): Checks if the FrameView has been removed from the parent.

2013-01-10  John Mellor  <johnme@chromium.org>

        Fix scale of screen.width, window.outerWidth and @media device-width when page scale not applied in compositor.
        https://bugs.webkit.org/show_bug.cgi?id=106460

        Reviewed by Kenneth Rohde Christiansen.

        screen.width, window.outerWidth and @media device-width should be in
        density independent (UI) pixels, not physical screen pixels.

        This already works on most ports (including iOS). However Chrome for
        Android currently internally sizes its windows in physical screen pixels
        instead of density independent pixels, and this leaks through in the
        sizes provided to WebCore.

        This patch scales these sizes appropriately before they reach JavaScript,
        on platforms where the applyPageScaleFactorInCompositor setting is false
        (i.e. just Chrome for Android). Once Chrome for Android switches over to
        the same coordinate space, the applyPageScaleFactorInCompositor setting
        will be removed, along with any code (such as this) that depends on it.

        The effect of this patch on Chrome for Android when viewing a page with
        a width=device-width viewport on a Galaxy Nexus (720x1280 @ dPR 2) is:
            @media device-width      changes from 720 to 360
            screen.width             changes from 720 to 360
            screen.availWidth        changes from 720 to 360
            window.outerWidth        changes from 720 to 360
            window.innerWidth                    remains 360 (at overview zoom)
            @media width                         remains 360
            document.documentElement.clientWidth remains 360
            document.documentElement.offsetWidth remains 360
            document.documentElement.scrollWidth remains 360
            document.body.clientWidth            remains 360
            document.body.offsetWidth            remains 360
            document.body.scrollWidth            remains 360
        And similarly for heights (though they are slightly less than 640, since
        toolbars etc. get subtracted from the available height).

        No new tests, as applyDeviceScaleFactorInCompositor appears to always be
        true in DumpRenderTree, so this situation cannot occur there.

        * page/Settings.in:
            Added applyDeviceScaleFactorInCompositor setting, which allows
            detecting whether we need to normalize the scale.
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::toUserSpace):
            Static function for normalizing screen rect scale.
        (WebCore::screenRect):
            Uses toUserSpace.
        (WebCore::screenAvailableRect):
            Uses toUserSpace.
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processSubtree):
            Use applyDeviceScaleFactorInCompositor instead of
            applyPageScaleFactorInCompositor, to scale the window rect correctly
            on platforms other than Chrome for Android.

2013-01-10  Florin Malita  <fmalita@chromium.org>

        Rename GraphicsContext::addRoundedRectClip
        https://bugs.webkit.org/show_bug.cgi?id=106581

        Reviewed by Simon Fraser.

        This patch renames GraphicsContext::addRoundedRectClip to clipRoundedRect for consistency
        with the other GC clipping methods.

        No new tests: no functional changes.

        * WebCore.order:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipRoundedRect):
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipRoundedRect):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::clipRoundedInnerRect):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        * rendering/RenderThemeMacShared.mm:
        (WebCore::RenderThemeMacShared::paintMenuListButtonGradients):
        (WebCore::RenderThemeMacShared::paintSliderTrack):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSearchFieldCancelButton):

2013-01-10  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Adding the new id attribute to MediaStream and MediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=106564

        Reviewed by Adam Barth.

        Specification: http://dev.w3.org/2011/webrtc/editor/getusermedia.html
        MediaStream looses its label attribute and instead gets an id attribute.
        MediaStreamTrack gets an id attribute.

        Not testable yet, will add tests in a followup patch.

        * Modules/mediastream/MediaStream.h:
        (WebCore::MediaStream::label):
        (MediaStream):
        (WebCore::MediaStream::id):
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::id):
        (WebCore):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:
        * platform/chromium/support/WebMediaStreamComponent.cpp:
        (WebKit::WebMediaStreamComponent::initialize):
        (WebKit):
        (WebKit::WebMediaStreamComponent::isEnabled):
        (WebKit::WebMediaStreamComponent::id):
        (WebKit::WebMediaStreamComponent::source):
        * platform/chromium/support/WebMediaStreamDescriptor.cpp:
        (WebKit::WebMediaStreamDescriptor::label):
        (WebKit):
        (WebKit::WebMediaStreamDescriptor::id):
        * platform/mediastream/MediaStreamComponent.h:
        (WebCore::MediaStreamComponent::id):
        (WebCore::MediaStreamComponent::MediaStreamComponent):
        (MediaStreamComponent):
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::create):
        (WebCore::MediaStreamDescriptor::id):
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
        (MediaStreamDescriptor):

2013-01-10  Ojan Vafai  <ojan@chromium.org>

        Flexboxes incorrectly add the scrollbar width to the intrinsic width of fixed-width items
        https://bugs.webkit.org/show_bug.cgi?id=106591

        Reviewed by Levi Weintraub.

        The scrollbar width should only be added if the width of the flex item
        is not fixed.

        Test: fast/css/fixed-width-intrinsic-width-excludes-scrollbars.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        Use shared helper method. This also happens to fix the vertical
        writing-mode case.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::instrinsicScrollbarLogicalWidth):
        (WebCore):
        * rendering/RenderBox.h:
        (RenderBox):
        Add a method for determining the scrollbar's contribution to the boxes
        intrinsic width.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::computePreferredLogicalWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computePreferredLogicalWidths):
        Use shared code for determining the scrollbar width and only add the
        width when computing the intrinsic widths.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computePreferredLogicalWidths):\
        Just adding a FIXME to account for scrollbar width.

2013-01-10  Nate Chapin  <japhet@chromium.org>

        Replace unnecessary null-checks with an assert in MainResourceLoader::continueAfterNavigationPolicy.
        https://bugs.webkit.org/show_bug.cgi?id=106476

        Reviewed by Alexey Proskuryakov.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy): Null-checks for resourceLoader were
            added in an abundance of caution in r139150. Given that we know the load hasn't been cancelled,
            resourceLoader can only be null if continueAfterNavigationPolicy() has already been called
            before when m_substituteData is valid. continueAfterNavigationPolicy() is only called for redirects,
            and SubstituteData doesn't support redirects, so it is correct to assert that resourceLoader is non-null.

2013-01-10  Levi Weintraub  <leviw@chromium.org>

        ScrollingCoordinator touch event hit rects aren't converted to proper coordinates when in nested views
        https://bugs.webkit.org/show_bug.cgi?id=106383

        Reviewed by James Robinson.

        ScrollingCoordinator uses clippedOverflowRectForRepaint(0) to generate the bounds for a renderer's hit
        testing rect. The rect this returns is in the coordinates of its document. This change converts the
        rect to the outermost view's coordinate system using convertToContainingView.

        Tests: platform/chromium/fast/events/touch/touch-hit-rects-in-iframe.html

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::accumulateRendererTouchEventTargetRects):

2013-01-10  Levi Weintraub  <leviw@chromium.org>

        Regression(r137939): Heap-use-after-free in WebCore::accumulateDocumentEventTargetRects
        https://bugs.webkit.org/show_bug.cgi?id=106454

        Reviewed by James Robinson.

        Correctly removing child Documents from their parent's tracked touch handler maps when detaching and
        when their last touch event handler is removed.

        Test: fast/events/touch/nested-document-with-touch-handler-detached-crash.html

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

2013-01-10  Nate Chapin  <japhet@chromium.org>

        REGRESSION(r138222): WebDocumentLoaderMac-related leaks seen on Leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=106137

        Reviewed by Brady Eidson.

        Tested manually by comparing before and after leaks output for WK1-mac.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError): Call dispatchDidFailLoading() if
            a SubstituteData load fails or is cancelled. Without this call, load counts
            are not balanced on WebDocumentLoaderMac and it is retained forever.
        (WebCore::MainResourceLoader::didFinishLoading):

2013-01-10  Robert Kroeger  <rjkroege@chromium.org>

        Manually revert http://trac.webkit.org/changeset/136012
        https://bugs.webkit.org/show_bug.cgi?id=106580

        Reviewed by Dimitri Glazkov.

        136012 broke touch-scrolling of an overflow div in an iframe. Revert manually
        to work around conflicts.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):

2013-01-10  Robert Hogan  <robert@webkit.org>

        REGRESSION(r136967): margin-top + overflow:hidden causes incorrect layout for internal floated elements
        https://bugs.webkit.org/show_bug.cgi?id=106374

        Reviewed by David Hyatt.

        r136397 treated any self-collapsing block that had a clearance delta as though it was clearing a float, but
        blocks that avoid floats can get a clearance delta too. So just ensure there is clearance on the block when deciding
        whether we need to add the margin back in before placing the float.

        Test: fast/block/margin-collapse/self-collapsing-block-with-overflow-hidden-and-float-child.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace):

2013-01-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Color picker in Styles pane shows wrong initial color
        https://bugs.webkit.org/show_bug.cgi?id=106567

        Reviewed by Pavel Feldman.

        The RGB's G value for "crimson" was wrong.

        * inspector/front-end/Color.js:

2013-01-10  Tony Chang  <tony@chromium.org>

        Speed up supplemental dependency computation
        https://bugs.webkit.org/show_bug.cgi?id=106503

        Reviewed by Adam Barth.

        On my machine, generating supplemental IDL dependencies was taking about 18s
        because it has to run the C preprocessor on each IDL file. Avoid this by using
        a regular expression to find the Supplemental= value in each IDL file rather than
        doing a full parse. Now generating supplemental IDL dependencies is less than a
        second.

        preprocess-idls.pl used to also check IDL attributes against IDLAttributes.txt.
        Move this code to run in generate-bindings.pl. This change revealed that
        TestRunner.idl uses PassContext so add that to IDLAttributes.txt.

        No new tests, this is a build refactor. EWS bots should be green.

        * DerivedSources.make: Remove --idlAttributesFile from preprocess-idls.pl and add it to generate-bindings.pl.
        * DerivedSources.pri: Remove --idlAttributesFile from preprocess-idls.pl and add it to generate-bindings.pl.
        * GNUmakefile.am: Remove --idlAttributesFile from preprocess-idls.pl and add it to generate-bindings.pl.
        * UseJSC.cmake: Remove --idlAttributesFile from preprocess-idls.pl and add it to generate-bindings.pl.
        * UseV8.cmake: Remove --idlAttributesFile from preprocess-idls.pl and add it to generate-bindings.pl.
        * WebCore.gyp/WebCore.gyp: Remove --idlAttributesFile from preprocess-idls.pl and add it to generate-bindings.pl.
        * bindings/scripts/IDLAttributes.txt: Add PassContext needed by TestRunner.idl.
        * bindings/scripts/generate-bindings.pl:
        (loadIDLAttributes): Moved from preprocess-idls.pl.
        (checkIDLAttributes): Moved from preprocess-idls.pl.
        (checkIfIDLAttributesExists): Moved from preprocess-idls.pl.
        * bindings/scripts/preprocess-idls.pl:
        (getSupplementalFromIDLFile): Helper method to get Supplemental=* quickly.

2013-01-10  Max Vujovic  <mvujovic@adobe.com>

        [CSS Filters] RenderLayerCompositor::addToOverlapMap should take into account the filters outsets (ie. blur and drop-shadow)
        https://bugs.webkit.org/show_bug.cgi?id=94022

        Reviewed by Simon Fraser.

        When a layer has a filter that moves pixels, we need to add its entire bounds, including its
        outsets and children, to the overlap map. The filter can move the children's pixels
        anywhere in the layer, so we can't rely on the children's bounds.

        Eventually, we should avoid adding children to the overlap map if the parent's bounds used
        for overlap testing already include the children. I've added a FIXME for this optimization.

        Tests: compositing/filters/sw-layer-overlaps-hw-shadow.html
               compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow.html
               compositing/filters/sw-shadow-overlaps-hw-layer.html
               compositing/filters/sw-shadow-overlaps-hw-shadow.html

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::overlapBounds):
            If necessary, return the calculated layer bounds, including the children. Otherwise,
            return the localBoundingBox.
        (RenderLayer):
        (WebCore::RenderLayer::overlapBoundsIncludeChildren):
            If the layer has a filter that moves pixels, return true.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
            Add the overlapBounds instead of the localBoundingBox to the overlap map.
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
            Use the overlapBounds instead of the localBoundingBox for overlap testing.

2013-01-09  Ojan Vafai  <ojan@chromium.org>

        intrinsic min-widths don't override width for file upload controls
        https://bugs.webkit.org/show_bug.cgi?id=106517

        Reviewed by Tony Chang.

        Separate out computing intrinsic width from perferred width so that
        we can use the intrinsic width correctly when applying min-width/max-width.
        The preferred width is the width used in its container's computation
        of its intrinsic width.

        This is the first in a series of patches making this work across
        the render tree. 

        Test: fast/forms/file/intrinsic-min-width-overrides-width.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::minIntrinsicLogicalWidth):
        (WebCore):
        (WebCore::RenderBox::maxIntrinsicLogicalWidth):
        (WebCore::RenderBox::computeIntrinsicLogicalWidths):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths):
        (WebCore):
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderFileUploadControl.h:
        (RenderFileUploadControl):

2013-01-10  Victor Carbune  <victor@rosedu.org>

        media/video-controls-captions.html fails after fixing https://bugs.webkit.org/show_bug.cgi?id=105536
        https://bugs.webkit.org/show_bug.cgi?id=106230

        Reviewed by Eric Carlson.

        Until Chromium has proper controls for lists of text tracks, the caption button
        needs to preserve its functionality.

        Updated TestExpectations to reactivate test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible): Added explicit call to updateTextTrackDisplay.
        This enables hiding the tracks immediately.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Added extra check before rendering
        that captions should actually be displayed.

2013-01-10  Hajime Morrita  <morrita@google.com>

        ComposedShadowTreeWalker shouldn't be exposed to non-ShadowDOM classes
        https://bugs.webkit.org/show_bug.cgi?id=106505

        Reviewed by Dimitri Glazkov.

        This change hides ComposedShadowTreeWalker from non-ShadowDOM classes by

        - introducing thin wrapper functions on NodeRenderingTraversal and relacing
          CSTW callsites with it,
        - replacing ComposedShadowTreeWalker usage with AncestorChainWalker if possible and
        - moving AncestorChainWalker to its own file and including it on files
          which needs only AncestorChainWalker. This eliminates ComposedShadowTreeWalker.h inclusions.

        No new tests. No behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/AncestorChainWalker.cpp: Added. Extracted from ComposedShadowTreeWalker.cpp
        (WebCore):
        (WebCore::AncestorChainWalker::AncestorChainWalker):
        (WebCore::AncestorChainWalker::parent):
        * dom/AncestorChainWalker.h: Added. Extracted from ComposedShadowTreeWalker.h
        (WebCore):
        (AncestorChainWalker):
        (WebCore::AncestorChainWalker::get):
        (WebCore::AncestorChainWalker::crossingInsertionPoint):
        * dom/ComposedShadowTreeWalker.cpp:
        * dom/ComposedShadowTreeWalker.h:
        * dom/DOMAllInOne.cpp:
        * dom/ElementShadow.h:
        (WebCore::shadowOfParent):
        (WebCore):
        * dom/EventDispatcher.cpp:
        * dom/Node.cpp:
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::nextInScope):
        (NodeRenderingTraversal):
        (WebCore::NodeRenderingTraversal::previousInScope): Added.
        (WebCore::NodeRenderingTraversal::parentInScope): Added.
        (WebCore::NodeRenderingTraversal::lastChildInScope): Added.
        * dom/NodeRenderingTraversal.h:
        (NodeRenderingTraversal):
        * dom/TreeScope.cpp:
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::attach):
        * page/EventHandler.cpp:
        * page/FocusController.cpp: Replacing CSTW with NRT
        (WebCore):
        (WebCore::FocusNavigationScope::focusNavigationScopeOf):
        (WebCore::FocusController::findNodeWithExactTabIndex):
        (WebCore::nextNodeWithGreaterTabIndex):
        (WebCore::previousNodeWithLowerTabIndex):
        (WebCore::FocusController::nextFocusableNode):
        (WebCore::FocusController::previousFocusableNode):

2013-01-10  Zan Dobersek  <zandobersek@gmail.com>

        Remove the ENABLE_ANIMATION_API feature define occurences
        https://bugs.webkit.org/show_bug.cgi?id=106544

        Reviewed by Simon Fraser.

        The Animation API code was removed in r137243. The ENABLE_ANIMATION_API
        feature define handling still lingers in various build systems and configurations
        but is of no use, so it should be removed.

        No new tests - no new functionality.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.features.am.in:

2013-01-10  Robert Phillips  <robertphillips@chromium.org>

        Serialization of Gradients fails when PlatformContextSkia is not bitmap backed
        https://bugs.webkit.org/show_bug.cgi?id=106559

        Reviewed by Stephen White.

        This patch switches over from having platform/Skia improperly
        crack open the device to find the bitmap configuration to just
        specifying it directly.

        No new tests. This bug is Chromium specific and only occurs in a
        debugging tool (when serializing to a Skia-specific file format).

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::createCompatibleDevice):

2013-01-10  Alexander Pavlov  <apavlov@chromium.org>

        The "outline-offset" property is not found in the computed style property list
        https://bugs.webkit.org/show_bug.cgi?id=106561

        Reviewed by Alexis Menard.

        Listed CSSPropertyOutlineOffset in the CSSComputedStyleDeclaration's computedProperties[].

        Test: fast/css/getComputedStyle/getComputedStyle-outline-offset.html

        * css/CSSComputedStyleDeclaration.cpp:

2013-01-10  David Faure  <faure@kde.org>

        PluginPackage::freeLibraryTimerFired asserts if plugin got loaded again meanwhile
        https://bugs.webkit.org/show_bug.cgi?id=106463

        Reviewed by Simon Hausmann.

        No new tests, this code path will be tested by bug 106140.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::freeLibraryTimerFired): skip unloading if loaded again meanwhile.

2013-01-10  Alexander Pavlov  <apavlov@chromium.org>

        CSSParser does not allow the absence of whitespace between "and" and "expression"
        https://bugs.webkit.org/show_bug.cgi?id=106458

        Reviewed by Antti Koivisto.

        The issue was that a construct similar to "and(max-width: 480px)" looks like a function call (token type FUNCTION), even though
        it is actually a MEDIA_AND followed by a parenthesized expression.

        Test: fast/css/media-rule-no-whitespace.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken): Return if the detection has been successful.
        (WebCore::CSSParser::realLex): Test for media query tokens if function type detection has failed.
        * css/CSSParser.h:

2013-01-10  Alexis Menard  <alexis@webkit.org>

        ASSERT_NOT_REACHED in StylePropertySet::fontValue when accessing font style property through JS after setting style font size.
        https://bugs.webkit.org/show_bug.cgi?id=88866

        Reviewed by Alexander Pavlov.

        StylePropertySet::fontValue always assumed that it was called using
        style.font after a subsequent call which set the shorthand font. The
        ASSERT_NOT_REACHED assumed that all longhands of the font shorthand not
        set by the shorthand itself were set to initial. While it's true when
        we set the font shorthand (i.e all longhands are set to implicit initial)
        it is not true when you set the longhands individually. For example setting
        font-size will not set other font properties to initial. It is the behavior of all
        other shorthands in WebKit. When reconstructing the shorthand other
        properties tests whether the value of each longhands is initial or not
        (if not then we omit the value, as we should always construct the
        shortest shorthand possible) or if the value is set or not (if set then
        we include it in the shorthand if not then we omit it). The comment
        removed was also talking about invalid font property potentially built
        by fontValue(). So far appendFontLonghandValueIfExplicit will always
        construct a valid value as it takes care of adding ' ' or '/' when
        needed, so the return value is parsable and correct.

        Test: fast/css/font-shorthand-from-longhands.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::appendFontLonghandValueIfExplicit):
        (WebCore::StylePropertySet::fontValue):
        * css/StylePropertySet.h:

2013-01-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r139306.
        http://trac.webkit.org/changeset/139306
        https://bugs.webkit.org/show_bug.cgi?id=106550

        it broke inspector-protocol/nmi-webaudio-leak-test.html
        (Requested by loislo on #webkit).

        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::reportMemoryUsage):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::reportMemoryUsage):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::reportMemoryUsage):
        * css/MediaList.cpp:
        (WebCore::MediaList::reportMemoryUsage):
        * css/RuleSet.cpp:
        (WebCore::RuleData::reportMemoryUsage):
        (WebCore::RuleSet::reportMemoryUsage):
        (WebCore::RuleSet::RuleSetSelectorPair::reportMemoryUsage):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchedPropertiesCacheItem::reportMemoryUsage):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::reportMemoryUsage):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::reportMemoryUsage):
        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::reportMemoryUsage):
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::reportMemoryUsage):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::reportMemoryUsage):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::reportMemoryUsage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportMemoryUsage):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::reportMemoryUsage):
        * loader/Prerenderer.cpp:
        (WebCore::Prerenderer::reportMemoryUsage):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::reportMemoryUsage):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::reportMemoryUsage):
        * page/Page.cpp:
        (WebCore::Page::reportMemoryUsage):

2013-01-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: fix instrumentation for already instrumented classes 2/N
        https://bugs.webkit.org/show_bug.cgi?id=106546

        Reviewed by Vsevolod Vlasov.

        Many nontrivial class members were instrumented in reportMemoryUsage methods.

        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::reportMemoryUsage):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::reportMemoryUsage):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::reportMemoryUsage):
        * css/MediaList.cpp:
        (WebCore::MediaList::reportMemoryUsage):
        * css/RuleSet.cpp:
        (WebCore::RuleData::reportMemoryUsage):
        (WebCore::RuleSet::reportMemoryUsage):
        (WebCore::RuleSet::RuleSetSelectorPair::reportMemoryUsage):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchedPropertiesCacheItem::reportMemoryUsage):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::reportMemoryUsage):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::reportMemoryUsage):
        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::reportMemoryUsage):
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::reportMemoryUsage):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::reportMemoryUsage):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::reportMemoryUsage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportMemoryUsage):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::reportMemoryUsage):
        * loader/Prerenderer.cpp:
        (WebCore::Prerenderer::reportMemoryUsage):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::reportMemoryUsage):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::reportMemoryUsage):
        * page/Page.cpp:
        (WebCore::Page::reportMemoryUsage):

2013-01-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Add gstreamer 1.0.5 to jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=106178

        Reviewed by Laszlo Gombos.

        Remove GSTREAMER_INTERFACES_LIBRARIES from EFL
        CMake configuration.

        No new tests, no behavior change for layout tests.

        * PlatformEfl.cmake:

2013-01-09  Christophe Dumez  <christophe.dumez@intel.com>

        Unreviewed build fix after r139266.

        r139266 broke the debug build of the gstreamer backend due
        to a missing header include.

        No new tests, no behavior change.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:

2013-01-09  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Allow createIndex/createObjectStore to be asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=106377

        Reviewed by Tony Chang.

        Migrate implementations of createIndex/deleteIndex,
        createObjectStore/deleteObjectStore over to IDBDatabaseBackendImpl,
        so that they can be asynchronous in multi-process ports.

        Has the side effect of removing the last consumers of
        IDBIndexBackendImpl and IDBObjectStoreBackendImpl. The former
        is removed complete and the latter becomes a temporary namespace
        pending a further more mechanical code shuffle.

        A key refactoring effect is that the IDBDatabaseBackendImpl
        now contains the authoritative IDBDatabaseMetadata hierarchy,
        and updates to it are consolidated in one place rather than
        scattered across a parallel object tree.

        No new tests as this is just refactoring.

        * Modules/indexeddb/IDBBackingStore.cpp: Simplify objectstore/index loading and propagate errors.
        (WebCore::IDBBackingStore::getObjectStores):
        (WebCore::IDBBackingStore::getIndexes):
        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBCursorBackendImpl.cpp: Dependency cleanup.
        * Modules/indexeddb/IDBCursorBackendImpl.h: Dependency cleanup.
        (WebCore):
        * Modules/indexeddb/IDBDatabase.cpp: Frontend IDBObjectStores no longer hold onto backend objects.
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: Add all create/deleteIndex operations from IDBIndexBackendImpl.
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (DeleteObjectStoreOperation):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (CreateObjectStoreAbortOperation):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::DeleteObjectStoreAbortOperation):
        (DeleteObjectStoreAbortOperation):
        (CreateIndexOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore):
        (DeleteIndexOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (CreateIndexAbortOperation):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (DeleteIndexAbortOperation):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::GetOperation):
        (WebCore::IDBDatabaseBackendImpl::addObjectStore):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        (WebCore::IDBDatabaseBackendImpl::addIndex):
        (WebCore::IDBDatabaseBackendImpl::removeIndex):
        (WebCore::IDBDatabaseBackendImpl::openInternal):
        (WebCore::IDBDatabaseBackendImpl::metadata):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::createIndex):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::deleteIndex):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::get):
        (WebCore::IDBDatabaseBackendImpl::put):
        (WebCore::IDBDatabaseBackendImpl::setIndexKeys):
        (WebCore::IDBDatabaseBackendImpl::count):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabaseFinal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores): Load directly into metadata from backing store.
        (WebCore::CreateObjectStoreAbortOperation::perform):
        (WebCore::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore):
        (IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp: Removed.
        * Modules/indexeddb/IDBIndexBackendImpl.h: Removed.
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::IDBObjectStore): Frontend IDBIndex objects no longer hold onto backend.
        (WebCore::IDBObjectStore::createIndex): 
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::create):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (WebCore):
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::objectStore):
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2013-01-09  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: Don't throw exceptions when we don't have a callstack
        https://bugs.webkit.org/show_bug.cgi?id=104849

        Reviewed by Pavel Feldman.

        Check array details.callFrames.length before accessing array;

        No new tests, but this fix may help us find the cause of 'other' reasons.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):

2013-01-09  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Data grid header and content cells are misaligned.
        https://bugs.webkit.org/show_bug.cgi?id=105795

        Reviewed by Pavel Feldman.

        Header and content tables have different width -> same percent values
        turn to different cell widths.

        * inspector/front-end/DataGrid.js: Add "corner" cell to all rows.
        * inspector/front-end/dataGrid.css: Apply "corner" rules to "td" nodes.
        (.data-grid .data-container): Remove artificial padding.

2013-01-09  Tien-Ren Chen  <trchen@chromium.org>

        Make caret repainting container-aware
        https://bugs.webkit.org/show_bug.cgi?id=103955

        Reviewed by Simon Fraser.

        Only invalidate local rects on the caret's repaint container,
        instead of invalidating an absolute rect on the whole view.

        Test: fast/repaint/caret-with-transformation.html

        * editing/FrameSelection.cpp:
        (WebCore::caretRendersInsideNode):
        (WebCore::caretRenderer):
        (WebCore::FrameSelection::caretRenderer):
        (WebCore::DragCaretController::caretRenderer):
        (WebCore::repaintCaretForLocalRect):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::CaretBase::invalidateCaretRect):
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        * editing/FrameSelection.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintSelection):
        * rendering/RenderView.h:

2013-01-09  Ryosuke Niwa  <rniwa@webkit.org>

        Rebaseline the binding test after r139278.

        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):

2013-01-09  Ryosuke Niwa  <rniwa@webkit.org>

        [JSC] REGRESSION(r135093): A form control with name=length overrides length property on form.elements
        https://bugs.webkit.org/show_bug.cgi?id=105775

        Reviewed by Sam Weinig.

        Fixed the bug by respecting properties on ancestor classes.

        Test: fast/dom/collection-length-should-not-be-overridden.html

        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticValueSlotEntryWithoutCaching): Added.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody): Use getStaticValueSlotEntryWithoutCaching to climb up the class
        hierarchy.

2013-01-09  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] [WebGL] Remove GLX dependencies from X11WindowResources..
        https://bugs.webkit.org/show_bug.cgi?id=106319

        Reviewed by Kenneth Rohde Christiansen.

        This patch removes GLX specific calls from X11WindowResources.
        This class is shared by both GLX and EGL implementations.

        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::setGeometry):
        * platform/graphics/surfaces/glx/X11WindowResources.cpp:
        (WebCore::X11OffScreenWindow::reSizeWindow):

2013-01-09  Huang Dongsung  <luxtella@company100.net>

        Remove deviceScaleFactor argument in computeMinimumScaleFactorForContentContained().
        https://bugs.webkit.org/show_bug.cgi?id=106500

        Reviewed by Kenneth Rohde Christiansen.

        deviceScaleFactor argument is not used after r139189.

        No new tests. Refactoring only.

        * dom/ViewportArguments.cpp:
        (WebCore::computeMinimumScaleFactorForContentContained):
        * dom/ViewportArguments.h:
        (WebCore):

2013-01-09  Elliott Sprehn  <esprehn@gmail.com>

        Node::containingShadowRoot should be constant time
        https://bugs.webkit.org/show_bug.cgi?id=106494

        Reviewed by Dimitri Glazkov.

        There's no reason to traverse up the tree to find the containing
        ShadowRoot when we already know if we're in a ShadowRoot by looking at
        the treeScope().

        No new tests, just refactoring.

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

2013-01-09  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Distribution related code on ElementShadow should be minimized.
        https://bugs.webkit.org/show_bug.cgi?id=106294

        Reviewed by Dimitri Glazkov.

        This change moves ElementShadow::m_selectFeatures,
        m_shouldCollectSelectFeatureSet and related methods to
        ContentDistributor.

        There are also some renaming and small refactorings for better fit
        on new place:

        - shouldCollectSelectFeatureSet is renamed needsSelectorRuleSet for conciseness.
        - setShouldCollectSelectFeatureSet() which used recursion morphed into
          iterative willAffectSelector().
        - ensureDistributionFromDocument() becomes a static method.

        No new tests. Refactoring.

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::shouldInvalidateDistributionWhenAttributeChanged):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::addShadowRoot):
        (WebCore::ElementShadow::removeAllShadowRoots):
        * dom/ElementShadow.h:
        (ElementShadow):
        (WebCore::ElementShadow::invalidateDistribution):
        (WebCore::ElementShadow::ensureDistribution):
        (WebCore::ElementShadow::didAffectSelector):
        (WebCore::ElementShadow::willAffectSelector):
        (WebCore::ElementShadow::containingShadow):
        (WebCore):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ScopeContentDistribution::registerInsertionPoint):
        (WebCore::ScopeContentDistribution::unregisterInsertionPoint):
        (WebCore::ContentDistributor::ContentDistributor):
        (WebCore::ContentDistributor::ensureDistribution):
        (WebCore):
        (WebCore::ContentDistributor::ensureDistributionFromDocument):
        (WebCore::ContentDistributor::invalidateDistribution):
        (WebCore::ContentDistributor::ensureSelectFeatureSet):
        (WebCore::ContentDistributor::collectSelectFeatureSetFrom):
        (WebCore::ContentDistributor::didAffectSelector):
        (WebCore::ContentDistributor::willAffectSelector):
        (WebCore::ContentDistributor::didShadowBoundaryChange):
        * html/shadow/ContentDistributor.h:
        (ScopeContentDistribution):
        (WebCore::ContentDistributor::needsSelectFeatureSet):
        (WebCore::ContentDistributor::setNeedsSelectFeatureSet):
        (ContentDistributor):
        (WebCore::ContentDistributor::setValidity):
        (WebCore::ContentDistributor::needsInvalidation):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseAttribute):
        * html/shadow/HTMLContentElement.h:
        * html/shadow/HTMLShadowElement.cpp:
        (WebCore::HTMLShadowElement::olderShadowRoot):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::getDistributedNodes):
        (WebCore::InsertionPoint::insertedInto):
        (WebCore::InsertionPoint::removedFrom):
        * html/shadow/InsertionPoint.h:
        (WebCore::InsertionPoint::canAffectSelector):
        * testing/Internals.cpp:
        (WebCore::Internals::hasSelectorForIdInShadow):
        (WebCore::Internals::hasSelectorForClassInShadow):
        (WebCore::Internals::hasSelectorForAttributeInShadow):
        (WebCore::Internals::hasSelectorForPseudoClassInShadow):

2013-01-09  Shinya Kawanaka  <shinyak@chromium.org>

        Assert triggered in SelectorChecker::checkOneSelector when scrollbar (e.g. :horizontal) selector is specified.
        https://bugs.webkit.org/show_bug.cgi?id=106414

        Reviewed by Dimitri Glazkov.

        In SelectorChecker::checkOneSelector, scrollbar related pseudoType (e.g. :horizontal) is not handled anywhere.
        This caused ASSERT triggered. We have to check them.

        Test: fast/css/scrollbar-crash.html

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

2013-01-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix build after http://trac.webkit.org/changeset/139262

        * Modules/webaudio/DefaultAudioDestinationNode.cpp:

2013-01-09  Chris Rogers  <crogers@google.com>

        Allow live/local audio input to be enabled only when needed
        https://bugs.webkit.org/show_bug.cgi?id=106490

        Reviewed by Kenneth Russell.
        
        WebAudio can process live/local audio input using a MediaStreamAudioSourceNode.
        But currently the audio back-end is not able to know when/if audio input will be
        needed, so it needs to assume the worst and initialize the system to support potential
        audio input in all cases.  For some audio back-ends this can end up being less efficient
        than initializing for audio output only.  This patch adds the ability for the audio back-end
        to be able to initialize itself for audio input later on, only when/if it's needed.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource):
        * Modules/webaudio/AudioDestinationNode.h:
        (AudioDestinationNode):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        (WebCore::DefaultAudioDestinationNode::initialize):
        (WebCore::DefaultAudioDestinationNode::uninitialize):
        (WebCore::DefaultAudioDestinationNode::createDestination):
        (WebCore):
        (WebCore::DefaultAudioDestinationNode::enableInput):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        (DefaultAudioDestinationNode):
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        (OfflineAudioDestinationNode):
        (WebCore::OfflineAudioDestinationNode::sampleRate):
        * platform/audio/AudioDestination.h:
        (AudioDestination):
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestination::create):

2013-01-09  Tim Horton  <timothy_horton@apple.com>

        Don't drop to huge tile mode if we're only slow-scrolling because of a page overlay
        https://bugs.webkit.org/show_bug.cgi?id=106502
        <rdar://problem/12959143>

        Reviewed by Simon Fraser.

        We only use the MainThreadScrollingReason "ForcedOnMainThread" if WebKit2 installs
        a page overlay (TiledCoreAnimationDrawingArea::didInstallPageOverlay), which clients
        can cause arbitrarily.

        We probably should still use default-sized tiles in this case (this will also
        prevent us from falling into gigantic tiles for WebKit2 find-in-page, among other things).

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustTileCacheCoverage):

2013-01-09  Takashi Sakamoto  <tasak@google.com>

        border-radius with box-shadow is not rendered correctly
        https://bugs.webkit.org/show_bug.cgi?id=106404

        Reviewed by Hajime Morita.

        RoundedRect::isRenderable is wrong. So RoundedRect::adjustRadii
        is invoked for renderable RoundedRects.

        Test: fast/borders/border-radius-with-box-shadow.html

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::isRenderable):
        Have to compare topLeft's height plus bottomLeft's height with
        rect's height and to compare topRight's height plus bottomRight's
        height with rect's height.

2013-01-09  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/aria-labelledby-overrides-label.html requires a proper baseline
        https://bugs.webkit.org/show_bug.cgi?id=105638

        Reviewed by Martin Robinson.

        The test was failing for two reasons:
        - AccessibilityRenderObject::correspondingLabelForControlElement() was
          not ignoring the ARIA labelled-by property
        - AccessibilityController::accessibleElementById() was not implemented

        Because getting an element by ID cannot be done in the UIProcess, the
        decision was made to expose the element's ID as an accessible attribute
        of the object.

        In addition, fixing the bug in AccessibilityRenderObject made it possible
        to eliminate the Gtk platform-specific expectations for another test.

        No new tests; instead, the failing test was unskipped and a proper baseline
        provided.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::correspondingLabelForControlElement):
        Return null for objects where hasTextAlternative() is true.
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes): Expose the element's ID as an accessible
        attribute.

2013-01-09  Tony Gentilcore  <tonyg@chromium.org>

        Remove unused includes from HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=106496

        Reviewed by Levi Weintraub.

        Noticed these while searching HTMLTreeBuilder for non-thread friendly deps.

        No new tests because no new functionality.

        * html/parser/HTMLTreeBuilder.cpp:

2013-01-09  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Detached identifier after mesh box type is not applied
        https://bugs.webkit.org/show_bug.cgi?id=105321

        Reviewed by Dean Jackson.

        Before this patch, if a "detached" identifier followed a mesh box type identifier, the
        detached identifier was not applied. In other words, the mesh would still be attached.

        For example:
        -webkit-filter: custom(url(...) mix(url(...) normal source-atop), 1 1 border-box detached);

        Although the mesh box type is being removed from the Filter Effects spec, for now, we
        continue to accept the mesh box type in parsing because of existing content. Eventually,
        custom filters will transition to an at-rule syntax, once it is defined.

        Test: css3/filters/custom/custom-filter-detached-mesh-with-mesh-box-type.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCustomFilter):
            In CSSParser, do not add the mesh box type identifier to the list that will be passed to
            StyleResolver. StyleResolver is expecting a "detached" identifier in that position and
            does not interpret mesh box types.

2013-01-09  Dan Winship  <danw@gnome.org>

        [Soup] Handle redirection inside WebKit
        https://bugs.webkit.org/show_bug.cgi?id=61122
        https://bugs.webkit.org/show_bug.cgi?id=88961

        Reviewed by Martin Robinson.

        Rather than using libsoup's built-in redirection handling (which
        doesn't do everything exactly the way WebKit wants, and can't
        handle redirects to non-http URIs anyway), process redirections
        ourselves.

        No new tests; unskips a few existing tests.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (ResourceHandleInternal):
        * platform/network/soup/ResourceError.h:
        (ResourceError):
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::ResourceError::transportError):
        (WebCore):
        (WebCore::ResourceError::httpError):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore):
        (WebCore::gotHeadersCallback):
        (WebCore::restartedCallback):
        (WebCore::shouldRedirect):
        (WebCore::doRedirect):
        (WebCore::redirectCloseCallback):
        (WebCore::redirectSkipCallback):
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::sendRequestCallback):
        (WebCore::createSoupMessageForHandleAndRequest):
        (WebCore::createSoupRequestAndMessageForHandle):
        (WebCore::ResourceHandle::start):

2013-01-09  Florin Malita  <fmalita@chromium.org>

        [Skia] Implement GraphicsContext::addRoundedRectClip() using SkCanvas::clipRRect()
        https://bugs.webkit.org/show_bug.cgi?id=106461

        Reviewed by Stephen White.

        This patch adds a Skia-specific version of GraphicsContext::addRoundedRectClip() to take
        advantage of the SkCanvas::clipRRect() primitive.

        As a minor cleanup, the anonymous namespace in GraphicsContextSkia.cpp is extended to cover
        all the local helper functions.

        No new tests: coverage provided by existing tests.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::clipRRect):
        (WebCore):

2013-01-09  Andreas Kling  <akling@apple.com>

        SVG-as-image: Throw out cached bitmap renderings after they sit unused for some time.
        <http://webkit.org/b/106484>
        <rdar://problem/12983216>

        Reviewed by Antti Koivisto.

        Add a one-shot timer to SVGImageCache to self-clear the bitmap cache 30 seconds after last access.
        This prevents us from keeping huge ImageBuffers around in memory for the lifetime of the elements
        referencing that particular SVG file. (The ownership model is actually a bit more complicated
        but that's irrelevant to this issue.)

        10234kB progression on Membuster3.

        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::SVGImageCache):
        (WebCore::SVGImageCache::~SVGImageCache):
        (WebCore::SVGImageCache::clearBitmapCache):
        (WebCore::SVGImageCache::cacheClearTimerFired):
        (WebCore::SVGImageCache::lookupOrCreateBitmapImageForRenderer):
        * svg/graphics/SVGImageCache.h:
        (SVGImageCache):

2013-01-09  Alexey Proskuryakov  <ap@apple.com>

        Assertion failure in SubresourceLoader::didFail when reloading
        https://bugs.webkit.org/show_bug.cgi?id=101416

        Reviewed by Nate Chapin.

        Test: http/tests/cache/network-error-during-revalidation.html

        * loader/SubresourceLoader.cpp: (WebCore::SubresourceLoader::didFail): Handle revalidation.

2013-01-09  Alexandru Chiculita  <achicu@adobe.com>

        Assertion Failure in WebCore::RenderLayerCompositor::updateCompositingLayers
        https://bugs.webkit.org/show_bug.cgi?id=106419

        Reviewed by Simon Fraser.

        No new tests added, just un-skipped 3 existing tests.

        RenderLayerCompositor::updateCompositingLayers is being called with a pending layout, so computing the
        layers at that point would be useless & error-prone as they will be using incorrect layout values. If a layout is pending it means that 
        RenderLayerCompositor::updateCompositingLayers would get called again after the pending layout ends, so any values calculated at that point would be
        overwritten immediately. This patch removes the old ASSERT and makes it a return instead.

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

2013-01-09  Robert Hogan  <robert@webkit.org>

        REGRESSION(r111439): Focus ring is rendered incorrectly in fast/inline/continuation-outlines-with-layers.html
        https://bugs.webkit.org/show_bug.cgi?id=106064

        Reviewed by David Hyatt.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject): 

2013-01-09  Gregg Tavares  <gman@google.com>

        Add stub for CanvasProxy
        https://bugs.webkit.org/show_bug.cgi?id=106275

        Reviewed by Dean Jackson.

        No new tests as no new fuctionality exposed.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasProxy.cpp: Added.
        * html/canvas/CanvasProxy.h: Added.
        * html/canvas/CanvasProxy.idl: Added.

2013-01-09  Antti Koivisto  <antti@apple.com>

        Release FastMalloc thread caches on memory warning
        https://bugs.webkit.org/show_bug.cgi?id=106471

        Reviewed by Geoff Garen.
        
        FastMalloc keeps some memory in per-thread caches (currently 2MB each). We currently flush these caches on memory warning 
        for the main thread only. We should do it for other WebKit threads that use FastMalloc too.

        Call WTF::releaseFastMallocFreeMemory in a bunch of WebCore support threads on memory warning. Unfortunately we don't have 
        an uniform way of doing threads so this requires bunch of thread type specific code.
        
        Looks to be ~1% progression in membuster3 final and maximum numbers.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):
        * storage/StorageTask.cpp:
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h:
        (WebCore::StorageTask::createReleaseFastMallocFreeMemory):
        * storage/StorageThread.cpp:
        (WebCore::storageThreads):
        (WebCore):
        (WebCore::StorageThread::StorageThread):
        (WebCore::StorageThread::~StorageThread):
        (WebCore::StorageThread::releaseFastMallocFreeMemoryInAllThread):
        * storage/StorageThread.h:
        (StorageThread):
        * workers/WorkerThread.cpp:
        (WebCore::threadSetMutex):
        (WebCore::workerThreads):
        (WebCore::WorkerThread::workerThreadCount):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::~WorkerThread):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThread):
        (WebCore):
        * workers/WorkerThread.h:
        (WorkerThread):

2013-01-09  Tony Gentilcore  <tonyg@chromium.org>

        REGRESSION(r139141): Assertion failure in WebCore::HTMLConstructionSite::HTMLConstructionSite
        https://bugs.webkit.org/show_bug.cgi?id=106412

        Reviewed by Darin Adler.

        This corrects the assertion added in r139141. The assertion was designed to make sure that we are using the
        HTMLDocument class. XHTML documents also use HTMLDocument.

        No new tests because no new functionality.

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

2013-01-08  Ojan Vafai  <ojan@chromium.org>

        min-content gets the wrong value if min-width is set on some form controls
        https://bugs.webkit.org/show_bug.cgi?id=106389

        Reviewed by Tony Chang.

        Simplify the logic. The only exposed change in behavior is that
        m_minPreferredLogicalWidth gets set to m_maxPreferredLogicalWidth
        instead of 0 when min-width is set.

        Test: fast/forms/min-content-form-controls.html

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computePreferredLogicalWidths):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::computePreferredLogicalWidths):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computePreferredLogicalWidths):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computePreferredLogicalWidths):

2013-01-09  Abhishek Arya  <inferno@chromium.org>

        Mitigate out-of-bounds access in InlineIterator
        https://bugs.webkit.org/show_bug.cgi?id=104812

        Reviewed by Levi Weintraub.

        Share code between InlineIterator::current and InlineIterator::previousInSameNode,
        thereby checking for access outside text renderer's length.

        * rendering/InlineIterator.h:
        (InlineIterator):
        (WebCore::InlineIterator::characterAt):
        (WebCore):
        (WebCore::InlineIterator::current):
        (WebCore::InlineIterator::previousInSameNode):

2013-01-09  Yongjun Zhang  <yongjun_zhang@apple.com>

        If ImageLoader's loadEventSender or errorEventSender fires after document is detached, the document will be leaked.

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

        Reviewed by Alexey Proskuryakov.

        ImageLoader's loadEventSender and errorEventSender schedule event dispatching in separate timers and refs
        the Element in updatedHasPendingEvent.  If the Document is detached before either eventSender dispatches,
        we would leak the Document since we bail out early in dispatchPendingLoadEvent or dispatchPendingErrorEvent,
        without deref-ing the Element itself.

        No new tests.  Verified manually by using heap tool to count the living HTMLDocuments.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingLoadEvent): also call updatedHasPendingEvent to deref the Element if
                    the document is detached.
        (WebCore::ImageLoader::dispatchPendingErrorEvent): ditto.

2013-01-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r139143.
        http://trac.webkit.org/changeset/139143
        https://bugs.webkit.org/show_bug.cgi?id=106135

        Broke Chromium content_browsertests.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::openInMemory):

2013-01-09  Sam Weinig  <sam@webkit.org>

        Add Settings.in and make_settings.pl to the project.

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:

2013-01-09  Ojan Vafai  <ojan@chromium.org>

        marquee special-case in RenderBlock is not needed
        https://bugs.webkit.org/show_bug.cgi?id=106396

        Reviewed by Simon Fraser.

        This was added in http://trac.webkit.org/changeset/105772. The layout test
        in that patch (which is disabled) works and the original site that was broken
        also still works.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths):

2013-01-09  Tony Chang  <tony@chromium.org>

        Automatically generate Settings::unifiedTextCheckerEnabled
        https://bugs.webkit.org/show_bug.cgi?id=106382

        Reviewed by Adam Barth.

        No new tests, no change in behavior. This is covered by existing editing/spelling tests.

        * page/Settings.cpp:
        (WebCore): Move default value into a global so we can generate the initializer.
        (WebCore::Settings::Settings): Remove initializer code that is now generated.
        * page/Settings.h:
        (Settings): Remove getters and setters.
        * page/Settings.in: Add entry to be generated.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Remove backup since the generated code does this.
        (WebCore::InternalSettings::Backup::restoreTo): Remove restore code since the generated code does this.
        * testing/InternalSettings.h:
        (InternalSettings): Remove member variable.
        * testing/InternalSettings.idl: The getter was unused so it's being removed. The setter is now generated.

2013-01-09  Alexis Menard  <alexis@webkit.org>

        Implement CSS computed style value for transition shorthand
        https://bugs.webkit.org/show_bug.cgi?id=105035

        Reviewed by Dean Jackson.

        Implement support for query the transition and webkit-transition
        shorthand from the computed style.

        Test: transitions/transitions-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createTransitionPropertyValue): Factor the code to create the
        correct value into a function to reuse it for the shorthand.
        (WebCore::getTransitionPropertyValue):
        (WebCore::createTimingFunctionValue): Little refactor, the intermediate
        local variables are not needed.
        (WebCore::getTimingFunctionValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2013-01-09  Hajime Morrita  <morrita@google.com>

        Document::setActiveNode() should be Document::setActiveElement()
        https://bugs.webkit.org/show_bug.cgi?id=106437

        Reviewed by Ojan Vafai.

        No new tests. No functoinal change.

        * dom/Document.cpp:
        (WebCore::Document::setActiveElement):
        (WebCore::Document::updateHoverActiveState):
        * dom/Document.h:
        (Document):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::innerElement):
        (WebCore):
        * rendering/HitTestResult.h:
        (HitTestResult):

2013-01-09  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow DOM]: ShadowRoot has wrong nodeName attribute
        https://bugs.webkit.org/show_bug.cgi?id=104995

        Reviewed by Dimitri Glazkov.

        According to the Shadow DOM spec, ShadowRoot.nodeName should return '#document-fragment' instead of '#shadow-root'.
        We remove ShadowRoot::nodeName.

        No new tests, covered by existing tests.

        * dom/ShadowRoot.cpp:
        * dom/ShadowRoot.h:
        (ShadowRoot):

2013-01-09  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions] Selecting text through nested regions causes weird and unclearable selection  
        https://bugs.webkit.org/show_bug.cgi?id=105641

        Reviewed by David Hyatt.

        If you have a region with a nested region inside what is rendered below the base region and you are trying select text
        starting from the base region and ending it in the nested region, firstly you got a weird selection, secondly you can't
        clear the selection. We could prevent this strange behavior by preventing the selection through different region flows.

        Test: fast/regions/selecting-text-through-different-region-flows.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): Don't allow selection when trying to select different region flows.

2013-01-09  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Regression(r138681) : Add HAVE(ACCESSIBILITY) guard to atk files, fix for a fix.
        https://bugs.webkit.org/show_bug.cgi?id=106448

        Reviewed by Gyuyoung Kim.

        Some atk files don't use HAVE(ACCESSIBILITY). It might make build errors when
        the macro isn't enabled.

        * accessibility/atk/WebKitAccessibleHyperlink.h:
        * accessibility/atk/WebKitAccessibleInterfaceAction.h:
        * accessibility/atk/WebKitAccessibleInterfaceComponent.h:
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.h:

2013-01-09  Chris Fleizach  <cfleizach@apple.com>

        AX: native popup buttons should not use textUnderElement for their title
        https://bugs.webkit.org/show_bug.cgi?id=106349

        Reviewed by Ryosuke Niwa.

        Chromium relies on the older title() method to return its title. As a result, we also
        need to handle the case of <select> element pop up buttons returning the textUnderElement().

        No new tests. Fix existing break.

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

2013-01-09  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        IndexedDB: Remove ASSERTs that can't assert but result in compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=106442

        Reviewed by Kentaro Hara.

        IDBLevelDBCoding::m_metaDataType has been changed to unsigned
        so ASSERT(m_metaDataType >= 0) is no longer useful: the compiler
        warnings however create build difficulties at least with EFL.

        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::metaDataType):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::compare):

2012-12-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: fix instrumentation for already instrumented classes 1/N
        https://bugs.webkit.org/show_bug.cgi?id=106445

        Reviewed by Vsevolod Vlasov.

        The patch has almost mechanical changes.

        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8ValueCache.cpp:
        (WTF):
        (WebCore::StringCache::reportMemoryUsage):
        (WebCore):
        * dom/Document.cpp:
        (WebCore::Document::reportMemoryUsage):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage):
        * dom/ElementRareData.cpp:
        (WebCore::ElementRareData::reportMemoryUsage):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::reportMemoryUsage):
        * page/Frame.cpp:
        (WebCore::Frame::reportMemoryUsage):
        * page/Page.cpp:
        (WebCore::Page::reportMemoryUsage):
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::reportMemoryUsage):
        * platform/network/FormData.cpp:
        (WebCore::FormData::reportMemoryUsage):
        (WebCore):
        (WebCore::FormDataElement::reportMemoryUsage):
        * platform/network/FormData.h:
        (FormDataElement):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::reportMemoryUsage):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::reportMemoryUsage):

2013-01-09  Florin Malita  <fmalita@chromium.org>

        [Skia] Implement GraphicsContext::fillRoundedRect() using SkCanvas::drawRRect()
        https://bugs.webkit.org/show_bug.cgi?id=106366

        Reviewed by Stephen White.

        Skia provides rounded-rect primitives, so we can avoid degrading fillRoundedRect() to
        drawPath().

        Due to subtle pixel differences (not visually noticeable), switching from drawPath() to
        drawRRect() requires rebaselining some of the existing results.

        No new tests: coverage provided by existing tests.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::drawRRect):
        (WebCore):

2013-01-09  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        Web Inspector: cannot undock inspector when window size is too small
        https://bugs.webkit.org/show_bug.cgi?id=106054

        Reviewed by Pavel Feldman.

        Consider dockingUnavailable flag only when dockSide is in undocked
        state.

        * inspector/front-end/DockController.js:
        (WebInspector.DockController.prototype._updateUI.get document):

2013-01-09  Zeno Albisser  <zeno@webkit.org>

        [Qt] WebGL content is incomplete when using multiple canvas
        https://bugs.webkit.org/show_bug.cgi?id=106313

        While we are using double buffering for WebGL,
        we do not use a drawable that implements a mechanism
        for swapping buffers.
        Therefore we have to make sure that all GL commands
        have been executed properly before copying the texture
        onto the GraphicsSurface.

        Reviewed by Simon Hausmann.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::blitMultisampleFramebufferAndRestoreContext):

2013-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing headers.

2013-01-09  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] GraphicsSurface does not need glEnable/glDisable for texture targets.
        https://bugs.webkit.org/show_bug.cgi?id=106310

        glEnable/glDisable for texture targets is only necessary
        when using the fixed function pipeline.
        Enabling or disabling the target might cause unexpected
        behavior to texture bindings and is therefore considered harmful.

        Reviewed by Noam Rosenthal.

        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::createTexture):
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
        (WebCore::GraphicsSurface::platformCopyToGLTexture):

2013-01-09  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: min/max attributes should not make all fields read-only
        https://bugs.webkit.org/show_bug.cgi?id=106422

        Reviewed by Kent Tamura.

        Do not make day-field of date input and month-field of month input readonly
        even if min and max are the same.

        Tests: fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield.html
               fast/forms/month-multiple-fields/month-multiple-fields-readonly-subfield.html

        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField): Added check for date type.

2013-01-09  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Step-up/-down of week field should respect min/max attributes
        https://bugs.webkit.org/show_bug.cgi?id=106416

        Reviewed by Kent Tamura.

        Make step-up/-down of the week field respect the min/max attributes of the element.
        Note that it still accepts any keyboard inputs (the element
        becomes 'invalid' state when out-of-range values entered).

        Tests: fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield.html
               fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer.html

        * css/html.css: Add a CSS rule for week field.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField):
        Compute minimum/maximum values of week field from the min/max parameters of the element.
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeWeekFieldElement::DateTimeWeekFieldElement): Add mininum/maximum arguments.
        (WebCore::DateTimeWeekFieldElement::create): Ditto.
        (WebCore::DateTimeWeekFieldElement::clampValueForHardLimits): Added.
        * html/shadow/DateTimeFieldElements.h:
        (DateTimeWeekFieldElement): Add mininum/maximum arguments and declare clampValueForHardLimits.

2013-01-08  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Caret is incorrectly painted for a contenteditable <div> containing a <br> in vertical writing mode
        https://bugs.webkit.org/show_bug.cgi?id=103621

        Reviewed by Ryosuke Niwa.

        While computing the caret rect for the given specific scenario, we
        canonicalize our position. For the upstream (or downstream) block flow
        candidates a check to ignore the nodes having renderers with zero height
        is carried out. This is where we fail our check in the vertical writing mode.

        In the vertical writing mode, instead of verifying the height of the descendants
        of the candidate nodes, a check for their width should be carried out.

        For our case, i.e. the <br> element contained inside the div, the bounding box
        in the vertical writing mode would have a width greater than zero and height
        equal to zero (as is to be expected in the vertical mode).

        Thus, we need to make a check against the logical height. For the vertical
        writing mode, the logical height should return the width of the computed
        bounding box.

        Test: editing/selection/caret-in-div-containing-br-in-vertical-mode.html

        * dom/Position.cpp:
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        Have modified the code to verify against the logical height, instead
        of simply the height, both in case of RenderText and RenderBox.
        The logical height of the computed rects returns a value according
        to the writing mode.

        For the RenderText a new function, linesLogicalBoundingBox() is called
        which returns the values depending on the writing mode.
        Similarly, on the RenderBox, pixelSnappedLogicalHeight() is called which
        too takes care of the writing mode internally. (borderBoundingBox()
        internally calls on the pixelSnappedRect).

        * rendering/RenderText.cpp:
        (WebCore::RenderText::linesLogicalBoundingBox):
        (WebCore):
        * rendering/RenderText.h:
        (RenderText):
        New function is added to return the logical linesBoundingBox, i.e.,
        the width and height of the linesBoundingBox are set according to
        the writing mode.

2013-01-08  Tony Gentilcore  <tonyg@chromium.org>

        Remove a few unused includes from HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=106401

        Reviewed by Adam Barth.

        I happened to notice these while attempting to remove non-thread friendly deps from HTMLTreeBuilder.

        No new tests because no new functionality.

        * html/parser/HTMLTreeBuilder.cpp:

2013-01-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Regression(r138681): Add HAVE(ACCESSIBILITY) guard to atk files
        https://bugs.webkit.org/show_bug.cgi?id=106290

        Reviewed by Martin Robinson.

        Some atk files don't use HAVE(ACCESSIBILITY). It might make build errors when
        the macro isn't enabled.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        * accessibility/atk/WebKitAccessibleHyperlink.h:
        * accessibility/atk/WebKitAccessibleInterfaceAction.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceAction.h:
        * accessibility/atk/WebKitAccessibleInterfaceComponent.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceDocument.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceDocument.h:
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.h:
        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.h:
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceImage.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceImage.h:
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceSelection.h:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceTable.h:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceText.h:
        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceValue.h:
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        * accessibility/atk/WebKitAccessibleUtil.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.h:

2013-01-08  Matt Falkenhagen  <falken@chromium.org>

        Make NodeRenderingContext::parentRenderer and nextRenderer top layer aware
        https://bugs.webkit.org/show_bug.cgi?id=103477

        Reviewed by Hajime Morita.

        Original patch by Elliott Sprehn (minor code and layout tests added).

        Instead of using adjustInsertionPointForTopLayerElement and reassigning
        pointers passed by reference we should just make nextRenderer and parentRenderer
        handle the top layer properly. Right now they would return the wrong values
        since we only correctly handle the top layer during renderer creation.

        This makes handling of top layer elements consistent with handling of
        other special renderering systems like flow threads.

        Tests: fast/dom/HTMLDialogElement/modal-dialog-in-replaced-renderer.html
               fast/dom/HTMLDialogElement/modal-dialog-in-table-column.html
               fast/dom/HTMLDialogElement/modal-dialog-sibling.html

        * dom/NodeRenderingContext.cpp:
        (WebCore::isRendererReparented): Added this helper function. We must skip
        renderers that are reparented in nextRenderer and previousRenderer.
        (WebCore):
        (WebCore::adjustInsertionPointForTopLayerElement): Removed this method.
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):
        (WebCore::NodeRenderingContext::parentRenderer):
        (WebCore::NodeRenderingContext::createRendererForElementIfNeeded):

2013-01-08  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r135836): Invalid user input for input[type=number] should be cleared by input.value=""
        https://bugs.webkit.org/show_bug.cgi?id=106284

        Reviewed by Hajime Morita.

        No new tests. Updates fast/forms/number/number/validity-badinput.html.

        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::setValue):
        If the new sanitized value is empty and innerTextValue is a bad input
        (it means !valueChanged && !innerTextValue().isEmpty() because the new
        sanitized value is empty), we need to update innerTextValue with the
        empty string.
        * html/NumberInputType.h:
        (NumberInputType): Declare setValue.

2013-01-08  Nate Chapin  <japhet@chromium.org>

        REGRESSION(r138222?): [Mac WK1] http/tests/appcache/main-resource-redirect.html asserts in WebFrameLoaderClient::dispatchDidFinishLoading
        https://bugs.webkit.org/show_bug.cgi?id=106123

        Reviewed by Alexey Proskuryakov.

        No new tests, fixing an existing test.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy): Before calling m_resource->removeClient(this)
            and potentially canceling the ResourceLoader, ensure it won't send resource load callbacks.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setSendCallbackPolicy):

2013-01-08  Alexandru Chiculita  <achicu@adobe.com>

        Assert in RenderGeometryMap::mapToContainer
        https://bugs.webkit.org/show_bug.cgi?id=106068

        Reviewed by Simon Fraser.

        The assert was due to a pending layout, so the values used to compute the layer bounding boxes were incorrect.
        That was because of the Document::setVisualUpdatesAllowed mechanism, which triggers a compositor update
        and a repaint, but before this patch didn't check whether a layout was pending or not.

        Added a check in Document::setVisualUpdatesAllowed for pending layouts and bailed when such case happened.
        A layout will come anyway and trigger the correct updates. Couldn't not force an inline layout at that time
        as this function is sometimes called really soon, when the WebKit parts are not fully created yet and updates were
        calling back into some client callbacks that were not ready.

        Also added an assert in RenderLayerCompositor::updateCompositingLayers to check for other cases that might
        try to update the layers with a layout pending. That one led to finding an issue in the RenderMarquee, which
        was updating on a timer callback. It might happen that a layout is pending while this timer fires and it 
        tries to update the scroll position of the layers while a layout is still due.

        There was already a protection to bail if a layout is pending in RenderMarquee::timerFired, so I've just broadened the scope
        to the whole RenderView to catch all the layout requests.

        Tests: compositing/geometry/assert-layout-not-done.html
               compositing/geometry/assert-marquee-timer.html

        * dom/Document.cpp:
        (WebCore::Document::setVisualUpdatesAllowed):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::timerFired):

2013-01-08  Justin Novosad  <junov@google.com>

        CanvasRenderingContext2D::setFont argument may reference destroyed object
        https://bugs.webkit.org/show_bug.cgi?id=106385

        Reviewed by Abhishek Arya.

        No new tests: covered by fast/canvas/canvas-measureText.html

        This is a re-write of r138994.  Fixing bug in setFont instead of
        workaround at call site. 

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        (WebCore::CanvasRenderingContext2D::accessFont):

2013-01-08  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Provide LevelDB with IDBEnv instead of Env::Default
        https://bugs.webkit.org/show_bug.cgi?id=106135

        Reviewed by Tony Chang.

        IDBEnv only changes the name of the histogram where errors are logged.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::openInMemory):

2013-01-08  Brandon Jones  <bajones@chromium.org>

        Make WebGLRenderingContext inherit from ActiveDOMObject
        https://bugs.webkit.org/show_bug.cgi?id=104733

        Reviewed by Adam Barth.

        When ActiveDOMObject::stop is called on the WebGLRenderingContext the
        DrawingBuffer and GraphicsContext3D instances are forcibly released in
        order to keep GPU memory utilization to a minimum.

        Incorporated new layout test based on one just added to the WebGL
        conformance suite. Also tested manually by reloading and
        navigating between many WebGL apps.

        Test: fast/canvas/webgl/context-release-upon-reload.html

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
            Removed garbage collection hack added in Bug 76255.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::create):
            Call suspendIfNeeded per ActiveDOMObject contract.
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
            Call ActiveDOMObject constructor.
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
            Call destroyGraphicsContext3D.
        (WebCore::WebGLRenderingContext::destroyGraphicsContext3D):
            Drop DrawingBuffer backing store and delete GraphicsContext3D.
        (WebCore::WebGLRenderingContext::hasPendingActivity):
            Always return false.
        (WebCore::WebGLRenderingContext::stop):
            Force lost context upon page reload or navigation.
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):
            Inherit from ActiveDOMObject and override notifications.
        * platform/graphics/blackberry/DrawingBufferBlackBerry.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::clearPlatformLayer):
            Add currently no-op implementation.
        * platform/graphics/cairo/DrawingBufferCairo.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::clearPlatformLayer):
            Add currently no-op implementation.
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBufferPrivate::clearTextureId):
            Clear texture ID from compositor's layer.
        (DrawingBufferPrivate):
        (WebCore::DrawingBuffer::framebuffer):
            Moved around to reduce number of #ifdefs.
        (WebCore):
        (WebCore::DrawingBuffer::platformLayer):
        (WebCore::DrawingBuffer::clearPlatformLayer):
            Tell compositor to stop referencing DrawingBuffer's texture.
        * platform/graphics/clutter/DrawingBufferClutter.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::clearPlatformLayer):
            Add currently no-op implementation.
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clear):
            Call clearPlatformLayer before deleting OpenGL resources.
        * platform/graphics/gpu/DrawingBuffer.h:
        (DrawingBuffer):
            Add clearPlatformLayer.
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore):
        (WebCore::DrawingBuffer::clearPlatformLayer):
            Add currently no-op implementation.
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp:
        (WebCore):
        (WebCore::DrawingBuffer::clearPlatformLayer):
            Add currently no-op implementation.

2013-01-08  Tony Gentilcore  <tonyg@chromium.org>

        Remove dependency on Document from HTMLConstructionSite::inQuirksMode()
        https://bugs.webkit.org/show_bug.cgi?id=106375

        Reviewed by Adam Barth.

        This is another step towards removing main thread object dependencies
        from the parser.

        No new tests because no new functionality.

        * dom/Document.h:
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h:
        (HTMLDocument):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::setDefaultCompatibilityMode):
        (WebCore):
        (WebCore::HTMLConstructionSite::setCompatibilityMode):
        (WebCore::HTMLConstructionSite::setCompatibilityModeFromDoctype):
        (WebCore::HTMLConstructionSite::insertDoctype):
        (WebCore::HTMLConstructionSite::inQuirksMode):
        * html/parser/HTMLConstructionSite.h:
        (HTMLConstructionSite):

2013-01-08  Florin Malita  <fmalita@chromium.org>

        Remove unused GraphicsContext::addInnerRoundedRectClip()
        https://bugs.webkit.org/show_bug.cgi?id=106376

        Reviewed by Andreas Kling.

        Since there don't seem to be any users left for it, remove addInnerRoundedRectClip().

        No new tests: no functional changes.

        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        * platform/graphics/wx/GraphicsContextWx.cpp:

2013-01-08  Justin Novosad  <junov@google.com>

        Color bleeding with rounded rectangles on high dpi displays
        https://bugs.webkit.org/show_bug.cgi?id=106373

        Reviewed by Simon Fraser.

        Test: fast/backgrounds/gradient-background-leakage-hidpi.html

        Avoid using the BackgroundBleedShrinkBackground draw strategy for
        RenderBox when border width is less than two layout units. This
        is because rounded rectangles are always snapped to integer layout
        coordinates, even with subpixel layout enabled.

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

2013-01-08  Elliott Sprehn  <esprehn@chromium.org>

        Merge getLineAtIndex into RenderBlock::lineAtIndex
        https://bugs.webkit.org/show_bug.cgi?id=106379

        Reviewed by Eric Seidel.

        getLineAtIndex can be merged into lineAtIndex, which was it's only caller.

        No new tests, just refactoring.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineAtIndex):
        (WebCore::RenderBlock::lineCount):
        * rendering/RenderBlock.h:
        (RenderBlock):

2013-01-08  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] Allow <template> content to be inspected
        https://bugs.webkit.org/show_bug.cgi?id=105839

        Reviewed by Pavel Feldman.

        In addition to the plumbing which allows template contents to be
        displayed within the inspector, this patch adds a manually-managed
        weakref from the template document back to its host document (typically
        the creator). This is required so that the inspector agent can be found
        for template elements.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::templateDocument):
        * dom/Document.h:
        (Document):
        (WebCore::Document::setTemplateDocumentHost):
        (WebCore::Document::templateDocumentHost):
        * editing/markup.cpp:
        (WebCore::createFragmentForInnerOuterHTML):
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::content):
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForDocument):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype.hasChildNodes):
        (WebInspector.DOMNode.prototype._insertChild):
        (WebInspector.DOMNode.prototype._setChildrenPayload):

2013-01-08  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Distribution related code on ShadowRoot should be minimized.
        https://bugs.webkit.org/show_bug.cgi?id=106282

        Reviewed by Dimitri Glazkov.

        ShadowRoot had a certain amount of logic which is dedicated for
        node distribution computation.  These code is going to be compiled
        out (Bug 103339) and better be part of the node distribution
        algorithm, which is ScopeContentDistribution class.

        This change

        - Renames ShadowRootContentDistributionData to
          ScopeContentDistribution.  New name is concise and a bit more
          meaningful: It owns per TreeScope distribution state.
        - Moves distribution related code from ShadowRoot to ScopeContentDistribution

        No new tests. Refactoring.

        * WebCore.exp.in:
        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::styleSharingCandidateMatchesHostRules):
        (WebCore::StyleScopeResolver::matchHostRules):
        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::nodeCanBeDistributed):
        (WebCore::ComposedShadowTreeWalker::traverseBackToYoungerShadowRoot):
        (WebCore::ComposedShadowTreeWalker::traverseParentBackToYoungerShadowRootOrHost):
        (WebCore::AncestorChainWalker::parent):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::collectSelectFeatureSetFrom):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertedInto):
        (WebCore::ShadowRoot::removedFrom):
        (WebCore::ShadowRoot::ensureScopeDistribution):
        (WebCore::ShadowRoot::reportMemoryUsage):
        * dom/ShadowRoot.h:
        (WebCore):
        (ShadowRoot):
        (WebCore::ShadowRoot::scopeDistribution):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ScopeContentDistribution::ScopeContentDistribution):
        (WebCore::ScopeContentDistribution::invalidateInsertionPointList):
        (WebCore::ScopeContentDistribution::ensureInsertionPointList):
        (WebCore::ScopeContentDistribution::registerInsertionPoint):
        (WebCore::ScopeContentDistribution::unregisterInsertionPoint):
        (WebCore::ScopeContentDistribution::hasShadowElement):
        (WebCore):
        (WebCore::ScopeContentDistribution::hasContentElement):
        (WebCore::ScopeContentDistribution::countElementShadow):
        (WebCore::ScopeContentDistribution::hasInsertionPoint):
        (WebCore::ScopeContentDistribution::assignedTo):
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::invalidate):
        * html/shadow/ContentDistributor.h:
        (ScopeContentDistribution):
        (WebCore::ScopeContentDistribution::registerElementShadow):
        (WebCore::ScopeContentDistribution::unregisterElementShadow):
        (WebCore::ScopeContentDistribution::hasElementShadow):
        * html/shadow/HTMLShadowElement.cpp:
        (WebCore::HTMLShadowElement::olderShadowRoot):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::insertedInto):
        (WebCore::InsertionPoint::removedFrom):
        (WebCore::InsertionPoint::contains):
        (WebCore):
        (WebCore::resolveReprojection):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        (WebCore):
        * testing/Internals.cpp:
        (WebCore::Internals::hasShadowInsertionPoint):
        (WebCore::Internals::hasContentElement):
        (WebCore::Internals::countElementShadow):

2013-01-08  Tom Sepez  <tsepez@chromium.org>

        Copy-paste preserves <embed> tags containing active content.
        https://bugs.webkit.org/show_bug.cgi?id=77625

        Reviewed by Ryosuke Niwa.

        Test: editing/pasteboard/paste-noplugin.html

        * dom/FragmentScriptingPermission.h:
        (WebCore::scriptingContentIsAllowed):
        (WebCore::pluginContentIsAllowed):
        Add new permission to restrict plugin pasting.  Add inline functions to check
        the implications of each permission rather than having a list of raw comparisions
        sprinkled throughout the code. 
        
        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup):
        Revert back to unsafe plugin pasting regardless of caller's intentions when
        the settings allow it.

        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertScriptElement):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::endElementNs):
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseEndElement):
        Use new inline functions to check implications of permissions rather than raw
        comparisions.
        
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        Check if plugin pasting is allowed before inserting applet/embed/oject elements.

        * page/Settings.in:
        Declaration of new unsafePluginPastingEnabled setting.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::documentFragment):
        * platform/blackberry/PasteboardBlackBerry.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asFragment):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asFragment):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::documentFragment):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::fragmentFromCFHTML):
        (WebCore::fragmentFromHTML):
        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::documentFragment):
        Pass DisallowScriptingAndPluginContent enum value.
        
2013-01-08  Alexis Menard  <alexis@webkit.org>

        WebKit does not reject some cubic-bezier form values for transition-timing-function.
        https://bugs.webkit.org/show_bug.cgi?id=106369

        Reviewed by Dean Jackson.

        http://www.w3.org/TR/css3-transitions/#transition-timing-function-property
        describes restricitions on cubic-bezier values where the x values of
        the curve should be between [0, 1] and y values can exceed this range.
        WebKit was not following the specification by allowing x values
        exceeding the range.
        The spec also says that we should reject the defintion if the condition
        is not respected which is what the new code does.

        Test: transitions/transitions-parsing.html

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

2013-01-08  Andreas Kling  <akling@apple.com>

        Heap-use-after-free in bool WebCore::SelectorChecker::checkOneSelector.
        <http://webkit.org/b/105834>

        Reviewed by Antti Koivisto.

        Suppress the DOMSubtreeModified event when synchronizing the "style" attribute and we've
        instantiated an Attr node wrapper for the said attribute.

        Also added an assertion that Document's StyleResolver isn't cleared during style recalc,
        which will help us catch this kind of bug in the future.

        Test: fast/dom/mutation-event-listener-with-dirty-inline-style-crash.html

        * dom/Document.cpp:
        (WebCore::Document::styleResolverThrowawayTimerFired):
        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):

2013-01-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r139096.
        http://trac.webkit.org/changeset/139096
        https://bugs.webkit.org/show_bug.cgi?id=106367

        not a complete fix (Requested by bweinstein on #webkit).

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot):

2013-01-08  Brian Weinstein  <bweinstein@apple.com>

        Plug-ins shouldn’t be added to list to autostart if you start a plugin in private browsing.
        https://bugs.webkit.org/show_bug.cgi?id=106348
        <rdar://problem/12968442>

        Reviewed by Anders Carlsson.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Don't call addAutoStartOrigin if we are
            in private browsing mode.

2013-01-08  Chris Fleizach  <cfleizach@apple.com>

        AX: native popup buttons should not use textUnderElement for their title
        https://bugs.webkit.org/show_bug.cgi?id=106349

        Reviewed by Ryosuke Niwa.

        Native popup buttons (<select> elements) were calculating its title based on the text
        under the element. When Bug 103794 introduced a more complete way of getting render text,
        it causes popup buttons to start returning a title.
        The fix is that we should not be calculating a title for a native popup button from its children.

        Existing tests cover this functionality. This will fix a failing test.

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

2013-01-08  Ojan Vafai  <ojan@chromium.org>

        text controls are sized too small when a percentage height is set
        https://bugs.webkit.org/show_bug.cgi?id=106277

        Reviewed by Tony Chang.

        This makes our behavior match Firefox 17, IE 9 and Opera 12.
        The current logic came from http://trac.webkit.org/changeset/13723,
        which itself was copy-pasted from RenderReplaced and no longer has this clause..

        Test: fast/forms/percent-height-auto-width-form-controls.html

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computePreferredLogicalWidths):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::computePreferredLogicalWidths):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computePreferredLogicalWidths):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computePreferredLogicalWidths):

2013-01-08  Peter Beverloo  <peter@chromium.org>

        [Chromium] Modify Android's user agent CSS to not set a border-radius on select elements
        https://bugs.webkit.org/show_bug.cgi?id=106327

        Reviewed by Adam Barth.

        Android's user agent CSS overrides the style applied to <select>
        elements with a @size or @multiple attribute, and then applies
        (among other things) a border-radius of 5 pixels. While select
        elements with a larger size or multiple selection should appear
        as drop-down boxes for now, setting the border radius causes
        Chromium to skip rendering the background and border, making
        them hard to read when the page relies on the default styling.

        This is covered by existing pixel tests.

        * css/themeChromiumAndroid.css:
        (select[size][multiple]):

2013-01-08  Mike West  <mkwst@chromium.org>

        CSP: 'none' should take effect only if no other source expression is present.
        https://bugs.webkit.org/show_bug.cgi?id=106314

        Reviewed by Adam Barth.

        WebKit's handling of 'none' in Content Security Policy source lists
        doesn't quite match the spec. Currently, we're treating any source list
        that contains 'none' as its first token as an empty list. That is:
        "script-src 'none'" is handled in the same way as
        "script-src 'none' example.com". Based on a bit of public-webappsec@
        discussion[1], the behavior we actually want should treat the first as
        an empty list, while treating the second as "script-src example.com". In
        other words, 'none' in a source list is a no-op, unless it is the _only_
        item in the source list.

        This patch adjusts our parsing behavior accordingly, and tweaks the
        console log we emit for invalid source expressions to warn specifically
        about this case.

        [1]: http://lists.w3.org/Archives/Public/public-webappsec/2013Jan/0006.html

        Test: http/tests/security/contentSecurityPolicy/source-list-parsing-none.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::isSourceListNone):
            A new static method that returns true when given a string that
            contains only 'none' (potentially surrounded by whitespace), and
            false otherwise.
        (WebCore):
        (WebCore::CSPSourceList::parse):
            Move the 'none' check into the initial layer of parsing, which means
            that we can drop the 'isFirstSourceInList' check entirely.
        (WebCore::CSPSourceList::parseSource):
            Since we've already checked for 'none' in ::parse, we can at this
            point safely treat any occurance of 'none' in the source list as an
            invalid expression.
        (WebCore::ContentSecurityPolicy::reportInvalidSourceExpression):
            If the invalid expression is 'none', add a clarification to the
            console message, noting that 'none' only has effect when it's all
            alone.

2013-01-08  Alok Priyadarshi  <alokp@chromium.org>

        Added OpaqueRegionSkia::currentTrackingOpaqueRect

        [chromium] Add OpaqueRegionSkia::currentTrackingOpaqueRect
        https://bugs.webkit.org/show_bug.cgi?id=106267

        Reviewed by Stephen White.

        No new tests needed. No change in functionality.

        * platform/graphics/skia/OpaqueRegionSkia.cpp:
        (WebCore::OpaqueRegionSkia::applyOpaqueRegionFromLayer):
        (WebCore::OpaqueRegionSkia::markRectAsOpaque):
        (WebCore::OpaqueRegionSkia::markRectAsNonOpaque):
        (WebCore::OpaqueRegionSkia::markAllAsNonOpaque):
        (WebCore::OpaqueRegionSkia::currentTrackingOpaqueRect):
        (WebCore):
        * platform/graphics/skia/OpaqueRegionSkia.h:
        (OpaqueRegionSkia):

2013-01-08  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Build failures when building with python 3.3
        https://bugs.webkit.org/show_bug.cgi?id=106194

        Reviewed by Dirk Pranke.

        Python 3.3 introduced changes to dictionaries which can result in changed
        iteration order. More about these changes:
        http://docs.python.org/3.3/whatsnew/3.3.html#pep-412-key-sharing-dictionary
        http://www.python.org/dev/peps/pep-0412/#cons

        This causes the Source/WebCore/inspector/generate-inspector-protocol-version
        script to fail the self-testing when using Python 3.3. These changes work
        around this problem by not checking for expected errors in order but rather
        for their presence in the error output sequence. The number of actual errors
        is also checked to be equal to the number of expected errors.

        No new tests - no new functionality.

        * inspector/generate-inspector-protocol-version:
        (self_test):

2013-01-08  Antoine Quint  <graouts@apple.com>

        <track> element's mode set to "disabled" after load although it was explicitly set to "hidden"
        https://bugs.webkit.org/show_bug.cgi?id=105536

        Remove all concept of "showing by default". This means removing the showingByDefault()
        and setShowingByDefault() methods on TextTrack. As I was going  through this code,
        I also noticed that in HTMLMediaElement::configureTextTrackGroup(), we would set
        defaultTrack to textTrack.get() even though defaultTrack was created to be a RefPtr<TextTrack>.

        As a result, we can now pass an additional 8 tests from the Opera-submitted test suite:

        LayoutTests/media/track/opera/interfaces/TextTrack/addCue.html
        LayoutTests/media/track/opera/interfaces/TextTrack/removeCue.html
        LayoutTests/media/track/opera/interfaces/TextTrackCue/endTime.html
        LayoutTests/media/track/opera/interfaces/TextTrackCue/startTime.html
        LayoutTests/media/track/opera/interfaces/TextTrackCue/align.html
        LayoutTests/media/track/opera/interfaces/TextTrackCue/id.html
        LayoutTests/media/track/opera/interfaces/TextTrackCue/pauseOnExit.html
        LayoutTests/media/track/opera/interfaces/TextTrackCue/track.html

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup):
        (WebCore::HTMLMediaElement::toggleTrackAtIndex):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::setMode):
        (WebCore::TextTrack::isRendered):
        * html/track/TextTrack.h:
        (WebCore::TextTrack::mode):
        (TextTrack):

2013-01-08  Mark Lam  <mark.lam@apple.com>

        Removed the need for the ProposedDatabase mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=106292.

        Reviewed by Sam Weinig.

        No new tests.

        * Modules/webdatabase/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::details):
        (WebCore):
        * Modules/webdatabase/AbstractDatabase.h:
        (AbstractDatabase):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::databaseExceededQuota):
        * Modules/webdatabase/DatabaseContext.h:
        (DatabaseContext):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseTracker.h:
        (DatabaseTracker):
        * Modules/webdatabase/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didExceedQuota):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::exceededDatabaseQuota):
        * page/ChromeClient.h:
        (ChromeClient):

2013-01-08  Chris Fleizach  <cfleizach@apple.com>

        AX: PopUpButtons do not report that AXValueAttribute is supported
        https://bugs.webkit.org/show_bug.cgi?id=106333

        Reviewed by Ryosuke Niwa.

        The Mac platform expects that AXPopUpButton's expose the AXValue attribute.

        Test: platform/mac/accessibility/popup-button-exposes-axvalue.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isPopUpButton):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):

2013-01-08  Alexis Menard  <alexis@webkit.org>

        transition-delay and transition-duration return incorrect values when querying using the computed style.
        https://bugs.webkit.org/show_bug.cgi?id=105432

        Reviewed by Dean Jackson.

        When setting the transition-delay to 10ms for example the value of transition-delay
        on the computed style was incorrect, it should return 0.01s but it was
        returning something like 0.0099999999...s. In fact the bug was after
        the parsing step when creating the Animation object where a conversion
        from a double to float was done. This conversion is not needed as the
        animation class expects double for delay and transition times.

        Test: transitions/transitions-parsing.html

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationDelay):
        (WebCore::CSSToStyleMap::mapAnimationDuration):

2013-01-08  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Refactoring: invalidateParentDistributionIfNecessary() calls are too intrusive
        https://bugs.webkit.org/show_bug.cgi?id=106305

        Reviewed by Dimitri Glazkov.

        Scattering invalidateParentDistributionIfNecessary() looks bad because
        - it has long name whose terminology is cryptic for people who don't know much about Shadow DOM standard.
        - its calls are always paired with setNeedsStyleRecalc() and people do setNeedsStyleRecalc()
          need to be aware about distribution feature bit tracking. Separate invalidateParentDistributionIfNecessary()
          call doesn't help that recognition.

        This change introduces Element::didAffectSelector() to replace a setNeedsStyleRecalc()-i37y() call sequence.
        SelectRuleFeatureSet::FeatureRule is renamed AffectedSelectorType so that it explains its purpose
        in a bit more plain WebKit term.

        No new tests. Refactoring.

        * dom/Document.cpp:
        (WebCore::Document::setCSSTarget): Adopted didAffectSelector.
        * dom/Element.cpp:
        (WebCore::Element::didAffectSelector): Added.
        (WebCore):
        * dom/Element.h:
        (Element):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::didAffectSelector): Morphed from invalidateParentDistributionIfNecessary().
        * dom/ElementShadow.h:
        (ElementShadow):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute): Adopted didAffectSelector
        * html/HTMLDetailsElement.cpp:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabledAttributeChanged): Adopted didAffectSelector
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked): Adopted didAffectSelector
        (WebCore::HTMLInputElement::setIndeterminate): Adopted didAffectSelector
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::parseAttribute): Adopted didAffectSelector
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute): Adopted didAffectSelector
        (WebCore::HTMLOptionElement::setSelectedState): Adopted didAffectSelector
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::didElementStateChange): Adopted didAffectSelector
        * html/HTMLSummaryElement.cpp:
        * html/shadow/HTMLContentElement.cpp:
        * html/shadow/SelectRuleFeatureSet.cpp:
        (WebCore::SelectRuleFeatureSet::collectFeaturesFromSelector): Followed renaming.
        * html/shadow/SelectRuleFeatureSet.h: Followed renaming.
        (WebCore::SelectRuleFeatureSet::hasSelectorForChecked):
        (WebCore::SelectRuleFeatureSet::hasSelectorForEnabled):
        (WebCore::SelectRuleFeatureSet::hasSelectorForDisabled):
        (WebCore::SelectRuleFeatureSet::hasSelectorForIndeterminate):
        (WebCore::SelectRuleFeatureSet::hasSelectorForLink):
        (WebCore::SelectRuleFeatureSet::hasSelectorForTarget):
        (WebCore::SelectRuleFeatureSet::hasSelectorForVisited):
        (WebCore::SelectRuleFeatureSet::hasSelectorFor):
        (WebCore::SelectRuleFeatureSet::setSelectRuleFeature):

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

        [Qt] Fix build with --web-audio
        https://bugs.webkit.org/show_bug.cgi?id=106328

        Reviewed by Philippe Normand.

        Build fix, no new tests required.

        * Target.pri: addded missing OfflineAudioContext.[cpp|h].

2013-01-08  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Login & password shown in browsers' URL entry after successful HTTP authentication
        https://bugs.webkit.org/show_bug.cgi?id=105190

        Reviewed by Carlos Garcia Campos.

        Test: http/tests/misc/authentication-redirect-4/authentication-sent-to-redirect-same-origin-url.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback): After sending a redirect with credentials to libsoup, strip
        the credentials from the request. This ensures that the credentials do not show up in
        the user agent or in document.location.

2013-01-08  Keishi Hattori  <keishi@webkit.org>

        [Chromium] Don't confine page popups to root view on Mac
        https://bugs.webkit.org/show_bug.cgi?id=106315

        Reviewed by Kent Tamura.

        No new tests.

        * Resources/pagepopups/pickerCommon.js:
        (adjustWindowRect): Remove code to confine to root view.

2012-12-12  Antonio Gomes  <a1.gomes@sisa.samsung.com>

        Make RenderLayer::updateNeedsCompositedScrolling scrollbars agnostic
        https://bugs.webkit.org/show_bug.cgi?id=95494

        Reviewed by James Robinson.

        Some ports (including Qt-wk1 and BlackBerry) allow disabling
        scrollbars at FrameView creation level. That said, cheking for the
        scrollbars presence in order to determine if we should promote a
        RenderLayer to use composited scrolling is not ideal, as done in
        RenderLayerCompositor::updateNeedsCompositedScrolling()

        Instead, this patch makes the RenderLayer class to query its FrameView
        if it has been cached as scrollable by the later.

        Least, patch also takes this opportunity to remove RenderLayer::allowsScrolling,
        which became unused.

        No new tests added, since there is no *practical* behavior change: ports
        like Chromium and others who currently check for the scrollbars presence
        in order to determine either to promote or not layers to benefit of composited
        scrolling should not be affected.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateNeedsCompositedScrolling):
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-12-20  Antonio Gomes  <a1.gomes@sisa.samsung.com>

        Introduce a compositing trigger for scrollable frames
        https://bugs.webkit.org/show_bug.cgi?id=105573

        Reviewed by James Robinson.

        Make requiresCompositingForScrollableFrame to check the
        newly added compositing trigger instead of the associated setting.

        It introduces no have behavior change, so no new tests. Patch basically
        does some preparation work for adding support to composite scrollable inner
        frames independently from "force compositing mode" bit.

        * page/ChromeClient.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame):

2013-01-08  Kihong Kwon  <kihong.kwon@samsung.com>

        Add DeviceProximityController to support Device Proximity Events.
        https://bugs.webkit.org/show_bug.cgi?id=97630

        Reviewed by Hajime Morita.

        Implement DeviceProximityController which is inherited from DeviceController to support Device Proximity Events.
        DeviceProximityController has two major functionalities.
        - When listener is added, DeviceProximityController stores DOMWindow pointer to m_listeners
          and start gathering proximity event.
        - When DeviceProximityController receives a proximity event from client, fire an event using m_listeners.
        In addition, setDeviceProximity function is added to Internals for layout test.

        Tests: proximity/add-listener-from-callback.html
               proximity/basic-operation.html
               proximity/create-event.html
               proximity/event-after-navigation.html
               proximity/multiple-frames.html
               proximity/no-page-cache.html
               proximity/optional-event-properties.html
               proximity/updates.html
               proximity/window-property.html

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/proximity/DeviceProximityClient.h: Added.
        (WebCore):
        (DeviceProximityClient):
        (WebCore::DeviceProximityClient::~DeviceProximityClient):
        * Modules/proximity/DeviceProximityController.cpp: Added.
        (WebCore):
        (WebCore::DeviceProximityController::DeviceProximityController):
        (WebCore::DeviceProximityController::create):
        (WebCore::DeviceProximityController::didChangeDeviceProximity):
        (WebCore::DeviceProximityController::deviceProximityClient):
        (WebCore::DeviceProximityController::hasLastData):
        (WebCore::DeviceProximityController::getLastEvent):
        (WebCore::DeviceProximityController::supplementName):
        (WebCore::DeviceProximityController::from):
        (WebCore::DeviceProximityController::isActiveAt):
        (WebCore::provideDeviceProximityTo):
        * Modules/proximity/DeviceProximityController.h: Added.
        (WebCore):
        (DeviceProximityController):
        (WebCore::DeviceProximityController::~DeviceProximityController):
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * history/PageCache.cpp:
        When a page has Device Proximity Event Listener, it has not to be cached like Device Orientation.
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * testing/Internals.cpp:
        (WebCore::Internals::setDeviceProximity):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-01-03  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Add WebP image support
        https://bugs.webkit.org/show_bug.cgi?id=105915

        Reviewed by Martin Robinson.

        * GNUmakefile.am: add WTF_USE_WEBP definition.
        * GNUmakefile.list.am: properly sort image decoders in the sources list.

2013-01-08  Steve Block  <steveblock@chromium.org>

        Rename 'IntSize toSize(const IntPoint&)' to 'toIntSize'
        https://bugs.webkit.org/show_bug.cgi?id=106307

        This matches other method names which distinguish between sizes and
        points. See https://bugs.webkit.org/show_bug.cgi?id=105992#c4.

        Reviewed by Kentaro Hara.

        Refactoring only, no functional change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::scrollTo):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollOffset):
        * platform/graphics/IntPoint.h:
        (WebCore::toIntSize):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::positionNewlyCreatedOverflowControls):
        (WebCore::RenderLayer::paintOverflowControls):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2013-01-08  Yoshifumi Inoue  <yosin@chromium.org>

        Dragging over an element with scrollbars should scroll the element when dragging near edges
        https://bugs.webkit.org/show_bug.cgi?id=39725

        Reviewed by Hajime Morita.

        This patch introduces auto scrolling functionality during drag-and-drop
        when drop source is near edge of scrollable element.

        When drop source is inside 20px of scrollable element more than 200ms,
        scrollable element is automatically scrolled every 50ms toward drop
        source position, e.g. vertically scroll up when drop source is in top
        edge.

        Test: fast/events/drag-and-drop-autoscroll.html

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::AutoscrollController): Changed to initialize m_dragAndDropAutoscrollStartTime.
        (WebCore::AutoscrollController::updateDragAndDrop): Added for start/stop autoscroll during drag-and-drop.
        (WebCore::AutoscrollController::autoscrollTimerFired): Changed to add autoscroll for drag-and-drop, and to pass last know position to RenderBox::autoscroll().
        * page/AutoscrollController.h:
        (AutoscrollController): Changed to add updateDragAndDrop() and m_dragAndDropAutoscrollReferencePosition and m_dragAndDropAutoscrollStartTime.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop): Changed to call AutoscrollController::updateDragAndDrop().
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::autoscroll): Changed for new parameter position.
        (WebCore::RenderBox::calculateAutoscrollDirection): Added for autoscroll.
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll):  Changed for new parameter position and move updateSelectionForMouseDrag() to AutoscrollController.
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::autoscroll):  Changed for new parameter position.
        * rendering/RenderListBox.h:
        (RenderListBox):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::autoscroll):  Changed for new parameter position.
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):

2013-01-08  Jochen Eisinger  <jochen@chromium.org>

        REGRESSION(r139036): 'WebCore::DateTimeSymbolicFieldElement::isInRange' hides overloaded virtual function
        https://bugs.webkit.org/show_bug.cgi?id=106311

        Unreviewed build fix.

        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::stepDown):
        (WebCore::DateTimeSymbolicFieldElement::stepUp):
        * html/shadow/DateTimeSymbolicFieldElement.h:
        (WebCore::DateTimeSymbolicFieldElement::indexIsInRange): renamed method to avoid hiding Element::isInRange

2013-01-08  Adam Barth  <abarth@webkit.org>

        HTMLTreeBuilder shouldn't keep a Document pointer
        https://bugs.webkit.org/show_bug.cgi?id=106268

        Reviewed by Eric Seidel.

        The tree builder shouldn't interact with the Document directly.
        Instead, the tree builder should use the HTMLConstructionSite to
        interact with the document.

        Unfortunately, the HTMLTreeBuilder does need to read back one bit of
        information (the quirks mode) from the Document. Currently the
        HTMLConstructionSite reads the information directly from the Document.
        If/when we move the parser onto its own thread, we'll need to keep
        track of this bit on the parser thread. (We should be able to
        encapsulate all that logic in the HTMLConstructionSite.)

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::setDefaultCompatibilityMode):
        (WebCore):
        (WebCore::HTMLConstructionSite::finishedParsing):
        (WebCore::HTMLConstructionSite::inQuirksMode):
        * html/parser/HTMLConstructionSite.h:
        (HTMLConstructionSite):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::detach):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::defaultForInitial):
        (WebCore::HTMLTreeBuilder::finished):
        * html/parser/HTMLTreeBuilder.h:
        (HTMLTreeBuilder):

2013-01-08  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        Float block's logical top margin is illegal in vertical writing mode.
        https://bugs.webkit.org/show_bug.cgi?id=96597

        Reviewed by Hajime Morita.

        flipFloatForWritingModeForChild() should use child->renderer()->width() not child->width() like horizontal writing mode.

        Test: fast/writing-mode/vertical-float-margin.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::flipFloatForWritingModeForChild):

2013-01-07  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r137406): Text inside an empty optgroup prevents subsequent options from appearing
        https://bugs.webkit.org/show_bug.cgi?id=106298

        Reviewed by Ryosuke Niwa.

        Test: fast/forms/select/select-empty-optgroup.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems):
        Traverse to the first element within the 'current' only if it exists.

2013-01-07  Steve Block  <steveblock@chromium.org>

        Use toSize() to convert from Int/FloatPoint to Int/FloatSize
        https://bugs.webkit.org/show_bug.cgi?id=105992

        Reviewed by Kentaro Hara.

        Refactoring only, no change in behavior.

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::computePath):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollOffset):
        * platform/graphics/FloatPoint.h:
        (WebCore::toFloatSize):
        Add 'inline FloatSize toFloatSize(const FloatPoint&)' to match IntPoint.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2013-01-07  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Step-up/-down of month/day field should respect min/max attributes
        https://bugs.webkit.org/show_bug.cgi?id=106212

        Reviewed by Kent Tamura.

        Make step-up/-down of the month and day fields respect the min/max
        attributes of the element.
        Note that these fields still accept any keyboard inputs (the element
        becomes 'invalid' state when out-of-bounds values entered).

        Tests: fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield.html
               fast/forms/date-multiple-fields/date-multiple-fields-stepup-stepdown-from-renderer.html
               fast/forms/month-multiple-fields/month-multiple-fields-readonly-subfield.html
               fast/forms/month-multiple-fields/month-multiple-fields-stepup-stepdown-from-renderer.html

        * css/html.css: Add CSS rules for month and day fields.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField):
        Compute minimum/maximum values of month/day fields from the min/max
        parameters of the element. If minimum, maximum, and current value is
        the same, makes the field read-only.
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeAMPMFieldElement::DateTimeAMPMFieldElement): Add mininum/maximum arguments.
        (WebCore::DateTimeDayFieldElement::DateTimeDayFieldElement): Ditto.
        (WebCore::DateTimeDayFieldElement::create): Ditto.
        (WebCore::DateTimeDayFieldElement::clampValueForHardLimits): Added.
        (WebCore::DateTimeMonthFieldElement::DateTimeMonthFieldElement): Add mininum/maximum arguments.
        (WebCore::DateTimeMonthFieldElement::create): Ditto.
        (WebCore::DateTimeMonthFieldElement::clampValueForHardLimits): Added.
        (WebCore::DateTimeSymbolicMonthFieldElement::DateTimeSymbolicMonthFieldElement): Add mininum/maximum arguments.
        (WebCore::DateTimeSymbolicMonthFieldElement::create): Ditto.
        * html/shadow/DateTimeFieldElements.h:
        (DateTimeDayFieldElement): Add mininum/maximum arguments and declare clampValueForHardLimits.
        (DateTimeMonthFieldElement): Ditto.
        (DateTimeSymbolicMonthFieldElement): Add mininum/maximum arguments.
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::DateTimeSymbolicFieldElement): Add mininum/maximum arguments.
        (WebCore::DateTimeSymbolicFieldElement::maximum): Returns m_maximumIndex + 1 as it assumes 1-origin value.
        (WebCore::DateTimeSymbolicFieldElement::minimum): Ditto.
        (WebCore::DateTimeSymbolicFieldElement::stepDown): Restrict value to m_minimumIndex-m_maximumIndex.
        (WebCore::DateTimeSymbolicFieldElement::stepUp): Ditto.
        * html/shadow/DateTimeSymbolicFieldElement.h:
        (DateTimeSymbolicFieldElement): Add m_minimumIndex and m_maximumIndex.
        (WebCore::DateTimeSymbolicFieldElement::isInRange): Added.

2013-01-07  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [EFL][WK2][WebGL] The top left side of the screen is shown inside the canvas element
        https://bugs.webkit.org/show_bug.cgi?id=105136

        Reviewed by Noam Rosenthal.

        Use glXSwapBuffers to force resize of GL surface after X window resize.

        Fixes fast/canvas/webgl/webgl-composite-modes.html pixel test on EFL platform.

        * platform/graphics/surfaces/glx/X11WindowResources.cpp:
        (WebCore::X11OffScreenWindow::reSizeWindow):

2013-01-07  Steve Block  <steveblock@chromium.org>

        Use explicit constructor to convert from Int/FloatSize to Int/FloatPoint
        https://bugs.webkit.org/show_bug.cgi?id=106209

        Reviewed by Kentaro Hara.

        Refactoring only, no functional change.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2013-01-07  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [EFL][WebGL] Crash of WebKitTestRunner when running webgl layout tests
        https://bugs.webkit.org/show_bug.cgi?id=105936

        Reviewed by Laszlo Gombos.

        If canvas window becomes invalid don't create pixmap from it and don't 
        use it for painting.

        Improves stability of existing webgl layout tests.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::createPixmap):
        (WebCore::GraphicsSurfacePrivate::size):
        (WebCore::GraphicsSurface::platformGetTextureID):
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):

2013-01-07  Hajime Morrita  <morrita@google.com>

        Document::m_activeNode should be always an Element.
        https://bugs.webkit.org/show_bug.cgi?id=106193

        Reviewed by Ryosuke Niwa.

        r137277 tightened an invariant that assumes that active node is
        always an element. But Document::updateHoverActiveState() didn't
        respect that assumption. This change forces it.

        Test: svg/custom/text-use-click-crash.html

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::detach):
        (WebCore::Document::setActiveNode):
        (WebCore::Document::activeChainNodeDetached):
        (WebCore::Document::updateHoverActiveState):
        * dom/Document.h:
        (WebCore::Document::activeElement): Renamed from m_activeNode for the clarification.
        (Document):

2013-01-07  Hajime Morrita  <morrita@google.com>

        WebKit should compile on Mac with --shadow-dom
        https://bugs.webkit.org/show_bug.cgi?id=105469

        Reviewed by Dimitri Glazkov.

        No new tests. Just changing build files.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.idl:

2013-01-07  Stephen White  <senorblanco@chromium.org>

        Add a flag to control canvas antialiasing.
        https://bugs.webkit.org/show_bug.cgi?id=106255

        Reviewed by Darin Fisher.

        This flag is not exposed through TestRunner or DRT, so no testing is
        possible yet.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * page/Settings.in:

2013-01-07  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Implement grid items sizing for fixed minmax grid tracks
        https://bugs.webkit.org/show_bug.cgi?id=104700

        Reviewed by Tony Chang.

        This change implements parts of the minmax() track sizing algorithm. The chosen subset enables us
        to resolve any sizing function that doesn't size based on the content (min-content, max-content).

        Tests: fast/css-grid-layout/minmax-fixed-logical-height-only.html
               fast/css-grid-layout/minmax-fixed-logical-width-only.html

        * rendering/RenderGrid.cpp:
        (WebCore::GridTrack::GridTrack):
        Added a new member to hold the maximum track breadth.

        (WebCore::RenderGrid::computePreferredLogicalWidths):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        Updated these functions to work on both min and max track breadth. In order to match
        the specification, if max track breadth < min track breadth, we ignore the max track breadth.
        For computedUsedBreadthOfGridTracks, it also involves calling distributeSpaceToTracks.

        (WebCore::RenderGrid::computeUsedBreadthOfLength):
        New helper function that compute a single length's size.

        (WebCore::sortByGridTrackGrowthPotential):
        Ordering function for the sorting the track: it orders the track per increasing potential
        growth (defined as the difference between max breadth and the currently used breadth).

        (WebCore::RenderGrid::distributeSpaceToTracks):
        Added this function that matches the specification's algorithm. Only the relevant bits from
        the specification were implemented for now (for example, SubsetOfTracksForGrowthBeyondTrackGrowthConstraint
        is always the empty set so it was omitted).

        * rendering/RenderGrid.h:
        Added the new functions and declared GridTrack as public into the WebCore namespace.

        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::minTrackBreadth):
        (WebCore::GridTrackSize::maxTrackBreadth):
        Removed 2 ASSERTs as the layout algorithm doesn't care if the min / max were
        set from a single track breadth or through minmax().

2013-01-07  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add a setting to enable composited scrolling for frames
        https://bugs.webkit.org/show_bug.cgi?id=104950

        Reviewed by James Robinson.

        Test: compositing/iframes/iframe-composited-scrolling.html

        * page/FrameView.cpp:
        (WebCore::FrameView::usesCompositedScrolling): Returns true if compositedScrollingForFramesEnabled and the frame is in forced compositing mode (which is set when forced compositing mode and compositing for scrollable frames are enabled), so that ScrollingCoordinator won't include the region of the frame in the nonFastScrollableRegion.
        (WebCore):
        * page/FrameView.h:
        (FrameView):
        * page/Settings.in: Add compositedScrollingForFramesEnabled setting.
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated): Changed the comment about which ScrollableAreas are non-fast-scrollable.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidScroll): Let ScrollongCoordinator know when the scrolling changes for a frame with composited scrolling enabled.

2013-01-07  Alexandre Elias  <aelias@chromium.org>

        Divide gesture scroll delta by scale factor
        https://bugs.webkit.org/show_bug.cgi?id=106263

        Reviewed by Adam Barth.

        Gesture scroll deltas were not being adjusted by the frame's scale
        factors, resulting in overly fast main-thread scrolling when zoomed
        in.

        New test: fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureScrollCore):

2013-01-07  Adam Barth  <abarth@webkit.org>

        HTMLTreeBuilder should not depend on Frame
        https://bugs.webkit.org/show_bug.cgi?id=106256

        Reviewed by Eric Seidel.

        Rather than have the tree builder ask the Frame whether scripting and
        plugins are enabled, we now push that information to the tree builder
        via HTMLParserOptions, letting us remove the Frame dependency from the
        tree builder.

        As a consequence of this change, the "script enabled" bit in the parser
        is now locked in when the parser starts. This bit doesn't actually
        control when script execute, only how the <noscript> element is parsed.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::tokenizerStateForContextElement):
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::HTMLMetaCharsetParser):
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset):
        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/parser/HTMLParserOptions.h:
        (HTMLParserOptions):
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        (WebCore::HTMLPreloadScanner::processToken):
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::nextToken):
        (WebCore::HTMLTokenizer::updateStateFor):
        * html/parser/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::create):
        (HTMLTokenizer):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::HTMLViewSourceParser):
        (WebCore::HTMLViewSourceParser::updateTokenizerState):

2013-01-07  Tony Chang  <tony@chromium.org>

        Remove more internals.settings that are autogenerated
        https://bugs.webkit.org/show_bug.cgi?id=106253

        Reviewed by Adam Barth.

        Remove 8 methods that are autogenerated by Settings.in.

        No new tests, this is a refactor and is convered by existing tests.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Remove backup.
        (WebCore::InternalSettings::Backup::restoreTo): Remove restore.
        * testing/InternalSettings.h:
        (Backup): Remove member variables and functions.
        (InternalSettings):
        * testing/InternalSettings.idl: Remove functions.

2013-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        Another incremental build fix after r139013.

        * mathml/MathMLAllInOne.cpp:

2013-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        Incremental build system on Windows port does not necessarily rebuild RenderBox.cpp after r139013.

        * rendering/RenderingAllInOne.cpp:

2013-01-07  Emil A Eklund  <eae@chromium.org>

        REGRESSION(SUBPIXEL_LAYOUT): el.offsetWidth < el.clientWidth for elements of a certain size
        https://bugs.webkit.org/show_bug.cgi?id=106107

        Reviewed by Levi Weintraub.
        
        Add overloaded pixelSnappedOffsetWidth|Height methods to
        RenderBox that do pixel snapping with the same offset
        as clientWidth/height to ensure consistent rounding.

        Test: fast/sub-pixel/client-and-offset-width.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pixelSnappedOffsetWidth):
        (WebCore::RenderBox::pixelSnappedOffsetHeight):
        Snap using the same offset as the clientWidth/height versions.
        
        * rendering/RenderBox.h:
        Remove out of date FIXME and add OVERRIDE keyword.
        
        * rendering/RenderBoxModelObject.h:
        Mark pixelSnappedOffsetWidth|Height as virtual.

2013-01-07  Adam Barth  <abarth@webkit.org>

        Introduce HTMLParserOptions to encapsulate HTML parser options
        https://bugs.webkit.org/show_bug.cgi?id=106251

        Reviewed by Eric Seidel.

        Currently, the HTMLTreeBuilder (and potentially other parts of the
        parser) use their Document* to read configuration information from the
        Document (such as Settings). This patch introduces the
        HTMLParserOptions class to encapsulate that information, making it
        easier to move the HTML parser to a background thread (because the
        HTMLTreeBuilder won't need to talk to the Document directly).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        * html/parser/HTMLDocumentParser.h:
        (HTMLDocumentParser):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        * html/parser/HTMLPreloadScanner.h:
        (WebCore):
        (HTMLPreloadScanner):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::create):
        (HTMLTreeBuilder):
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::HTMLViewSourceParser):

2013-01-07  Joseph Pecoraro  <pecoraro@apple.com>

        Minor improvements to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=105353

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::createFileURLForApplicationCacheResource):
        (WebCore::stringForNetworkState):
        (WebCore::HTMLMediaElement::preload):
        (WebCore::HTMLMediaElement::getPluginProxyParams):
        Use ASCIILiteral for literal strings becoming WTFStrings.

        (WebCore::HTMLMediaElement::setLoop):
        By going through setAttribute, parseAttribute would already take care of
        updating the disable sleep, so the call here is not needed.

2013-01-07  Joseph Pecoraro  <pecoraro@apple.com>

        String improvements in geolocation and notifications modules
        https://bugs.webkit.org/show_bug.cgi?id=105352

        Reviewed by Sam Weinig.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::requestUsesCachedPosition):
        (WebCore::Geolocation::makeCachedPositionCallbacks):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::cancelRequests):
        (WebCore::Geolocation::handlePendingPermissionNotifiers):
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::positionChanged):
        * Modules/notifications/WorkerContextNotifications.cpp:
        Use ASCIILiteral for constant strings becoming WTFStrings.

        (WebCore::WorkerContextNotifications::from):
        Use AtomicString::ConstructFromLiteral for the static local.

2013-01-07  Chris Fleizach  <cfleizach@apple.com>

        AX: the text of render counters are not exposed to Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=103794

        Reviewed by Ryosuke Niwa.

        Support RenderText objects that don't have nodes (like RenderCounter).

        Test: accessibility/render-counter-text.html

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

2013-01-07  Tim Horton  <timothy_horton@apple.com>

        Tiled-layer TileCaches shouldn't unparent offscreen tiles
        https://bugs.webkit.org/show_bug.cgi?id=106258
        <rdar://problem/12969116>

        Reviewed by Simon Fraser.

        Add a setting on TiledBacking (implemented on TileCache) that controls whether or not
        the TileCache should unparent offscreen tiles. We can't use this behavior for tiled-layer TileCaches
        currently because m_isInWindow is not updated for tiled-layer TileCaches, and because we haven't
        decided exactly what their behavior should be. So, revert to the old behavior for them.

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileCache.h:
        (TileCache): Add setUnparentsOffscreenTiles/unparentsOffscreenTiles.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache): m_unparentsOffscreenTiles defaults to false.
        (WebCore::TileCache::revalidateTiles):
        Return to the old behavior of always adding new layers to the layer tree regardless of m_isInWindow if m_unparentsOffscreenTiles is false.
        Return to the old behavior of never unparenting tiles regardless of m_isInWindow if m_unparentsOffscreenTiles is false.
        (WebCore::TileCache::ensureTilesForRect): Return to the old behavior of always ensuring tiles regardless of m_isInWindow if m_unparentsOffscreenTiles is false.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking): Tell primary TileCaches that it's OK to unparent offscreen tiles.

2013-01-07  Justin Novosad  <junov@google.com>

        Fixing memory read after free in CanvasRenderingContext2D::accessFont
        https://bugs.webkit.org/show_bug.cgi?id=106244

        Reviewed by Abhishek Arya.

        Using a temporary String object to hold ref count on string that is
        passed by reference in CanvasRenderingContext2D::accessFont.

        Test: fast/canvas/canvas-measureText.html

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

2013-01-07  Anders Carlsson  <andersca@apple.com>

        DOMEvents.h should include DOMProgressEvent.h
        https://bugs.webkit.org/show_bug.cgi?id=106250

        Reviewed by Sam Weinig.

        DOMProgressEvent.h is already installed as a public header, so it should also be included by DOMEvents.h.

        * bindings/objc/DOMEvents.h:

2013-01-07  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add window.internals.nonFastScrollableRects for testing scrollable areas in fast/slow paths
        https://bugs.webkit.org/show_bug.cgi?id=105546

        Reviewed by James Robinson.

        No new tests. Added test API for new tests of other bugs.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::nonFastScrollableRects):
        (WebCore):
        * page/Page.h:
        (WebCore):
        (Page):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion): Change to public to allow Page::nonFastScrollableRects to access.
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * testing/Internals.cpp:
        (WebCore::Internals::nonFastScrollableRects):
        (WebCore):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-01-07  Tom Sepez  <tsepez@chromium.org>

        Document::initSecurityContext() gives parent security context to iframes with invalid URLs.
        https://bugs.webkit.org/show_bug.cgi?id=104960

        Reviewed by Adam Barth.

        Change covers the case of an invalid non-empty URL.  We know nothing
        about that kind of URL and choose not to inherit origins.
        
        * dom/Document.cpp:
        (WebCore::shouldInheritSecurityOriginFromOwner):

2013-01-07  Chris Fleizach  <cfleizach@apple.com>

        AX: Regression: Contextual menu not following with VO cursor in HTML content when item is scrolled
        https://bugs.webkit.org/show_bug.cgi?id=70075

        Reviewed by Anders Carlsson.

        On WK2 only, when accessibility opens a contextual menu, it does not honor the scroll offset. 
        On WK1, the attachment views handle this conversion when it's needed, but on WK2 it needs to be done manually
        (similar to how the accessibility position is calculated). 

        No test. Cannot test the location of context menu popups on WK2 yet.

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):

2013-01-07  Abhishek Arya  <inferno@chromium.org>

        Heap-buffer-overflow in WebCore::RenderBlock::clone.
        https://bugs.webkit.org/show_bug.cgi?id=101984

        Reviewed by Julien Chaffraix.

        Add a global in RenderBlock to prevent recursion inside splitFlow.
        While inside splitFlow (multi-column handling), we move many children
        using fullRemoveInsert=true, causing RenderBlock::addChild to be called
        and recursing in splitFlow. This messes the tree splitting happening in
        RenderBlock::splitBlocks and can cause bad casts.

        Test: fast/multicol/recursive-split-flow-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):

2013-01-07  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Fix PlatformContextSkia::setDrawingToImageBuffer abuse
        https://bugs.webkit.org/show_bug.cgi?id=104956

        Reviewed by James Robinson.

        Replaced PlatformContextSkia::SetDrawingToImageBuffer with GraphicsContext::setShouldSmoothFonts.

        No new tests needed. No change in functionality.

        * platform/graphics/chromium/CompositorHUDFontAtlas.cpp:
        (WebCore::CompositorHUDFontAtlas::generateFontAtlas):
        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp:
        (WebCore::OpaqueRectTrackingContentLayerDelegate::paintContents):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::couldUseLCDRenderedText):
        (WebCore):

2013-01-07  Enrica Casucci  <enrica@apple.com>

        Some characters are not rotated properly in vertical text
        https://bugs.webkit.org/show_bug.cgi?id=105663
        <rdar://problem/12738911>

        Reviewed by Dan Bernstein.

        Test: platform/mac/fast/text/vertical-no-sideways.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::isCJKIdeographOrSymbol): Added several characters to the list.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::shouldIgnoreRotation): Added
        (WebCore::Font::glyphDataAndPageForNonCJKCharacterWithGlyphOrientation): Added logic to avoid
        rotation for all the characters listed in shouldIgnoreRotation.
    
2013-01-07  Mike West  <mkwst@chromium.org>

        Make the IFRAME_SEAMLESS flag runtime-enabled.
        https://bugs.webkit.org/show_bug.cgi?id=106213

        Reviewed by Ojan Vafai.

        Seamless IFrames live behind the IFRAME_SEAMLESS compile-time flag, this
        patch adds another layer to that in order to enable runtime decisions
        about when it should be active. This will allow ports (Chromium, for
        instance) to toggle the feature on/off for particular builds without
        recompiling from scratch.

        * WebCore.exp.in:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::seamlessIFramesEnabled):
        (WebCore::RuntimeEnabledFeatures::setSeamlessIFramesEnabled):
            Add seamless IFrames to the set of runtime controlled features.
        * dom/Document.cpp:
        (WebCore::Document::shouldDisplaySeamlesslyWithParent):
            If seamless IFrames aren't runtime enabled, always return false from
            Document::shouldDisplaySeamlesslyWithParent. As this method already
            acts as the single gate that controls the rest of the system, it's
            the only place we need to make the runtime check.

2013-01-07  Eric Carlson  <eric.carlson@apple.com>

        LayoutUnit(unsigned long long value) compile failure
        https://bugs.webkit.org/show_bug.cgi?id=106239

        Cast the result of ('unsigned long long' * 'int') to an int before storing in m_value
        to avoid compile failure on some platforms.

        Reviewed by Ryosuke Niwa.

        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::LayoutUnit): Cast to int after multiplication.

2013-01-07  Joe Mason  <jmason@rim.com>

        [BlackBerry] Handle the new AuthRetry result code in NetworkJob::notifyAuthReceived
        https://bugs.webkit.org/show_bug.cgi?id=106233

        Reviewed by Rob Buis.

        Internal PR: 270683
        FilterStream::notifyAuthReceived has a new result code, AuthRetry. When it's received we
        need to handle it by resending the request with the same credentials.

        Reviewed internally by Leo Yang.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyAuthReceived):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):

2013-01-07  Philip Rogers  <pdr@google.com>

        Clear pending container size requests as early as possible
        https://bugs.webkit.org/show_bug.cgi?id=106162

        Reviewed by Eric Seidel.

        http://trac.webkit.org/changeset/137981 contained a bug where pending container size
        requests were only cleared for images that use container sizes. Bitmap images do not use
        container sizes so these requests were not being cleared. This patch does the trivial
        refactoring so that container size requests are cleared as early as possible.

        No new tests as this is just a refactoring of some messy code added in r137981.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::createImage):

2013-01-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137632.
        http://trac.webkit.org/changeset/137632
        https://bugs.webkit.org/show_bug.cgi?id=106237

        Caused major security regressions on ClusterFuzz (Requested by
        inferno-sec on #webkit).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::startDelayUpdateScrollInfo):
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo):

2013-01-07  Victor Carbune  <victor@rosedu.org>

        [Track] Rendering crash
        https://bugs.webkit.org/show_bug.cgi?id=106199

        Reviewed by Eric Carlson.

        The browser is crashing if a text track is added through JavaScript,
        due to the fact that the containing block is not marked as inline at
        the time RenderTextTrackCue::layout() is called. The fix consists
        of ensuring that the pseudo id is set, even if the track isn't
        yet visible.

        Test: media/track/track-cue-inline-assertion-crash.html

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::updateDisplayTree): The pseudo-id should
        be set when the display tree is generated.
        (WebCore::TextTrackCue::getDisplayTree): Added extra check to not
        do unneccessary logic if the track will never be displayed.

2013-01-07  Michael Pruett  <michael@68k.org>

        [JSC] Copy non-index properties of arrays in SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=105575

        Reviewed by Oliver Hunt.

        The structured cloning algorithm requires copying all properties of
        array objects, including non-index properties.

        Tests: fast/storage/serialized-script-value.html
               storage/indexeddb/structured-clone.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore):
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneDeserializer::putProperty):
        (WebCore::CloneDeserializer::deserialize):

2013-01-07  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Stub out async IDBDatabaseBackendInterface::createObjectStore
        https://bugs.webkit.org/show_bug.cgi?id=106148

        Reviewed by Adam Barth.

        These methods are becoming async in multiprocess ports, so stub out
        versions that have no return values.

        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):

2013-01-04  Alexey Proskuryakov  <ap@apple.com>

        ResourceHandle::willLoadFromCache is evil
        https://bugs.webkit.org/show_bug.cgi?id=106147

        Reviewed by Brady Eidson.

        For back/forward navigations to a page that's a result of form submission, we may
        never silently re-submit the form. So, we show a warning dialog when about to re-submit,
        but try to load from cache if possible.

        This patch changes the logic so that we always try to fetch from cache, without
        any preflighting. If cache load fails, we restart the load as a known re-submit.

        No behavior change expected, so no tests.

        * html/HTMLAnchorElement.cpp: (WebCore::HTMLAnchorElement::handleClick):
        Added a FIXME.

        * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::startLoadingMainResource):
        Amended a FIXME with some information about why this call may still be needed.

        * loader/FrameLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame): Pass an explicit argument for unchanged caching behavior.
        (WebCore::FrameLoader::reloadWithOverrideEncoding): Added a FIXME. This function
        can silently re-submit a form.
        (WebCore::FrameLoader::addExtraFieldsToMainResourceRequest): Added a FIXME about
        an incorrect use of current load type.
        (WebCore::FrameLoader::addExtraFieldsToRequest): Make sure that a correct caching
        policy is used for subresources even if main resource was loaded from cache. We
        didn't need that before because initial request had wrong extra fields due to a use
        of m_loadType when it was first called.
        Removed code to change caching policy for b/f navigations. This function does not
        have enough context to decide what the policy should be.
        (WebCore::FrameLoader::loadDifferentDocumentItem): Added an argument telling the
        function whether it should attempt loading from cache. It should do that on first
        attempt to navigate to a form submission result, but not if that failed.
        Pass a correct loadType - m_loadType is one for _previous_ load.
        Removed a special case for https - we've long stopped prohibiting caching of https
        resources, and using a resource that's already cached should definitely be allowed.
        (WebCore::FrameLoader::loadItem): Pass an explicit argument for unchanged caching behavior.
        (WebCore::FrameLoader::retryAfterFailedCacheOnlyMainResourceLoad): Added.

        * loader/MainResourceLoader.cpp: (WebCore::MainResourceLoader::notifyFinished):
        Removed a check for m_resource being null, because we were immediately dereferencing
        it anyway.
        Call retryAfterFailedCacheOnlyMainResourceLoad() to let FrameLoader restart the navigation.

        * platform/network/ResourceHandle.h:
        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/chromium/ResourceHandle.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        Removed willLoadFromCache() - the new logic is cross-platform.

2013-01-07  Alberto Garcia  <agarcia@igalia.com>

        [GTK] Disable deprecation warnings for GStaticRecMutex
        https://bugs.webkit.org/show_bug.cgi?id=105918

        Reviewed by Philippe Normand.

        GStaticRecMutex is deprecated since glib 2.32, but we can't remove
        it because it's needed by GStreamer 0.10. The solution is to
        disable the deprecation warnings for that code alone.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:

2013-01-07  Philip Rogers  <pdr@google.com>

        Refactor client removal in CachedResource::switchClientsToRevalidatedResource
        https://bugs.webkit.org/show_bug.cgi?id=106206

        Previously switchClientsToRevalidatedResource() failed to call didRemoveClient() for each
        client and instead simply cleared m_clients. This patch removes an incorrect comment and
        refactors the code so that removeClient() and didRemoveClient() are properly called.

        Reviewed by Nate Chapin.

        No new tests as there are no observable changes from this refactoring.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::switchClientsToRevalidatedResource):

2013-01-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Support size_t multiplication and division operators on LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=83848

        Reviewed by Emil A Eklund.

        Per Darin's suggestion, adding a version of the operator for most unsigned types (excluding
        only unsigned char). This should automatically cover size_t as it should be one of these.

        Test: TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp

        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::LayoutUnit):
        (WebCore::operator*):
        (WebCore::operator/):
        Added the operators and (possibly saturating) constructors for unsigned short, unsigned long,
        unsigned long long.

2013-01-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138944.
        http://trac.webkit.org/changeset/138944
        https://bugs.webkit.org/show_bug.cgi?id=106223

        It made 28 tests crash (Requested by Ossy on #webkit).

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):

2013-01-07  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Build fixes after r138413
        https://bugs.webkit.org/show_bug.cgi?id=106087

        Reviewed by Alexey Proskuryakov.

        * WebCore.vcproj/WebCore.vcproj: Added NetworkStorageSessionStub.cpp,
        and removed NetworkStorageSessionCFNet.cpp for WinCairo build.
        * platform/win/TemporaryLinkStubs.cpp: Include fix.

2013-01-07  David Faure  <faure@kde.org>

        [Qt] Major performance improvement in Qt's PluginDatabase implementation
        https://bugs.webkit.org/show_bug.cgi?id=106140

        Reviewed by Simon Hausmann.

        No new tests, only a performance improvement.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo): Don't do a full-fledged load(), load the module directly.
        (WebCore::PluginPackage::load): Use existing module if fetchInfo created it.

2013-01-07  Gabor Rapcsanyi  <rgabor@webkit.org>

        Optimizing RGBA16, RGB16, ARGB16, BGRA16 unpacking functions with NEON intrinsics
        https://bugs.webkit.org/show_bug.cgi?id=103614

        Reviewed by Zoltan Herczeg.

        Optimizing RGBA16, RGB16, ARGB16, BGRA16 unpacking functions in GraphicsContext3D
        with ARM NEON intrinsics. The optimized functions are 2-3x faster than the origin.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore):
        * platform/graphics/cpu/arm/GraphicsContext3DNEON.h:
        (WebCore::SIMD::unpackOneRowOfRGBA16LittleToRGBA8):
        (SIMD):
        (WebCore::SIMD::unpackOneRowOfRGB16LittleToRGBA8):
        (WebCore::SIMD::unpackOneRowOfARGB16LittleToRGBA8):
        (WebCore::SIMD::unpackOneRowOfBGRA16LittleToRGBA8):

2013-01-07  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r138786): Causes webaudio tests to crash
        https://bugs.webkit.org/show_bug.cgi?id=106182

        Reviewed by Philippe Normand.

        Partially revert r138786 since it causes crashes in webaudio
        tests. The WebProcess would actually become unresponsive due
        to source element never going to PLAYING state.

        Only the changes to webKitWebAudioSrcChangeState() were reverted.

        No new tests, already covered by existing tests.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcChangeState):

2013-01-07  Hayato Ito  <hayato@chromium.org>

        Cannot compile with ENABLE_SHADOW_DOM=0 and ENABLE_STYLE_SCOPED=1
        https://bugs.webkit.org/show_bug.cgi?id=106207

        Reviewed by Hajime Morita.

        Guard StyleScopeResolver::addHostRule with SHADOW_DOM flag.

        No tests, as no change in behavior.

        * css/StyleScopeResolver.cpp:
        (WebCore):

2013-01-07  Jon Lee  <jonlee@apple.com>

        Missing amendments to r138927. Amend Changelog to remove item about Timer.h, which was not changed.

        * rendering/RenderSnapshottedPlugIn.cpp: Rename stopAndRestartDelayTimer() to resetDelayTimer().
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot):
        (WebCore::RenderSnapshottedPlugIn::handleEvent):
        (WebCore::RenderSnapshottedPlugIn::resetDelayTimer):
        * rendering/RenderSnapshottedPlugIn.h:

2013-01-06  Jon Lee  <jonlee@apple.com>

        Show label automatically for plug-ins of significant size
        https://bugs.webkit.org/show_bug.cgi?id=106146
        <rdar://problem/12783010>

        Reviewed by Simon Fraser.

        For significantly sized plug-ins, trigger a timer that displays the label automatically
        without requiring the user to mouse over the element first. The trickiness of the logic
        here is that there are two delays involved-- one for whether the user mouses over (shorter),
        and one for when the label is shown automatically (longer). Mousing over a plug-in that is
        marked to show it automatically should have the timer delay switched. And if the label
        showed automatically, mousing in and out of the element should not change that label's
        state.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore): Add constants that determine whether the plug-in is of a significant size.
        (WebCore::shouldPlugInShowLabelAutomatically): Based on the size of the frame view and the
        clipped plug-in size, determine whether the label should show automatically. If the plug-in is
        not contained within the bounds of the frame view, or is not at least as large as the threshold
        size, then do not show the label automatically.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): After we've determined that
        the plug-in should not auto-start, make a check to see if the label should show automatically.
        Also, update some of the logging.
        (WebCore::HTMLPlugInImageElement::subframeLoaderDidCreatePlugIn): Update the logging.

        * rendering/RenderSnapshottedPlugIn.h: Rename the timer to m_showLabelDelayTimer since
        it can fire for two different reasons. Add some additional state variables, and an enum
        to explain why the label appeared.
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore): Change hoverDelay to showLabelAfterMouseOverDelay. Add a new, longer delay for
        when the plug-in is supposed to auto-show the label.
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn): Initialize the member variables.
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot): When the snapshot image is updated,
        start the timer to auto-show the label.
        (WebCore::RenderSnapshottedPlugIn::paintLabel): Avoid painting the label only if the element
        is not hovered and the user was mousing over the plug-in. Otherwise, the plug-in is supposed
        to show automatically, and we should paint. Mark the renderer as having showed the label at
        least once.
        (WebCore::RenderSnapshottedPlugIn::showLabelDelayTimerFired): Renamed to reflect the
        purpose of the timer.
        (WebCore::RenderSnapshottedPlugIn::setShouldShowLabelAutomatically): Set the variable that
        determines whether, in general, this plug-in should show the label automatically even
        without user input.
        (WebCore::RenderSnapshottedPlugIn::handleEvent): If the user mouses over the plug-in,
        only reset the show timer is the label has never appeared before, or if it has, that
        it's not because the label was supposed to show automatically. That is, if the label is
        supposed to show automatically, the label should remain visible. This is also true when
        the user mouses out of the plug-in. If the user moused out before the time had a chance
        to fire and show the label for the first time, then we check to see if the plug-in should
        be displaying the label automatically, and if so, restart the timer using the longer delay.
        (WebCore::RenderSnapshottedPlugIn::stopAndRestartDelayTimer): Convenience function to
        update the m_showReason variable, and reset the timer with the appropriate delay.

2013-01-06  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in DocumentLoader::stopLoading
        https://bugs.webkit.org/show_bug.cgi?id=103656

        Reviewed by Eric Seidel.

        Test: fast/dom/ready-state-change-crash.html

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::prepareToStopParsing): Bail out
        if the parser is detached due to mutation event.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading): Move the protectors for
        frame and document loader to the start of the function. Call to
        m_frame->loader()->stopLoading() can change document ready state
        and fire mutation event which might blow the document loader from
        underneath.

2013-01-06  Takashi Sakamoto  <tasak@google.com>

        [Shadow DOM]: crash in WebCore::ElementShadow::setValidityUndetermined
        https://bugs.webkit.org/show_bug.cgi?id=106203

        Reviewed by Hajime Morita.

        InsertionPoint should check whether ElementShadow is available or not
        before invoking its methods.

        No new tests. Webcomponents_fuzzer reported this bug. Would like to
        use the fuzzer to check this issue.

        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::getDistributedNodes):
        (WebCore::InsertionPoint::childrenChanged):
        (WebCore::InsertionPoint::insertedInto):
        Added ifs to check whether ElementShadow is available or not before
        invoking ElementShadow's methods, i.e. setValidityUndetermined,
        invalidateDistribution, and ensureDistributionDocument.

2013-01-06  Shinya Kawanaka  <shinyak@chromium.org>

        RenderImage should not use shadowAncestorNode
        https://bugs.webkit.org/show_bug.cgi?id=97871

        Reviewed by Dimitri Glazkov.

        Since shadowAncestorNode() does not return 0, this if-condition will never hold.
        shadowHost() should be used instead.

        No change in logic, refactoring.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::hostImageElement):

2013-01-06  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Bug 106177 - [GStreamer] Don't call gst_video_info_from_caps() with non-fixed caps
        https://bugs.webkit.org/show_bug.cgi?id=106177

        Reviewed by Martin Robinson.

        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        (getVideoSizeAndFormatFromCaps):
        Don't call gst_video_info_from_caps() with non-fixed caps as
        it will cause assertions.

2013-01-06  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::Document::implicitClose
        https://bugs.webkit.org/show_bug.cgi?id=105655

        Reviewed by Eric Seidel.

        Test: fast/dom/window-load-crash.html

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): RefPtr protect |this| document since it
        can be destroyed in the dispatchWindowLoadEvent call.

2013-01-06  Mike West  <mkwst@chromium.org>

        Seamless: IFrame's padding isn't taken into account when calculating its height.
        https://bugs.webkit.org/show_bug.cgi?id=106167

        Reviewed by Eric Seidel.

        IFrames rendered seamlessly don't currently calculate their height
        correctly when padding is applied to the frame itself. This patch adds
        padding calculations to RenderIFrame::layoutSeamlessly to ensure that
        the seamless frame is correctly sized.

        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::layoutSeamlessly):

2013-01-05  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: [Mac] Intermittent crashes in AXObjectCache::notificationPostTimerFired
        https://bugs.webkit.org/show_bug.cgi?id=106106

        Reviewed by Eric Seidel.

        The crash was cause by notification post timer firing after the object destruction had taken place.
        Clear the timer so that this won't happen. Also make sure the document doesn't go away while we're
        going through m_notificationsToPost.

        No new tests since crashes have been caught by various layout tests, and we can't easily
        create a deterministic layout test for this particular crash.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::notificationPostTimerFired):

2013-01-05  Michael Pruett  <michael@68k.org>

        IndexedDB: Replace int64 with int64_t
        https://bugs.webkit.org/show_bug.cgi?id=106189

        Reviewed by Sam Weinig.

        Cleaning up coding inconsistencies, no change in behavior.

        Tests: storage/indexeddb/*

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::GetOperation::create):

2013-01-05  Elliott Sprehn  <esprehn@chromium.org>

        Remove RenderObjectChildList::beforePseudoElementRenderer and afterPseudoElementRenderer
        https://bugs.webkit.org/show_bug.cgi?id=106132

        Reviewed by Abhishek Arya.

        We no longer need the complicated traversals in beforePseudoElementRenderer
        and afterPseudoElementRenderer since we can get the renderers of pseudo
        elements through the node. This removes all that code and swaps it for
        Element::pseudoElementRenderer.

        This is possible now that r138850 removed all the now incorrect manual
        management of pseudo element renderers from the render tree that was
        left over from before the switch to DOM based pseudo elements.

        No new tests, just refactoring.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * dom/Element.cpp:
        (WebCore::Element::pseudoElementRenderer):
            Added, gets the renderer of the pseudo element by PseudoId if it
            exists.
        * dom/Element.h:
        (Element):
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::nextSiblingSlow):
        (WebCore::NodeRenderingTraversal::previousSiblingSlow):
        * rendering/RenderCounter.cpp:
        (WebCore::previousInPreOrder):
        (WebCore::previousSiblingOrParent):
        (WebCore::nextInPreOrder):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::lastChild):
        * rendering/RenderObjectChildList.cpp:
        * rendering/RenderObjectChildList.h:
        (RenderObjectChildList):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::counterValueForElement):

2013-01-05  Robert Hogan  <robert@webkit.org>

        Heap-use-after-free in WebCore::RenderBlock::insertIntoTrackedRendererMaps
        https://bugs.webkit.org/show_bug.cgi?id=105654

        Reviewed by Simon Fraser.

        As with position:relative, position:sticky does not apply to table sections.

        Test: fast/block/sticky-position-containing-block-crash.html

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

2013-01-05  Mike West  <mkwst@chromium.org>

        Cleanup: mayDisplaySeamlessWithParent -> mayDisplaySeamless_ly_WithParent
        https://bugs.webkit.org/show_bug.cgi?id=106169

        Reviewed by Eric Seidel.

        This patch renames SecurityContext's 'm_mayDisplaySeamlessWithParent' to
        'm_mayDisplaySeamlesslyWithParent'. Because adverbs matter.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::shouldDisplaySeamlesslyWithParent):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::SecurityContext):
        * dom/SecurityContext.h:
        (SecurityContext):

2013-01-05  Mike West  <mkwst@chromium.org>

        seamless iframes don't take border into account properly and make the iframe too small.
        https://bugs.webkit.org/show_bug.cgi?id=90827

        Reviewed by Ojan Vafai.

        Seamless IFrames were incorrectly calculating their width; borders and
        padding of the child document were accidentally left out of the end
        result. This tiny patch adds the border/padding width to the calculated
        width for the seamless IFrame, bringing things back into line with
        expectations.

        Test: fast/frames/seamless/seamless-border-padding.html

        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::minPreferredLogicalWidth):
        (WebCore::RenderIFrame::maxPreferredLogicalWidth):
            Add borderAndPaddingLogicalWidth() to the result of both methods.

2013-01-05  Min Qin  <qinmin@chromium.org>

        MediaControls::show() should make controls opaque
        https://bugs.webkit.org/show_bug.cgi?id=106034

        Reviewed by Eric Carlson.

        When a video enters fullscreen, webkit starts a timer to make the control transparent when the timer expires.
        If the user exits fullscreen while the timer expires, webkit will call mediaControls::show().
        However, show() actually displays nothing as the control is transparent.
        The user had to move his mouse outside the video rect and move it back in order to show the controls.
        Simply clicking/moving the mouse inside the video rect will not make the control opaque.
        Test: media/video-controls-visible-exiting-fullscreen.html

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::show):

2013-01-05  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Migrate backend ObjectStore calls to use transaction id
        https://bugs.webkit.org/show_bug.cgi?id=102741

        Reviewed by Tony Chang.

        Fully migrate 8 core data calls (get, put, setIndexKeys, setIndexesReady,
        openCursor, count, deleteRange, and clear) into IDBDatabaseBackendImpl,
        combining common code from IDBObjectStoreBackendImpl and IDBIndexBackendImpl
        in order to simplify the backend interface. These calls are now
        implemented in terms of an int64_t-based transactionId rather than
        an IDBTransactionBackendInterface, which simplifies the ownership model
        between the frontend and the backend.

        In addition, remove references to IDBObjectStoreBackend* from IDBIndex,
        as it is no longer needed.

        A few duplicate IDB_TRACE methods have been removed from wrapper methods
        that call another method that already have IDB_TRACE's.

        Finally, IDBCursorBackendImpl now no longer holds onto an 
        IDBObjectStoreBackendImpl*, so its destruction and member variables are
        simplified, and reordered to match proper destruction order.

        * Modules/indexeddb/IDBCursorBackendImpl.cpp: Reordered to account for proper destruction.
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::~IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        (IDBCursorBackendImpl):
        * Modules/indexeddb/IDBDatabase.h:
        (WebCore::IDBDatabase::backend):
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (GetOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*RetrievalOperation
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore):
        (PutOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::*StorageOperation.
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (SetIndexesReadyOperation): Moved from IDBObjectStoreBackendImpl::IndexesReadyOperation
        (WebCore::SetIndexesReadyOperation::create): 
        (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation):
        (OpenCursorOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::Open*CursorOperation
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (CountOperation): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::CountOperation
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (DeleteRangeOperation): Moved from IDBObjectStoreBackendImpl::DeleteOperation
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (ClearOperation): Moved from IDBObjectStoreBackendImpl::ClearOperation
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):
        (WebCore::IDBDatabaseBackendImpl::get): Combined from IDBObjectStoreBackendImpl/IDBIndexBackendImpl::get*
        (WebCore::GetOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::put): Moved from IDBObjectStoreBackendImpl::put
        (WebCore::PutOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::setIndexKeys): Moved from IDBObjectStoreBackendImpl::setIndexKeys
        (WebCore::IDBDatabaseBackendImpl::setIndexesReady):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::openCursor):
        (WebCore::IDBDatabaseBackendImpl::count):
        (WebCore::CountOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::deleteRange):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::clear):
        (WebCore::ClearOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::IDBIndex):
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        (WebCore::IDBIndex::backendDB):
        (WebCore):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::create):
        (IDBIndex):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        * Modules/indexeddb/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::count):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        (IDBIndexBackendImpl):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::count):
        (WebCore::IDBObjectStore::backendDB):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::id):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::generateKey):
        (WebCore::IDBObjectStoreBackendImpl::updateKeyGenerator):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReady):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::count):
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::database):
        (IDBTransactionBackendImpl):

2013-01-05  Robert Hogan  <robert@webkit.org>

        Max width of a floated container with floated children calculated incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=47975

        Accumulate the width of child floats in the correct counter so that it gets reset
        as expected when a subsequent sibling decides to clear it.

        Reviewed by Levi Weintraub.

        Test: fast/block/float/max-width-clear-float-with-overflow-hidden.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):

2013-01-05  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Stub out IDBDatabaseBackendInterface::createIndex/deleteIndex
        https://bugs.webkit.org/show_bug.cgi?id=106117

        Reviewed by Adam Barth.

        No new tests, these are just stubs for refactoring.

        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::createIndex):
        (WebCore::IDBDatabaseBackendImpl::deleteIndex):
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):

2013-01-05  Takashi Sakamoto  <tasak@google.com>

        [Shadow DOM]: Some named elements in ShadowTree visible on nesting document level
        https://bugs.webkit.org/show_bug.cgi?id=105617

        Reviewed by Dimitri Glazkov.

        According to the shadow dom spec, the nodes and named elements are not
        accessible using shadow host's document DOM tree accessors or with
        Window object named properties. c.f.
        https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#upper-boundary-encapsulation

        Test: fast/dom/shadow/element-name-in-shadow.html

        * dom/Element.h:
        (WebCore::Element::updateName):
        Check whether the given element is in a shadow dom tree or not. If in
        a shadow dom tree, don't register the name.
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::insertedInto):
        (WebCore::HTMLIFrameElement::removedFrom):
        (WebCore::HTMLIFrameElement::parseAttribute):
        HTMLIFrameElement doesn't use updateName. Instead the element uses
        addExtraNamedItem and removeExtraNameItem in HTMLIFrameElement.cpp.

2013-01-05  Chris Rogers  <crogers@google.com>

        Implement MediaStreamSource::setAudioFormat()
        https://bugs.webkit.org/show_bug.cgi?id=106053

        Reviewed by Kenneth Russell.

        MediaStreamAudioDestinationNode needs to be able to tell its associated
        MediaStreamSource about the audio format (number of channels and sample-rate).

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * platform/audio/AudioDestinationConsumer.h:
        (AudioDestinationConsumer):
        * platform/chromium/support/WebMediaStreamSource.cpp:
        (ConsumerWrapper):
        (WebKit::ConsumerWrapper::setFormat):
        (WebKit):
        * platform/mediastream/MediaStreamSource.cpp:
        (WebCore::MediaStreamSource::setAudioFormat):
        (WebCore):
        * platform/mediastream/MediaStreamSource.h:
        (MediaStreamSource):

2013-01-05  Zeno Albisser  <zeno@webkit.org>

        [Texmap] TextureMapperGL should reset ARRAY_BUFFER after painting.
        https://bugs.webkit.org/show_bug.cgi?id=106098

        This fixes the issue of the address bar disappearing in
        Qt/MiniBrowser after r138555.

        Reviewed by Jocelyn Turcotte.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawEdgeTriangles):
        (WebCore::TextureMapperGL::drawUnitRect):

2013-01-04  Ryosuke Niwa  <rniwa@webkit.org>

        Chromium windows compile fails because of the assertion in NodeRareData
        https://bugs.webkit.org/show_bug.cgi?id=106149

        Reviewed by Andreas Kling.

        MSVC adds padding between bitfields of different types for better alignment.
        Since we care more about the memory usage, use unsigned for all bitfields to work around this behavior.

        * dom/NodeRareData.cpp:
        (SameSizeAsNodeRareData):
        (WebCore):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::isWebVTTNode):
        (WebCore::NodeRareData::isWebVTTFutureNode):
        (NodeRareData):

2013-01-04  Dan Bernstein  <mitz@apple.com>

        Updated the exports file.

        Rubber-stamped by Andy Estes.

        * WebCore.exp.in: Moved the DOMHTMLTableCellElement export out of the !PLATFORM(IOS) section.

2013-01-04  Jon Lee  <jonlee@apple.com>

        Update margin for label to 0
        https://bugs.webkit.org/show_bug.cgi?id=106152
        <rdar://problem/12961387>

        Reviewed by Brian Weinstein.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore): Change the margin constant from 10 to 0.

2013-01-04  Benjamin Poulain  <benjamin@webkit.org>

        Optimize TransformationMatrix::multiply() for x86_64
        https://bugs.webkit.org/show_bug.cgi?id=105719

        Reviewed by Sam Weinig.

        On x86_64, we have access to 16 XMM registers. This can hold 32 double values.
        We can use that in two ways to optimize matrix multiplications:
        -Keep the source matrix completely in registers. Write the result directly in
         the source matrix's memory. This avoids the memcpy at the end of the multiplication
         and various memory operations.
        -Use SIMD with SSE to perform 2 operations at a time.

        The parameter from the second matrix are loaded one by one in XMM registers.
        Loading them with SSE then shuffling the values perform worse than loading
        one by one.

        This is only enabled on 64bits as x86 only has access to 8 XMM registers and
        the function should be written differently.

        On a i5, TransformationMatrix::multiply() perform about 3 times faster with the change.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply):
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix): Fix an incorrect comment. Unify the comment with the cpp file.

2013-01-04  Joshua Bell  <jsbell@chromium.org>

        Unreviewed, fix Apple Win build following http://trac.webkit.org/changeset/138838
        https://bugs.webkit.org/show_bug.cgi?id=105927

        * WebCore.vcproj/WebCoreTestSupport.vcproj:

2013-01-04  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::XMLDocumentParser::doEnd
        https://bugs.webkit.org/show_bug.cgi?id=100152

        Reviewed by Adam Barth.

        XMLDocumentParser can be blown away inside document()->styleResolverChanged()
        call. Protect it with a local RefPtr in Document::explitClose.    
    
        No new tests. The site specific dependencies are hard to minimize.

        * dom/Document.cpp:
        (WebCore::Document::explicitClose): RefPtr m_parser into a local, since
        it can be detached and nulled out in DocumentWriter::end().
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end): Bail out when we are detached.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd): Bail out when we are detached.
        * xml/parser/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::doEnd): Bail out when we are detached.

2013-01-04  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r138394): platform/mac/accessibility/file-upload-button-subrole.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=105778

        Reviewed by Alexey Proskuryakov.

        Rename "file upload" to "file upload button".

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:

2013-01-04  Tim Horton  <timothy_horton@apple.com>

        [wk2] Remove non-visible tiles from the layer tree
        https://bugs.webkit.org/show_bug.cgi?id=106061
        <rdar://problem/12761821>

        Reviewed by Simon Fraser.

        Unparenting tiles which aren't currently on-screen can allow underlying
        frameworks to manage the layer's backing stores more effectively than we can.

        In addition, add a setting (AggressiveTileRetentionEnabled) which keeps more
        tiles around (we don't remove tiles in cohorts, nor when the TileCache moves
        out of the window), which is off by default.

        * WebCore.exp.in: Export Settings::setAggressiveTileRetentionEnabled.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize m_aggressiveTileRetentionEnabled to false.
        (WebCore::Settings::setAggressiveTileRetentionEnabled): Added.
        * page/Settings.h:
        (WebCore::Settings::aggressiveTileRetentionEnabled): Added.
        * platform/graphics/TiledBacking.h: Add setter/getter to hand aggressivelyRetainsTiles through to TiledBackings.
        * platform/graphics/ca/mac/TileCache.h:
        (TileCache): Turn TileValidationPolicy into TileValidationPolicyFlags, and add
        a flag for unparenting all tiles.
        Implement aggressivelyRetainsTiles setter/getter.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache): Initialize m_aggressivelyRetainsTiles to false.
        (WebCore::TileCache::setIsInWindow): Revalidate tiles immediately if the TileCache has just entered the window.
        (WebCore::TileCache::tileRevalidationTimerFired):
        This is called if coverage rect, tile cache layer bounds, or visibility changes. We will revalidate tiles:
            - Removing all tiles from the layer tree for background tile caches.
            - Not pruning old tiles if the aggressiveTileRetentionEnabled setting is on.
        (WebCore::TileCache::revalidateTiles):
        Adopt TileValidationPolicyFlags instead of the old enum, and use separate flags for foreground/background caches.
        Unparent tiles when they move out of the tile coverage rect.
        Only schedule the tile cohort removal timer if we're not aggressively keeping tiles around.
        Ensure that tiles are re-added to the TileCache layer tree if they already exist.
        Unparent all tiles if TileValidationPolicyFlags says to (from tileRevalidationTimerFired's background flags).
        Only add new tiles to the TileCache's layer tree if we're currently in the window.
        Don't prune secondary tiles if the visible rect changes; this will already occur because when the visibleRect
        changes, we arrive via tileRevalidationTimerFired, which asks for PruneSecondaryTiles anyway (except if we're
        aggressively retaining tiles). This prevents tiles from being deleted unexpectedly during rubber-banding or when zoomed (this part of the patch is thanks to Simon).
        (WebCore::TileCache::ensureTilesForRect):
        Don't ensure any tiles if the TileCache is offscreen.
        Ensure that tiles are re-added to the TileCache layer tree if they already exist.
        (WebCore::TileCache::drawTileMapContents):
        Draw a thick purple border around tiles that have been unparented.

2013-01-04  Adam Barth  <abarth@webkit.org>

        HTMLTreeBuilder should ASSERT that it is on the main thread before touching elements
        https://bugs.webkit.org/show_bug.cgi?id=106128

        Reviewed by Eric Seidel.

        Even if we move the HTML parser onto a background thread, we're likely
        to keep fragment parsing on the main thread. These code paths touch
        elements (which only exist on the main thread) but are only used during
        fragment parsing. This patch adds ASSERTs to document that invariant.

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

2013-01-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions] @region rules inside media queries are ignored
        https://bugs.webkit.org/show_bug.cgi?id=102388

        Reviewed by David Hyatt.

        Using @region rules in media queries was ignored, but we should accept and apply it.

        Tests: fast/regions/region-rule-nested-region-rule.html
               fast/regions/region-styling-mediaquery.html

        * css/CSSGrammar.y.in: Add new ruleList for region rule to handle the media query case
        and avoid using nested region rules.
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRulesFromSheet): Add case for region rules inside media queries.

2013-01-04  Dan Bernstein  <mitz@apple.com>

        [mac] WebKit1 has no equivalent of WKBundleNodeHandleCopyHTMLTableCellElementCellAbove
        https://bugs.webkit.org/show_bug.cgi?id=106121

        Reviewed by Adele Peterson.

        Test: TestWebKitAPI/Tests/mac/DOMHTMLTableCellCellAbove.mm.

        * bindings/objc/DOM.mm:
        (-[DOMHTMLTableCellElement _cellAbove]): Added. Calls HTMLTableCellElement::cellAbove().
        * bindings/objc/DOMPrivate.h: Added declaration of the above.

2013-01-04  Abhishek Arya  <inferno@chromium.org>

        Crash in WebCore::RenderBlock::willBeDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=103455

        Reviewed by Eric Seidel.

        It is not required to set beforeChild to :after child since DOM is
        now pseudo element aware. See trac.webkit.org/changeset/137336. We
        were incorrectly placing the inline continuation before the :after
        content.       
          
        Test: fast/multicol/continuation-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): remove beforeChild
        setting to afterPseudoElementRenderer.
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::addChild): add missing beforeChild argument.
        setting to afterPseudoElementRenderer.
        (WebCore::RenderRubyAsBlock::addChild): add missing beforeChild argument.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): remove beforeChild
        setting to afterPseudoElementRenderer.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild): remove beforeChild
        setting to afterPseudoElementRenderer.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): remove beforeChild
        setting to afterPseudoElementRenderer.

2013-01-04  Chris Rogers  <crogers@google.com>

        Implement WebIDL-style string constants in WebAudio (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=105977

        Reviewed by Kentaro Hara.

        See Deprecation Notes for more detail:
        https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DeprecationNotes

        PannerNode, BiquadFilterNode, OscillatorNode constants must support WebIDL-style string constants.
        Legacy support in the setters for the old integer values should be supported.
        This patch handles the changes for BiquadFilterNode and PannerNode.
             
        Test: webaudio/pannernode-basic.html

        * GNUmakefile.list.am:
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::type):
        (WebCore):
        (WebCore::BiquadFilterNode::setType):
        * Modules/webaudio/BiquadFilterNode.h:
        (BiquadFilterNode):
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::panningModel):
        (WebCore):
        (WebCore::PannerNode::setPanningModel):
        (WebCore::PannerNode::distanceModel):
        (WebCore::PannerNode::setDistanceModel):
        * Modules/webaudio/PannerNode.h:
        (PannerNode):
        * Modules/webaudio/PannerNode.idl:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBiquadFilterNodeCustom.cpp: Copied from Source/WebCore/Modules/webaudio/BiquadFilterNode.cpp.
        (WebCore):
        (WebCore::JSBiquadFilterNode::setType):
        * bindings/js/JSPannerNodeCustom.cpp: Copied from Source/WebCore/Modules/webaudio/BiquadFilterNode.cpp.
        (WebCore):
        (WebCore::JSPannerNode::setPanningModel):
        (WebCore::JSPannerNode::setDistanceModel):
        * bindings/v8/custom/V8BiquadFilterNodeCustom.cpp: Copied from Source/WebCore/Modules/webaudio/BiquadFilterNode.cpp.
        (WebCore):
        (WebCore::V8BiquadFilterNode::typeAccessorSetter):
        * bindings/v8/custom/V8PannerNodeCustom.cpp: Added.
        (WebCore):
        (WebCore::V8PannerNode::panningModelAccessorSetter):
        (WebCore::V8PannerNode::distanceModelAccessorSetter):

2013-01-04  Rick Byers  <rbyers@chromium.org>

        window.Touch and TouchList should exist when touch events are enabled
        https://bugs.webkit.org/show_bug.cgi?id=96295

        Reviewed by Kentaro Hara.

        Add missing window.Touch and window.TouchList constructors under
        ENABLE(TOUCH_EVENTS).

        Make window.Touch, window.TouchList and window.TouchEvent enabled at runtime
        under V8, to be consistent with all the other touch-related APIs.

        Tests: fast/events/touch/document-create-touch-list.html
           fast/js/global-constructors.html

        * bindings/generic/RuntimeEnabledFeatures.h:
        * dom/Document.idl:
        * dom/Element.idl:
        * page/DOMWindow.idl:

2013-01-04  Adam Klein  <adamk@chromium.org>

        [v8] Stop using an IDL to generate V8MutationCallback
        https://bugs.webkit.org/show_bug.cgi?id=106122

        Reviewed by Adam Barth.

        The only real code in the generated V8MutationCallback.{h,cpp} files
        were specifically written in CodeGeneratorV8 for its use. By instead
        Using completely-hand-written versions of these files, the
        CodeGenerator can be simplified (as can all generated Callbacks).
        All the actually shared code is still shared via subclassing of
        ActiveDOMCallback.

        This introduces additional flexibility into the implementation of
        MutationCallback which will be used when fixing the MutationObserver
        memory leak (http://webkit.org/b/90661) for JSC.

        No changes to JSC for now, just a FIXME in the IDL file.

        No new tests, refactoringonly.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::V8TestCallback):
        * bindings/scripts/test/V8/V8TestCallback.h:
        (WebCore::V8TestCallback::create):
        (V8TestCallback):
        * bindings/v8/V8MutationCallback.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8MutationCallbackCustom.cpp.
        (WebCore::V8MutationCallback::V8MutationCallback):
        (WebCore::V8MutationCallback::handleEvent):
        * bindings/v8/V8MutationCallback.h: Added.
        (V8MutationCallback):
        (WebCore::V8MutationCallback::create):
        (WebCore::V8MutationCallback::weakCallback):
        * dom/MutationCallback.idl:

2013-01-04  Tony Chang  <tony@chromium.org>

        Remove some autogenerated settings from InternalSettings.idl
        https://bugs.webkit.org/show_bug.cgi?id=106114

        Reviewed by Ojan Vafai.

        Remove 6 methods that are now autogenerated.
        setAcceleratedFiltersEnabled was never called.
        AcceleratedCompositingForOverflowScrollEnabled was never backed up/restored.
        setEnableCompositingForFixedPosition and setEnableCompositingForScrollableFrames
        are renamed to match the name in Settings.in.

        No new tests, there should be no change in behavior. This is covered by
        existing tests in compositing and platform/chromium/compositing.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Remove code.
        (WebCore::InternalSettings::Backup::restoreTo): Remove code.
        * testing/InternalSettings.h:
        (Backup): Remove member variables.
        (InternalSettings):
        * testing/InternalSettings.idl: Remove methods that are no longer used.

2013-01-04  Ojan Vafai  <ojan@chromium.org>

        Vertical writing mode can overflow fixed size grandparent container
        https://bugs.webkit.org/show_bug.cgi?id=93655

        Reviewed by David Hyatt.

        Add a hook to RenderBox::availableHeight to exclude the containing block's
        margin, border and padding. This is for auto-sizing perpendicular writing modes
        to restrict to the minimum of the fill-available height and the viewport height.

        This will be used in a future patch to implement "height: fill-available".

        This behavior was recently specced in http://dev.w3.org/csswg/css3-sizing/#extrinsic-sizing.

        Test: fast/writing-mode/auto-sizing-orthogonal-flows.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        * rendering/RenderBox.h:
        (RenderBox):
        (WebCore::RenderBox::availableWidth):
        (WebCore::RenderBox::availableHeight):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeIntrinsicRatioInformation):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::availableLogicalHeight):
        * rendering/RenderView.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):

2013-01-04  Joshua Bell  <jsbell@chromium.org>

        Add tests for WebIDL type conversions
        https://bugs.webkit.org/show_bug.cgi?id=105927

        Reviewed by Adam Barth.

        Expose attributes of various WebIDL types for testing ECMAScript value conversion,
        including edge cases such as NaNs, Infinities, etc. These attributes hang off
        a TypeConversions object created via window.internals.typeConversions().

        Test: fast/js/webidl-type-mapping.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCoreTestSupport.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::typeConversions):
        (WebCore):
        * testing/Internals.h:
        (WebCore):
        * testing/Internals.idl:
        * testing/TypeConversions.h: Added.
        (WebCore):
        (TypeConversions):
        (WebCore::TypeConversions::create):
        (WebCore::TypeConversions::testLong):
        (WebCore::TypeConversions::setTestLong):
        (WebCore::TypeConversions::testUnsignedLong):
        (WebCore::TypeConversions::setTestUnsignedLong):
        (WebCore::TypeConversions::testLongLong):
        (WebCore::TypeConversions::setTestLongLong):
        (WebCore::TypeConversions::testUnsignedLongLong):
        (WebCore::TypeConversions::setTestUnsignedLongLong):
        (WebCore::TypeConversions::TypeConversions):
        * testing/TypeConversions.idl: Added.

2013-01-04  Stephen White  <senorblanco@chromium.org>

        Invalidation of some SVG filter attributes on HTML content doesn't work 
        https://bugs.webkit.org/show_bug.cgi?id=105635

        Reviewed by Dirk Schulze.

        Since HTML elements with filters are only added to m_clientLayers, not
        m_clients, and do not use the FilterInfo used by SVG filters on SVG
        elements, they must be invalidated separately.  Some filter attribute
        invalidations call markAllClientsForInvalidation(), but some call
        markClientForInvalidation() directly.  These invaldations must also 
        invalidate m_clientLayers.

        Test: css3/filters/reference-filter-update-on-attribute-change.html

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        (WebCore::RenderSVGResourceContainer::markAllClientLayersForInvalidation):
        * rendering/svg/RenderSVGResourceContainer.h:
        Refactor client layer invalidation out into its own function.
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        Mark all client layers for invalidation when a filter primitve attribute is
        changed.

2013-01-04  Mike West  <mkwst@chromium.org>

        CSP 1.1: Experiment with adding line numbers to violation reports.
        https://bugs.webkit.org/show_bug.cgi?id=105374

        Reviewed by Adam Barth.

        Line numbers and URLs were added to the CSP 1.1 spec in
        https://dvcs.w3.org/hg/content-security-policy/rev/e0270baace3d, and
        already exist (and have for quite some time) in Firefox's
        implementation. Based on developer feedback, it seems reasonable to
        experiment a bit with adding them to WebKit's violation reports.
        This patch generates a stack trace when constructing the violation
        report object (iff a violation report object ought to be generated)
        and adds a line number and URL to the object if possible.

        Tests: http/tests/security/contentSecurityPolicy/report-uri-from-inline-javascript.html
               http/tests/security/contentSecurityPolicy/report-uri-from-javascript.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):
            Generate a stack trace when building the violation report: if it
            has relevant detail, add the line number and URL to the report
            object.

2013-01-04  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: working with translate and scale transforms
        https://bugs.webkit.org/show_bug.cgi?id=105985

        Reviewed by Ojan Vafai.

        Allow convertTo[Float|Int]Length functions to process calculated values.

        Tests: css3/calc/transforms-scale.html
               css3/calc/transforms-translate.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::convertToIntLength):
        (WebCore::StyleResolver::convertToFloatLength):

2013-01-04  Elliott Sprehn  <esprehn@chromium.org>

        PseudoElement should never dispatch events
        https://bugs.webkit.org/show_bug.cgi?id=106048

        Reviewed by Ojan Vafai.

        The new DOM based generated content can sometimes dispatch events
        as a result of animations or transitions which is incorrect as it
        exposes the PseudoElement to script. All event dispatch from a
        PseudoElement should be ignored.

        Per discussions with Tab Atkins in the future we might add support
        by making events dispatched from a pseudo element fire with the
        target as the parent element and add a new pseudo property to
        events that has the value "before" or "after".

        Test: fast/css-generated-content/pseudo-element-events.html

        * dom/PseudoElement.h:

2013-01-04  Benjamin Poulain  <benjamin@webkit.org>

        WebKitCSSTransformValue::customCssText() should always allocate once
        https://bugs.webkit.org/show_bug.cgi?id=105445

        Reviewed by Alexis Menard.

        When converting a WebKitCSSTransformValue to a String representation,
        it was typically done with 2 memory allocations due to the string size in StringBuilder.

        This patch changes the code to use the String Concatenate operations in order
        to create the string at once.

        The opening parenthesis is also moved in the prefix name in order to maximize
        the range copied with memcopy.

        * css/WebKitCSSTransformValue.cpp:
        (WebCore::transformValueToCssString): New generic function for boxing values.
        (WebCore::WebKitCSSTransformValue::customCssText):
        (WebCore::WebKitCSSTransformValue::customSerializeResolvingVariables):

2013-01-04  James Robinson  <jamesr@chromium.org>

        [chromium] WebTransformationMatrix shouldn't alias memory for TransformationMatrix
        https://bugs.webkit.org/show_bug.cgi?id=106025

        Reviewed by Adrienne Walker.

        * platform/chromium/support/WebTransformationMatrix.cpp:
        (WebKit::WebTransformationMatrix::WebTransformationMatrix):
        (WebKit::WebTransformationMatrix::reset):
        (WebKit):
        (WebKit::WebTransformationMatrix::operator=):
        (WebKit::WebTransformationMatrix::operator==):
        (WebKit::WebTransformationMatrix::inverse):
        (WebKit::WebTransformationMatrix::to2dTransform):
        (WebKit::WebTransformationMatrix::multiply):
        (WebKit::WebTransformationMatrix::makeIdentity):
        (WebKit::WebTransformationMatrix::translate):
        (WebKit::WebTransformationMatrix::translate3d):
        (WebKit::WebTransformationMatrix::translateRight3d):
        (WebKit::WebTransformationMatrix::scale):
        (WebKit::WebTransformationMatrix::scaleNonUniform):
        (WebKit::WebTransformationMatrix::scale3d):
        (WebKit::WebTransformationMatrix::rotate):
        (WebKit::WebTransformationMatrix::rotate3d):
        (WebKit::WebTransformationMatrix::skewX):
        (WebKit::WebTransformationMatrix::skewY):
        (WebKit::WebTransformationMatrix::applyPerspective):
        (WebKit::WebTransformationMatrix::blend):
        (WebKit::WebTransformationMatrix::hasPerspective):
        (WebKit::WebTransformationMatrix::isInvertible):
        (WebKit::WebTransformationMatrix::isBackFaceVisible):
        (WebKit::WebTransformationMatrix::isIdentity):
        (WebKit::WebTransformationMatrix::isIdentityOrTranslation):
        (WebKit::WebTransformationMatrix::isIntegerTranslation):
        (WebKit::WebTransformationMatrix::m11):
        (WebKit::WebTransformationMatrix::setM11):
        (WebKit::WebTransformationMatrix::m12):
        (WebKit::WebTransformationMatrix::setM12):
        (WebKit::WebTransformationMatrix::m13):
        (WebKit::WebTransformationMatrix::setM13):
        (WebKit::WebTransformationMatrix::m14):
        (WebKit::WebTransformationMatrix::setM14):
        (WebKit::WebTransformationMatrix::m21):
        (WebKit::WebTransformationMatrix::setM21):
        (WebKit::WebTransformationMatrix::m22):
        (WebKit::WebTransformationMatrix::setM22):
        (WebKit::WebTransformationMatrix::m23):
        (WebKit::WebTransformationMatrix::setM23):
        (WebKit::WebTransformationMatrix::m24):
        (WebKit::WebTransformationMatrix::setM24):
        (WebKit::WebTransformationMatrix::m31):
        (WebKit::WebTransformationMatrix::setM31):
        (WebKit::WebTransformationMatrix::m32):
        (WebKit::WebTransformationMatrix::setM32):
        (WebKit::WebTransformationMatrix::m33):
        (WebKit::WebTransformationMatrix::setM33):
        (WebKit::WebTransformationMatrix::m34):
        (WebKit::WebTransformationMatrix::setM34):
        (WebKit::WebTransformationMatrix::m41):
        (WebKit::WebTransformationMatrix::setM41):
        (WebKit::WebTransformationMatrix::m42):
        (WebKit::WebTransformationMatrix::setM42):
        (WebKit::WebTransformationMatrix::m43):
        (WebKit::WebTransformationMatrix::setM43):
        (WebKit::WebTransformationMatrix::m44):
        (WebKit::WebTransformationMatrix::setM44):
        (WebKit::WebTransformationMatrix::a):
        (WebKit::WebTransformationMatrix::setA):
        (WebKit::WebTransformationMatrix::b):
        (WebKit::WebTransformationMatrix::setB):
        (WebKit::WebTransformationMatrix::c):
        (WebKit::WebTransformationMatrix::setC):
        (WebKit::WebTransformationMatrix::d):
        (WebKit::WebTransformationMatrix::setD):
        (WebKit::WebTransformationMatrix::e):
        (WebKit::WebTransformationMatrix::setE):
        (WebKit::WebTransformationMatrix::f):
        (WebKit::WebTransformationMatrix::setF):
        (WebKit::WebTransformationMatrix::toWebCoreTransform):

2013-01-04  Stephen White  <senorblanco@chromium.org>

        CSS url() filters with forward references don't work
        https://bugs.webkit.org/show_bug.cgi?id=90405

        Based on a patch by Keyar Hood.

        Reviewed by Dirk Schulze.

        In order for CSS to reference SVG filters that will occur later in
        the document, or will be added at a future time, we need a way to
        notify the target element (the one the filter style is applied to)
        when the correct SVG filter is added to the DOM.
        There is already code for SVG elements that handles this problem, in
        SVGResourcesCache. This patch allows any element to have a reference to
        an SVG element in SVGResourceCache.

        Tests: css3/filters/effect-reference-after.html
               css3/filters/effect-reference-delete-crash.html
               css3/filters/effect-reference-delete.html
               css3/filters/effect-reference-removed-while-pending-resources.html
               css3/filters/effect-reference-rename.html
               css3/filters/effect-reference-reset-style-delete-crash.html
               svg/filters/filter-cycle.html

        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::removedFrom):
        When an Element is deleted or removed from its container, and it
        has pending resources, remove it from the SVGResourceCache resources
        on deletion or when removed from its container.
        (WebCore::Element::hasPendingResources):
        (WebCore::Element::setHasPendingResources):
        (WebCore::Element::clearHasPendingResources):
        Accessors for ElementRareData's new bit flag.
        * dom/Element.h:
        (WebCore::Element::buildPendingResource):
        Virtual function to override for referenced elements (moved from SVGElement).
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::hasPendingResources):
        (WebCore::ElementRareData::setHasPendingResources):
        (WebCore::ElementRareData::ElementRareData):
        Add a new bit flag to indicate whether the element depends on pending resources or not, and accessors.
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):
        The actual flag bit lives in NodeRareData, so it compacts better with
        other flags.
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):
        Changed to the new function signature for FilterEffectRenderer::build().
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::createCustomFilterEffect):
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        Changed signature to accept a RenderObject rather than a Document, so we know which node to notify when the SVG filter arrives.  If the referenced filter cannot be found, add its id as a pending reference.
        (WebCore::FilterEffectRenderer::build):
        * rendering/FilterEffectRenderer.h:
        Change to signatures of build() and buildReferenceFilter() to pass
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffectRenderer):
        Use the new semantics for FilterEffectRenderer::build().
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        Call clearHasPendingResourceIfPossible on the SVGDocumentExtensions, not
        on the element, since we want to support generic Elements.
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::addResourcesFromRenderObject):
        (WebCore::SVGResourcesCache::clientStyleChanged):
        For non-SVG elements, set a synthetic style change when parent resources
        are invalidated.
        (WebCore::SVGResourcesCache::resourceDestroyed):
        Add support for non-SVG Elements.
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::isElementPendingResource):
        Changed to allow use of Element instead of SVGElement.
        (WebCore::SVGDocumentExtensions::clearHasPendingResourcesIfPossible):
        Moved from SVGElement, and made to work on any Element.  This way,
        we avoid adding this function to Element itself.
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemoval):
        Changed to allow use of Element instead of SVGElement.
        * svg/SVGDocumentExtensions.h:
        SVGElement -> Element.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::removedFrom):
        Don't handle pending resource notifications (Element will do it).
        * svg/SVGElement.h:
        All functions moved to Element, except for clearHasPendingResourcesIfPossible() moved to SVGDocumentExtensions.
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::SVGElementRareData):
        m_hasPendingResources and accessors moved to ElementRareData.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):
        SVGElement -> Element, and call SVGDocumentExtensions for
        clearHasPendingResourcesIfPossible().

2013-01-04  John Mellor  <johnme@chromium.org>

        Clamp font sizes to valid range in RenderStyle::setFontSize
        https://bugs.webkit.org/show_bug.cgi?id=106014

        Reviewed by Emil A Eklund.

        There is a test-case attached to http://crbug.com/167443, but I can't
        think of a good way of automatically testing this. Functionality
        shouldn't change on normal pages.

        * rendering/style/RenderStyleConstants.h:
            Add constant for maximum allowed font size.
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyFontSize::applyValue):
            Use constant from RenderStyleConstants.h instead of hardcoding.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::getComputedSizeFromSpecifiedSize):
            Use constant from RenderStyleConstants.h instead of hardcoding.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setFontSize):
            Clamp non-finite and out of range font sizes.

2013-01-04  Mike West  <mkwst@chromium.org>

        CSP: Blocked 'track' sources should only log once to the console.
        https://bugs.webkit.org/show_bug.cgi?id=106091

        Reviewed by Eric Carlson.

        HTMLTrackElement posts a message to the console when track data is
        blocked by Content Security Policy. Now that we're logging inside the
        ContentSecurityPolicy object itself, there's no need for the
        duplication. This patch drops the extra log message (and, as a
        side-effect, adds a test that ensures that 'track' content is governed
        by the 'media-src' directive).

        Test: http/tests/security/contentSecurityPolicy/media-src-track-block.html

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::canLoadUrl):

2013-01-03  Jer Noble  <jer.noble@apple.com>

        Crash in media/unsupported-rtsp.html.
        https://bugs.webkit.org/show_bug.cgi?id=106038

        Reviewed by Eric Carlson.

        Fixes media/unsupported-rtsp.html on Mac platforms which support AVAssetResourceLoadingRequest.

        Check that the CachedResource passed in the notifyFinished method didn't fail or error before
        passing its (possibly nil) contents to the AVAssetResourceLoadingRequest.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::notifyFinished):
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource):

2013-01-04  Mike West  <mkwst@chromium.org>

        CSP: 'frame-src' should block redirects to invalid sources.
        https://bugs.webkit.org/show_bug.cgi?id=106084

        Reviewed by Adam Barth.

        The 'frame-src' CSP directive whitelists valid iframe targets, but
        currently fails to correctly deal with redirection. As long as the
        initial target is valid, any redirection goes through without
        question. This patch moves the CSP check out of
        SubframeLoader::loadSubframe, and into
        PolicyChecker::checkNavigationPolicy. In the new location, the check
        is well-positioned to check each URL in a redirect chain, as opposed
        to checking only the initial target.

        Test: http/tests/security/contentSecurityPolicy/frame-src-redirect-blocked.html

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):

2013-01-04  Mike West  <mkwst@chromium.org>

        CSP: XHR from an isolated world should bypass a page's policy.
        https://bugs.webkit.org/show_bug.cgi?id=104480

        Reviewed by Adam Barth.

        Connections of various types are governed by the page's Content Security
        Policy 'connect-src' directive. In the special case of connections
        generated from an isolated world, we'd like to bypass these restrictions
        in order to allow things like extensions to enjoy their uniquely high-
        privilege lifestyle. This patch does just that.

        We'll lock them down to their own policy in webkit.org/b/104520, but
        that's a bit far away at the moment. Soon!

        Test: http/tests/security/isolatedWorld/bypass-main-world-csp-for-xhr.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
            Check whether or not code is running in an isolated world that has
            its own Content Security Policy. If so, bypass the main world's CSP
            checks. Isolated worlds gotta be free, man.

2013-01-04  Mike Lawther  <mikelawther@chromium.org>

        CSS3 calc: mixed percent/absolute for border-radius
        https://bugs.webkit.org/show_bug.cgi?id=106046

        Reviewed by Ojan Vafai.

        Add the calculation evaluation to the border radius code.

        Test: css3/calc/border-radius.html

        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyBorderRadius::applyValue):

2013-01-04  John Mellor  <johnme@chromium.org>

        Early out from FontCache::releaseFontData if cached font data not found.
        https://bugs.webkit.org/show_bug.cgi?id=106104

        Reviewed by Abhishek Arya.

        No tests, as no change in behavior.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::releaseFontData):

            Early out in release builds if cached font data not found.

2013-01-04  Adam Klein  <adamk@chromium.org>

        Remove ENABLE_MUTATION_OBSERVERS #define
        https://bugs.webkit.org/show_bug.cgi?id=105459

        Reviewed by Ryosuke Niwa.

        The flag has been on by default for quite awhile now (nearly a year)
        and the feature is a standardized part of DOM4.

        The only place it was disabled was under "unstable" features for the
        gtk port, but the fact that it's shipping in several major WebKit
        browsers as well as Firefox suggests that it's not too unstable.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am: Removed ENABLE_MUTATION_OBSERVERS from the "unstable features" list.
        * GNUmakefile.features.am.in:
        * bindings/js/JSDictionary.cpp:
        (WebCore):
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::JSMainThreadExecState::didLeaveScriptContext):
        * bindings/js/JSMutationCallbackCustom.cpp:
        * bindings/js/JSMutationObserverCustom.cpp:
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8RecursionScope.cpp:
        (WebCore::V8RecursionScope::didLeaveScriptContext):
        * bindings/v8/custom/V8MutationCallbackCustom.cpp:
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ChildListMutationScope.cpp:
        * dom/ChildListMutationScope.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::willRemoveChild):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::appendChild):
        (WebCore::updateTreeAfterInsertion):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (Document):
        * dom/Element.cpp:
        (WebCore::Element::willModifyAttribute):
        * dom/MutationCallback.h:
        * dom/MutationCallback.idl:
        * dom/MutationObserver.cpp:
        * dom/MutationObserver.h:
        * dom/MutationObserver.idl:
        * dom/MutationObserverInterestGroup.cpp:
        * dom/MutationObserverInterestGroup.h:
        * dom/MutationObserverRegistration.cpp:
        * dom/MutationObserverRegistration.h:
        * dom/MutationRecord.cpp:
        * dom/MutationRecord.h:
        * dom/MutationRecord.idl:
        * dom/Node.cpp:
        (WebCore::Node::clearRareData):
        (WebCore::Node::setTextContent):
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Node.h:
        (Node):
        * dom/NodeRareData.cpp:
        (SameSizeAsNodeRareData):
        (WebCore::NodeRareData::reportMemoryUsage):
        * dom/NodeRareData.h:
        (NodeRareData):
        (WebCore::NodeRareData::ensureTransientMutationObserverRegistry):
        * editing/markup.cpp:
        (WebCore::replaceChildrenWithFragment):
        (WebCore::replaceChildrenWithText):
        * page/DOMWindow.idl:

2013-01-04  Xianzhu Wang  <wangxianzhu@chromium.org>

        Change RenderLayerBacking::nameForLayer() to RenderLayer::name()
        https://bugs.webkit.org/show_bug.cgi?id=105648

        Reviewed by Simon Fraser.

        No new tests. For debugging only.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::name):
        (WebCore):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):

2013-01-04  Rick Byers  <rbyers@chromium.org>

        Existence of window.Touch can break websites mobile device detection
        https://bugs.webkit.org/show_bug.cgi?id=106071

        Reviewed by Ojan Vafai.

        Revert http://trac.webkit.org/changeset/135562 for now while I work
        on a slightly safer version.

        * page/DOMWindow.idl:

2013-01-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Clicking on a word that is selected in an editable area deletes it
        https://bugs.webkit.org/show_bug.cgi?id=106045

        Reviewed by Carlos Garcia Campos.

        Be more selective about when to confirm WebKit compositions. If there is no current
        preedit, reseting the GTK+ context shouldn't also do an empty confirmation in WebKit,
        as this will trash the current selection. The second part of this patch also makes the
        m_composingTextCurrently member more accurately reflect whether or not we are composing
        text.

        * platform/gtk/GtkInputMethodFilter.cpp:
        (WebCore::GtkInputMethodFilter::notifyMouseButtonPress): Only confirm the current WebKit composition
        if we have a preedit.
        (WebCore::GtkInputMethodFilter::notifyFocusedOut): Ditto.
        (WebCore::GtkInputMethodFilter::sendCompositionAndPreeditWithFakeKeyEvents): Don't clear the m_composingTextCurrently
        member if we are not sending a confirmed composition.

2013-01-04  Max Feil  <mfeil@rim.com>

        [BlackBerry] Handle re-entrant destruction of MediaPlayerPrivate while a dialog is up
        https://bugs.webkit.org/show_bug.cgi?id=105906

        Reviewed by George Staikos.

        Now that dialogs are not truly modal anymore, we need to
        handle the case where MediaPlayerPrivate gets destroyed by
        re-entrant calls while a dialog is up. We do this by deferring
        the destruction of MMRPlayer until the user dismisses the dialog.

        No new tests because user dialog input is not yet part of the
        layouttest framework.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::waitMetadataTimerFired):
        (WebCore::MediaPlayerPrivate::onShowErrorDialog):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (MediaPlayerPrivate):

2013-01-04  Anthony Scian  <ascian@rim.com>

        [Blackberry] Static code analysis warning fixes
        https://bugs.webkit.org/show_bug.cgi?id=105679

        Reviewed by Rob Buis.

        klocwork 1855: fixed by caching page, check against NULL and use cached value

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::determineFullScreenMultiplier):

2013-01-04  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] The ExclusionPolygon classes should allow more than one type of "Edge" class
        https://bugs.webkit.org/show_bug.cgi?id=106026

        Reviewed by Dirk Schulze.

        Refactored the ExclusionPolygonEdge class to pave the way for a similar
        OffsetEdge class. The new VertexPair abstract base class provides the common
        state and operations. ExclusionPolygonEdge now extends VertexPair and defines
        ExclusionPolygon as a friend, since the ExclusionPolygon constructor initializes
        its private state.

        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::ExclusionPolygon): Use ExclusionPolygonEdge accessors instead of direct field access.
        (WebCore::getVertexIntersectionVertices): Ditto.
        * rendering/ExclusionPolygon.h:
        (VertexPair): New abstract base class.
        (WebCore::VertexPair::~VertexPair):
        (WebCore::VertexPair::minX): This method was defined in ExclusionPolygonEdge.
        (WebCore::VertexPair::minY): Ditto.
        (WebCore::VertexPair::maxX): Ditto.
        (WebCore::VertexPair::maxY): Ditto.
        (ExclusionPolygonEdge): Now extends VertexPair.
        (WebCore::ExclusionPolygonEdge::previousEdge): Refer to m_ private class fields, instead of public struct fields.
        (WebCore::ExclusionPolygonEdge::nextEdge): Ditto.
        (WebCore::ExclusionPolygonEdge::polygon): Ditto.
        (WebCore::ExclusionPolygonEdge::vertexIndex1): Ditto.
        (WebCore::ExclusionPolygonEdge::vertexIndex2): Ditto.
        (WebCore::ExclusionPolygonEdge::edgeIndex): Ditto.

2013-01-04  Steve Block  <steveblock@chromium.org>

        Add 'float FloatPoint::slopeAngleRadians()'
        https://bugs.webkit.org/show_bug.cgi?id=105997

        Reviewed by Stephen White.

        Refactoring only, no functional change.

        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::slopeAngleRadians):
        (WebCore):
        * platform/graphics/FloatPoint.h:
        Add 'float FloatPoint::slopeAngleRadians() const'
        * platform/graphics/PathTraversalState.cpp:
        (WebCore::PathTraversalState::processSegment):
        * rendering/svg/SVGMarkerData.h:
        (WebCore::SVGMarkerData::currentAngle):
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::decomposeArcToCubic):

2013-01-04  Zan Dobersek  <zandobersek@gmail.com>

        REGRESSION (r138184): transitions/transitions-parsing.html is failing on GTK
        https://bugs.webkit.org/show_bug.cgi?id=105522

        Reviewed by Xan Lopez.

        Remove the feature define overriding for the unprefixed CSS transition property names
        define as it is not required.

        No new tests - no new functionality.

        * GNUmakefile.am:

2013-01-04  Zan Dobersek  <zandobersek@gmail.com>

        [GObject bindings] Wrap event target interface code in feature define guards if necessary
        https://bugs.webkit.org/show_bug.cgi?id=105743

        Reviewed by Xan Lopez.

        Wrap the event target interface implementation code in feature define guards if the interface
        is guarded by a conditional. A warning is reported if these methods get called with the specific
        feature being disabled.

        This was spotted when building with the video track feature disabled was causing build failures.

        No new tests - no new functionality. The bindings tests don't test event targets under conditionals.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateEventTargetIface):

2012-12-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Port WebAudio backend to 1.0 APIs
        https://bugs.webkit.org/show_bug.cgi?id=105293

        Reviewed by Martin Robinson.

        Port the AudioFileReader and AudioDestination to GStreamer 1.0
        APIs. It would be preferable to rely on at least GStreamer 1.0.4
        for this to work properly as that release contains two bug fixes
        for the deinterleave and interleave elements.

        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::reportMemoryUsage): Don't report GstFFTF32
        structures anymore because they're opaque in GStreamer 1.0.
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore):
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        The wavparse element in 1.0 has no sometimes-pads anymore.
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (AudioFileReader): The decodebin2 element has been renamed to
        decodebin in GStreamer 1.0.
        (WebCore::getGStreamerAudioCaps): Audio caps description changed a
        lot in GStreamer 1.0, the function now handles both APIs.
        (WebCore::copyGstreamerBuffersToAudioChannel): Adapted to
        GstBufferList and GstBuffer API changes.
        (WebCore::onAppsinkPullRequiredCallback): Pull a sample or buffer,
        depending on which API we use.
        (WebCore::AudioFileReader::~AudioFileReader): Protect
        GstBufferListIterators in 0.10-only code path.
        (WebCore):
        (WebCore::AudioFileReader::handleSample): Pull an audio sample
        from appsink and insert it in the appropriate buffer list.
        (WebCore::AudioFileReader::handleNewDeinterleavePad): Handle
        appsink API changes from GStreamer 0.10 to 1.0.
        (WebCore::AudioFileReader::decodeAudioForBusCreation): Create the
        correct decodebin element.
        (WebCore::AudioFileReader::createBus): Protect GstBufferListIterators
        in 0.10-only code path.
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (_WebKitWebAudioSourcePrivate): GstTask in GStreamer 1.0 uses a
        GRecMutex instead of a (deprecated) GStaticRecMutex.
        (getGStreamerMonoAudioCaps): Handle caps description changes
        between GStreamer 0.10 and 1.0.
        (webKitWebAudioGStreamerChannelPosition): POSITION_LFE in
        GStreamer 1.0 is now POSITION_LFE1. Also map ChannelCenter to its
        GStreamer equivalent.
        (webkit_web_audio_src_class_init): Use generic setGstElementClassMetadata.
        (webkit_web_audio_src_init): Handle GRecMutex initialisation.
        (webKitWebAudioSrcConstructed): Set channel position on
        capsfilter. This is done for GStreamer 1.0 code path only because
        in 0.10 the caps have no way to store this information.
        (webKitWebAudioSrcFinalize): Clear GRecMutex.
        (webKitWebAudioSrcLoop): Handle GstBuffer API changes and add an
        error check if buffers can't be chained to queue's source pad.
        (webKitWebAudioSrcChangeState): As advised in the GStreamer docs,
        fixup the state changes for this live source element: NO_PREROLL
        in READY->PAUSED and start/stop the GstTask when going/coming
        to/from PLAYING.

2013-01-04  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions]Content overflowing last region displayed wrong
        https://bugs.webkit.org/show_bug.cgi?id=105893

        Reviewed by David Hyatt.

        For the last region in the region chain and flipped writing modes (horizontal-bt, vertical-rl),
        the clipping rect should take overflow into account in the writing mode direction, which is
        different in these cases than the direction for non-flipped writing modes.

        Tests: fast/regions/overflow-last-region-horiz-bt.html
               fast/regions/overflow-last-region-vert-lr.html
               fast/regions/overflow-last-region-vert-rl.html
               fast/regions/overflow-last-region.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::computeRegionClippingRect): Helper function used to compute region clipping rect
        for paint and hitTest.
        (WebCore):
        (WebCore::RenderFlowThread::paintFlowThreadPortionInRegion):
        (WebCore::RenderFlowThread::hitTestFlowThreadPortionInRegion):
        * rendering/RenderFlowThread.h:

2013-01-04  Dima Gorbik  <dgorbik@apple.com>

        Implement :future pseudo class for the WebVTT ::cue pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=105473

        Reviewed by Antti Koivisto.

        This patch changes the approach of showing past/future node objects. 
        Before upper-level containers were used to put past and future nodes inside. Styles were applied
        to containers. Now styles could be applied directly to nodes by using ::cue(:future).
        That allows to style future/past WebVTT nodes even if they are nested.

        Existing test was modified to cover new cases.

        * css/CSSSelector.cpp: added :future pseudo class support.
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp: ditto.
        (WebCore::SelectorChecker::checkOneSelector):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement): define style sharing rules for WebVTT objects.
        * css/mediaControls.css:
        (video::-webkit-media-text-track-all-nodes):
        (video::cue(:future)): added standard user-agent styles for the future nodes.
        * dom/Element.cpp: setter functions don't have an argument now because WebVTT type enum was introduced and the right type is set
        when the setter is being called.
        (WebCore::Element::setIsWebVTTNode):
        (WebCore):
        (WebCore::Element::isWebVTTFutureNode):
        (WebCore::Element::setIsWebVTTFutureNode):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        * dom/NodeRareData.cpp:
        (SameSizeAsNodeRareData): added a dummy enum value. Enum is integer type and is aligned in Windows when placed in the bitfield,
        so it takes more space.
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::isWebVTTNode):
        (WebCore::NodeRareData::setIsWebVTTNode):
        (WebCore::NodeRareData::isWebVTTFutureNode):
        (WebCore::NodeRareData::setIsWebVTTFutureNode):
        (NodeRareData):
        * html/shadow/MediaControlElements.cpp:
        (WebCore):
        * html/track/TextTrack.h: add a WebVTT node object type enum.
        (TextTrack):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::allNodesShadowPseudoId):
        (WebCore::TextTrackCue::TextTrackCue):
        (WebCore::TextTrackCue::getCueAsHTML):
        (WebCore):
        (WebCore::TextTrackCue::setNodeObjectFlags): determine if the node is future or past and mark as WebVTT node.
        This combines the functionality related to marking nodes implemented before in updateDisplayTree and
        markNodesAsWebVTTNodes.
        (WebCore::TextTrackCue::updateDisplayTree):
        (WebCore::TextTrackCue::getDisplayTree):
        * html/track/TextTrackCue.h:
        (TextTrackCue):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::constructTreeFromToken): no need to mark nodes as WebVTT nodes when parsing. This is done at the
        rendering stage later.
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::captionsStyleSheetOverride): the container name has changed.

2013-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION (r138222?): Assertion failure on appcache/main-resource-redirect.html
        https://bugs.webkit.org/show_bug.cgi?id=105591

        Reviewed by Brady Eidson.

        Fixes crash in test http/tests/appcache/main-resource-redirect.html.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest): In case of loading
        substitute data from application cache host due to a redirect,
        make sure the substitute data identifier is initialized.

2013-01-03  Tony Chang  <tony@chromium.org>

        incorrect flexbox relayout with overflow, padding and absolute positioning
        https://bugs.webkit.org/show_bug.cgi?id=106022

        Reviewed by Ojan Vafai.

        The problem was we were entering simplified layout, which doesn't apply the stretch
        behavior for flex children. That should be fine if we had kept the override size from
        the previous layout. So clear the override size during layout rather than after layout.

        Not clearing the override size re-triggers bug 98611. Fix this by always forcing a
        layout of an image if it has an override size set. The presence of an override size means
        we did some special layout that may not be covered by re-computing the logical width and
        height.

        Test: css3/flexbox/stretch-simplified-layout.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Don't clear the override size after layout.
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes): Clear the override size right before layout.
        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox): Remove clearChildOverrideSizes() since it's not called anymore.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged): If an override size is present, force a relayout.
        Also cleaned up the code a bit to avoid computing the width and height unless we need to.

2013-01-03  Adam Klein  <adamk@chromium.org>

        Unreviewed rebaseline of binding tests after r138754

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackHeader): Remove unnecessary whitespace
        * bindings/scripts/test/JS/JSTestCallback.h:
        (WebCore::JSTestCallback::scriptExecutionContext):
        (JSTestCallback):
        * bindings/scripts/test/V8/V8TestCallback.h:
        (WebCore::V8TestCallback::scriptExecutionContext):
        (V8TestCallback):

2013-01-03  Antoine Quint  <graouts@apple.com>

        onload callback for <track> element attached to <video> does not fire
        https://bugs.webkit.org/show_bug.cgi?id=103258

        Reviewed by Eric Carlson.

        We now correctly implement the track processing model per the latest spec at
        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#start-the-track-processing-model.
        
        For a <track> to load, three conditions must be met:
        
        1. it must have a non-empty src
        2. it must have a mode other than "disabled" (the default)
        3. it must have a parent media element
        
        We used to only check if we were able to load upon setting the track's src,
        whereas a change of any of those conditions should have done this, which this
        patch now correctly implements.
        
        We also correctly implement the load model asynchronously after step 4, per
        the spec, hence the split of the code previously entirely contained in
        HTMLTrackElement::scheduleLoad() in another method fired on a timer.

        Test: media/track/track-element-load-event.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackModeChanged):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::insertedInto):
        (WebCore::HTMLTrackElement::parseAttribute):
        (WebCore::HTMLTrackElement::scheduleLoad):
        (WebCore):
        (WebCore::HTMLTrackElement::loadTimerFired):
        (WebCore::HTMLTrackElement::textTrackModeChanged):
        * html/HTMLTrackElement.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::removeAllCues):
        (WebCore):
        * html/track/TextTrack.h:
        (TextTrack):

2013-01-03  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=105475
        Nested fixed position elements incorrectly repositioned on scrolling

        Reviewed by Simon Fraser.

        The fix here is to ensure that the ScrollingTree reflects the same hierarchy as 
        the GraphicsLayer tree. And from there, we can correctly calculate the offset for 
        nested objects by keeping track of a cumulative delta that parents have been moved 
        by.

        We already had to fix this same bug in ScrollingStateNode::removeChild(). The 
        index can be notFound when you are removing a grandchild.
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::removeChild):

        parentScrollPositionDidChange() now takes a second parameter that represents the 
        delta that parent graphicsLayers have been moved by.
        * page/scrolling/ScrollingTreeNode.h:
        (ScrollingTreeNode):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        (ScrollingTreeFixedNode):

        attachToStateTree() now handles re-parenting.
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::attachToStateTree):

        Properly adjust by and compute the new parameter cumulativeDelta. Adjusting by 
        this will prevent fixed children of fixed objects from moving when they are not 
        supposed to.
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::parentScrollPositionDidChange):

        Give parentScrollPositionDidChange() an initial delta of (0,0).
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

        Properly adjust by and compute the new parameter cumulativeDelta. This math is 
        actually not quite right for sticky yet as the FIXME indicates. 
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        (ScrollingTreeStickyNode):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::parentScrollPositionDidChange):

        Re-named attachToScrollingCoordinator() to attachToScrollingCoordinatorWithParent 
        to make it clear that the node may already be attached, but it may need to be re-
        parented.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::attachToScrollingCoordinatorWithParent):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

        Always call attachToScrollingCoordinatorWithParent() in case the fixed node has 
        been re-parented.
        (WebCore::RenderLayerCompositor::registerOrUpdateViewportConstrainedLayer):

2013-01-03  Simon Fraser  <simon.fraser@apple.com>

        Body background with background-attachment:fixed stays in place during rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=67894

        Reviewed by Beth Dakin.

        Use FrameView::scrollOffsetForFixedPosition() to compute the location of the rect
        used to position fixed backgrounds, since it takes rubber-banding into account.
        
        No test because rubber-banding isn't testtable in layout tests.

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

2013-01-03  Adam Klein  <adamk@chromium.org>

        [HTMLTemplateElement] When adopting a template element, also adopt its content into the appropriate document
        https://bugs.webkit.org/show_bug.cgi?id=106039

        Reviewed by Eric Seidel.

        Implements the approach discussed in the spec bug:
        https://www.w3.org/Bugs/Public/show_bug.cgi?id=20129

        Test: fast/dom/HTMLTemplateElement/ownerDocument-adoptNode.html

        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::didMoveToNewDocument):
        * html/HTMLTemplateElement.h:
        (HTMLTemplateElement):

2013-01-03  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions] Don't apply region flow to fullscreen video playing
        https://bugs.webkit.org/show_bug.cgi?id=102388

        Reviewed by David Hyatt.

        In case of full screen video playing we want to watch the video full screen without applying the region flow.

        Test: fast/regions/full-screen-video-from-region.html

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded): Don't move full screen video playing to FlowThread.

2013-01-03  Rafael Weinstein  <rafaelw@chromium.org>

        [Mutation Observers] prevent delivery while recipient context is suspended
        https://bugs.webkit.org/show_bug.cgi?id=105810

        Reviewed by Adam Barth.

        Test: inspector/debugger/mutation-observer-suspend-while-paused.html

        * dom/MutationObserver.cpp:
        (WebCore::suspendedMutationObservers):
        (WebCore):
        (WebCore::MutationObserver::canDeliver):
        (WebCore::MutationObserver::deliver):
        (WebCore::MutationObserver::deliverAllMutations):
        * dom/MutationObserver.h:

2013-01-03  Dan Bernstein  <mitz@apple.com>

        No way to obtain a DOMNode given a JS wrapper for a Node
        https://bugs.webkit.org/show_bug.cgi?id=106033

        Reviewed by Sam Weinig.

        Test: TestWebKitAPI/Tests/mac/DOMNodeFromJSObject.mm.

        * bindings/objc/DOM.mm:
        (+[DOMNode _nodeFromJSWrapper:]): Added. If the given JSObjectRef is a wrapper for a Node,
        returns the Objective-C wrapper for that node. Note that Objective-C wrappers are always
        for the main world, regardless of which world the given JS wrapper comes from.
        * bindings/objc/DOMPrivate.h: Added declaration of the above.

2013-01-03  Uday Kiran  <udaykiran@motorola.com>

        webkit fails IETC column-width-negative-001.htm
        https://bugs.webkit.org/show_bug.cgi?id=84778

        Reviewed by Tony Chang.

        CSS3 multicolumn 'column-width' property value must be greater than zero.
        http://dev.w3.org/csswg/css3-multicol/#column-width

        Test: fast/multicol/column-width-zero.html
        Negative value test covered by ietestcenter/css3/multicolumn/column-width-negative-001.htm

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Check for value greater than zero while parsing.

2013-01-03  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add a missing state to RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=106017

        Reviewed by Adam Barth.

        Adding the missing ReadyStateHaveRemoteOffer which will show up in the spec soon.

        Not testable, just another state.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::readyState):
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:

2013-01-03  Emil A Eklund  <eae@chromium.org>

        Fix overflow in LayoutUnit::ceil and floor for SATURATED_LAYOUT_ARITHMETIC
        https://bugs.webkit.org/show_bug.cgi?id=105961

        Reviewed by Levi Weintraub.
        
        The LayoutUnit::ceil and floor methods overflows if given the
        intMaxForLayoutUnit and intMinForLayoutUnit values respectively.
        Check for the max/min value to avoid this.

        Test: TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp

        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::ceil):
        (WebCore::LayoutUnit::floor):
        Check for the max/min value and return early to avoid overflow.
        Use the UNLIKELY macro to avoid the cost of branch misprediction
        for the common case.

2013-01-03  Elliott Sprehn  <esprehn@gmail.com>

        [Refactoring] Replace Node's Document pointer with a TreeScope pointer
        https://bugs.webkit.org/show_bug.cgi?id=59816

        Reviewed by Ryosuke Niwa.

        Instead of giving every node in a shadow a rare data, which can be quite
        large, we replace the Document pointer in Node with a TreeScope pointer
        and we give TreeScope a pointer to it's document scope.

        This introduces no branches in document() because in the common
        case document() becomes equivalent to m_treeScope->m_documentScope where
        the documentScope is actually m_treeScope so this shouldn't introduce a
        perf regression.

        Note also that TreeScope can never be null after r136328, and the document
        pointer is only null for DocumentType nodes so we can use a special
        no-document TreeScope for this case that always returns null from
        documentScope().

        My original patch in r137524 for this did not correctly handle the case 
        where the Document is being destroyed and we would then call guardDeref on
        ourself in the middle of the Document destructor causing asserts. To fix
        this we need to go back to the original model where Document passes
        null to it's super constructor for the Document pointer and assigns
        it's tree scope later, and we also need to clear the tree scope pointer
        in Document's destructor.

        No new tests, no change in behavior.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::suggestedMIMEType):
        * dom/Document.h:
        (WebCore::Node::isDocumentNode):
        (WebCore::Node::Node):
        * dom/Element.cpp:
        (WebCore::Element::createRareData):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::createRareData):
        (WebCore::Node::attach):
        (WebCore::Node::reportMemoryUsage):
        * dom/Node.h:
        (WebCore::NodeRareDataBase::NodeRareDataBase):
        (NodeRareDataBase):
        (WebCore::Node::treeScope):
        (WebCore::Node::inDocument):
        (WebCore::Node::documentInternal):
        (WebCore::Node::setTreeScope):
        (Node):
        * dom/NodeRareData.cpp:
        (SameSizeAsNodeRareData):
        (WebCore::NodeRareData::reportMemoryUsage):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/TreeScope.cpp:
        (SameSizeAsTreeScope):
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::clearDocumentScope):
            Needed to clear the document scope during Document destruction
            so the Node destructor does not guardDeref the document that is
            already being destroyed.
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        (TreeScope):
        (WebCore::TreeScope::documentScope):
        (WebCore::TreeScope::noDocumentInstance):
            Special shared tree scope that has a document scope that is always
            null. This is needed for DocType nodes, and also for Documents
            during construction.
        (WebCore::TreeScope::setDocumentScope):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):

2013-01-03  Adam Klein  <adamk@chromium.org>

        Unreviewed build fix.

        * dom/ContainerNode.cpp:
        (WebCore::isInTemplateContent): s/UNUSED/UNUSED_PARAM/

2013-01-03  Adam Klein  <adamk@chromium.org>

        [HTMLTemplateElement] Disallow cycles within template content
        https://bugs.webkit.org/show_bug.cgi?id=105066

        Reviewed by Ojan Vafai.

        Cycles in <template> content aren't quite as bad as cycles in normal
        DOM trees, but they can easily cause crashes, e.g. in cloneNode and
        innerHTML.

        Shadow DOM has an analagous issue, and this patch tackles that problem
        at the same time by creating a new method, Node::containsIncludingHostElements.

        In order to disallow cycles, the HTMLTemplateElement.content
        DocumentFragment needs a pointer to its host. The approach here
        creates a new subclass with a host pointer and a new virtual method
        to DocumentFragment to identify the subclass.

        To avoid unnecessary virtual function calls, also changed how
        Document::templateContentsOwnerDocument works to allow fast inlined
        access and avoid lazy creation when not needed.

        Tests: fast/dom/HTMLTemplateElement/cycles-in-shadow.html
               fast/dom/HTMLTemplateElement/cycles.html
               fast/dom/shadow/shadow-hierarchy-exception.html

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::isInTemplateContent):
        (WebCore::containsConsideringHostElements):
        (WebCore::checkAcceptChild):
        * dom/Document.cpp:
        (WebCore::Document::ensureTemplateContentsOwnerDocument): Renamed to make clear that it lazily creates the Document. Updated all existing callers to call this method.
        * dom/Document.h:
        (Document):
        (WebCore::Document::templateContentsOwnerDocument): Fast, inlined accessor for use in checkAcceptChild().
        * dom/DocumentFragment.h:
        (WebCore::DocumentFragment::isTemplateContent):
        * dom/Node.cpp:
        (WebCore::Node::containsIncludingShadowDOM): made const, simplified
        (WebCore::Node::containsIncludingHostElements): Specialized version of Node::contains that knows how to jump over template content boundaries.
        * dom/Node.h:
        (Node):
        * dom/TemplateContentDocumentFragment.h: Added.
        (TemplateContentDocumentFragment): Subclass of DocumentFragment which stores its host template element.
        (WebCore::TemplateContentDocumentFragment::create):
        (WebCore::TemplateContentDocumentFragment::host):
        (WebCore::TemplateContentDocumentFragment::TemplateContentDocumentFragment):
        * editing/markup.cpp:
        (WebCore::createFragmentForInnerOuterHTML):
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::content): Construct the new subclass.

2013-01-02  Jon Lee  <jonlee@apple.com>

        Revert auto-start plugins to snapshotted plugins after a period of inactivity
        https://bugs.webkit.org/show_bug.cgi?id=105973
        <rdar://problem/12947865>

        Reviewed by Brady Eidson.

        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::plugInOriginHash): Expose publicly for WebKit2.
        Reorganize the protected members of the class.
        * html/HTMLPlugInImageElement.h: Move the member to HTMLPlugInElement.

2013-01-03  Alexis Menard  <alexis@webkit.org>

        Querying transition-timing-function value on the computed style does not return keywords when it should.
        https://bugs.webkit.org/show_bug.cgi?id=105442

        Reviewed by Simon Fraser.

        http://www.w3.org/TR/css3-transitions/#transition-timing-function-property
        contains a set of predefined timing functions which under the hood are
        implemented using cubic-bezier but it's an implementation detail that
        should not be exposed. It seems to be more clear to return a CSS
        keyword rather than the cubic-bezier form when querying the value of
        the property on the computed style. In fact the spec even say that for
        example the initial value is "ease" and not cubic-bezier(0.25, 0.1,
        0.25, 1.0). We could also imagine that in the future these predefined
        values could contain other values not represented by a cubic-bezier
        form. This behavior also align with the "linear" keyword which return
        "linear" rather than cubic-bezier(0.0, 0.0, 1.0, 1.0).

        Test: transitions/transitions-parsing.html has been updated to cover
        the new behavior as well as making sure that an explicitly set value of
        cubic-bezier(0.25, 0.1, 0.25, 1.0) does not return "ease" but the
        cubic-bezier() form.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createAnimationValue):
        (WebCore):
        (WebCore::getTimingFunctionValue):
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationTimingFunction):
        * platform/animation/TimingFunction.h:
        (WebCore::CubicBezierTimingFunction::create):
        (CubicBezierTimingFunction):
        (WebCore::CubicBezierTimingFunction::operator==):
        (WebCore::CubicBezierTimingFunction::timingFunctionPreset): Store the
        preset value of the timing function if it is one when creating it 
        so we can use it later from the computed style.
        (WebCore::CubicBezierTimingFunction::CubicBezierTimingFunction):

2013-01-03  Tony Chang  <tony@chromium.org>

        Generate internal.settings from Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=104740

        Reviewed by Adam Barth.

        If the setting is declared in Settings.in and is a basic type, generate a
        setter function at internals.settings.

        InternalSettingsGenerated.idl is created by make_settings.pl. InternalSettings.idl
        inherits from InternalSettingsGenerated.idl so we can override generated functions if
        needed or add additional custom setters.

        This patch removes 2 password echo methods from InternalSettings.idl since they are
        auto generated. There are other methods we could remove, but I'll do that in a followup.

        No new tests, existing tests should pass. Specifically, editing/input/password* tests should pass.

        * CMakeLists.txt: Add generated cpp file to the testing lib.
        * DerivedSources.make: Add generated idl file and specify all the outputs of make_settings.pl
        * DerivedSources.pri: Generate idl file before generating bindings and include generated idl
        for bindings generation.
        * GNUmakefile.am: Specify all the generated files of make_settings.pl. Add generated idl to
        list of files to be processed and resulting output to be compiled.
        * UseJSC.cmake: Add generated idl file to list of idl files to process.
        * UseV8.cmake: Same as UseJSC.cmake.
        * WebCore.gyp/WebCore.gyp: Run make_settings.pl earlier so we can run the output through the
        bindings generator.
        * WebCore.gypi: Add new files.
        * WebCore.vcproj/WebCoreTestSupport.vcproj: Add new files.
        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * bindings/scripts/CodeGenerator.pm:
        (IDLFileForInterface): Add current directory to the include path so DerivedSources.make can
        find the generated idl file.
        * page/make_settings.pl:
        (generateCode): Generate InternalSettingsGenerated.{idl,h,cpp}.
        (generateSettingsMacrosHeader): Rename since we're generating 2 headers now.
        (setterFunctionName): Helper function for naming a setter.
        (printGetterAndSetter): Use setterFunctionName.
        (enumerateParsedItems): Helper function that visits each parsed item.
        (generateInternalSettingsIdlFile): Generate idl file.
        (generateInternalSettingsHeaderFile): Generate header file.
        (generateInternalSettingsCppFile): Generate C++ file.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Remove password echo members.
        (WebCore::InternalSettings::Backup::restoreTo): Remove password echo members.
        (InternalSettingsWrapper): We can't use RefCountedSupplemental because we're we're already
        RefCounted. Create a wrapper class to wrap the RefCounted InternalSettings for Supplement<>::provideTo,
        which uses an OwnPtr.
        (WebCore::InternalSettingsWrapper::InternalSettingsWrapper): Wraps an InternalSettings that the Page can own.
        (WebCore::InternalSettingsWrapper::~InternalSettingsWrapper): Clear's m_page when the Page goes away.
        (WebCore::InternalSettingsWrapper::internalSettings): Unwrap InternalSettings.
        (WebCore::InternalSettings::from): Update to use InternalSettingsWrapper.
        (WebCore::InternalSettings::InternalSettings): Call base class constructor.
        (WebCore::InternalSettings::resetToConsistentState): Renamed from reset() and pass through to base class.
        Also remove unnecessary pageScaleFactor reset (done in Internals::resetToConsistentState).
        * testing/InternalSettings.h:
        (Backup): Remove password echo members.
        (WebCore::InternalSettings::create): Create an instance instead of using new.
        (WebCore::InternalSettings::hostDestroyed): Clear the page. This is similar to the code that
        RefCountedSupplemental has.
        * testing/InternalSettings.idl: Extends InternalSettingsGenerated.
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject): Rename to resetToConsistentState to be like other code.
        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject): Rename to resetToConsistentState to be like other code.
        Remove an unused header.

2013-01-03  Rik Cabanier  <cabanier@adobe.com>

        Canvas blending tests fail on Mac WK2
        https://bugs.webkit.org/show_bug.cgi?id=105943

        Reviewed by Simon Fraser.

        Tests that now pass: 
            LayoutTests/fast/canvas/canvas-blend-solid.html 
            LayoutTests/fast/canvas/canvas-blend-image.html

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        (Backup):

2013-01-03   Arko Saha  <arko@motorola.com>

        Microdata: Fix build failure after r137003
        https://bugs.webkit.org/show_bug.cgi?id=106023

        Reviewed by Ryosuke Niwa.

        Set HTMLCollection::namedPropertyGetter as named property getter for
        HTMLPropertiesCollection in GenerateImplementationNamedPropertyGetter.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementationNamedPropertyGetter):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::V8HTMLCollection::namedPropertyGetter):

2013-01-03  Adam Klein  <adamk@chromium.org>

        Clear failed image loads when an <img> is adopted into a different document
        https://bugs.webkit.org/show_bug.cgi?id=104409

        Reviewed by Nate Chapin.

        This avoids an assertion failure setImageWithoutConsideringPendingLoadEvent().

        Test: loader/image-loader-adoptNode-assert.html

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): Use new helper.
        (WebCore::ImageLoader::updateFromElementIgnoringPreviousError): ditto
        (WebCore::ImageLoader::elementDidMoveToNewDocument): ditto
        (WebCore::ImageLoader::clearFailedLoadURL): Added a helper method to self-document the code.
        (WebCore):
        * loader/ImageLoader.h:
        (ImageLoader):

2013-01-03  Vincent Scheib  <scheib@chromium.org>

        Sandbox-blocked pointer lock should log to the console.
        https://bugs.webkit.org/show_bug.cgi?id=105794

        Reviewed by Adrienne Walker.

        When pointer lock is requested and is denied due to sandbox restrictions
        a helpful message to web developers is sent to the developer console.

        Existing test expectations updated.

        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):

2013-01-03  Tom Sepez  <tsepez@chromium.org>

        PingLoader.h missing virtual and OVERRIDE keywords on its inherited methods.
        https://bugs.webkit.org/show_bug.cgi?id=105975

        Reviewed by Nate Chapin.

        Change adds compile-time checks only, so no new tests.

        * loader/PingLoader.h:
        (PingLoader):
        (WebCore::PingLoader::timeout):

2013-01-02  Levi Weintraub  <leviw@chromium.org>

        Fix incorrect assumption about in-flow descendants of inlines in touch event rect tracking
        https://bugs.webkit.org/show_bug.cgi?id=105970

        Reviewed by Simon Fraser.

        Correcting the touch event target rect accumulation code to no longer incorrectly assume that
        non-block renderers held only normal-flow children. The updated code will always walk the
        complete renderer sub-tree, but only do the work of calculating the absolute rect when the
        child won't necessarily fall inside its parent (floating, positioned, or transformed).

        Tests: platform/chromium/fast/events/touch/compositor-touch-hit-rects.html updated to catch bug.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::accumulateRendererTouchEventTargetRects): Walk all renderer sub-trees. Also keeping
        track of the last added parent container rect to avoid adding redundant rectangles.
        (WebCore::accumulateDocumentEventTargetRects): Avoiding adding empty rects.

2013-01-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Simplify IDBTransactionBackendImpl::scheduleTask usage
        https://bugs.webkit.org/show_bug.cgi?id=103536

        Reviewed by Tony Chang.

        Move responsibility for firing abort errors from requests that arrive on the
        back-end after an asynchronous transaction abort out of WebCore, since the
        front-end takes care of this as far as script is concerned.

        No new tests -  no behavior changes.

        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::advance):
        (WebCore::IDBCursorBackendImpl::prefetchContinue):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        (WebCore::IDBIndexBackendImpl::count):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::count):

2013-01-03  Tiancheng Jiang  <tijiang@rim.com>

        Update BB10 media render theme.
        https://bugs.webkit.org/show_bug.cgi?id=105728

        Reviewed by Yong Li.

        Internally Reviewed by John Griggs.

        Update GL friendly render method for audio volume.
        Change the background color for embedded media player to semi-transparent.
        Change remaining time font color to grey to match full screen video.
        Change media slider thumb color to blue when pressed.

        * css/mediaControlsBlackBerry.css:
        (audio):
        (audio::-webkit-media-controls-embedded-panel, video::-webkit-media-controls-embedded-panel):
        (video::-webkit-media-controls-time-display-container, audio::-webkit-media-controls-time-display-container):
        (video::-webkit-media-controls-timeline-container, audio::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (video::-webkit-media-controls-time-remaining-display, audio::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-volume-slider-container):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintMediaSliderThumb):
        (WebCore::RenderThemeBlackBerry::paintMediaVolumeSliderTrack):

2013-01-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138640.
        http://trac.webkit.org/changeset/138640
        https://bugs.webkit.org/show_bug.cgi?id=106019

        Causing crashes in multiply() (Requested by danakj on
        #webkit).

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore):
        (WebCore::TransformationMatrix::multiply):
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix):

2013-01-03  Mike West  <mkwst@chromium.org>

        The 'body' of seamless IFrames should default to 'margin: 0'
        https://bugs.webkit.org/show_bug.cgi?id=90834

        Reviewed by Antti Koivisto.

        Documents displayed in seamless iframes should override the 'body'
        element's normal 8px default margins with 0px, in order to ensure that
        contents are displayed flush with the boundries of the seamless box.[1]

        This patch does so by adding a new pseudoclass to allow the user agent
        stylesheet to specify a different margin for seamless documents.

        [1]: http://lists.w3.org/Archives/Public/public-whatwg-archive/2012Jul/0039.html

        Test: fast/frames/seamless/seamless-body-margin.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):
        * css/html.css:
        (body:-webkit-seamless-document):
        * rendering/style/RenderStyleConstants.h:
            Define a new pseudoclass: '-webkit-seamless-document', which
            matches for any element in a document that's rendered in a
            seamless IFrame.

2013-01-03  Mike West  <mkwst@chromium.org>

        seamless iframes don't inherit styles when srcdoc is used
        https://bugs.webkit.org/show_bug.cgi?id=103539

        Reviewed by Antti Koivisto.

        Seamless iframes populated via a 'srcdoc' attribute should always
        inherit styles from their parent documents. At the moment, this is
        only the case when they contain a stylesheet or some other markup
        that forces a style recalculation on the document. Simple 'srcdoc'
        attributes (e.g. "srcdoc='<p>This is a comment.</p>'") bail out of
        recalculating style early, resulting in unstyled appearance.

        This patch instructs WebCore to treat seamless documents as having an
        updated StyleResolver regardless of what actions the parser takes,
        which in turn ensures that the document's style is recalculated
        correctly.

        Test: fast/frames/seamless/seamless-srcdoc.html

        * dom/Document.cpp:
        (WebCore::Document::implicitOpen):
            If it's a seamless document, notify it that its StyleResolver isn't
            what it might have expected.

2013-01-03  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Implement SimpleFontData::platformBoundsForGlyph
        https://bugs.webkit.org/show_bug.cgi?id=104127

        Reviewed by Jocelyn Turcotte.

        Implements platformBoundsForGlyph which is necessary for working MathML and Ruby.

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph):

2013-01-02  Steve Block  <steveblock@chromium.org>

        Remove superfluous 'IntPoint toPoint(const IntSize&)'
        https://bugs.webkit.org/show_bug.cgi?id=105993

        Reviewed by Eric Seidel.

        Refactoring only, no change in behavior.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGElementHitTest):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        * platform/graphics/IntPoint.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::offsetFromResizeCorner):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):

2013-01-02  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Remove m_size in TextureMapperLayer.
        https://bugs.webkit.org/show_bug.cgi?id=105781

        Reviewed by Noam Rosenthal.

        m_size is duplicated by State::size, so this patch removes it.

        No new tests. Refactoring only.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeTransformsRecursive):
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::isVisible):
        (WebCore::TextureMapperLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::layerRect):
        (TextureMapperLayer):

2013-01-02  Kenneth Russell  <kbr@google.com>

        [chromium] Creation of dedicated workers (isolates) leaks reference to HTMLDocument
        https://bugs.webkit.org/show_bug.cgi?id=105367

        Reviewed by Dmitry Titov.

        Eliminated a Chromium-specific object wrapping WorkerMessagingProxy in order to fix a
        lifetime management bug, which leaked every Document which started a dedicated worker.

        Test: fast/workers/worker-document-leak.html

        * workers/WorkerLoaderProxy.h:
        (WorkerLoaderProxy):
            Added Chromium-specific casting method to bridge two now-distinct class hierarchies.
        * workers/WorkerMessagingProxy.h:
        (WorkerMessagingProxy):
            Made destructor protected instead of private to allow subclassing.

2013-01-02  Elliott Sprehn  <esprehn@chromium.org>

        Make ClassList::reset's purpose obvious and don't keep quirks string when not needed
        https://bugs.webkit.org/show_bug.cgi?id=105963

        Reviewed by Ojan Vafai.

        ClassList::reset only exists to handle updating the special SpaceSplitString
        for quirks mode documents. This adds a new method that makes this obvious and
        instead of updating the string immediately clear the value and lazily
        update it. We also clear the value whenever we're inserted into the
        document so that when moving from a quirks mode document to a non-quirks
        mode document we don't keep the SpaceSplitString around if it's not needed.

        No new tests, I'm not sure how to write a test that we don't keep the
        SpaceSplitString when moving between quirks and non-quirks mode documents.

        * dom/Element.cpp:
        (WebCore::Element::classAttributeChanged):
        (WebCore::Element::insertedInto):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::clearClassListValueForQuirksMode):
        * html/ClassList.cpp:
        * html/ClassList.h:
        (WebCore::ClassList::clearValueForQuirksMode):

2013-01-02  Adam Barth  <abarth@webkit.org>

        [V8] V8DOMWrapper.cpp has many more includes than necessary
        https://bugs.webkit.org/show_bug.cgi?id=105968

        Reviewed by Kentaro Hara.

        Now that this file isn't in charge of doing everything under the sun,
        it can have a more focused set of include directives.

        * bindings/v8/V8DOMWrapper.cpp:

2013-01-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][CMAKE] Remove duplicated conditionals
        https://bugs.webkit.org/show_bug.cgi?id=105905

        Reviewed by Laszlo Gombos.

        Remove conditionals from CMake build system, where the files being built are already wrapped with
        the conditionals. It just messes cmake file up.

        * PlatformEfl.cmake:

2013-01-02  Alexey Proskuryakov  <ap@apple.com>

        Release build fix.

        * platform/network/cf/FormDataStreamCFNet.cpp: (WebCore::formFinalize):
        Use ASSERT_UNUSED for an otherwise unused variable.

2013-01-02  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r138661.
        http://trac.webkit.org/changeset/138661
        https://bugs.webkit.org/show_bug.cgi?id=104740

        Compile problems on EFL

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCoreTestSupport.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        (IDLFileForInterface):
        * page/make_settings.pl:
        (generateCode):
        (generateHeader):
        (printGetterAndSetter):
        (printInitializer):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::from):
        (WebCore::InternalSettings::InternalSettings):
        (WebCore::InternalSettings::reset):
        (WebCore::InternalSettings::setPasswordEchoEnabled):
        (WebCore):
        (WebCore::InternalSettings::setPasswordEchoDurationInSeconds):
        * testing/InternalSettings.h:
        (Backup):
        (InternalSettings):
        * testing/InternalSettings.idl:
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject):
        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject):

2013-01-02  Adam Barth  <abarth@webkit.org>

        [V8] There are some extra blank lines after removing INC_STATS
        https://bugs.webkit.org/show_bug.cgi?id=105964

        Reviewed by Ojan Vafai.

        This patch is a followup to http://trac.webkit.org/changeset/138665
        that removes some extra blank lines that sed wasn't smart enough to
        delete for us.

        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::V8CSSStyleDeclaration::namedPropertyQuery):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::appendCallback):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallback):
        (WebCore::V8DOMWindow::removeEventListenerCallback):
        (WebCore::V8DOMWindow::postMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::V8DedicatedWorkerContext::postMessageCallback):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::V8Geolocation::getCurrentPositionCallback):
        (WebCore::V8Geolocation::watchPositionCallback):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::V8HTMLAllCollection::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::V8HTMLCollection::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLFormControlsCollectionCustom.cpp:
        (WebCore::V8HTMLFormControlsCollection::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::namedPropertyGetter):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::V8MessagePort::postMessageCallback):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::namedPropertyGetter):
        * bindings/v8/custom/V8NotificationCustom.cpp:
        (WebCore::V8Notification::requestPermissionCallback):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::stateAccessorGetter):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::V8SQLResultSetRowList::itemCallback):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Storage::namedPropertyQuery):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::V8StyleSheetList::namedPropertyGetter):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getFramebufferAttachmentParameterCallback):
        (WebCore::V8WebGLRenderingContext::getParameterCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::V8Worker::postMessageCallback):

2013-01-02  Alexey Proskuryakov  <ap@apple.com>

        [WK2 NetworkProcess] Uploading fails if a client modified the request
        https://bugs.webkit.org/show_bug.cgi?id=105965

        Reviewed by Brady Eidson.

        Associating streams with additional information via a side HashMap does not work,
        because the stream we can see is an internal one, with address and other information
        not matching a stream that we created.

        It's surprising that this design issue was not causing major trouble without NetworkProcess.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore): Renamed FormContext to FormCreationContext, because this type only used
        for creation. Later, we use FormStreamFields as context.
        (WebCore::closeCurrentStream): Moved a star.
        (WebCore::formCreate): We no longer have a side map to keep updated.
        (WebCore::formFinalize): Ditto.
        (WebCore::formCopyProperty): Added an accessor to get FormData pointer from a stream.
        (WebCore::setHTTPBody): Ditto.
        (WebCore::httpBodyFromStream): Use the new property to get FormData pointer.

2013-01-02  Elliott Sprehn  <esprehn@chromium.org>

        Clean up dispatchEvent overrides and overloads
        https://bugs.webkit.org/show_bug.cgi?id=105959

        Reviewed by Adam Barth.

        Add OVERRIDE to all dispatchEvent overrides and use "using" instead of
        reimplementing EventTarget::dispatchEvent in subclasses where having the
        virtual override of dispatchEvent hides the overloads in
        the superclass.

        No new tests, just refactoring.

        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBOpenDBRequest.h:
        (IDBOpenDBRequest):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * dom/EventDispatchMediator.h:
        (FocusEventDispatchMediator):
        (BlurEventDispatchMediator):
        * dom/GestureEvent.h:
        (GestureEventDispatchMediator):
        * dom/KeyboardEvent.h:
        (KeyboardEventDispatchMediator):
        * dom/MouseEvent.h:
        * dom/Node.h:
        (Node):
        * dom/UIEvent.h:
        (FocusInEventDispatchMediator):
        (FocusOutEventDispatchMediator):
        * dom/WheelEvent.h:
        (WheelEventDispatchMediator):
        * html/HTMLMediaElement.h:
        * html/track/TextTrackCue.cpp:
        * html/track/TextTrackCue.h:
        (TextTrackCue):
        * page/DOMWindow.h:
        (DOMWindow):
        * svg/SVGElementInstance.h:
        (SVGElementInstance):

2013-01-02  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Surface a few more leveldb errors.
        https://bugs.webkit.org/show_bug.cgi?id=105670

        Reviewed by Tony Chang.

        Two calls to old LevelDBTransaction::get slipped through the cracks.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IndexKeyCursorImpl::loadCurrentRow):
        (WebCore::IndexCursorImpl::loadCurrentRow):
          Make these two functions use safeGet instead of get.

        * platform/leveldb/LevelDBTransaction.cpp:
        * platform/leveldb/LevelDBTransaction.h:
          Remove get now that it is unused.

2013-01-02  Bem Jones-Bey  <bjonesbe@adobe.com>

        When a block's height is determined by min-height/max-height, children with percentage heights are sized incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=26559

        Reviewed by Tony Chang.

        Percentage logical height computation now takes into account the min and max height of the container.

        Test: fast/block/min-max-height-percent-height-child.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax): Added. Like constrainLogicalHeightByMinMax,
            but constrains the content box instead of the border box.
        (WebCore):
        (WebCore::RenderBox::computeContentLogicalHeight): Make const so it can be called from the const method
            constrainContentBoxLogicalHeightByMinMax.
        (WebCore::RenderBox::computePercentageLogicalHeight): Use constrainContentBoxLogicalHeightByMinMax to properly
            respect min and max height on the containing box when computing the percentage height.
        * rendering/RenderBox.h:
        (RenderBox):

2013-01-02  Tony Chang  <tony@chromium.org>

        Unreviewed, force InternalSettings.cpp to rebuild to try and fix the Apple Win build.

        * testing/InternalSettings.cpp:

2013-01-02  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Use non-const buffers in put() to avoid copies
        https://bugs.webkit.org/show_bug.cgi?id=105572

        Reviewed by Adam Barth.

        Change the new put() method to allow the implementation to consume
        or adopt the vector, to avoid copying.

        No new tests as this is an interface change that will be implemented later.

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::put):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:

2013-01-02  Adam Barth  <abarth@webkit.org>

        [V8] Remove INC_STATS because it is unused
        https://bugs.webkit.org/show_bug.cgi?id=105957

        Reviewed by Ojan Vafai.

        We haven't been able to compile with INC_STATS turned on in a long
        time. This patch just removes this ancient cruft. I generated this
        patch using

        find . -type f | xargs sed -i '/INC_STATS/d'

        and then fixing up V8BindingMacros.h.

2013-01-02  Tony Chang  <tony@chromium.org>

        Generate internal.settings from Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=104740

        Reviewed by Adam Barth.

        If the setting is declared in Settings.in and is a basic type, generate a
        setter function at internals.settings.

        InternalSettingsGenerated.idl is created by make_settings.pl. InternalSettings.idl
        inherits from InternalSettingsGenerated.idl so we can override generated functions if
        needed or add additional custom setters.

        This patch removes 2 password echo methods from InternalSettings.idl since they are
        auto generated. There are other methods we could remove, but I'll do that in a followup.

        No new tests, existing tests should pass. Specifically, editing/input/password* tests should pass.

        * CMakeLists.txt: Add generated cpp file to the testing lib.
        * DerivedSources.make: Add generated idl file and specify all the outputs of make_settings.pl
        * DerivedSources.pri: Generate idl file before generating bindings and include generated idl
        for bindings generation.
        * GNUmakefile.am: Specify all the generated files of make_settings.pl. Add generated idl to
        list of files to be processed and resulting output to be compiled.
        * UseJSC.cmake: Add generated idl file to list of idl files to process.
        * UseV8.cmake: Same as UseJSC.cmake.
        * WebCore.gyp/WebCore.gyp: Run make_settings.pl earlier so we can run the output through the
        bindings generator.
        * WebCore.gypi: Add new files.
        * WebCore.vcproj/WebCoreTestSupport.vcproj: Add new files.
        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * bindings/scripts/CodeGenerator.pm:
        (IDLFileForInterface): Add current directory to the include path so DerivedSources.make can
        find the generated idl file.
        * page/make_settings.pl:
        (generateCode): Generate InternalSettingsGenerated.{idl,h,cpp}.
        (generateSettingsMacrosHeader): Rename since we're generating 2 headers now.
        (setterFunctionName): Helper function for naming a setter.
        (printGetterAndSetter): Use setterFunctionName.
        (enumerateParsedItems): Helper function that visits each parsed item.
        (generateInternalSettingsIdlFile): Generate idl file.
        (generateInternalSettingsHeaderFile): Generate header file.
        (generateInternalSettingsCppFile): Generate C++ file.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Remove password echo members.
        (WebCore::InternalSettings::Backup::restoreTo): Remove password echo members.
        (InternalSettingsWrapper): We can't use RefCountedSupplemental because we're we're already
        RefCounted. Create a wrapper class to wrap the RefCounted InternalSettings for Supplement<>::provideTo,
        which uses an OwnPtr.
        (WebCore::InternalSettingsWrapper::InternalSettingsWrapper): Wraps an InternalSettings that the Page can own.
        (WebCore::InternalSettingsWrapper::~InternalSettingsWrapper): Clear's m_page when the Page goes away.
        (WebCore::InternalSettingsWrapper::internalSettings): Unwrap InternalSettings.
        (WebCore::InternalSettings::from): Update to use InternalSettingsWrapper.
        (WebCore::InternalSettings::InternalSettings): Call base class constructor.
        (WebCore::InternalSettings::resetToConsistentState): Renamed from reset() and pass through to base class.
        Also remove unnecessary pageScaleFactor reset (done in Internals::resetToConsistentState).
        * testing/InternalSettings.h:
        (Backup): Remove password echo members.
        (WebCore::InternalSettings::create): Create an instance instead of using new.
        (WebCore::InternalSettings::hostDestroyed): Clear the page. This is similar to the code that
        RefCountedSupplemental has.
        * testing/InternalSettings.idl: Extends InternalSettingsGenerated.
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject): Rename to resetToConsistentState to be like other code.
        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject): Rename to resetToConsistentState to be like other code.
        Remove an unused header.

2013-01-02  Adam Barth  <abarth@webkit.org>

        HTML preload scanner doesn't need to remember whether we're scanning the body
        https://bugs.webkit.org/show_bug.cgi?id=105945

        Reviewed by Eric Seidel.

        As far as I can tell, no one uses this state.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::CSSPreloadScanner):
        (WebCore::CSSPreloadScanner::scan):
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::PreloadTask::preload):
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        (WebCore::HTMLPreloadScanner::processToken):
        * html/parser/HTMLPreloadScanner.h:
        (HTMLPreloadScanner):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::preload):
        * loader/cache/CachedResourceLoader.h:
        (CachedResourceLoader):

2013-01-02  Abhishek Arya  <inferno@chromium.org>

        Crash in WebCore::Element::cloneElementWithoutChildren.
        https://bugs.webkit.org/show_bug.cgi?id=105949

        Reviewed by Ryosuke Niwa.
        
        RefPtr |ancestors| vector since its elements can be destroyed from mutation events
        fired in CompositeEditCommand::appendNode. 

        No new tests. The testcase relies on recursive DOM mutations and does not minimize.

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::getAncestorsInsideBlock):
        (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock):
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.h:
        (InsertParagraphSeparatorCommand):

2013-01-02  Douglas Stockwell  <dstockwell@chromium.org>

        Crash in WebCore::InlineBox::deleteLine
        https://bugs.webkit.org/show_bug.cgi?id=93448

        Reviewed by Eric Seidel.

        When we ran off the end of the line while looking for line breaks in an
        inline with white-space:nowrap nested in a block with white-space:pre
        it was possible for the line break to be set at or before the current
        position -- this could result in duplications in the render tree or
        infinite looping.

        This patch changes the "fixup" logic that runs after we have finished
        iterating through elements and text and have potentially found a break
        point. In the case of a block setting white-space:pre we would back up
        a character in some cases. Not doing so could leave whitespace that
        should have been collapsed at the end of an inline.

        For example in '<span style="white-space:nowrap">x_</span>_y' if a
        break was inserted before 'y' the space after 'x' would still be
        rendered (rather than be collapsed with the break).

        To avoid this problem we will not take the opportunity to break until
        we have finished collapsing whitespace.

        Tests: fast/text/whitespace/inline-whitespace-wrapping-1.html
               fast/text/whitespace/inline-whitespace-wrapping-2.html
               fast/text/whitespace/inline-whitespace-wrapping-3.html
               fast/text/whitespace/inline-whitespace-wrapping-4.html
               fast/text/whitespace/nowrap-white-space-collapse.html
               fast/text/whitespace/pre-block-normal-inline-crash-1.html
               fast/text/whitespace/pre-block-normal-inline-crash-2.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): Collapse
        whitespace before breaking. Avoid setting the break before the current
        position.

2013-01-02  Adam Barth  <abarth@webkit.org>

        Remove webkitPostMessage
        https://bugs.webkit.org/show_bug.cgi?id=105910

        Reviewed by Kentaro Hara.

        The vendor-prefixed version of postMessage was never widely used.
        We've been compiling it out of the Chromium port for a while now and
        haven't received any reports of compatibility problems. I've done a
        number of web searches for uses of the API and personally contacted a
        handful of authors I found using the API, all of whom have now moved to
        the identical unprefixed API. We've publicied the prefix removal in a
        blog post:

        http://blog.chromium.org/2012/11/a-web-developers-guide-to-latest-chrome.html

        and discussed it on webkit-dev:

        http://lists.macosforge.org/pipermail/webkit-dev/2012-September/022189.html

        We've done our diligence, and now we should remove the API from the
        remainder of the ports.

        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDedicatedWorkerContextCustom.cpp:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSWorkerCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::postMessageCallback):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::V8DedicatedWorkerContext::postMessageCallback):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::V8MessagePort::postMessageCallback):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::V8Worker::postMessageCallback):
        * dom/MessagePort.idl:
        * page/DOMWindow.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/Worker.idl:

2013-01-02  Benjamin Poulain  <benjamin@webkit.org>

        Optimize TransformationMatrix::multiply() for x86_64
        https://bugs.webkit.org/show_bug.cgi?id=105719

        Reviewed by Sam Weinig.

        On x86_64, we have access to 16 XMM registers. This can hold 32 double values.
        We can use that in two ways to optimize matrix multiplications:
        -Keep the source matrix completely in registers. Write the result directly in
         the source matrix's memory. This avoids the memcpy at the end of the multiplication
         and various memory operations.
        -Use SIMD with SSE to perform 2 operations at a time.

        The parameter from the second matrix are loaded one by one in XMM registers.
        Loading them with SSE then shuffling the values perform worse than loading
        one by one.

        This is only enabled on 64bits as x86 only has access to 8 XMM registers and
        the function should be written differently.

        On a i5, TransformationMatrix::multiply() perform about 3 times faster with the change.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply):
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix): Fix an incorrect comment. Unify the comment with the cpp file.

2013-01-02  Mike West  <mkwst@chromium.org>

        Clean up the loadXXXStyle() idiom in StyleResolver.
        https://bugs.webkit.org/show_bug.cgi?id=105903

        Reviewed by Darin Adler.

        This patch refactors 'loadViewSourceStyle' in order to avoid the
        necessity of each call site checking whether the relevant data has
        been loaded. The new 'viewSourceStyle' will load the data if required,
        and return a pointer which can be used directly.

        No new tests, as this refactoring should exhibit no visible change in
        behavior.

        * css/StyleResolver.cpp:
        (WebCore::viewSourceStyle):
            Lazily populate the static 'defaultViewSourceStyle' with data. I
            haven't removed the outer variable, as it's used directly in
            StyleResolver::reportMemoryUsage.
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectFeatures):
            Use the new hotness rather than the old, lame method.

2013-01-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138627.
        http://trac.webkit.org/changeset/138627
        https://bugs.webkit.org/show_bug.cgi?id=105935

        This patch doesn't fix Windows port build failure (Requested
        by rniwa on #webkit).

        * WebCore.vcproj/WebCore.vcproj:

2013-01-02  Elliott Sprehn  <esprehn@chromium.org>

        Transitions and animations do not apply to CSS ::before and ::after pseudo-elements
        https://bugs.webkit.org/show_bug.cgi?id=92591

        Reviewed by Eric Seidel.

        The new DOM based :before and :after pseudo elements support animations
        and transitions already, but I had disabled support so we could turn them
        on in a separate step. This patch just removes the checks and adds tests.

        This also adds two methods to internals to allow pausing animations and
        transitions on pseudo elements at predictable locations so the tests
        are not flaky.

        Tests: fast/css-generated-content/pseudo-animation.html
               fast/css-generated-content/pseudo-transition.html

        * WebCore.exp.in:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * testing/Internals.cpp:
        (WebCore::Internals::pauseAnimationAtTimeOnPseudoElement):
        (WebCore::Internals::pauseTransitionAtTimeOnPseudoElement):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-01-02  Chris Rogers  <crogers@google.com>

        Implement WebIDL-style string constants in WebAudio
        https://bugs.webkit.org/show_bug.cgi?id=105058

        Reviewed by Kentaro Hara.

        See Deprecation Notes for more detail:
        https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DeprecationNotes

        PannerNode, BiquadFilterNode, OscillatorNode constants must support WebIDL-style string constants.
        Legacy support in the setters for the old integer values should be supported.

        This patch handles the changes for OscillatorNode.

        * GNUmakefile.list.am:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::OscillatorNode):
        (WebCore::OscillatorNode::type):
        (WebCore):
        (WebCore::OscillatorNode::setType):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/OscillatorNode.idl:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSOscillatorNodeCustom.cpp: Copied from Source/WebCore/Modules/webaudio/OscillatorNode.idl.
        (WebCore):
        (WebCore::JSOscillatorNode::setType):
        * bindings/v8/custom/V8OscillatorNodeCustom.cpp: Copied from Source/WebCore/Modules/webaudio/OscillatorNode.idl.
        (WebCore):
        (WebCore::V8OscillatorNode::typeAccessorSetter):

2013-01-02  Robert Hogan  <robert@webkit.org>

        Regression (r132935): WebKit breaks between <nobr> tags
        https://bugs.webkit.org/show_bug.cgi?id=11857

        Reviewed by David Hyatt.

        The fix for bug 29648 in http://trac.webkit.org/changeset/132935 was too broad - it caused us
        to find linebreaks in autowrap containers between non-wrapping elements where there was no 
        whitespace to allow the break. This reverts the code change in r132935 and ensures we attempt
        to move below floats when inside an autowrap container but leaves the treatment of non-wrapping
        elements in an autowrap container unaffected.

        Test: fast/inline/break-between-nobr.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):

2013-01-02  Ryosuke Niwa  <rniwa@webkit.org>

        Another Windows port build fix attempt. Don't try to build WTF files in WebCore.

        Rubber-stamped by Sam Weinig.

        * WebCore.vcproj/WebCore.vcproj:

2013-01-02  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] [WebGL] Minor cleanup in PlatformContext.
        https://bugs.webkit.org/show_bug.cgi?id=105872

        Reviewed by Kenneth Rohde Christiansen.

        The logic to check for supported extensions is scattered in different classes i.e PlatformContext, eglcontext etc.
        This patch cleans up any duplicate code and adds new api in GLPlatformContext to query for supported GL, EGL and GLX extensions.

        * PlatformEfl.cmake:
        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore):
        (WebCore::GLPlatformContext::createContext):
        (WebCore::GLPlatformContext::supportsGLExtension):
        (WebCore::GLPlatformContext::supportsEGLExtension):
        (WebCore::GLPlatformContext::supportsGLXExtension):
        (WebCore::GLPlatformContext::makeCurrent):
        (WebCore::GLPlatformContext::initializeResetStatusExtension):
        * platform/graphics/opengl/GLPlatformContext.h:
        * platform/graphics/surfaces/egl/EGLContext.cpp:
        (WebCore::isRobustnessExtSupported):
        (WebCore::EGLOffScreenContext::initialize):
        * platform/graphics/surfaces/glx/GLXContext.cpp:
        (WebCore::initializeARBExtensions):
        (WebCore::GLXOffScreenContext::initialize):

2013-01-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138601.
        http://trac.webkit.org/changeset/138601
        https://bugs.webkit.org/show_bug.cgi?id=105917

        Also not an optimal solution, needs more discussion.
        (Requested by mkwst_ on #webkit).

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

2013-01-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138611.
        http://trac.webkit.org/changeset/138611
        https://bugs.webkit.org/show_bug.cgi?id=105916

        Not an optimal solution, needs more discussion. (Requested by
        mkwst_ on #webkit).

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.vcproj/WebCore.vcproj:
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectFeatures):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/seamless.css: Removed.

2013-01-02  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [AC] Memory leak in GraphicsSurfacePrivate::findFBConfigWithAlpha()
        https://bugs.webkit.org/show_bug.cgi?id=105770

        Reviewed by Noam Rosenthal.

        Free the memory returned by glXGetVisualFromFBConfig() using
        XFree to avoid a memory leak.

        No new tests. No change in behavior.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::findFBConfigWithAlpha):

2013-01-02  Mike West  <mkwst@chromium.org>

        The 'body' of seamless IFrames should default to 'margin: 0'
        https://bugs.webkit.org/show_bug.cgi?id=90834

        Reviewed by Eric Seidel.

        Documents displayed in seamless iframes should override the 'body'
        element's normal 8px default margins with 0px, in order to ensure that
        contents are displayed flush with the boundries of the seamless box.[1]

        This patch does so by adding a new user agent stylesheet for seamless
        documents, and teaching the StyleResolver how and when to apply it.

        [1]: http://lists.w3.org/Archives/Public/public-whatwg-archive/2012Jul/0039.html

        Test: fast/frames/seamless/seamless-body-margin.html

        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.vcproj/WebCore.vcproj:
        * CMakeLists.txt:
            Added a new CSS file! Let's tell everyone!
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::loadSeamlessStyle):
        (WebCore::StyleResolver::matchUARules):
        (WebCore::StyleResolver::collectFeatures):
        (WebCore::StyleResolver::reportMemoryUsage):
            Load the new stylesheet, and apply it to the document in
            matchUARules iff the document should be displayed seamlessly.
        * css/seamless.css: Added.
        (body):
            Stylesheet containing defaults for seamless documents.

2013-01-01  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12942239> Update copyright strings

        Reviewed by Sam Weinig.

        * Info.plist:

2013-01-01  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL] Enable MHTML feature
        https://bugs.webkit.org/show_bug.cgi?id=105815

        Reviewed by Laszlo Gombos.

        Add application/x-mimearchive type to archive mime types.
        Add mht and mhtml to extension map.

        No new tests. Existing layout tests pass.

        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):
        * platform/efl/MIMETypeRegistryEfl.cpp:
        (WebCore):

2013-01-01  Mike West  <mkwst@chromium.org>

        seamless iframes don't inherit styles when srcdoc is used
        https://bugs.webkit.org/show_bug.cgi?id=103539

        Reviewed by Eric Seidel.

        Seamless iframes populated via a 'srcdoc' attribute should always
        inherit styles from their parent documents. At the moment, this is
        only the case when they contain a stylesheet or some other markup
        that forces a style recalculation on the document. Simple 'srcdoc'
        attributes (e.g. "srcdoc='<p>This is a comment.</p>'") bail out of
        recalculating style early, resulting in unstyled appearance.

        This patch instructs WebCore to treat seamless documents as having an
        updated StyleResolver regardless of what actions the parser takes,
        which in turn ensures that the document's style is recalculated
        correctly.

        Test: fast/frames/seamless/seamless-srcdoc.html

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
            If it's a seamless document, notify it that its StyleResolver isn't
            what it might have expected.

2012-12-31  Jeff Rogers  <jrogers@rim.com>

        [BlackBerry] Fullscreen Media Time Indicators Background Incorrect
        https://bugs.webkit.org/show_bug.cgi?id=105888

        Reviewed by George Staikos.

        Internal PR 272699.
        Update fullscreen media controls CSS to fix time container background
        color. Also fix transparency to be 80% opaque to and the time
        remaining text color to match the system player.

        No new tests as there is no functionality change.

        * css/mediaControlsBlackBerryFullscreen.css:
        (video:-webkit-full-screen::-webkit-media-controls-panel):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-time-display-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-timeline-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-current-time-display):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-time-remaining-display):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-button-container, video:-webkit-full-screen::-webkit-media-controls-play-button-container):
        (video:-webkit-full-screen::-webkit-media-controls-placeholder):

2012-12-31  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Add compile time support for GLES2.
        https://bugs.webkit.org/show_bug.cgi?id=105816

        Reviewed by Kenneth Rohde Christiansen.

        This patch adds build support for GLES2.
        GLES2 support can be enabled during compile time by passing -DENABLE_GLES2=ON as
        cmake config parameter. GLES2 options is not enabled by default. This patch doesn't
        address all the build issues related to GLES2 but only adds the needed support in
        PlatformEfl.cmake.

        * PlatformEfl.cmake:

2012-12-31  Andy Chen  <andchen@rim.com>

        [BlackBerry] The HTML5 video fullscreen time indicator on the right cuts clipped when the video is longer than 1 hour
        https://bugs.webkit.org/show_bug.cgi?id=105887

        Reviewed by George Staikos.

        The width of the time part was fixed. Remove it.

        No new test is required because no functionality change.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::adjustMediaControlStyle):

2012-12-30  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] [WebGL] Rename EGLConfigHelper as EGLConfigSelector.
        https://bugs.webkit.org/show_bug.cgi?id=105876

        Reviewed by Kenneth Rohde Christiansen.

        This is to sync the naming conventions of our classes in both EGL and GLX implementations. 
        In our GLX implementation, class responsible for the same functionality is named as GLXConfigSelector. 
        This patch renames EGLConfigHelper as EGLConfigSelector.

        * PlatformEfl.cmake:
        * platform/graphics/surfaces/egl/EGLConfigSelector.cpp: Renamed from Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.cpp.
        (WebCore):
        (WebCore::SharedEGLDisplay::deref):
        (WebCore::SharedEGLDisplay::sharedEGLDisplay):
        (WebCore::SharedEGLDisplay::SharedEGLDisplay):
        (WebCore::SharedEGLDisplay::cleanup):
        (WebCore::SharedEGLDisplay::~SharedEGLDisplay):
        (WebCore::EGLConfigSelector::EGLConfigSelector):
        (WebCore::EGLConfigSelector::~EGLConfigSelector):
        (WebCore::EGLConfigSelector::display):
        (WebCore::EGLConfigSelector::pBufferContextConfig):
        (WebCore::EGLConfigSelector::surfaceContextConfig):
        (WebCore::EGLConfigSelector::nativeVisualId):
        (WebCore::EGLConfigSelector::reset):
        (WebCore::EGLConfigSelector::createConfig):
        * platform/graphics/surfaces/egl/EGLConfigSelector.h: Renamed from Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.h.
        (WebCore):
        (SharedEGLDisplay):
        (WebCore::SharedEGLDisplay::create):
        (EGLConfigSelector):
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLWindowTransportSurface::EGLWindowTransportSurface):
        (WebCore::EGLWindowTransportSurface::configuration):
        (WebCore::EGLWindowTransportSurface::destroy):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        (EGLWindowTransportSurface):

2012-12-30  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] webaudio/decode-audio-data-basic.html fails
        https://bugs.webkit.org/show_bug.cgi?id=105298

        Reviewed by Martin Robinson.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus): Return a null pointer if an
        error happened while processing a media file.

2012-12-30  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r138545): Makes WebAudio tests crash
        https://bugs.webkit.org/show_bug.cgi?id=105869

        Reviewed by Philippe Normand.

        Stop using smart pointers and adoptGRef() for the
        GstBus object and call gst_object_unref() manually.
        This fixes assertions hits when calling adoptGRef()
        since the GstBus object has a floating reference.

        Alternatively, we could keep using smart pointers
        and stop calling adoptGRef() so that
        gst_object_ref_sink() is called and the floating
        flag is cleared but I think it is clearer to do
        it manually here.

        No new tests, already covered by existing tests.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::messageCallback):
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::decodeAudioForBusCreation):

2012-12-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Rename StyleResolver's member variable that holds SelectorChecker to a proper name.
        https://bugs.webkit.org/show_bug.cgi?id=105864

        In https://bugs.webkit.org/show_bug.cgi?id=105660#c11, Antti suggested renaming m_checker to
        m_selectorChecker. I've forgotten about that, but now I remembered it.

        Reviewed by Eric Seidel.

        No change in functionality, covered by existing tests.

        * css/StyleResolver.cpp/h: Renamed all instances of m_checker to m_selectorChecker.

2012-12-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Move pointer to Document up from SelectorChecker to StyleResolver.
        https://bugs.webkit.org/show_bug.cgi?id=105863

        Now that SelectorChecker is mostly stateless, it no longer needs to keep a pointer to Document, which
        makes all the code in StyleResolver that reaches for it sort of weird.

        Reviewed by Eric Seidel.

        No change in functionality, covered by existing tests.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::SelectorChecker): Changed to take document as argument (only used to set bit fields).
        (WebCore::SelectorChecker::checkOneSelector): Changed to use element document.
        (WebCore::SelectorChecker::checkScrollbarPseudoClass): Ditto.
        * css/SelectorChecker.h:
        (WebCore): Removed unnecessary Document forward declaration.
        (SelectorChecker): Changed constructor declaration, and removed m_document member.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver): Adjusted SelectorChecker initializer accordingly.
        (WebCore::StyleResolver::initElement): Changed to use own document accessor.
        (WebCore::StyleResolver::initForStyleResolve): Ditto.
        (WebCore::StyleResolver::matchUARules): Ditto.
        (WebCore::StyleResolver::styleForPage): Ditto.
        (WebCore::StyleResolver::applyProperty): Ditto.
        (WebCore::StyleResolver::checkForGenericFamilyChange): Ditto.
        (WebCore::StyleResolver::initializeFontStyle): Ditto.
        (WebCore::StyleResolver::setFontSize): Ditto.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::document): Changed to use own member.
        (WebCore::StyleResolver::documentSettings): Ditto.
        (StyleResolver): Added m_document member.
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQuery::matches): Changed callsite to reflect new constructor signature.
        (WebCore::SelectorQuery::queryAll): Ditto.
        (WebCore::SelectorQuery::queryFirst): Ditto.
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorChecker::ContentSelectorChecker): Ditto.
        (WebCore::ContentSelectorQuery::ContentSelectorQuery): Ditto.
        * html/shadow/ContentSelectorQuery.h:
        (ContentSelectorChecker): Removed unnecessary argument.

2012-12-29  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Cookies with an IP domain are not being loaded properly into memory
        https://bugs.webkit.org/show_bug.cgi?id=105859

        PR 271597

        Reviewed by George Staikos.

        The isIP flag isn't persistented in the database. We need to check it
        again when we load it into memory.

        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::getBackingStoreCookies):

2012-12-29  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Refactor GLXImplementation.
        https://bugs.webkit.org/show_bug.cgi?id=105825

        Reviewed by Kenneth Rohde Christiansen.

        This patch decouples native window management and logic to find surface configuration in GLX implementation.

        * platform/graphics/opengl/GLDefs.h:
        * platform/graphics/surfaces/glx/GLXConfigSelector.h: Renamed from Source/WebCore/platform/graphics/surfaces/glx/GLXWindowResources.h.
        (WebCore):
        (GLXConfigSelector):
        (WebCore::GLXConfigSelector::GLXConfigSelector):
        (WebCore::GLXConfigSelector::~GLXConfigSelector):
        (WebCore::GLXConfigSelector::visualInfo):
        (WebCore::GLXConfigSelector::pBufferContextConfig):
        (WebCore::GLXConfigSelector::surfaceContextConfig):
        (WebCore::GLXConfigSelector::reset):
        (WebCore::GLXConfigSelector::createConfig):

        Helper class to find surface configuration.

        * platform/graphics/surfaces/glx/GLXContext.h:
        (GLXOffScreenContext):
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXTransportSurface::configuration):
        (WebCore::GLXTransportSurface::setGeometry):
        (WebCore::GLXTransportSurface::destroy):
        (WebCore::GLXPBuffer::GLXPBuffer):
        (WebCore::GLXPBuffer::initialize):
        (WebCore::GLXPBuffer::configuration):
        * platform/graphics/surfaces/glx/GLXSurface.h:
        (GLXTransportSurface):
        (GLXPBuffer):

        Inheritance changed from X11OffScreenWindow to GLPlatformSurface.

        * platform/graphics/surfaces/glx/X11WindowResources.cpp:
        (WebCore):
        (WebCore::X11OffScreenWindow::X11OffScreenWindow):
        (WebCore::X11OffScreenWindow::reSizeWindow):
        (WebCore::X11OffScreenWindow::createOffscreenWindow):
        (WebCore::X11OffScreenWindow::destroyWindow):
        (WebCore::X11OffScreenWindow::nativeSharedDisplay):
        (WebCore::X11OffScreenWindow::setVisualInfo):
        (WebCore::X11OffScreenWindow::isXRenderExtensionSupported):
        * platform/graphics/surfaces/glx/X11WindowResources.h:
        (WebCore::SharedX11Resources::create):
        (SharedX11Resources):
        (X11OffScreenWindow):

         Removed code related to surface configiration.

2012-12-29  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Timeline] cpu bar popover shows wrong duration / cpu time.
        https://bugs.webkit.org/show_bug.cgi?id=105854

        Reviewed by Vsevolod Vlasov.

        Problem: CPU task indexes are already incremented before written to
        data structure.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._refreshMainThreadBars):
        Use for loop to get correct indexes.

2012-12-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: instrument not instrumented members.
        https://bugs.webkit.org/show_bug.cgi?id=105830

        Reviewed by Vsevolod Vlasov.

        In some cases we don't want to visit some class members.
        As example we decided to skip pointers to interface classes such as GraphicLayerClient.
        We could use addWeakPointer for them but it can't be used for nonpointer members.
        In the offline discussion we came to a conclusion that we need a new instrumentation
        method ignoreMember, which will be used for all the members which we won't like to visit/instrument.

        DriveBy: Also I instrumented not yet instrumented members.

        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperMap::reportMemoryUsage):
        * bindings/v8/ScriptWrappable.h:
        (WebCore::ScriptWrappable::reportMemoryUsage):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::reportMemoryUsage):
        * platform/KURLGoogle.cpp:
        (WebCore::KURLGooglePrivate::reportMemoryUsage):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::reportMemoryUsage):
        * platform/audio/AudioArray.h:
        (WebCore::AudioArray::reportMemoryUsage):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::reportMemoryUsage):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::reportMemoryUsage):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RowStruct::reportMemoryUsage):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::reportMemoryUsage):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::reportMemoryUsage):

2012-12-29  Andrey Lushnikov  <lushnikov@chromium.com>

        Web Inspector: refactor DefaultTextEditor - annotate handlers and fix getters style
        https://bugs.webkit.org/show_bug.cgi?id=105829

        Reviewed by Pavel Feldman.

        Refactor DefaultTextEditor.js: improve handler method annotations,
        remove "get" prefix from method names, get rid of unnecessary
        delegation (e.g. see _handleCut).

        No new tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor):
        (WebInspector.DefaultTextEditor.prototype._contextMenu):
        (WebInspector.DefaultTextEditor.prototype.selection):
        (WebInspector.DefaultTextEditor.prototype.lastSelection):
        (WebInspector.DefaultTextEditor.prototype.wasShown):
        (WebInspector.DefaultTextEditor.prototype.willHide):
        (WebInspector.TextEditorChunkedPanel.prototype.createNewChunk):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.wasShown):
        (WebInspector.TextEditorMainPanel.prototype.willHide):
        (WebInspector.TextEditorMainPanel.prototype.populateContextMenu):
        (WebInspector.TextEditorMainPanel.prototype.splitChunkOnALine):
        (WebInspector.TextEditorMainPanel.prototype.expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._paintLineChunks):
        (WebInspector.TextEditorMainPanel.prototype.selection):
        (WebInspector.TextEditorMainPanel.prototype.lastSelection):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._handleSelectionChange):
        (WebInspector.TextEditorMainPanel.prototype._handleTextInput):
        (WebInspector.TextEditorMainPanel.prototype.handleKeyDown):
        (WebInspector.TextEditorMainPanel.prototype._handleCut):

2012-12-28  No'am Rosenthal  <noam@webkit.org>

        REGRESSION: r138555 asserts on Linux EFL/Qt debug builds
        https://bugs.webkit.org/show_bug.cgi?id=105848

        Unreviewed test fix.

        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
            Added parameter name to noop shader.

2012-12-28  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Use a transform uniform instead of u_flip/u_textureSize
        https://bugs.webkit.org/show_bug.cgi?id=105809

        Reviewed by Martin Robinson.

        In order to support tiled-patterns, we'd have to apply texture-space transformations in the
        vertex shader. 
        This patch cleans up the current texture-space transformations, and uses 
        single matrix uniform instead of the current uniforms.

        No new tests, refactor only.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):

2012-12-28  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Edge antialiasing in TextureMapper could be done with less per-pixel calls
        https://bugs.webkit.org/show_bug.cgi?id=105377

        Reviewed by Kenneth Rohde Christiansen.

        Instead of passing 8 quad edge coefficients as uniforms and analyze the distance in the
        fragment shader, we render the antialiased quad as 4 edge triangles, which originate in the
        center of the quad. 

        The vertex shader expands the quad based on the screen transform, and applies a value to each vertex to be interpolated by the GPU. 

        It is very difficult to test performance gain; However, the following is apparent:
        - The matrix multiplications and inversions done before in the quad inflation code were
          always visible in instruments/valgrind and they are now gone.
        - We now perform a single smoothstep() command per pixel instead of 8 clamp(dot()) commands.
        - It should now be possible to antialias individual edges.

        Covered by existing tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::getStaticVBO):
            Cache the unit-rect and edge-triangle vertex data in a VBO.

        (WebCore::TextureMapperGLData::~TextureMapperGLData):
            Clear the cached VBOs upon destruction.

        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawTexture):
            Removed call to useProgram, since it's already called in drawTexturedQuadWithProgram.

        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        (WebCore::TextureMapperGL::drawSolidColor):
            Use the new signature "draw" instead of "drawQuad".

        (WebCore::TextureMapperGL::drawEdgeTriangles):
        (WebCore::TextureMapperGL::drawUnitRect):
        (WebCore::TextureMapperGL::draw):
            Removed DrawQuad, instead draw either a unit rect or edge triangles.

        (WebCore::TextureMapperGL::beginClip):
            Use the new setMatrix function.

        * platform/graphics/texmap/TextureMapperGL.h:
            Added a paint flag for antialiasing.

        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::TextureMapperShaderProgram::setMatrix):
            Since we now set the matrix in multiple locations, added a convenience 
            function for matrix uniform.

        (WebCore::getShaderSpec):
            Update the vertex and fragment shader to account for the new antialiasing
            mechanism.
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):

2012-12-28  Mark Rowe  <mrowe@apple.com>

        Move logic for extracting the OS X marketing version in to WebCore
        <http://webkit.org/b/105841> / <rdar://problem/10736041>

        Reviewed by Dan Bernstein.

        The logic for extracting the OS X markerting version is moved in to systemMarketingVersion
        from WebKitSystemInterface (post-10.8) and WebKit (pre-10.8).

        * WebCore.exp.in: Export systemMarketingVersion and remove the old WKSI symbol.
        * WebCore.xcodeproj/project.pbxproj: Add the new files.
        * platform/mac/SystemVersionMac.h: Added.
        * platform/mac/SystemVersionMac.mm: Added.
        (WebCore::createSystemMarketingVersion): Read the marketing version out of SystemVersion.plist
        (WebCore::callGestalt):
        (WebCore::createSystemMarketingVersion): Build the marketing version by piecing together the results
        of calls to Gestalt.
        (WebCore::systemMarketingVersion): Return the cached string.
        * platform/mac/WebCoreSystemInterface.h: Remove the old WKSI symbol.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2012-12-28  Rafael Weinstein  <rafaelw@chromium.org>

        [Templates]: Fix assert in colgroup parse handling
        https://bugs.webkit.org/show_bug.cgi?id=105837

        Reviewed by Eric Seidel.

        Tests added to html5lib.

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

2012-12-28  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] GstMessage handler in AudioDestination
        https://bugs.webkit.org/show_bug.cgi?id=105292

        Reviewed by Martin Robinson.

        Handle GStreamer warnings and errors coming from the playback
        pipeline. For now we only display warnings on the console.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::messageCallback):
        (WebCore):
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        (WebCore::AudioDestinationGStreamer::finishBuildingPipelineAfterWavParserPadReady):
        (WebCore::AudioDestinationGStreamer::handleMessage):
        * platform/audio/gstreamer/AudioDestinationGStreamer.h:
        (AudioDestinationGStreamer):

2012-12-28  Martin Robinson  <mrobinson@igalia.com>

        [GTK][WK2] Add support for IME Composition
        https://bugs.webkit.org/show_bug.cgi?id=65093

        Reviewed by Carlos Garcia Campos.

        No new tests. The GtkInputMethodFilter is covered by unit tests in TestWebKitAPI.
        Doing functional tests for this behavior is much more complex.

        * platform/gtk/GtkInputMethodFilter.cpp:
        (WebCore::GtkInputMethodFilter::sendCompositionAndPreeditWithFakeKeyEvents): Now
        pass along whether or not an event was faked.
        * platform/gtk/GtkInputMethodFilter.h: Ditto.

2012-12-27  Emil A Eklund  <eae@chromium.org>

        REGRESSION (r138196): Regions with text-overflow: ellipsis; are being ellipsized unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=105600

        Reviewed by Darin Adler.
        
        Pixel-snap lineBoxEdge before comparing with the block edge as
        the lineBox edge isn't guaranteed to be snapped to device pixels
        on all platforms.

        Test: fast/sub-pixel/ellipsis-table.html

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

2012-12-28  Brandon Jones  <bajones@chromium.org>

        [chromium] DrawingBuffer initialization loop breaks if completely out of memory
        https://bugs.webkit.org/show_bug.cgi?id=105732

        Reviewed by Kenneth Russell.

        When DrawingBuffer allocation fails because s_currentResourceUsePixels is maxed out
        it now forces WebGLRenderingContext creation to fail gracefully.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create): On Chromium, check for failure to allocate a DrawingBuffer

2012-12-28  Dan Bernstein  <mitz@apple.com>

        Slightly clean up WebCore's Base.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=105808

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Simplify the definition of GCC_GENERATE_DEBUGGING_SYMBOLS,
        which is always YES.

2012-12-28  Rafael Weinstein  <rafaelw@chromium.org>

        Heap-use-after-free in WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement
        https://bugs.webkit.org/show_bug.cgi?id=105780

        Reviewed by Eric Seidel.

        This was regression was created by the HTMLTemplateElement implementation. The issue was a missed instance of
        "fragment or template contents" case related to the parsing of colgroups.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2012-12-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce uri as a UISourceCode unique identifier in workspace.
        https://bugs.webkit.org/show_bug.cgi?id=105799

        Reviewed by Pavel Feldman.

        Added uri field to UISourceCode. 
        Debugger and LiveEdit uiSourceCodes are now created through WorkspaceProviders (not projects yet though)
        which are responsible for unique uri generation. 
        Extracted generic content provider based WorkspaceProvider functionality and url-to-uri conversion logic to ContentProviderWorkspaceProvider class.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.sourceFileId):
        * inspector/front-end/CompilerScriptMapping.js:
        * inspector/front-end/DebuggerScriptMapping.js:
        (WebInspector.DebuggerScriptMapping):
        * inspector/front-end/DefaultScriptMapping.js:
        (WebInspector.DefaultScriptMapping):
        (WebInspector.DefaultScriptMapping.prototype.addScript):
        (WebInspector.DebuggerWorkspaceProvider):
        (WebInspector.DebuggerWorkspaceProvider.prototype.addDebuggerFile):
        * inspector/front-end/LiveEditSupport.js:
        (WebInspector.LiveEditSupport):
        (WebInspector.LiveEditSupport.prototype.uiSourceCodeForLiveEdit):
        (WebInspector.LiveEditWorkspaceProvider):
        (WebInspector.LiveEditWorkspaceProvider.prototype.addLiveEditFile):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider.prototype._addFile):
        * inspector/front-end/NetworkWorkspaceProvider.js:
        (WebInspector.ContentProviderWorkspaceProvider):
        (WebInspector.ContentProviderWorkspaceProvider.uriForURL):
        (WebInspector.ContentProviderWorkspaceProvider.prototype.addFile):
        (WebInspector.ContentProviderWorkspaceProvider.prototype.uniqueURI):
        (WebInspector.NetworkWorkspaceProvider):
        (WebInspector.NetworkWorkspaceProvider.prototype.addNetworkFile):
        * inspector/front-end/SASSSourceMapping.js:
        (_bindUISourceCode):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer):
        (WebInspector.TabbedEditorContainer.prototype._scrollChanged):
        (WebInspector.TabbedEditorContainer.prototype._selectionChanged):
        (WebInspector.TabbedEditorContainer.prototype._editorClosedByUserAction):
        (WebInspector.TabbedEditorContainer.prototype._updateHistory.tabIdToURI):
        (WebInspector.TabbedEditorContainer.prototype._updateHistory):
        (WebInspector.TabbedEditorContainer.prototype._appendFileTab):
        (WebInspector.TabbedEditorContainer.prototype.reset):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.uri):
        * inspector/front-end/Workspace.js:
        (WebInspector.FileDescriptor):
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):
        (WebInspector.Project.prototype.uiSourceCodeForURI):
        (WebInspector.Workspace):
        (WebInspector.Workspace.prototype.uiSourceCodeForURI):
        (WebInspector.Workspace.prototype.addTemporaryUISourceCode):
        (WebInspector.Workspace.prototype.removeTemporaryUISourceCode):
        (WebInspector.Workspace.prototype.requestFileContent):
        (WebInspector.Workspace.prototype.setFileContent):
        (WebInspector.Workspace.prototype.searchInFileContent):
        (WebInspector.Workspace.prototype.reset):
        * inspector/front-end/inspector.js:

2012-12-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: debugger should step into event handler on event dispatch
        https://bugs.webkit.org/show_bug.cgi?id=105827

        Reviewed by Pavel Feldman.

        Added m_pauseInNextEventListener to InspectorDOMDebuggerAgent. The flag is set
        to true when "step into" is pressed and reset to false when either JS execution
        pauses, the agent gets disabled or JS call stack becomes empty. If the flag is
        true and the next JS stetement to be executed belongs to a JS event listener we
        will stop in that listener, otherwise we have two options:
          1) Control flow directly(without comming through the native bindings) reaches some JS
             statement and will pause in the corresponding JS function, in which case the
             flag will be reset;
          2) JS call stack becomes empty and execution will continue in the native code. We
             use didProcessTask to detect such cases and reset the flag to false every time
             event queue finishes next task.

        Test: inspector/debugger/debugger-step-into-event-listener.html

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::reportMemoryUsage):
        (WebCore::InspectorController::didProcessTask):
        * inspector/InspectorController.h:
        (WebCore):
        (InspectorController):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::stepInto):
        (WebCore):
        (WebCore::InspectorDOMDebuggerAgent::didPause):
        (WebCore::InspectorDOMDebuggerAgent::cancelStepIntoEventListener):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::clear):
        * inspector/InspectorDOMDebuggerAgent.h:
        (InspectorDOMDebuggerAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::stepInto):
        (WebCore::InspectorDebuggerAgent::didPause):
        * inspector/InspectorDebuggerAgent.h:
        (Listener):

2012-12-28  Andrey Lushnikov  <lushnikov@chromium.com>

        Web Inspector: enable mutation observer in LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=105826

        Reviewed by Pavel Feldman.

        Enable mutation observer in LayoutTests.

        No new tests: no change in behaviour.

        * inspector/front-end/DOMExtension.js:

2012-12-28  Philippe Normand  <pnormand@igalia.com>

        [GTK] Some GStreamer-related files don't need to be in libWebCoreGTK
        https://bugs.webkit.org/show_bug.cgi?id=105807

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: Move some modules not using GTK nor Cairo
        to libWebCorePlatform.

2012-12-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: rename distanceToWindow to distance
        https://bugs.webkit.org/show_bug.cgi?id=105823

        Reviewed by Pavel Feldman.

        Renamed distanceToWindow to distance. Introduced a method on HeapSnapshot
        that allows to check if given node should be displayed to the user as having
        distance 1.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotEdge.prototype.serialize):
        (WebInspector.HeapSnapshotRetainerEdge.prototype.serialize):
        (WebInspector.HeapSnapshotNode.prototype.distance):
        (WebInspector.HeapSnapshotNode.prototype.serialize):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.canHaveDistanceOne):
        (WebInspector.HeapSnapshot.prototype._calculateDistances):
        (WebInspector.HeapSnapshot.prototype._bfs):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        * inspector/front-end/HeapSnapshotDataGrids.js:
        (WebInspector.HeapSnapshotRetainmentDataGrid):
        (WebInspector.HeapSnapshotRetainmentDataGrid.prototype._sortFields):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype._sortFields):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype.comparator):
        (WebInspector.HeapSnapshotObjectNode.prototype._enhanceData):
        (WebInspector.HeapSnapshotInstanceNode.prototype.comparator):
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype.comparator):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get data):
        * inspector/front-end/JSHeapSnapshot.js:
        (WebInspector.JSHeapSnapshot.prototype.canHaveDistanceOne):

2012-12-28  Andrey Lushnikov  <lushnikov@chromium.com>

        Web Inspector: refactor DefaultTextEditor's private methods
        https://bugs.webkit.org/show_bug.cgi?id=105797

        Reviewed by Pavel Feldman.

        - Refactor private methods to public if they are called from external classes
        - Get rid of external private variable access.

        No tests: no change in behaviour.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.freeCachedElements):
        (WebInspector.DefaultTextEditor.prototype._handleTextInput):
        (WebInspector.DefaultTextEditor.prototype._handleKeyDown):
        (WebInspector.DefaultTextEditor.prototype._handleCut):
        (WebInspector.DefaultTextEditor.prototype._contextMenu):
        (WebInspector.DefaultTextEditor.prototype._handleScrollChanged):
        (WebInspector.DefaultTextEditor.prototype.selection):
        (WebInspector.DefaultTextEditor.prototype.lastSelection):
        (WebInspector.DefaultTextEditor.prototype.setSelection):
        (WebInspector.DefaultTextEditor.prototype.wasShown):
        (WebInspector.DefaultTextEditor.prototype._handleFocused):
        (WebInspector.DefaultTextEditor.prototype.willHide):
        (WebInspector.DefaultTextEditor.prototype.highlightExpression):
        (WebInspector.DefaultTextEditor.prototype.overrideViewportForTest):
        (WebInspector.TextEditorChunkedPanel.prototype.buildChunks):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorChunkedPanel.prototype.splitChunkOnALine):
        (WebInspector.TextEditorChunkedPanel.prototype.createNewChunk):
        (WebInspector.TextEditorChunkedPanel.prototype.scroll):
        (WebInspector.TextEditorChunkedPanel.prototype._scheduleRepaintAll):
        (WebInspector.TextEditorChunkedPanel.prototype.endUpdates):
        (WebInspector.TextEditorChunkedPanel.prototype.chunkForLine):
        (WebInspector.TextEditorChunkedPanel.prototype.findVisibleChunks):
        (WebInspector.TextEditorChunkedPanel.prototype.repaintAll):
        (WebInspector.TextEditorChunkedPanel.prototype.scrollTop):
        (WebInspector.TextEditorChunkedPanel.prototype.clientHeight):
        (WebInspector.TextEditorChunkedPanel.prototype.expandChunks):
        (WebInspector.TextEditorChunkedPanel.prototype.totalHeight):
        (WebInspector.TextEditorChunkedPanel.prototype.resize):
        (WebInspector.TextEditorGutterPanel):
        (WebInspector.TextEditorGutterPanel.prototype.freeCachedElements):
        (WebInspector.TextEditorGutterPanel.prototype.createNewChunk):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorGutterChunk.prototype.get height):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.wasShown):
        (WebInspector.TextEditorMainPanel.prototype.willHide):
        (WebInspector.TextEditorMainPanel.prototype.highlightLine):
        (WebInspector.TextEditorMainPanel.prototype.freeCachedElements):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey):
        (WebInspector.TextEditorMainPanel.prototype.splitChunkOnALine):
        (WebInspector.TextEditorMainPanel.prototype.buildChunks):
        (WebInspector.TextEditorMainPanel.prototype.createNewChunk):
        (WebInspector.TextEditorMainPanel.prototype.expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._schedulePaintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLineChunks):
        (WebInspector.TextEditorMainPanel.prototype.getSelection):
        (WebInspector.TextEditorMainPanel.prototype.getLastSelection):
        (WebInspector.TextEditorMainPanel.prototype.setLastSelection):
        (WebInspector.TextEditorMainPanel.prototype.restoreSelection):
        (WebInspector.TextEditorMainPanel.prototype._selectionToPosition):
        (WebInspector.TextEditorMainPanel.prototype.enclosingLineRowOrSelf):
        (WebInspector.TextEditorMainPanel.prototype._createLink):
        (WebInspector.TextEditorMainPanel.prototype._collectDirtyLines):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._guessEditRangeBasedOnSelection):
        (WebInspector.TextEditorMainPanel.prototype._removeDecorationsInRange):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        (WebInspector.TextEditorMainPanel.prototype._updateHighlightsForRange):
        (WebInspector.TextEditorMainPanel.prototype.handleSelectionChange):
        (WebInspector.TextEditorMainPanel.prototype.handleTextInput):
        (WebInspector.TextEditorMainPanel.prototype.handleKeyDown):
        (WebInspector.TextEditorMainPanel.prototype.handleCut):
        (WebInspector.TextEditorMainPanel.prototype.overrideViewportForTest):
        (WebInspector.TextEditorMainChunk.prototype.get height):

2012-12-28  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Add GLES2 support in GraphicsContext3DEfl.
        https://bugs.webkit.org/show_bug.cgi?id=105805

        Reviewed by Kenneth Rohde Christiansen.

        This is in preparation for adding GLES2 support.
        This patch adds OPENGL_ES_2 checks in GraphicsContext3DEFl.
        With this patch, GraphicsContext3DPrivate uses the FramebufferBlit extension supported by Extensions3D.

        * platform/graphics/GraphicsContext3D.h:
        (GraphicsContext3D):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (GraphicsContext3DPrivate::copyToGraphicsSurface):
        * platform/graphics/opengl/GLDefs.h:

2012-12-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix styling/formatting errors, pointed out by Darin Adler while reviewing
        https://bugs.webkit.org/show_bug.cgi?id=105752

        No functional changes, thus no new tests.

        * dom/VisitedLinkState.cpp:
        (WebCore::VisitedLinkState::VisitedLinkState): Fixed up constructor syntax.
        (WebCore::linkHashForElement): Expanded abbreviation.

2012-12-27  Mike West  <mkwst@chromium.org>

        Add context to the console message generated by Document::printNavigationErrorMessage.
        https://bugs.webkit.org/show_bug.cgi?id=105774

        Reviewed by Darin Adler.

        When blocking frame navigations, we should give developers more
        contextual detail about why the navigation has been blocked. This patch
        adds context specifically for sandboxed frames', and gives a slightly
        more detailed generic response for all other blockages.

        No new tests; the changes to the error message are covered via
        rebaselines to existing navigation tests.

        * dom/Document.cpp:
        (WebCore::printNavigationErrorMessage):
        (WebCore::Document::canNavigate):
            Pass in a 'reason' parameter when calling printNavigationErrorMessage
            to report a blocked navigation.

2012-12-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Move visited link-checking (and caching) code out of SelectorChecker.
        https://bugs.webkit.org/show_bug.cgi?id=105752

        SelectorChecker knew too much about visited links and how links are stored in DOM. This change
        moves the code to more relevant locations and moves the visited links cache all the way up to Document,
        introducing VisitedLinkState class to manage the state of visited links.
        Relanding without a null-ptr ref.

        Reviewed by Antti Koivisto.

        No change in behavior, covered by existing tests.

        * CMakeLists.txt: Added VisitedLinkState to build system.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/SelectorChecker.cpp: Moved visited-link state code out to VisitedLinkState class.
        * css/SelectorChecker.h: Ditto.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::initElement): Changed callsite to use VisitedLinkState.
        * css/StyleResolver.h: Removed plumb-throughs that are now unnecessary.
        * dom/DOMAllInOne.cpp: Added VisitedLinkState to build system.
        * dom/Document.cpp: Added VisitedLinkState initalizer.
        * dom/Document.h: Added VisitedLinkState member.
        * dom/VisitedLinkState.cpp: Added.
        * dom/VisitedLinkState.h: Added.
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Changed callsite to use VisitedLinkState.
        * page/Page.cpp:
        (WebCore::Page::allVisitedStateChanged): Ditto.
        (WebCore::Page::visitedStateChanged): Ditto.

2012-12-27  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Implement EGL support with GLX.
        https://bugs.webkit.org/show_bug.cgi?id=105602

        Reviewed by Kenneth Rohde Christiansen.

        This is in preparation for adding GLES2 support.
        This patch adds support for EGL with GLX backend. EGL support can be enabled during compile time
        by passing -DENABLE_EGL=ON as cmake config parameter. This is disabled by default.

        * PlatformEfl.cmake:
        * platform/graphics/opengl/GLDefs.h:
        (WebCore):
        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore):
        (WebCore::GLPlatformContext::createContext): Added GLX checks.
        (WebCore::GLPlatformContext::createOffScreenContext): Added support for creating EGLOffscreen Context.
        (WebCore::GLPlatformContext::createCurrentContextWrapper): Added support for creating EGLCurrentContextWrapper.
        * platform/graphics/opengl/GLPlatformContext.h:
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createTransportSurface): Added support for creating EGLSurface.

        * platform/graphics/surfaces/egl/EGLContext.cpp: Added.
        (WebCore):
        (WebCore::isRobustnessExtSupported):
        (WebCore::EGLCurrentContextWrapper::EGLCurrentContextWrapper):
        (WebCore::EGLCurrentContextWrapper::handle):
        (WebCore::EGLOffScreenContext::EGLOffScreenContext):
        (WebCore::EGLOffScreenContext::initialize):
        (WebCore::EGLOffScreenContext::~EGLOffScreenContext):
        (WebCore::EGLOffScreenContext::isCurrentContext):
        (WebCore::EGLOffScreenContext::platformMakeCurrent):
        (WebCore::EGLOffScreenContext::platformReleaseCurrent):
        (WebCore::EGLOffScreenContext::freeResources):
        (WebCore::EGLOffScreenContext::destroy):
        * platform/graphics/surfaces/egl/EGLContext.h:
        (WebCore):
        (EGLCurrentContextWrapper):
        (WebCore::EGLCurrentContextWrapper::~EGLCurrentContextWrapper):
        (EGLOffScreenContext):

        EGL implementation for Context Management.

        * platform/graphics/surfaces/egl/EGLSurface.cpp: Added.
        (WebCore):
        (WebCore::EGLWindowTransportSurface::EGLWindowTransportSurface):
        (WebCore::EGLWindowTransportSurface::~EGLWindowTransportSurface):
        (WebCore::EGLWindowTransportSurface::configuration):
        (WebCore::EGLWindowTransportSurface::swapBuffers):
        (WebCore::EGLWindowTransportSurface::destroy):
        (WebCore::EGLWindowTransportSurface::freeEGLResources):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        (WebCore):
        (EGLWindowTransportSurface):

        EGL implementation for Offscreen Surface. The surface is backed by native window.

        * platform/graphics/surfaces/egl/EGLConfigHelper.cpp: Added.
        (WebCore):
        (WebCore::SharedEGLDisplay::deref):
        (WebCore::SharedEGLDisplay::sharedEGLDisplay):
        (WebCore::SharedEGLDisplay::SharedEGLDisplay):
        (WebCore::SharedEGLDisplay::cleanup):
        (WebCore::SharedEGLDisplay::~SharedEGLDisplay):
        (WebCore::EGLConfigHelper::EGLConfigHelper):
        (WebCore::EGLConfigHelper::~EGLConfigHelper):
        (WebCore::EGLConfigHelper::display):
        (WebCore::EGLConfigHelper::pBufferContextConfig):
        (WebCore::EGLConfigHelper::surfaceContextConfig):
        (WebCore::EGLConfigHelper::nativeVisualId):
        (WebCore::EGLConfigHelper::reset):
        (WebCore::EGLConfigHelper::createConfig):

        Helper class to initialize EGL resources and choose right EGL configuration.

2012-12-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138509.
        http://trac.webkit.org/changeset/138509
        https://bugs.webkit.org/show_bug.cgi?id=105806

        Caused several tests to crash (Requested by fsamuel on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/SelectorChecker.cpp:
        (WebCore::linkAttribute):
        (WebCore):
        (WebCore::SelectorChecker::determineLinkStateSlowCase):
        (WebCore::SelectorChecker::allVisitedStateChanged):
        (WebCore::SelectorChecker::visitedStateChanged):
        * css/SelectorChecker.h:
        (SelectorChecker):
        (WebCore::SelectorChecker::determineLinkState):
        (WebCore):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::initElement):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::allVisitedStateChanged):
        (WebCore::StyleResolver::visitedStateChanged):
        (StyleResolver):
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore):
        (Document):
        * dom/VisitedLinkState.cpp: Removed.
        * dom/VisitedLinkState.h: Removed.
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * page/Page.cpp:
        (WebCore::Page::allVisitedStateChanged):
        (WebCore::Page::visitedStateChanged):

2012-12-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Move visited link-checking (and caching) code out of SelectorChecker.
        https://bugs.webkit.org/show_bug.cgi?id=105752

        SelectorChecker knew too much about visited links and how links are stored in DOM. This change
        moves the code to more relevant locations and moves the visited links cache all the way up to Document,
        introducing VisitedLinkState class to manage the state of visited links.

        Reviewed by Antti Koivisto.

        No change in behavior, covered by existing tests.

        * CMakeLists.txt: Added VisitedLinkState to build system.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/SelectorChecker.cpp: Moved visited-link state code out to VisitedLinkState class.
        * css/SelectorChecker.h: Ditto.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::initElement): Changed callsite to use VisitedLinkState.
        * css/StyleResolver.h: Removed plumb-throughs that are now unnecessary.
        * dom/DOMAllInOne.cpp: Added VisitedLinkState to build system.
        * dom/Document.cpp: Added VisitedLinkState initalizer.
        * dom/Document.h: Added VisitedLinkState member.
        * dom/VisitedLinkState.cpp: Added.
        * dom/VisitedLinkState.h: Added.
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Changed callsite to use VisitedLinkState.
        * page/Page.cpp:
        (WebCore::Page::allVisitedStateChanged): Ditto.
        (WebCore::Page::visitedStateChanged): Ditto.

2012-12-27  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Minor refactoring of TextureMapperLayer.
        https://bugs.webkit.org/show_bug.cgi?id=105782

        Reviewed by Darin Adler.

        This patch has two refactorings.
        1. Replace TextureMapperPaintOptions from header to implementation file.
        2. Add non copyable property to TextureMapperLayer.

        No new tests. Refactoring only.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (TextureMapperPaintOptions):
        (WebCore::TextureMapperPaintOptions::TextureMapperPaintOptions):
        (WebCore):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore):
        (TextureMapperLayer):

2012-12-27  Yury Semikhatsky  <yurys@chromium.org>

       Unreviewed. Use real worker in heap profiler instead of the fake one
       (was accidentally switched to the fake worker).

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

2012-12-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Can not set breakpoints in scripts loaded with source map.
        https://bugs.webkit.org/show_bug.cgi?id=105801

        Reviewed by Alexander Pavlov.

        ResourceScriptMapping now pushes itself to script's source mappings in addScript method.
        Binding script to uiSourceCode loaded later is only triggering updateLocations() now.

        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        (WebInspector.ResourceScriptMapping.prototype._bindUISourceCodeToScripts):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.disableSourceMapping):
        (WebInspector.Script.prototype.enableSourceMapping):
        (WebInspector.Script.prototype.pushSourceMapping):
        (WebInspector.Script.prototype.popSourceMapping):
        (WebInspector.Script.prototype.updateLocations):

2012-12-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: remove support for legacy heap graph node format
        https://bugs.webkit.org/show_bug.cgi?id=105802

        Reviewed by Pavel Feldman.

        Removed support for old heap graph node format: we now always store edge count
        in each node instead of the first edge index.

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildEdgeIndexes):

2012-12-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: move js heap snapshot preprocessing to JSHeapSnapshot
        https://bugs.webkit.org/show_bug.cgi?id=105798

        Reviewed by Pavel Feldman.

        HeapSnapshot.js refactorings:
        - moved _markInvisibleEdges implementation into JSHeapSnapshot
        - moved _calculateFlags implementation into JSHeapSnapshot
        - moved _flags array into JSHeapSnapshot
        - instead of returning node flags as a field on each node, requesting
          snapshot node flag constants from the heap snapshot worker and then
          checking for the flags in HeapSnapshotGridNodes now return two optional
          boolean fields on each node: canBeQueried and detachedDOMTreeNode
        - removed unused propertyAccessor property from serialized heap node
        - moved node and edge serialization from providers to the node and edge
          classes, js specific fields are serialized only for JSHeapSnapshotNode
        - renamed first() to rewind() on providers and iterators

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotEdge.prototype.serialize):
        (WebInspector.HeapSnapshotEdgeIterator.prototype.rewind):
        (WebInspector.HeapSnapshotRetainerEdge.prototype.serialize):
        (WebInspector.HeapSnapshotRetainerEdgeIterator.prototype.rewind):
        (WebInspector.HeapSnapshotNode.prototype.isUserObject):
        (WebInspector.HeapSnapshotNode.prototype.serialize):
        (WebInspector.HeapSnapshotNodeIterator.prototype.rewind):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._calculateClassesRetainedSize):
        (WebInspector.HeapSnapshot.prototype._buildPostOrderIndex):
        (WebInspector.HeapSnapshot.prototype._buildDominatorTree):
        (WebInspector.HeapSnapshot.prototype._markInvisibleEdges):
        (WebInspector.HeapSnapshot.prototype._calculateFlags):
        (WebInspector.HeapSnapshot.prototype.userObjectsMapAndFlag):
        (WebInspector.HeapSnapshot.prototype.):
        (WebInspector.HeapSnapshot.prototype.createNodesProviderForClass):
        (WebInspector.HeapSnapshot.prototype.updateStaticData):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype._createIterationOrder):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.rewind):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.isEmpty):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.serializeItemsRange):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.sortAndRewind):
        * inspector/front-end/HeapSnapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotObjectNode):
        * inspector/front-end/HeapSnapshotProxy.js:
        * inspector/front-end/JSHeapSnapshot.js:
        (WebInspector.JSHeapSnapshot):
        (WebInspector.JSHeapSnapshot.prototype._markInvisibleEdges):
        (WebInspector.JSHeapSnapshot.prototype._calculateFlags):
        (WebInspector.JSHeapSnapshot.prototype.userObjectsMapAndFlag):
        (WebInspector.JSHeapSnapshot.prototype._flagsOfNode):
        (WebInspector.JSHeapSnapshot.prototype._markDetachedDOMTreeNodes):
        (WebInspector.JSHeapSnapshot.prototype._markQueriableHeapObjects):
        (WebInspector.JSHeapSnapshot.prototype._markPageOwnedNodes):
        (WebInspector.JSHeapSnapshotNode.prototype.isUserObject):
        (WebInspector.JSHeapSnapshotNode.prototype.serialize):

2012-12-27  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Refactor SourceMapParser to enable range-based sourcemap
        https://bugs.webkit.org/show_bug.cgi?id=105764

        Reviewed by Vsevolod Vlasov.

        Test: inspector/styles/range-based-mapping.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping):
        (WebInspector.CompilerScriptMapping.prototype.loadSourceMapForScript):
        * inspector/front-end/SourceMap.js: Copied from Source/WebCore/inspector/front-end/CompilerScriptMapping.js.
        (WebInspector.SourceMap):
          Abstract. Renamed from SourceMapParser and supports only direct (generated -> originating source) mapping via findEntry()
        (WebInspector.SourceMap.prototype.sources):
        (WebInspector.SourceMap.prototype.sourceContent):
        (WebInspector.SourceMap.prototype._parseMappingPayload):
        (WebInspector.SourceMap.prototype._parseSections):
        (WebInspector.SourceMap.prototype._parseMap):
        (WebInspector.SourceMap.prototype._isSeparator):
        (WebInspector.SourceMap.prototype._decodeVLQ):
        (WebInspector.SourceMap.prototype._canonicalizeURL):
        (WebInspector.SourceMap.StringCharIterator):
        (WebInspector.SourceMap.StringCharIterator.prototype.next):
        (WebInspector.SourceMap.StringCharIterator.prototype.peek):
        (WebInspector.SourceMap.StringCharIterator.prototype.hasNext):
        (WebInspector.PositionBasedSourceMap):
          Extends SourceMap and provides direct (compiled -> original source)
          and reverse (original -> compiled source) position mapping via findEntryReversed().
        (WebInspector.PositionBasedSourceMap.prototype.findEntry):
        (WebInspector.PositionBasedSourceMap.prototype.findEntryReversed):
        (WebInspector.PositionBasedSourceMap.prototype._parseMap):
        (WebInspector.RangeBasedSourceMap):
          Extends SourceMap and provides direct range mapping
          (compiled source position -> original source range) via findSourceRange().
        (WebInspector.RangeBasedSourceMap.MappingComparator):
        (WebInspector.RangeBasedSourceMap.prototype.findSourceRange):
        (WebInspector.RangeBasedSourceMap.prototype._rangeForStartIndex):
        (WebInspector.SourceRange):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-12-25  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] report if there is any uninstrumented canvas on a page
        https://bugs.webkit.org/show_bug.cgi?id=105721

        Reviewed by Yury Semikhatsky.

        Adding a method to the protocol to report if there is any uninstrumented canvas on a page.

        Test: inspector/profiler/canvas2d/canvas-has-uninstrumented-canvases.html

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::hasUninstrumentedCanvases):
        (WebCore):
        (WebCore::InspectorCanvasAgent::captureFrame):
        (WebCore::InspectorCanvasAgent::startCapturing):
        (WebCore::InspectorCanvasAgent::stopCapturing):
        (WebCore::InspectorCanvasAgent::getTraceLog):
        (WebCore::InspectorCanvasAgent::replayTraceLog):
        (WebCore::InspectorCanvasAgent::ensureHasUninstrumentedCanvasesCalculated):
        (WebCore::InspectorCanvasAgent::checkIsEnabled):
        (WebCore::InspectorCanvasAgent::reset):
        * inspector/InspectorCanvasAgent.h:
        (WebCore):
        (InspectorCanvasAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):

2012-12-27  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Simplify script mappings by introducing DefaultScriptMapping.
        https://bugs.webkit.org/show_bug.cgi?id=103038

        Reviewed by Pavel Feldman.

        DefaultScriptMapping creates a uiSourceCode for each script and set itself as a mapping for the script.
        Script can now have a stack of (possibly disabled) mappings, allowing to try several mappings when calculating uiLocation.
        LiveEditSupport object is added on WebInspector to support live editing of readonly DefaultScriptMapping's uiSourceCodes.
        DefaultScriptMapping is now the only mapping that creates temporary uiSourceCodes.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.sourceFileId):
        (WebInspector.BreakpointManager.Breakpoint.prototype._breakpointStorageId):
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping):
        (WebInspector.CompilerScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.CompilerScriptMapping.prototype.uiLocationToRawLocation):
        (WebInspector.CompilerScriptMapping.prototype._reset):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        * inspector/front-end/DebuggerScriptMapping.js:
        (WebInspector.DebuggerScriptMapping):
        * inspector/front-end/DefaultScriptMapping.js: Added.
        * inspector/front-end/LiveEditSupport.js: Added.
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeAddedToWorkspace):
        (WebInspector.ResourceScriptMapping.prototype._hasMergedToVM):
        (WebInspector.ResourceScriptMapping.prototype._hasDivergedFromVM):
        (WebInspector.ResourceScriptMapping.prototype._workspaceUISourceCodeForScript):
        (WebInspector.ResourceScriptMapping.prototype._scriptsForUISourceCode):
        (WebInspector.ResourceScriptMapping.prototype._bindUISourceCodeToScripts):
        (WebInspector.ResourceScriptMapping.prototype._reset):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.):
        (WebInspector.Script.prototype.editSource):
        (WebInspector.Script.prototype.setIsDynamicScript):
        (WebInspector.Script.prototype.isDynamicScript):
        (WebInspector.Script.prototype.rawLocationToUILocation):
        (WebInspector.Script.prototype._enabledSourceMappings):
        (WebInspector.Script.prototype._sourceMappingsDiffer):
        (WebInspector.Script.prototype.disableSourceMapping):
        (WebInspector.Script.prototype.enableSourceMapping):
        (WebInspector.Script.prototype.pushSourceMapping):
        (WebInspector.Script.prototype.popSourceMapping):
        (WebInspector.Script.prototype._updateLocations):
        (WebInspector.Script.prototype.createLiveLocation):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._projectWillReset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addUISourceCode):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeRemoved):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/Workspace.js:
        (WebInspector.Workspace.prototype.addTemporaryUISourceCode):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2012-12-27  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: console.profileEnd() crashes if called without arguments
        https://bugs.webkit.org/show_bug.cgi?id=105759

        Reviewed by Vsevolod Vlasov.

        Test: inspector/profiler/cpu-profiler-parameterless-profile-end-crash.html

        API allows to finish profile without specifying its name.
        Profiler tracks profiles stack and finishes outermost profile.
        Finished profile title will be used instead of user-specified one.

        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::stop): Use title provided by profiler.

2012-12-26  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Instead of having multiple shaders sources with lots of duplication, we should have one shader source with MACRO variants
        https://bugs.webkit.org/show_bug.cgi?id=104815

        Reviewed by Kenneth Rohde Christiansen.

        Created templates for the vertex and fragment shaders, and added some MACROs in 
        TextureMapperShaderManager to allow GLSL precompiler-based configuration.

        The template follows a pattern where the main function in the shader calls
        applyFooBarIfNeeded(), while applyFooBar() is implemented. The Macros prepended to the template define whether applyIfNeeded resolves to the real function or to a noop.

        In addition, made some small changes to the filter shaders so that they can use the same code as the normal shaders.

        Covered by existing pixel/ref tests when run on Qt/EFL/GTK.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::TextureMapperGL::drawTextureWithAntialiasing):
        (WebCore::optionsForFilterType):
        (WebCore):
        (WebCore::getPassesRequiredForFilter):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::BitmapTextureGL::applyFilters):
            Always draw using the drawQuad function, and use the new TextureMapperShaderManager::Options mask instead of the old ShaderKey.

        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore):
        (WebCore::getShaderSpec):
        (WebCore::TextureMapperShaderManager::getShaderProgram):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):
        (TextureMapperShaderManager):

2012-12-26  Huang Dongsung  <luxtella@company100.net>

        [TexMap] A Minor optimization of GraphicsLayerTransform.
        https://bugs.webkit.org/show_bug.cgi?id=105758

        Reviewed by Noam Rosenthal.

        Only multiply the transformation matrices if the paramaters are actually
        changed.

        This optimizes the code path called from flushCompositingStateForThisLayerOnly(),
        and potentially setAnimatedTransform().

        No new tests. Refactoring only.

        * platform/graphics/GraphicsLayerTransform.cpp:
        (WebCore::GraphicsLayerTransform::setPosition):
        (WebCore::GraphicsLayerTransform::setSize):
        (WebCore::GraphicsLayerTransform::setAnchorPoint):
        (WebCore::GraphicsLayerTransform::setFlattening):
        (WebCore::GraphicsLayerTransform::setLocalTransform):
        (WebCore::GraphicsLayerTransform::setChildrenTransform):

2012-12-26  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Remove unused members and methods in TextureMapperLayer.
        https://bugs.webkit.org/show_bug.cgi?id=105755

        Reviewed by Noam Rosenthal.

        No new tests. Refactoring only.

        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):
        (State):
        (WebCore::TextureMapperLayer::State::State):

2012-12-26  Andreas Kling  <akling@apple.com>

        [Mac] MemoryPressureHandler: Occasional crashes in uninstall() when responding to memory pressure signal.
        <http://webkit.org/b/105772>

        Reviewed by Stephanie Lewis.

        We can't synchronously dereference _cache_event_source in uninstall() just because m_installed
        is true -- the block that initializes _cache_event_source is asynchronous and may not have executed.
        Fix this by performing the uninstallation asynchronously on the main queue as well.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::uninstall):

2012-12-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137905.
        http://trac.webkit.org/changeset/137905
        https://bugs.webkit.org/show_bug.cgi?id=105765

        Popover does not disappear when hovering another identifier in
        sources panel. (Requested by vsevik on #webkit).

        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype._innerShow):
        * inspector/front-end/popover.css:
        (.popover):

2012-12-26  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Resources] Table lose focus (selection) after deleting cookie.
        https://bugs.webkit.org/show_bug.cgi?id=105716

        Reviewed by Yury Semikhatsky.

        This makes deletion of a set of cookies (using keyboard) painful.

        * inspector/front-end/CookieItemsView.js: Call method instead of getter.
        * inspector/front-end/CookiesTable.js: Remember and use next selected
        cookie value.

2012-12-26  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: extract JS heap profiler specifics into JSHeapSnapshot.js
        https://bugs.webkit.org/show_bug.cgi?id=105768

        Reviewed by Pavel Feldman.

        Inroduced JSHeapSnapshot, JSHeapSnapshotNode, JSHeapSnapshotEdge and JSHeapSnapshotRetainerEdge which
        should encapsulate logic specific to JS-heap.
        No behavioral changes, covered with existing heap profiler tests.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotEdge.prototype.hasStringName):
        (WebInspector.HeapSnapshotEdge.prototype.name):
        (WebInspector.HeapSnapshotEdge.prototype.node):
        (WebInspector.HeapSnapshotEdge.prototype.toString):
        (WebInspector.HeapSnapshotRetainerEdge.prototype._node):
        (WebInspector.HeapSnapshotRetainerEdge.prototype._edge):
        (WebInspector.HeapSnapshotNode.prototype.className):
        (WebInspector.HeapSnapshotNode.prototype.classIndex):
        (WebInspector.HeapSnapshotNode.prototype.edges):
        (WebInspector.HeapSnapshotNode.prototype.id):
        (WebInspector.HeapSnapshotNode.prototype.retainers):
        (WebInspector.HeapSnapshot.prototype.createNode):
        (WebInspector.HeapSnapshot.prototype.createEdge):
        (WebInspector.HeapSnapshot.prototype.createRetainingEdge):
        (WebInspector.HeapSnapshot.prototype.rootNode):
        (WebInspector.HeapSnapshot.prototype.aggregatesForDiff):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._calculateClassesRetainedSize):
        (WebInspector.HeapSnapshot.prototype._sortAggregateIndexes):
        (WebInspector.HeapSnapshot.prototype._calculateDiffForClass):
        (WebInspector.HeapSnapshot.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshot.prototype.createRetainingEdgesProvider):
        (WebInspector.HeapSnapshot.prototype.createNodesProviderForDominator):
        (WebInspector.HeapSnapshotNodesProvider.prototype.nodePosition):
        * inspector/front-end/HeapSnapshotLoader.js:
        (WebInspector.HeapSnapshotLoader.prototype.buildSnapshot):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotWorker):
        * inspector/front-end/HeapSnapshotWorker.js:
        * inspector/front-end/JSHeapSnapshot.js: Added.
        (WebInspector.JSHeapSnapshot):
        (WebInspector.JSHeapSnapshot.prototype.createNode):
        (WebInspector.JSHeapSnapshot.prototype.createEdge):
        (WebInspector.JSHeapSnapshot.prototype.createRetainingEdge):
        (WebInspector.JSHeapSnapshotNode):
        (WebInspector.JSHeapSnapshotNode.prototype.canBeQueried):
        (WebInspector.JSHeapSnapshotNode.prototype.isPageObject):
        (WebInspector.JSHeapSnapshotNode.prototype.distanceToWindow):
        (WebInspector.JSHeapSnapshotNode.prototype.className):
        (WebInspector.JSHeapSnapshotNode.prototype.classIndex):
        (WebInspector.JSHeapSnapshotNode.prototype.id):
        (WebInspector.JSHeapSnapshotNode.prototype.isHidden):
        (WebInspector.JSHeapSnapshotNode.prototype.isNative):
        (WebInspector.JSHeapSnapshotNode.prototype.isSynthetic):
        (WebInspector.JSHeapSnapshotNode.prototype.isWindow):
        (WebInspector.JSHeapSnapshotNode.prototype.isDetachedDOMTreesRoot):
        (WebInspector.JSHeapSnapshotNode.prototype.isDetachedDOMTree):
        (WebInspector.JSHeapSnapshotEdge):
        (WebInspector.JSHeapSnapshotEdge.prototype.clone):
        (WebInspector.JSHeapSnapshotEdge.prototype.hasStringName):
        (WebInspector.JSHeapSnapshotEdge.prototype.isElement):
        (WebInspector.JSHeapSnapshotEdge.prototype.isHidden):
        (WebInspector.JSHeapSnapshotEdge.prototype.isWeak):
        (WebInspector.JSHeapSnapshotEdge.prototype.isInternal):
        (WebInspector.JSHeapSnapshotEdge.prototype.isInvisible):
        (WebInspector.JSHeapSnapshotEdge.prototype.isShortcut):
        (WebInspector.JSHeapSnapshotEdge.prototype.name):
        (WebInspector.JSHeapSnapshotEdge.prototype.toString):
        (WebInspector.JSHeapSnapshotEdge.prototype._hasStringName):
        (WebInspector.JSHeapSnapshotEdge.prototype._name):
        (WebInspector.JSHeapSnapshotEdge.prototype._nameOrIndex):
        (WebInspector.JSHeapSnapshotEdge.prototype._type):
        (WebInspector.JSHeapSnapshotRetainerEdge):
        (WebInspector.JSHeapSnapshotRetainerEdge.prototype.clone):
        (WebInspector.JSHeapSnapshotRetainerEdge.prototype.isElement):
        (WebInspector.JSHeapSnapshotRetainerEdge.prototype.isHidden):
        (WebInspector.JSHeapSnapshotRetainerEdge.prototype.isInternal):
        (WebInspector.JSHeapSnapshotRetainerEdge.prototype.isInvisible):
        (WebInspector.JSHeapSnapshotRetainerEdge.prototype.isShortcut):
        (WebInspector.JSHeapSnapshotRetainerEdge.prototype.isWeak):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/WebKit.qrc:

2012-12-26  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Build fix for !USE(CFNETWORK) after r138413.

        * platform/network/NetworkStorageSession.h:
        (WebCore):

2012-12-26  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: prepare HeapSnapshot.js for use with native heap snapshot
        https://bugs.webkit.org/show_bug.cgi?id=105763

        Reviewed by Alexander Pavlov.

        HeapSnapshot.js now expects root node to be either the first or the last (real) one
        in the list of all nodes.

        * inspector/HeapGraphSerializer.cpp:
        (HeapGraphNode):
        (WebCore::HeapGraphSerializer::serialize): reordered node and edge fields so that the go in
        the same order as in the JS heap snapshot.
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._buildDominatedNodes):
        * inspector/front-end/NativeHeapGraph.js:
        (WebInspector.NativeHeapGraph):
        (WebInspector.NativeHeapGraph.prototype.root): now there is explicit root node which is the last
        one in the list, use it.
        (WebInspector.NativeHeapGraph.prototype._calculateNodeEdgeIndexes):
        (WebInspector.NativeHeapGraph.prototype._addDummyNode): fixed dummy node first edge index.
        (WebInspector.NativeHeapGraph.Edge.prototype.target):
        (WebInspector.NativeHeapGraph.Node.prototype.referencedNodes):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotNode.prototype._addChildrenFromGraph): switched to use of the root node
        (WebInspector.NativeHeapGraphDataGridRoot.prototype._populate):

2012-12-26  Pan Deng  <pan.deng@intel.com>

        [Web Inspector]Remove Preview and Response tab from network panel in case websocket.
        https://bugs.webkit.org/show_bug.cgi?id=105754

        Reviewed by Pavel Feldman.

        Network item views for websocket is not consistent before/after receiving a frame.
        This change keeps Headers, Frames and Cookies tab for websocket.

        No new tests.

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

2012-12-25  John Griggs  <jgriggs@rim.com>

        [BlackBerry] Media controls are drawn on top of one another for media with unknown duration.
        https://bugs.webkit.org/show_bug.cgi?id=105747

        Reviewed by George Staikos.

        No need to reposition controls when there is no timeline element, this mispositions them in the new design.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::adjustMediaControlStyle):

2012-12-25  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Crash when modifying a rule that has been removed through JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=105718

        Reviewed by Yury Semikhatsky.

        CSSStyleRules should be stored by RefPtr's to avoid using stale pointers to deleted instances.

        Test: inspector/styles/removed-rule-crash.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::ruleForId):
        (WebCore::InspectorStyleSheet::revalidateStyle):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheet::collectFlatRules):
        * inspector/InspectorStyleSheet.h:
        (InspectorStyleSheet):

2012-12-25  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Console] Add "Replay XHR" context menu item for corresponding messages.
        https://bugs.webkit.org/show_bug.cgi?id=105714

        Reviewed by Pavel Feldman.

        Expose "request" value from console message object and use it in console
        context menu generator.

        * inspector/front-end/ConsoleMessage.js: Expose "request".
        * inspector/front-end/ConsoleView.js: Add "Replay XHR" menu item.
        * inspector/front-end/NetworkPanel.js: Fix whitespaces.

2012-12-25  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Make InspectorState instances per-agent, corresponding to JSON map entries in the cookie
        https://bugs.webkit.org/show_bug.cgi?id=105722

        Reviewed by Yury Semikhatsky.

        Inspector state cookie (in JSON format) has become a map (agent name -> "properties object")
        to avoid cross-agent property name clashes in a single property namespace.
        As such, InspectorState corresponds to a single "properties object" and is now per-agent,
        managed by an InspectorCompositeState (which is owned by [Worker]InspectorController).
        Since InspectorCompositeState maps "properties objects" by their agent names, InspectorStates are created
        by InspectorCompositeState in the InspectorBaseAgentInterface ctor, using the respective agent name.

        No new tests, no change in visible behavior.

        * inspector/InspectorAgent.cpp: Pass InspectorCompositeState rather than InspectorState.
        * inspector/InspectorAgent.h: Ditto.
        * inspector/InspectorApplicationCacheAgent.cpp: Ditto.
        * inspector/InspectorApplicationCacheAgent.h: Ditto.
        * inspector/InspectorBaseAgent.cpp: Ditto.
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface):
        Create InspectorState via InspectorCompositeState::createAgentState(agentName).
        * inspector/InspectorBaseAgent.h: Pass InspectorCompositeState rather than InspectorState.
        * inspector/InspectorCSSAgent.cpp: Ditto.
        * inspector/InspectorCSSAgent.h: Ditto.
        * inspector/InspectorCanvasAgent.cpp: Ditto.
        * inspector/InspectorCanvasAgent.h: Ditto.
        * inspector/InspectorConsoleAgent.cpp: Ditto.
        * inspector/InspectorConsoleAgent.h: Ditto.
        * inspector/InspectorController.cpp: Use InspectorCompositeState rather than InspectorState.
        * inspector/InspectorController.h: Ditto.
        * inspector/InspectorDOMAgent.cpp: Pass InspectorCompositeState rather than InspectorState.
        (WebCore::InspectorDOMAgent::InspectorDOMAgent): Ditto.
        * inspector/InspectorDOMAgent.h: Ditto.
        * inspector/InspectorDOMDebuggerAgent.cpp: Ditto.
        * inspector/InspectorDOMDebuggerAgent.h: Ditto.
        * inspector/InspectorDOMStorageAgent.cpp: Ditto.
        * inspector/InspectorDOMStorageAgent.h: Ditto.
        * inspector/InspectorDatabaseAgent.cpp: Ditto.
        * inspector/InspectorDatabaseAgent.h: Ditto.
        * inspector/InspectorDebuggerAgent.cpp: Ditto.
        * inspector/InspectorDebuggerAgent.h: Ditto.
        * inspector/InspectorFileSystemAgent.cpp: Ditto.
        * inspector/InspectorFileSystemAgent.h: Ditto.
        * inspector/InspectorIndexedDBAgent.cpp: Ditto.
        * inspector/InspectorIndexedDBAgent.h: Ditto.
        * inspector/InspectorInputAgent.cpp: Ditto.
        * inspector/InspectorInputAgent.h: Ditto.
        * inspector/InspectorLayerTreeAgent.cpp: Ditto.
        * inspector/InspectorLayerTreeAgent.h: Ditto.
        * inspector/InspectorMemoryAgent.cpp: Ditto.
        * inspector/InspectorMemoryAgent.h: Ditto.
        * inspector/InspectorPageAgent.cpp: Ditto.
        * inspector/InspectorPageAgent.h: Ditto.
        * inspector/InspectorProfilerAgent.cpp: Ditto.
        * inspector/InspectorProfilerAgent.h: Ditto.
        * inspector/InspectorResourceAgent.cpp: Ditto.
        * inspector/InspectorResourceAgent.h: Ditto.
        * inspector/InspectorRuntimeAgent.cpp: Ditto.
        * inspector/InspectorRuntimeAgent.h: Ditto.
        * inspector/InspectorState.cpp: Introduce InspectorCompositeState, refactor.
        (WebCore::InspectorState::updateCookie): Delegates to the owning InspectorCompositeState instance.
        (WebCore::InspectorState::setFromCookie): Gets called from InspectorCompositeState::loadFromCookie().
        (WebCore::InspectorState::remove): Don't forget to update the cookie.
        (WebCore::InspectorCompositeState::createAgentState): Creates an InspectorState instance for a named agent.
        (WebCore::InspectorCompositeState::loadFromCookie): Restores InspectorStates from a cookie.
        (WebCore::InspectorCompositeState::inspectorStateUpdated): Delegate invoked from InspectorState::updateCookie().
        * inspector/InspectorState.h:
        (InspectorStateUpdateListener): InspectorCompositeState API exposed to InspectorState.
        * inspector/InspectorTimelineAgent.cpp: Pass InspectorCompositeState rather than InspectorState.
        * inspector/InspectorTimelineAgent.h: Ditto.
        * inspector/InspectorWorkerAgent.cpp: Ditto.
        * inspector/InspectorWorkerAgent.h: Ditto.
        * inspector/PageConsoleAgent.cpp: Ditto.
        * inspector/PageConsoleAgent.h: Ditto.
        * inspector/PageDebuggerAgent.cpp: Ditto.
        * inspector/PageDebuggerAgent.h: Ditto.
        * inspector/PageRuntimeAgent.cpp: Ditto.
        * inspector/PageRuntimeAgent.h: Ditto.
        * inspector/WorkerConsoleAgent.cpp: Ditto.
        * inspector/WorkerConsoleAgent.h: Ditto.
        * inspector/WorkerDebuggerAgent.cpp: Ditto.
        * inspector/WorkerDebuggerAgent.h: Ditto.
        * inspector/WorkerInspectorController.cpp: Ditto.
        * inspector/WorkerInspectorController.h: Ditto.
        * inspector/WorkerRuntimeAgent.cpp: Ditto.
        * inspector/WorkerRuntimeAgent.h: Ditto.

2012-12-24  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: provide a way to mark a node as a root
        https://bugs.webkit.org/show_bug.cgi?id=105737

        Reviewed by Alexander Pavlov.

        Extended HeapGraphSerializer to add a fake root node with edges to all
        real instrumentation roots.

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::reportNode):
        (WebCore::HeapGraphSerializer::addRootNode):
        (WebCore):
        * inspector/HeapGraphSerializer.h:
        (HeapGraphSerializer):

2012-12-24  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add message listener only in case of standalone test-runner.html
        https://bugs.webkit.org/show_bug.cgi?id=105715

        Reviewed by Pavel Feldman.

        Tell InspectorFrontendAPI that it is launched by standalone test runner so that it
        can decide whether message event listener should be added.

        * inspector/front-end/InspectorFrontendAPI.js:
        * inspector/front-end/test-runner.html:

2012-12-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: propagate member type as edge type to the serialized heap graph.
        https://bugs.webkit.org/show_bug.cgi?id=105725

        Reviewed by Yury Semikhatsky.

        MemoryOwningType was renamed to MemberType.
        Source argument were removed from reportEdge, reportLeaf and other edge related methods because it is not necessary.
        MemberType argument was propagated from MemoryInstrumentation down to HeapGraphSerializer.

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphEdge::HeapGraphEdge):
        (HeapGraphEdge):
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::reportEdge):
        (WebCore::HeapGraphSerializer::reportLeaf):
        (WebCore::HeapGraphSerializer::serialize):
        * inspector/HeapGraphSerializer.h:
        (HeapGraphSerializer):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::reportEdge):
        (WebCore::MemoryInstrumentationClientImpl::reportLeaf):
        * inspector/MemoryInstrumentationImpl.h:
        (MemoryInstrumentationClientImpl):

2012-12-24  Takashi Sakamoto  <tasak@google.com>

        ::first-letter { overflow: -webkit-paged-y } causes crash
        https://bugs.webkit.org/show_bug.cgi?id=105393

        Reviewed by Beth Dakin.

        Should check whether e is available or not before invoking
        e->hasTagName in adjustRenderStyle in StyleResolver.cpp.

        Test: fast/css/pseudo-element-opagedxy-crash.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        If adjustRenderStyle is invoked in pseudoStyleForElement, the given
        element is 0. So e is not available. However if the given style's
        overflowY is OPAGEDX or OPAGEDY, adjustRenderStyle doesn't check
        whether e is available or not before e->hasTagName.
        This causes a crash.

2012-12-24  Alexei Filippov  <alph@chromium.org>

        Web Inspector: add async API for passing renderer process memory stats
        https://bugs.webkit.org/show_bug.cgi?id=105278

        Reviewed by Yury Semikhatsky.

        On some platforms (e.g. Linux) it may take some time to collect
        total process memory information as it involves an IPC out of a
        sandboxed renderer process. So add an async way to collect the statistics.

        * platform/MemoryUsageSupport.cpp:
        (WebCore::MemoryUsageSupport::requestProcessMemorySizes):
        (WebCore):
        * platform/MemoryUsageSupport.h:
        (MemoryUsageSupport):
        (ProcessMemorySizesCallback):
        (WebCore::MemoryUsageSupport::ProcessMemorySizesCallback::~ProcessMemorySizesCallback):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (WebCore::MemoryUsageSupport::requestProcessMemorySizes):
        (WebCore):
        * platform/qt/MemoryUsageSupportQt.cpp:
        (WebCore::MemoryUsageSupport::requestProcessMemorySizes):
        (WebCore):

2012-12-24  Laszlo Gombos  <l.gombos@samsung.com>

        Remove wtf/Platform.h includes from {c|cpp} files
        https://bugs.webkit.org/show_bug.cgi?id=105678

        Reviewed by Kentaro Hara.

        Remove wtf/Platform.h from the include list as it is already
        included in config.h.

        No new tests as there is no new functionality.

        * rendering/svg/RenderSVGRect.cpp:

2012-12-24  Kentaro Hara  <haraken@chromium.org>

        Follow up fixes for r137739
        https://bugs.webkit.org/show_bug.cgi?id=104982

        Reviewed by Ryosuke Niwa.

        Applied darin's comments in https://bugs.webkit.org/show_bug.cgi?id=104982#c18

        No tests. No change in behavior.

        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::nextNode):

2012-12-24  Tiancheng Jiang  <tijiang@rim.com>

        Update BB10 media render theme.
        https://bugs.webkit.org/show_bug.cgi?id=105728

        Reviewed by Rob Buis.

        Internally reviewed by John Griggs.
        Use GL renderer to paint media control.

        * css/mediaControlsBlackBerry.css:
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintMediaSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintMediaSliderThumb):

2012-12-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138436.
        http://trac.webkit.org/changeset/138436
        https://bugs.webkit.org/show_bug.cgi?id=105723

        Asserts on state restoration in debug builds (Requested by
        apavlov on #webkit).

        * inspector/InspectorAgent.cpp:
        (InspectorAgentState):
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::disable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::inspect):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (ApplicationCacheAgentState):
        (WebCore::InspectorApplicationCacheAgent::restore):
        (WebCore::InspectorApplicationCacheAgent::enable):
        * inspector/InspectorCSSAgent.cpp:
        (CSSAgentState):
        (WebCore::InspectorCSSAgent::restore):
        (WebCore::InspectorCSSAgent::enable):
        (WebCore::InspectorCSSAgent::disable):
        * inspector/InspectorCanvasAgent.cpp:
        (CanvasAgentState):
        (WebCore::InspectorCanvasAgent::restore):
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        (WebCore):
        (InspectorController):
        * inspector/InspectorDOMStorageAgent.cpp:
        (DOMStorageAgentState):
        (WebCore::InspectorDOMStorageAgent::restore):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        * inspector/InspectorDatabaseAgent.cpp:
        (DatabaseAgentState):
        (WebCore):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::restore):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::disable):
        * inspector/InspectorFileSystemAgent.cpp:
        (FileSystemAgentState):
        (WebCore):
        (WebCore::InspectorFileSystemAgent::enable):
        (WebCore::InspectorFileSystemAgent::disable):
        (WebCore::InspectorFileSystemAgent::clearFrontend):
        (WebCore::InspectorFileSystemAgent::restore):
        * inspector/InspectorIndexedDBAgent.cpp:
        (IndexedDBAgentState):
        (WebCore):
        (WebCore::InspectorIndexedDBAgent::restore):
        (WebCore::InspectorIndexedDBAgent::enable):
        (WebCore::InspectorIndexedDBAgent::disable):
        * inspector/InspectorLayerTreeAgent.cpp:
        (LayerTreeAgentState):
        (WebCore::InspectorLayerTreeAgent::restore):
        (WebCore::InspectorLayerTreeAgent::enable):
        (WebCore::InspectorLayerTreeAgent::disable):
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::webViewResized):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::removeScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::setDeviceMetricsOverride):
        (WebCore::InspectorPageAgent::setShowPaintRects):
        (WebCore::InspectorPageAgent::setShowFPSCounter):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::applyScreenWidthOverride):
        (WebCore::InspectorPageAgent::applyScreenHeightOverride):
        (WebCore::InspectorPageAgent::didPaint):
        (WebCore::InspectorPageAgent::didLayout):
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        (WebCore::InspectorPageAgent::applyEmulatedMedia):
        * inspector/InspectorResourceAgent.cpp:
        (ResourceAgentState):
        (WebCore::InspectorResourceAgent::restore):
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::disable):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        (WebCore::InspectorState::loadFromCookie):
        (WebCore):
        (WebCore::InspectorState::mute):
        (WebCore::InspectorState::unmute):
        (WebCore::InspectorState::updateCookie):
        (WebCore::InspectorState::remove):
        * inspector/InspectorState.h:
        (WebCore):
        (InspectorState):
        (WebCore::InspectorState::setLong):
        * inspector/InspectorTimelineAgent.cpp:
        (TimelineAgentState):
        (WebCore::InspectorTimelineAgent::restore):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerInspectorController.h:
        (WebCore):
        (WorkerInspectorController):

2012-12-24  Peter Rybin  <prybin@chromium.org>

        Web Inspector: Keep LiveEdit API disabled when idle
        https://bugs.webkit.org/show_bug.cgi?id=104039

        Reviewed by Pavel Feldman.

        Guards are added to LiveEdit call

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setScriptSource):

2012-12-24  Andrey Lushnikov  <lushnikov@chromium.com>

        Web Inspector: refactor TextEditorHighlighter's highlight attributes to dense array
        https://bugs.webkit.org/show_bug.cgi?id=105626

        Reviewed by Pavel Feldman.

        Refactor highlight attributes from sparse array to dense array.

        No new tests: no behaviour changes, coverage provided by existing tests.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._closingBlockOffset):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):

2012-12-21  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Make use of the new InspectorState::remove() in inspector agents
        https://bugs.webkit.org/show_bug.cgi?id=105438

        Reviewed by Yury Semikhatsky.

        This patch introduces the following refactorings:
        - setting property values of InspectorState to "empty" objects has been replaced by removing them from the state;
        - InspectorState instance is no longer shared across agents, so that the property names can no longer clash.
          Instead, InspectorCompositeState creates and owns InspectorState instances for every agent;
        - agent-specific prefix has been stripped from most property names, where it looked synthetic.
        - updateCookie() is called from InspectorState::remove().

        No new tests, as there is no visible change in the behavior.

        * inspector/InspectorAgent.cpp: Agent-specific property name prefix stripped.
        * inspector/InspectorApplicationCacheAgent.cpp: Ditto.
        * inspector/InspectorCSSAgent.cpp: Ditto.
        * inspector/InspectorCanvasAgent.cpp: Ditto.
        * inspector/InspectorController.cpp: Make use of InspectorCompositeState rather than InspectorState.
        * inspector/InspectorController.h: Ditto.
        * inspector/InspectorDOMStorageAgent.cpp: Agent-specific property name prefix stripped.
        * inspector/InspectorDatabaseAgent.cpp: Ditto.
        * inspector/InspectorDebuggerAgent.cpp: Ditto.
        (WebCore::InspectorDebuggerAgent::disable):
        Use "remove" instead of setting an empty object.
        * inspector/InspectorFileSystemAgent.cpp: Agent-specific property name prefix stripped.
        * inspector/InspectorIndexedDBAgent.cpp: Ditto.
        * inspector/InspectorLayerTreeAgent.cpp: Ditto.
        * inspector/InspectorPageAgent.cpp: Ditto.
        (WebCore::InspectorPageAgent::disable):
        Use "remove" instead of setting empty values for certain properties.
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad):
        Remove unnecessary code (object is created and put into the map if none is found).
        * inspector/InspectorResourceAgent.cpp: Agent-specific property name prefix stripped.
        (WebCore::InspectorResourceAgent::disable):
        Use "remove" instead of setting an empty object for userAgentOverride.
        * inspector/InspectorState.cpp: Add InspectorCompositeState.
        (WebCore::InspectorState::setFromCookie): Gets invoked from InspectorCompositeState::loadFromCookie().
        (WebCore::InspectorState::updateCookie): Call updateCookie().
        (WebCore::InspectorCompositeState::createAgentState): Creates an InspectorState instance to be passed to an agent.
        * inspector/InspectorState.h: Add InspectorCompositeState.
        (WebCore::InspectorState::setLong): Fix cast.
        * inspector/InspectorTimelineAgent.cpp: Agent-specific property name prefix stripped.
        * inspector/WorkerInspectorController.cpp: Make use of InspectorCompositeState rather than InspectorState.
        * inspector/WorkerInspectorController.h: Ditto.

2012-12-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Split fast-rejection filter logic off SelectorChecker.
        https://bugs.webkit.org/show_bug.cgi?id=105660

        The awesome Bloom filter and parent stack logic don't need to be in SelectorChecker. They nicely factor out
        into their own pretty thing, named thereby SelectorFilter.

        Reviewed by Eric Seidel.

        No change in functionality, covered by existing tests.

        * CMakeLists.txt: Added SelectorFilter to build systems.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSAllInOne.cpp: Ditto.
        * css/RuleSet.cpp: Changed to use SelectorFilter.
        (WebCore::RuleData::RuleData): Ditto.
        * css/SelectorChecker.cpp: Ditto.
        * css/SelectorChecker.h: Ditto.
        (SelectorChecker):
        * css/StyleResolver.cpp: Ditto.
        (WebCore):
        (WebCore::StyleResolver::pushParentElement): Ditto.
        (WebCore::StyleResolver::popParentElement): Ditto.
        (WebCore::StyleResolver::collectMatchingRulesForList): Ditto.
        * css/StyleResolver.h:
        (StyleResolver): Ditto.

2012-12-23  Qiankun Miao  <qiankun.miao@intel.com>

        Remove unused reference to "class LayerChromium"
        https://bugs.webkit.org/show_bug.cgi?id=105502

        Reviewed by Kentaro Hara.

        class LayerChromium doesn't exist any more. Just remove the unused
        code.

        * platform/graphics/chromium/Canvas2DLayerBridge.h:

2012-12-23  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12808377> Network process should respect cookie accept policy
        https://bugs.webkit.org/show_bug.cgi?id=105684

        Reviewed by Sam Weinig.

        Changed cookie change observer to not use platform strategies, to make it usable
        in NetworkProcess. startObservingCookieChanges() now just takes a callback pointer.

        * WebCore.exp.in:
        * platform/CookiesStrategy.h:
        * platform/network/CookieStorage.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::notifyCookiesChangedOnMainThread):
        (WebCore::startObservingCookieChanges):
        * platform/network/mac/CookieStorageMac.mm:
        (-[WebCookieStorageObjCAdapter notifyCookiesChangedOnMainThread]):
        (-[WebCookieStorageObjCAdapter startListeningForCookieChangeNotificationsWithCallback:]):
        (WebCore::startObservingCookieChanges):

2012-12-23  Tony Chang  <tony@chromium.org>

        [Qt][Mac] Unreviewed fix the build after r138413
        https://bugs.webkit.org/show_bug.cgi?id=105686

        Don't use a temporary const reference so the compiler doesn't make a copy.
        An example compile error (clang):
        Source/WebCore/loader/CookieJar.cpp:73:67: error: copying parameter of type 'WebCore::NetworkStorageSession' invokes deleted constructor
            return platformStrategies()->cookiesStrategy()->cookiesForDOM(SESSION(document), document->firstPartyForCookies(), url);

        * loader/CookieJar.cpp:
        (WebCore::cookies):
        (WebCore::setCookies):
        (WebCore::cookiesEnabled):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

2012-12-22  Alexey Proskuryakov  <ap@apple.com>

        Add a separate class for networking related storage
        https://bugs.webkit.org/show_bug.cgi?id=105676

        Reviewed by Sam Weinig.

        NetworkingContext combines a reference to storage (cookies and more) and data that's
        only meaningful when loading. This makes it very ugly to use for cookie manipulation
        when there is no load (e.g. for document.cookie).

        Adding NetworkStorageSession, which encorportes network-related sesion data, such
        as cookies and session HTTP credentials.

        For some ports, refactoring is not finished, NetworkStorageSession being a wrapper
        for NetworkingContext.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Updated for new files and functions.

        * platform/network/PlatformCookieJar.h:
        * loader/CookieJar.cpp:
        * platform/CookiesStrategy.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/chromium/CookieJarChromium.cpp:
        * platform/network/curl/CookieJarCurl.cpp:
        * platform/network/mac/CookieJarMac.mm:
        * platform/network/qt/CookieJarQt.cpp:
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/win/CookieJarWin.cpp:
        PlatformCookieJar and strategy cookie functions now take a NetworkStorageSession
        instead of NetworkingContext.
        Note that they take a const reference to support creating a temporary session
        wrapper for ports that just wrap a NetworkingContext.

        * loader/ResourceLoader.cpp:
        * loader/cache/CachedResource.h:
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/ResourceHandle.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/chromium/ResourceHandle.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        * platform/network/soup/DNSSoup.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        ResourceHandle no longer includes unneeded NetworkingContext.h and AuthenticationClient.h.
        This avoids near-world rebuilds on any NetworkingContext change.

        * platform/network/NetworkStorageSession.h: Added.
        * platform/network/NetworkStorageSessionStub.cpp: Added.
        * platform/network/cf/NetworkStorageSessionCFNet.cpp: Added.
        Good new stuff. Stub version just wraps NetworkingContext for platforms that still
        need to finish the refactoring.

        * platform/network/NetworkingContext.h:
        The context now has a NetworkStorageSession, and doesn't expose CFNet level objects directly.

        * platform/network/cf/CookieStorageCFNet.cpp:
        * platform/network/cf/CookieStorageCFNet.h: Removed.
        We no longer have separate free functions to track storage, it's part of NetworkStorageSession now.

        * platform/network/cf/ResourceHandleCFNet.cpp: Updated to use NetworkStorageSession.

        * platform/network/mac/CookieStorageMac.mm: Dont include CookieStorageCFNet.h, it
        was not needed.

2012-12-22  Nico Weber  <thakis@chromium.org>

        InlineTextBox: Remove potentially confusing "} if" pattern.
        https://bugs.webkit.org/show_bug.cgi?id=105499

        Reviewed by Ojan Vafai.

        It's not clear to me on first look if this is intentional or missing
        an "else" (and this pattern was used in just one other place in
        webkit, which I've removed). It turns out no else is missing here,
        this is checked by fast/text/justified-selection.html

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

2012-12-21  Jan Keromnes  <janx@linux.com>

        Web Inspector: Update CodeMirror to stable
        https://bugs.webkit.org/show_bug.cgi?id=105653

        Reviewed by Pavel Feldman.

        Fixes several minor issues, including throw scroll on mac.

        * inspector/front-end/cm/codemirror.css:
        (.cm-negative):
        (.cm-positive):
        (.CodeMirror-gutter):
        (.cm-searching):
        * inspector/front-end/cm/codemirror.js:
        (window.CodeMirror):
        (window.CodeMirror.):
        * inspector/front-end/cm/css.js:
        (.):
        * inspector/front-end/cm/htmlmixed.js:
        (.):
        * inspector/front-end/cm/javascript.js:
        (.):
        * inspector/front-end/cm/xml.js:

2012-12-21  Elliott Sprehn  <esprehn@chromium.org>

        Replace documentFragmentIsShadowRoot with isTreeScope
        https://bugs.webkit.org/show_bug.cgi?id=105345

        Reviewed by Dimitri Glazkov.

        We can replace documentFragmentIsShadowRoot with isTreeScope() which is
        trival to detect by checking treeScope()->rootNode() == this. To do this
        we must stop adopting ShadowRoots into the document when they're removed,
        which was always wrong anyway as it meant that the TreeScope of a ShadowRoot
        was no longer itself after it had been removed. It also meant that the
        children of a ShadowRoot that was removed were no longer in it's tree scope
        despite being descendants of it.

        Making this simplification allows further simplication like
        Node::containingShadowRoot can be made O(1) instead of O(k) where k is
        the depth of the node.

        No new tests, just refactoring.

        * WebCore.exp.in:
        * dom/DocumentFragment.h:
        (DocumentFragment):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::removeAllShadowRoots):
        * dom/Node.cpp:
        (WebCore::Node::setTreeScope):
        (WebCore::Node::isTreeScope):
        (WebCore):
        * dom/Node.h:
        (Node):
        (WebCore::Node::isShadowRoot):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::~ShadowRoot):
        * dom/ShadowRoot.h:
        (ShadowRoot):

2012-12-21  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Use harfbuzz-ng instead of harfbuzz-old on Android
        https://bugs.webkit.org/show_bug.cgi?id=104410

        Using harfbuzz-ng we can avoid many bugs of the obsolete harfbuzz-old.

        Reviewed by Eric Seidel.

        No new tests. No change of functionality. Existing tests should pass.

        * WebCore.gyp/WebCore.gyp: Use harfbuzz-ng on Android.

2012-12-21  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Combine openConnection and openConnectionWithVersion
        https://bugs.webkit.org/show_bug.cgi?id=105658

        Reviewed by Tony Chang.

        Combine the logic from these two methods. Mostly a refactor, but in the "pending calls"
        case the behavior is slightly altered since the version and no-version queues were
        previously separate, so the order changes. The new order matches the spec and FF/IE
        behavior, and a test is added to verify this.

        Chromium's webkit_unit_tests rely on a quirk to bypass the upgrade mechanism; the usage
        is slightly altered and made more explicit, and requires a small amount of test-only code.

        Test: storage/indexeddb/open-ordering.html

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::PendingOpenCall::create):
        (WebCore::IDBDatabaseBackendImpl::PendingOpenCall::PendingOpenCall):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackendImpl::close):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):

2012-12-21  Brady Eidson  <beidson@apple.com>

        Update localizable strings as a followup to http://trac.webkit.org/changeset/138387
        https://bugs.webkit.org/show_bug.cgi?id=105592

        Rubberstamped by Alexey Proskuryakov.

        * English.lproj/Localizable.strings: Added a new error string.

2012-12-21  Kenneth Russell  <kbr@google.com>

        Expose ArrayBufferView constructor on DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=105605

        Reviewed by Sam Weinig.

        Update IDL to track recent spec change exposing ArrayBufferView
        constructor on DOMWindow for instanceof checks. There are no
        constructors exposed in the Web IDL, however, so calling it via
        operator new throws TypeError.

        Test (updated): fast/canvas/webgl/array-unit-tests.html

        * html/canvas/ArrayBufferView.idl:
            Removed OmitConstructor attribute.
        * page/DOMWindow.idl:
            Exposed ArrayBufferView constructor function attribute.

2012-12-21  Brady Eidson  <beidson@apple.com>

        Remove ResourceLoadScheduler::addMainResourceLoad and all related code
        <rdar://problem/12925275> and https://bugs.webkit.org/show_bug.cgi?id=105644

        Reviewed by Alexey Proskuryakov.

        Now that main resources loads are scheduled (bug 49246) we don't need this stuff anymore.

        No new tests (No change in behavior).

        * WebCore.exp.in:
        * loader/ResourceLoadScheduler.cpp:
        * loader/ResourceLoadScheduler.h:

2012-12-21  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [WebGL][EFL][Qt] Transparent canvas composited non-transparent
        https://bugs.webkit.org/show_bug.cgi?id=105325

        Reviewed by Kenneth Rohde Christiansen.

        glXPixmap is always created without alpha channel because 1st GLXFBConfig 
        in a list doesn't support transparency. 
        Use the same code that is used to find GLXFBConfig with alpha for window 
        creation in GraphicsSurfacePrivate::createPixmap(). Code is moved to 
        findFBConfigWithAlpha() method.

        Covered by fast/canvas/webgl/webgl-composite-modes-repaint.html

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createPixmap):
        (WebCore::GraphicsSurfacePrivate::findFBConfigWithAlpha):
        (GraphicsSurfacePrivate):

2012-12-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r138376.
        http://trac.webkit.org/changeset/138376
        https://bugs.webkit.org/show_bug.cgi?id=104995

        Broke a bunch of tests on mac.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::nodeName):
        (WebCore):
        * dom/ShadowRoot.h:
        (ShadowRoot):

2012-12-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138237.
        http://trac.webkit.org/changeset/138237
        https://bugs.webkit.org/show_bug.cgi?id=105637

        Regresses web inspector's editor performance. (Requested by
        pfeldman on #webkit).

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorChunkedPanel.prototype._splitChunkOnALine):
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorMainChunk.prototype.expand):

2012-12-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Various tests in media/track are intermittently crashing.
        https://bugs.webkit.org/show_bug.cgi?id=105606

        Reviewed by Eric Seidel.

        The root of problem is the fact that we update tracks even if we are in process of deleting the document.
        Media element can stop doing that if the document informed the element via ::stop that it is going away.

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

2012-12-21  Alexei Svitkine  <asvitkine@chromium.org>

        [Chromium/Mac] Don't send an onclick event from a ctrl-click
        https://bugs.webkit.org/show_bug.cgi?id=105554

        Reviewed by Dimitri Glazkov.

        Don't send the onclick event on a control click event (which
        triggers the context menu on the Mac). This matches the
        behaviour of the Apple Mac port, although the Apple port
        does this by checking whether the context menu is visible
        in WebPage::mouseEvent().

        This is a fix for http://crbug.com/146143

        Test: fast/events/controlclick-no-onclick.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):

2012-12-21  Shinya Kawanaka  <shinyak@chromium.org>

        Implement ShadowRoot::elementFromPoint
        https://bugs.webkit.org/show_bug.cgi?id=104579

        Reviewed by Dimitri Glazkov.

        Move elementFromPoint and nodeFromPoint to TreeScope from Document so that ShadowRoot can call it.
        In the elementFromPoint(), the element taken by nodeFromPoint is not in the same tree scope, its ancestor is returned.

        Since nodeFromPoint does not return the shadow ancestor of the result node, I don't make it TreeScope method.

        Test: fast/dom/shadow/elementfrompoint.html

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint): Code is shared with TreeScope.
        (WebCore::Document::caretRangeFromPoint):
        * dom/ShadowRoot.idl:
        * dom/TreeScope.cpp:
        (WebCore::nodeFromPoint): Moved from Document.cpp
        (WebCore):
        (WebCore::TreeScope::elementFromPoint):
        * dom/TreeScope.h:
        (WebCore):
        (TreeScope):

2012-12-21  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Never create WebCore scrollbars for EFL/WK2
        https://bugs.webkit.org/show_bug.cgi?id=105632

        Reviewed by Antonio Gomes.

        For delegates scroll we must not use the scroll animator,
        or similar as those depends on creating WebCore scrollbars.

        Handle the wheel event manually for delegates scrolling.

        * page/FrameView.cpp:
        (WebCore::FrameView::wheelEvent):

2012-12-21  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow DOM]: ShadowRoot wrong nodeName attribute
        https://bugs.webkit.org/show_bug.cgi?id=104995

        Reviewed by Dimitri Glazkov.

        According to the Shadow DOM spec, ShadowRoot.nodeName should return '#document-fragment' instead of '#shadow-root'.
        We remove ShadowRoot::nodeName.

        No new tests, covered by existing tests.

        * dom/ShadowRoot.cpp:
        * dom/ShadowRoot.h:
        (ShadowRoot):

2012-12-21  Mihai Parparita  <mihaip@chromium.org>

        Slow performance with <select> with many options and size >= 2
        https://bugs.webkit.org/show_bug.cgi?id=105483

        Reviewed by Eric Seidel.
        
        Avoids creating renderers for children of list <select>s that are not
        <option> or <optgroup>. This is both more correct (no other browser
        displays them) and provides a performance benefit (direct text children 
        of <select> would have O(N^2) behavior; this usually happened due to
        whitespace between <option>...</option> tags).

        Test: fast/forms/menulist-no-renderer-for-unexpected-children.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::childShouldCreateRenderer):

2012-12-21  Keishi Hattori  <keishi@webkit.org>

        Fix typing zero into multiple field input
        https://bugs.webkit.org/show_bug.cgi?id=105501

        Reviewed by Kent Tamura.

        We have a couple of problems when handling zero in a multiple fields
        element.
        1. Typing '02' into a month field will set '12'.
        2. Typing '0' into 12 hour hour field will set '12' and move to the 
           focus to the next field.
        This change adds a type ahead buffer so we can handle these cases
        properly. If the value in the type ahead buffer is valid we set it so a
        change event will fire.

        Added tests to *-multiple-fields-keyboard-events.html.

        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::didBlur): Clear the type ahead
        buffer. handleKeyboardEvent() won't set the type ahead value if it is
        not in range, so we set the value here.
        (WebCore::DateTimeNumericFieldElement::handleKeyboardEvent):
        (WebCore::DateTimeNumericFieldElement::setEmptyValue): Clear type ahead buffer.
        (WebCore::DateTimeNumericFieldElement::setValueAsInteger):
        (WebCore::DateTimeNumericFieldElement::stepDown): Clear type ahead buffer.
        (WebCore::DateTimeNumericFieldElement::stepUp): Clear type ahead buffer.
        (WebCore::DateTimeNumericFieldElement::typeAheadValue): Returns integer
        value for the type ahead characters.
        (WebCore):
        (WebCore::DateTimeNumericFieldElement::visibleValue): If we have type
        ahead characters, show that.
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement):

2012-12-21  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Buffering ranges are reported incorrectly with GStreamer 1.0
        https://bugs.webkit.org/show_bug.cgi?id=105319

        Reviewed by Philippe Normand.

        We add the gPercentMax constant to select between 100 and
        GST_FORMAT_PERCENT_MAX depending if we are compiling against
        GStreamer 0.10 or 1.0 and we use that in the corresponding method.

        Current tests should suffice.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::buffered): Added the use of
        gPercentMax constant instead of 100 to have the different code
        paths for GStreamer 0.10 and 1.0.

2012-12-21  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Cannot drop files/URLs on PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=105516
        <rdar://problem/12729443>

        Reviewed by Alexey Proskuryakov.

        * page/DragController.cpp:
        (WebCore::DragController::operationForLoad): If we drag over a PluginDocument, check if its PluginView
        claims to support navigation resulting from a drag (only PDFPlugin will for now). If it does, allow the drag.
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::shouldAllowNavigationFromDrags): Add shouldAllowNavigationFromDrags.

2012-12-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138338.
        http://trac.webkit.org/changeset/138338
        https://bugs.webkit.org/show_bug.cgi?id=105621

        speculative rollout because fast/dom/shadow/content-element-
        distributed-nodes.html is crashing on linux debug. (Requested
        by loislo on #webkit).

        * WebCore.exp.in:
        * dom/DocumentFragment.h:
        * dom/Node.cpp:
        (WebCore::Node::documentFragmentIsShadowRoot):
        (WebCore):
        * dom/Node.h:
        (Node):
        (WebCore::Node::isShadowRoot):
        * dom/ShadowRoot.h:

2012-12-21  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        MediaStream API: Update the MediaStream constructor
        https://bugs.webkit.org/show_bug.cgi?id=98416

        Reviewed by Adam Barth.

        Updated the MediaStream constructor to support the more general argument
        list from the latest Media Capture and Streams specification:
        http://dev.w3.org/2011/webrtc/editor/getusermedia.html

        Added more test cases to existing tests.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::containsSource):
        (WebCore):
        (WebCore::processTrack):
        (WebCore::createFromSourceVectors):
        (WebCore::MediaStream::create):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStream.idl:

2012-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        More fix after r138348.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::createStreams):

2012-12-20  Alexey Proskuryakov  <ap@apple.com>

        Disable Nagle algorithm on WebSocket implementation for CF.
        https://bugs.webkit.org/show_bug.cgi?id=102079

        Build fix. Disable the new code on Lion, _kCFStreamSocketSetNoDelay apparently
        cannot be used on this OS version.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::createStreams):

2012-12-20  KyungTae Kim  <ktf.kim@samsung.com>

        Fix build warnings related with gstreamer
        https://bugs.webkit.org/show_bug.cgi?id=105614

        Reviewed by Kentaro Hara.

        The below functions have unused parameters.
        Remove the parameter names to fix 'unused parameter' build warnings.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::onGStreamerWavparsePadAddedCallback):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::messageCallback):
        (WebCore::onGStreamerDeinterleavePadAddedCallback):
        (WebCore::onGStreamerDeinterleaveReadyCallback):
        (WebCore::onGStreamerDecodebinPadAddedCallback):

2012-12-20  Takashi Toyoshima  <toyoshim@chromium.org>

        Disable Nagle algorithm on WebSocket implementation for CF.
        https://bugs.webkit.org/show_bug.cgi?id=102079

        Reviewed by Alexey Proskuryakov.

        Set TCP_NODELAY on CFWriteStream for SocketStreamHandle to improve
        communication latency. Combination of Nagle and delayed-ACK could
        affect performance in some environment, e.g., over Wifi network.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::createStreams):

2012-12-20  Huang Dongsung  <luxtella@company100.net>

        [WebGL][EFL][Qt][GTK] Jelly fishes leave trails on webgl canvas.
        https://bugs.webkit.org/show_bug.cgi?id=105326

        Reviewed by Noam Rosenthal.

        Clear a drawing buffer after compositing if preserveDrawingBuffer is
        false.
        http://www.khronos.org/registry/webgl/specs/latest/#2.2

        No new tests. Covered by existing webgl-preserve-drawing-buffer-repaint test.

        * platform/graphics/cairo/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (GraphicsContext3DPrivate::copyToGraphicsSurface):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        (WebCore::GraphicsContext3DPrivate::copyToGraphicsSurface):

2012-12-20  Filip Pizlo  <fpizlo@apple.com>

        Create a variable name for a RAII scope so it doesn't die immediately.

        Reviewed by Sam Weinig.

        No new tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackAddCues):
        (WebCore::HTMLMediaElement::textTrackRemoveCues):
        (WebCore::HTMLMediaElement::removeTrack):
        (WebCore::HTMLMediaElement::removeAllInbandTracks):

2012-12-20  Elliott Sprehn  <esprehn@chromium.org>

        Replace documentFragmentIsShadowRoot with isTreeScope
        https://bugs.webkit.org/show_bug.cgi?id=105345

        Reviewed by Dimitri Glazkov.

        We can replace documentFragmentIsShadowRoot with isTreeScope() which is
        trival to detect by checking treeScope()->rootNode() == this;

        No new tests, just refactoring.

        * WebCore.exp.in:
        * dom/DocumentFragment.h:
        (DocumentFragment):
        * dom/Node.cpp:
        (WebCore::Node::isTreeScope):
        * dom/Node.h:
        (Node):
        (WebCore::Node::isShadowRoot):
        * dom/ShadowRoot.h:
        (ShadowRoot):

2012-12-20  Rik Cabanier  <cabanier@adobe.com>

        Add canvas blending modes using Core Graphics
        https://bugs.webkit.org/show_bug.cgi?id=100070

        Reviewed by Dirk Schulze.

        globalCompositeOperation is extended so it takes blend modes as well as compositing operators.
        This patch adds an implementation for the Core Graphics port.

        Tests: fast/canvas/canvas-blend-image.html
               fast/canvas/canvas-blend-solid.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation): Passed blendMode to underlying layer.
        (WebCore::CanvasRenderingContext2D::drawImage): Passed blendMode to underlying drawImage call.
        (WebCore::CanvasRenderingContext2D::drawImageFromRect): Passed blendMode to platofrm layer.
        * html/canvas/CanvasRenderingContext2D.h:
        (CanvasRenderingContext2D): Eextended drawImage with new blendmode parameter.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation): Passed blendmode to Core Graphics API.

2012-12-20  KyungTae Kim  <ktf.kim@samsung.com>

        Percentage min/max width replaced element may incorrectly rendered
        https://bugs.webkit.org/show_bug.cgi?id=105264

        Reviewed by Tony Chang.

        To make do not include percentage min width in preferred logical width calculation,
        because we cannot resolve it for preferred width.

        Test: fast/css/percent-min-width-img-src-change.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidth):
        Modify includeMaxWidth parameter to shouldComputePreferred.
        (WebCore::RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth):
        Modify includeMaxWidth parameter to shouldComputePreferred.
        If shouldComputePreferred is ComputePreferred, 
        don't use minLogicalWidth or maxLogicalWidth if they are percent type.
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        Modify includeMaxWidth parameter to shouldComputePreferred.
        (WebCore::RenderReplaced::computeMaxPreferredLogicalWidth):
        Modify from set includeMaxWidth=false to set shouldComputePreferred=ComputePreferred.
        * rendering/RenderReplaced.h:
        (RenderReplaced):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        Modify includeMaxWidth parameter to shouldComputePreferred.
        * rendering/RenderSVGRoot.h:
        (RenderSVGRoot):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::computeReplacedLogicalWidth):
        Modify includeMaxWidth parameter to shouldComputePreferred.
        * rendering/RenderVideo.h:
        (RenderVideo):

2012-12-20  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r138191): Tests crash in ResourceRequest::setStorageSession
        https://bugs.webkit.org/show_bug.cgi?id=105563

        Reviewed by Brady Eidson.

        Partially fixes crashing http/tests/appcache/main-resource-redirect.html
        (but there is an unrelated regression affecting this test).

        * platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::willSendRequest):
        The client can make the object get destoryed, protect it to avoid accessing deleted memory.

2012-12-20  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [EFL] [WebGL] [Wk2] Contents are not rendered properly.
        https://bugs.webkit.org/show_bug.cgi?id=104664

        Reviewed by Noam Rosenthal.

        WebGL pages that render more than one frame are broken. Only 1st
        frame comes to the UI side. All webgl repaint tests fail because
        of this.
        Specification of EXT_texture_from_pixmap extension here
        http://www.opengl.org/registry/specs/EXT/texture_from_pixmap.txt
        says, that:
        "The contents of the texture after the drawable has been bound are defined
        as the result of all rendering that has completed before the call to
        glXBindTexImageEXT."
        It means that in order to get updates for every frame glXBindTexImageEXT has
        to be called on every frame update.

        Covered by existing fast/canavs/webgl/*repaint tests.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::isReceiver):
        (WebCore::GraphicsSurface::platformSwapBuffers):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperSurfaceBackingStore::swapBuffersIfNeeded):

2012-12-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with latest EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=104827

        Reviewed by Laszlo Gombos.

        The eo EFL package is introduced and evas and ecore use it since 1.8.
        While introducing Eo, EFL changed several structures of Evas and Ecore
        from own specific class to Eo.

        So, this patch adds FindEo and changes declaration of Evas, Evas_Object,
        Ecore_Timer to build with latest EFL libraries.

        * PlatformEfl.cmake: Includes eo EFL library.
        * platform/Widget.h: Modified declaration of Evas and Evas_Object.
        In addition, removed unnecessary declaration.
        * platform/efl/EflScreenUtilities.h: Modified declaration of Evas.
        * platform/efl/RenderThemeEfl.h: Removed unnecessary declaration.
        * platform/graphics/Icon.h: Ditto.
        * platform/graphics/Image.h: Modified declaration of Evas and Evas_Object.

2012-12-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138270.
        http://trac.webkit.org/changeset/138270
        https://bugs.webkit.org/show_bug.cgi?id=105589

        Many media tests are failing/crashing intermittently, often
        pointing at WebCore::HTMLTrackElement::didCompleteLoad as
        culprit (Requested by dino_ on #webkit).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackModeChanged):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::insertedInto):
        (WebCore::HTMLTrackElement::parseAttribute):
        (WebCore::HTMLTrackElement::scheduleLoad):
        (WebCore::HTMLTrackElement::textTrackModeChanged):
        * html/HTMLTrackElement.h:
        * html/track/TextTrack.cpp:
        * html/track/TextTrack.h:

2012-12-20  Pratik Solanki  <psolanki@apple.com>

        Rename HAVE(NETWORK_CFDATA_ARRAY_CALLBACK) to USE(NETWORK_CFDATA_ARRAY_CALLBACK)
        https://bugs.webkit.org/show_bug.cgi?id=105578

        Reviewed by Alexey Proskuryakov.

        * loader/ResourceBuffer.cpp: Remove duplicate append() call that was under the wrong ifdef.
        * loader/ResourceBuffer.h:

2012-12-20  Elliott Sprehn  <esprehn@chromium.org>

        RenderBlock hit testing should ignore PseudoElements
        https://bugs.webkit.org/show_bug.cgi?id=105545

        Reviewed by Eric Seidel.

        Use nonPseudoNode() in hit testing code in RenderBlock and RenderBox so
        that when clicking on the box generated by a pseudo element we never
        generate a Position for the PseudoElement, but instead for the
        generating node.

        Test: fast/css-generated-content/block-and-box-hit-testing.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForBox):
        (WebCore::isEditingBoundary):
        (WebCore::positionForPointRespectingEditingBoundaries):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):

2012-12-20  Stephen Chenney  <schenney@chromium.org>

        SVG: <altglpyh> for a surrogate pair character in a ligature fails
        https://bugs.webkit.org/show_bug.cgi?id=102969

        Reviewed by Dirk Schulze.

        There are two issues with SVG <altglyph> tags applied to surrogate
        fonts, particularly when mixed with non-standard forms (arabic,
        vertical, etc.).

        First, there is an assertion that is invalid when an alt glyph is
        substituted for the surrogate, because the text chunk that is consumed
        by an alt glyph is the entire run, whereas we assert that a
        surrogate's chunk is length 2 regardless. That assertion has been
        removed.

        Second, when an arabic character or some other characters requiring a
        special form appears before the surrogate pair character inside the alt
        glyph tag, we reject the alt glyph because it is not compatible with the form.
        However, when we process the next character - the surrogate pair - we
        do accept the alt glyph. This breaks all the indexes because we have
        already consumed part of the run that is now considered the alt glyph.
        Chaos ensues. This patch forces us to always accept alt glyph
        characters (assuming we have some glyph to draw). This better matches
        the intent of the spec - if someone specifies an alt glyph they are
        explicitly stating which glyph they want used. We should not argue
        with the content author.

        Tests: svg/text/alt-glyph-for-surrogate-pair-expected.svg
               svg/text/alt-glyph-for-surrogate-pair.svg

        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath): Fix some poor code.
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::advanceSimpleText): Remove an assert that is not always valid.
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection): Always return an altGlyph when found. Do not check it compatibility.

2012-12-20  Adam Klein  <adamk@chromium.org>

        Properly process <template> end tags when in TemplateContentsMode
        https://bugs.webkit.org/show_bug.cgi?id=105556

        Reviewed by Eric Seidel.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag): Take care of the FIXME and just call
        processTemplateEndTag() instead of incorrectly special-casing the end tag behavior in some cases.

2012-12-20  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL][Wk2] Replace HAVE(GLX) checks with USE(GLX)
        https://bugs.webkit.org/show_bug.cgi?id=105431

        Reviewed by Kenneth Rohde Christiansen.

        This patch changes the check HAVE(GLX) to USE(GLX).
        This would enable us to choose our preferred GL backend during build time.
        This patch also adds an additional api to query the shared buffer handle.
        Buffer handle is not same as gl surface and would depend on how the content is
        backed up.

        * platform/graphics/opengl/GLDefs.h:
        (WebCore):
        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore::GLPlatformContext::createContext):
        (WebCore::GLPlatformContext::createOffScreenContext):
        (WebCore::GLPlatformContext::createCurrentContextWrapper):
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createOffscreenSurface):
        (WebCore::GLPlatformSurface::createTransportSurface):
        (WebCore::GLPlatformSurface::GLPlatformSurface):
        (WebCore::GLPlatformSurface::handle):
        (WebCore):
        (WebCore::GLPlatformSurface::drawable):
        * platform/graphics/opengl/GLPlatformSurface.h:
        (GLPlatformSurface):
        * platform/graphics/surfaces/glx/GLXContext.cpp:
        * platform/graphics/surfaces/glx/GLXContext.h:
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXTransportSurface::destroy):
        (WebCore::GLXPBuffer::initialize):
        (WebCore::GLXPBuffer::freeResources):
        * platform/graphics/surfaces/glx/GLXSurface.h:
        * platform/graphics/surfaces/glx/GLXWindowResources.h:
        * platform/graphics/surfaces/glx/X11WindowResources.cpp:
        (WebCore::X11OffScreenWindow::X11OffScreenWindow):
        (WebCore::X11OffScreenWindow::setGeometry):
        (WebCore::X11OffScreenWindow::createOffscreenWindow):
        (WebCore::X11OffScreenWindow::destroyWindow):
        * platform/graphics/surfaces/glx/X11WindowResources.h:
        (WebCore):
        (DummySharedResources):
        (WebCore::DummySharedResources::create):
        (WebCore::DummySharedResources::nativeDisplay):
        (WebCore::DummySharedResources::pBufferContextConfig):
        (WebCore::DummySharedResources::surfaceContextConfig):
        (WebCore::DummySharedResources::DummySharedResources):
        (WebCore::DummySharedResources::~DummySharedResources):

2012-12-20  Emil A Eklund  <eae@chromium.org>

        [flexbox] Fix handling of very large flex grow/shrink values
        https://bugs.webkit.org/show_bug.cgi?id=105579

        Reviewed by Tony Chang.

        Add isfinite to childSize calculation in RenderFlexibleBox::
        resolveFlexibleLengths to avoid overflow.

        Covered by css3/flexbox/flex-algorithm.html.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        Check if value is finite before adding to childSize.

2012-12-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138265.
        http://trac.webkit.org/changeset/138265
        https://bugs.webkit.org/show_bug.cgi?id=105586

        Accidentally committed extra code that is not reviewed and
        shouldn't go with this commit. (Requested by ostap on
        #webkit).

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createPixmap):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurface::platformSwapBuffers):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperSurfaceBackingStore::swapBuffersIfNeeded):

2012-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r133820?): SimplifyMarkupTest API test asserts
        https://bugs.webkit.org/show_bug.cgi?id=105370

        Reviewed by Simon Fraser.

        The bug was caused by SimplifyMarkupCommand::doApply calling removeNodePreservingChildren on nodes
        that have already been removed. We normally check this condition in pruneSubsequentAncestorsToRemove
        but we weren't checking it when there were no ancestor to remove because we early exited in that case.

        Fixed the bug by doing the early exit for when the node's parent had already been removed first.

        Test: TestWebKitAPI/Tests/mac/SimplifyMarkup.mm

        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        (WebCore::SimplifyMarkupCommand::pruneSubsequentAncestorsToRemove): Also removed an unused variable
        nodeAfterHighestAncestorToRemove.

2012-12-20  Antti Koivisto  <antti@apple.com>

        Font description not synchronized correctly on orientation affecting property changes
        https://bugs.webkit.org/show_bug.cgi?id=105533

        Reviewed by Enrica Casucci.

        In StyleResolver checkForOrientationChange() function checks if the new computed orientation differs from the parent
        orientation and updates the style's font description only if it does. This is not correct as equal values do not guarantee
        the new font description is actually up to date. We can leave the function with the computed orientation and the font
        description still out of sync.
        
        Fix by bailing out fast only if the font description is already in sync.
        
        No layout test yet, verified with a test app.

        * css/StyleResolver.cpp:
        (WebCore::checkForOrientationChange):
        (WebCore::StyleResolver::updateFont):

2012-12-20  Ryan Sleevi  <rsleevi@chromium.org>

        window.crypto.getRandomValues should return the input ArrayBufferView
        https://bugs.webkit.org/show_bug.cgi?id=104845

        The W3C Web Crypto API FPWD, as well as the WHATWG February 2012 draft,
        define crypto.getRandomValues() as returning the input ArrayBufferView,
        to allow function call chaining. Update the implementation to match
        the current spec, rather than the old spec of void/undefined.

        Reviewed by Kentaro Hara.

        Test: security/crypto-random-values-types.html

        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCryptoCustom.cpp: Added.
        (WebCore):
        (WebCore::JSCrypto::getRandomValues):
        Added custom getRandomValues implementation so that the input wrapped
        ArrayBufferView can be returned directly to the caller. This is to
        preserve the underlying type and indexing accessor for the TypedArray
        subclass.
        * bindings/v8/custom/V8CryptoCustom.cpp: Added.
        (WebCore):
        (WebCore::V8Crypto::getRandomValuesCallback):
        Added custom getRandomValues implementation so that the input wrapped
        ArrayBufferView can be returned directly to the caller. This is to
        preserve the underlying type and indexing accessor for the TypedArray
        subclass.
        * page/Crypto.idl:

2012-12-20  Erik Arvidsson  <arv@chromium.org>

        CodeGen: Make [Reflect] use getIdAttribute and getNameAttribute
        https://bugs.webkit.org/show_bug.cgi?id=105549

        Reviewed by Andreas Kling.

        Let the codegen use getIdAttribute and getNameAttribute when we know the attribute
        is HTMLNames::idAttr or HTMLNames::nameAttr respectively. The more specialized functions
        do not search for the attribute if it knows that the element does not have that attribute
        speeding up the case where id or name are not present.

        This improves Dromaeo/dom-attr by 5% and Bindings/undefined-id-getter by 2% 

        No new tests. No change in behavior

        * bindings/scripts/CodeGenerator.pm:

2012-12-20  Erik Arvidsson  <arv@chromium.org>

        fastAttributeLookupAllowed: classAttr is only animatable by SVG styled elements
        https://bugs.webkit.org/show_bug.cgi?id=105565

        Reviewed by Eric Seidel.

        When it comes to determining if we can use fastGetAttribute we should not penalize
        all classAttr access just because some SVG styled elements does funky things with
        className.

        This makes classAttr considered animatable only for styled SVG elements.

        No new tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        * dom/Element.cpp:
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:

2012-12-20  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Remove ParentChange in TextureMapperLayer.
        https://bugs.webkit.org/show_bug.cgi?id=105494

        Reviewed by Noam Rosenthal.

        ParentChange is useless, because ChildrenChange is enough. In addition,
        GraphicsLayer uses setParent() method internally. This patch copies
        GraphicsLayer::setChildren() into TextureMapperLayer::setChildren().

        No new tests. Covered by existing tests.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore):
        (WebCore::GraphicsLayerTextureMapper::setChildren):
          Match the similar style of replaceChild().
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::TextureMapperLayer::setChildren):
          Copied from GraphicsLayer::setChildren().
        (WebCore):
        (WebCore::TextureMapperLayer::addChild):
          Copied from GraphicsLayer::addChild().
        (WebCore::TextureMapperLayer::removeFromParent):
          Copied from GraphicsLayer::removeFromParent().
        (WebCore::TextureMapperLayer::removeAllChildren):
          Copied from GraphicsLayer::removeAllChildren().
        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):

2012-12-20  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Cursor and IndexWriter cleanup for refactor
        https://bugs.webkit.org/show_bug.cgi?id=105449

        Reviewed by Tony Chang.

        This is a cleanup of some code to make the refactor that is coming
        in https://bugs.webkit.org/show_bug.cgi?id=102741 cleaner. Some
        CursorType assertions have been removed because the code will be
        used in more generic circumstances in a future patch.

        The previously-private IndexWriter has been pulled into
        IDBObjectStoreBackendImpl and made to just use IDB*Metadata
        so it can be reused later.

        No new tests as this does not change the logic of executing code.

        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        (WebCore::IDBCursorBackendImpl::value):
        (IDBCursorBackendImpl):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::OpenIndexCursorOperation::create):
        (WebCore::IDBIndexBackendImpl::OpenIndexCursorOperation::OpenIndexCursorOperation):
        (IDBIndexBackendImpl::OpenIndexCursorOperation):
        (WebCore::IDBIndexBackendImpl::OpenIndexCursorOperation::perform):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IndexWriter::verifyIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::IndexWriter::writeIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::IndexWriter::addingKeyAllowed):
        (WebCore::IDBObjectStoreBackendImpl::makeIndexWriters):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IndexWriter):
        (WebCore::IDBObjectStoreBackendImpl::IndexWriter::IndexWriter):
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::setCursorDetails):
        (WebCore::IDBRequest::setResultCursor):
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):

2012-12-20  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r138191): Tests fail in ResourceRequest::setStorageSession
        https://bugs.webkit.org/show_bug.cgi?id=105563

        Reviewed by Sam Weinig.

        * platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::willSendRequest):
        Don't try to appky a session if client canceled the request by setting it ot a null one.

        * platform/network/cf/ResourceRequestCFNet.cpp: (WebCore::ResourceRequest::setStorageSession):
        * platform/network/mac/ResourceRequestMac.mm: (WebCore::ResourceRequest::setStorageSession):
        Update platform request, so that the session does not get lost once it's updated later.

2012-12-20  Nate Chapin  <japhet@chromium.org>

        Rename shouldBufferData to dataBufferingPolicy
        https://bugs.webkit.org/show_bug.cgi?id=105450

        Reviewed by Alexey Proskuryakov.

        No new tests, simple rename.

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveData):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::setDataBufferingPolicy):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::setDataBufferingPolicy):
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/ResourceLoader.h:
        (ResourceLoader):
        * loader/ResourceLoaderOptions.h:
        (WebCore::ResourceLoaderOptions::ResourceLoaderOptions):
        (ResourceLoaderOptions):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::data):
        (WebCore::CachedRawResource::setDataBufferingPolicy):
        (WebCore::CachedRawResource::canReuse):
        * loader/cache/CachedRawResource.h:
        (CachedRawResource):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::dataBufferingPolicy):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray):
        * page/EventSource.cpp:
        (WebCore::EventSource::connect):

2012-12-19  Dean Jackson  <dino@apple.com>

        Track menu in wrong location when fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=105234

        Reviewed by Eric Carlson.

        Add a rule to position the captions menu in the correct location
        when the <video> is fullscreen. Also a drive-by removal of unnecessary
        CSS selectors, and changing an encoded PNG into an SVG.

        * css/fullscreenQuickTime.css:
        (video:-webkit-full-screen::-webkit-media-controls-closed-captions-container): Add a rule to position
        the menu when in fullscreen.
        * css/mediaControlsQuickTime.css: Remove the unnecessary <audio> selectors.
        (video::-webkit-media-controls-toggle-closed-captions-button):
        (video::-webkit-media-controls-closed-captions-container):
        (video::-webkit-media-controls-closed-captions-track-list):

2012-12-19  Dean Jackson  <dino@apple.com>

        Follow WebVTT line breaking rules
        https://bugs.webkit.org/show_bug.cgi?id=105496

        Reviewed by Eric Carlson.

        WebVTT requires that captions never overflow their containers. In other
        words, that it is ok to break within words rather than hide content.
        Implement this by using CSS's word-break property.

        Test: media/track/track-word-breaking.html

        * css/mediaControls.css:
        (video::-webkit-media-text-track-container): Add word-break.
        * css/mediaControlsQuickTime.css: Drive-by cleanup to make sure selection doesn't happen.
        (audio::-webkit-media-controls-closed-captions-container, video::-webkit-media-controls-closed-captions-container):
        (audio::-webkit-media-controls-closed-captions-track-list, video::-webkit-media-controls-closed-captions-track-list):

2012-12-20  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] 304 responses should show up in the timing buffer
        https://bugs.webkit.org/show_bug.cgi?id=105490

        Reviewed by Tony Gentilcore.

        Test: http/tests/w3c/webperf/submission/resource-timing/html/test_resource_cached.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone):

2012-12-19  Simon Fraser  <simon.fraser@apple.com>

        Lots of sticky tests failing in WK2
        https://bugs.webkit.org/show_bug.cgi?id=105464

        Reviewed by Brady Eidson.

        Fixing this bug altered the timing of InternalSettings::Backup()
        and restoreTo(), such that 'canStartMedia' on Page would get saved as false,
        and then restored as false, which breaks all media tests.
        
        'canStartMedia' is set to false initially by the WebPage constructor, and is also
        set to false when the WKView leaves the window, so treating it like other Settings
        that can be saved and restored is unreliable, as seen here. It's easier and simpler
        to just always reset it to 'true' between tests.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::InternalSettings):
        (WebCore::InternalSettings::reset):
        * testing/InternalSettings.h:
        (Backup):

2012-12-20  Erik Arvidsson  <arv@chromium.org>

        REGRESSION(r138263): Don't use fastGetAttribute for HTMLNames::classAttr because it breaks on SVGElement
        https://bugs.webkit.org/show_bug.cgi?id=105555

        Reviewed by Tony Chang.

        The code generated generated code that uses fastGetAttribute for the className WebIDL attribute getter.
        However, this attribute is animatable in SVG so we cannot use the fast function for it.

        No new tests. The assert is no longer hit.

        * bindings/scripts/CodeGenerator.pm:

2012-12-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to set a TLS errors policy to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=104482

        Reviewed by Martin Robinson.

        * platform/network/soup/ResourceError.h:
        (WebCore::ResourceError::setTLSErrors): Set the TLS error flags.
        (WebCore::ResourceError::setCertificate): Set the certificate.
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::ResourceError::tlsError): Set the given TLS errors and
        certificate to the ResourceError.
        (WebCore::ResourceError::platformCopy): Copy also the TLS errors
        and the certificate.
        (WebCore::ResourceError::platformCompare): Compare also the TLS
        errors.

2012-12-20  Antoine Quint  <graouts@apple.com>

        onload callback for <track> element attached to <video> does not fire
        https://bugs.webkit.org/show_bug.cgi?id=103258

        Reviewed by Eric Carlson.

        We now correctly implement the track processing model per the latest spec at
        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#start-the-track-processing-model.
        
        For a <track> to load, three conditions must be met:
        
        1. it must have a non-empty src
        2. it must have a mode other than "disabled" (the default)
        3. it must have a parent media element
        
        We used to only check if we were able to load upon setting the track's src,
        whereas a change of any of those conditions should have done this, which this
        patch now correctly implements.
        
        We also correctly implement the load model asynchronously after step 4, per
        the spec, hence the split of the code previously entirely contained in
        HTMLTrackElement::scheduleLoad() in another method fired on a timer.

        Test: media/track/track-element-load-event.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackModeChanged):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::insertedInto):
        (WebCore::HTMLTrackElement::parseAttribute):
        (WebCore::HTMLTrackElement::scheduleLoad):
        (WebCore):
        (WebCore::HTMLTrackElement::loadTimerFired):
        (WebCore::HTMLTrackElement::textTrackModeChanged):
        * html/HTMLTrackElement.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::removeAllCues):
        (WebCore):
        * html/track/TextTrack.h:
        (TextTrack):

2012-12-20  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Layout test showing delete database getting two blocked events
        https://bugs.webkit.org/show_bug.cgi?id=92674

        Reviewed by Tony Chang.

        Match the steps specified behavior for deleteDatabase() in the spec: versionchange/blocked
        events fire if necessary, then waits until a condition is satisfied before continuing with
        the steps to delete the database. The bug was caused by retrying the full call again. Events
        are also now sent out immediately when a "versionchange" transaction is running, rather
        than entering a limbo state - again, the new behavior matches the spec more accurately.

        Tests: storage/indexeddb/delete-in-upgradeneeded-close-in-open-success.html
               storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange.html
               storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange.html
               storage/indexeddb/intversion-gated-on-delete.html

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase): First half of the steps.
        (WebCore):
        (WebCore::IDBDatabaseBackendImpl::isDeleteDatabaseBlocked): Pull out condition test.
        (WebCore::IDBDatabaseBackendImpl::deleteDatabaseFinal): Second half of the of steps.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):

2012-12-20  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [EFL] [WebGL] [Wk2] Contents are not rendered properly.
        https://bugs.webkit.org/show_bug.cgi?id=104664

        Reviewed by Noam Rosenthal.

        WebGL pages that render more than one frame are broken. Only 1st
        frame comes to the UI side. All webgl repaint tests fail because
        of this.
        Specification of EXT_texture_from_pixmap extension here
        http://www.opengl.org/registry/specs/EXT/texture_from_pixmap.txt
        says, that:
        "The contents of the texture after the drawable has been bound are defined
        as the result of all rendering that has completed before the call to
        glXBindTexImageEXT."
        It means that in order to get updates for every frame glXBindTexImageEXT has
        to be called on every frame update.

        Covered by existing fast/canavs/webgl/*repaint tests.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::isReceiver):
        (WebCore::GraphicsSurface::platformSwapBuffers):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperSurfaceBackingStore::swapBuffersIfNeeded):

2012-12-20  Erik Arvidsson  <arv@chromium.org>

        CodeGen: Make [Reflect] use fastGetAttribute and fastHasAttribute
        https://bugs.webkit.org/show_bug.cgi?id=105540

        Reviewed by Andreas Kling.

        Currently the codegen generates code that use getAttribute and hasAttribute. We can use
        fastGetAttribute and fastHasAttribute when we use a non SVG animated attribute and not
        HTML::styleAttr.

        This improves Bindings/id-getter by 16% and Dromaeo/dom-attr by 21%.

        No new tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/V8/V8TestObj.cpp:

2012-12-20  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry]Change fullscreen back button size
        https://bugs.webkit.org/show_bug.cgi?id=105541

        Reviewed by Rob Buis.

        Internally Reviewed by John Griggs.
        Resize fullscreen mode back button size to meet browser back button size.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):
        (WebCore::RenderThemeBlackBerry::paintMediaFullscreenButton):

2012-12-20  Dominic Mazzoni  <dmazzoni@google.com>

        AX: support clickPoint in DRT for chromium
        https://bugs.webkit.org/show_bug.cgi?id=97359

        Reviewed by Chris Fleizach.

        When computing the accessible bounding box of an
        SVG root, be sure to call a method that uses transforms,
        otherwise an assertion fails.

        Newly unskipped tests: accessibility/svg-bounds.html and
        accessibility/svg-remote-element.html

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

2012-12-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Qt]REGRESSION(r138222): It made fast/forms/number/number-spinbutton-click-in-iframe.html crash
        https://bugs.webkit.org/show_bug.cgi?id=105529

        Reviewed by Nate Chapin.

        Make sure assignIdentifierToInitialRequest() and
        dispatchWillSendRequest() are called before all other
        notification callbacks for the substitute data.

        Fixes a crash in fast/forms/number/number-spinbutton-click-in-iframe.html.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::load): Call
        handleSubstituteDataLoadSoon() after assigning the substitute data
        identifier.

2012-12-20  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Add minimum/maximum value to DateTimeEditElement::LayoutParameters
        https://bugs.webkit.org/show_bug.cgi?id=105510

        Reviewed by Kent Tamura.

        Add two DateComponents fields, minimum and maximum, to DateTimeEditElement::LayoutParameters, replacing minimumYear and maximumYear.
        They will be used to limit selectable values of month, day, etc.

        No new tests. No behavior change.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp: Removed fullYear().
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Ditto.
        * html/DateInputType.cpp:
        (WebCore::DateInputType::setupLayoutParameters): Populates minimum/maximum.
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::setupLayoutParameters): Ditto.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::setupLayoutParameters): Ditto.
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::setupLayoutParameters): Ditto.
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::setupLayoutParameters): Ditto.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField): Replace the usage of minimumYear/maximumYear with minimum/maximum DateComponents.
        * html/shadow/DateTimeEditElement.h:
        (LayoutParameters): Removed minimumYear, maximumYear, and undefinedYear(), and added minimum and maximum fields.
        (WebCore::DateTimeEditElement::LayoutParameters::LayoutParameters):

2012-12-20  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Remove the --enable-unstable-features configuration option
        https://bugs.webkit.org/show_bug.cgi?id=105327

        Reviewed by Martin Robinson.

        Remove the ENABLE_UNSTABLE_FEATURES guards in various GNUmakefiles now that
        the configuration option is removed.

        No new tests - no new testable functionality.

        * GNUmakefile.am: Remove the ENABLE_UNSTABLE_FEATURES guards in GNUmakefile.am
        where they were used to override certain feature define values in case of a release build.
        * GNUmakefile.features.am.in: Adjust the default value for the feature defines that were
        previously overriden in release builds. This feature define list will eventually represent
        feature status in release builds with overriding being done through build-webkit.
        * bindings/gobject/GNUmakefile.am: Move the DOM bindings targets that were previously guarded
        by the ENABLE_UNSTABLE_FEATURES guards to the common listing of the video-dependent DOM bindings.

2012-12-20  Florin Malita  <fmalita@chromium.org>

        Incorrect color space conversion for FEImage
        https://bugs.webkit.org/show_bug.cgi?id=105437

        Reviewed by Dirk Schulze.

        When no color-interpolation-filters property is specified, SVG filters are assumed to
        operate in LinearRGB color space (http://www.w3.org/TR/SVG/filters.html#FilterPrimitivesOverviewIntro).
        Currently, FilterEffect relies on filters generating results in the same color space they
        are requested to use (LinearRGB by default) - but this is not true for FEImage as its
        result is always a DeviceRGB image buffer. Hence, in FEImage's case, the filter chain
        performs an invalid LinearRGB->DeviceRGB conversion at the end (for an image buffer already
        encoded in DeviceRGB).

        This patch introduces a mechanism for filters to override the requested result color space
        and updates FEImage to always mark its result as DeviceRGB. If a dependent filter requires
        input in a different color space, FilterEffect::apply() already handles the conversion.

        No new tests - existing tests cover this extensively, after rebaseline.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::transformResultColorSpace):
        Minor cleanup: asImageBuffer() already handles this logic.

        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::setResultColorSpace):
        (FilterEffect):
        New method for overriding the result color space.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::apply):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        Do not perform an explicit conversion in these places, as the result color space may be
        different from the requested color space. Let FilterEffect::transformResultColorSpace()
        figure it out.

        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):
        FEImage results are always ColorSpaceDeviceRGB.

2012-12-20  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] MiniBrowser does not play Infinite Gangnam Style
        https://bugs.webkit.org/show_bug.cgi?id=103531

        Reviewed by Kenneth Rohde Christiansen.

        Specifying additional define to avoid deprecation warning.

        No new tests, compile time change which doesn't affect behavior.

        * PlatformEfl.cmake:

2012-12-19  Simon Hausmann  <simon.hausmann@digia.com>, Jedrzej Nowacki <jedrzej.nowacki@digia.com>

        [Qt] JS bridge does not transmit QVariants anymore in Qt5
        https://bugs.webkit.org/show_bug.cgi?id=104540

        Reviewed by Kenneth Rohde Christiansen.

        A data corruption exists in the QObject bridge when calling slots that
        take a QVariant.

        The calling convention for slots is that the void* parameter array must
        contain pointers to the actually required destination argument type. If
        a function takes an int for example, the corresponding entry in the
        void* parameter array must be a pointer to an int that the moc
        generated code then can "safely" cast to an int* and dereference.
        Similarly if the function takes a QVariant it must be a pointer to a
        QVariant.

        We implement this calling convention by constructing QVariants of the
        requested parameter types and passing the value of data() into the
        void* parameter array. This works fine for all types except if the
        requested type is a QVariant. In that case data() will _not_ return a
        pointer that can later be safely casted to a QVariant pointer and
        dereferenced. Instead we must use the address of our variant to ensure
        a working cast.

        Our auto tests cover this case, but they worked by accident because the
        provided pointer when casted to a QVariant happens to have the correct
        type id that doesn't produce the warning seen in the test case of the
        provided example and the unit test just copies the QVariant and thus
        pointer.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtMethodMatchType::typeId): Replace string based meta
        type id determination of QVariant with a quicker table lookup.
        (JSC::Bindings::findMethodIndex): Remember the chosen (requested) types
        and pass the pointer to the QVariant instead of its data() pointer if
        requested.
        (JSC::Bindings::QtRuntimeMethod::call): Fixed determination of whether
        we need to convert a return value or not solely based on the return
        type _specified_ in the meta method instead of the variant value
        returned. The latter is not sufficient because a slot can return an
        invalid variant, which is not the same as returning void. This was
        triggered by an unit test that accidentally passed due to this memory
        corruption in the first place.

2012-12-20  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: extract native heap graph representation into a separate file
        https://bugs.webkit.org/show_bug.cgi?id=105524

        Reviewed by Alexander Pavlov.

        Moved native heap graph parser into NativeHeapGraph.js, renamed NativeHeapGraphNode to NativeHeapGraph.Node
        and NativeHeapGraphEdge to NativeHeapGraph.Edge
        Removed unused pie chart view.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution): fixed optional parameter handling
        * WebCore.gypi:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * inspector/compile-front-end.py:
        * inspector/front-end/NativeHeapGraph.js: Added.
        (WebInspector.NativeHeapGraph):
        (WebInspector.NativeHeapGraph.prototype.rootNodes):
        (WebInspector.NativeHeapGraph.prototype._calculateNodeEdgeIndexes):
        (WebInspector.NativeHeapGraph.prototype._addDummyNode):
        (WebInspector.NativeHeapGraph.Edge):
        (WebInspector.NativeHeapGraph.Edge.prototype.type):
        (WebInspector.NativeHeapGraph.Edge.prototype.name):
        (WebInspector.NativeHeapGraph.Edge.prototype.target):
        (WebInspector.NativeHeapGraph.Edge.prototype._getStringField):
        (WebInspector.NativeHeapGraph.Edge.prototype.toString):
        (WebInspector.NativeHeapGraph.Node):
        (WebInspector.NativeHeapGraph.Node.prototype.id):
        (WebInspector.NativeHeapGraph.Node.prototype.type):
        (WebInspector.NativeHeapGraph.Node.prototype.size):
        (WebInspector.NativeHeapGraph.Node.prototype.className):
        (WebInspector.NativeHeapGraph.Node.prototype.name):
        (WebInspector.NativeHeapGraph.Node.prototype.hasReferencedNodes):
        (WebInspector.NativeHeapGraph.Node.prototype.referencedNodes):
        (WebInspector.NativeHeapGraph.Node.prototype.outgoingEdges):
        (WebInspector.NativeHeapGraph.Node.prototype.targetOfEdge):
        (WebInspector.NativeHeapGraph.Node.prototype.targetsOfAllEdges):
        (WebInspector.NativeHeapGraph.Node.prototype._firstEdgePoistion):
        (WebInspector.NativeHeapGraph.Node.prototype._afterLastEdgePosition):
        (WebInspector.NativeHeapGraph.Node.prototype._getStringField):
        (WebInspector.NativeHeapGraph.Node.prototype.toString):
        * inspector/front-end/NativeMemorySnapshotView.js:
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/WebKit.qrc:

2012-12-20  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: enhance short-records filter.
        https://bugs.webkit.org/show_bug.cgi?id=101749

        Reviewed by Pavel Feldman.

        Currently filter could be "on" (accepting records longer than 15ms) or
        "off" (accepting all records). Adding some options between 0ms and 15ms
        will make this feature much more useful.

        Additional changes:
        - removed hardcoded size constant WebInspector.StatusBarComboBox.width

        * English.lproj/localizedStrings.js: Added new / removed orphan strings.
        * inspector/front-end/ProfilesPanel.js: Changed offset calculation.
        * inspector/front-end/TimelineOverviewPane.js: Enhanced filter.
        * inspector/front-end/TimelinePanel.js: Replaced button with combobox.
        (WebInspector.TimelineIsLongFilter): Enhanced filter.
        * inspector/front-end/TimelinePresentationModel.js:
        Removed Record "isLong" method.
        * inspector/front-end/timelinePanel.css: Removed orphan styles.

2012-12-20  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [CPU Profile] Idle time is always 0
        https://bugs.webkit.org/show_bug.cgi?id=105509

        Reviewed by Pavel Feldman.

        Fix: pass correct profile object to method.

        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView.prototype._injectIdleTimeNode):

2012-12-20  Andrey Lushnikov  <lushnikov@chromium.com>

        Web Inspector: fix |_repaintAll| behaviour of a DefaultTextEditor
        https://bugs.webkit.org/show_bug.cgi?id=105429

        Reviewed by Pavel Feldman.

        Override |_repainAll| method in TextEditorMainPanel and manually
        repaint visible chunks.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorChunkedPanel.prototype._splitChunkOnALine): Call |_repaintAll| method because |expand()| does not do any repaints anymore.
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll): Return |false| in case of fast return, and |true| otherwise.
        (WebInspector.TextEditorMainPanel.prototype._repaintAll): Added.
        (WebInspector.TextEditorMainChunk.prototype.expand): Remove painting operations.

2012-12-19  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce Page.captureScreenshot
        https://bugs.webkit.org/show_bug.cgi?id=105315

        Reviewed by Yury Semikhatsky.

        It will be primarily used by the automation clients, but maybe we find a good place
        for it in the front-end as well.

        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::captureScreenshot):
        (InspectorClient):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::captureScreenshot):
        (WebCore):
        * inspector/InspectorPageAgent.h:

2012-12-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Make order iterator member stack allocated in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=104366

        Reviewed by Tony Chang.

        It avoids a heap allocation during layout.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderIterator::OrderIterator):
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::OrderIterator::first):
        (WebCore::RenderFlexibleBox::OrderIterator::next):
        (WebCore::RenderFlexibleBox::OrderIterator::reset):
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::RenderFlexibleBox::firstLineBoxBaseline):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::appendChildFrameRects):
        (WebCore::RenderFlexibleBox::repaintChildrenDuringLayoutIfMoved):
        (WebCore::RenderFlexibleBox::paintChildren):
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::computeNextFlexLine):
        (WebCore::RenderFlexibleBox::alignFlexLines):
        (WebCore::RenderFlexibleBox::alignChildren):
        (WebCore::RenderFlexibleBox::flipForRightToLeftColumn):
        (WebCore::RenderFlexibleBox::flipForWrapReverse):
        * rendering/RenderFlexibleBox.h:
        (OrderIterator):
        (WebCore::RenderFlexibleBox::OrderIterator::currentChild):
        (RenderFlexibleBox):

2012-12-20  Huang Dongsung  <luxtella@company100.net>

        Remove GraphicsLayer::setGraphicsLayerFactory().
        https://bugs.webkit.org/show_bug.cgi?id=105503

        Reviewed by Kenneth Rohde Christiansen.

        We don't need GraphicsLayer::setGraphicsLayerFactory() anymore. After r130302,
        we have used a graphics layer factory explicitly.

        No new tests. Refactoring only.

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

2012-12-20  Dominik Röttsches  <dominik.rottsches@intel.com>

        [WK2] WebAudio WKTR support
        https://bugs.webkit.org/show_bug.cgi?id=95084

        Reviewed by Kenneth Rohde Christiansen.

        Mac build fixes for adding WebAudio WKTR support.

        No new tests, enables audio testing using WebKitTestRunner.

        * WebCore.exp.in: toUint8Array symbol exported.
        * WebCore.xcodeproj/project.pbxproj: JSUint8Array.h and JSArrayBufferView.h headers made available as private headers.

2012-12-20  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r137534.

        * inspector/InspectorInstrumentation.h:
        (WebCore):

2012-12-19  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: deny access from injected script to nodes from document with another origin
        https://bugs.webkit.org/show_bug.cgi?id=105423

        Reviewed by Pavel Feldman.

        Check that calling context can access the document inspected node belong to
        before returning JS wrapper for the node.

        Test: http/tests/inspector-protocol/access-inspected-object.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::inspectedObject):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::nodeAsScriptValue):

2012-12-19  Nico Weber  <thakis@chromium.org>

        Remove slighly confusing "} if" pattern
        https://bugs.webkit.org/show_bug.cgi?id=105492

        Reviewed by Andreas Kling.

        ADVANCE_TO ends in a goto statement, so this doesn't change behavior.

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):

2012-12-19  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Remove idbFactory from PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=105460

        Reviewed by Darin Fisher.

        Part of a larger refactoring series; see tracking bug 82948.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/PlatformSupport.h: Removed.
        * storage/chromium: Removed.
        * storage/chromium/IDBFactoryBackendInterface.cpp: Removed.

2012-12-19  Eric Carlson  <eric.carlson@apple.com>

        Crash in TextTrack::trackIndexRelativeToRenderedTracks()
        https://bugs.webkit.org/show_bug.cgi?id=105371

        Reviewed by Simon Fraser.

        Add an RAII object to manage text track update blocking, use it to always process the 
        current cues to ensure that cues from a track that is deleted are removed from the 
        shadow DOM before the next layout.

        No new tests, this fixes a crash in media/video-controls-captions-trackmenu.html.

        * html/HTMLMediaElement.cpp:
        (WebCore::TrackDisplayUpdateScope::TrackDisplayUpdateScope): New, call beginIgnoringTrackDisplayUpdateRequests.
        (WebCore::TrackDisplayUpdateScope::~TrackDisplayUpdateScope): New, call endIgnoringTrackDisplayUpdateRequests.
        (WebCore::HTMLMediaElement::beginIgnoringTrackDisplayUpdateRequests):
        (WebCore::HTMLMediaElement::endIgnoringTrackDisplayUpdateRequests): Call updateActiveTextTrackCues
            when the ignore count reaches zero.
        (WebCore::HTMLMediaElement::textTrackAddCues): Use TrackDisplayUpdateScope instead of calling 
            beginIgnoringTrackDisplayUpdateRequests and endIgnoringTrackDisplayUpdateRequests directly.
        (WebCore::HTMLMediaElement::textTrackRemoveCues): Ditto.
        (WebCore::HTMLMediaElement::removeTrack): Ditto.
        (WebCore::HTMLMediaElement::removeAllInbandTracks): Ditto.
        (WebCore::HTMLMediaElement::didRemoveTrack): Ditto. Call removeTrack.
        * html/HTMLMediaElement.h: Declare TrackDisplayUpdateScope as a friend of HTMLMediaElement so it
            can call protected methods.

2012-12-19  Nate Chapin  <japhet@chromium.org>

        REGRESSION(r137607): resource load client callbacks are not called for the main resource when loading HTML string
        https://bugs.webkit.org/show_bug.cgi?id=105330

        Reviewed by Brady Eidson.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::responseReceived):
        (WebCore::MainResourceLoader::dataReceived):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::identifier):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):

2012-12-19  Cosmin Truta  <ctruta@rim.com>

        [BlackBerry] RSS reader mangles UTF-8
        https://bugs.webkit.org/show_bug.cgi?id=105440

        RIM PR 235099

        Reviewed by Yong Li.
        Reviewed internally by Liam Quinn.

        The HTML string built from RSS parse data is encoded in UTF-8,
        and it should not be converted to UTF-8 repeatedly.

        * platform/network/blackberry/rss/RSSFilterStream.cpp:
        (WebCore::RSSFilterStream::convertContentToHtml):
        * platform/network/blackberry/rss/RSSGenerator.cpp:
        (WebCore::RSSGenerator::generateHtml):

2012-12-19  Jon Lee  <jonlee@apple.com>

        Leak in StringImpl::createCFString()
        https://bugs.webkit.org/show_bug.cgi?id=105485
        <rdar://problem/12801963>

        Reviewed by Anders Carlsson.

        * platform/text/cf/StringImplCF.cpp:
        (WTF::StringImpl::createCFString): Missing adoptCF()'s.

2012-12-19  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12890242> [WK2 NetworkProcess] Client doesn't receive SSL certificates
        https://bugs.webkit.org/show_bug.cgi?id=105467

        Reviewed by Brady Eidson.

        Implement a way to store certificate chain in ResourceResponse separately from
        NSURLResponse. There is no way to re-add it to a deserialized NSURLResponse.

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::setCertificateChain):
        (WebCore::ResourceResponse::certificateChain):

2012-12-19  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Add new strings to GTK+'s implementation of
        LocalizedStrings, using glib's context-aware macro.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore):
        (WebCore::textTrackClosedCaptionsText):
        (WebCore::textTrackSubtitlesText):
        (WebCore::textTrackOffText):
        (WebCore::textTrackNoLabelText):

2012-12-18  James Simonsen  <simonjam@chromium.org>

        Set the original resource's response even on a 304
        https://bugs.webkit.org/show_bug.cgi?id=105373

        Reviewed by Nate Chapin.

        The existing setResponse was renamed to responseReceived to better reflect what it does. A new
        setResponse was added that only sets the response. This is used in the 304 case.

        No new tests. A new Resource Timing test will depend on this soon.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::responseReceived):
        * loader/cache/CachedImage.h:
        (CachedImage):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::responseReceived):
        * loader/cache/CachedRawResource.h:
        (CachedRawResource):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::responseReceived):
        * loader/cache/CachedResource.h:
        (CachedResource):
        (WebCore::CachedResource::setResponse):

2012-12-19  Emil A Eklund  <eae@chromium.org>

        [Regression] text-overflow ellipsis clips content when zoomed
        https://bugs.webkit.org/show_bug.cgi?id=105456

        Reviewed by Levi Weintraub.

        At certain zoom levels text-overflow ellipsis incorrectly clips
        content and displays the ellipsis even though the full content
        would fit.

        Test: fast/sub-pixel/ellipsis-zoom.html
        
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::pixelSnappedLogicalRightOffsetForLine):
        Add bug url to FIXME.
        
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        Pixel snap the content edge before comparing with the line box
        edge as the line box edge is aligned to a pixel boundary.

2012-12-19  Antti Koivisto  <antti@apple.com>

        Use ElementTraversal in LiveNodeListBase
        https://bugs.webkit.org/show_bug.cgi?id=105324

        Reviewed by Ryosuke Niwa.

        Factor the code so that we get clean minimally branchy traversal functions for all the common cases.

        This patch changes the more performance critical forward traversal only, backwards traversal is unaffected for now.

        Instruments thinks it is a progression at least in DOM/DOMDivWalk.html. Bots should tell more.

        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::nodeMatches):
        * dom/ClassNodeList.h:
        (ClassNodeList):
        (WebCore::ClassNodeList::create):
        (WebCore):
        (WebCore::ClassNodeList::nodeMatchesInlined):

            Add inlined version of the matching function for class lists.

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeListBase::rootContainerNode):

            Root is always ContainerNode if the list has anything in it. Traversal functions are slightly more
            efficient if we know we are operating on ContainerNodes.

        (WebCore):
        * dom/LiveNodeList.h:
        (LiveNodeListBase):
        (WebCore::LiveNodeListBase::shouldOnlyIncludeDirectChildren):
        * dom/Node.cpp:
        (WebCore::Node::getElementsByTagName):
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::TagNodeList::~TagNodeList):
        (WebCore::HTMLTagNodeList::HTMLTagNodeList):
        (WebCore::HTMLTagNodeList::nodeMatches):
        * dom/TagNodeList.h:
        (WebCore):
        (TagNodeList):
        (WebCore::TagNodeList::create):
        (HTMLTagNodeList):
        (WebCore::HTMLTagNodeList::create):

            Use separate ContainerType enum value for HTMLTagNodeList so we can tell it apart from TagNodeList.

        (WebCore::HTMLTagNodeList::nodeMatchesInlined):

            Add inlined version of the matching function for tag lists.

        * html/CollectionType.h:
        * html/HTMLCollection.cpp:
        (WebCore::shouldOnlyIncludeDirectChildren):
        (WebCore::rootTypeFromCollectionType):
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore):
        (WebCore::isMatchingElement):
        
            List type templated matching functions for common cases.

        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::create):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::previousNode):
        (WebCore::lastNode):
        (WebCore::LiveNodeListBase::iterateForPreviousNode):
        (WebCore::LiveNodeListBase::itemBefore):

            Leave the backwards traversal unchanged for now but remove the forward traversal code.

        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::firstMatchingChildElement):
        (WebCore::nextMatchingChildElement):
        (WebCore::traverseMatchingElementsForwardToOffset):

            List type templated traversal functions with matching. Separate functions for first and subsequent elements

        (WebCore::LiveNodeListBase::traverseChildNodeListForwardToOffset):
        (WebCore::LiveNodeListBase::traverseLiveNodeListFirstElement):
        (WebCore::LiveNodeListBase::traverseLiveNodeListForwardToOffset):

            LiveNodeList traversal, picking the right template.

        (WebCore::LiveNodeListBase::item):
        (WebCore::LiveNodeListBase::itemBeforeOrAfterCachedItem):

            Switch to new traversal functions.

        (WebCore::HTMLCollection::traverseFirstElement):
        (WebCore::HTMLCollection::traverseForwardToOffset):
        (WebCore::HTMLCollection::traverseNextElement):

            HTMLCollection traversal, picking the right template.

        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):

            Switch to new traversal functions.

        * html/HTMLCollection.h:
        (HTMLCollection):

2012-12-19  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12896478> Cannot log into gmail/facebook with NetworkProcess and private browsing enabled
        https://bugs.webkit.org/show_bug.cgi?id=105454

        Reviewed by Brady Eidson.

        Request was using a wrong session after a redirect, because session cannot be
        preserved over IPC.

        Just set the storage session after calling the client, it is not really meaningful
        for a client to change session behind WebKit's back.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):

2012-12-19  Alexis Menard  <alexis@webkit.org>

        Implement CSS parsing for CSS transitions unprefixed.
        https://bugs.webkit.org/show_bug.cgi?id=104804

        Reviewed by Dean Jackson.

        Add support of an unprefixed version of CSS transitions modules by adding unprefixed versions
        of each CSS properties. The work is protected behind the flag ENABLE_CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
        to cover the work of unprefixing Transforms, Animations and Transitions. It will let the possibility of each ports to turn it off 
        in their release branches until we're confident that these CSS properties are ready to be unprefixed.

        Test: transitions/transitions-parsing.html

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.features.am.in:
        * css/CSSPropertyNames.in: alias the unprefixed versions to the prefixed versions.

2012-12-12  Antonio Gomes  <a1.gomes@sisa.samsung.com>

        Make RenderLayerCompositor::requiresCompositingForScrollableFrame scrollbars agnostic
        https://bugs.webkit.org/show_bug.cgi?id=97903

        Reviewed by Simon Fraser.

        Some ports (including Qt-wk1 and BlackBerry) allow disabling
        scrollbars at FrameView creation level. Regardless the scrollbars
        presence though, their frame's content can still be scrolled as needed.
        The said, checking for the scrollbars presence in order to determine
        the scrollability of an inner frame is flaky, as done in RenderLayerCompositor::requiresCompositingForScrollableFrame.

        Instead, the patch factors out part of the logic in
        FrameView::updateScrollableAreaSet into a new ::isScrollable method.
        The later can be used to check the scrollability of a given FrameView.

        No new tests added, since there is no behavior change: ports like Chromium and others
        who currently check for the scrollbars presence in order to determine
        an inner frame scrollability should not be affected.

        * page/FrameView.cpp:
        (WebCore::FrameView::isScrollable):
        (WebCore):
        (WebCore::FrameView::updateScrollableAreaSet):
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame):

2012-12-18  Roger Fong  <roger_fong@apple.com>

        Popup menu on Windows should fade in instead of sliding in.
        https://bugs.webkit.org/show_bug.cgi?id=105358
        <rdar://problem/7611211>

        Reviewed by Timothy Horton.

        Changing popup menu display animation to match what most other Windows applications do.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::show):

2012-12-19  Levi Weintraub  <leviw@chromium.org>

        Correct missing touch event handler de-registration for nested Documents and DOMWindows
        https://bugs.webkit.org/show_bug.cgi?id=105384

        Reviewed by James Robinson.

        Correcting case by which a nested DOMWindow wouldn't clean up its event handler references
        on its Document when removeAllEventListeners was called. Also, correctly propagating this
        from a nested Document to its owner Document.

        Updating fast/events/touch/touch-handler-count.html to catch this bug.

        * dom/Document.cpp:
        (WebCore::Document::didRemoveEventTargetNode):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::removeAllEventListeners):

2012-12-18  Simon Fraser  <simon.fraser@apple.com>

        Fix regression from r137923 that caused all tiles to paint when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=105394

        Reviewed by Dean Jackson.

        r137923 removed a 'continue' from the loop that ensures we have tile coverage,
        but this caused us to issue repaints for all existing tiles.
        
        Fix to 'continue' when the tile size is unchanged. Also remove 'primaryLayerCount'
        which was unused.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::revalidateTiles):

2012-12-19  Nate Chapin  <japhet@chromium.org>

        REGRESSION(r137607): PluginDocument loads consume huge amounts of memory
        https://bugs.webkit.org/show_bug.cgi?id=105359

        Reviewed by Alexey Proskuryakov.

        No new tests, verified manually that http://www.scb.se/statistik/_publikationer/NR0001_2012K02_TI_A28TI1203.pdf
        no longer consumes several GB of memory.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::setShouldBufferData): shouldBufferData is an enum, not a boolean, so this is reversed.
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::data): If the dataReceived() callback tells us to stop buffering data, be sure to
            notify the ResourceLoader and clear the data buffer.

2012-12-19  Gavin Peters  <gavinp@chromium.org>

        [chromium] WebCore::Prerender::didStartPrerender depends on LinkLoader
        https://bugs.webkit.org/show_bug.cgi?id=105290

        Reviewed by Abhishek Arya.

        The LinkLoader now removes itself from its prerender in time.

        Tested in unit tests, PrerenderingTest.FastRemoveElement.

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::~LinkLoader):
        (WebCore::LinkLoader::released):

2012-12-19  Brian Salomon  <bsalomon@google.com>

        [Chromium/Skia] Check whether bitmap has pixels in image encoders
        https://bugs.webkit.org/show_bug.cgi?id=105349

        Reviewed by Stephen White.

        This adds NULL checks to the JPEG, PNG, WEBP encoders.

        Difficult to test as condition occurs when OOM.

        * platform/image-encoders/skia/JPEGImageEncoder.cpp:
        (WebCore::JPEGImageEncoder::encode):
        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::PNGImageEncoder::encode):
        * platform/image-encoders/skia/WEBPImageEncoder.cpp:
        (WebCore::WEBPImageEncoder::encode):

2012-12-19  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Unable to place the caret at the end of the first line, when followed by a block, in the vertical writing mode.
        https://bugs.webkit.org/show_bug.cgi?id=104794

        Reviewed by Ryosuke Niwa.

        In the vertical writing mode, when trying to place the caret at the end
        of a text line which is followed by a block, the local point sent as
        part of the hitTest result in the mouse click event is not correct.

        When clicking on the empty region (beyond the text) in the first line,
        the local point computed is not in accordance with the writing mode.

        Test: editing/selection/caret-at-end-of-text-line-followed-by-block-in-vertical-mode.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        Modified the code to handle the point as per the writing mode when
        computing the hitTest result. Calling flipForWritingMode() on the
        point for achieving the same.

2012-12-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138157.
        http://trac.webkit.org/changeset/138157
        https://bugs.webkit.org/show_bug.cgi?id=105439

        Crashes with assertion failures in EFL debug build. (Requested
        by drott on #webkit).

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (SharedGLData):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawTextureWithAntialiasing):
        (WebCore::keyForFilterType):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::TextureMapperGL::beginClip):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore):
        (ShaderSpec):
        (WebCore::ShaderSpec::ShaderSpec):
        (WebCore::getShaderSpec):
        (WebCore::TextureMapperShaderManager::getShaderProgram):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):
        (TextureMapperShaderManager):

2012-12-19  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable Navigation Timing by default
        https://bugs.webkit.org/show_bug.cgi?id=105322

        Reviewed by Martin Robinson.

        The Navigation Timing specification (of which implementation is guarder
        by the ENABLE_WEB_TIMING feature define) has been promoted to the W3C Recommendation
        status. Because of this we should enable it by default in the release builds of
        the GTK port.

        No new tests - they already exist and are in majority passing.

        * GNUmakefile.am:
        * bindings/gobject/GNUmakefile.am: Move the DOM bindings for interfaces related to this
        feature out of the unstable features define guard and into the general list.

2012-12-19  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: default font on mac is Monaco (should do be Menlo)
        https://bugs.webkit.org/show_bug.cgi?id=105435

        Reviewed by Alexander Pavlov.

        Regressed when I introduced mountain lion modifier in the inspector.css.

        * inspector/front-end/inspector.css:
        (body.platform-mac .monospace, body.platform-mac .source-code):
        (body.platform-mac.platform-mac-tiger .source-code):

2012-12-19  Hayato Ito  <hayato@chromium.org>

        Expose WebKitShadowRoot constructor to DOMWindow.
        https://bugs.webkit.org/show_bug.cgi?id=105385

        Reviewed by Dimitri Glazkov.

        This is a follow-up patch for r137870.  WebKitShadowRoot
        constructor should be in DOMWindow, just like all of the other
        not-callable-constructors like HTMLDivElement, etc.  We need it
        for instanceof tests and so on.

        Test: fast/dom/shadow/shadow-root-js-api.html
              fast/js/global-constructors-expected.html

        * page/DOMWindow.idl:

2012-12-19  Andrey Lushnikov  <lushnikov@chromium.com>

        Web Inspector: refactor DefaultTextEditor's |expanded| setters
        https://bugs.webkit.org/show_bug.cgi?id=105415

        Reviewed by Pavel Feldman.

        Refactor |expanded| setters and getters into |collapse()|, |expand()|
        and |expanded()| methods

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorChunkedPanel.prototype._splitChunkOnALine):
        (WebInspector.TextEditorChunkedPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorGutterChunk.prototype.expanded): Added.
        (WebInspector.TextEditorGutterChunk.prototype.collapse): Added.
        (WebInspector.TextEditorGutterChunk.prototype.expand): Added.
        (WebInspector.TextEditorMainPanel.prototype.markAndRevealRange):
        (WebInspector.TextEditorMainPanel.prototype._updateHighlightsForRange):
        (WebInspector.TextEditorMainChunk.prototype.expanded): Added.
        (WebInspector.TextEditorMainChunk.prototype.collapse): Added.
        (WebInspector.TextEditorMainChunk.prototype.expand): Added.

2012-12-19  Pan Deng  <pan.deng@intel.com>

        Web Inspector: Use Document* as argument in WebSocket Instrumentation.
        https://bugs.webkit.org/show_bug.cgi?id=105279.

        Reviewed by Pavel Feldman.

        Some WebSocket instrumentation fuctions adopted ScriptExecutionContext* as argument, it is not clear that
        their clients and implementations are all using Document*. This patch adopt Document* as argument, and 
        Document* could supply more information in future.

        No functionality changed, no new tests.

        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):

2012-12-19  Tim Volodine  <timvolodine@chromium.org>

        Text Autosizing: Work out what to do about form controls
        https://bugs.webkit.org/show_bug.cgi?id=102560

        Reviewed by Kenneth Rohde Christiansen.

        Disallow autosizing of form input controls like buttons, text input fields, selection controls, radio buttons
        and check boxes. This is a short term solution to avoid inconsistent autosizing of form controls (which is
        worse than not autosizing at all).

        Tests: fast/text-autosizing/form-controls-autosizing-button-input-elements.html
               fast/text-autosizing/form-controls-autosizing-checkbox-input-element.html
               fast/text-autosizing/form-controls-autosizing-radio-input-element.html
               fast/text-autosizing/form-controls-autosizing-select-element.html
               fast/text-autosizing/form-controls-autosizing-textfield-input-elements.html

        * rendering/TextAutosizer.cpp:
        (WebCore):
        (WebCore::formInputTags):
        (WebCore::TextAutosizer::isAutosizingContainer):
        (WebCore::TextAutosizer::contentHeightIsConstrained):
        (WebCore::TextAutosizer::containerShouldBeAutosized):
        (WebCore::TextAutosizer::containerContainsOneOfTags):
        * rendering/TextAutosizer.h:

2012-12-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add Workspace.setFileContent() method
        https://bugs.webkit.org/show_bug.cgi?id=105434

        Reviewed by Pavel Feldman.

        Added method that will be usedto save file system-based uiSourceCodes to the disk.

        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype._commitContent):
        * inspector/front-end/Workspace.js:
        (WebInspector.WorkspaceProvider.prototype.setFileContent):
        (WebInspector.Project.prototype.setFileContent):

2012-12-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Rename workspace path to uri.
        https://bugs.webkit.org/show_bug.cgi?id=105433

        Reviewed by Pavel Feldman.

        URI should later become file unique id / address in workspace.

        * inspector/front-end/NetworkWorkspaceProvider.js:
        (WebInspector.NetworkWorkspaceProvider.prototype.requestFileContent):
        (WebInspector.NetworkWorkspaceProvider.prototype.setFileContent):
        (WebInspector.NetworkWorkspaceProvider.prototype.searchInFileContent):
        (WebInspector.NetworkWorkspaceProvider.prototype.addFile):
        (WebInspector.NetworkWorkspaceProvider.prototype.removeFile):
        * inspector/front-end/Workspace.js:
        (WebInspector.FileDescriptor):
        (WebInspector.WorkspaceProvider.prototype.requestFileContent):
        (WebInspector.WorkspaceProvider.prototype.searchInFileContent):
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):
        (WebInspector.Project.prototype.requestFileContent):
        (WebInspector.Project.prototype.searchInFileContent):
        (WebInspector.Workspace.prototype.addTemporaryUISourceCode):

2012-12-14  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Refactor CSS[Keyword]Completions to augment property metadata
        https://bugs.webkit.org/show_bug.cgi?id=105020

        Reviewed by Pavel Feldman.

        - CSSCompletions and CSSKeywordCompletions of WebInspector have been merged into CSSMetadata.
        - Valid value keyword lists have been added or augmented for some properties.
        - Some properties have been made inherited or color-aware.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/CSSCompletions.js: Removed.
        * inspector/front-end/CSSKeywordCompletions.js: Removed.
        * inspector/front-end/CSSMetadata.js: Added.
        (WebInspector.CSSMetadata):
        (WebInspector.CSSMetadata.isColorAwareProperty):
        (WebInspector.CSSMetadata.colors):
        (WebInspector.CSSMetadata.valuesForProperty):
        (WebInspector.CSSMetadata.descriptor):
        (WebInspector.CSSMetadata.requestCSSShorthandData):
        (WebInspector.CSSMetadata.cssPropertiesMetainfoKeySet):
        (WebInspector.CSSMetadata.prototype.startsWith):
        (WebInspector.CSSMetadata.prototype.mostUsedOf):
        (WebInspector.CSSMetadata.prototype._firstIndexOfPrefix):
        (WebInspector.CSSMetadata.prototype.keySet):
        (WebInspector.CSSMetadata.prototype.next):
        (WebInspector.CSSMetadata.prototype.previous):
        (WebInspector.CSSMetadata.prototype._closest):
        (WebInspector.CSSMetadata.prototype.longhands):
        (WebInspector.CSSMetadata.prototype.shorthands):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleDeclaration.prototype.longhandProperties):
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer):
        * inspector/front-end/SourceCSSTokenizer.re2js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.createExclamationMark):
        (WebInspector.StylesSidebarPane.prototype._markUsedProperties):
        (WebInspector.StylesSidebarPane.prototype._containsInherited):
        (WebInspector.StylePropertiesSection.prototype.isPropertyInherited):
        (WebInspector.StylePropertiesSection.prototype.isPropertyOverloaded):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2012-12-19  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Instead of having multiple shaders sources with lots of duplication, we should have one shader source with MACRO variants
        https://bugs.webkit.org/show_bug.cgi?id=104815

        Reviewed by Kenneth Rohde Christiansen.

        Created templates for the vertex and fragment shaders, and added some MACROs in 
        TextureMapperShaderManager to allow GLSL precompiler-based configuration.

        The template follows a pattern where the main function in the shader calls
        applyFooBarIfNeeded(), while applyFooBar() is implemented. The Macros prepended to the template define whether applyIfNeeded resolves to the real function or to a noop.

        In addition, made some small changes to the filter shaders so that they can use the same code as the normal shaders.

        Covered by existing pixel/ref tests when run on Qt/EFL/GTK.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::TextureMapperGL::drawTextureWithAntialiasing):
        (WebCore::optionsForFilterType):
        (WebCore):
        (WebCore::getPassesRequiredForFilter):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::BitmapTextureGL::applyFilters):
            Always draw using the drawQuad function, and use the new TextureMapperShaderManager::Options mask instead of the old ShaderKey.

        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore):
        (WebCore::getShaderSpec):
        (WebCore::TextureMapperShaderManager::getShaderProgram):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):
        (TextureMapperShaderManager):

2012-12-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Support removing several tabs from TabbedEditorContainer/TabbedPane at once.
        https://bugs.webkit.org/show_bug.cgi?id=104881

        Reviewed by Alexander Pavlov.

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeRemoved):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype.removeUISourceCode):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.closeTab):
        (WebInspector.TabbedPane.prototype.closeTabs):

2012-12-19  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: scripts to evaluate on load are not removed from inspector state when Page agent is disabled
        https://bugs.webkit.org/show_bug.cgi?id=105422

        Reviewed by Alexander Pavlov.

        - reset scripts to evaluate on load when InspectorPageAgent is disabled.
        - added InspectorState::remove();

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::remove):
        (WebCore):
        * inspector/InspectorState.h:
        (InspectorState):

2012-12-19  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Make year field readonly if min and max have the same year
        https://bugs.webkit.org/show_bug.cgi?id=105383

        Reviewed by Kent Tamura.

        Make year field readonly if min and max have the same year, and it does not have
        value with different year.

        Test: fast/forms/date-multiple-fields/date-multiple-fields-readonly-subfield.html

        * css/html.css: Add CSS rule for the year field.
        * html/shadow/DateTimeEditElement.cpp:
        (DateTimeEditBuilder):
        (WebCore::DateTimeEditBuilder::visitField): Make year-field readonly when appropriate.
        (WebCore::DateTimeEditBuilder::shouldYearFieldReadOnly): Added.

2012-12-19  Max Feil  <mfeil@rim.com>

        [BlackBerry] Fix undesired re-entrant calls during media error dialog
        https://bugs.webkit.org/show_bug.cgi?id=105398

        Reviewed by Rob Buis.

        A recent change in libwebview (PR194379) to the dialog
        handling means that dialogs are not truly blocking anymore.
        While the dialog is up, a sub-event loop is called. Therefore
        the HTML5 media code will continue processing pps messages from
        mm-renderer, responding to periodic timers, etc., all while a
        media error dialog call higher up in the stack is waiting for
        the user to respond. Unfortunately certain places in our code
        do not anticipate being called in this re-entrant way.

        This patch restores previous behaviour, covered by existing tests.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::waitMetadataTimerFired):

2012-12-19  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] The last remembered tab is not restored when the Settings dialog is opened
        https://bugs.webkit.org/show_bug.cgi?id=105414

        Reviewed by Vsevolod Vlasov.

        Do not force the "General" tab when opening settings upon the Cog button click.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsController.prototype._mouseUp):

2012-12-19  Renata Hodovan  <reni@webkit.org>

        CSSParser crases, when no context is available, and the value is a valid keyword
        https://bugs.webkit.org/show_bug.cgi?id=105275

        Reviewed by Tony Chang.

        ParserContext could be null even if the keyword is valid. We have to check it.

        Test: fast/css/invalid-parsercontext-valid-keyword-crash.svg

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

2012-12-19  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Refactor GLXSurface.
        https://bugs.webkit.org/show_bug.cgi?id=105357

        Reviewed by Kenneth Rohde Christiansen.

        This is in preparation for adding EGL support.
        There is lot of X related code which could be shared between our current GLX implementation
        and EGL. This patch makes it possible to share the common code but doesn't change any functionality.

        * PlatformEfl.cmake:
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore):
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXTransportSurface::configuration):
        (WebCore::GLXTransportSurface::destroy):
        (WebCore::GLXTransportSurface::freeResources):
        (WebCore::GLXPBuffer::GLXPBuffer):
        (WebCore::GLXPBuffer::initialize):
        (WebCore::GLXPBuffer::configuration):
        (WebCore::GLXPBuffer::setGeometry):
        * platform/graphics/surfaces/glx/GLXSurface.h:
        (GLXTransportSurface):
        (GLXPBuffer):

        GLX related implementation.
        * platform/graphics/surfaces/glx/GLXWindowResources.h: Added.
        (WebCore):
        (SharedGLXResources):
        (WebCore::SharedGLXResources::create):
        (WebCore::SharedGLXResources::nativeDisplay):
        (WebCore::SharedGLXResources::pBufferContextConfig):
        (WebCore::SharedGLXResources::surfaceContextConfig):
        (WebCore::SharedGLXResources::SharedGLXResources):
        (WebCore::SharedGLXResources::createConfig):

        Moving X related code to a seperate class.
        * platform/graphics/surfaces/glx/X11WindowResources.cpp: Added.
        (WebCore):
        (WebCore::X11OffScreenWindow::X11OffScreenWindow):
        (WebCore::X11OffScreenWindow::~X11OffScreenWindow):
        (WebCore::X11OffScreenWindow::setGeometry):
        (WebCore::X11OffScreenWindow::createOffscreenWindow):
        * platform/graphics/surfaces/glx/X11WindowResources.h: Added.
        (WebCore):
        (SharedX11Resources):
        (WebCore::SharedX11Resources::deref):
        (WebCore::SharedX11Resources::x11Display):
        (WebCore::SharedX11Resources::getXWindow):
        (WebCore::SharedX11Resources::visualInfo):
        (WebCore::SharedX11Resources::isXRenderExtensionSupported):
        (WebCore::SharedX11Resources::SharedX11Resources):
        (WebCore::SharedX11Resources::~SharedX11Resources):
        (X11OffScreenWindow):

2012-12-19  Tommy Widenflycht  <tommyw@chromium.org>

        [JSC] Add support for overloaded constructors
        https://bugs.webkit.org/show_bug.cgi?id=103226

        Reviewed by Kentaro Hara.

        This patch adds the same support for overloaded constructors to JSC as V8.
        As proof of implementation soundness WebSockets custom constructor is removed.

        Existing tests cover patch. As they should.

        * GNUmakefile.list.am:
        * Modules/websockets/WebSocket.idl:
        * Target.pri:
        * UseJSC.cmake:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSWebSocketCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDeclaration):
        (GenerateConstructorDefinitions):
        (GenerateOverloadedConstructorDefinition):
        (GenerateConstructorDefinition):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors1):
        (WebCore):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors2):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors3):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors4):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        (JSTestOverloadedConstructorsConstructor):

2012-12-19  Seokju Kwon  <seokju.kwon@gmail.com>

        Pass debuggerTaskMode as a parameter in WorkerScriptDebugServer constructor
        https://bugs.webkit.org/show_bug.cgi?id=105085

        Reviewed by Yury Semikhatsky.

        Leave WorkerDebuggerAgent::debuggerTaskMode
        and remove WorkerScriptDebugServer::debuggerTaskMode.

        No new tests, no behavior change.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        * bindings/js/WorkerScriptDebugServer.h:
        (WorkerScriptDebugServer):
        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::runMessageLoopOnPause):
        * bindings/v8/WorkerScriptDebugServer.h:
        (WorkerScriptDebugServer):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):

2012-12-19  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed, rolling out r138129.
        http://trac.webkit.org/changeset/138129
        https://bugs.webkit.org/show_bug.cgi?id=105399

        reapply patch r138123. The problem was on chromium side at r173875.

        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        * dom/Element.h:
        (WebCore::Node::insertedInto):
        (WebCore):
        (WebCore::Node::removedFrom):
        * dom/Node.cpp:

2012-12-19  Takashi Sakamoto  <tasak@google.com>

        [Shadow] TITLE elements in Shadow DOM should not affect document.title attribute
        https://bugs.webkit.org/show_bug.cgi?id=85864

        Reviewed by Ryosuke Niwa.

        Modified HTMLTitleElement to check whether a title element is in a
        shadow tree or not when it is inserted or removed. Now if a title
        element has been just removed from or inserted into a shadow tree,
        document.title is not updated independent of inDocument().  If the
        title element is not in a shadow tree and in document,
        document.title is updated.

        Test: fast/dom/shadow/title-element-in-shadow.html

        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::insertedInto):
        Added a condition: isInShadowTree() to the code which checks
        inDocument or not.
        (WebCore::HTMLTitleElement::removedFrom):
        Added a condition: insertionPoint.isInShadowTree() to the code which
        checks an insertion point is in a document or not.
        (WebCore::HTMLTitleElement::childrenChanged):
        Added a condition: isInShadowTree() before setTitle.
        If not isInShadowTree, modified to removeTitle from document.

2012-12-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138123.
        http://trac.webkit.org/changeset/138123
        https://bugs.webkit.org/show_bug.cgi?id=105399

        It broke compositing/visibility/visibility-simple-video-
        layer.html (Requested by loislo on #webkit).

        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::insertedInto):
        (WebCore):
        (WebCore::Node::removedFrom):

2012-12-18  Shinya Kawanaka  <shinyak@chromium.org>

        ShadowRoot.getElementById() returns a deleted element
        https://bugs.webkit.org/show_bug.cgi?id=105243

        Reviewed by Dimitri Glazkov.

        Only when the treeScope of an element and the treeScope of insertionPoint is the same in insertedInto or removedFrom,
        we can call updatedId() etc. However, we didn't check it's same.

        For removedFrom, since an element has been removed, treeScope() doesn't return the original treeScope but document()
        every time.

        This patch might hurt html5-full-render a bit: the result is here. The first 2 results are without this patch,
        the last 2 results are with this patch.

        Dromaeo/dom-modify [runs/s]
             35.97,   36.09 -->   36.05,   35.69
        Parser/html5-full-render [ms]
           4156.58, 4166.09 --> 4155.22, 4216.38

        Test: fast/dom/shadow/getelementbyid-shadow.html

        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        * dom/Element.h:
        (WebCore::Node::insertedInto): Moved from Node.cpp to make this inline.
        (WebCore):
        (WebCore::Node::removedFrom): ditto.
        * dom/Node.cpp:

2012-12-18  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: AuditLauncherView UI components should be disabled until ongoing audit finishes
        https://bugs.webkit.org/show_bug.cgi?id=105389

        Reviewed by Alexander Pavlov.

        While the Audit request is on-going, UI components on the AuditLauncherView are disabled
        until the request is completed or explicitly stopped. Also changed the _categoriesElement
        from div to fieldset and modified the associated CSS file accordingly.

        No new tests as this is a UI change.

        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._setAuditRunning):
        (WebInspector.AuditLauncherView.prototype._toggleUIComponents):
        * inspector/front-end/auditsPanel.css:
        (.audit-launcher-view fieldset.audit-categories-container):

2012-12-18  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL] regression(r138071) Add mission functions for build fix
        https://bugs.webkit.org/show_bug.cgi?id=105392

        Unreviewed build fix.

        r138071 add new functions to LocalizedStrings.cpp, but EFL port doesn't use them.
        So, add those functions to LocalizedStringsEfl.cpp 

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore):
        (WebCore::textTrackClosedCaptionsText):
        (WebCore::textTrackSubtitlesText):
        (WebCore::textTrackOffText):
        (WebCore::textTrackNoLabelText):

2012-12-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Chromium] profiler - differentiate between native code (program) and idle time
        https://bugs.webkit.org/show_bug.cgi?id=88446

        Reviewed by Pavel Feldman.

        Now idleTime is supplied in profile object. In this patch, idleTime,
        if any, is subtracted from "(program)" node, and new node "(idle)" is
        injected as a top level node to profile.

        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileView.profileCallback): Call _injectIdleTimeNode
        if non-zero idleTime is specified.
        (WebInspector.CPUProfileView.prototype._injectIdleTimeNode): Lookup for
        "(program)" node, modify it, add "(idle)" node.

2012-12-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138097.
        http://trac.webkit.org/changeset/138097
        https://bugs.webkit.org/show_bug.cgi?id=105386

        multiple crashes on media tests (Requested by loislo on
        #webkit).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::createFileURLForApplicationCacheResource):
        (WebCore::stringForNetworkState):
        (WebCore::HTMLMediaElement::preload):
        (WebCore::HTMLMediaElement::setLoop):
        (WebCore::HTMLMediaElement::getPluginProxyParams):

2012-12-18  Julien Chaffraix  <jchaffraix@webkit.org>

        Free one bit in RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=105065

        Reviewed by Simon Fraser.

        This change uses the mutual exclusivity between the different position bits to pack
        the information more efficiently. Because you can be only in one position at any point
        in time, you only need to store 4 states in RenderObject (ie 2 bits of information) but
        we were using 3 bits to store this information, thus losing one bit that I am reclaiming.

        The change covers the 3 bits into a single PositionState. In order to avoid any extra branch
        on the common code path, the logic was modified to be able to convert a EPosition to a PositionState
        using only a bit mask. This also means that we now sets up and clears all the bits at once instead
        of several calls, which matches more closely what happens at style change.

        Change covered by existing tests.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateFromStyle):
        Removed a call, superseed by the one in RenderBoxModelObject::updateFromStyle.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::updateFromStyle):
        Changed to set the positioned bits in only one call to setPositionedState.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        Changed to clear all positioned bits at once.

        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::styleDidChange):
        Ditto, which was probably the intent anyway.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        Changed to explicitly be AbsolutelyPositioned, not that it really matters as we only store
        the out-of-flow information.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isOutOfFlowPositioned):
        (WebCore::RenderObject::isInFlowPositioned):
        (WebCore::RenderObject::isRelPositioned):
        (WebCore::RenderObject::isStickyPositioned):
        (WebCore::RenderObject::isPositioned):
        (WebCore::RenderObject::clearPositionedState):
        Updated after the renaming below.

        (WebCore::RenderObject::setPositionState):
        Ditto, but added an ASSERT to ensure that the out-of-flow bit is only set on boxes, to match
        existing code.

        * rendering/style/RenderStyleConstants.h:
        Changed the values so that the conversion to PositionState is a simple bit mask, e.g
        FixedPosition & 0x3 == AbsolutePosition as we only store the out-of-flow position information.

        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        Introduced PositionState to hold the different bits.

        (WebCore::RenderObject::RenderObjectBitfields::setPositionedState):
        (WebCore::RenderObject::RenderObjectBitfields::clearPositionedState):
        (WebCore::RenderObject::RenderObjectBitfields::isOutOfFlowPositioned):
        (WebCore::RenderObject::RenderObjectBitfields::isRelPositioned):
        (WebCore::RenderObject::RenderObjectBitfields::isStickyPositioned):
        (WebCore::RenderObject::RenderObjectBitfields::isPositioned):
        Re-implemented these getters / setters and renamed them to match our style while at it.


2012-12-18  Anton Vayvod  <avayvod@chromium.org>

        Text Autosizing: containers wider than their enclosing clusters should be autosized as separate clusters
        https://bugs.webkit.org/show_bug.cgi?id=103627

        Reviewed by Julien Chaffraix.

        Some blocks of texts might be wider than their parent clusters and need to be autosized separately.

        isAutosizingCluster() now checks for the width of the container being greater than the width of the lowest
        common ancestor of the text nodes of the enclosing cluster. This block containing all text is passed to all
        tree traversal methods.
        An overloaded version is added for cases when we don't have the lowest common ancestor yet.

        The change fixes several cases covered by existing tests.

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processSubtree):

            Calls processCluster with a new number of arguments.

        (WebCore::TextAutosizer::processCluster):

            Passes block containing all text nodes into processContainer. Assertion removed since it can no longer be
            checked without passing an additional parameter (the parent block containing all text) to the function
            for the sake of this assertion only.

        (WebCore::TextAutosizer::processContainer):

            |parentBlockContainingAllText| parameter passed into isAutosizingCluster.

        (WebCore::TextAutosizer::isAutosizingCluster(const RenderBlock*, const RenderBlock*)):

            The overloaded method that is used when the render block checked is already known to be an autosizing
            container and there's full information necessary to determine if it's a cluster like the parent block
            containing all text within the enclosing cluster. 
            Considers a block a cluster if it is wider than its parent block containing all text within enclosing
            cluster.

        (WebCore::TextAutosizer::isAutosizingCluster(const RenderObject*)):

            The overloaded method that checks for the given object to be an autosizing container first (for
            convenience of the caller) and doesn't require information about the parent cluster. Used when such
            information is not available, for example, in the process of retrieving the information for the parent
            cluster or when looking for the root cluster in the tree.

        (WebCore::TextAutosizer::clusterShouldBeAutosized):

            Passes new parameter to measureDescendantTextWidth.

        (WebCore::TextAutosizer::measureDescendantTextWidth):

            Uses blockContainingAllText parameter to pass to isAutosizingCluster.

        (WebCore::TextAutosizer::findDeepestBlockContainingAllText):

            Assertion removed since it can no longer be checked without passing an additional parameter (the
            parent block containing all text) to the function for the sake of this assertion only.

        (WebCore::TextAutosizer::findFirstTextLeafNotInCluster):
            Uses shorter isAutosizingCluster call.

2012-12-18  Alexey Proskuryakov  <ap@apple.com>

        Remove unnecessary functions from CookiesStrategy
        https://bugs.webkit.org/show_bug.cgi?id=105369

        Reviewed by Brady Eidson.

        Remove CookieJar functions that are only ever called from WebKit.

        * WebCore.exp.in:
        * loader/CookieJar.cpp:
        * loader/CookieJar.h:
        * platform/CookiesStrategy.h:

2012-12-18  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK][AC] Assertion failed while destroying GraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=105312

        Reviewed by Gustavo Noronha Silva.

        According to the comment in GraphicsLayer::~GraphicsLayer(), we should call
        willBeDestroyed() before destructor of GraphicsLayer.

        No new tests since this patch can be covered by already existing gtk ac tests.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::~GraphicsLayerClutter): call willBeDestroyed()

2012-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        Minor improvements to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=105353

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::createFileURLForApplicationCacheResource):
        (WebCore::stringForNetworkState):
        (WebCore::HTMLMediaElement::preload):
        (WebCore::HTMLMediaElement::getPluginProxyParams):
        Use ASCIILiteral for literal strings becoming WTFStrings.

        (WebCore::HTMLMediaElement::setLoop):
        By going through setAttribute, parseAttribute would already take care of
        updating the disable sleep, so the call here is not needed.

2012-12-18  Levi Weintraub  <leviw@chromium.org>

        Input elements with default touch handlers don't update handler counts when changing documents
        https://bugs.webkit.org/show_bug.cgi?id=105334

        Reviewed by James Robinson.

        When an Input element with default touch event handlers changes documents, it failed to
        update the touch event handler sets in both the old and new document. This patch fixes this
        case.

        Test: fast/events/touch/touch-input-element-change-documents.html

        * dom/Document.h:
        (WebCore::Document::didRemoveTouchEventTargetNode) This function makes sense when touch
        handling is enabled, regardless of whether we're tracking the rects.
        * dom/Document.cpp:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement): Switch from didRemoveTouchEventHandler to
        didRemoveTouchEventTargetNode, since we don't care about counts in the destructor.
        (WebCore::HTMLInputElement::updateType): Fixing incorrect indentation.
        (WebCore::HTMLInputElement::didMoveToNewDocument): Adding the node to the new document and
        removing it from the old.

2012-12-18  Mark Lam  <mark.lam@apple.com>

        Fixed bad merge in "Initial refactoring of database functionality into the manager and server".
        https://bugs.webkit.org/show_bug.cgi?id=104748.

        Not reviewed.

        No new tests.

        * Modules/webdatabase/DBBackendServer.cpp:

2012-12-18  Mark Lam  <mark.lam@apple.com>

        Initial refactoring of database functionality into the manager and server.
        https://bugs.webkit.org/show_bug.cgi?id=104748.

        Reviewed by Brady Eidson.

        This is not a complete refactor, but a stepping stone on the way to isolating
        script side database activity from the SQL backend.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractDatabase.cpp:
        (WebCore):
        (WebCore::updateGuidVersionMap):
        (WebCore::guidForOriginAndName):
        (WebCore::AbstractDatabase::AbstractDatabase):
        (WebCore::AbstractDatabase::maximumSize):
        * Modules/webdatabase/AbstractDatabase.h:
        (AbstractDatabase):
        - Moved isAvailable() and setIsAvailable() to the DatabaseManager.
        * Modules/webdatabase/AbstractDatabaseServer.h:
        (AbstractDatabaseServer):
        * Modules/webdatabase/DBBackendServer.cpp: Added.
        (WebCore::DBBackend::Server::initialize):
        (WebCore::DBBackend::Server::setClient):
        (WebCore::DBBackend::Server::databaseDirectoryPath):
        (WebCore::DBBackend::Server::setDatabaseDirectoryPath):
        (WebCore::DBBackend::Server::fullPathForDatabase):
        (WebCore::DBBackend::Server::hasEntryForOrigin):
        (WebCore::DBBackend::Server::origins):
        (WebCore::DBBackend::Server::databaseNamesForOrigin):
        (WebCore::DBBackend::Server::detailsForNameAndOrigin):
        (WebCore::DBBackend::Server::usageForOrigin):
        (WebCore::DBBackend::Server::quotaForOrigin):
        (WebCore::DBBackend::Server::setQuota):
        (WebCore::DBBackend::Server::deleteAllDatabases):
        (WebCore::DBBackend::Server::deleteOrigin):
        (WebCore::DBBackend::Server::deleteDatabase):
        (WebCore::DBBackend::Server::scheduleNotifyDatabaseChanged):
        (WebCore::DBBackend::Server::databaseChanged):
        (WebCore::DBBackend::Server::closeDatabasesImmediately):
        (WebCore::DBBackend::Server::interruptAllDatabasesForContext):
        (WebCore::DBBackend::Server::canEstablishDatabase):
        (WebCore::DBBackend::Server::addOpenDatabase):
        (WebCore::DBBackend::Server::removeOpenDatabase):
        (WebCore::DBBackend::Server::setDatabaseDetails):
        (WebCore::DBBackend::Server::getMaxSizeForDatabase):
        - Refactored all calls to the DatabaseTracker to go thru the DBBackend::Server.
        * Modules/webdatabase/DBBackendServer.h:
        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::close):
        (WebCore::Database::maximumSize):
        * Modules/webdatabase/Database.h:
        (Database):
        - Moved the openDatabase() factory method to the DatabaseManager.
        - Removed the unused deliverPendingCallback() prototype.
        * Modules/webdatabase/DatabaseBasicTypes.h: Added.
        - A place to define some common basic types used by the database module.
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::databaseExceededQuota):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        (WebCore::DatabaseManager::initialize):
        (WebCore::DatabaseManager::setClient):
        (WebCore::DatabaseManager::databaseDirectoryPath):
        (WebCore::DatabaseManager::setDatabaseDirectoryPath):
        (WebCore::DatabaseManager::isAvailable):
        (WebCore::DatabaseManager::setIsAvailable):
        (DatabaseCreationCallbackTask):
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::DatabaseManager::openDatabase):
        (WebCore::DatabaseManager::openDatabaseSync):
        (WebCore::DatabaseManager::setHasOpenDatabases):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::hasEntryForOrigin):
        (WebCore::DatabaseManager::origins):
        (WebCore::DatabaseManager::databaseNamesForOrigin):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        (WebCore::DatabaseManager::usageForOrigin):
        (WebCore::DatabaseManager::quotaForOrigin):
        (WebCore::DatabaseManager::setQuota):
        (WebCore::DatabaseManager::deleteAllDatabases):
        (WebCore::DatabaseManager::deleteOrigin):
        (WebCore::DatabaseManager::deleteDatabase):
        (WebCore::DatabaseManager::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseManager::databaseChanged):
        (WebCore::DatabaseManager::closeDatabasesImmediately):
        (WebCore::DatabaseManager::interruptAllDatabasesForContext):
        (WebCore::DatabaseManager::canEstablishDatabase):
        (WebCore::DatabaseManager::addOpenDatabase):
        (WebCore::DatabaseManager::removeOpenDatabase):
        (WebCore::DatabaseManager::setDatabaseDetails):
        (WebCore::DatabaseManager::getMaxSizeForDatabase):
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Modules/webdatabase/DatabaseSync.cpp:
        (WebCore::DatabaseSync::~DatabaseSync):
        (WebCore::DatabaseSync::closeImmediately):
        * Modules/webdatabase/DatabaseSync.h:
        (DatabaseSync):
        - Moved the openDatabaseSync() factory method to the DatabaseManager.
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/SQLResultSet.h:
        * Modules/webdatabase/SQLStatementSync.h:
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * Modules/webdatabase/SQLTransactionSync.h:
        * Modules/webdatabase/WorkerContextWebDatabase.cpp:
        (WebCore::WorkerContextWebDatabase::openDatabase):
        (WebCore::WorkerContextWebDatabase::openDatabaseSync):
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-12-18  Per-Erik Brodin  <per-erik.brodin@ericsson.com>

        EventSource should support CORS
        https://bugs.webkit.org/show_bug.cgi?id=61862

        Reviewed by Alexey Proskuryakov.

        Enabled CORS in EventSource with optional constructor argument to
        indicate whether credentials should be included or not, as per the spec.
        Added didFailAccessControlCheck to ThreadableLoaderClient to be able to
        properly distinguish CORS failures from other errors.

        Tests: http/tests/eventsource/eventsource-cors-basic.html
               http/tests/eventsource/eventsource-cors-no-server.html
               http/tests/eventsource/eventsource-cors-with-credentials.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didFailAccessControlCheck):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::didFailAccessControlCheck):
        (ThreadableLoaderClientWrapper):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::workerContextDidFailAccessControlCheck):
        (WebCore):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck):
        * loader/WorkerThreadableLoader.h:
        (MainThreadBridge):
        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource):
        (WebCore::EventSource::create):
        (WebCore::EventSource::connect):
        (WebCore::EventSource::withCredentials):
        (WebCore):
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::didFailAccessControlCheck):
        (WebCore::EventSource::didFailRedirectCheck):
        (WebCore::EventSource::abortConnectionAttempt):
        (WebCore::EventSource::parseEventStreamLine):
        (WebCore::EventSource::createMessageEvent):
        * page/EventSource.h:
        (WebCore):
        (EventSource):
        (WebCore::EventSource::refEventTarget):
        (WebCore::EventSource::derefEventTarget):
        * page/EventSource.idl:

2012-12-18  Michael Pruett  <michael@68k.org>

        IndexedDB: Implement custom bindings for parsing options
        https://bugs.webkit.org/show_bug.cgi?id=96614

        Reviewed by Darin Adler.

        Parsing the options dictionary in IDBDatabase.createObjectStore()
        and IDBObjectStore.createIndex() requires custom bindings in JSC.

        Tests: storage/indexeddb/*

        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore):
        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore):
        * Modules/indexeddb/IDBObjectStore.h:
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl:
        * UseJSC.cmake:
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbKeyPathFromValue): Added utility function for converting a JSValue to an IDBKeyPath.
        (WebCore):
        * bindings/js/IDBBindingUtilities.h:
        (WebCore):
        * bindings/js/JSIDBDatabaseCustom.cpp: Added.
        (WebCore):
        (WebCore::JSIDBDatabase::createObjectStore):
        * bindings/js/JSIDBObjectStoreCustom.cpp: Added.
        (WebCore):
        (WebCore::JSIDBObjectStore::createIndex):

2012-12-18  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        Cannot click an element at 2nd line or more inside inline-block in vertical writing mode.
        https://bugs.webkit.org/show_bug.cgi?id=104775

        Reviewed by Dean Jackson.

        If the parent of an inline box changes writing mode, then the inline box must flip incoming hit point coordinates.
        Otherwise, the coordinate will be misunderstood because the box has a different origin from its parent.
        If the InlineBox doesn't flip its offset, its children will use the wrong offset
        because they don't know their grandparent changed writing modes.
        InlineBox::nodeAtPoint should flip accumulatedOffset like InlineBox::paint().

        Test: fast/writing-mode/vertical-inline-block-hittest.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nodeAtPoint):

2012-12-18  Simon Fraser  <simon.fraser@apple.com>

        Allow position:sticky elements to be moved by the scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=105245

        Reviewed by Beth Dakin.

        Allow sticky position elements to be repositioned on the scrolling thread.
        
        RenderLayerCompositor::requiresCompositingForPosition() is changed to make
        all position:-webkit-sticky elements composited.
        
        Sticky position constraints are already communicated to the ScrollingCoordinator,
        but now we created ScrollingStateStickyNodes for them, and send the constraints
        over to the scrolling thread for new ScrollingTreeStickyNodes. That allows
        their layers to be repositioned on the scrolling thread.

        Tests: platform/mac/tiled-drawing/sticky/sticky-horizontal.html
               platform/mac/tiled-drawing/sticky/sticky-vertical.html

        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * page/scrolling/ScrollingConstraints.h:
        (WebCore::StickyPositionViewportConstraints::absoluteContainingBlockRect): New accessors.
        (WebCore::StickyPositionViewportConstraints::absoluteStickyBoxRect):
        (WebCore::StickyPositionViewportConstraints::operator==):
        (WebCore::StickyPositionViewportConstraints::operator!=):
        * page/scrolling/ScrollingCoordinator.h: Added StickyNode type.
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::syncLayerPositionForViewportRect):
        New virtual method that allows different kinds of nodes to sync layer positions.
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isStickyNode):
        (WebCore::ScrollingStateNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateStickyNode.cpp: Added.
        (WebCore::ScrollingStateStickyNode::create):
        (WebCore::ScrollingStateStickyNode::ScrollingStateStickyNode):
        (WebCore::ScrollingStateStickyNode::~ScrollingStateStickyNode):
        (WebCore::ScrollingStateStickyNode::clone):
        (WebCore::ScrollingStateStickyNode::updateConstraints):
        (WebCore::ScrollingStateStickyNode::syncLayerPositionForViewportRect):
        (WebCore::ScrollingStateStickyNode::dumpProperties):
        * page/scrolling/ScrollingStateStickyNode.h: Copied from Source/WebCore/page/scrolling/ScrollingStateFixedNode.h.
        (ScrollingStateStickyNode):
        (WebCore::ScrollingStateStickyNode::viewportConstraints):
        (WebCore::toScrollingStateStickyNode):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::attachToStateTree): Handle sticky nodes.
        (WebCore::ScrollingCoordinatorMac::syncChildPositions): Generalize to different kinds of nodes by
        calling a virtual method on the node.
        (WebCore::ScrollingCoordinatorMac::updateViewportConstrainedNode):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::ScrollingTreeFixedNode):
        * page/scrolling/mac/ScrollingTreeStickyNode.h: Added.
        (ScrollingTreeStickyNode):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm: Copied from Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm.
        (WebCore::ScrollingTreeStickyNode::create):
        (WebCore::ScrollingTreeStickyNode::ScrollingTreeStickyNode):
        (WebCore::ScrollingTreeStickyNode::~ScrollingTreeStickyNode):
        (WebCore::ScrollingTreeStickyNode::update):
        (WebCore::operator*):
        (WebCore::ScrollingTreeStickyNode::parentScrollPositionDidChange):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::attachToScrollingCoordinator):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):
        (WebCore::RenderLayerCompositor::registerOrUpdateViewportConstrainedLayer):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-12-18  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Split BackingStore histogram
        https://bugs.webkit.org/show_bug.cgi?id=105222

        Reviewed by Tony Chang.

        Add separate histograms for Consistency, Write, and Read errors.
        Recategorize some read errors as consistency errors.

        Tested the preprocessor logic by manually making some functions fail
        and printing the histogram string from chromium code.

        Next up is logging successes to get an idea of which functions have
        the highest failure _rate_.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::recordInternalError):
        (WebCore):
        (WebCore::setUpMetadata):
        (WebCore::IDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::getNewDatabaseId):
        (WebCore::IDBBackingStore::createIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::getObjectStores):
        (WebCore::setMaxObjectStoreId):
        (WebCore::IDBBackingStore::deleteObjectStore):
        (WebCore::IDBBackingStore::getRecord):
        (WebCore::getNewVersionNumber):
        (WebCore::IDBBackingStore::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBBackingStore::getIndexes):
        (WebCore::setMaxIndexId):
        (WebCore::versionExists):
        (WebCore::IDBBackingStore::findKeyInIndex):
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStore::keyExistsInIndex):
        (WebCore::ObjectStoreKeyCursorImpl::loadCurrentRow):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):
        (WebCore::IndexKeyCursorImpl::loadCurrentRow):
        (WebCore::IndexCursorImpl::loadCurrentRow):

2012-12-18  Dean Jackson  <dino@apple.com>

        Track menu needs localization
        https://bugs.webkit.org/show_bug.cgi?id=105233

        Reviewed by Eric Carlson.

        Allow the UI strings in the closed captions menu to be localized, and
        profile strings for the English locale.

        Test: media/video-controls-captions-trackmenu-localized.html

        * English.lproj/Localizable.strings: Adds the four new captions strings.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu): Use localized getters.
        * platform/LocalizedStrings.cpp:
        (WebCore::textTrackClosedCaptionsText): New localized string getter.
        (WebCore::textTrackSubtitlesText): Ditto.
        (WebCore::textTrackOffText): Ditto.
        (WebCore::textTrackNoLabelText): Ditto.
        * platform/LocalizedStrings.h:

2012-12-18  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=102579
        [mac] Enable scaled cursors

        Reviewed by Dean Jackson.

        Not much is required to get this turned on. We just need the feature to be 
        defined, and we need to initialize m_imageScaleFactor in the Cursor constructors.

        * Configurations/FeatureDefines.xcconfig:
        * platform/mac/CursorMac.mm:
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::operator=):

2012-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Add Build Phase to Check Headers for Inappropriate Macros (Platform.h macros)
        https://bugs.webkit.org/show_bug.cgi?id=104279

        Reviewed by David Kilzer.

        Set the executable as an input path on the check-* build phases.
        
        * WebCore.xcodeproj/project.pbxproj:

2012-12-18  Adam Klein  <adamk@chromium.org>

        [HTMLTemplateElement] Prevent first-level recursive <template> from resetting the implied context
        https://bugs.webkit.org/show_bug.cgi?id=104142

        Reviewed by Eric Seidel.

        This patch adds a stack of InsertionModes retains the chosen
        "implied context" for each template element.

        Based on a patch by Rafael Weinstein.

        Tests added to html5lib/run-template.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): Initialize the stack appropriately for HTMLTemplateElement.innerHTML.
        (WebCore::HTMLTreeBuilder::processTemplateStartTag):
        (WebCore::HTMLTreeBuilder::processTemplateEndTag):
        (WebCore::HTMLTreeBuilder::processStartTag): Once we've figured out the insertion mode for a given <template> store it in the stack.
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile): Clear the stack if we hit end of file to allow the assertion in finish().
        (WebCore::HTMLTreeBuilder::finished):
        * html/parser/HTMLTreeBuilder.h:
        (HTMLTreeBuilder):

2012-12-18  Andrew Lo  <anlo@rim.com>

        [BlackBerry] Use midpoint for fixed position heuristic
        https://bugs.webkit.org/show_bug.cgi?id=105329

        Reviewed by Rob Buis.
        Internally reviewed by Joe Mason.

        Use the midpoint of the layer when determining whether the
        fixed-position layer is on the top or bottom half of the screen
        rather than the top of the layer.
        Internal PR 237073.

        No new tests are needed.

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::updateLayersRecursive):

2012-12-18  Andrew Lo  <anlo@rim.com>

        [BlackBerry] Fixed position elements should be fixed position on x axis
        https://bugs.webkit.org/show_bug.cgi?id=105333

        Reviewed by Rob Buis.
        Internally reviewed by Joe Mason.

        Have fixed position elements be fixed on the X axis as well as Y.
        This better aligns with what other ports are doing.
        Internal PR237073.

        No new tests are needed.

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::updateLayersRecursive):

2012-12-18  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] Populate responseEnd on cross-origin requests
        https://bugs.webkit.org/show_bug.cgi?id=105231

        Reviewed by Tony Gentilcore.

        No new tests. Covered by existing cross-origin test, but masked by iframe bug.

        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::responseEnd):

2012-12-18  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix after http://trac.webkit.org/changeset/138041

        Need to cast int64_t to int32_t to avoid a warning on some compilers.

        * platform/LayoutUnit.h:
        (WebCore::boundedMultiply):

2012-12-18  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] shape-inside layout fails to adjust first line correctly for writing-mode: vertical-rl
        https://bugs.webkit.org/show_bug.cgi?id=104419

        Reviewed by Dirk Schulze.

        ExclusionShapes no longer maintain a private "internal" coordinate system,
        they're now defined in logical coordinates. The createExclusionShape() method
        now handles the one-time conversion from physical to logical coordinates.

        Test: fast/exclusions/shape-inside/shape-inside-rounded-rectangle-fit-003.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::getExcludedIntervals): Removed logical to internal coordinate conversions.
        (WebCore::ExclusionPolygon::getIncludedIntervals): Ditto.
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop): Ditto.
        * rendering/ExclusionPolygon.h:
        * rendering/ExclusionRectangle.cpp:
        (WebCore::ExclusionRectangle::getExcludedIntervals): Removed logical to internal coordinate conversions.
        (WebCore::ExclusionRectangle::getIncludedIntervals): Ditto.
        (WebCore::ExclusionRectangle::firstIncludedIntervalLogicalTop): Ditto.
        * rendering/ExclusionRectangle.h:
        * rendering/ExclusionShape.cpp:
        (WebCore::physicalRectToLogical): Convert a FloatRect defined with coordinates to logical coordinates.
        (WebCore::physicalPointToLogical): Similar.
        (WebCore::physicalSizeToLogical): Simlar.
        (WebCore::ExclusionShape::createExclusionShape): Convert shapes from physical to logical coordinates.
        * rendering/ExclusionShape.h:
        (ExclusionShape): Removed internal to logical coordinate conversion utility methods.

2012-12-17  Emil A Eklund  <eae@chromium.org>

        Optimize LayoutUnit::boundedMultiply
        https://bugs.webkit.org/show_bug.cgi?id=105216

        Reviewed by Levi Weintraub.

        LayoutUnit::boundedMultiply is used for multiplication that's
        prone to overflow and for all LayoutUnit multiplication if
        SATURATED_LAYOUT_ARITHMETIC is enabled. The current approach is
        quite inefficient.

        Change it to use a more efficient saturated multiplication
        implementation. As the implementation needs to use
        kFixedPointDenominator it is implemented in LayoutUnit.h instead
        of in wtf/SaturatedArithmetic.h.

        Test: Covered by TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp

        * platform/LayoutUnit.h:
        (WebCore::boundedMultiply):

2012-12-18  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions] Blocks should not re-use their parent's ExclusionShapeInsideInfo
        if they participate in inline layout
        https://bugs.webkit.org/show_bug.cgi?id=104582

        Reviewed by Julien Chaffraix.

        Blocks that participate in inline layout should not re-use a parent's
        ExclusionShapeInsideInfo, as the parent and child would both use the info for
        layout at the same time. This patch alters LayoutState to not include
        ExclusionShapeInsideInfo if the current block participates in inline layout (ie,
        it is a float, inline-block, or inline-table).

        Test: fast/exclusions/shape-inside/shape-inside-recursive-layout.html

        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::ownerBlock): Return the block associated with
        the shape-inside style.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState): Do not re-use ExclusionShapeInsideInfo
        on a block that participates in inline layout (floats and inline blocks).
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::allowsExclusionShapeInsideInfoSharing): Returns whether the
        block can re-use an ExclusionShapeInsideInfo from its parent block.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Adding an assert to make sure
        we do not overwrite ExclusionShapeInsideInfo's state during a recursive layout.
        * rendering/RenderView.h:
        (WebCore::RenderView::pushLayoutState): Push a new LayoutState in the case that
        ExclusionShapeInsideInfo exists but should not be propagated.

2012-12-18  Tony Chang  <tony@chromium.org>

        REGRESSION(r136324): flex items with percent heights not resizing
        https://bugs.webkit.org/show_bug.cgi?id=105213

        Reviewed by Ojan Vafai.

        We were missing some of the logic for when to relayout a flex child. Refactor
        the code in RenderBlock::layoutBlockChildren so we can use it in RenderFlexibleBox.

        Test: css3/flexbox/flexitem-percent-height-change.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateNeedsLayoutAndPreferredLogicalWidthsDirtyBeforeBlockChildLayout):
        Pull out logic needed by RenderFlexibleBox.
        (WebCore::RenderBlock::layoutBlockChildren): Use helper method.
        * rendering/RenderBlock.h:
        (RenderBlock): Add updateNeedsLayoutAndPreferredLogicalWidthsDirtyBeforeBlockChildLayout.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Pass through relayoutChildren bool.
        (WebCore::RenderFlexibleBox::layoutFlexItems): Pass through relayoutChildren and mark the child as needing
        layout if it has a percent height.
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes): We need to always layout here since we're
        trying to get the preferred size.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        * rendering/RenderFlexibleBox.h:

2012-12-17  Simon Fraser  <simon.fraser@apple.com>

        Fix position:-webkit-sticky behavior when zoomed
        https://bugs.webkit.org/show_bug.cgi?id=105251

        Reviewed by Dean Jackson.

        Position sticky elements were misplaced when stickily-constrained, under zooming.
        The cause was that some of the functions used to compute sticky position
        took page scale into account, and some did not.
        
        Fix by using localToContainerQuad(..., view()) to compute RenderView-relative
        quads, which avoids page scale, so all the constraints math is done ignoring
        page scale. This also requires that we compute a scale-free viewport rect
        in stickyPositionOffset().

        Test: fast/css/sticky/sticky-top-zoomed.html

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

2012-12-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: DataGrid cell values are "clipped" in editing mode.
        https://bugs.webkit.org/show_bug.cgi?id=105277

        Reviewed by Pavel Feldman.

        UIUtils expects that "text-overflow" is not "ellipsis".

        * inspector/front-end/dataGrid.css:
        (.data-grid td.editing > div): Override text-overflow for editing mode.

2012-12-18  Ken Kania  <kkania@chromium.org>

        [Inspector] Add frameId for frame owner nodes.
        https://bugs.webkit.org/show_bug.cgi?id=105317

        Reviewed by Pavel Feldman.

        This is needed to translate from a node ID to the execution context ID for
        evaluating scripts in the associated frame.

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):

2012-12-18  peavo@outlook.com  <peavo@outlook.com>

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

        Reviewed by Simon Fraser.

        * rendering/RenderLayer.h: Compile fixes for USE(ACCELERATED_COMPOSITING) mismatch.

2012-12-18  Emil A Eklund  <eae@chromium.org>

        Have kFixedPointDenominator be constant across ports
        https://bugs.webkit.org/show_bug.cgi?id=104843

        Reviewed by Julien Chaffraix.

        Currently the kFixedPointDenominator constant is set to either
        64 or 1 depending on the SUBPIXEL_LAYOUT flag. As this constant
        is used to limit the range of supported values this results in
        inconsistencies across ports.

        Change kFixedPointDenominator to always be 64 and introduce a
        new constant (kEffectiveFixedPointDenominator) that varies.
        This ensures that the same range of values are supported across
        ports regardless of the SUBPIXEL_LAYOUT flag.
        
        Covered by fast/css/large-numbers.html and fast/css/large-number-round-trip.html

        * platform/LayoutUnit.h:
        Add kEffectiveFixedPointDenominator constant and change
        LayoutUnit code to use it instead of kFixedPointDenominator
        which is now set to 64 regardless of the SUBPIXEL_LAYOUT flag.

2012-12-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137979.
        http://trac.webkit.org/changeset/137979
        https://bugs.webkit.org/show_bug.cgi?id=105311

        nodeName returned by the inspector protocol commands should
        match one accessible fro JS (Requested by yurys_ on #webkit).

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):

2012-12-18  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Selector matches are not marked after property editing
        https://bugs.webkit.org/show_bug.cgi?id=105284

        Reviewed by Vsevolod Vlasov.

        Once a property edit is committed, the selector markup is reset and needs to be re-applied.

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

2012-12-18  Eric Carlson  <eric.carlson@apple.com>

        Add in-band text track cues only once
        https://bugs.webkit.org/show_bug.cgi?id=104593

        Reviewed by Dean Jackson.

        Test: media/track/track-in-band-cues-added-once.html

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::hasCue): New.
        * html/track/InbandTextTrack.h:

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::setCueSettings): Remember the raw cue settings so they can be accessed later.
        * html/track/TextTrackCue.h:

        * platform/graphics/InbandTextTrackPrivateClient.h: Declare hasCue.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue): Early return if m_player has been cleared.
        (WebCore::InbandTextTrackPrivateAVF::setMode): Ditto.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seek): Clear the partially accumulated cue when the seek 
            starts, not when it completes.
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::flushCurrentCue): Don't add a cue if it is already in the
            text track cue list.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearTextTracks): Drive-by cleanup, clear the track list completely.

2012-12-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Ordering of cookies displayed is nondeterministic.
        https://bugs.webkit.org/show_bug.cgi?id=105272

        Reviewed by Vsevolod Vlasov.

        This patch fixes double-selection of request and sets default ordering
        of cookies.

        * inspector/front-end/CookiesTable.js: By default sort by name.
        * inspector/front-end/NetworkPanel.js: Do not fire "select" on
        mouse-click in viewing-request mode.

2012-12-18  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, rolling out r138011.
        http://trac.webkit.org/changeset/138011
        https://bugs.webkit.org/show_bug.cgi?id=105272

        WebInspector: Broke request selection in the Network panel

        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._toggleGridMode):
        (WebInspector.NetworkPanel.prototype._toggleViewingRequestMode):
        (WebInspector.NetworkDataGridNode.prototype.createCells):
        (WebInspector.NetworkDataGridNode.prototype.get selectable):

2012-12-18  Nate Chapin  <japhet@chromium.org>

        REGRESSION (r137607): Cannot download files, stuck in “Preparing to download”
        https://bugs.webkit.org/show_bug.cgi?id=105044

        Reviewed by Antti Koivisto.

        The work done by DocumentLoader::mainReceivedError() changed subtly in r137607,
        such that it cancels the ResourceHandle. We want to treat switching to a download
        like a failure, where WebCore assumes that the load is finished, and no
        cancellation is required.

        No new tests, tested manually by verifying that downloading files works in
        Safari Mac.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::cancel): Remove the workaround added in r137763.

2012-12-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: [Network] Ordering of cookies displayed is nondeterministic.
        https://bugs.webkit.org/show_bug.cgi?id=105272

        Reviewed by Alexander Pavlov.

        This patch fixes double-selection of request and sets default ordering
        of cookies.

        * inspector/front-end/CookiesTable.js: By default sort by name.
        * inspector/front-end/NetworkPanel.js: Remove redundant member, make
        rows "not-selectable", activate request selection on "mouse-down".

2012-12-18  Tommy Widenflycht  <tommyw@chromium.org>

        [JSC] Refactoring CodeGeneratorJS.pm to simplify adding support for overloaded constructors
        https://bugs.webkit.org/show_bug.cgi?id=105271

        Reviewed by Kentaro Hara.

        This patch splits the very large function that generates constructor code into a few smaller ones.
        No changes in actual generated code but some functions in the generated bindings code moves.

        Existing tests cover patch.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateConstructorDefinitions):
        (GenerateConstructorDefinition):
        (GenerateConstructorSupportDefinitions):
        (IsCustomConstructable):
        (IsConstructable):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64ArrayConstructor::constructJSFloat64Array):
        (WebCore):
        (WebCore::toJS):
        (WebCore::JSFloat64Array::indexSetter):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore):
        (WebCore::JSTestEventConstructorConstructor::JSTestEventConstructorConstructor):
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        (WebCore::JSTestEventConstructorConstructor::getOwnPropertySlot):
        (WebCore::JSTestEventConstructorConstructor::getOwnPropertyDescriptor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        (WebCore):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore):
        (WebCore::JSTestNamedConstructorNamedConstructor::JSTestNamedConstructorNamedConstructor):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::constructJSTestNode):
        (WebCore):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::constructJSTestObj):
        (WebCore):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors):
        (WebCore):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        (WebCore):

2012-12-18  Max Feil  <mfeil@rim.com>

        [BlackBerry] Add support for setMuted() for media
        https://bugs.webkit.org/show_bug.cgi?id=105254

        Reviewed by George Staikos.

        Simply pass the API call through to the platform layer.

        Covered by existing tests.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore):
        (WebCore::MediaPlayerPrivate::muted):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::supportsMuting):

2012-12-18  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: show cached images under MemoryCache -> Images section
        https://bugs.webkit.org/show_bug.cgi?id=105261

        Reviewed by Pavel Feldman.

        Provided class name and name for several objects related to CachedImage.
        Changed native memory snapsho view so that MemoryCache.Image section can
        be expanded into individual images.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeMemorySnapshotView):
        (WebInspector.NativeSnapshotNode.prototype._addChildrenFromGraph):
        (WebInspector.NativeHeapGraphEdge):
        (WebInspector.NativeHeapGraphEdge.prototype.type):
        (WebInspector.NativeHeapGraphEdge.prototype.name):
        (WebInspector.NativeHeapGraphEdge.prototype.target):
        (WebInspector.NativeHeapGraphEdge.prototype._getStringField):
        (WebInspector.NativeHeapGraphEdge.prototype.toString):
        (WebInspector.NativeHeapGraphNode.prototype.size):
        (WebInspector.NativeHeapGraphNode.prototype.referencedNodes):
        (WebInspector.NativeHeapGraphNode.prototype.outgoingEdges):
        (WebInspector.NativeHeapGraphNode.prototype.targetOfEdge):
        (WebInspector.NativeHeapGraphNode.prototype.targetsOfAllEdges):
        (WebInspector.NativeHeapGraphNode.prototype._firstEdgePoistion):
        (WebInspector.NativeHeapGraphNode.prototype._afterLastEdgePosition):
        (WebInspector.NativeHeapGraphNode.prototype._getStringField):
        (WebInspector.NativeHeapGraphNode.prototype.toString):
        (WebInspector.NativeHeapGraph):
        (WebInspector.NativeHeapGraph.prototype.rootNodes):
        (WebInspector.NativeHeapGraph.prototype._calculateNodeEdgeIndexes):
        (WebInspector.NativeHeapGraph.prototype._addDummyNode):
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::reportMemoryUsage):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::reportMemoryUsage):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::reportMemoryUsage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::reportMemoryUsage):
        (WebCore::FrameData::reportMemoryUsage):
        * platform/graphics/Image.cpp:
        (WebCore::Image::reportMemoryUsage):
        * platform/graphics/skia/MemoryInstrumentationSkia.cpp:
        (reportMemoryUsage):

2012-12-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Calculate "idle" time for CPU profiles.
        https://bugs.webkit.org/show_bug.cgi?id=103120

        Reviewed by Pavel Feldman.

        CPU profiles contain a very confusing "(program)" item.
        It is time when there is no JS stack.
        That could be either idle time, or time when browser is doing something.

        To split "(program)" item to idle and really program time we are to
        calculate idle time during profiling.

        * bindings/js/ScriptProfile.cpp: Added "idleTime" getter.
        * bindings/js/ScriptProfile.h: Ditto.
        * bindings/js/ScriptProfiler.h:
        Added getter of thread-local map of currently written profiles.
        * bindings/v8/ScriptProfile.cpp: Added "idleTime" getter.
        * bindings/v8/ScriptProfile.h: Ditto.
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::start): Put profile name to map.
        (WebCore::ScriptProfiler::stop): Remove profile name from map;
        pass idleTime to profile constructor.
        * bindings/v8/ScriptProfiler.h:
        Added getter of thread-local map of currently written profiles.
        * inspector/Inspector.json: Added "idleTime" field to profile.
        * inspector/InspectorController.cpp: Pass hooks to profiler agent.
        * inspector/InspectorProfilerAgent.cpp:
        Add idle time to currently written profiles.
        * inspector/InspectorProfilerAgent.h:
        Added member to hold reference to map of currently written profiles.
        * inspector/InspectorTimelineAgent.h:
        Cleanup.
        * inspector/ScriptProfile.idl:
        Add "idleTime" member.

2012-12-17  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: MediaQueryList listener silently catches errors
        https://bugs.webkit.org/show_bug.cgi?id=105162

        Reviewed by Alexander Pavlov.

        Drive-by: removed unused ScriptCallback::call(bool).

        Test: inspector-protocol/media-query-listener-exception.html

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptCallback::call):
        * bindings/js/ScriptFunctionCall.h:
        (ScriptCallback):
        * bindings/v8/ScriptFunctionCall.cpp: report uncaught exception to the inspector
        if it was thrown during the function call.
        (WebCore::ScriptCallback::call):
        * bindings/v8/ScriptFunctionCall.h:
        (ScriptCallback):

2012-12-18  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Network: display JavaScript stack in case of script initiator.
        https://bugs.webkit.org/show_bug.cgi?id=104899

        Reviewed by Vsevolod Vlasov.

        Show popup with navigavle stack-trace.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._getPopoverAnchor):
        Added new target.
        (WebInspector.NetworkLogView.prototype._showPopover):
        Added case for new target.
        (WebInspector.NetworkLogView.prototype._generateScriptInitiatedPopoverContent):
        Generates table with stack trace items.
        (WebInspector.NetworkDataGridNode.prototype._refreshInitiatorCell):
        Added target marker, removed annoying titles.

2012-12-18  Tamas Czene  <tczene@inf.u-szeged.hu>

        Style fix to OpenCL SVG Filters
        https://bugs.webkit.org/show_bug.cgi?id=105265

        Reviewed by Zoltan Herczeg.

        Inserted missing spaces and correct copyright text. There were no vital changes.

        * platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:
        (WebCore):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.h:
        (FilterContextOpenCL):
        * platform/graphics/gpu/opencl/OpenCLFEColorMatrix.cpp:
        (WebCore::FilterContextOpenCL::applyFEColorMatrix):
        * platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:
        (WebCore):
        (WebCore::FilterContextOpenCL::compileFETurbulence):
        (WebCore::FilterContextOpenCL::applyFETurbulence):
        (WebCore::FETurbulence::platformApplyOpenCL):
        * platform/graphics/gpu/opencl/OpenCLHandle.h:

2012-12-17  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [WebGL] handle video elements used in WebGL
        https://bugs.webkit.org/show_bug.cgi?id=105170

        Reviewed by Yury Semikhatsky.

        Copy current image of video elements into a canvas to use it later in the replay.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-12-17  Luke Macpherson   <macpherson@chromium.org>

        Add ASSERTions to ensure that CSSPropertys that are variables only ever refer to CSSValues that are variables.
        https://bugs.webkit.org/show_bug.cgi?id=104876

        Reviewed by Steve Block.

        Add assertions to CSSProperty constructors to make that if it is initialized with CSSPropertyVariable that
        the value type associated with it is also a variable. This is already asserted at read time, but ASSERTing
        here will produce a more useful backtrace.

        No new tests as functionality unchanged.

        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty):

2012-12-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Make inspector scripts sourceURL absolute.
        https://bugs.webkit.org/show_bug.cgi?id=105166

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/utilities.js:

2012-12-17  Huang Dongsung  <luxtella@company100.net>

        REGRESSION(r137442): Crash because of an uninitialized member.
        https://bugs.webkit.org/show_bug.cgi?id=105246

        Reviewed by Noam Rosenthal.

        TextureMapperGL defines m_context although TextureMapper defines m_context.
        r137442 removes the initialization code in TextureMapperGL, which is
        what causes this regression. This patch removes the duplicated member
        in TextureMapperGL.

        No new tests. Covered by existing tests.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::TextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::setGraphicsContext):
        (WebCore::TextureMapper::graphicsContext):
        (TextureMapper):
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore):

2012-12-17  Philip Rogers  <pdr@google.com>

        Queue container size requests while images are loading.
        https://bugs.webkit.org/show_bug.cgi?id=105097

        Reviewed by Dean Jackson.

        We use CachedImage::setContainerSizeForRenderer(...) to notify images of requesting
        container sizes. Unfortunately, if the image is not yet loaded we ignore this container
        size information! This patch stores requesting container sizes made while the image is
        not yet loaded.

        This patch fixes a bug where SVG images would display incorrectly on the first load but
        correctly thereafter. Additionally, this bug caused the SVGImageCache to not be used in many
        real world scenarios.

        This patch is loosely based on a patch by blambov in WK98403.

        Test: http/tests/misc/svg-image-delayed-size-negotiation.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didRemoveClient):
        (WebCore::CachedImage::allClientsRemoved):
        (WebCore::CachedImage::setContainerSizeForRenderer):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::createImage):
        * loader/cache/CachedImage.h:

            A new map has been added to track renderer -> size information before an image has
            loaded. Note that this affects all images (not just images that require container size
            information) but we cannot know the image type before the image has loaded.

2012-12-17  Shinya Kawanaka  <shinyak@chromium.org>

        Web Inspector: need to visually distinguish UA shadow roots
        https://bugs.webkit.org/show_bug.cgi?id=104877

        Reviewed by Yury Semikhatsky.

        Now we have an option to show ShadowRoot in the Inspector. Since the Inspector has displayed UserAgent ShadowRoot and
        Author ShadowRoot as the same #shadow-root, a user could not distinguish them.

        We would like to show UserAgent ShadowRoot as #webkit-shadow-root.

        Test: inspector/shadow-root.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode): Make nodeName of UserAgent ShadowRoot #webkit-shadow-root.
        Since the correct nodeName of ShadowRoot is #document-fragment, we have to specify the nodeName of Author ShadowRoot
        as #shadow-root here.

2012-12-17  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Refactor TiledBackingStore code in CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=103959

        Reviewed by Kenneth Rohde Christiansen.

        TiledBackingStore::setCommitTileUpdatesOnIdleEventLoop() is used when class
        methods cannot be called asynchronously by client. Updates of tiles are
        committed as soon as all the events in event queue have been processed.
        After this patch Frame sets m_commitTileUpdatesOnIdleEventLoop to true.

        In addition, remove TiledBackingStoreClient::tiledBackingStoreUpdatesAllowed()
        which was introduced for Coordinated Graphics.

        Refactoring covered by existing tests.

        * page/Frame.cpp:
        (WebCore::Frame::setTiledBackingStoreEnabled):
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setTrajectoryVector):
          Separate setting a trajectory vector from coverWithTilesIfNeeded().
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded):
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::isTileBufferUpdatesSuspended):
        (WebCore::TiledBackingStore::startTileBufferUpdateTimer):
        (WebCore::TiledBackingStore::tileBufferUpdateTimerFired):
        (WebCore::TiledBackingStore::startBackingStoreUpdateTimer):
        (WebCore::TiledBackingStore::backingStoreUpdateTimerFired):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):
        (WebCore::TiledBackingStore::setCommitTileUpdatesOnIdleEventLoop):
        * platform/graphics/TiledBackingStoreClient.h:
        (WebCore::TiledBackingStoreClient::tiledBackingStoreHasPendingTileCreation):
            If TiledBackingStore does not create all tiles, TiledBackingStore
            notifies a client of needing to create tiles more, when
            m_commitTileUpdatesOnIdleEventLoop is false.

2012-12-17  Dean Jackson  <dino@apple.com>

        Track menu should be sorted
        https://bugs.webkit.org/show_bug.cgi?id=105229

        Reviewed by Eric Carlson.

        Make sure that the <li> elements in the track menu are correctly
        sorted as they are built. This uses insertion sort, but it shouldn't
        be horrible given that we don't expect a huge number of tracks.

        Test: media/video-controls-captions-trackmenu-sorted.html

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
        (WebCore::insertTextTrackMenuItemIntoSortedContainer): New function that calls insertBefore with
        the correct parameters to ensure the <ul> is correctly sorted.
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        * html/shadow/MediaControlElements.h:
        (MediaControlClosedCaptionsTrackListElement): Rename menuItems to m_menuItems for consistency.

2012-12-17  Matthew Dempsky  <mdempsky@google.com>

        Regression causing DOM objects to have unstable NPObject* references with v8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=104921

        Reviewed by Kentaro Hara.

        Fix regression introduced by changeset 135804 resulting in
        unstable NPObject* references for v8 objects.  In the iter !=
        v8NPObjectMap->end() code path, objectVector was left unassigned
        if the for loop terminated without returning.

        Also, V8Object::GetIdentityHash() is documented as not being guaranteed
        as unique.  As such, don't ASSERT() that two objects with the same hash
        must therefor be the same object.

        Tests: plugins/npruntime/embed-property-iframe-equality.html

        * bindings/v8/NPV8Object.cpp:
        (WebCore::npCreateV8ScriptObject): Fix.

2012-12-17  Chris Fleizach  <cfleizach@apple.com>

        Seamless iframe should not announce a new browsing context
        https://bugs.webkit.org/show_bug.cgi?id=86317

        Reviewed by Eric Seidel.

        Introduce a new role for seamless frames so that the platforms can decide what to do
        with this kind of object. For the mac, it's exposed as a group.

        Test: platform/mac/accessibility/seamless-iframe.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore):
        * accessibility/AccessibilityNodeObject.h:
        (AccessibilityNodeObject):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isWebArea):
        (WebCore::AccessibilityObject::isSeamlessWebArea):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (createAccessibilityRoleMap):

2012-12-17  KyungTae Kim  <ktf.kim@samsung.com>

        Percentage width replaced element incorrectly rendered when intrinsic size changed
        https://bugs.webkit.org/show_bug.cgi?id=102784

        Reviewed by Tony Chang.

        To make relayout when the image dimension is changed,
        and if the logical width is percent type and the containing block fits to it.
        In this case, the containing block's width need to be updated first,
        because the 'newWidth' was calculated from the 'old containing block width'.

        Test: fast/css/percent-width-img-src-change.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged):

2012-12-17  Beth Dakin  <bdakin@apple.com>

        DidHitRelevantRepaintedObjectsAreaThreshold should not use the viewRect since 
        that varies
        https://bugs.webkit.org/show_bug.cgi?id=105116
        -and corresponding-
        <rdar://problem/12889449>

        Reviewed by Geoff Garen.

        DidHitRelevantRepaintedObjectsAreaThreshold should not use the viewRect since that 
        varies depending on window size. This can lead to a huge amount of variability in 
        the heuristic which is not desired. Instead, we should use a hard-coded rect.
        * page/Page.cpp:
        (WebCore::relevantViewRect):
        (WebCore):
        (WebCore::Page::addRelevantRepaintedObject):
        (WebCore::Page::addRelevantUnpaintedObject):

2012-12-17  Simon Fraser  <simon.fraser@apple.com>

        Fix repositioning of fixed elements on zooming
        https://bugs.webkit.org/show_bug.cgi?id=105223

        Reviewed by Beth Dakin.

        When zoomed, scrolling would move the layers of fixed-position
        elements oddly. This happened because on the scrolling thread we
        passed a scale of 1, rather than the actual page scale to 
        scrollOffsetForFixedPosition().
        
        Fix by plumbing the page scale through the scrolling state node
        to the scrolling node.

        Test: platform/mac/tiled-drawing/fixed/four-bars-zoomed.html

        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor):
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::frameScaleFactor):
        (ScrollingStateScrollingNode):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::update):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::frameScaleFactor):
        (ScrollingTreeScrollingNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollParameters):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinatorMac::setScrollParametersForNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

2012-12-17  Dima Gorbik  <dgorbik@apple.com>

        Implement matching cue by the class name with ::cue pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=104191

        Reviewed by Antti Koivisto.

        Implemented the ::cue() pseudo-element with an argument that may hold a simple selector list.
        This enables matching cue objects by the class name.

        Test: media/track/track-css-matching.html

        * css/CSSGrammar.y.in: support parsing the ::cue() with an argument.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken): tokenize the 'cue'.
        (WebCore::CSSParser::updateSpecifiersWithElementName): do not set the tag for the cue pseudo-element because
        the ::cue may match elements with different tags.
        (WebCore::CSSParser::updateSpecifiers): the behavior for the PseudoCue selector should be same as for
        unknown pseudo elements - the pseudo-element should stay on top of the selector chain.
        * css/CSSSelector.cpp: added the type detection for the new selector.
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/RuleSet.cpp: add a new list to hold all the rulesets for the new pseudo element.
        (WebCore::RuleSet::reportMemoryUsage):
        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::shrinkToFit):
        * css/RuleSet.h:
        (RuleSet):
        (WebCore::RuleSet::cuePseudoRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRules):
        * dom/Element.cpp: an addition to the rare data to be able to find out if the node is a webvtt node.
        (WebCore):
        (WebCore::Element::isWebVTTNode):
        (WebCore::Element::setIsWebVTTNode):
        (WebCore::Element::cloneDataFromElement):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):
        (WebCore::NodeRareData::isWebVTTNode):
        (WebCore::NodeRareData::setIsWebVTTNode):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::markNodesAsWebVTTNodes): mark the cloned nodes as WebVTT nodes.
        (WebCore):
        (WebCore::TextTrackCue::getCueAsHTML):
        * html/track/TextTrackCue.h:
        (TextTrackCue):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::constructTreeFromToken):
        * rendering/style/RenderStyleConstants.h:

2012-12-17  Michael Pruett  <michael@68k.org>

        IndexedDB: Don't use strings to represent serialized values
        https://bugs.webkit.org/show_bug.cgi?id=104354

        Reviewed by Kentaro Hara.

        Use Vector<uint8_t> rather than String to represent serialized values
        in IndexedDB. This change is necessary to implement IndexedDB for JSC.

        Tests: storage/indexeddb/*

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::getRecord):
        (WebCore::IDBBackingStore::putRecord):
        (WebCore::ObjectStoreKeyCursorImpl::value):
        (WebCore::ObjectStoreKeyCursorImpl::ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreCursorImpl::value):
        (ObjectStoreCursorImpl):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):
        (WebCore::IndexKeyCursorImpl::value):
        (WebCore::IndexCursorImpl::value):
        (WebCore::IndexCursorImpl::IndexCursorImpl):
        (IndexCursorImpl):
        (WebCore::IndexCursorImpl::loadCurrentRow):
        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        (Cursor):
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::value):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IndexReferencedValueRetrievalOperation::perform):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreRetrievalOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreStorageOperation::perform):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore):
        * bindings/js/SerializedScriptValue.h:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::createFromWireBytes):
        (WebCore):
        (WebCore::SerializedScriptValue::toWireBytes):
        * bindings/v8/SerializedScriptValue.h:
        (SerializedScriptValue):

2012-12-17  Jaehun Lim  <ljaehun.lim@samsung.com>

        Change SET_VAR, SET_BORDERVALUE_COLOR macro to require semicolon(;) at the end of the line
        https://bugs.webkit.org/show_bug.cgi?id=104774

        Reviewed by Eric Seidel.

        Remove the last ; in SET_VAR, SET_BORDERVALUE_COLOR macro definition.
        Add the omitted ; in RenderStyle.h | .cpp

        No new tests, just style change.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setColor):
        (WebCore::RenderStyle::setVisitedLinkColor):
        (WebCore::RenderStyle::setHorizontalBorderSpacing):
        (WebCore::RenderStyle::setVerticalBorderSpacing):
        * rendering/style/RenderStyle.h:

2012-12-17  Yong Li  <yoli@rim.com>

        [BlackBerry] Deadlock caused by PluginViewPrivate::destroyBuffers()
        https://bugs.webkit.org/show_bug.cgi?id=105215

        Reviewed by Rob Buis.
        Also internally reviewed by George Staikos.

        PR# 266443
        It should release mutexes before sending sync message.

        * plugins/blackberry/PluginViewPrivateBlackBerry.cpp:
        (WebCore::PluginViewPrivate::destroyBuffers):

2012-12-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137198.
        http://trac.webkit.org/changeset/137198
        https://bugs.webkit.org/show_bug.cgi?id=105212

        This patch is causing API behavior compatibility problems
        (Requested by zdobersek on #webkit).

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):

2012-12-17  Dominic Mazzoni  <dmazzoni@google.com>

        AX: textUnderElement should consider alt text, but skip links and controls
        https://bugs.webkit.org/show_bug.cgi?id=101650

        Reviewed by Chris Fleizach.

        Getting inner text from an element now ignores focusable descendants
        and containers, but uses alternative text.  The computation of
        textUnderElement is now recursive and doesn't depend on text
        iterators, which might not do the right thing for accessibility
        anyways.

        For GTK, the old behavior is retained so that support for
        the object replacement character is still there. Filed a new
        bug (105214) for GTK folks to look at this.

        Test: accessibility/button-title-uses-inner-img-alt.html
        Test: accessibility/focusable-div.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore):
        (WebCore::shouldUseAccessiblityObjectInnerText):
        (WebCore::AccessibilityNodeObject::textUnderElement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):

2012-12-17  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Prevent CookieManager from blocking the WKT thread
        https://bugs.webkit.org/show_bug.cgi?id=105111

        Prevent CookieManager from blocking the WKT Thread.

        PR 265603

        Reviewed by Rob Buis.

        Adding some guards to CookieManager so it will return immedately
        if getCookie functions are called when the database isn't loaded yet.

        setCookie functions will be redispatched until the database is ready.

        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::CookieManager):
        (WebCore::CookieManager::setCookies):
        (WebCore::CookieManager::getCookie):
        (WebCore::CookieManager::generateHtmlFragmentForCookies):
        (WebCore::CookieManager::getRawCookies):
        (WebCore::CookieManager::removeAllCookies):
        (WebCore::CookieManager::getBackingStoreCookies):
        (WebCore::CookieManager::setPrivateMode):
        (WebCore::CookieManager::removeCookieWithName):
        * platform/blackberry/CookieManager.h:

2012-12-17  Levi Weintraub  <leviw@chromium.org>

        Add support for tracking hit test rectangles to enable fast event rejection in the compositor
        https://bugs.webkit.org/show_bug.cgi?id=103914

        Reviewed by James Robinson.

        Adding support for tracking hit test target regions for the purpose of performing initial hit testing
        in the compositor to avoid blocking scrolling on the main thread while waiting to hit test events that
        aren't occuring in regions with handlers. This is initially being done to avoid having to go to the main
        thread when scrolling by flicking on touch devices when the flick occurs outside a tracked touch event
        region. This patch includes the implementation to turn this on in Chromium.

        To accomplish this goal, Document will now keep a counted hash set of nodes with touch event handlers
        instead of only an unsigned integer of the total count. ScrollingCoordinator then updates the compositor
        when new touch event handlers are registered or removed, or after layout much like how
        nonFastScrollableRegions are currently tracked.

        This implementation will not properly update the hit test rects when the renderers are inside a sub-
        tree that scrolls.

        This change was initially rolled out due to stale Node pointers in Document's touchEventTargets. This
        patch adds a callback to remove the Node from that structure to Node's destructor. This is covered
        by the touch-target-removed-crash.html test case which is also added.

        Test: platform/chromium/fast/events/touch/compositor-touch-hit-rects.html
              platform/chromium/fast/events/touch/touch-target-removed-crash.html

        * dom/Document.cpp:
        (WebCore::Document::Document): Added a HashCountedSet of touch target nodes. Note: DOMWindow targets
        are stored as the Document they point to.
        (WebCore::Document::didAddTouchEventHandler): Changed to keep track of the handler instead of a count, and
        to update the ScrollingCoordinator with the change.
        (WebCore::Document::didRemoveTouchEventHandler): Ditto.
        * dom/Document.h:
        (WebCore::Document::hasTouchEventHandlers): It's no longer O(1) to get the count of touch handlers, so
        expose whether there are any or not.
        (WebCore::Document::touchEventTargets):
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::updateType):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener): Add the Document to the touch target set instead of DOMWindow.
        (WebCore::DOMWindow::removeEventListener):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeAbsoluteTouchEventTargetRects): Walk the renderers for event handler
        nodes and generate the absolute hit testing rects.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setTouchEventTargetRectsChanged): Hook to pass along the hit test rects to
        the scrolling tree/compositor.
        (ScrollingCoordinator):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinatorChromium::setTouchEventTargetRectsChanged):
        (WebCore::ScrollingCoordinatorChromium::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinatorChromium::setTouchEventTargetRects):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.h:
        (ScrollingCoordinatorChromium):
        * testing/Internals.cpp:
        (WebCore::Internals::touchEventHandlerCount): Changed to do the work to calculate the actual count since
        it's no longer stored as an int in Document.
        (WebCore::Internals::touchEventTargetClientRects):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-12-17  Avi Drissman  <avi@chromium.org>

        Dragging a .jpg to Finder saves it as .jpeg
        https://bugs.webkit.org/show_bug.cgi?id=105140
        https://code.google.com/p/chromium/issues/detail?id=35811

        Reviewed by Tony Chang.

        If the filename's extension is already valid for the MIME type, we don't
        need to rewrite it to the preferred extension.

        No layout tests because it involves dragging items to the desktop.

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::writeImageToDataObject):

2012-12-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] shape-outside on floats for rectangle shapes height/width
        https://bugs.webkit.org/show_bug.cgi?id=100398

        Reviewed by Julien Chaffraix.

        Implement shape outside for floats changing only the height and width
        as a simple starting point.

        This implementation changes floats to use the bounding box of the
        shape outside instead of the margin box for layout. The content box of
        the float is unchanged. This patch does not support positioning the
        shape outside box, so the x and y parameters are currently ignored in
        the specified shape. This will be fixed in a patch for bug 100399.

        Tests: fast/exclusions/shape-outside-floats/shape-outside-floats-margin-is-ignored.html
               fast/exclusions/shape-outside-floats/shape-outside-floats-simple-rectangle-horizontal-multiple.html
               fast/exclusions/shape-outside-floats/shape-outside-floats-simple-rectangle-percentage.html
               fast/exclusions/shape-outside-floats/shape-outside-floats-simple-rectangle.html

        * CMakeLists.txt: Add ExclusionShapeOutsideInfo.{cpp,h}.
        * GNUmakefile.list.am: Add ExclusionShapeOutsideInfo.{cpp,h}.
        * Target.pri: Add ExclusionShapeOutsideInfo.{cpp,h}.
        * WebCore.gypi: Add ExclusionShapeOutsideInfo.{cpp,h}.
        * WebCore.vcproj/WebCore.vcproj: Add ExclusionShapeOutsideInfo.{cpp,h}.
        * WebCore.xcodeproj/project.pbxproj: Add ExclusionShapeOutsideInfo.{cpp,h}.
        * rendering/ExclusionShapeOutsideInfo.cpp: Added. Associates the
            ExclusionShape object for shape outside with a RenderBox. Analagous to
            ExclusionShapeInsideInfo.
        (WebCore::exclusionShapeOutsideInfoMap):
        (WebCore::ExclusionShapeOutsideInfo::ExclusionShapeOutsideInfo):
        (WebCore::ExclusionShapeOutsideInfo::~ExclusionShapeOutsideInfo):
        (WebCore::ExclusionShapeOutsideInfo::ensureInfoForRenderBox):
        (WebCore::ExclusionShapeOutsideInfo::infoForRenderBox):
        (WebCore::ExclusionShapeOutsideInfo::isInfoEnabledForRenderBox):
        (WebCore::ExclusionShapeOutsideInfo::removeInfoForRenderBox):
        (WebCore::ExclusionShapeOutsideInfo::computedShape):
        * rendering/ExclusionShapeOutsideInfo.h: Added. Associates the
            ExclusionShape object for shape outside with a RenderBox. Analagous to
            ExclusionShapeInsideInfo.
        (ExclusionShapeOutsideInfo):
        (WebCore::ExclusionShapeOutsideInfo::create):
        (WebCore::ExclusionShapeOutsideInfo::shapeLogicalLeft):
        (WebCore::ExclusionShapeOutsideInfo::shapeLogicalRight):
        (WebCore::ExclusionShapeOutsideInfo::shapeLogicalTop):
        (WebCore::ExclusionShapeOutsideInfo::shapeLogicalBottom):
        (WebCore::ExclusionShapeOutsideInfo::shapeLogicalWidth):
        (WebCore::ExclusionShapeOutsideInfo::shapeLogicalHeight):
        (WebCore::ExclusionShapeOutsideInfo::setShapeSize):
        (WebCore::ExclusionShapeOutsideInfo::dirtyShapeSize):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::insertFloatingObject): Use the shape outside's bounding box to set the width that is
            used for inline layout for the float and it's siblings.
        (WebCore::RenderBlock::positionNewFloats): Use the shape outside's bounding box to set the height that
            is used for inline layout for the float and it's siblings. Ignore margins when positioning if the float
            has shape outside, per the exclusions spec. 
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed): Clean up associated ExclusionShape.
        (WebCore::RenderBox::styleDidChange): Handle style change for shape outside.
        (WebCore::RenderBox::updateExclusionShapeOutsideInfoAfterStyleChange): Handle style change for shape outside.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::exclusionShapeOutsideInfo): Get the ExclusionShapeOutsideInfo associated with this
            RenderBox.

2012-12-17  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: Search by selection
        https://bugs.webkit.org/show_bug.cgi?id=104970

        Reviewed by Vsevolod Vlasov.

        Upon activation of the search control, conditionally set input.value to window.getSelection().
        For both single file (SearchController) and multifile (AdvancedSearchController).

        Test: inspector/editor/text-editor-selection-to-search.html

        * inspector/front-end/AdvancedSearchController.js:
        (WebInspector.AdvancedSearchController.prototype.show):
        (WebInspector.SearchView.prototype.syncToSelection):
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype.showSearchField):

2012-12-17  Eduardo Lima Mitev  <elima@igalia.com>

        [GStreamer] Use gst_element_link_pads_full() with CHECK_NOTHING for speed and sanity
        https://bugs.webkit.org/show_bug.cgi?id=105181

        Reviewed by Philippe Normand.

        Replace some calls to gst_pad_link() on request pads, by
        gst_element_link_pads_full() with CHECK_NOTHING flag, removing
        unnecessary pad compatibility checks and simplifying code.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcConstructed): Links audioconvert source with a
        requested interleave sink using gst_element_link_pads_full().
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Links a
        requested source pad from videoTee with the queue sink.

2012-12-17  Emil A Eklund  <eae@chromium.org>

        Clamp values in LayoutUnit::operator/ when SATURATED_LAYOUT_ARITHMETIC is enabled
        https://bugs.webkit.org/show_bug.cgi?id=104955

        Reviewed by Julien Chaffraix.

        LayoutUnit::operator/ currently does not clamp values and
        instead overflows when given a value greater than INT_MAX or
        less than INT_MIN. 

        Test: TestWebKitAPI/Tests/WebCore/LayoutUnit.cpp

        * platform/LayoutUnit.h:
        (WebCore::operator/):
        Clamp value if SATURATED_LAYOUT_ARITHMETIC is enabled.

2012-12-17  Simon Fraser  <simon.fraser@apple.com>

        Don't allow edge TileCache tiles to be larger than necessary
        https://bugs.webkit.org/show_bug.cgi?id=105195

        Reviewed by Anders Carlsson.

        The TileCache would allow edge tiles to be larger than the required size, with the assumption
        that the extra space would never be visible. However, for content tiled layers, it can be,
        and it doesn't get correctly cleared. So always keep the edge tiles at the specified size.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::revalidateTiles):

2012-12-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] Floats should respect shape-inside on exclusions
        https://bugs.webkit.org/show_bug.cgi?id=89261

        Reviewed by David Hyatt.

        Position floats properly with respect to an exclusion shape. Note that
        this will not attempt to position floats in a polygon that has
        multiple segments. In the multiple segment case, the floats will be
        positioned as if the exclusion did not exist.

        Updated an existing test case to test for this.
        Test: fast/exclusions/shape-inside/shape-inside-floats-simple.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeLogicalLocationForFloat): Adjust the
        right and left offsets to take into account the right and left offset
        contributed by the exclusion shape.

2012-12-17  Antoine Quint  <graouts@apple.com>

        GraphicsLayer's repaint count should update even when debugging option to show it is off
        https://bugs.webkit.org/show_bug.cgi?id=105178

        Reviewed by Simon Fraser.

        Update the repain count even if the debug option to show them is turned off.
        This allows the count to be accurate in between toggles of the debug option
        and to allow the InspectorLayerTreeAgent to get accurate results any time
        the layer tree is requested (see webkit.org/b/105024).

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2012-12-17  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Add helper functions for converting floats to LayoutUnits
        https://bugs.webkit.org/show_bug.cgi?id=103450

        Reviewed by Dirk Schulze.

        When a float logicalTop value is converted to a LayoutUnit it's necessary to
        use LayoutUnit::fromFloatCeil() to ensure that we're snapping to a value that's
        inside the ExclusionShape.  Similarly, to convert a logicalBottom value from
        float to LayoutUnit we use LayoutUnit::fromFloatFloor().  Added a pair of private
        ExlcusionShapeInsideInfo methods that do the conversions and refactored existing
        code to use them.

        This is just a cleanup.  No new tests are needed, the existing tests cover
        these changes.

        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::adjustLogicalLineTop): Use the new floatLogicalTopToLayoutUnit() method.
        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::shapeLogicalTop): Use the new floatLogicalTopToLayoutUnit() method.
        (WebCore::ExclusionShapeInsideInfo::shapeLogicalBottom): Use the new floatLogicalBottomToLayoutUnit() method.
        (ExclusionShapeInsideInfo):
        (WebCore::ExclusionShapeInsideInfo::floatLogicalTopToLayoutUnit): Convert a float to a LayoutUnit with LayoutUnit::fromFloatCeil().
        (WebCore::ExclusionShapeInsideInfo::floatLogicalBottomToLayoutUnit): Convert a float to a LayoutUnit with LayoutUnit::fromFloatFloor().

2012-12-17  Antoine Quint  <graouts@apple.com>

        Web Inspector: Provide the paint count of layers through the LayerTreeAgent
        https://bugs.webkit.org/show_bug.cgi?id=105024

        Reviewed by Pavel Feldman.

        We add a new optional .paintCount property to the Layer object, passing through the
        relevant information from GraphicsLayer.

        * inspector/Inspector.json:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):

2012-12-17  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [chromium] make toolbar render with Mountain Lion-friendly colors
        https://bugs.webkit.org/show_bug.cgi?id=105177

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/UIUtils.js:
        (WebInspector.platformFlavor):
        * inspector/front-end/inspector.css:
        (#toolbar):
        (body.dock-to-bottom #toolbar):
        (.toolbar-item):

2012-12-17  Andreas Kling  <akling@apple.com>

        Attribute: Remove unused constructor and isNull().
        <http://webkit.org/b/105179>

        Reviewed by Antti Koivisto.

        Removed the Attribute constructor that takes a localName rather than a full QualifiedName as that was never used.
        Also removed Attribute::isNull(), since that was only called in one place where isNull() will never be true.

        * dom/Attribute.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::collectStyleForPresentationAttribute):

2012-12-17  Anthony Scian  <ascian@rim.com>

        [Blackberry] Static code analysis warning fixes
        https://bugs.webkit.org/show_bug.cgi?id=105129

        Reviewed by Rob Buis.

        - alloca can return NULL, recoded to just use a temp var

        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::updateBuffer):

2012-12-17  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Make popover content accessible for clicks.
        https://bugs.webkit.org/show_bug.cgi?id=105167

        Reviewed by Vsevolod Vlasov.

        Currently it is very hard to move mouse pointer inside of popover area.
        The only maneuver is to precisely jerk the mouse in direction of popover.

        This path makes anchor and popover "active" areas overlap, so it becomes
        possible to smoothly move mouse to popover interior.

        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype._innerShow): Make popover "outer" border
        an be "active" area.
        * inspector/front-end/popover.css: Allow popover "outer" border receive
        mouse events.

2012-12-17  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: Persist Audit selections across sessions
        https://bugs.webkit.org/show_bug.cgi?id=103944

        Reviewed by Alexander Pavlov.

        Make selected audit categories a persistent setting, to simplify life for those
        repeatedly running same set of categories.

        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView):
        (WebInspector.AuditLauncherView.prototype.addCategory.get var):
        (WebInspector.AuditLauncherView.prototype.addCategory):
        (WebInspector.AuditLauncherView.prototype._selectAllClicked):
        (WebInspector.AuditLauncherView.prototype._categoryClicked):
        (WebInspector.AuditLauncherView.prototype._createCategoryElement):

2012-12-17  Zeno Albisser  <zeno@webkit.org>

        [Texmap] Drawing of ARB textures broken after r137498.
        https://bugs.webkit.org/show_bug.cgi?id=105165

        Disable antialiasing for ARB textures after unifying
        code paths. We are currently missing a fragment shader
        to do antialiasing with ARB textures.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):

2012-12-17  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Popup flickers when cursor moves between elements with same anchor.
        https://bugs.webkit.org/show_bug.cgi?id=104992

        Reviewed by Pavel Feldman.

        Popup disappears and then appears again when mouse pointer traverses
        between sub-elements of anchor element.

        * inspector/front-end/Popover.js: Split method "_mouseOut".
        (WebInspector.PopoverHelper.prototype._popoverMouseOut):
        Handler for Popover.
        (WebInspector.PopoverHelper.prototype._mouseOut):
        Handler for PopoverHelper.

2012-12-12  Andrey Kosyakov  <caseq@chromium.org>

        [Chromium] Remove support for TRACE_EVENT_IF_LONGER_THANx macros
        https://bugs.webkit.org/show_bug.cgi?id=104784

        Reviewed by Pavel Feldman.

        - removed TRACE_EVENT_IF_LONGER_THANx macros;
        - changed addTraceEvent() to return void, as we no longer need the index of added event.

        * platform/EventTracer.h:
        (EventTracer):
        * platform/chromium/EventTracerChromium.cpp:
        (WebCore::EventTracer::addTraceEvent):
        * platform/chromium/TraceEvent.h:
        (TraceEvent):
        (WebCore::TraceEvent::addTraceEvent):
        (WebCore::TraceEvent::TraceEndOnScopeClose::addEventIfEnabled):
        (Data):

2012-12-17  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r136794.
        http://trac.webkit.org/changeset/136794
        https://bugs.webkit.org/show_bug.cgi?id=104203

        The GC change can leak memory

        * bindings/v8/V8GCController.cpp:
        (WebCore):
        (WebCore::addImplicitReferencesForNodeWithEventListeners):

2012-12-17  Gabor Rapcsanyi  <rgabor@webkit.org>

        Reduce the code size of ARM SIMD in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=105086

        Reviewed by Zoltan Herczeg.

        Reduce the code size of ARM SIMD in GraphicsContext3D and change the ARM
        namespace to SIMD.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore):
        * platform/graphics/cpu/arm/GraphicsContext3DNEON.h:
        (WebCore::SIMD::unpackOneRowOfRGBA4444ToRGBA8):
        (WebCore::SIMD::packOneRowOfRGBA8ToUnsignedShort4444):
        (WebCore::SIMD::unpackOneRowOfRGBA5551ToRGBA8):
        (WebCore::SIMD::packOneRowOfRGBA8ToUnsignedShort5551):
        (WebCore::SIMD::unpackOneRowOfRGB565ToRGBA8):
        (WebCore::SIMD::packOneRowOfRGBA8ToUnsignedShort565):

2012-12-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: frame bars on timeline do not react on hover and double click
        https://bugs.webkit.org/show_bug.cgi?id=105153

        Reviewed by Alexander Pavlov.

        Remove z-index: -100 from #timeline-grid-header, as it prevents mouse events from
        reaching frame strip. Use pointer-events: none on frame dividers instead.

        * inspector/front-end/timelinePanel.css:
        (.timeline .resources-event-divider.timeline-frame-divider):
        (#timeline-grid-header):

2012-12-16  Kentaro Hara  <haraken@chromium.org>

        [V8] Improve performance of a conversion from WebKit strings to V8 strings
        https://bugs.webkit.org/show_bug.cgi?id=105150

        Reviewed by Eric Seidel.

        V8 provides v8::Weak(isolate) and v8::Local::New(isolate, ...),
        which are much faster than v8::Weak() and v8::Local::New().
        By using the faster APIs, we can improve performance of a conversion
        from a WebKit string to a V8 string. This improves performance of
        div.id, div.className, ...and a lot of DOM attributes that return
        strings.

        [Dromaeo/dom-attr]
        120 runs/sec, 120 runs/sec, 118 runs/sec => 125 runs/sec, 123 run/sec, 125 runs/sec (+4.1%)

        [Dromaeo/dom-traverse]
        94 runs/sec, 94 runs/sec, 96 runs/sec => 107 runs/sec, 105 runs/sec, 107 runs/sec (+12.3%)

        [Bindings/id-getter]
        356 runs/sec, 356 runs/sec, 341 runs/sec => 423 runs/sec, 424 runs/sec, 424 runs/sec (+20.7%)

        No tests. No change in behavior.

        * bindings/v8/V8ValueCache.h:
        (WebCore::StringCache::v8ExternalString):

2012-12-16  Arvid Nilsson  <anilsson@rim.com>

        [BlackBerry] Adapt to new BlackBerry::Platform::TouchPoint API
        https://bugs.webkit.org/show_bug.cgi?id=105143
        RIM PR 171941

        Reviewed by Rob Buis.
        Internally reviewed by George Staikos.

        TouchPoint instances now provide document coordinates for the viewport
        and content position of the touch event. The pixel coordinates stored
        in the TouchPoint should no longer be needed in WebKit.

        Also adapt to new method names and encapsulation of TouchPoint data
        members.

        No change in behavior, no new tests.

        * platform/blackberry/PlatformTouchPointBlackBerry.cpp:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):

2012-12-16  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Fix JS compiler warning.
        https://bugs.webkit.org/show_bug.cgi?id=105032

        Reviewed by Pavel Feldman.

        Problem: event handler parameter has actial parameter
        type KeyboardEvent, but ".addEventListener" refuses listeners with such
        signature.

        Solution: explicitly upcast argument type.

        * inspector/front-end/ElementsTreeOutline.js: Update JsDocs.

2012-12-16  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: The "Open in Preview" HUD button should work
        https://bugs.webkit.org/show_bug.cgi?id=102448
        <rdar://problem/12695729>

        Reviewed by Alexey Proskuryakov.

        Expose createCanonicalUUIDString and UUID.h.

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

2012-12-16  Seokju Kwon  <seokju.kwon@gmail.com>

        Fix unused parameter compile warnings
        https://bugs.webkit.org/show_bug.cgi?id=105089

        Reviewed by Kentaro Hara.

        Use UNUSED_PARAM macro to fix build warning -Wunused-parameter.

        No new tests, no behavior change.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):

2012-12-16  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12886898> Bundle uploads don't work
        https://bugs.webkit.org/show_bug.cgi?id=105149

        Reviewed by Sam Weinig.

        * WebCore.exp.in: Exported FormData::removeGeneratedFilesIfNeeded().

        * platform/network/FormData.cpp:
        (WebCore::encodeElement):
        (WebCore::decodeElement):
        Encode generated file name for archive, too. I'm not entirely sure how this affects other uses
        of FormData serialization, but it seems logical that if we encode m_hasGeneratedFiles, we
        should also encode their names.

2012-12-16  Hayato Ito  <hayato@chromium.org>

        [Shadow DOM] Kill ShadowRoot constructor
        https://bugs.webkit.org/show_bug.cgi?id=102913

        Reviewed by Dimitri Glazkov.

        Re-landing r137408 which breaks browser tests on chromium. I've
        updated the browser tests on chromium so that they do not use
        WebKitShadowRoot constructor.

        No new tests. Updating existing layout tests.

        * dom/ShadowRoot.idl:
        * page/DOMWindow.idl:

2012-12-16  Jon Lee  <jonlee@apple.com>

        Allow built-in PDF plugin and plugin documents to auto-start
        https://bugs.webkit.org/show_bug.cgi?id=105000
        <rdar://problem/12633351>

        Reviewed by Sam Weinig.

        Plug-ins in plug-in documents that are in the main frame should always auto-start.

        Add a virtual function that returns whether the PluginViewBase should auto-start its plug-in.
        Add a callback that gives the HTML plug-in element an opportunity to set the display state
        based on the widget.

        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::shouldAlwaysAutoStart): Added. By default returns false.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Renamed from
        subframeLoaderWillLoadPlugIn() for consistency. This call will also be made a little later
        in the subframe loader. Adds a check to see if the plug-in is inside a plug-in document
        of the main frame. If so, auto-start.
        (WebCore::HTMLPlugInImageElement::subframeLoaderDidCreatePlugIn): Given the widget created,
        check to see if it should always auto-start. If so, set the display state to Playing. Otherwise
        leave the display state alone.
        * html/HTMLPlugInImageElement.h:

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestPlugin): Move the will-load-plug-in call into loadPlugin().
        (WebCore::SubframeLoader::loadPlugin): Immediately prior to the plug-in's creation, make the
        will-create call. If a plug-in was made, make the did-create call. The did-create call should
        be made before setWidget() since that might initialize the plug-in, which could take the display
        state into account if being initialized synchronously.

2012-12-16  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Perform the layer-tree traversal in GraphicsLayerTextureMapper.
        https://bugs.webkit.org/show_bug.cgi?id=103366

        Reviewed by Noam Rosenthal.

        Currently, Texture Mapper performs the layer-tree traversal in
        TextureMapperLayer, while Coordinated Graphics performs the traversal in
        CoordinatedGraphicsLayer. This patch makes Texture Mapper perform the
        traversal in GraphicsLayerTextureMapper.

        Also removed the SyncOptions enum, which is redundant since no client
        calls it with ComputationsOnly.

        This is in preparation for refactoring TextureMapper to work in an actor
        model (http://webkit.org/b/103854).

        No new tests. Covered by existing tests.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingState):
        (WebCore::GraphicsLayerTextureMapper::didFlushCompositingState):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):

2012-12-16  Levi Weintraub  <leviw@chromium.org>

        Push pixel snapping logic into TransformState
        https://bugs.webkit.org/show_bug.cgi?id=101779

        Reviewed by Simon Fraser.

        The old SnapOffsetForTransforms behavior fell apart when there was content nested in
        multiple levels of containers with sub-pixel offsets. The point of this flag was to
        mirror the pixel snapping that occurs in paint, where offsets are accumulated bottom-
        up through the render tree and snapped at the end. This change eliminates this flag
        and pushes pixel snapping logic down into TransformState.

        TransformState now tracks a LayoutSize accumulated offset when there's no transform
        or we're just translating. We then snap and apply this offset before accumulating
        values into a transform, and when returning planar coordinates to callers.

        Test: fast/sub-pixel/transformed-iframe-copy-on-scroll.html added,
              fast/sub-pixel/sub-pixel-iframe-copy-on-scroll.html modified to also catch this bug.

        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::operator=): Pass accumulated offset.
        (WebCore::TransformState::translateTransform): Extracted this functionality for
        re-use when applying the accumulated offset, or accumulating from a call to move.
        (WebCore::TransformState::translateMappedCoordinates): Same as above when we're not
        acculating into a transform.
        (WebCore::TransformState::move): Changed to accumulate into m_accumulatedOffset when
        not accumulating into a transform.
        (WebCore::TransformState::applyAccumulatedOffset):
        (WebCore::TransformState::applyTransform): Applies the accumulated offset before the
        transform.
        (WebCore::TransformState::flatten): Ditto for flattening.
        (WebCore::TransformState::mappedPoint): Translates by the accumulated offset before
        returning.
        (WebCore::TransformState::mappedQuad): Ditto.
        * platform/graphics/transforms/TransformState.h:
        (TransformState): Added m_accumulatedOffset.
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::mapToContainer): When not using a transform, we still need
        to snap our offset before applying to our float result. Also, flatten when we have a
        non-uniform step.
        * rendering/RenderGeometryMap.h:
        (RenderGeometryMap): Remove use of SnapOffsetForTransforms.

        Everything below simply drops the use of SnapOffsetForTransforms:

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::absoluteBoundsForLocalRect):
        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::absoluteRect):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::absoluteCaretBounds):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
        * page/FrameView.cpp:
        (WebCore::FrameView::convertFromRenderer):
        (WebCore::FrameView::convertToRenderer):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::pushMappingToContainer):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isInUnavailablePluginIndicator):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::mapLocalToContainer):
        (WebCore::RenderInline::pushMappingToContainer):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::absoluteToContents):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::childrenClipRect):
        (WebCore::RenderLayer::selfClipRect):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentsVisible):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteFocusRingQuads):
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        * rendering/RenderView.h:
        (RenderView):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetGeometry):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::mapLocalToContainer):
        * rendering/svg/RenderSVGForeignObject.h:
        (RenderSVGForeignObject):
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::mapLocalToContainer):
        * rendering/svg/RenderSVGInline.h:
        (RenderSVGInline):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::mapLocalToContainer):
        * rendering/svg/RenderSVGModelObject.h:
        (RenderSVGModelObject):
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::mapLocalToContainer):
        * rendering/svg/RenderSVGText.h:
        (RenderSVGText):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer):
        * rendering/svg/SVGRenderSupport.h:
        (SVGRenderSupport):

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Rename FrameLoaderClient::download to convertMainResourceLoadToDownload
        https://bugs.webkit.org/show_bug.cgi?id=105122

        Reviewed by Andreas Kling.

        Rename FrameLoaderClient::download to convertMainResourceLoadToDownload and change it to take a MainResourceLoader instead
        of a ResourceHandle, since resource handles may not exist when loading isn't done in the web process.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        (WebCore):
        (FrameLoaderClient):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):

2012-12-16  Eric Carlson  <eric.carlson@apple.com>

        Remove in-band text tracks when media element's src changes
        https://bugs.webkit.org/show_bug.cgi?id=105081

        Reviewed by Sam Weinig.

        No new tests, media/track/track-in-band.html was updated to test this change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerDidRemoveTrack): Move some code into removeTrack.
        (WebCore::HTMLMediaElement::removeTrack): New, remove a track and all of its cues.
        (WebCore::HTMLMediaElement::removeAllInbandTracks): New, remove all in-band tracks.
        (WebCore::HTMLMediaElement::clearMediaPlayer): Call removeAllInbandTracks.
        * html/HTMLMediaElement.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Call clearTextTracks.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearTextTracks): Remove all tracks from client.

2012-12-16  Simon Fraser  <simon.fraser@apple.com>

        Fix assertions when doing a full repaint of compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=105128

        Reviewed by Dan Bernstein.

        In r137811 I added code to repaint all compositing layers when FrameView::layout()
        is doing a full repaint. However, this code needs to avoid calling setContentsNeedDisplay()
        on layers that don't actually draw their own content: those that draw into an ancestor,
        and those that draw into a window.

        Fixes assertions in existing tests.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):

2012-12-16  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK][AC] Build failure with an option --with-acceleration-backend=clutter
        https://bugs.webkit.org/show_bug.cgi?id=105027

        Reviewed by Gustavo Noronha Silva.

        GLContext.* and RedirectedXCompositeWindow.* are meaningful only if opengl is
        a backend for the AC. So I wrap them in USE_OPENGL.

        No new tests. This patch fixes a build fauilure, not adding new features.

        * GNUmakefile.list.am:

2012-12-16  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GStreamer] create playbin in ::load(), not in player constructor
        https://bugs.webkit.org/show_bug.cgi?id=103898

        Reviewed by Philippe Normand.

        This patch moves the instantiation of the playbin pipeline into the
        WebCore::MediaPlayerPrivateGStreamer::load() method, so the pipeline
        layout can reflect other predefined settings such as audio pitch
        preservation in variable playback rate scenarios

        No new tests. Covered by existing tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2012-12-16  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Pseudo-elements should not be directly collected into a named flow
        https://bugs.webkit.org/show_bug.cgi?id=105046

        Reviewed by Abhishek Arya.

        Prevent pseudo-elements to be collected into a named-flow by bailing out early in the collecting stage.
        Following the CSSRegions spec, http://dev.w3.org/csswg/css3-regions/#flow-into, the pseudo-elements
        like ::before/::after/::first-letter/::first-line are not allowed to become content nodes, being directly
        collected into a flow thread.

        Tests: fast/regions/pseudo-after-content-node.html
               fast/regions/pseudo-before-content-node.html
               fast/regions/pseudo-first-letter-content-node.html
               fast/regions/pseudo-first-line-content-node.html

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):

2012-12-16  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] broken feature detection: body.webkitRegionOverset and body.webkitGetRegionFlowRanges shouldn't succeed when disabled at runtime
        https://bugs.webkit.org/show_bug.cgi?id=99707

        Reviewed by Hajime Morita.

        The bug is that the CSS Regions feature leaks information at run-time. There are JS properties that exist even
        if the feature is disabled at run-time (document.webkitGetNamedFlows, document.body.webkitRegionOverset,
        document.body.webkitGetRegionFlowRanges and window.WebKitCSSRegionRule).

        The fix is to add V8EnabledAtRuntime=cssRegions in the IDL files to the properties that leak information and to
        the interfaces that are the type of those properties.

        Test: fast/regions/region-leak-js-information-when-disabled-at-runtime.html

        * css/WebKitCSSRegionRule.idl:
            added V8EnabledAtRuntime=cssRegions for the WebKitCSSRegionRule interface.
        * dom/DOMNamedFlowCollection.idl:
            added V8EnabledAtRuntime=cssRegions for the DOMNamedFlowCollection interface.
        * dom/Document.idl:
            added V8EnabledAtRuntime=cssRegions for the webkitGetNamedFlows method.
        * dom/Element.idl:
            added V8EnabledAtRuntime=cssRegions for the webkitRegionOverset attribute.
            added V8EnabledAtRuntime=cssRegions for the webkitGetRegionFlowRanges method.
        * page/DOMWindow.idl:
            added V8EnabledAtRuntime=cssRegions for the WebKitCSSRegionRule attribute.

2012-12-15  Ian Vollick  <vollick@chromium.org>

        [chromium] Automatically use composited scrolling
        https://bugs.webkit.org/show_bug.cgi?id=94743

        Reviewed by Adrienne Walker.

        We currently use the composited scrolling facilities provided by
        wkb.ug/91117 if the overflow scroll block element is styled with
        -webkit-overflow-scrolling: touch. Ideally, we could automatically
        opt into composited scrolling if it is safe to do so. This can affect
        antialiasing, so it is important that automatically opting in is only
        enabled via a setting.

        The way I determine if it is safe is by checking that z-ordering will
        not be affected if the overflow scrollable element were promoted to a
        stacking context (details below), and that clipping our scrolling
        descendants will not affect rendering.

        To check the first condition (that z-ordering will not be affected).
        I ensure that the candidate element and all its descendants appear as a 
        contiguous block in the candidate's stacking context. That is, if no 
        other elements are 'between' any of the candidates descendants when we
        sort in paint order, then we're safe. This is overly conservative,
        however. We could, in future, only consider stacking problems between
        elements that actually overlap.

        To ensure that clipping will not cause a rendering change, I ensure
        that the layer has no out of flow positioned descendant whose
        containing block is not also a descendant of ours.

        Test: compositing/overflow/automatically-opt-into-compositing-scrolling.html

        (WebCore):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::acceleratedCompositingForOverflowScrollEnabled):
        (WebCore):
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder):
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrderRecursive):
        (WebCore::RenderLayer::positionNewlyCreatedOverflowControls):
        (WebCore::RenderLayer::canSafelyEstablishAStackingContext):
          Returns true if the RenderLayer could become a stacking context without
          affecting the stacking order.
        (WebCore::RenderLayer::updateDescendantDependentFlags):
          We now need to keep track of out of flow positioned descendants.
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::usesCompositedScrolling):
          Returns true if the layer actually is using composited scrolling.
          This function may return false, even when needsCompositedScrolling
          returns true.
        (WebCore::RenderLayer::needsCompositedScrolling):
          This function returns true if we would like to use composited
          scrolling and it is safe to turn it on.
        (WebCore::RenderLayer::updateNeedsCompositedScrolling):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
          Since these could affect opting into composited scrolling, we must
          request that the RenderLayerCompositor reevaluate compositing.
        (WebCore::RenderLayer::updateLayerListsIfNeeded):
          We call updateCanSafelyEstablishStackingContext here, if necessary.
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::shouldBeSelfPaintingLayer):
          usesCompositedScrolling -> needsCompositedScrolling
        (WebCore::RenderLayer::setAncestorChainHasOutOfFlowPositionedDescendant):
        (WebCore::RenderLayer::dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus):
        (WebCore::RenderLayer::updateOutOfFlowPositioned):
          Dirties and sets the out of flow positioned descendant state.
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        (RenderLayer):
        (WebCore::RenderLayer::hasOutOfFlowPositionedDescendant):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::hasUnpositionedOverflowControlsLayers):
        (WebCore):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::setShouldReevaluateCompositingAfterLayout):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setEnableCompositingForOverflowScroll):
          Allows enabling the setting in layout tests.
        (WebCore):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-12-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * bindings/gobject/GNUmakefile.am: Do not dist generated DOM
        bindings headers.
        * platform/ScrollAnimatorNone.cpp: Include PlatformGestureEvent.h
        only if gesture events are enabled.

2012-12-15  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * platform/network/FormData.cpp:
        (WebCore::encodeElement):
        (WebCore::decodeElement):
        (WebCore::FormData::encode):
        (WebCore::FormData::decode):
        Disambiguated encode/decode functions. I'm not quite sure why the compiler was
        confused, but distinct names should make the code more readable anyway.

2012-12-15  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12886312> Cannot upload patches to Bugzilla (<input type=file> doesn't work)
        https://bugs.webkit.org/show_bug.cgi?id=105120

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * history/HistoryItem.cpp:
        * platform/network/FormData.h:
        Renamed encodeForBackForward and decodeForBackForward to encode and decode, respectively.
        I couldn't find anything in these that would limit them to this use, and data encoded
        for b/f has to be good enough to re-create a request anyway.

        * platform/network/FormData.cpp: (WebCore::decode): Fixed file data decoder to not
        bail out in the general case of posting a complete file.

2012-12-15  Nima Ghanavatian  <nghanavatian@rim.com>

        [BlackBerry] Pass key modifiers with touch and mouse events
        https://bugs.webkit.org/show_bug.cgi?id=105108

        Reviewed by Rob Buis.

        Call Screen to retrieve current key modifiers.

        Internally reviewed by Gen Mak.

        * platform/PlatformMouseEvent.h:
        (PlatformMouseEvent):
        * platform/blackberry/PlatformKeyboardEventBlackBerry.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState):
        * platform/blackberry/PlatformMouseEventBlackBerry.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/blackberry/PlatformTouchEventBlackBerry.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2012-12-15  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Prevent CookieManager from blocking the WKT thread
        https://bugs.webkit.org/show_bug.cgi?id=105111

        PR 265603

        Reviewed by Rob Buis.
        Internally reviewed by Konrad Piascik.

        The getBackingStoreCookies in WKT is blocking the thread because it has to wait for
        the db to be opened before it can call on it.

        The fix is to make CookieDatabaseBackingStore in the cookie_db thread dispatch
        a getBackingStoreCookies call on WKT after invokeOpen is finished.

        Tested loading the browser. Cookies are being loaded into memory on start up.

        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
        (WebCore::CookieDatabaseBackingStore::invokeOpen):
        * platform/blackberry/CookieManager.cpp:
        (WebCore::cookieManager):
        * platform/blackberry/CookieManager.h:

2012-12-15  Simon Fraser  <simon.fraser@apple.com>

        Fix repaint issues when resizing a window with centered content, for platforms with a tile cache
        https://bugs.webkit.org/show_bug.cgi?id=105073

        Reviewed by Dan Bernstein.

        There were several issues with the "do full repaint" code path in
        FrameView::layout(). These caused repaint issues when resizing the web view,
        especially for platforms that use a tile cache.
        
        First, the m_doFullRepaint flag wold get clobbered on resize-layouts, because
        the call to adjustViewSize() re-enters layout(), and resets the m_doFullRepaint member
        variable to false, even if the outer call had previously set it to true. This would
        cause us to lose track of whether we needed to do a full repaint. The patch fixes
        this by restoring m_doFullRepaint to the value it had before the call to adjustViewSize().
        
        The second problem was that full repaints would not propagate to compositing
        layers. They only repainted the RenderView, and on platforms that use a tile cache,
        this only repaints the top portion of that tile cache. This was fixed by sending
        a NeedsFullRepaintInBacking flag down into RenderLayer::updateLayerPositions(),
        and using that to do a full repaint on all compositing layers.
        
        Sending this new flag down into updateAfterLayout() prompted some boolean/flags
        cleanup with propagated into several files. This also allowed me to no longer
        include RenderLayerBacking.h in RenderLayerCompositor.h, but that required
        header cleanup in several files.

        Automated testing is not possible because WebKitTestRunner resizes the window
        asynchronously (bug 105101). Added manual test.

        * page/FrameView.cpp:
        (WebCore::updateLayerPositionFlags):
        (WebCore::FrameView::layout):
        * page/scrolling/ScrollingCoordinator.cpp:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::contentChanged):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderView.cpp:

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * platform/graphics/ca/GraphicsLayerCA.h:
        Remove an unused member variable.

2012-12-15  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r137006): TileCache flashes to linen, rather than the background color, when scrolling fast
        https://bugs.webkit.org/show_bug.cgi?id=104746

        Reviewed by Darin Adler.

        Make RenderLayerBacking::updateBackgroundColor() responsible for setting the background
        color of the main frame's root layer to the document background color (rather than doing
        it in code related to overlay scrollbars, which was crazy). This is only done for platforms
        that use a TiledBacking (currently, just Mac).
        
        Also fix updateBackgroundColor() to not call m_graphicsLayer->setContentsToBackgroundColor()
        and then call clearBackgroundColor() right away if the color was transparent.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateScrollbarOverlayStyle): Remove code that calls documentBackgroundColorDidChange().
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox): Remove blank linke.
        (WebCore::RenderLayerBacking::updateBackgroundColor):
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-12-15  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Disambiguate "background color" and "contents as solid color" on GraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=104842

        Reviewed by Simon Fraser.

        Rename overloads in GraphicsLayerTextureMapper and GraphicsLayerChromium to account for the rename in GraphicsLayer.

        Covered by existing tests.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsToSolidColor):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::solidColor):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::flushCompositingStateSelf):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (State):

2012-12-13  Simon Fraser  <simon.fraser@apple.com>

        Disambiguate "background color" and "contents as solid color" on GraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=104842

        Reviewed by Dean Jackson.

        GraphicsLayer failed to be clear about the distinction between
        the layer background color, and setting the layer contents
        to a color. This caused some recently added tests to fail,
        and required some special-casing for the TileCache in
        GraphicsLayerCA.
        
        Separate these two concepts on GraphicsLayer. setBackgroundColor()
        now sets the background color on the entire layer, which will only
        be used in special cases like the TileCache.
        
        The existing setContentsToBackgroundColor() is renamed to
        setContentsToSolidColor(), and is an explicit request to create
        a contents layer for the purpose of displaying a simple color.
        
        In both cases, 'clear' methods are not necessary; calling
        the setter with an invalid color clears the color.

        Covered by existing tests.

        * WebCore.exp.in: Remove GraphicsLayer::clearBackgroundColor().
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::setBackgroundColor):
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer): Remove m_backgroundColorSet; we just check whether
        the color is a valid color now.
        (WebCore::GraphicsLayer::setContentsToSolidColor):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setBackgroundColor):
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateBackgroundColor):
        (WebCore::GraphicsLayerCA::updateContentsColorLayer):
        (WebCore):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): We have
        to call updateBackgroundColor(), because the 'is simple compositing layer'
        state may change in this code path.
        (WebCore::RenderLayerBacking::updateBackgroundColor): Don't initialize
        the Color to transparent (it will be invalid initially), and always
        call setContentsToSolidColor() which will either set or remove the color.

2012-12-15  Mark Lam  <mark.lam@apple.com>

        Re-landing patch for "Introducing the DatabaseStrategy and database servers".
        https://bugs.webkit.org/show_bug.cgi?id=104934.

        Not reviewed.

        Merged from r137767. Previously reviewed by Sam Weinig.
        Also added __ZTVN7WebCore16DatabaseStrategyE to WebCore.exp.in.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractDatabaseServer.h: Copied from Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h.
        * Modules/webdatabase/DBBackendServer.h: Copied from Source/WebCore/Modules/webdatabase/DBBackendServer.h.
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        * Modules/webdatabase/DatabaseManager.h:
        (DatabaseManager):
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DatabaseStrategy.cpp: Copied from Source/WebCore/platform/DatabaseStrategy.cpp.
        * platform/DatabaseStrategy.h: Copied from Source/WebCore/platform/DatabaseStrategy.h.
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::databaseStrategy):
        (PlatformStrategies):
        (WebCore::PlatformStrategies::PlatformStrategies):

2012-12-14  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        Emphasis mark is printed after inline-block with justify
        https://bugs.webkit.org/show_bug.cgi?id=104631

        Reviewed by Dean Jackson.

        Do not print an emphasis mark after an inline-block when justified.

        If an inline-block is expanded, it has a space appended to it.
        This space should not have any emphasis marks drawn.

        Test: fast/inline/justify-emphasis-inline-box.html

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::zeroWidthSpaceGlyph): Add getter method to get zero width space glyph.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal): We use zero width space for the extra space not to draw emphasis marks.

2012-12-14  Jer Noble  <jer.noble@apple.com>

        Unreviewed bug fix after r137782.

        Add new source file TextTrackRepresentation.cpp to CMakeLists.txt.

        * CMakeLists.txt:

2012-12-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137767.
        http://trac.webkit.org/changeset/137767
        https://bugs.webkit.org/show_bug.cgi?id=105062

        Broke Mac builds. (Requested by mlam on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractDatabaseServer.h: Removed.
        * Modules/webdatabase/DBBackendServer.h: Removed.
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        * Modules/webdatabase/DatabaseManager.h:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DatabaseStrategy.cpp: Removed.
        * platform/DatabaseStrategy.h: Removed.
        * platform/PlatformStrategies.h:
        (WebCore):
        (WebCore::PlatformStrategies::PlatformStrategies):
        (PlatformStrategies):

2012-12-14  Jer Noble  <jer.noble@apple.com>

        Allow the text track contents to be displayed externally to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=105052

        Reviewed by Eric Carlson.

        Support scenarios where the text track contents must be rendered outside of WebCore, such as to an external
        display or window.  Add an abstract base class which encapsulates the external representation to which the
        text tracks will be rendered.

        Add a new abstract base class and client to wrap the external rendering of a TextTrack.
        * platform/graphics/TextTrackRepresentation.h: Added.
        (WebCore::TextTrackRepresentationClient::~TextTrackRepresentationClient):
        (WebCore::TextTrackRepresentation::~TextTrackRepresentation):

        Add an empty concrete implementation for those ports who do not yet support external display of subtitles.
        * platform/graphics/TextTrackRepresentation.cpp: Added.
        (NullTextTrackRepresentation):
        (WebCore::NullTextTrackRepresentation::~NullTextTrackRepresentation):
        (WebCore::NullTextTrackRepresentation::update):
        (WebCore::NullTextTrackRepresentation::platformLayer):
        (WebCore::NullTextTrackRepresentation::setContentScale):
        (WebCore::NullTextTrackRepresentation::bounds):
        (WebCore::TextTrackRepresentation::create):

        Add methods to MediaPlayerPrivateIOS to handle the TextTrackRepresentation.
        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm:
        (WebCore::MediaPlayerPrivateIOS::deliverNotification): Remove the representation when exiting full screen.
        (WebCore::MediaPlayerPrivateIOS::requiresTextTrackRepresentation): Return YES if in full screen mode.
        (WebCore::MediaPlayerPrivateIOS::setTextTrackRepresentation): Pass the representation's layer to the player plug-in.

        Expose those methods via HTMLMediaElement:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::requiresTextTrackRepresentation):
        (WebCore::HTMLMediaElement::setTextTrackRepresentation):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::requiresTextTrackRepresentation):
        (WebCore::MediaPlayer::setTextTrackRepresentation):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::textTrackRepresentationBoundsChanged):
        (WebCore::MediaPlayerClient::paintTextTrackRepresentation):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::requiresTextTrackRepresentation):
        (WebCore::MediaPlayerPrivateInterface::setTextTrackRepresentation):

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Create the representation, if necessary.
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Use the representation to determine the font size.
        (WebCore::MediaControlTextTrackContainerElement::paintTextTrackRepresentation): Added. Paint the TextTrack into the provided graphics context.
        (WebCore::MediaControlTextTrackContainerElement::textTrackRepresentationBoundsChanged): Added. Call updateSizes().
        * html/shadow/MediaControlElements.h:

        Add the new files to the project.
        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:

2012-12-14  Fady Samuel  <fsamuel@chromium.org>

        Allow embedder to observe changes to frame names
        https://bugs.webkit.org/show_bug.cgi?id=104404

        Reviewed by Darin Fisher.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didChangeName):
        (FrameLoaderClient):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setName):

2012-12-14  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] Properly report reused connections
        https://bugs.webkit.org/show_bug.cgi?id=104986

        Reviewed by Tony Gentilcore.

        Test: http/tests/w3c/webperf/submission/resource-timing/html/test_resource_connection_reuse.html

        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::connectStart):
        (WebCore::PerformanceResourceTiming::connectEnd):
        * page/PerformanceResourceTiming.h:
        (PerformanceResourceTiming):

2012-12-14  Roger Fong  <roger_fong@apple.com>

        Enable video caption controls on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=105045.

        Reviewed by Eric Carlson.

        Now that video tracks have been enabled on Windows, enable controls as well.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        * html/shadow/MediaControlElements.h:
        * rendering/RenderThemeWin.h:

2012-12-14  Mark Lam  <mark.lam@apple.com>

        Introducing the DatabaseStrategy and database servers.
        https://bugs.webkit.org/show_bug.cgi?id=104934.

        Reviewed by Sam Weinig.

        The database server is currently a placeholder that does nothing.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/webdatabase/AbstractDatabaseServer.h: Added.
        (WebCore):
        (AbstractDatabaseServer):
        (WebCore::AbstractDatabaseServer::AbstractDatabaseServer):
        (WebCore::AbstractDatabaseServer::~AbstractDatabaseServer):
        * Modules/webdatabase/DBBackendServer.h: Added.
        (DBBackend):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        * Modules/webdatabase/DatabaseManager.h:
        (WebCore):
        (DatabaseManager):
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DatabaseStrategy.cpp: Added.
        (WebCore):
        (WebCore::DatabaseStrategy::getDatabaseServer):
        * platform/DatabaseStrategy.h: Added.
        (WebCore):
        (DatabaseStrategy):
        (WebCore::DatabaseStrategy::~DatabaseStrategy):
        * platform/PlatformStrategies.h:
        (WebCore):
        (WebCore::PlatformStrategies::databaseStrategy):
        (PlatformStrategies):
        (WebCore::PlatformStrategies::PlatformStrategies):

2012-12-14  Anton Vayvod  <avayvod@chromium.org>

        Text Autosizing: Consider inline-block and inline-table elements to be autosizing clusters.
        https://bugs.webkit.org/show_bug.cgi?id=104702

        Reviewed by Julien Chaffraix.

        A common pattern for creating adjacent columns in CSS is to set each of the columns to
        display:inline-block, display:inline-table or alike WebKit-specific styles. Whenever columns
        are used, Text Autosizing needs to assign each of the columns to different clusters (since
        the user can zoom in such that a column fills the width of the screen, so text within a column
        should have a smaller multiplier than it's wider enclosing cluster would have needed).

        This patch causes display:inline-block, display:inline-table and alike styles to trigger new clusters.

        Test: fast/text-autosizing/cluster-inline-block-or-table.html
        Test: fast/text-autosizing/cluster-inline-grid-flex-box.html

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::isAutosizingContainer):
        (WebCore::TextAutosizer::isAutosizingCluster):
            Consider display:inline-block, inline-table and alike elements to be autosizing containers and clusters.

2012-12-14  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r137607): Cannot download files, stuck in "Preparing to download"
        https://bugs.webkit.org/show_bug.cgi?id=105044
        <rdar://problem/12879657>

        Reviewed by Alexey Proskuryakov.

        Make ResourceHandle::cancel return early if the handle has been converted to a download.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::cancel):

2012-12-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137570.
        http://trac.webkit.org/changeset/137570
        https://bugs.webkit.org/show_bug.cgi?id=105048

        Stale nodes in the touchEventTarget HashCountedSet are
        triggering crashes. Rolling out while I find the root cause.
        (Requested by leviw on #webkit).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::didAddTouchEventHandler):
        (WebCore::Document::didRemoveTouchEventHandler):
        * dom/Document.h:
        (WebCore::Document::touchEventHandlerCount):
        (Document):
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::updateType):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * page/scrolling/ScrollingCoordinator.cpp:
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.h:
        (ScrollingCoordinatorChromium):
        * testing/Internals.cpp:
        (WebCore::Internals::touchEventHandlerCount):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-12-14  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Remove code for the other mesh box types (border-box | padding-box | content-box)
        https://bugs.webkit.org/show_bug.cgi?id=103776

        Reviewed by Dean Jackson.

        The MeshBoxType has been removed and the code has been refactored. The specs will be updated shortly
        and therefore this feature - even though it was not fully implemented yet - shall not be used anymore.

        In this patch we remove everything but the parsing code, which shall be addressed in a different patch
        (see: https://bugs.webkit.org/show_bug.cgi?id=103778).

        Specification to be updated: http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#ltboxgt

        Existing tests have been updated and new parsing legacy cases have been added.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCustomFilter):
        * css/CSSPrimitiveValueMappings.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createCustomFilterOperation):
        * platform/graphics/filters/CustomFilterConstants.h:
        * platform/graphics/filters/CustomFilterOperation.cpp:
        (WebCore::CustomFilterOperation::CustomFilterOperation):
        (WebCore::CustomFilterOperation::blend):
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::create):
        (CustomFilterOperation):
        (WebCore::CustomFilterOperation::operator==):
        * platform/graphics/filters/CustomFilterRenderer.cpp:
        (WebCore::CustomFilterRenderer::create):
        (WebCore::CustomFilterRenderer::CustomFilterRenderer):
        * platform/graphics/filters/CustomFilterRenderer.h:
        (CustomFilterRenderer):
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::FECustomFilter):
        (WebCore::FECustomFilter::create):
        * platform/graphics/filters/FECustomFilter.h:
        (FECustomFilter):
        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp:
        (WebCore::ValidatedCustomFilterOperation::ValidatedCustomFilterOperation):
        * platform/graphics/filters/ValidatedCustomFilterOperation.h:
        (WebCore::ValidatedCustomFilterOperation::create):
        (WebCore::ValidatedCustomFilterOperation::operator==):
        (ValidatedCustomFilterOperation):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::createCustomFilterEffect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeFilterOperations):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawUsingCustomFilter):

2012-12-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: optional parameters of protocol commands should go after required ones
        https://bugs.webkit.org/show_bug.cgi?id=105019

        Reviewed by Pavel Feldman.

        * inspector/Inspector.json: Moved required x and y parameters declaration before
        optional ones.
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::dispatchMouseEvent):
        * inspector/InspectorInputAgent.h:
        (InspectorInputAgent):

2012-12-14  Jessie Berlin  <jberlin@apple.com>

        Mac build fix after r137724.

        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerKeyAdded):
        Comment out the names of the unused parameters so they don't trigger unused parameter
        warnings.
        (WebCore::MediaPlayerClient::mediaPlayerKeyError):
        Ditto.
        (WebCore::MediaPlayerClient::mediaPlayerKeyMessage):
        Ditto.
        (WebCore::MediaPlayerClient::mediaPlayerKeyNeeded):
        Ditto.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::generateKeyRequest):
        Pass an empty URL for the new defaultURL parameter in the keyMessage call.

2012-12-14  Alberto Garcia  <agarcia@igalia.com>

        [GTK] When in private mode WebKitGTK+ should not save HTTP authentication credentials to the persistent storage
        https://bugs.webkit.org/show_bug.cgi?id=104910

        Reviewed by Martin Robinson.

        Add new parameter to GtkAuthenticationDialog to select whether we
        allow persistent storage of credential information or not. In the
        latter case, the "Remember password" check button is not shown and
        the credentials are always stored in the session.

        * platform/gtk/GtkAuthenticationDialog.cpp:
        (WebCore::GtkAuthenticationDialog::GtkAuthenticationDialog):
        (WebCore::GtkAuthenticationDialog::createContentsInContainer):
        (WebCore::GtkAuthenticationDialog::buttonClickedCallback):
        * platform/gtk/GtkAuthenticationDialog.h:
        (GtkAuthenticationDialog):

2012-12-14  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed, rolling out r129633 and r129757.
        http://trac.webkit.org/changeset/129633
        http://trac.webkit.org/changeset/129757
        https://bugs.webkit.org/show_bug.cgi?id=97659

        Causes performance regression whn inspector overlay is
        displayed

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::paint):

2012-12-14  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: add data grid for exploring native heap graph
        https://bugs.webkit.org/show_bug.cgi?id=105012

        Reviewed by Pavel Feldman.

        Added a view for displaying native heap graph nodes.

        * inspector/HeapGraphSerializer.cpp:
        (WebCore::HeapGraphSerializer::reportEdge):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeMemorySnapshotView):
        (WebInspector.NativeMemorySnapshotView.prototype._onSelectedViewChanged):
        (WebInspector.NativeMemorySnapshotView.prototype.get statusBarItems):
        (WebInspector.NativeHeapGraphNode):
        (WebInspector.NativeHeapGraphNode.prototype.id):
        (WebInspector.NativeHeapGraphNode.prototype.type):
        (WebInspector.NativeHeapGraphNode.prototype.size):
        (WebInspector.NativeHeapGraphNode.prototype.className):
        (WebInspector.NativeHeapGraphNode.prototype.name):
        (WebInspector.NativeHeapGraphNode.prototype.hasReferencedNodes):
        (WebInspector.NativeHeapGraphNode.prototype.referencedNodes):
        (WebInspector.NativeHeapGraphNode.prototype._firstEdgePoistion):
        (WebInspector.NativeHeapGraphNode.prototype._afterLastEdgePosition):
        (WebInspector.NativeHeapGraphNode.prototype._getStringField):
        (WebInspector.NativeHeapGraph):
        (WebInspector.NativeHeapGraph.prototype.rootNodes):
        (WebInspector.NativeHeapGraph.prototype._calculateNodeEdgeIndexes):
        (WebInspector.NativeHeapGraphDataGrid):
        (WebInspector.NativeHeapGraphDataGridRoot):
        (WebInspector.NativeHeapGraphDataGridRoot.prototype._populate):
        (WebInspector.NativeHeapGraphDataGridNode):
        (WebInspector.NativeHeapGraphDataGridNode.prototype._populate):
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked):

2012-12-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: do not validate InlineFlowBox objects against tcmalloc data.
        https://bugs.webkit.org/show_bug.cgi?id=105001

        Reviewed by Yury Semikhatsky.

        This is a follow-up change for r137589.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::reportMemoryUsage):
        (WebCore):
        * rendering/InlineFlowBox.h:
        (InlineFlowBox):

2012-12-14  Kentaro Hara  <haraken@chromium.org>

        ChildNodesLazySnapshot::nextNode() can crash in Debug builds
        https://bugs.webkit.org/show_bug.cgi?id=104982

        Reviewed by Ryosuke Niwa.

        The original fix in r137702 was not enough. r137702 fixed a crash
        in Release builds but didn't fix a crash in Debug builds.
        We have to also change a return type of ChildNodesLazySnapshot::nextNode()
        from a raw pointer to a RefPtr.

        Test: fast/dom/insertedIntoDocument-no-crash.html
        (Confirm that this test does not crash in Debug builds.)

        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::nextNode):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromDocument):

2012-12-14  John Mellor  <johnme@chromium.org>

        Text Autosizing: Don't autosize unwrappable blocks
        https://bugs.webkit.org/show_bug.cgi?id=104925

        Reviewed by Julien Chaffraix.

        If we autosize an unwrappable block (white-space:nowrap/pre), it'll
        expand sideways. This doesn't actually improve its legibility, and it
        can often severely break web page layouts. This patch prevents us from
        autosizing unwrappable blocks. A follow-up patch will address the more
        complex issue of unwrappable inline elements.

        Tests: fast/text-autosizing/unwrappable-blocks.html
               fast/text-autosizing/unwrappable-inlines.html

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processContainer):
            Use containerShouldbeAutosized instead of contentHeightIsConstrained.
        (WebCore::contentHeightIsConstrained):
            Unchanged, just moved lower down the file.
        (WebCore::TextAutosizer::containerShouldbeAutosized):
            Checks that the block is wrappable, and also that contentHeightIsConstrained is false.
        (WebCore::TextAutosizer::measureDescendantTextWidth):
            Use containerShouldbeAutosized instead of contentHeightIsConstrained.
        * rendering/TextAutosizer.h:
            Declared containerShouldbeAutosized.

2012-12-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Duplicate scripts appear in workspace when script was referenced by url with a fragment part.
        https://bugs.webkit.org/show_bug.cgi?id=105004

        Reviewed by Alexander Pavlov.

        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):

2012-12-14  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Hours field of date/time input UI should respect step attribute
        https://bugs.webkit.org/show_bug.cgi?id=104993

        Reviewed by Kent Tamura.

        This patch makes step-up/-down UI of the hours field respect step attribute when possible.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html

        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField): Pass step parameters to the hour field constructor.
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeHourFieldElement::DateTimeHourFieldElement): Add Parameters argument.
        (WebCore::DateTimeHourFieldElement::create): Ditto.
        * html/shadow/DateTimeFieldElements.h:
        (DateTimeHourFieldElement): Ditto.

2012-12-14  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Windows compilation fix after r137728.

        * inspector/InspectorAllInOne.cpp:

2012-12-14  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow DOM] ShadowRoot.getElementById() should work outside document.
        https://bugs.webkit.org/show_bug.cgi?id=87815

        Reviewed by Hajime Morita.

        ShadowRoot.getElementById() didn't work if ShadowRoot is outside document. We need to update id when an element
        is in ShadowTree event if it is not in document.

        For performance reason, we introduce IsInShadowTree flag, which enables us to check isInTreeScope() fast.
        This is maintained in Element::insertedInto and removedFrom. Here, we're anxious about performance regression,
        however our benchmark result shows this doesn't regress the performance.

        I've measured Dromaeo/dom-modify.html and Parser/html5-full-render.html 2 times.

        Dromaeo/dom-modify.html
             35.21,   35.27 [runs/s] --->   35.76,   35.56 [runs/s]
        Parser/html5-full-render.html
           4328.51, 4254.94 [ms]     ---> 4277.14, 4222.43 [ms]

        Test: fast/dom/shadow/getelementbyid-in-orphan.html

        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        * dom/Element.h:
        (WebCore::Element::updateId):
        * dom/Node.cpp:
        (WebCore::Node::insertedInto): If the parent node is in shadow tree, this node should be also in the same shadow tree.
        Since this node is inserted, parentOrHostNode() will not be null.
        (WebCore::Node::removedFrom): When node is removed from ShadowTree, its treeScope() should not be ShadowRoot.
        * dom/Node.h:
        (Node):
        (WebCore::Node::isInShadowTree):
        (WebCore::Node::isInTreeScope):

2012-12-14  Antoine Quint  <graouts@apple.com>

        LayerTreeAgent should only be enabled upon restore if it was previously in the enabled state
        https://bugs.webkit.org/show_bug.cgi?id=104887

        Reviewed by Pavel Feldman.

        Check that we were previously in the enabled state before re-enabling the agent upon restore,
        as suggested by Pavel Feldman in follow-up discussion to https://bugs.webkit.org/show_bug.cgi?id=103513.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::restore):

2012-12-14  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: CPU Profile: Search in "heavy" mode is very slow.
        https://bugs.webkit.org/show_bug.cgi?id=103682

        Reviewed by Pavel Feldman.

        In "heavy" mode the searchable tree is much larger than original tree.
        That is why search can cause watchdog timer fired.

        Simple optimization makes search much faster.

        * inspector/front-end/CPUProfileView.js:
        (WebInspector.CPUProfileView.prototype.searchCanceled):
        Fix cleanup.
        (WebInspector.CPUProfileView.prototype.matchesQuery):
        Precompute regexp.
        (WebInspector.CPUProfileView.prototype.performSearch):
        Use precomputed regexp instead of generating one on each iteration.

2012-12-13  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: collect native heap graph and report it to the front-end
        https://bugs.webkit.org/show_bug.cgi?id=104888

        Reviewed by Pavel Feldman.

        Added an option to serialize native heap graph in a format similar to that
        of JS heap profiler and send it in reply to getProcessMemoryDistribution
        command. This is a first attempt and we likely change the report mechanism to
        use a stream instread of sending whole graph at once.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/HeapGraphSerializer.cpp: Added.
        (WebCore):
        (HeapGraphNode):
        (WebCore::HeapGraphNode::HeapGraphNode):
        (HeapGraphEdge):
        (WebCore::HeapGraphEdge::HeapGraphEdge):
        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::~HeapGraphSerializer):
        (WebCore::HeapGraphSerializer::serialize):
        (WebCore::HeapGraphSerializer::reportNode):
        (WebCore::HeapGraphSerializer::reportEdge):
        (WebCore::HeapGraphSerializer::reportLeaf):
        (WebCore::HeapGraphSerializer::reportBaseAddress):
        (WebCore::HeapGraphSerializer::adjutEdgeTargets):
        (WebCore::HeapGraphSerializer::addString):
        * inspector/HeapGraphSerializer.h: Copied from Source/WebCore/inspector/InspectorMemoryAgent.h.
        (WebCore):
        (HeapGraphSerializer):
        * inspector/Inspector.json:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * inspector/InspectorMemoryAgent.h:
        (InspectorMemoryAgent):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::reportNode):
        (WebCore):
        (WebCore::MemoryInstrumentationClientImpl::reportEdge):
        (WebCore::MemoryInstrumentationClientImpl::reportLeaf):
        (WebCore::MemoryInstrumentationClientImpl::reportBaseAddress):
        * inspector/MemoryInstrumentationImpl.h:
        (WebCore):
        (WebCore::MemoryInstrumentationClientImpl::MemoryInstrumentationClientImpl):
        (MemoryInstrumentationClientImpl):

2012-12-14  Yoshifumi Inoue  <yosin@chromium.org>

        Handling autoscroll in EventHandler should be re-factor
        https://bugs.webkit.org/show_bug.cgi?id=104764

        Reviewed by Hajime Morita.

        This patch introduces new class AutoscrollController for moving autoscroll
        and panscroll from EventHandler class for ease of maintenance of
        EventHandler and ease of adding autoscroll related features, e.g. autoscroll
        during drag-and-drop, autoscoll by gesture.

        No new tests. This patch doesn't change behavior.

        * CMakeLists.txt: Changed to add page/AutoscrollController.cpp
        * GNUmakefile.list.am:  Changed to add page/AutoscrollController.{cpp,h}
        * Target.pri:  Changed to add page/AutoscrollController.cpp
        * WebCore.gypi: Changed to add page/AutoscrollController.{cpp,h}
        * WebCore.vcproj/WebCore.vcproj: Changed to add page/AutoscrollController.{cpp,h}
        * WebCore.xcodeproj/project.pbxproj: Changed to add page/AutoscrollController.{cpp,h}
        * page/AutoscrollController.cpp: Added.
        (WebCore::getMainFrame): Helper function.
        (WebCore::AutoscrollController::AutoscrollController): Moved from EventHandler.
        (WebCore::AutoscrollController::autoscrollRenderer): Moved from EventHandler.
        (WebCore::AutoscrollController::autoscrollInProgress): Moved from EventHandler.
        (WebCore::AutoscrollController::startAutoscrollForSelection): Replacement of EventHandler::handleAutoscroll().
        (WebCore::AutoscrollController::stopAutoscrollTimer): Moveed from EventHandler.
        (WebCore::AutoscrollController::updateAutoscrollRenderer): ditto
        (WebCore::AutoscrollController::didPanScrollStart): Added for updating pan scrolling status of main frame.
        (WebCore::AutoscrollController::didPanScrollStop): ditto
        (WebCore::AutoscrollController::handleMouseReleaseEvent): Extracted from EventHandler.
        (WebCore::AutoscrollController::panScrollInProgress): Replacement of EventHandler::m_panScrollInProgress.
        (WebCore::AutoscrollController::startPanScrolling): Moved from EventHandler::startPanScrolling()
        (WebCore::AutoscrollController::autoscrollTimerFired): Moved from EventHandler::autoscrollTimerFired().
        (WebCore::AutoscrollController::startAutoscrollTimer): Moved from EventHandler::startAutoscrollTimer().
        (WebCore::AutoscrollController::updatePanScrollState): Moved from EventHandler::updatePanScrollState().
        * page/AutoscrollController.h: Added.
        (AutoscrollController):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Changed autoscroll and panscroll related member variable initializations to m_autoscrollController initialization.
        (WebCore::EventHandler::handleMouseDraggedEvent): Changed to call AutoscrollController::startAutoscrollForSelection().
        (WebCore::EventHandler::handleMouseReleaseEvent): Changed to remove m_autoscrollInProgress reference.
        (WebCore::EventHandler::didPanScrollStart): Added for updating pan scrolling status of main frame.
        (WebCore::EventHandler::didPanScrollStop): ditto
        (WebCore::EventHandler::startPanScrolling): Changed to call AutoscrollController::startPanScrolling().
        (WebCore::EventHandler::autoscrollRenderer): Changed to use AutoscrollController.
        (WebCore::EventHandler::updateAutoscrollRenderer): ditto
        (WebCore::EventHandler::autoscrollInProgress): ditto
        (WebCore::EventHandler::panScrollInProgress): Added to replace m_panScrollInProgress.
        (WebCore::EventHandler::stopAutoscrollTimer): Changed to use AutoscrollController.
        (WebCore::EventHandler::selectCursor): Changed to use panScrollInProgress().
        (WebCore::EventHandler::handleMousePressEvent): Chagned to call AutoscrollController::handleMousePressEvent().
        (WebCore::EventHandler::keyEvent): Changed to use panScrollInProgress().
        * page/EventHandler.h:
        (WebCore::EventHandler::autoscrollController): Added for using main frame's panScrollInProgress().
        (WebCore::EventHandler::mouseDownWasInSubframe): Added for AutoscrollController.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::canAutoscroll): Moved from EventHandler.cpp.
        (WebCore::RenderBox::findAutoscrollable): Moved from EventHandler.cpp.
        * rendering/RenderBox.h:
        (RenderBox): Added new functions canAutoscroll() and findAutoscrollable().

2012-12-14  David Dorwin  <ddorwin@chromium.org>

        EME v0.1: Report defaultURL in KeyMessage.
        https://bugs.webkit.org/show_bug.cgi?id=104284

        Reviewed by Darin Fisher.

        Passes defaultURL down from the media engine to HTMLMediaElement.
        Only Valid URLs will be passed.

        No test because Clear Key does not provide a defaultURL (in v0.1).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerKeyMessage):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::keyMessage):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerKeyAdded):
        (WebCore::MediaPlayerClient::mediaPlayerKeyError):
        (WebCore::MediaPlayerClient::mediaPlayerKeyMessage):
        (WebCore::MediaPlayerClient::mediaPlayerKeyNeeded):
        (MediaPlayer):

2012-12-13  Hajime Morrita  <morrita@google.com>

        ContentDistributor and ShadowRootContentDistributionData should use RefPtr to hold elements.
        https://bugs.webkit.org/show_bug.cgi?id=104918

        Reviewed by Kentaro Hara.

        This change turns some raw pointers to RefPtrs.

        No new tests. Hard to write reliable fast tests since the error
        reproduction needs GC to run in certain timing. Although original
        report has a repdocution, it takes a few seconds before crash and
        isn't suited for a layout test.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertionPointList):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ShadowRootContentDistributionData::ensureInsertionPointList):
        (WebCore::ContentDistributor::findInsertionPointFor):
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::invalidate):
        * html/shadow/ContentDistributor.h:
        (ShadowRootContentDistributionData):
        (ContentDistributor):

2012-12-13  Hajime Morrita  <morrita@google.com>

        NodeRenderingContext is slow due to ComposedShadowTreeWalker
        https://bugs.webkit.org/show_bug.cgi?id=104332

        Reviewed by Dimitri Glazkov.

        NodeRenderingContext has some slowness due to the complexity of
        ComposedShadowTreeWalker that NRC relies on. This change
        creates some fast paths to address such slowness.

        = NodeRenderingTraversal module:

        This change introduces NodeRenderingTraversal namespace, a sister
        of NodeTraversal. NRT consists of a set of tree traversal
        functions that is responsible for traversal in NRC.  Before this
        change, NRC directly used CSTW. This NRT module hides and narrows
        the usage of CSTW.

        - Traversals provided by NRT have fast paths. In many case, such traversals
          don't need to use CSTW and just goes to neighboring nodes in a plain DOM way.
        - It also handles NRC specific traversal concerns like pseudo elements.
          CSTW::pseudoAwareNextSibling() and CSTW::pseudoAwarePreviousSibling() are
          merged into this module.
        - CSTW::ParentTraversalDetails is moved and renamed to
          NRT::ParentDetails with small modification. This is a pure
          refactoring: As the name implies, This class is used only by NRC
          and used during a traversal there.

        NodeRenderingTraversal is an isolation layer between generic DOM and CSTW. This hides CSTW
        behind the wall and will help further reduction of its usage.

        = Node::NeedsShadowTreeWalkerFlag flag:

        NRT fast path is enabled by newly introduced NeedsShadowTreeWalker
        node flag. Each DOM node is now markd as NeedsShadowTreeWalker if
        it requires non-trivial traversal in NRT which uses CSTW. This
        means that each node can go fast path unless it is marked with this flag.

        A node is marked as it NeedsShadowTreeWalker if:

        - The node is a shadow boundary like InsertionPoint or ShadowRoot,
        - The node has pseudo elements like generated content or
        - The node is a pseudo element.

        This criteria is defined in Node::needsShadowTreeWalkerSlow(). The node actually needs
        the walker if the node or its parent is marked with this flag.

        The original idea of this change was demonstrated by Antti Koivisto on bug 103208 and bug 104507.
        This chagne has 2-3% speedup on Dromaeo/dom-modify/innerHTML on Apple Mac.

        No new tests. Covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ComposedShadowTreeWalker.cpp:
        * dom/ComposedShadowTreeWalker.h:
        (ComposedShadowTreeWalker): Move some part to NodeRenderingTraversal
        * dom/ContainerNode.h:
        (WebCore::Node::needsShadowTreeWalker): Added. This is located here since it refers ContainerNode definition.
        (WebCore):
        * dom/DOMAllInOne.cpp:
        * dom/Element.cpp:
        (WebCore::Element::updatePseudoElement): Refactored.
        (WebCore::Element::hasPseudoElements): Ditto.
        (WebCore::Element::pseudoElement): Ditto.
        (WebCore::Element::setPseudoElement): Refactored and added a flag update logic.
        (WebCore):
        * dom/Element.h:
        (Element):
        (WebCore::Element::beforePseudoElement): Refactored.
        (WebCore::Element::afterPseudoElement): Refactored.
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::hasPseudoElements): Factored out.
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::addShadowRoot): Added a flag update logic.
        * dom/Node.cpp:
        (WebCore::Node::needsShadowTreeWalkerSlow): Added.
        * dom/Node.h:
        (WebCore::Node::isInsertionPointNode): Added.
        (Node):
        (WebCore::Node::isInsertionPoint): Changed to use NeedsShadowTreeWalkerFlag.
        (WebCore::Node::setNeedsShadowTreeWalker):
        (WebCore::Node::resetNeedsShadowTreeWalker):
        * dom/NodeRenderingContext.cpp: Adopted NodeRenderingTraversal.
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):
        (WebCore::NodeRenderingContext::parentRenderer):
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        * dom/NodeRenderingContext.h: Ditto.
        (NodeRenderingContext):
        (WebCore::NodeRenderingContext::parentNodeForRenderingAndStyle):
        * dom/NodeRenderingTraversal.cpp: Added.
        (WebCore):
        (NodeRenderingTraversal):
        (WebCore::NodeRenderingTraversal::ParentDetails::didTraverseInsertionPoint): Moved from ComposedShadowTreeWalker
        (WebCore::NodeRenderingTraversal::ParentDetails::didTraverseShadowRoot): Ditto.
        (WebCore::NodeRenderingTraversal::parentSlow): Ditto.
        (WebCore::NodeRenderingTraversal::nextSiblingSlow): Ditto. The original was pseudoAwareNextSibling.
        (WebCore::NodeRenderingTraversal::previousSiblingSlow): Ditto. The original was pseudoAwarePreviousSibling.
        * dom/NodeRenderingTraversal.h: Added.
        (WebCore):
        (NodeRenderingTraversal):
        (ParentDetails): Moved from ComposedShadowTreeWalker.
        (WebCore::NodeRenderingTraversal::ParentDetails::ParentDetails):
        (WebCore::NodeRenderingTraversal::ParentDetails::insertionPoint):
        (WebCore::NodeRenderingTraversal::ParentDetails::resetStyleInheritance):
        (WebCore::NodeRenderingTraversal::ParentDetails::outOfComposition):
        (WebCore::NodeRenderingTraversal::ParentDetails::childWasOutOfComposition):
        (WebCore::NodeRenderingTraversal::ParentDetails::operator==):
        (WebCore::NodeRenderingTraversal::parent):
        (WebCore::NodeRenderingTraversal::nextSibling):
        (WebCore::NodeRenderingTraversal::previousSibling):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::PseudoElement): Added an assertion.
        * dom/Text.cpp:
        * html/HTMLOptGroupElement.cpp: Added a #include which revealed by a chagne on NodeRenderingContext.h
        * html/HTMLOptionElement.cpp: Ditto.
        * html/HTMLProgressElement.cpp: Dito.
        * html/shadow/InsertionPoint.h: Added an override of isInsertionPointNode().

2012-12-13  Kent Tamura  <tkent@chromium.org>

        Refactoring: Fix indentation of ChromeClient.h
        https://bugs.webkit.org/show_bug.cgi?id=104989

        Reviewed by Kentaro Hara.

        The contents of an outermost namespace block should not be indented.
        http://www.webkit.org/coding/coding-style.html#indentation-namespace

        No behavior change.

        * page/ChromeClient.h:

2012-12-13  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Seconds/Minutes field of date/time input UI should respect step attribute
        https://bugs.webkit.org/show_bug.cgi?id=104985

        Reviewed by Kent Tamura.

        This patch makes step-up/-down UI of the seconds and minutes fields respect
        step attribute when possible.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html

        * html/shadow/DateTimeEditElement.cpp:
        (DateTimeEditBuilder):
        (WebCore::DateTimeEditBuilder::visitField): Compute step parameters for seconds and minutes fields, and pass it to the field element constructors.
        (WebCore::DateTimeEditBuilder::createNumericFieldParameters): Added.
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeMillisecondFieldElement::DateTimeMillisecondFieldElement): Use Parameters instead of step and stepBase.
        (WebCore::DateTimeMillisecondFieldElement::create): Ditto.
        (WebCore::DateTimeMinuteFieldElement::DateTimeMinuteFieldElement): Add Parameters argument.
        (WebCore::DateTimeMinuteFieldElement::create): Ditto.
        (WebCore::DateTimeSecondFieldElement::DateTimeSecondFieldElement): Ditto.
        (WebCore::DateTimeSecondFieldElement::create): Ditto.
        * html/shadow/DateTimeFieldElements.h:
        (DateTimeMillisecondFieldElement): Use Parameters instead of step and stepBase.
        (DateTimeMinuteFieldElement): Add Parameters argument.
        (DateTimeSecondFieldElement): Ditto.
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::DateTimeNumericFieldElement): Use Parameters instead of step and stepBase.
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement):
        (WebCore::DateTimeNumericFieldElement::Parameters::Parameters):
        (Parameters): Added.

2012-12-13  Filip Pizlo  <fpizlo@apple.com>

        Attempt to rationalize and simplify WTF::binarySearch
        https://bugs.webkit.org/show_bug.cgi?id=104890

        Reviewed by Maciej Stachowiak.

        Switch to using the new binarySearch() API. No change in behavior, so no new tests.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::findInstanceTime):

2012-12-13  Takashi Sakamoto  <tasak@google.com>

        [Shadow DOM]: scoped styles are not applied in the cascade order.
        https://bugs.webkit.org/show_bug.cgi?id=103239

        Reviewed by Dimitri Glazkov.

        If the scoping elements of two declarations have an ancestor/
        descendant relationship, the declaration whose scoping element is
        the descendant should win.
        c.f. http://dev.w3.org/csswg/css3-cascade/#cascade

        Test: fast/css/style-scoped/style-scoped-nested.html
              fast/css/style-scoped/style-scoped-with-important-rule.html

        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule):
        Removed specificity for @host @-rules. Now @host @-rules use the
        cascading order instead.
        * css/RuleSet.h:
        Removed increaseSpecificity. The method is used by only @host @-rules.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::matchHostRules):
        (WebCore::StyleResolver::matchAuthorRules):
        Modified to invoke sortAndTransferMatchedRules per scoping element.
        The order of "matchXXXRules" must be the same as the cascading order.
        So matchHostRules was invoked after collecting all scoped author rules.
        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::addHostRule):
        Removed RuleIsHostRule. We don't need the flag.
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::registerWithScopingNode):
        Needs to pass the last test case of style-scoped-nested.html.
        When appending some style element to a shadow root, we should recalc
        styles of all elements in the shadow dom tree. And if the style
        element has @host @-rules, we have to update the host's style.

2012-12-13  Filip Pizlo  <fpizlo@apple.com>

        MediaPlayerPrivateAVFoundation::m_inbandTrackConfigurationPending is unused except when HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT)
        https://bugs.webkit.org/show_bug.cgi?id=104987

        Rubber stamped by Michael Saboff.

        No change in behavior so no new tests.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (MediaPlayerPrivateAVFoundation):

2012-12-13  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        (JSTestCustomNamedGetter):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (JSTestEventTarget):

2012-12-13  Yoshifumi Inoue  <yosin@chromium.org>

        Unreviewed, rolling out r137691.
        http://trac.webkit.org/changeset/137691
        https://bugs.webkit.org/show_bug.cgi?id=104764

        panscroll test on AppleWin failed

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/AutoscrollController.cpp: Removed.
        * page/AutoscrollController.h: Removed.
        * page/EventHandler.cpp:
        (WebCore):
        (WebCore::EventHandler::EventHandler):
        (WebCore::canAutoscroll):
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleAutoscroll):
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::startPanScrolling):
        (WebCore::EventHandler::updatePanScrollState):
        (WebCore::EventHandler::autoscrollRenderer):
        (WebCore::EventHandler::updateAutoscrollRenderer):
        (WebCore::EventHandler::setAutoscrollRenderer):
        (WebCore::EventHandler::startAutoscrollTimer):
        (WebCore::EventHandler::stopAutoscrollTimer):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::keyEvent):
        * page/EventHandler.h:
        (EventHandler):
        (WebCore::EventHandler::autoscrollInProgress):
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        (RenderBox):

2012-12-13  Kentaro Hara  <haraken@chromium.org>

        ChildNodesLazySnapshot::nextNode() can crash
        https://bugs.webkit.org/show_bug.cgi?id=104982

        Reviewed by Hajime Morita.

        ChildNodesLazySnapshot::nextNode() can crash for
        fast/dom/insertedIntoDocument-no-crash.html.
        The root cause is that ChildNodesLazySnapshot::m_currentNode
        was not a RefPtr. This patch changes it to a RefPtr.

        Test: fast/dom/insertedIntoDocument-no-crash.html

        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::nextNode):
        (WebCore::ChildNodesLazySnapshot::takeSnapshot):
        (ChildNodesLazySnapshot):

2012-12-13  Philip Rogers  <pdr@google.com>

        Clear m_timeContainer on SVGSMILElement removal.
        https://bugs.webkit.org/show_bug.cgi?id=104972

        Reviewed by Abhishek Arya.

        This patch fixes a regression introduced by r137509 where we did not clear
        m_timeContainer in SVGSMILElement::removedFrom.

        Test: svg/custom/removed-from-animation-crash.html

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::removedFrom):

2012-12-13  Filip Pizlo  <fpizlo@apple.com>

        Named lookups on HTML documents produce inconsistent results in JavaScriptCore bindings
        https://bugs.webkit.org/show_bug.cgi?id=104623

        Reviewed by Geoffrey Garen.

        All DOM objects that have named getters or directly override getOwnPropertySlot are now marked as
        HasImpureGetOwnPropertySlot.

        Tests: fast/js/prototype-chain-caching-with-impure-get-own-property-slot-traps
               fast/js/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2012-12-13  Xianzhu Wang  <wangxianzhu@chromium.org>

        Out-of-view check of fixed position element in frame is incorrect when page is scaled
        https://bugs.webkit.org/show_bug.cgi?id=104943

        Reviewed by Simon Fraser.

        Use frameScaleFactor instead of pageScaleFactor to scale the layer bounds.

        Tests: compositing/layer-creation/fixed-position-out-of-view-scaled-iframe-scroll.html
               compositing/layer-creation/fixed-position-out-of-view-scaled-iframe.html

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

2012-12-13  Bear Travis  <betravis@adobe.com>

        Positioned replaced elements should resolve vertical margins against their containing
        block's logical width
        https://bugs.webkit.org/show_bug.cgi?id=103579

        Reviewed by Emil A Eklund.

        According to the CSS box model & writing modes specifications, percentage margin
        & padding values, including top & bottom, should be resolved based on the
        containing block's logical width (logical with respect to the containing block's
        writing mode).
        http://www.w3.org/TR/CSS2/box.html#margin-properties
        http://dev.w3.org/csswg/css3-writing-modes/#dimension-mapping

        Previously, a positioned replaced element resolved margin before/after relative to
        its inline direction (containerLogicalHeight), and margin start/end relative to
        its block direction (containerLogicalWidth). This patch measures the container's
        logical width in its own inline direction (containerRelativeLogicalWidth) to
        resolve all margin percentage values.

        Test: fast/writing-mode/percentage-margins-absolute-replaced.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced): Calculate the logical
        width of the container, and use it to calculate margins.
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced): Ditto.

2012-12-13  Yoshifumi Inoue  <yosin@chromium.org>

        Handling autoscroll in EventHandler should be re-factor
        https://bugs.webkit.org/show_bug.cgi?id=104764

        Reviewed by Hajime Morita.

        This patch introduces new class AutoscrollController for moving autoscroll
        and panscroll from EventHandler class for ease of maintenance of
        EventHandler and ease of adding autoscroll related features, e.g. autoscroll
        during drag-and-drop, autoscoll by gesture.

        No new tests. This patch doesn't change behavior.

        * CMakeLists.txt: Changed to add page/AutoscrollController.cpp
        * GNUmakefile.list.am:  Changed to add page/AutoscrollController.{cpp,h}
        * Target.pri:  Changed to add page/AutoscrollController.cpp
        * WebCore.gypi: Changed to add page/AutoscrollController.{cpp,h}
        * WebCore.vcproj/WebCore.vcproj: Changed to add page/AutoscrollController.{cpp,h}
        * WebCore.xcodeproj/project.pbxproj: Changed to add page/AutoscrollController.{cpp,h}
        * page/AutoscrollController.cpp: Added.
        (WebCore::getMainFrame): Helper function.
        (WebCore::AutoscrollController::AutoscrollController): Moved from EventHandler.
        (WebCore::AutoscrollController::autoscrollRenderer): Moved from EventHandler.
        (WebCore::AutoscrollController::autoscrollInProgress): Moved from EventHandler.
        (WebCore::AutoscrollController::startAutoscrollForSelection): Replacement of EventHandler::handleAutoscroll().
        (WebCore::AutoscrollController::stopAutoscrollTimer): Moveed from EventHandler.
        (WebCore::AutoscrollController::updateAutoscrollRenderer): ditto
        (WebCore::AutoscrollController::didPanScrollStart): Added for updating pan scrolling status of main frame.
        (WebCore::AutoscrollController::didPanScrollStop): ditto
        (WebCore::AutoscrollController::handleMouseReleaseEvent): Extracted from EventHandler.
        (WebCore::AutoscrollController::panScrollInProgress): Replacement of EventHandler::m_panScrollInProgress.
        (WebCore::AutoscrollController::startPanScrolling): Moved from EventHandler::startPanScrolling()
        (WebCore::AutoscrollController::autoscrollTimerFired): Moved from EventHandler::autoscrollTimerFired().
        (WebCore::AutoscrollController::startAutoscrollTimer): Moved from EventHandler::startAutoscrollTimer().
        (WebCore::AutoscrollController::updatePanScrollState): Moved from EventHandler::updatePanScrollState().
        * page/AutoscrollController.h: Added.
        (AutoscrollController):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Changed autoscroll and panscroll related member variable initializations to m_autoscrollController initialization.
        (WebCore::EventHandler::handleMouseDraggedEvent): Changed to call AutoscrollController::startAutoscrollForSelection().
        (WebCore::EventHandler::handleMouseReleaseEvent): Changed to remove m_autoscrollInProgress reference.
        (WebCore::EventHandler::didPanScrollStart): Added for updating pan scrolling status of main frame.
        (WebCore::EventHandler::didPanScrollStop): ditto
        (WebCore::EventHandler::startPanScrolling): Changed to call AutoscrollController::startPanScrolling().
        (WebCore::EventHandler::autoscrollRenderer): Changed to use AutoscrollController.
        (WebCore::EventHandler::updateAutoscrollRenderer): ditto
        (WebCore::EventHandler::autoscrollInProgress): ditto
        (WebCore::EventHandler::panScrollInProgress): Added to replace m_panScrollInProgress.
        (WebCore::EventHandler::stopAutoscrollTimer): Changed to use AutoscrollController.
        (WebCore::EventHandler::selectCursor): Changed to use panScrollInProgress().
        (WebCore::EventHandler::handleMousePressEvent): Chagned to call AutoscrollController::handleMousePressEvent().
        (WebCore::EventHandler::keyEvent): Changed to use panScrollInProgress().
        * page/EventHandler.h:
        (WebCore::EventHandler::autoscrollController): Added for using main frame's panScrollInProgress().
        (WebCore::EventHandler::mouseDownWasInSubframe): Added for AutoscrollController.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::canAutoscroll): Moved from EventHandler.cpp.
        (WebCore::RenderBox::findAutoscrollable): Moved from EventHandler.cpp.
        * rendering/RenderBox.h:
        (RenderBox): Added new functions canAutoscroll() and findAutoscrollable().

2012-12-13  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=102599
        ASSERT loading Acid3 test in run-safari --debug (r135050)

        Reviewed by Simon Fraser.

        New flag IncludeCompositedDescendants will always calculate the layer bounds for 
        descendants, even when the are composited. 
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateLayerBounds):
        * rendering/RenderLayer.h:

        calculateCompositedBounds() should not include this new flag, so instead of 
        calling that, call calculateLayerBounds() directly with the 
        IncludeCompositedDescendants flag. This will get us the information we need 
        upfront and avoid the toggling later on. 
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):

2012-12-13  Tien-Ren Chen  <trchen@chromium.org>

        Don't consider container nodes of other disambiguated nodes
        https://bugs.webkit.org/show_bug.cgi?id=104619

        Reviewed by Eric Seidel.

        It is not uncommon to have a clickable <div> that contains other clickable objects.
        This heuristic avoids excessive disambiguation in that case.

        New unit test: WebFrameTest.DisambiguationPopupNoContainer

        * page/TouchDisambiguation.cpp:
        (WebCore::findGoodTouchTargets):

2012-12-13  Adrienne Walker  <enne@chromium.org>

        Unreviewed, rolling out r137645, r137646, and r137667.
        http://trac.webkit.org/changeset/137645
        http://trac.webkit.org/changeset/137646
        http://trac.webkit.org/changeset/137667
        https://bugs.webkit.org/show_bug.cgi?id=104911

        Breaks some overflow layout tests

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::usesCompositedScrolling):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        (WebCore::RenderLayer::updateLayerListsIfNeeded):
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::shouldBeSelfPaintingLayer):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):
        * testing/InternalSettings.cpp:
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-12-13  Andreas Kling  <akling@apple.com>

        Event dispatch: Avoid heap allocations in ensureEventAncestors() typical case.
        <http://webkit.org/b/104938>

        Reviewed by Anders Carlsson.

        Give the EventTarget and EventContext vectors an inline capacity of 32 (no science here, just a
        non-zero number.) As these vectors are created on the stack already, this is merely using a bit
        more stack space to avoid malloc()ing all the gosh-darn time.

        Looks like ~6% improvement on Dromaeo/jslib-event-prototype.

        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedTargetAdjuster::adjust):
        (WebCore::EventRelatedTargetAdjuster::findRelatedTarget):
        (WebCore::EventDispatcher::ensureEventAncestors):
        * dom/EventDispatcher.h:
        (EventRelatedTargetAdjuster):
        (EventDispatcher):

2012-12-13  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] Don't report resources with data: urls
        https://bugs.webkit.org/show_bug.cgi?id=104868

        Reviewed by Tony Gentilcore.

        Test: http/tests/w3c/webperf/submission/resource-timing/html/test_resource_ignore_data_url.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone):

2012-12-13  Ian Vollick  <vollick@chromium.org>

        Add a missing nullity check in RenderObject::containingBlock
        https://bugs.webkit.org/show_bug.cgi?id=104961

        Reviewed by Adrienne Walker.

        Adds a missing nullity check in an assert.

        No new tests, no change in functionality.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):

2012-12-13  Tab Atkins  <tabatkins@google.com>

        Switch the gradient drawing code to use bearing angles
        https://bugs.webkit.org/show_bug.cgi?id=104616

        Reviewed by Dean Jackson.

        Switch the gradient math from polar-coordinate angles to bearing angles.
        To make this possible without behavior changes, 
        switch the m_deprecatedType boolean to an m_gradientType enum,
        and fix all usages accordingly.

        No new tests, as this is a refactoring and should have no behavior changes. Existing tests suffice.

        * css/CSSGradientValue.cpp:
        (WebCore::endPointsFromAngle):
        This is the only mechanical change. The rest are just fixing the plumbing around the boolean->enum change.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::sortStopsIfNeeded):
        (WebCore::CSSGradientValue::addStops):
        (WebCore::CSSLinearGradientValue::customCssText):
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::customCssText):
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::gradientType):
        (WebCore::CSSGradientValue::CSSGradientValue):
        (WebCore::CSSLinearGradientValue::create):
        (WebCore::CSSLinearGradientValue::CSSLinearGradientValue):
        (WebCore::CSSRadialGradientValue::create):
        (WebCore::CSSRadialGradientValue::CSSRadialGradientValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseDeprecatedGradient):
        (WebCore::CSSParser::parseDeprecatedLinearGradient):
        (WebCore::CSSParser::parseDeprecatedRadialGradient):

2012-12-13  Ian Vollick  <vollick@chromium.org>

        [chromium] Automatically use composited scrolling
        https://bugs.webkit.org/show_bug.cgi?id=94743

        Reviewed by Adrienne Walker.

        We currently use the composited scrolling facilities provided by
        wkb.ug/91117 if the overflow scroll block element is styled with
        -webkit-overflow-scrolling: touch. Ideally, we could automatically
        opt into composited scrolling if it is safe to do so. This can affect
        antialiasing, so it is important that automatically opting in is only
        enabled via a setting.

        The way I determine if it is safe is by checking that z-ordering will
        not be affected if the overflow scrollable element were promoted to a
        stacking context (details below), and that clipping our scrolling
        descendants will not affect rendering.

        To check the first condition (that z-ordering will not be affected).
        I ensure that the candidate element and all its descendants appear as a 
        continuous block in the candidate's stacking context. That is, if no 
        other elements are 'between' any of the candidates descendants when we
        sort in paint order, then we're safe. This is overly conservative,
        however. We could, in future, only consider stacking problems between
        elements that actually overlap.

        To ensure that clipping will not cause a rendering change, I ensure
        that the layer has no out of flow positioned descendant whose
        containing block is not also a descendant of ours.

        Test: compositing/overflow/automatically-opt-into-compositing-scrolling.html

        (WebCore):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::acceleratedCompositingForOverflowScrollEnabled):
        (WebCore):
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder):
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrderRecursive):
        (WebCore::RenderLayer::positionOverflowControlsAfterPromotionToCompositedScrolling):
        (WebCore::RenderLayer::canSafelyEstablishAStackingContext):
          Returns true if the RenderLayer could become a stacking context without
          affecting the stacking order.
        (WebCore::RenderLayer::updateDescendantDependentFlags):
          We now need to keep track of out of flow positioned descendants.
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::usesCompositedScrolling):
          Has been updated to return true if it can safely establish a stacking
          context, and the setting is turned on.
        (WebCore::RenderLayer::needsCompositedScrolling):
          This function returns true if we would like to use composited
          scrolling.
        (WebCore::RenderLayer::updateNeedsCompositedScrolling):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
          Since these could affect opting into composited scrolling, we must
          request that the RenderLayerCompositor reevaluate compositing.
        (WebCore::RenderLayer::updateLayerListsIfNeeded):
          We call updateCanSafelyEstablishStackingContext here, if necessary.
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::shouldBeSelfPaintingLayer):
          usesCompositedScrolling -> needsCompositedScrolling
        (WebCore::RenderLayer::setAncestorChainHasOutOfFlowPositionedDescendant):
        (WebCore::RenderLayer::dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus):
        (WebCore::RenderLayer::updateOutOfFlowPositioned):
          Dirties and sets the out of flow positioned descendant state.
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        (RenderLayer):
        (WebCore::RenderLayer::hasOutOfFlowPositionedDescendant):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::hasUnpositionedOverflowControlsLayers):
        (WebCore):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
          We now ensure that newly created overflow scroll controls get
          positioned.
        (WebCore::RenderLayerCompositor::requiresCompositingForOverflowScrolling):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::setShouldReevaluateCompositingAfterLayout):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setEnableCompositingForOverflowScroll):
          Allows enabling the setting in layout tests.
        (WebCore):
        * testing/InternalSettings.h:
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-12-13  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r137406): NodeTraversal changes causing large renderer crash
        https://bugs.webkit.org/show_bug.cgi?id=104937

        Reviewed by Antti Koivisto.

        Add a null pointer check to exit early since ElementTraversal::next assumes a non-null pointer.

        No new tests since I don't think this function is ever exposed to any ES5 bindings.

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

2012-12-13  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Improve error messages
        https://bugs.webkit.org/show_bug.cgi?id=104624

        Reviewed by Tony Chang.

        Add detail to error messages so that they are more helpful and can be
        traced back to a specific line of code.

        Updated test: transaction-error.html

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::openConnectionWithVersion):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        (WebCore::IDBDatabaseBackendImpl::close):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::getDatabaseNames):
        (WebCore::IDBFactoryBackendImpl::deleteDatabase):
        (WebCore::IDBFactoryBackendImpl::open):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexOperation::perform):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):

2012-12-13  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Safeguard against possible NULL-dereference
        https://bugs.webkit.org/show_bug.cgi?id=104931

        Reviewed by Chris Fleizach.

        This was spotted by Coverity. See bug 104114.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetIndexInParent): If parent is NULL
        bail out early.

2012-12-13  David Barton  <dbarton@mathscribe.com>

        Heap-use-after-free in WebCore::RenderBlock::finishDelayUpdateScrollInfo
        https://bugs.webkit.org/show_bug.cgi?id=103750

        Reviewed by Tony Chang.

        MathML sometimes creates and destroys renderers for descendants during layout (or even to calculate
        preferred logical widths), e.g. for operator stretching. RenderBlock::finishDelayUpdateScrollInfo
        must therefore leave gDelayedUpdateScrollInfoSet intact as it iterates over it, so
        RenderBlock::willBeDestroyed can call gDelayedUpdateScrollInfoSet->remove(this) effectively if needed.
        This also prevents duplicate entries from being added to gDelayedUpdateScrollInfoSet.

        Test: mathml/mo-stretch-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::startDelayUpdateScrollInfo):
            - Allow gDelayedUpdateScrollInfoSet to be non-null when gDelayUpdateScrollInfo is 0 during
              RenderBlock::finishDelayUpdateScrollInfo.
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo):
            - Remove blocks from gDelayedUpdateScrollInfoSet one at a time, waiting for each block until it is
              about to be updated.

2012-12-13  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12838354> Per-Tab WebProcess: DOM cookie access functions should respect private browsing
        https://bugs.webkit.org/show_bug.cgi?id=104691

        Reviewed by Sam Weinig.

        * platform/network/NetworkingContext.h: Added a function that returns current
        context type. Ideally, we would track contexts across processes in a generic manner,
        but we only have two now, and don't need such complications.

2012-12-13  Alexey Proskuryakov  <ap@apple.com>

        ResourceLoader::didReceiveAuthenticationChallenge uses a wrong client
        https://bugs.webkit.org/show_bug.cgi?id=104935
        <rdar://problem/12870361>

        Reviewed by Anders Carlsson.

        * loader/ResourceLoader.cpp: (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        The handle is null when NetworkProcess is used. In any case, it should be correct
        to use the client carried within AuthenticationChallenge.

2012-12-13  Stephen White  <senorblanco@chromium.org>

        CanvasRenderingContext2D::setFont() is slow.
        https://bugs.webkit.org/show_bug.cgi?id=104923

        Reviewed by James Robinson.

        This spends most of its time in the CSS parser.  As a first step,
        early-out if the new value is the same as unparsed string for the current font.
        See also http://code.google.com/p/chromium/issues/detail?id=164016.

        Covered by existing tests in canvas/ and fast/canvas, and ManualTests/canvas-font-speed.html.

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

2012-12-13  Parth Patel  <parpatel@rim.com>, Max Feil <mfeil@rim.com>

        Allow plugins to be disabled by shared library filename
        https://bugs.webkit.org/show_bug.cgi?id=101274

        Reviewed by Antonio Gomes.

        This fix makes PluginDatabase changes general so that other ports
        can use this mechanism if they wish.

        Layout test not included with this patch because there
        is currently no framework within LayoutTests to allow calls
        from an external application via platform API code (such as the
        WebView API).

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::fileExistsAndIsNotDisabled):
        (WebCore):
        (WebCore::PluginDatabase::getDeletedPlugins):
        (WebCore::PluginDatabase::removeDisabledPluginFile):
        (WebCore::PluginDatabase::addDisabledPluginFile):
        (WebCore::PluginDatabase::getPluginPathsInDirectories):
        * plugins/PluginDatabase.h:
        (PluginDatabase):

2012-12-13  Yongjun Zhang  <yongjun_zhang@apple.com>

        Document will never be released when an Image is created inside unload event listener
        https://bugs.webkit.org/show_bug.cgi?id=104830

        Reviewed by Darin Adler.

        When setting src attribute to an Image object inside unload event listener, ImageLoader will
        mark it as load failure (by setting m_hasPendingErrorEvent to true) and the following call
        to updatedHasPendingEvent will ref the element but won't be deref-ed since the Document is
        being dismissed.  This was introduced in r131670.  To match pre r131670 behavior, we shouldn't
        trigger error event for image loading when the page is being dismissed.

        No new tests, there is no visual change.  Manually tested to verify documents are released by
        using heap in Mac OS X.

        * loader/ImageLoader.cpp:
        (WebCore::pageIsBeingDismissed): add a helper function to test whether the page is being dismissed.
        (WebCore::ImageLoader::updateFromElement): don't trigger error event if the page is being dismissed.

2012-12-13  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Add missing breaks in switch-case statements
        https://bugs.webkit.org/show_bug.cgi?id=104929

        Reviewed by Martin Robinson.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::clearData): Add missing breaks.

2012-12-13  Nate Chapin  <japhet@chromium.org>

        Route main resource loads through the memory cache.
        https://bugs.webkit.org/show_bug.cgi?id=49246

        Reviewed by Alexey Proskuryakov.

        Note that this patch doesn't actually enable caching of main resources. That will be done in a later patch.
        The MainResourceLoader actually has an underlying SubresourceLoader (with the cache layer between them).
        In several places, the MainResourceLoader's SubresourceLoader is treated as special.

        No new tests, as this is primarily a refactor. A couple of expected results changed slightly.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::subresource):
        (WebCore::DocumentLoader::addSubresourceLoader): Because the SubresourceLoader underlying the main resource
            needs special handling in certain cases, track it separately from the real SubresourceLoaders.
        (WebCore::DocumentLoader::removeSubresourceLoader):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::cancel):
        (WebCore::MainResourceLoader::clearResource):
        (WebCore):
        (WebCore::MainResourceLoader::frameLoader):
        (WebCore::MainResourceLoader::request):
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::resourceData):
        (WebCore::MainResourceLoader::redirectReceived):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::responseReceived):
        (WebCore::MainResourceLoader::dataReceived):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::notifyFinished):
        (WebCore::MainResourceLoader::reportMemoryUsage):
        (WebCore::MainResourceLoader::handleSubstituteDataLoadNow):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::setDefersLoading):
        (WebCore::MainResourceLoader::defersLoading):
        (WebCore::MainResourceLoader::setShouldBufferData):
        (WebCore::MainResourceLoader::loader):
        (WebCore::MainResourceLoader::identifier):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):
        (WebCore::MainResourceLoader::documentLoader):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::defersLoading):
        (WebCore::ResourceLoader::cancelled):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainResponse):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainError):
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule):
        (WebCore::DocumentLoader::unschedule):

2012-12-13  Pratik Solanki  <psolanki@apple.com>

        Duplicate code in GraphicsContext3D::validateAttributes() and GraphicsContext3D::validateDepthStencil()
        https://bugs.webkit.org/show_bug.cgi?id=97275

        Reviewed by Dean Jackson.

        Remove duplicate code in validateAttributes(). validateAttributes() calls
        validateDepthStencil() which has the exact same code.

        No new tests because no change in functionality.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::validateAttributes):

2012-12-13  Nate Chapin  <japhet@chromium.org>

        CachedResources should hang on to stripped fragment identifiers
        https://bugs.webkit.org/show_bug.cgi?id=104721

        Reviewed by Maciej Stachowiak.

        No new tests, this will be unused until bug
        https://bugs.webkit.org/show_bug.cgi?id=49246 re-lands. Then, it will
        allow http/tests/inspector/resource-parameters.html to continue passing.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (CachedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource): We override the request's url with the
            local variable "url" here. The only difference between url and request.url() is that url
            has had any fragment identifier removed. Do this work later (in the CachedResource constructor)
            so that the CachedResource can save the fragment for later.

2012-12-13  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Remove deprecated API usage
        https://bugs.webkit.org/show_bug.cgi?id=104894

        Reviewed by Martin Robinson.

        Remove deprecated GTK+ API usage.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::spinButtonArrowSize): Do not use deprecated
        gtk_style_context_get_font().

2012-12-13  Zeno Albisser  <zeno@webkit.org>

        [Qt] Remove temporary workaround from GraphicsSurfaceGLX constructor.
        https://bugs.webkit.org/show_bug.cgi?id=104904

        QXcbNativeInterface::nativeResourceForContext() is now
        available in Qt5. Therefore the temporary workaround
        in GraphicsSurfaceGLX can be removed.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):

2012-12-13  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] Expose ARIA roles for tab, tabpanel and tablist
        https://bugs.webkit.org/show_bug.cgi?id=84043

        Reviewed by Martin Robinson.

        Mapped the ARIA roles to their corresponding ATK roles.

        No new tests; instead unskipped the associated test.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Mapped the ARIA roles to their corresponding ATK roles

2012-12-13  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: "Add Attribute" context menu on closing tag should apply on the opening tag on Elements Panel
        https://bugs.webkit.org/show_bug.cgi?id=104902

        Reviewed by Alexander Pavlov.

        The context menu action on the closing tag scrolls to the opening tag for adding the attribute.

        No new tests as this is a UI change.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute):

2012-12-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137512.
        http://trac.webkit.org/changeset/137512
        https://bugs.webkit.org/show_bug.cgi?id=104912

        The entire GTK+ layout test step has been failing for hours
        (Requested by mrobinson on #webkit).

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::textUnderElement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):

2012-12-13  Tamas Czene  <tczene@inf.u-szeged.hu>

        OpenCL version of FEColorMatrix.
        https://bugs.webkit.org/show_bug.cgi?id=103398

        Reviewed by Zoltan Herczeg.

        ~3x speed-up (depending on hardware configuration)

        * Target.pri: Added a new file to the build system.
        * platform/graphics/filters/FEColorMatrix.cpp: calculateSaturateComponents and calculateHueRotateComponents methodes are moved to the header, since they are used by OpenCL as well
        (WebCore::effectType):
        * platform/graphics/filters/FEColorMatrix.h:
        (FEColorMatrix):
        (WebCore::FEColorMatrix::calculateSaturateComponents):
        (WebCore):
        (WebCore::FEColorMatrix::calculateHueRotateComponents):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.h: Required fields for the ColorMatrix kernels were added
        (WebCore::FilterContextOpenCL::FilterContextOpenCL):
        (FilterContextOpenCL):
        * platform/graphics/gpu/opencl/OpenCLFEColorMatrix.cpp: the core implementation goes here
        (WebCore):
        (WebCore::FilterContextOpenCL::compileFEColorMatrix):
        (WebCore::FilterContextOpenCL::applyFEColorMatrix):
        (WebCore::FEColorMatrix::platformApplyOpenCL):

2012-12-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: do not validate pointers to objects in RenderArena agains tcmalloc data.
        https://bugs.webkit.org/show_bug.cgi?id=104903

        Reviewed by Yury Semikhatsky.

        This is a simplest approach to do that with zero performance overhead.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::reportMemoryUsage):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::reportMemoryUsage):
        (WebCore):
        * rendering/InlineBox.h:
        (InlineBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::reportMemoryUsage):
        (WebCore):
        * rendering/InlineTextBox.h:
        (InlineTextBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::reportMemoryUsage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::reportMemoryUsage):

2012-12-13  Alberto Garcia  <agarcia@igalia.com>

        [GTK] Don't leak GStaticRecMutex
        https://bugs.webkit.org/show_bug.cgi?id=104901

        Reviewed by Martin Robinson.

        The mutex in WebKitWebAudioSourceGStreamer is allocated using
        g_new(), but that memory is not freed when the object is
        destroyed.

        This patch replaces that pointer with the structure itself, which
        is faster and doesn't need to be explicitly freed.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (_WebKitWebAudioSourcePrivate):
        (webkit_web_audio_src_init):
        (webKitWebAudioSrcFinalize):

2012-12-13  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Network: Sorting cookies by size is broken.
        https://bugs.webkit.org/show_bug.cgi?id=104893

        Reviewed by Alexander Pavlov.

        Problem: cookie "size" is not a field now; its value is accessible
        through getter method.

        Solution: make cookie fields uniformly accessible (add getters for name,
        type and value).

        * inspector/front-end/CookieItemsView.js: Adopt changes.
        * inspector/front-end/CookieParser.js:
        (WebInspector.Cookie): Refine JsDoc.
        (WebInspector.Cookie.prototype.name): Added getter.
        (WebInspector.Cookie.prototype.value): Ditto.
        (WebInspector.Cookie.prototype.type): Ditto.
        (WebInspector.Cookies.buildCookiesFromString): Adopt changes.
        (WebInspector.Cookies.buildCookieProtocolObject): Ditto.
        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable): Remove unused parameter.
        (WebInspector.CookiesTable.prototype._sortCookies):
        Use getters instead of field names.
        (WebInspector.CookiesTable.prototype._createGridNode): Adopt changes.
        * inspector/front-end/HAREntry.js: Ditto.
        * inspector/front-end/RequestCookiesView.js: Ditto.

2012-12-13  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r137569.
        http://trac.webkit.org/changeset/137569
        https://bugs.webkit.org/show_bug.cgi?id=104876

        A bunch of CSS tests hit ASSERTs

        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty):

2012-12-13  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Remove redundant pipe write to prevent pipe buffer full.
        https://bugs.webkit.org/show_bug.cgi?id=101135

        Reviewed by Gyuyoung Kim.

        To prevent a source of a deadlock, remove the redundant pipe write
        in wakeUp() function.

        EFL uses ecore_pipe_write() to wake up main run loop, and the function
        uses POSIX pipe write with O_NONBLOCK disabled.
        With O_NONBLOCK disabled, when written data is more than PIPE_BUF,
        pipe write will be blocked until it can be written.

        Currently, every wakeUp() function calls ecore_pipe_write() to invoke
        wakeUpEvent() callback. And this can make pipe buffer full status
        which is the one reason of the lockup problem described in Bug 99494.

        * platform/RunLoop.h:
        (RunLoop):
        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::wakeUpEvent):
        (WebCore::RunLoop::wakeUp):

2012-12-13  Antti Harju  <antti.harju@ixonos.com>

        [Qt] Fix deleteAllCookies() invalid SQL statement
        https://bugs.webkit.org/show_bug.cgi?id=101580

        Reviewed by Jocelyn Turcotte.

        * platform/network/qt/CookieJarQt.cpp:
        (WebCore::SharedCookieJarQt::deleteAllCookies):

2012-12-13  Ryosuke Niwa  <rniwa@webkit.org>

        Safari spends a lot of time in WebCore::findSimpleWordBoundary while selecting text on large scrabutility.com page
        https://bugs.webkit.org/show_bug.cgi?id=104884

        Reviewed by Hajime Morita.

        We don't need to do anything in AlternativeTextController if selection is already outside of the editable region.

        No new tests are added since this is only a performance improvement, and doesn't change any asymptotic behavior.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToChangedSelection):

2012-12-12  Jon Lee  <jonlee@apple.com>

        Crash in PlugInOriginHash with empty MIME type (104882)
        https://bugs.webkit.org/show_bug.cgi?id=104882
        <rdar://problem/12872298>

        Reviewed by Filip Pizlo.

        The crash occurs because the strings might be null. Add a check for it, but also try to infer a MIME type
        in case the markup does not include a type attribute, but we can find it from the extension in the URL.

        * platform/KURL.cpp: Add a new function mimeTypeFromURL() which tries to return the implied MIME type
        based on the URL provided. If nothing was found, return a null string.
        (WebCore::mimeTypeFromURL): Factored out from FrameLoader::defaultObjectContentType().
        * platform/KURL.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType): Refactor to use mimeTypeFromURL().
        * plugins/PlugInOriginHash.cpp:
        (WebCore::addCaseFoldedCharacters): Add a check for an empty string.
        (WebCore::PlugInOriginHash::hash): If the service type is empty, try to infer the MIME type.

2012-12-13  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r137486): Broke EFL build
        https://bugs.webkit.org/show_bug.cgi?id=104883

        Unreviewed EFL build fix.

        Fix EFL build break after r137486 due to missing WebCore::
        namespace.

        No new tests, no behavior change for layout tests.

        * platform/NotImplemented.h:

2012-12-07  Levi Weintraub  <leviw@chromium.org>

        Add support for tracking hit test rectangles to enable fast event rejection in the compositor
        https://bugs.webkit.org/show_bug.cgi?id=103914

        Reviewed by Simon Fraser.

        Adding support for tracking hit test target regions for the purpose of performing initial hit testing
        in the compositor to avoid blocking scrolling on the main thread while waiting to hit test events that
        aren't occuring in regions with handlers. This is initially being done to avoid having to go to the main
        thread when scrolling by flicking on touch devices when the flick occurs outside a tracked touch event
        region. This patch includes the implementation to turn this on in Chromium.

        To accomplish this goal, Document will now keep a counted hash set of nodes with touch event handlers
        instead of only an unsigned integer of the total count. ScrollingCoordinator then updates the compositor
        when new touch event handlers are registered or removed, or after layout much like how
        nonFastScrollableRegions are currently tracked.

        This implementation will not properly update the hit test rects when the renderers are inside a sub-
        tree that scrolls.

        Test: platform/chromium/fast/events/touch/compositor-touch-hit-rects.html

        * dom/Document.cpp:
        (WebCore::Document::Document): Added a HashCountedSet of touch target nodes. Note: DOMWindow targets
        are stored as the Document they point to.
        (WebCore::Document::didAddTouchEventHandler): Changed to keep track of the handler instead of a count, and
        to update the ScrollingCoordinator with the change.
        (WebCore::Document::didRemoveTouchEventHandler): Ditto.
        * dom/Document.h:
        (WebCore::Document::hasTouchEventHandlers): It's no longer O(1) to get the count of touch handlers, so
        expose whether there are any or not.
        (WebCore::Document::touchEventTargets):
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::updateType):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener): Add the Document to the touch target set instead of DOMWindow.
        (WebCore::DOMWindow::removeEventListener):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeAbsoluteTouchEventTargetRects): Walk the renderers for event handler
        nodes and generate the absolute hit testing rects.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setTouchEventTargetRectsChanged): Hook to pass along the hit test rects to
        the scrolling tree/compositor.
        (ScrollingCoordinator):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinatorChromium::setTouchEventTargetRectsChanged):
        (WebCore::ScrollingCoordinatorChromium::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinatorChromium::setTouchEventTargetRects):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.h:
        (ScrollingCoordinatorChromium):
        * testing/Internals.cpp:
        (WebCore::Internals::touchEventHandlerCount): Changed to do the work to calculate the actual count since
        it's no longer stored as an int in Document.
        (WebCore::Internals::touchEventTargetClientRects):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-12-12  Luke Macpherson   <macpherson@chromium.org>

        Add ASSERTions to ensure that CSSPropertys that are variables only ever refer to CSSValues that are variables.
        https://bugs.webkit.org/show_bug.cgi?id=104876

        Reviewed by Steve Block.

        Add assertions to CSSProperty constructors to make that if it is initialized with CSSPropertyVariable that
        the value type associated with it is also a variable. This is already asserted at read time, but ASSERTing
        here will produce a more useful backtrace.

        No new tests as functionality unchanged.

        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty):

2012-12-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        NetworkInfoController needs to support destructor
        https://bugs.webkit.org/show_bug.cgi?id=104642

        Reviewed by Kentaro Hara.

        Though NetworkInfoController can be referenced by each port in order to update network status change,
        there is no virtual interface to destroy it. Beside each port client also needs to be destroyed when
        controller is destroyed.

        * Modules/networkinfo/NetworkInfoClient.h:
        (NetworkInfoClient):
        * Modules/networkinfo/NetworkInfoConnection.h:
        (WebCore::NetworkInfoConnection::networkInfoControllerDestroyed):
        * Modules/networkinfo/NetworkInfoController.cpp:
        (WebCore::NetworkInfoController::~NetworkInfoController):

2012-12-12  Kent Tamura  <tkent@chromium.org>

        Validity of a radio button is not updated correctly when it is detached from an invalid radio group
        https://bugs.webkit.org/show_bug.cgi?id=104873

        Reviewed by Kentaro Hara.

        When a radio button is detached from an invalid radio group,
        A) we should update button's validity, and
        B) it should be valid.

        A is handled by the following code in RadioButtonGroup::remove.
            if (!wasValid) {
                // A radio button not in a group is always valid. We need to make it
                // valid only if the group was invalid.
                button->setNeedsValidityCheck();

        B was incomplete.
            bool RadioInputType::valueMissing(const String&) const
            {
                return element()->isInRequiredRadioButtonGroup() && !element()->checkedRadioButtonForGroup();
        isInRequiredRadioButtonGroup checked required state of a group with the
        name attribute value even if the radio button was already detached from
        the group. isInRequiredRadioButtonGroup should check membership of the
        radio button precisely.

        Tests: Update fast/forms/radio/radio-live-validation-style.html

        * dom/CheckedRadioButtons.cpp:
        (RadioButtonGroup): Declare contains.
        (WebCore::RadioButtonGroup::contains): Added.
        (WebCore::CheckedRadioButtons::isInRequiredGroup): Renamed from
        isRequiredGroup. This function takes HTMLInputElement* argument.
        * dom/CheckedRadioButtons.h:
        (CheckedRadioButtons): Rename isRequiredGroup to isInRequiredGroup.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isInRequiredRadioButtonGroup):
        Make this non-const becaues RadioButtonGroup::m_members needs non-const
        pointers. Use CheckedRadioButtons::isInRequiredGroup.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Make isInRequiredRadioButtonGroup non-const.

2012-12-12  Shinya Kawanaka  <shinyak@chromium.org>

        ContainerNodeAlgorithm::notifyInsertedIntoDocument is not used
        https://bugs.webkit.org/show_bug.cgi?id=104874

        Reviewed by Hajime Morita.

        ContainerNodeAlgorithm::notifyInsertedIntoDocument() is not used by anyone. We can remove it safely.

        No new tests, no change in behavior.

        * dom/ContainerNodeAlgorithms.h:

2012-12-12  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Milliseconds field of date/time input UI should respect step attribute
        https://bugs.webkit.org/show_bug.cgi?id=104628

        Reviewed by Kent Tamura.

        This patch makes step-up/-down UI of the milliseconds fields respect step attribute
        in a special case when the step is divisible by 1000 milliseconds.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html

        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField):
        If step of the element (in milliseconds) is divisible by 1000, use it as the step of the milliseconds field. Otherwise, the millisecond field has step 1.
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeMillisecondFieldElement::DateTimeMillisecondFieldElement): Add step and stepBase arguments.
        (WebCore::DateTimeMillisecondFieldElement::create): Ditto.
        * html/shadow/DateTimeFieldElements.h:
        (DateTimeMillisecondFieldElement): Ditto.
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::DateTimeNumericFieldElement): Ditto.
        (WebCore::DateTimeNumericFieldElement::stepDown): Changed to compute next allowed value using roundDown().
        (WebCore::DateTimeNumericFieldElement::stepUp): Changed to compute next allowed value using roundUp().
        (WebCore::DateTimeNumericFieldElement::roundDown): Added.
        (WebCore::DateTimeNumericFieldElement::roundUp): Added.
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement): Add m_step and m_stepBase fields.

2012-12-12  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Include paddings and borders into the grid element's logical height / width
        https://bugs.webkit.org/show_bug.cgi?id=104818

        Reviewed by Tony Chang.

        This change makes RenderGrid add the borders and paddings in the right direction during layout
        so that the grid element's size accounts them like any other renderer.

        Test: fast/css-grid-layout/grid-element-padding-margin.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computePreferredLogicalWidths):
        (WebCore::RenderGrid::layoutGridItems):

2012-12-12  Roger Fong  <roger_fong@apple.com>

        Include Apple Windows in GraphicsLayer::supportsBackgroundColorContent().
        https://bugs.webkit.org/show_bug.cgi?id=104852.

        Reviewed by Simon Fraser.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::supportsBackgroundColorContent):

2012-12-12  KyungTae Kim  <ktf.kim@samsung.com>

        Unused parameters on TextureMapperImageBuffer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=104857

        Reviewed by Kentaro Hara.

        The updateContents has unused parameter 'textureMapper',
        remove the parameter name to fix 'unused parameter' build warning. 

        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::updateContents):

2012-12-12  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] HTMLContentElement::getDistributedNodes() doesn't work correctly if not in document tree.
        https://bugs.webkit.org/show_bug.cgi?id=104345

        Reviewed by Hajime Morita.

        Since document->updateLayout() does affect nodes in Document, distribution will not occur in
        InsertionPoints out of Document. We have to find the element in document tree scope, and start distribution from it.

        Test: fast/dom/shadow/get-distributed-nodes-orphan.html

        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::getDistributedNodes):

2012-12-12  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Implement WebCore::fileSystemRepresentation() for !USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=104456

        Reviewed by Brent Fulgham.

        Convert the UTF-16 path to the system default Windows ANSI code page (usually Windows Latin1).

        * platform/win/FileSystemWin.cpp:
        (WebCore::fileSystemRepresentation):

2012-12-12  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Remove lowp/highp indicators as they're not needed with ANGLE.
        https://bugs.webkit.org/show_bug.cgi?id=104707

        Reviewed by Kenneth Rohde Christiansen.

        lowp/highp indicator were needed for GLES2, but ANGLE does not require them.

        Covered by existing tests.

        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::getShaderSpec):

2012-12-12  Andy Estes  <aestes@apple.com>

        Don't dispatch fake mousemove events when we don't know where the cursor is
        https://bugs.webkit.org/show_bug.cgi?id=104861

        Reviewed by Sam Weinig.

        When EventHandler is instantiated or cleared, it sets the current mouse
        position to (0, 0), even though this is probably not where the mouse
        cursor really is (and we won't know until the mouse moves into the WebView).
        If a fake mousemove event fires and the page has an element at (0, 0)
        that responds to mousemove, we might end up changing the cursor or
        displaying a tooltip at the current mouse position, even if it is
        outside the WebView.

        Fake mousemove events are dispatched in order to update a cursor that
        is already over the WebView. Don't dispatch the event if we don't know
        this to be true.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Instantiate m_mousePositionIsUnknown to true.
        (WebCore::EventHandler::clear): Reset m_mousePositionIsUnknown to true.
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon): Return early if the mouse position is unknown.
        (WebCore::EventHandler::setLastKnownMousePosition): Set the mouse position from the PlatformMouseEvent and set m_mousePositionIsUnknown to false.
        (WebCore::EventHandler::handleMousePressEvent): Call setLastKnownMousePosition() instead of setting the position directly.
        (WebCore::EventHandler::handleMouseDoubleClickEvent): Ditto.
        (WebCore::EventHandler::handleMouseMoveEvent): Ditto.
        (WebCore::EventHandler::handleMouseReleaseEvent): Ditto.
        (WebCore::EventHandler::updateSelectionForMouseDrag): Rename currentMouse(Global)Position to lastKnownMouse(Global)Position.
        (WebCore::EventHandler::handleAutoscroll): Ditto.
        (WebCore::EventHandler::updatePanScrollState): Ditto.
        (WebCore::EventHandler::lastKnownMousePosition): Ditto.
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoonInQuad): Ditto.
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired): Ditto.
        (WebCore::EventHandler::hoverTimerFired): Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::lastKnownMousePosition): Ditto.
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::lastKnownMousePosition): Ditto.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterControllerDelegate mouseLocationInContentAreaForScrollerImpPair:]): Ditto.
        (-[WebScrollbarPainterDelegate mouseLocationInScrollerForScrollerImp:]): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::panScrollFromPoint): Ditto.
        (WebCore::RenderLayer::autoscroll): Ditto.
        (WebCore::RenderLayer::lastKnownMousePosition): Ditto.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::panScroll): Ditto.
        (WebCore::RenderListBox::autoscroll): Ditto.
        (WebCore::RenderListBox::lastKnownMousePosition): Ditto.

2012-12-12  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the GTK+ debug bulid

        Logging.h is no longer included in headers, so we need to include it manually in
        files that require logging macros.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Include Logging.h.

2012-12-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137524.
        http://trac.webkit.org/changeset/137524
        https://bugs.webkit.org/show_bug.cgi?id=104859

        Causes m_deletionHasBegun assertion failures in
        MutationObserver tests (Requested by aklein on #webkit).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::suggestedMIMEType):
        * dom/Document.h:
        (WebCore::Node::isDocumentNode):
        (WebCore):
        (WebCore::Node::treeScope):
        (WebCore::Node::Node):
        * dom/Element.cpp:
        (WebCore::Element::createRareData):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::setDocument):
        (WebCore):
        (WebCore::Node::setTreeScope):
        (WebCore::Node::createRareData):
        (WebCore::Node::attach):
        (WebCore::Node::reportMemoryUsage):
        * dom/Node.h:
        (WebCore):
        (WebCore::NodeRareDataBase::treeScope):
        (WebCore::NodeRareDataBase::setTreeScope):
        (NodeRareDataBase):
        (WebCore::NodeRareDataBase::NodeRareDataBase):
        (Node):
        (WebCore::Node::inDocument):
        (WebCore::Node::documentInternal):
        * dom/NodeRareData.cpp:
        (SameSizeAsNodeRareData):
        (WebCore::NodeRareData::reportMemoryUsage):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/TreeScope.cpp:
        (SameSizeAsTreeScope):
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        (WebCore):
        (TreeScope):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):

2012-12-12  Seokju Kwon  <seokju.kwon@gmail.com>

        Fix build warning when ENABLE_INSPECTOR is disabled
        https://bugs.webkit.org/show_bug.cgi?id=104757

        Reviewed by Kentaro Hara.

        Use UNUSED_PARAM macro to fix build warning -Wunused-parameter.

        No new tests, no behavior change.

        * inspector/InspectorCanvasInstrumentation.h:
        (WebCore::InspectorInstrumentation::wrapCanvas2DRenderingContextForInstrumentation):
        (WebCore::InspectorInstrumentation::wrapWebGLRenderingContextForInstrumentation):
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::startConsoleTiming):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleTimeStamp):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole):
        (WebCore::InspectorInstrumentation::addProfile):
        (WebCore::InspectorInstrumentation::profilerEnabled):
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileName):
        * inspector/InspectorCounters.h:
        (WebCore::InspectorCounters::incrementCounter):
        (WebCore::InspectorCounters::decrementCounter):
        * inspector/InspectorDatabaseInstrumentation.h:
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorld):
        (WebCore::InspectorInstrumentation::isDebuggerPaused):
        (WebCore::InspectorInstrumentation::willInsertDOMNode):
        (WebCore::InspectorInstrumentation::didInsertDOMNode):
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::willModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didRemoveDOMAttr):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttr):
        (WebCore::InspectorInstrumentation::frameWindowDiscarded):
        (WebCore::InspectorInstrumentation::mediaQueryResultChanged):
        (WebCore::InspectorInstrumentation::didPushShadowRoot):
        (WebCore::InspectorInstrumentation::willPopShadowRoot):
        (WebCore::InspectorInstrumentation::didCreateNamedFlow):
        (WebCore::InspectorInstrumentation::willRemoveNamedFlow):
        (WebCore::InspectorInstrumentation::didUpdateRegionLayout):
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElement):
        (WebCore::InspectorInstrumentation::handleTouchEvent):
        (WebCore::InspectorInstrumentation::handleMousePress):
        (WebCore::InspectorInstrumentation::forcePseudoState):
        (WebCore::InspectorInstrumentation::characterDataModified):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequest):
        (WebCore::InspectorInstrumentation::didScheduleResourceRequest):
        (WebCore::InspectorInstrumentation::didInstallTimer):
        (WebCore::InspectorInstrumentation::didRemoveTimer):
        (WebCore::InspectorInstrumentation::willCallFunction):
        (WebCore::InspectorInstrumentation::didCallFunction):
        (WebCore::InspectorInstrumentation::willDispatchXHRReadyStateChangeEvent):
        (WebCore::InspectorInstrumentation::didDispatchXHRReadyStateChangeEvent):
        (WebCore::InspectorInstrumentation::willDispatchEvent):
        (WebCore::InspectorInstrumentation::didDispatchEvent):
        (WebCore::InspectorInstrumentation::willHandleEvent):
        (WebCore::InspectorInstrumentation::didHandleEvent):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::willEvaluateScript):
        (WebCore::InspectorInstrumentation::didEvaluateScript):
        (WebCore::InspectorInstrumentation::didCreateIsolatedContext):
        (WebCore::InspectorInstrumentation::willFireTimer):
        (WebCore::InspectorInstrumentation::didFireTimer):
        (WebCore::InspectorInstrumentation::didBeginFrame):
        (WebCore::InspectorInstrumentation::didCancelFrame):
        (WebCore::InspectorInstrumentation::didInvalidateLayout):
        (WebCore::InspectorInstrumentation::willLayout):
        (WebCore::InspectorInstrumentation::didLayout):
        (WebCore::InspectorInstrumentation::didScroll):
        (WebCore::InspectorInstrumentation::willDispatchXHRLoadEvent):
        (WebCore::InspectorInstrumentation::didDispatchXHRLoadEvent):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::didPaint):
        (WebCore::InspectorInstrumentation::willScrollLayer):
        (WebCore::InspectorInstrumentation::didScrollLayer):
        (WebCore::InspectorInstrumentation::willComposite):
        (WebCore::InspectorInstrumentation::didComposite):
        (WebCore::InspectorInstrumentation::willRecalculateStyle):
        (WebCore::InspectorInstrumentation::didRecalculateStyle):
        (WebCore::InspectorInstrumentation::didScheduleStyleRecalculation):
        (WebCore::InspectorInstrumentation::willMatchRule):
        (WebCore::InspectorInstrumentation::didMatchRule):
        (WebCore::InspectorInstrumentation::willProcessRule):
        (WebCore::InspectorInstrumentation::didProcessRule):
        (WebCore::InspectorInstrumentation::applyUserAgentOverride):
        (WebCore::InspectorInstrumentation::applyScreenWidthOverride):
        (WebCore::InspectorInstrumentation::applyScreenHeightOverride):
        (WebCore::InspectorInstrumentation::shouldApplyScreenWidthOverride):
        (WebCore::InspectorInstrumentation::applyEmulatedMedia):
        (WebCore::InspectorInstrumentation::shouldApplyScreenHeightOverride):
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::continueAfterPingLoader):
        (WebCore::InspectorInstrumentation::markResourceAsCached):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache):
        (WebCore::InspectorInstrumentation::willReceiveResourceData):
        (WebCore::InspectorInstrumentation::didReceiveResourceData):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDenied):
        (WebCore::InspectorInstrumentation::continueWithPolicyDownload):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnore):
        (WebCore::InspectorInstrumentation::didReceiveData):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::didFailLoading):
        (WebCore::InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClient):
        (WebCore::InspectorInstrumentation::willLoadXHR):
        (WebCore::InspectorInstrumentation::didFailXHRLoading):
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        (WebCore::InspectorInstrumentation::didReceiveXHRResponse):
        (WebCore::InspectorInstrumentation::willLoadXHRSynchronously):
        (WebCore::InspectorInstrumentation::didLoadXHRSynchronously):
        (WebCore::InspectorInstrumentation::scriptImported):
        (WebCore::InspectorInstrumentation::scriptExecutionBlockedByCSP):
        (WebCore::InspectorInstrumentation::didReceiveScriptResponse):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
        (WebCore::InspectorInstrumentation::loadEventFired):
        (WebCore::InspectorInstrumentation::frameDetachedFromParent):
        (WebCore::InspectorInstrumentation::didCommitLoad):
        (WebCore::InspectorInstrumentation::loaderDetachedFromFrame):
        (WebCore::InspectorInstrumentation::willDestroyCachedResource):
        (WebCore::InspectorInstrumentation::willWriteHTML):
        (WebCore::InspectorInstrumentation::didWriteHTML):
        (WebCore::InspectorInstrumentation::didUseDOMStorage):
        (WebCore::InspectorInstrumentation::didDispatchDOMStorageEvent):
        (WebCore::InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart):
        (WebCore::InspectorInstrumentation::didStartWorkerContext):
        (WebCore::InspectorInstrumentation::workerContextTerminated):
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrame):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameError):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrame):
        (WebCore::InspectorInstrumentation::networkStateChanged):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatus):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrame):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrame):
        (WebCore::InspectorInstrumentation::willFireAnimationFrame):
        (WebCore::InspectorInstrumentation::didFireAnimationFrame):
        (WebCore::InspectorInstrumentation::overrideGeolocationPosition):
        (WebCore::InspectorInstrumentation::overrideDeviceOrientation):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):

2012-12-12  Dean Jackson  <dino@apple.com>

        Reinstate CIFilter code for Lion
        https://bugs.webkit.org/show_bug.cgi?id=104847

        Reviewed by Simon Fraser.

        This basically reverts r137500 for Lion, because some
        CAFilter types are not available there.

        Covered by existing tests, with the warning that Lion
        baselines will need updating.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setFilters): Put an ugly #if in to
        detect OS X 10.7, and rename caFilter variable to
        filter.

2012-12-12  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Refactor duplicate code into EflInspectorUtilities
        https://bugs.webkit.org/show_bug.cgi?id=104329

        Reviewed by Kenneth Rohde Christiansen.

        Move duplicate work into EflInspectorUtilities.

        No new tests, refactoring.

        * PlatformEfl.cmake:
        * platform/efl/EflInspectorUtilities.cpp: Added.
        (WebCore):
        (WebCore::inspectorResourcePath):
        * platform/efl/EflInspectorUtilities.h: Added.
        (WebCore):

2012-12-12  Mark Lam  <mark.lam@apple.com>

        Fixing a chromium build breakage due to r137520.
        https://bugs.webkit.org/show_bug.cgi?id=104741.

        Not reviewed.

        Added #ifdef !PLATFORM(CHROMIUM) for one function chromium doesn't use.

        No new tests.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::initialize):
        * Modules/webdatabase/DatabaseTracker.h:
        (DatabaseTracker):

2012-12-11  Emil A Eklund  <eae@chromium.org>

        REGRESSION (Subpixel layout): Gray vertical lines appear when moving insertion point to right on Mac
        https://bugs.webkit.org/show_bug.cgi?id=102402

        Reviewed by Simon Fraser.

        Round paintOffset in CaretBase::paintCaret to ensure that caret is painted at an integer pixel boundary.

        Test: fast/sub-pixel/input-caret-on-subpixel-bound.html

        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::paintCaret): Round paintOffset to ensure it is on a pixel boundary.

2012-12-12  Elliott Sprehn  <esprehn@gmail.com>

        REGRESSION(137336): Generated run-ins are not placed correctly
        https://bugs.webkit.org/show_bug.cgi?id=104840

        Reviewed by Abhishek Arya.

        Now that :before and :after are not anonymous we no longer need special
        handling for run-ins. Currently placeRunInIfNeeded will only place
        a generated content run-in if a special flag is passed, but I removed
        the call with the flag as it wasn't needed in r137336. This patch just
        removes all special handling for generated content run-ins.

        Test: fast/css-generated-content/generated-runin.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::placeRunInIfNeeded):
        (WebCore::RenderBlock::createReplacementRunIn):
            Lots of simplfication since there's no more anonymous run-ins.
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderObject.h:

2012-12-12  Simon Fraser  <simon.fraser@apple.com>

        Don't unconditionally repaint compositing layers when their size changes
        https://bugs.webkit.org/show_bug.cgi?id=104461

        Reviewed by James Robinson.

        In r137215 I attempted to avoid excessive repainting when compositing layers
        change size. This caused stretched layers when layer size changed as a result
        of bounds constraining in updateCompositedBounds(), so was conditionalized
        based on whether constraining happend, in r137248.
        
        However, the TileCache layer was affected by constraining, erroneously:
        shouldClipCompositedBounds() returned true of the tile cache layer. This
        is pointless, because we only constrain to the document bounds (or enclosing
        overflow), and the tile cache is already the size of the document bounds.

        So, disable size constraining for the tile cache layer, and fix
        a confusing comment in updateCompositedBounds() that refers to the
        view's bounds, rather than the document's bounds.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds):
        (WebCore::RenderLayerBacking::updateCompositedBounds):

2012-12-12  Elliott Sprehn  <esprehn@gmail.com>

        [Refactoring] Replace Node's Document pointer with a TreeScope pointer
        https://bugs.webkit.org/show_bug.cgi?id=59816

        Reviewed by Ryosuke Niwa.

        Instead of giving every node in a shadow a rare data, which can be quite
        large, we replace the Document pointer in Node with a TreeScope pointer
        and we give TreeScope a pointer to it's document scope.

        This introduces no branches in document() because in the common
        case document() becomes equivalent to m_treeScope->m_documentScope where
        the documentScope is actually m_treeScope so this shouldn't introduce a
        perf regression.

        Note also that TreeScope can never be null after r136328, and the document
        pointer is only null for DocumentType nodes so we can use a special
        no-document TreeScope for this case that always returns null from
        documentScope().

        No new tests, no change in behavior.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::suggestedMIMEType):
        * dom/Document.h:
        (WebCore::Node::isDocumentNode):
        (WebCore::Node::Node):
        * dom/Element.cpp:
        (WebCore::Element::createRareData):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::createRareData):
        (WebCore::Node::attach):
        (WebCore::Node::reportMemoryUsage):
        * dom/Node.h:
        (WebCore):
        (WebCore::NodeRareDataBase::NodeRareDataBase):
        (NodeRareDataBase):
        (WebCore::Node::treeScope):
        (WebCore::Node::inDocument):
        (WebCore::Node::documentInternal):
        (WebCore::Node::setTreeScope):
        (Node):
        * dom/NodeRareData.cpp:
        (WebCore::NodeRareData::reportMemoryUsage):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/TreeScope.cpp:
        (SameSizeAsTreeScope):
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        (WebCore):
        (TreeScope):
        (WebCore::TreeScope::documentScope):
        (WebCore::TreeScope::noDocumentInstance):
            Returns a special tree scope that has no document for use with
            DocumentType nodes.
        (WebCore::TreeScope::setDocumentScope):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveTreeToNewDocument):
        (WebCore::TreeScopeAdopter::moveNodeToNewDocument):

2012-12-12  Mark Lam  <mark.lam@apple.com>

        Encapsulate externally used webdatabase APIs in DatabaseManager.
        https://bugs.webkit.org/show_bug.cgi?id=104741.

        Reviewed by Sam Weinig.

        Use DatabaseManager instead of accessing DatabaseTracker, AbstractDatabase,
        and DatabaseContext directly. This is to prepare for upcoming webkit2
        refactoring.

        No new tests.

        * CMakeLists.txt:
        * Modules/webdatabase/DatabaseManager.cpp: Added.
        (WebCore::DatabaseManager::manager):
        (WebCore::DatabaseManager::DatabaseManager):
        (WebCore::DatabaseManager::initialize):
        (WebCore::DatabaseManager::setClient):
        (WebCore::DatabaseManager::isAvailable):
        (WebCore::DatabaseManager::setIsAvailable):
        (WebCore::DatabaseManager::hasOpenDatabases):
        (WebCore::DatabaseManager::stopDatabases):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::databaseDirectoryPath):
        (WebCore::DatabaseManager::setDatabaseDirectoryPath):
        (WebCore::DatabaseManager::hasEntryForOrigin):
        (WebCore::DatabaseManager::origins):
        (WebCore::DatabaseManager::databaseNamesForOrigin):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        (WebCore::DatabaseManager::usageForOrigin):
        (WebCore::DatabaseManager::quotaForOrigin):
        (WebCore::DatabaseManager::setQuota):
        (WebCore::DatabaseManager::deleteAllDatabases):
        (WebCore::DatabaseManager::deleteOrigin):
        (WebCore::DatabaseManager::deleteDatabase):
        (WebCore::DatabaseManager::closeDatabasesImmediately):
        (WebCore::DatabaseManager::interruptAllDatabasesForContext):
        * Modules/webdatabase/DatabaseManager.h: Added.
        (DatabaseManager):
        (WebCore::DatabaseManager::~DatabaseManager):
        * Modules/webdatabase/DatabaseManagerClient.h: Copied from Source/WebCore/Modules/webdatabase/DatabaseTrackerClient.h.
        (WebCore::DatabaseManagerClient::~DatabaseManagerClient):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setClient):
        * Modules/webdatabase/DatabaseTracker.h:
        (DatabaseTracker):
        * Modules/webdatabase/DatabaseTrackerClient.h: Removed.
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::openDatabaseEnabled):
        (WebCore::RuntimeEnabledFeatures::openDatabaseSyncEnabled):
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * page/DOMWindow.cpp:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownStartTask::performTask):
        (WebCore::WorkerThread::stop):

2012-12-12  Tony Chang  <tony@chromium.org>

        [chromium] don't write additional idl files to a gyp temp file
        https://bugs.webkit.org/show_bug.cgi?id=104831

        Reviewed by Kentaro Hara.

        The <|( command doesn't work for files like <(PRODUCT_DIR) or <(SHARED_INTERMEDIATE_DIR).
        For additional_idl_files, pass it as a parameter instead of a file listing the filenames.
        There are currently only 3 files in this variable. This shouldn't overflow the command
        line since the limit on Windows is 8k and with this change, we're still only around 4.5k.
        Also, the longest part of the command line is the list of defines. If needed, we could put
        that in a file instead.

        No new tests, this is a refactoring of the build files.

        * WebCore.gyp/WebCore.gyp: Don't use <|( for additional_idl_files.
        * bindings/scripts/generate-bindings.pl: Change --additionalIdlFilesList to
        --additionalIdlFiles, which is a shell argument containing the filenames.

2012-12-12  Chris Rogers  <crogers@google.com>

        Implement OfflineAudioContext constructor
        https://bugs.webkit.org/show_bug.cgi?id=104188

        Reviewed by Kentaro Hara.

        The Web Audio layout tests have relied on an undocumented way (in the specification) to render
        audio faster than realtime using an OfflineAudioContext.  We want to expose a proper OfflineAudioContext
        object and constructor instead of piggybacking off of the normal AudioContext.
             
        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::isSampleRateRangeGood):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/webaudio/OfflineAudioContext.cpp: Added.
        (WebCore):
        (WebCore::OfflineAudioContext::create):
        (WebCore::OfflineAudioContext::OfflineAudioContext):
        (WebCore::OfflineAudioContext::~OfflineAudioContext):
        * Modules/webaudio/OfflineAudioContext.h: Added.
        (WebCore):
        (OfflineAudioContext):
        * Modules/webaudio/OfflineAudioContext.idl: Added.
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitOfflineAudioContextEnabled):
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallbackCustom):

2012-12-12  John Griggs  <jgriggs@rim.com>

        2012-12-12  John Griggs  <jgriggs@rim.com>

        [BlackBerry] Update Media Controls for BlackBerry Platform
        https://bugs.webkit.org/show_bug.cgi?id=104443
        https://przilla.ott.qnx.com/bugzilla/show_bug.cgi?id=204748

        Reviewed by Rob Buis.

        Update Media Controls for BlackBerry platform to allow audio, embedded video and fullscreen video controls to be positioned and styled differently.

        BlackBerry-specific update to Media Controls - No new tests required.

        * PlatformBlackBerry.cmake:
        * css/mediaControlsBlackBerry.css:
        (audio):
        (audio::-webkit-media-controls-embedded-panel, video::-webkit-media-controls-embedded-panel):
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (video::-webkit-media-controls-button-group-container, audio::-webkit-media-controls-button-group-container):
        (video::-webkit-media-controls-fullscreen-time-display-container, audio::-webkit-media-controls-fullscreen-time-display-container):
        (video::-webkit-media-controls-time-display-container, audio::-webkit-media-controls-time-display-container):
        (video::-webkit-media-controls-fullscreen-play-button, audio::-webkit-media-controls-fullscreen-play-button):
        (video::-webkit-media-controls-play-button, audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-fullscreen-timeline-container, video::-webkit-media-controls-fullscreen-timeline-container):
        (video::-webkit-media-controls-timeline-container, audio::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-fullscreen-current-time-display, video::-webkit-media-controls-fullscreen-current-time-display):
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (video::-webkit-media-controls-fullscreen-time-remaining-display, audio::-webkit-media-controls-fullscreen-time-remaining-display):
        (video::-webkit-media-controls-time-remaining-display, audio::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-fullscreen-timeline, video::-webkit-media-controls-fullscreen-timeline):
        (video::-webkit-media-controls-fullscreen-fullscreen-button, audio::-webkit-media-controls-fullscreen-fullscreen-button):
        (video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-audio-mute-button):
        (video::-webkit-media-controls-audio-mute-button):
        (audio::-webkit-media-controls-volume-slider-container):
        (video::-webkit-media-controls-volume-slider-container):
        (audio::-webkit-media-controls-volume-slider):
        (video::-webkit-media-controls-volume-slider):
        (video::-webkit-media-controls-fullscreen-button-divider, audio::-webkit-media-controls-fullscreen-button-divider):
        (video::-webkit-media-controls-fullscreen-button-container, video::-webkit-media-controls-play-button-container, audio::-webkit-media-controls-fullscreen-button-container, audio::-webkit-media-controls-play-button-container):
        * css/mediaControlsBlackBerryFullscreen.css: Added.
        (body:-webkit-full-page-media):
        (video:-webkit-full-screen::-webkit-media-controls-embedded-panel):
        (video:-webkit-full-screen::-webkit-media-controls-panel):
        (video:-webkit-full-screen::-webkit-media-controls-button-group-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-time-display-container):
        (video:-webkit-full-screen::-webkit-media-controls-time-display-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-play-button):
        (video:-webkit-full-screen::-webkit-media-controls-play-button):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-timeline-container):
        (video:-webkit-full-screen::-webkit-media-controls-timeline-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-current-time-display):
        (video:-webkit-full-screen::-webkit-media-controls-current-time-display):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-time-remaining-display):
        (video:-webkit-full-screen::-webkit-media-controls-time-remaining-display):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-timeline):
        (video:-webkit-full-screen::-webkit-media-controls-timeline):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-fullscreen-button):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-button):
        (video:-webkit-full-screen::-webkit-media-controls-audio-mute-button):
        (video:-webkit-full-screen::-webkit-media-controls-volume-slider-container):
        (video:-webkit-full-screen::-webkit-media-controls-volume-slider):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-button-divider):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-button-container, video:-webkit-full-screen::-webkit-media-controls-play-button-container):
        (video:-webkit-full-screen::-webkit-media-controls-fullscreen-button-container):
        (video:-webkit-full-screen::-webkit-media-controls-play-button-container):
        (video:-webkit-full-screen::-webkit-media-controls-placeholder):
        * html/shadow/MediaControlsBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::MediaControlButtonGroupContainerElement::MediaControlButtonGroupContainerElement):
        (WebCore::MediaControlButtonGroupContainerElement::create):
        (WebCore::MediaControlButtonGroupContainerElement::shadowPseudoId):
        (WebCore::MediaControlTimeDisplayContainerElement::MediaControlTimeDisplayContainerElement):
        (WebCore::MediaControlTimeDisplayContainerElement::create):
        (WebCore::MediaControlTimeDisplayContainerElement::shadowPseudoId):
        (WebCore::MediaControlEmbeddedPanelElement::MediaControlEmbeddedPanelElement):
        (WebCore::MediaControlEmbeddedPanelElement::create):
        (WebCore::MediaControlEmbeddedPanelElement::shadowPseudoId):
        (WebCore::MediaControlEmbeddedPanelElement::startDrag):
        (WebCore::MediaControlEmbeddedPanelElement::continueDrag):
        (WebCore::MediaControlEmbeddedPanelElement::endDrag):
        (WebCore::MediaControlEmbeddedPanelElement::startTimer):
        (WebCore::MediaControlEmbeddedPanelElement::stopTimer):
        (WebCore::MediaControlEmbeddedPanelElement::transitionTimerFired):
        (WebCore::MediaControlEmbeddedPanelElement::setPosition):
        (WebCore::MediaControlEmbeddedPanelElement::resetPosition):
        (WebCore::MediaControlEmbeddedPanelElement::makeOpaque):
        (WebCore::MediaControlEmbeddedPanelElement::makeTransparent):
        (WebCore::MediaControlEmbeddedPanelElement::defaultEventHandler):
        (WebCore::MediaControlEmbeddedPanelElement::setCanBeDragged):
        (WebCore::MediaControlEmbeddedPanelElement::setIsDisplayed):
        (WebCore::MediaControlFullscreenTimeDisplayContainerElement::MediaControlFullscreenTimeDisplayContainerElement):
        (WebCore::MediaControlFullscreenTimeDisplayContainerElement::create):
        (WebCore::MediaControlFullscreenTimeDisplayContainerElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenButtonContainerElement::MediaControlFullscreenButtonContainerElement):
        (WebCore::MediaControlFullscreenButtonContainerElement::create):
        (WebCore::MediaControlFullscreenButtonContainerElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenButtonDividerElement::MediaControlFullscreenButtonDividerElement):
        (WebCore::MediaControlFullscreenButtonDividerElement::create):
        (WebCore::MediaControlFullscreenButtonDividerElement::shadowPseudoId):
        (WebCore::MediaControlPlayButtonContainerElement::MediaControlPlayButtonContainerElement):
        (WebCore::MediaControlPlayButtonContainerElement::create):
        (WebCore::MediaControlPlayButtonContainerElement::shadowPseudoId):
        (WebCore::MediaControlPlaceholderElement::MediaControlPlaceholderElement):
        (WebCore::MediaControlPlaceholderElement::create):
        (WebCore::MediaControlPlaceholderElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenPlayButtonElement::MediaControlFullscreenPlayButtonElement):
        (WebCore::MediaControlFullscreenPlayButtonElement::create):
        (WebCore::MediaControlFullscreenPlayButtonElement::defaultEventHandler):
        (WebCore::MediaControlFullscreenPlayButtonElement::updateDisplayType):
        (WebCore::MediaControlFullscreenPlayButtonElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenFullscreenButtonElement::MediaControlFullscreenFullscreenButtonElement):
        (WebCore::MediaControlFullscreenFullscreenButtonElement::create):
        (WebCore::MediaControlFullscreenFullscreenButtonElement::defaultEventHandler):
        (WebCore::MediaControlFullscreenFullscreenButtonElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenFullscreenButtonElement::setIsFullscreen):
        (WebCore::MediaControlFullscreenTimelineContainerElement::MediaControlFullscreenTimelineContainerElement):
        (WebCore::MediaControlFullscreenTimelineContainerElement::create):
        (WebCore::MediaControlFullscreenTimelineContainerElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenTimelineElement::MediaControlFullscreenTimelineElement):
        (WebCore::MediaControlFullscreenTimelineElement::create):
        (WebCore::MediaControlFullscreenTimelineElement::defaultEventHandler):
        (WebCore::MediaControlFullscreenTimelineElement::willRespondToMouseClickEvents):
        (WebCore::MediaControlFullscreenTimelineElement::setPosition):
        (WebCore::MediaControlFullscreenTimelineElement::setDuration):
        (WebCore::MediaControlFullscreenTimelineElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenTimeRemainingDisplayElement::create):
        (WebCore::MediaControlFullscreenTimeRemainingDisplayElement::MediaControlFullscreenTimeRemainingDisplayElement):
        (WebCore::MediaControlFullscreenTimeRemainingDisplayElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenCurrentTimeDisplayElement::create):
        (WebCore::MediaControlFullscreenCurrentTimeDisplayElement::MediaControlFullscreenCurrentTimeDisplayElement):
        (WebCore::MediaControlFullscreenCurrentTimeDisplayElement::shadowPseudoId):
        (WebCore::MediaControlAudioMuteButtonElement::MediaControlAudioMuteButtonElement):
        (WebCore::MediaControlAudioMuteButtonElement::create):
        (WebCore::MediaControlAudioMuteButtonElement::defaultEventHandler):
        (WebCore::MediaControlAudioMuteButtonElement::shadowPseudoId):
        (WebCore::MediaControlsBlackBerry::MediaControlsBlackBerry):
        (WebCore::MediaControls::create):
        (WebCore::MediaControlsBlackBerry::createControls):
        (WebCore::MediaControlsBlackBerry::setMediaController):
        (WebCore::MediaControlsBlackBerry::show):
        (WebCore::MediaControlsBlackBerry::hide):
        (WebCore::MediaControlsBlackBerry::makeOpaque):
        (WebCore::MediaControlsBlackBerry::makeTransparent):
        (WebCore::MediaControlsBlackBerry::reset):
        (WebCore::MediaControlsBlackBerry::bufferingProgressed):
        (WebCore::MediaControlsBlackBerry::playbackStarted):
        (WebCore::MediaControlsBlackBerry::playbackProgressed):
        (WebCore::MediaControlsBlackBerry::playbackStopped):
        (WebCore::MediaControlsBlackBerry::updateCurrentTimeDisplay):
        (WebCore::MediaControlsBlackBerry::reportedError):
        (WebCore::MediaControlsBlackBerry::changedMute):
        (WebCore::MediaControlsBlackBerry::enteredFullscreen):
        (WebCore::MediaControlsBlackBerry::exitedFullscreen):
        (WebCore::MediaControlsBlackBerry::showVolumeSlider):
        (WebCore::MediaControlsBlackBerry::toggleVolumeSlider):
        (WebCore::MediaControlsBlackBerry::shouldHideControls):
        * html/shadow/MediaControlsBlackBerry.h: Added.
        (WebCore):
        (MediaControlButtonGroupContainerElement):
        (MediaControlTimeDisplayContainerElement):
        (MediaControlEmbeddedPanelElement):
        (MediaControlFullscreenTimeDisplayContainerElement):
        (MediaControlFullscreenButtonContainerElement):
        (MediaControlFullscreenButtonDividerElement):
        (MediaControlPlayButtonContainerElement):
        (MediaControlPlaceholderElement):
        (MediaControlFullscreenPlayButtonElement):
        (MediaControlFullscreenFullscreenButtonElement):
        (MediaControlFullscreenTimelineContainerElement):
        (MediaControlFullscreenTimelineElement):
        (MediaControlFullscreenTimeRemainingDisplayElement):
        (MediaControlFullscreenCurrentTimeDisplayElement):
        (MediaControlAudioMuteButtonElement):
        (MediaControlsBlackBerry):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):
        (WebCore::RenderThemeBlackBerry::extraFullScreenStyleSheet):
        (WebCore::RenderThemeBlackBerry::adjustSliderThumbSize):
        (WebCore::RenderThemeBlackBerry::paintSliderTrackRect):
        (WebCore::RenderThemeBlackBerry::adjustMediaControlStyle):
        (WebCore::RenderThemeBlackBerry::adjustSliderTrackStyle):
        (WebCore::RenderThemeBlackBerry::paintMediaRewindButton):
        (WebCore::RenderThemeBlackBerry::paintMediaMuteButton):
        (WebCore::RenderThemeBlackBerry::paintMediaFullscreenButton):
        (WebCore::RenderThemeBlackBerry::paintMediaSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintMediaSliderThumb):
        (WebCore::RenderThemeBlackBerry::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintMediaVolumeSliderThumb):
        * platform/blackberry/RenderThemeBlackBerry.h:
        (WebCore::RenderThemeBlackBerry::usesVerticalVolumeSlider):
        (RenderThemeBlackBerry):

2012-12-12  Dominic Mazzoni  <dmazzoni@google.com>

        AX: textUnderElement should consider alt text, but skip links and controls
        https://bugs.webkit.org/show_bug.cgi?id=101650

        Reviewed by Chris Fleizach.

        Getting inner text from an element now ignores focusable descendants and
        containers, but uses alternative text.

        The computation of textUnderElement is now recursive. This caused a crash
        if it was called by accessibilityIsIgnored during object destruction,
        so I simplified accessibilityIsIgnored to not actually call textUnderElement,
        without affecting test results, which should actually be a decent speedup.

        Test: accessibility/button-title-uses-inner-img-alt.html
        Test: accessibility/focusable-div.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore):
        (WebCore::shouldUseAccessiblityObjectInnerText):
        (WebCore::AccessibilityNodeObject::textUnderElement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):

2012-12-12  Eberhard Graether  <egraether@google.com>

        Web Inspector: follow up to r136974: handle visibility shortcut in keydown event of ElementsTreeOutline.element
        https://bugs.webkit.org/show_bug.cgi?id=104694

        Reviewed by Pavel Feldman.

        Typing H in the StylesSidebarPane caused toggling of the selected elements visibility. This change only handles
        the H keydown when the ElementsPanel is focused.

        No new tests.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline):
        (WebInspector.ElementsTreeOutline.prototype._onkeydown):
        (WebInspector.ElementsTreeOutline.prototype.handleShortcut):
        * inspector/front-end/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut.hasNoModifiers):

2012-12-12  Philip Rogers  <pdr@google.com>

        Fix target element handling in SVGSMILElement.
        https://bugs.webkit.org/show_bug.cgi?id=104495

        Reviewed by Abhishek Arya.

        This patch fixes two bugs that led to stale target elements in SVGSMILElement.

        r122449 changed the <use> code to call removeAllElementReferencesForTarget to rebuild
        dependent <use> trees. This contained a bug where element references would be incorrectly
        removed. removeAllElementReferencesForTarget calls svgAttributeChanged(href) on all
        references, which can then re-add the references back. The bug is that
        removeAllElementReferencesForTarget removes a newly-added reference as the last step.

        r136906 changed targetElement() to no longer be lazily resolved so any changes to an
        animation's href attribute needed to be tracked. r136906 refactored the code but did not
        fix a bug where animation elements not in the document would not react to
        svgAttributeChanged(href).

        The combination of these two bugs allowed stale targetElement references to exist. A
        target element could be removed from the document without dependent animation elements
        receiving a notification (bug 1) and not reacting to notifications they received (bug 2).

        This patch updates SVGUseElement::buildInstanceTree to only rebuild (not remove) the
        elements referencing the target by adding rebuildAllElementReferencesForTarget. This patch
        also updates SVGSMILElement to correctly react to svgAttributeChanged() notifications
        for href changes even when not in the document.

        Test: svg/animations/target-condition-crash.html

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::rebuildAllElementReferencesForTarget):
        (WebCore::SVGDocumentExtensions::removeAllElementReferencesForTarget):

            Refactored so that we can notify element references to update without removing
            references.

        * svg/SVGDocumentExtensions.h:
        (SVGDocumentExtensions):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::removedFrom):

            Similar to SVGUseElement::buildShadowAndInstanceTree, this callsite was updated to
            only rebuild references instead of removing them.

        (WebCore::SVGElement::attributeChanged):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildShadowAndInstanceTree):

            The comment indicates we just want to rebuild (not remove). This callsite has been
            updated to use the new rebuildAllElementReferencesForTarget function.

        (WebCore::SVGUseElement::buildInstanceTree):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        (WebCore::SVGSMILElement::removedFrom):

            Previously, if an SVGSMILElement was not in the document, only clearResourceReferences
            would be called when the target changed. This has been refactored to reset the
            targetElement if the element needs to build resources but is not in the document.

            I looked at moving this into clearResourceReferences (since the target element might
            be considered a reference) but we run into issues calling pure virtual functions in
            the destructor. The current implementation seemed the cleanest.

            SVGSMILElement::removedFrom was cleaned up to match the rest of the code. The comment
            in removedFrom appears to be stale since disconnectConditions does not kill the element.

        (WebCore::SVGSMILElement::svgAttributeChanged):

            Removed the bad !inDocument() checks that broke href change notifications.

        (WebCore::SVGSMILElement::setTargetElement):

2012-12-12  Alpha Lam  <hclam@chromium.org>

        [chromium] Minimize memcpy for encoded image data in ImageFrameGenerator
        https://bugs.webkit.org/show_bug.cgi?id=103797

        Reviewed by Stephen White.

        Added a new class ThreadSafeDataTransport to help transporting data in
        SharedBuffer from one thread to another. This class is designed to minimize
        thread contention and memory copy.

        It is implemented using a data queue. New data segments are copied into
        this queue. The queue is then consolidated with existing data when user
        requests access to the final SharedBuffer.

        Memory is copied into and out of the queue but this approach avoid
        copying the entire SharedBuffer.

        ImageFrameGenerator is now using this class for data transport between
        threads.

        Unit tests in ThreadSafeDataTransportTest. Also existing ImageFrameGeneratorTest passes.

        * WebCore.gypi:
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::setData):
        (WebCore::ImageFrameGenerator::tryToResumeDecodeAndScale):
        Added logic to skip decoding if there's no new data.
        (WebCore::ImageFrameGenerator::decode):
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (ImageFrameGenerator):
        * platform/graphics/chromium/ThreadSafeDataTransport.cpp: Added.
        (WebCore):
        (WebCore::ThreadSafeDataTransport::ThreadSafeDataTransport):
        (WebCore::ThreadSafeDataTransport::~ThreadSafeDataTransport):
        (WebCore::ThreadSafeDataTransport::setData):
        (WebCore::ThreadSafeDataTransport::data):
        (WebCore::ThreadSafeDataTransport::hasNewData):
        * platform/graphics/chromium/ThreadSafeDataTransport.h: Added.
        (WebCore):
        (ThreadSafeDataTransport):

2012-12-12  Roger Fong  <roger_fong@apple.com>

        Enable VIDEO_TRACK on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=104706.

        Reviewed by Timothy Horton.

        Enable VIDEO_TRACK on Windows and update project property files.

        * DerivedSources.cpp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * html/HTMLElementsAllInOne.cpp:
        * rendering/RenderingAllInOne.cpp:

2012-12-12  No'am Rosenthal  <noam.rosenthal@nokia.com>

        REGRESSION: r137481 caused a build failure with GTK
        https://bugs.webkit.org/show_bug.cgi?id=104826

        Unreviewed build fix.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::prepareBackingStore):
            Brought back #if PLATFORM(QT) to surround the dynamic_cast call.

2012-12-12  Dean Jackson  <dino@apple.com>

        Use CAFilter rather than CIFilter
        https://bugs.webkit.org/show_bug.cgi?id=104759

        Reviewed by Tim Horton.

        In order to get better performance in the simple CSS filter
        cases, use CAFilter rather than CIFilter. This involved
        defining some platform-specific values inside
        PlatformCALayerMac to expose CAFilter.

        The great side-effect is that this brings our hardware
        output much closer to our software filters. For example,
        on a random location in the hue-rotate test.

        Software: rgb(255, 148, 16)
        Hardware before: rgb(255, 204, 50)
        Hardware after: rgb(255, 165, 33)

        Still some improvement needed, but better.

        Covered by existing tests.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (CAColorMatrix): New structure to hold 5x4 matrix representing a color operation.
        (PlatformCALayer::setFilters): Use CAFilter objects rather than CIFilter.

2012-12-12  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Consolidate redundant code for ARB_RECT texture
        https://bugs.webkit.org/show_bug.cgi?id=104705

        Reviewed by Kenneth Rohde Christiansen.

        Instead of having a whole different function for RECT textures,
        keep the existing functions and pass a flag that tells
        TextureMapperGL to use the non-normalized coordinates and the
        RECT shaders.

        No new tests, refactor only. Tested to not break WebGL on
        Qt-Mac.

        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawQuad):
            Compensate for rect textures in drawQuad.

        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::TextureMapperGL::drawTextureWithAntialiasing):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
            Pass flags to TextureMapperGL::drawQuad instead of a bool.

        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::getShaderSpec):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):
            Compensate for the texture-size in the vertex
            shader instead of in the fragment shader.

2012-12-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137491.
        http://trac.webkit.org/changeset/137491
        https://bugs.webkit.org/show_bug.cgi?id=104828

        broke the builtd (Requested by rfong on #webkit).

        * DerivedSources.cpp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * html/HTMLElementsAllInOne.cpp:
        * platform/NotImplemented.cpp:
        (WebCore):
        (WebCore::notImplementedLoggingChannel):
        * rendering/RenderingAllInOne.cpp:

2012-12-12  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: remove protocol-externs.js temp file after compile-front-end.py
        https://bugs.webkit.org/show_bug.cgi?id=98799

        Reviewed by Vsevolod Vlasov.

        Add os.system rm for protocol-externs.js to the end of the compile script

        * inspector/compile-front-end.py:

2012-12-12  Robert Hogan  <robert@webkit.org>

        White space between inline blocks should be affected by word-spacing property
        https://bugs.webkit.org/show_bug.cgi?id=69072

        Reviewed by Levi Weintraub.

        Allow word-spacing to get added to the spaces between inline blocks in placeBoxesInInlineDirection by setting
        needsWordSpacing to true each time an inline block is encountered. This ensures that the next space encountered
        in a text run will be treated as a space between two words and will get word-spacing added to it if it is present
        in the style.

        Tests: fast/css/word-spacing-between-blocks.html
               fast/css/word-spacing-between-inlines.html

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

2012-12-12  Xianzhu Wang  <wangxianzhu@chromium.org>

        Pre-painting should not paint out-of-view fixed position elements
        https://bugs.webkit.org/show_bug.cgi?id=104724

        Reviewed by James Robinson.

        Test: ManualTests/compositing/fixed-position-out-of-view-scroll-prepaint.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer): Don't paint out-of-view fixed position elements.

2012-12-11  Roger Fong  <roger_fong@apple.com>

        Enable VIDEO_TRACK on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=104706.

        Reviewed by Timothy Horton.

        Enable VIDEO_TRACK on Windows and update project property files.

        * DerivedSources.cpp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * html/HTMLElementsAllInOne.cpp:
        * rendering/RenderingAllInOne.cpp:

2012-12-12  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] Failed resources shouldn't be recorded in the buffer
        https://bugs.webkit.org/show_bug.cgi?id=104762

        Reviewed by Tony Gentilcore.

        Test: http/tests/w3c/webperf/submission/resource-timing/html/test_resource_ignore_failures.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone):

2012-12-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add authentication support to DRT and fix exposed issues in the libsoup backend
        https://bugs.webkit.org/show_bug.cgi?id=104285

        Reviewed by Gustavo Noronha Silva.

        Fix issues in the libsoup networking backend that were causing test
        failures.

        No new tests. This patch unskips authentication tests.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::isAuthenticationFailureStatusCode): Added this helper to catch authentication status codes
        and use it everywhere.
        (WebCore::applyAuthenticationToRequest): Use an early return instead of an if-statement
        and instead of always using manually specified credentials, apply those found in the session
        storage as well. Instead of applying the credentials to firstRequest always, accept the request
        as a parameter, so this method can be properly used with redirects.
        (WebCore::restartedCallback): Instead of creating the KURL directly from soup_uri_to_string
        use soupURIToKURL, which preserves the password from the SoupURI. soup_uri_to_string doesn't
        include the password. When calling applyAuthenticationToRequest update the new request. Before
        applyAuthenticationToRequest always updated the firstRequest. Do not call willSendRequest for
        instances when this method is called for authentication handling. willSendRequest should only
        be called for server-side redirects.
        (WebCore::createSoupRequestAndMessageForHandle): Use soup_requester_request_uri instead of
        soup_requester_request. Request::soupURI properly creates a SoupURI with non-null empty strings
        when either the username and password are empty.  A null username or password does not trigger
        the URI-embedded credential override in SoupAuthenticationManager within libsoup. This is important
        because sometimes either the username or password might empty for a request, but the other
        part of the credential should still override the per-session credential storage.
        (WebCore::ResourceHandle::start): We don't need to clear the username and password from the
        internal data structure any longer. These need to be cleared in the CFNetwork backend because
        it prevents the same failed per-request credentials from being used over and over again. In our
        case we don't use these members during didReceiveAuthenticationChallenge, so this isn't an issue.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Don't look at the per-request
        m_user/m_pass pair here any longer. We use these when initially creating a request, so we don't
        want to re-use them if they fail.
        * platform/network/soup/ResourceRequest.h:
        (ResourceRequest): Rename urlStringForSoup to soupURI.
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::soupURI): Instead of returning a string for the soup-bound URL
        return a SoupURI that properly embeds empty usernames and passwords.

2012-12-12  Alexey Proskuryakov  <ap@apple.com>

        Make LOG() work in WebProcess and NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=104718

        Reviewed by Tim Horton.

        Split initialization function into a new InitializeLogging.h file, because it's
        needed in WebKit, but cannot be included along with WebKit version of this file.
        We'd have a confilct between LOG_CHANNEL_PREFIX definitions if we tried.

        * WebCore.xcodeproj/project.pbxproj: Make Logging.h a project header, and
        InitializeLogging.h a private one.

        * GNUmakefile.list.am:
        * Target.pri:
        * platform/InitializeLogging.h: Added.
        * platform/Logging.h:

        * platform/blackberry/LoggingBlackBerry.cpp:
        * platform/efl/LoggingEfl.cpp:
        * platform/gtk/LoggingGtk.cpp:
        * platform/mac/LoggingMac.mm:
        * platform/qt/LoggingQt.cpp:
        * platform/win/LoggingWin.cpp:
        * platform/wx/LoggingWx.cpp:
        Include InitializeLogging.h where this function is implemented.

        * platform/NotImplemented.h:
        * platform/NotImplemented.cpp: Added.
        Changed to not include WebCore's Logging.h in the header, because NotImplemented.h
        is used in WebKits, which have incompatibe logging headers.

2012-12-12  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-busy should be exposed everywhere, not just on live regions
        https://bugs.webkit.org/show_bug.cgi?id=104814

        Reviewed by Anders Carlsson.

        The aria-busy attribute should be exposed on all elements. 
        This isn't entirely clear in the ARIA spec, but that will be fixed with
        ARIA1.1 (ISSUE-538).

        Existing tests that dump attributes cover this new behavior.

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):

2012-12-12  Gavin Peters  <gavinp@chromium.org>

        [chromium] Add destructor to WebPrerender
        https://bugs.webkit.org/show_bug.cgi?id=104820

        Reviewed by James Robinson.

        When making WebPrerender default constructible and assignable, the destructor should have been moved out of WEBKIT_IMPLEMENTATION.

        Existing WebKit unit tests should test this, as do chromium browser tests.

        * platform/chromium/support/WebPrerender.cpp:
        (WebKit::WebPrerender::toPrerender):
        (WebKit::WebPrerender::reset):

2012-12-12  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Animation fails on large layers
        https://bugs.webkit.org/show_bug.cgi?id=104538

        Reviewed by Noam Rosenthal.

        The backing tiles had no upper limit defined for the non-GL backend, which could cause them
        to allocate pixmaps widier or higher than what the underlying graphics systems can handle.

        On top of that GraphicsLayerTextureMapper::prepareBackingStore() would allocate an intermediate
        pixmap the size of the dirty rect, which would at least on the first paint be the size of the
        entire layer, again causing allocation of pixmaps with dimensions outside of platform bounds.

        This patch introduces a limit to the size of image buffer tiles, and adds an alternative path
        for painting where the GraphicsLayer paints directly to the tile instead of over an intermediate
        pixmap. This alternative path can also be useful later to minimize the amount of pixel copying
        happening in full repaints.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::prepareBackingStore):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/graphics/texmap/TextureMapper.h:
        (BitmapTexture):
        (TextureMapper):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTile::updateContents):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (TextureMapperTile):
        (TextureMapperTiledBackingStore):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::updateContents):
        (WebCore::TextureMapperImageBuffer::maxTextureSize):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):

2012-12-12  Aaron Colwell  <acolwell@chromium.org>

        Remove MediaSource 'ended' to 'open' transition when seeking.
        https://bugs.webkit.org/show_bug.cgi?id=104583

        Reviewed by Eric Carlson.

        Remove the 'ended' to 'open' transition on a seek.

        No new tests. The following tests were updated to reflect the new behavior.
          http/tests/media/media-source/video-media-source-seek.html
          http/tests/media/media-source/video-media-source-state-changes.html

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

2012-12-12  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Implement CSS parsing and handling for min-content and max-content
        https://bugs.webkit.org/show_bug.cgi?id=104747

        Reviewed by Alexis Menard.

        This change adds -webkit-min-content and -webkit-max-content to our <track-breadth> parsing.
        The rendering is not plugged in and will probably depend on bug 103311.

        Tests: fast/css-grid-layout/grid-columns-rows-get-set-multiple.html:
               fast/css-grid-layout/grid-columns-rows-get-set.html:

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridBreadth):
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackBreadth):
        Straight-forward extension of the new code. We were already serializing back properly
        so no need to touch CSSComputedStyleDeclaration.

2012-12-12  Ryosuke Niwa  <rniwa@webkit.org>

        Copying text with ruby inserts new lines around rt elements
        https://bugs.webkit.org/show_bug.cgi?id=104765

        Reviewed by Dan Bernstein.

        Don't emit new lines before and after rt.

        Test: editing/pasteboard/copy-paste-ruby-text.html

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

2012-12-12  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Possibility to turn off accessibility feature for WebKit-EFL.
        https://bugs.webkit.org/show_bug.cgi?id=103036

        Reviewed by Laszlo Gombos.

        Guard dependencies for accessibility (ATK), so that they can be turned off.

        No new tests as there is no new functionality.

        * PlatformEfl.cmake:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):

2012-12-12  Justin Novosad  <junov@google.com>

        Use render box background over border draw strategy in cases with background-image
        https://bugs.webkit.org/show_bug.cgi?id=103409

        Reviewed by Simon Fraser.

        The BackgroundOverBorderBleedAvoidance mode was not being used in
        cases where the background is an opaque image. It was also not
        being used in cases with multiple layers. The multiple layer
        case is now safe with respect to color bleeding if the top layer
        is opaque, thank to the recent addition of layer occlusion culling
        in r135629.

        No new tests. Testing already covered by the following tests:
        fast/backgrounds/background-opaque-images-over-color.html
        fast/backgrounds/gradient-background-leakage-2.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::determineBackgroundBleedAvoidance):
        (WebCore::RenderBox::backgroundHasOpaqueTopLayer):
        * rendering/RenderBox.h:
        (RenderBox):

2012-12-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: instrument static parts of RenderBlock and RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=104660

        Reviewed by Yury Semikhatsky.

        Plain vanilla instrumentation.

        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        (WebCore::WebCoreMemoryInstrumentation::reportMemoryUsage):
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryTypes):
        (WebCoreMemoryInstrumentation):
        (WebCore):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::reportStaticMembersMemoryUsage):
        (WebCore):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::reportStaticMembersMemoryUsage):
        (WebCore):
        * rendering/RenderBox.h:
        (RenderBox):

2012-12-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: remove fake root MemoryObjectInfo.
        https://bugs.webkit.org/show_bug.cgi?id=104796

        Reviewed by Yury Semikhatsky.

        It was not a good idea to introduce a fake root MemoryObjectInfo.
        It makes a problem when we visit an object without its own MemoryObjectType.

        Example: RenderBox has a global pointer to a hash map.
        HashMap doesn't have its own object type because it is a generic container.
        It will inherit object type from the fake root memory object info.
        The same could happen for another container in another class with other MemoryObjectType.

        This fact forces me to create custom process method for root objects
        because they need to have their own MemoryObjectInfo with customisable memory object type.

        Drive by fix: InstrumentedPointer* was replaced with Wrapper* because actually it is using
        for instrumented and not instrumented object classes.

        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationImpl::processDeferredObjects):
        (WebCore::MemoryInstrumentationImpl::deferObject):
        (WebCore::MemoryInstrumentationImpl::reportMemoryUsage):
        * inspector/MemoryInstrumentationImpl.h:
        (MemoryInstrumentationImpl):

2012-12-12  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL [WebGL] [Wk2] Resizing the canvas breaks WebGL.
        https://bugs.webkit.org/show_bug.cgi?id=104535.

        Reviewed by Kenneth Rohde Christiansen.

        GraphicsContext3DEfl does not re-create the surface on canvas resize, this
        conflicted with the logic in coordinated graphics Layer.
        CoordinatedGraphicsLayer checks for GraphicsSurfaceToken to decide if the surface
        in UI-Process should be recreated or not. With this
        patch we also check for size of the platform Layer.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::createGraphicsSurfaces):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (GraphicsContext3DPrivate::didResizeCanvas):
        (GraphicsContext3DPrivate::platformLayerSize):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):

2012-12-12  Antoine Quint  <graouts@apple.com>

        Web Inspector: Crash in InspectorDOMAgent::pushNodePathToFrontend when inspecting document with CSS generated content
        https://bugs.webkit.org/show_bug.cgi?id=104780

        Reviewed by Pavel Feldman.

        The pushNodePathForRenderLayerToFrontend() method added to InspectorDOMAgent naively assumed
        that all RenderLayers have a Node associated to them. However, in the case of CSS generated
        content, that will not be the case and we would call into pushNodePathToFrontend() with a 0
        parameter that would hit the first ASSERT in this method. We're now checking that we indeed
        have an associated node for the provided RenderLayer and return 0 in case we don't, without
        calling into pushNodePathToFrontend().

        Test: inspector-protocol/layer-tree-generated-content.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushNodePathForRenderLayerToFrontend):

2012-12-12  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Crash] Clear cached stylesheet rules in InspectorStyleSheet::deleteRule()
        https://bugs.webkit.org/show_bug.cgi?id=104806

        Reviewed by Vsevolod Vlasov.

        Cached rules (m_flatRules) should get cleared whenever a rule is deleted.

        Test: inspector/styles/undo-add-rule-crash.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::deleteRule):

2012-12-12  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r136975.
        http://trac.webkit.org/changeset/136975
        https://bugs.webkit.org/show_bug.cgi?id=90405

        Correctness issues.

        * dom/Element.cpp:
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::createCustomFilterEffect):
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        (WebCore::FilterEffectRenderer::build):
        * rendering/FilterEffectRenderer.h:
        (FilterEffectRenderer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffectRenderer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::buildCachedResources):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::addResourcesFromRenderObject):
        (WebCore::SVGResourcesCache::clientStyleChanged):
        (WebCore::SVGResourcesCache::resourceDestroyed):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::isElementPendingResource):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemoval):
        * svg/SVGDocumentExtensions.h:
        (WebCore):
        (SVGDocumentExtensions):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::hasPendingResources):
        (WebCore):
        (WebCore::SVGElement::setHasPendingResources):
        (WebCore::SVGElement::clearHasPendingResourcesIfPossible):
        * svg/SVGElement.h:
        (SVGElement):
        (WebCore::SVGElement::buildPendingResource):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::SVGElementRareData):
        (WebCore::SVGElementRareData::hasPendingResources):
        (WebCore::SVGElementRareData::setHasPendingResources):
        (SVGElementRareData):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):

2012-12-12  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r137022.
        http://trac.webkit.org/changeset/137022

        Precursor to rollout of 136975.

        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::buildCachedResources):

2012-12-12  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r137027.
        http://trac.webkit.org/changeset/137027

        Precursor to rollout of 136975.

        * dom/ElementRareData.h:
        (ElementRareData):

2012-12-12  Alexei Filippov  <alph@chromium.org>

        Web Inspector: add memory used by memory allocator itself to NMI
        https://bugs.webkit.org/show_bug.cgi?id=93372

        Make native memory instrumentation report memory retained
        for the memory allocator internal purposes.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.MemoryBlockViewProperties._initialize):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (WebCore::MemoryUsageSupport::memoryUsageByComponents):

2012-12-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137438.
        http://trac.webkit.org/changeset/137438
        https://bugs.webkit.org/show_bug.cgi?id=104798

        assertion reached when removing tile (Requested by tmpsantos
        on #webkit).

        * page/Frame.cpp:
        (WebCore::Frame::setTiledBackingStoreEnabled):
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setTileCreationDelay):
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded):
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::isTileBufferUpdatesSuspended):
        (WebCore::TiledBackingStore::startTileBufferUpdateTimer):
        (WebCore::TiledBackingStore::tileBufferUpdateTimerFired):
        (WebCore::TiledBackingStore::startBackingStoreUpdateTimer):
        (WebCore::TiledBackingStore::backingStoreUpdateTimerFired):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):
        (WebCore::TiledBackingStore::tileCreationDelay):
        * platform/graphics/TiledBackingStoreClient.h:
        (WebCore::TiledBackingStoreClient::tiledBackingStoreUpdatesAllowed):

2012-12-12  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed typo fix after r137446.

        * WebCore.pri:

2012-12-12  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Remove the last of unnecessary configuration options in configure.ac
        https://bugs.webkit.org/show_bug.cgi?id=104793

        Reviewed by Martin Robinson.

        Remove the feature define overriding that's based on the automake variables which are
        not set anymore due to the corresponding configuration options being removed.

        No new tests - no new functionality.

        * GNUmakefile.am:

2012-12-12  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build on Mac

        Reviewed by Csaba Osztrogonác.

        On Mac OS X we have sqlite as a system library available.

        * WebCore.pri:

2012-12-12  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix linkage against SQLite
        https://bugs.webkit.org/show_bug.cgi?id=104781

        Reviewed by Csaba Osztrogonác.

        Detect SQLite either through pkg-config, from the SQLITE3SRCDIR
        environment variable or from qtbase via a qt5.git build. Bail out early
        with an error message if neither option applies.

        This removes the usage of $$QT.core.sources and the dependency on Qt's
        system-sqlite configure setting. We should always favour a system
        library over a copy in Qt.

        * Target.pri:
        * WebCore.pri:

2012-12-12  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [TexMap] Uninitialized m_context pointer in TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=104785

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::TextureMapper):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):

2012-12-12  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Change the data channel descriptor pattern to a handler pattern
        https://bugs.webkit.org/show_bug.cgi?id=104543

        Reviewed by Kent Tamura.

        In short the code is refactured to use the Handler/Client pattern (see RTCPeerConnectionHandler)
        instead of the Descriptor pattern.
        This will fix lifetime/memory/code structure issues in the chromium port.

        Existing tests cover this patch.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::~RTCDataChannel):
        (WebCore::RTCDataChannel::label):
        (WebCore::RTCDataChannel::reliable):
        (WebCore::RTCDataChannel::readyState):
        (WebCore::RTCDataChannel::bufferedAmount):
        (WebCore::RTCDataChannel::send):
        (WebCore::RTCDataChannel::close):
        (WebCore::RTCDataChannel::didChangeReadyState):
        (WebCore::RTCDataChannel::didReceiveStringData):
        (WebCore::RTCDataChannel::didReceiveRawData):
        (WebCore::RTCDataChannel::didDetectError):
        (WebCore::RTCDataChannel::stop):
        * Modules/mediastream/RTCDataChannel.h:
        (WebCore):
        (RTCDataChannel):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::didAddRemoteDataChannel):
        * Modules/mediastream/RTCPeerConnection.h:
        (RTCPeerConnection):
        * WebCore.gypi:
        * platform/chromium/support/WebRTCDataChannel.cpp: Removed.
        * platform/mediastream/RTCDataChannelDescriptor.h: Removed.
        * platform/mediastream/RTCDataChannelHandler.h: Copied from Source/WebCore/platform/mediastream/RTCDataChannelDescriptor.cpp.
        (WebCore):
        (RTCDataChannelHandler):
        (WebCore::RTCDataChannelHandler::~RTCDataChannelHandler):
        * platform/mediastream/RTCDataChannelHandlerClient.h: Renamed from Source/WebCore/platform/mediastream/RTCDataChannelDescriptor.cpp.
        (WebCore):
        (RTCDataChannelHandlerClient):
        (WebCore::RTCDataChannelHandlerClient::~RTCDataChannelHandlerClient):
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        (WebCore):
        (WebCore::RTCPeerConnectionHandler::create):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        (WebCore):
        (RTCPeerConnectionHandler):
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        (WebCore):
        (RTCPeerConnectionHandlerClient):
        * platform/mediastream/chromium/RTCDataChannelHandlerChromium.cpp: Added.
        (WebCore):
        (WebCore::RTCDataChannelHandlerChromium::create):
        (WebCore::RTCDataChannelHandlerChromium::RTCDataChannelHandlerChromium):
        (WebCore::RTCDataChannelHandlerChromium::~RTCDataChannelHandlerChromium):
        (WebCore::RTCDataChannelHandlerChromium::setClient):
        (WebCore::RTCDataChannelHandlerChromium::label):
        (WebCore::RTCDataChannelHandlerChromium::isReliable):
        (WebCore::RTCDataChannelHandlerChromium::bufferedAmount):
        (WebCore::RTCDataChannelHandlerChromium::sendStringData):
        (WebCore::RTCDataChannelHandlerChromium::sendRawData):
        (WebCore::RTCDataChannelHandlerChromium::close):
        (WebCore::RTCDataChannelHandlerChromium::didChangeReadyState):
        (WebCore::RTCDataChannelHandlerChromium::didReceiveStringData):
        (WebCore::RTCDataChannelHandlerChromium::didReceiveRawData):
        (WebCore::RTCDataChannelHandlerChromium::didDetectError):
        * platform/mediastream/chromium/RTCDataChannelHandlerChromium.h: Added.
        (WebCore):
        (RTCDataChannelHandlerChromium):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::createDataChannel):
        (WebCore::RTCPeerConnectionHandlerChromium::didAddRemoteDataChannel):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (WebCore):
        (RTCPeerConnectionHandlerChromium):

2012-12-12  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Refactor TiledBackingStore code in CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=103959

        Reviewed by Kenneth Rohde Christiansen.

        TiledBackingStore::setCommitTileUpdatesOnIdleEventLoop() is used when class
        methods cannot be called asynchronously by client. Updates of tiles are
        committed as soon as all the events in event queue have been processed.
        After this patch Frame sets m_commitTileUpdatesOnIdleEventLoop to true.

        In addition, remove TiledBackingStoreClient::tiledBackingStoreUpdatesAllowed()
        which was introduced for Coordinated Graphics.

        Refactoring covered by existing tests.

        * page/Frame.cpp:
        (WebCore::Frame::setTiledBackingStoreEnabled):
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setTrajectoryVector):
          Separate setting a trajectory vector from coverWithTilesIfNeeded().
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded):
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::isTileBufferUpdatesSuspended):
        (WebCore::TiledBackingStore::startTileBufferUpdateTimer):
        (WebCore::TiledBackingStore::tileBufferUpdateTimerFired):
        (WebCore::TiledBackingStore::startBackingStoreUpdateTimer):
        (WebCore::TiledBackingStore::backingStoreUpdateTimerFired):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):
        (WebCore::TiledBackingStore::setCommitTileUpdatesOnIdleEventLoop):
        * platform/graphics/TiledBackingStoreClient.h:
        (WebCore::TiledBackingStoreClient::tiledBackingStoreHasPendingTileCreation):
            If TiledBackingStore does not create all tiles, TiledBackingStore
            notifies a client of needing to create tiles more, when
            m_commitTileUpdatesOnIdleEventLoop is false.

2012-12-11  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix the inspector not showing up on Windows
        https://bugs.webkit.org/show_bug.cgi?id=104677

        Reviewed by Simon Hausmann.

        * Target.pri:

2012-11-29  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: Heap snapshot crashes on any page in MacOS Canary
        https://bugs.webkit.org/show_bug.cgi?id=103076

        Reviewed by Adam Barth.

        Provide global object name resolver to the heap profiler. The callback allows
        to safely retrieve document URL to be used as a label for corresponding global
        object in the heap snapshot.

        Test: inspector-protocol/take-heap-snapshot.html

        * bindings/v8/ScriptProfiler.cpp:
        (WebCore):
        (WebCore::ScriptProfiler::takeHeapSnapshot):

2012-12-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137428.
        http://trac.webkit.org/changeset/137428
        https://bugs.webkit.org/show_bug.cgi?id=104776

        It broke the build everywhere (Requested by Ossy on #webkit).

        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawQuad):
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore):
        (WebCore::TextureMapperGL::drawTextureRectangleARB):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::TextureMapperGL::drawTextureWithAntialiasing):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::getShaderSpec):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):

2012-12-12  Martin Robinson  <mrobinson@igalia.com>

        Web inspector prints a warning about "Debug" not being localized
        https://bugs.webkit.org/show_bug.cgi?id=104679

        Reviewed by Vsevolod Vlasov.

        Add a missing localization entry for the "Debug" string which is used in the web
        inspector front-end. This prevents warnings about a missing localized version
        of the word "Debug" and allows it to be properly localized.

        * English.lproj/localizedStrings.js: Add "Debug"

2012-12-12  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow DOM] Implement HTMLShadowElement::olderShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=104218

        Reviewed by Hajime Morita.

        Implements HTMLShadowElement::olderShadowRoot, which returns the ShadowRoot the HTMLShadowElement is assigned to.
        When such ShadowRoot does not exist, 0 is returned.

        Test: fast/dom/shadow/olderShadowRoot-in-shadowelement.html

        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::ensureDistributionFromDocument): Ensures distribution of this ElementShadow and
        all of the parent TreeScope distribution. This function will be shared for Bug 104345.
        (WebCore):
        * dom/ElementShadow.h:
        (ElementShadow):
        * html/shadow/HTMLShadowElement.cpp:
        (WebCore::HTMLShadowElement::olderShadowRoot):
        (WebCore):
        * html/shadow/HTMLShadowElement.h:
        * html/shadow/HTMLShadowElement.idl:

2012-12-12  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Consolidate redundant code for ARB_RECT texture
        https://bugs.webkit.org/show_bug.cgi?id=104705

        Reviewed by Kenneth Rohde Christiansen.

        Instead of having a whole different function for RECT textures,
        keep the existing functions and pass a flag that tells
        TextureMapperGL to use the non-normalized coordinates and the
        RECT shaders.

        No new tests, refactor only. Tested to not break WebGL on
        Qt-Mac.

        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawQuad):
            Compensate for rect textures in drawQuad.

        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::TextureMapperGL::drawTextureWithAntialiasing):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
            Pass flags to TextureMapperGL::drawQuad instead of a bool.

        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::getShaderSpec):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):
            Compensate for the texture-size in the vertex
            shader instead of in the fragment shader.

2012-12-11  Hayato Ito  <hayato@chromium.org>

        REGRESSION(r137408): breaks chromium's browser tests which use WebKitShadowRoot (Requested by hayato on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=104770

        Unreviewed, build fix.

        * dom/ShadowRoot.idl:
        * page/DOMWindow.idl:

2012-12-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137333, r137344, r137364, and
        r137377.
        http://trac.webkit.org/changeset/137333
        http://trac.webkit.org/changeset/137344
        http://trac.webkit.org/changeset/137364
        http://trac.webkit.org/changeset/137377
        https://bugs.webkit.org/show_bug.cgi?id=104771

        Caused a raft of browser_test failures in Chromium (Requested
        by aklein on #webkit).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::subresource):
        (WebCore::DocumentLoader::addSubresourceLoader):
        (WebCore::DocumentLoader::removeSubresourceLoader):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::~MainResourceLoader):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::willCancel):
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::addData):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        (WebCore::MainResourceLoader::reportMemoryUsage):
        (WebCore::MainResourceLoader::handleSubstituteDataLoadNow):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::setDefersLoading):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        * loader/ResourceLoader.h:
        (ResourceLoader):
        (WebCore::ResourceLoader::defersLoading):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainResponse):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainError):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::willSendRequest):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone):
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule):
        (WebCore::DocumentLoader::unschedule):

2012-12-11  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r137398.
        http://trac.webkit.org/changeset/137398
        https://bugs.webkit.org/show_bug.cgi?id=104188

        A bunch of webaudio tests hit ASSERTs

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createOfflineContext):
        (WebCore):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/webaudio/OfflineAudioContext.cpp: Removed.
        * Modules/webaudio/OfflineAudioContext.h: Removed.
        * Modules/webaudio/OfflineAudioContext.idl: Removed.
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallbackCustom):

2012-12-11  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow DOM] registering InsertionPoints to ShadowRoot should work out of a document.
        https://bugs.webkit.org/show_bug.cgi?id=104346

        Reviewed by Hajime Morita.

        We need to register InsertionPoints even if ShadowRoot is out of Document, since distribution should work
        out of Document, too.

        Instead of checking isInDocument(), we have to make sure InsertionPoint and an element which InsertionPoint
        inserted into have the same treescope.

        Tests: fast/dom/shadow/has-content-elements.html
               fast/dom/shadow/has-shadow-insertion-point.html

        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::insertedInto):
        (WebCore::InsertionPoint::removedFrom):

2012-12-11  Takashi Sakamoto  <tasak@google.com>

        Text nodes in shadow roots don't inherit style properly
        https://bugs.webkit.org/show_bug.cgi?id=101116

        Reviewed by Hajime Morita.

        Use NodeRenderingContext to resolve styles of text nodes.
        If text nodes are direct children of shadow roots, the text nodes
        should be inherited styles from their shadow hosts.
        But if reset-style-inheritance flag is true, the text nodes should
        not be inherited. And if text nodes are distributed nodes,
        we have to check whether their insertion point's
        reset-style-inheritance.
        c.f. shadow dom spec is:
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles

        Test: fast/dom/shadow/text-node-in-shadow.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        Modified to use defaultStyleForElement if the given element has
        no parent style.
        (WebCore::StyleResolver::initForStyleResolve):
        Removed shouldResetStyleInheritance, because now NodeRenderingContext
        resetStyleInheritance() takes care of reset-style-inheritance of
        both shadow roots and insertion points.
        (WebCore::StyleResolver::defaultStyleForElement):
        Added to create a default style for elements.
        (WebCore):
        (WebCore::StyleResolver::styleForText):
        Use NodeRenderingContext to find the parent node for style from the
        given text node. If no parent node is found or reset-style-inheritance
        is true, returns a default style (i.e. empty render style).
        Otherwise, just returns the found node's style.
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::ComposedShadowTreeWalker::ParentTraversalDetails::didTraverseInsertionPoint):
        Modify to consider insertion point's resetStyleInheritance.
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::createRendererForTextIfNeeded):
        Since NodeRenderingContext has already found a parent node for
        rendering and style and a parentRenderer is just the found node's
        renderer, we have to only check reset-style-inheritance.
        If reset, use default style. Otherwise, the parentRenderer's style.
        * dom/Text.cpp:
        (WebCore::Text::recalcTextStyle):
        Use styleForText instead of parentRenderer's styles if the given text
        node is a direct child of a shadow root or a direct child of a shadow
        host.

2012-12-11  Takashi Sakamoto  <tasak@google.com>

        Hide HOST_RULE behind SHADOW_DOM flag.
        https://bugs.webkit.org/show_bug.cgi?id=102321

        Reviewed by Dimitri Glazkov.

        @host @-rules are only available when the rules are declared in styles
        in shadow dom trees. So if SHADOW_DOM is disabled, we don't need
        @host @-rules.

        No new tests. Just hide HOST_RULE behind SHADOW_DOM flag.

        * css/StyleResolver.h:
        Hide "class ShadowRuleHost".
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::reportMemoryUsage):
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleRule.h:
        (StyleRuleBase):
        Hide "Host" type and isHostRule.
        (StyleRuleHost):
        Hide "class StyleRuleHost".
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):

2012-12-11  Dominic Mazzoni  <dmazzoni@google.com>

        AX: accessibilityIsIgnored should avoid computing textUnderElement
        https://bugs.webkit.org/show_bug.cgi?id=104688

        Reviewed by Chris Fleizach.

        Simplify the logic in accessibilityIsIgnored without affecting
        the results of any tests. In particular, avoid expensive calls to
        textUnderElement.

        Covered by existing tests.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isGenericFocusableElement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):

2012-12-11  Kentaro Hara  <haraken@chromium.org>

        [V8] Reachable event listeners on image elements can be collected in a minor DOM GC
        https://bugs.webkit.org/show_bug.cgi?id=104734

        Reviewed by Kenneth Russell.

        A major DOM GC treats image elements specially. In
        V8GCController::opaqueRootForGC(), a major DOM GC puts image elements
        that have pending activities into the same object group of their document.
        This guarantees that image elements that have pending activities
        are not garbage collected in the major DOM GC.

        This patch adds the same special handling to a minor DOM GC to guarantee
        the same thing in the minor DOM GC too.

        In long-term, we might want to remove the special handling by making
        image elements active DOM nodes.

        Test: Manually confirmed that all characters in
        http://alteredqualia.com/three/examples/webgl_animation_skinning_tf2.html
        are rendered correctly.

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::opaqueRootForGC):
        (WebCore::gcTree):

2012-12-11  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Make isActionSupported cross-platform.
        https://bugs.webkit.org/show_bug.cgi?id=104681

        Reviewed by Chris Fleizach.

        Add UserGestureIndicator to increment() and decrement()
        so that all accessibility actions are treated as
        user actions, not scripted actions.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::increment):
        (WebCore::AccessibilityNodeObject::decrement):

2012-12-11  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        Remove conversion to/from float and float division from ImageFrame::setRGBA
        https://bugs.webkit.org/show_bug.cgi?id=103693

        Reviewed by Brent Fulgham.

        Replace floating point operations used for alpha premultiply with fixed point arithmetic
        which is basically integer operations. Allows to shave extra couple percent from decoding
        images with transparency.

        Covered by existing tests.

        * platform/image-decoders/ImageDecoder.h:
        (ImageFrame):
        (WebCore::ImageFrame::fixPointUnsignedMultiply):
        (WebCore::ImageFrame::setRGBA):

2012-12-11  Kihong Kwon  <kihong.kwon@samsung.com>

        Vibration API: IDL type doesn't match implementation type
        https://bugs.webkit.org/show_bug.cgi?id=103899

        Reviewed by Kentaro Hara.

        According to WebIDL, "unsigned long" corresponds to "unsigned" in the platform.
        Therefore unsigned long need to be changed to unsigned for the Vibration API.
        - Change a parameter type of vibrate function from unsigned long to unsigned.

        No new tests, it is covered by exist test.

        * Modules/vibration/NavigatorVibration.cpp:
        (WebCore::NavigatorVibration::vibrate):
        * Modules/vibration/NavigatorVibration.h:
        (NavigatorVibration):
        * Modules/vibration/Vibration.cpp:
        (WebCore::Vibration::vibrate):
        * Modules/vibration/Vibration.h:
        (Vibration):
        * Modules/vibration/VibrationClient.h:
        (VibrationClient):
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        Remove workaround codes for the Vibration API which is mapped from unsigned long to unsigned long.
        It should be mapped from unsigned long to unsigned by WebIDL spec.
        (GetNativeVectorInnerType):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence):

2012-12-11  Xinazhu Wang  <wangxianzhu@chromium.org>

        ScrollingCoordinator::hasVisibleSlowRepaintFixedObject() should exclude out-of-view fixed position elements
        https://bugs.webkit.org/show_bug.cgi?id=102543

        Let RenderLayerCompositor manage the reasons that fixed position elements are not composited.
        Check the reason in ScrollingCoordinator::hasVisibleSlowRepaintFixedObjects(), don't let fixed position layer not composited with explicit reasons cause slow scrolling.

        Reviewed by James Robinson.

        Test: compositing/layer-creation/fixed-position-out-of-view-scroll-reason.html

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintFixedObjects): Exclude fixed position elements that are not composited for explicit reasons.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Manages m_fixedPositionLayerNotCompositedReasonMap.
        (WebCore::RenderLayerCompositor::needsToBeComposited):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::fixedPositionLayerNotCompositedReason): Now outputs fixedPositionLayerNotCompositedreason.
        (RenderLayerCompositor):

2012-12-11  Hayato Ito  <hayato@chromium.org>

        [Shadow DOM] Kill ShadowRoot constructor
        https://bugs.webkit.org/show_bug.cgi?id=102913

        Reviewed by Dimitri Glazkov.

        Remove ShadowRoot constructor in favor of Element.webkitCreateShadowRoot().

        No new tests. Update existing tests.

        * dom/ShadowRoot.idl:
        * page/DOMWindow.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::createShadowRoot):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-12-11  Antti Koivisto  <antti@apple.com>

        Add Element-specific traversal functions
        https://bugs.webkit.org/show_bug.cgi?id=104685

        Reviewed by Ryosuke Niwa.

        In many cases where we use NodeTraversal we really only want Elements. By having
        Element specific iteration functions we can tighten the code and make it faster too.

        This patch adds ElementTraversal namespace, similar to NodeTraversal. It also switches
        bunch of NodeTraversal call sites that obviously only care about elements to using
        the new interface.
        
        This should be a speedup too as we avoid number of branches by not having to look
        for children of non-ContainerNodes and by allowing use of ContainerNode specific
        accessors.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        * css/SelectorChecker.cpp:
        (WebCore::linkAttribute):
        (WebCore::SelectorChecker::allVisitedStateChanged):
        (WebCore::SelectorChecker::visitedStateChanged):
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::elementMatchesSelectorScopes):
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::collectDescendant):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        (WebCore::Document::updateBaseURL):
        (WebCore::Document::processBaseElement):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::get):
        * dom/Element.cpp:
        (WebCore::Element::firstElementChild):
        * dom/Element.h:
        (WebCore):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::collectSelectFeatureSetFrom):
        * dom/NodeTraversal.h:
        (ElementTraversal):
        (WebCore):
        (WebCore::ElementTraversal::traverseNextElementTemplate):
        (WebCore::ElementTraversal::next):
        (WebCore::ElementTraversal::firstWithin):
        (WebCore::ElementTraversal::traverseNextElementSkippingChildrenTemplate):
        (WebCore::ElementTraversal::nextSkippingChildren):
        (NodeTraversal):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::labelElementForId):
        (WebCore::TreeScope::findAnchor):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::invalidateDisabledStateUnder):
        (WebCore::HTMLFieldSetElement::childrenChanged):
        (WebCore::HTMLFieldSetElement::legend):
        (WebCore::HTMLFieldSetElement::refreshElementsIfNeeded):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::control):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::associatedControl):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::mapMouseEvent):
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::virtualItemAfter):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ShadowRootContentDistributionData::ensureInsertionPointList):
        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusCandidateInContainer):
        * rendering/RenderCounter.cpp:
        (WebCore::nextInPreOrder):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::collectIntersectionOrEnclosureList):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title):
        * svg/SVGUseElement.cpp:
        (WebCore::removeDisallowedElementsFromSubtree):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateDocumentOrderIndexes):

2012-12-11  KyungTae Kim  <ktf.kim@samsung.com>

        [soup] Unused parameter in ResourceHandleSoup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=104728

        Reviewed by Kentaro Hara.

        The soupLogPrinter has unused parameter 'logger', 
        remove the parameter name to fix 'unused parameter' build warning.

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

2012-12-11  Xianzhu Wang  <wangxianzhu@chromium.org>

        Fixed position out-of-view check is incorrect when page is scaled
        https://bugs.webkit.org/show_bug.cgi?id=104303

        Reviewed by Kenneth Rohde Christiansen.

        Test: compositing/layer-creation/fixed-position-out-of-view-scaled.html
              compositing/layer-creation/fixed-position-out-of-view-scaled-scroll.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition): Scale the content rect of the fixed position layer before checking out-of-view.

2012-12-11  Chris Rogers  <crogers@google.com>

        Implement OfflineAudioContext constructor
        https://bugs.webkit.org/show_bug.cgi?id=104188

        Reviewed by Kentaro Hara.

        The Web Audio layout tests have relied on an undocumented way (in the specification) to render
        audio faster than realtime using an OfflineAudioContext.  We want to expose a proper OfflineAudioContext
        object and constructor instead of piggybacking off of the normal AudioContext.
            
        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::isSampleRateRangeGood):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/webaudio/OfflineAudioContext.cpp: Added.
        (WebCore):
        (WebCore::OfflineAudioContext::create):
        (WebCore::OfflineAudioContext::OfflineAudioContext):
        (WebCore::OfflineAudioContext::~OfflineAudioContext):
        * Modules/webaudio/OfflineAudioContext.h: Added.
        (WebCore):
        (OfflineAudioContext):
        * Modules/webaudio/OfflineAudioContext.idl: Added.
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitOfflineAudioContextEnabled):
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallbackCustom):

2012-12-11  Jun Jiang  <jun.a.jiang@intel.com>

        WebGL: Avoid unnecessary memory copy or conversion in texImage2D and texSubImage2D for HTMLVideoElement
        https://bugs.webkit.org/show_bug.cgi?id=102161

        Reviewed by Kenneth Russell.

        There are several memory copy or conversions in the texImage2D and texSubImage2D for HTMLVideoElement which may be avoided. This patch removes the redundant BackingStore copy if the corresponding Graphics port supports the DontCopyBackingStore behavior. Moreover, it optimizes the AlphaOp if the Image source is from HTMLVideoElement to avoid unnecessary Unmultiply or Premultiply operation in unpack/pack. 

        Already covered by current tests. 

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::texImage2DImpl):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::videoFrameToImage): add a parameter to choose BackingStore copy behavior.
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::ImageExtractor):
        * platform/graphics/GraphicsContext3D.h:
        (ImageExtractor):
        (WebCore::GraphicsContext3D::ImageExtractor::imageSourceUnpackAlignment):
        (WebCore::GraphicsContext3D::ImageExtractor::imageHtmlDomSource):
        * platform/graphics/ImageBuffer.h:
        (ImageBuffer):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage): optimize the AlphaOp for HTMLVideoElement input.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::fastCopyImageMode):
        (WebCore):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::fastCopyImageMode):
        (WebCore):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::fastCopyImageMode):
        (WebCore):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage): optimize the AlphaOp for HTMLVideoElement input.
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::fastCopyImageMode):
        (WebCore):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::fastCopyImageMode):
        (WebCore):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::fastCopyImageMode):
        (WebCore):

2012-12-11  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        [EFL] Missing implementation of GraphicsContext3DPrivate::platformLayerSize()
        https://bugs.webkit.org/show_bug.cgi?id=104726

        Reviewed by Kenneth Rohde Christiansen.

        Add common implementation of GraphicsContext3DPrivate::platformLayerSize() similar
        to Qt version. There is nothing platform specific in Qt version. 

        Covered by existing tests.

        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (GraphicsContext3DPrivate::platformLayerSize):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):

2012-12-11  No'am Rosenthal  <noam@webkit.org>

        [Texmap] Slightly improve readability of the antialias shader
        https://bugs.webkit.org/show_bug.cgi?id=104708

        Reviewed by Martin Robinson.

        Modify the antialiasing shader to include separate function that perform
        discrete operations, rather than one big function that repeats the same
        operations.

        No new tests, readability fix.

        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::getShaderSpec):

2012-12-11  Tim Horton  <timothy_horton@apple.com>

        -webkit-svg-shadow radius changes don't cause children's boundaries to be recomputed
        https://bugs.webkit.org/show_bug.cgi?id=104722
        <rdar://problem/12821080>

        Reviewed by Simon Fraser.

        Changes to -webkit-svg-shadow currently cause a relayout of the directly affected renderer
        and its parents, but not its children. However, children have the shadow radius
        baked into their cached boundaries, so these need to be invalidated.

        Test: svg/repaint/repaint-webkit-svg-shadow-container.html

        * rendering/RenderObject.h: Expose needsBoundariesUpdate().
        * rendering/svg/RenderSVGContainer.h: Expose needsBoundariesUpdate().
        * rendering/svg/RenderSVGImage.h: Expose needsBoundariesUpdate().
        * rendering/svg/RenderSVGRoot.h: Expose needsBoundariesUpdate().
        * rendering/svg/RenderSVGShape.h: Expose needsBoundariesUpdate().
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren): If the renderer has a shadow and
        is in needs of a boundaries update, mark children as needing boundaries updates too.

2012-12-11  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add window.internals.mainThreadScrollReasonsAsText for testing slow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=104714

        Reviewed by Eric Seidel.

        No new tests. Adds test api for bug 102543 and other bugs.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::ScrollingCoordinator::mainThreadScrollingReasonsAsText): Extracted from ScrollingStateScrollingNode::dumpProperties for layout tests.
        (WebCore):
        * page/Page.h:
        (Page):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::mainThreadScrollingReasonsAsText):
        (WebCore):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::dumpProperties): Moved code for mainThreadScrollingReasons to ScrollingCoordinator.cpp.
        * testing/Internals.cpp:
        (WebCore::Internals::mainThreadScrollingReasons):
        (WebCore):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-12-11  Simon Fraser  <simon.fraser@apple.com>

        Enhance the TileCache to cache more tiles
        https://bugs.webkit.org/show_bug.cgi?id=104612

        Reviewed by Tim Horton.

        Add smarts to the TileCache so that it keeps some tiles around
        for longer and can prepopulate tiles in to-be-scrolled-to regions.

        The new tile management is as follows:
        * As before, we expand the visible rect to create a "tile coverage rect"
        which is twice the width, and three times the height of the visible rect.
        * At the edges, this coverage rect is constrained by them, rather than being
        truncated as before (leading to larger initial tile coverage).
        * When tiles leave the coverage rect, we keep them around but track
        them in cohorts (where a cohort is a set of tiles that left the coverage rect
        at the same time).
        * If a repaint comes in for a "secondary" tile, we don't paint it, but mark
        the tile as being stale. It will get repainted (in full) if it moves back inside
        the coverage rect.
        * Cohorts are kept around for 2 seconds after they were created. A repeating
        1-second timer clears tiles in old cohorts.
        * Secondary tiles are pruned if the visible rect changes, or if zooming happens.
        * TiledBacking exposes a way to prepopulate a rect with tiles; this is called
        when scrolling (e.g. via Home/End keys). Tiles created this way (if outside
        the coverage rect) go into a cohort.

        * page/FrameView.cpp:
        (WebCore::FrameView::requestScrollPositionUpdate): Tell the TiledBacking
        to prepopulate some tiles.
        * platform/graphics/TiledBacking.h:
        (TiledBacking): Add prepopulateRect().
        * platform/graphics/ca/mac/TileCache.h:
        (TileInfo): The TileMap contains TileInfos, which contain a pointer
        to the layer, their cohort, and a 'stale content' flag.
        (WebCore::TileCache::TileInfo::TileInfo):
        (TileCache):
        (TileCohortInfo):
        (WebCore::TileCache::TileCohortInfo::TileCohortInfo):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        (WebCore::TileCache::~TileCache):
        (WebCore::TileCache::setNeedsDisplay):
        (WebCore::TileCache::setNeedsDisplayInRect):
        (WebCore::TileCache::setTileNeedsDisplayInRect):
        (WebCore::TileCache::setScale):
        (WebCore::TileCache::setAcceleratesDrawing):
        (WebCore::TileCache::setTilesOpaque):
        (WebCore::TileCache::prepopulateRect):
        (WebCore::TileCache::setTileDebugBorderWidth):
        (WebCore::TileCache::setTileDebugBorderColor):
        (WebCore::TileCache::computeTileCoverageRect):
        (WebCore::TileCache::tileSizeForCoverageRect):
        (WebCore::TileCache::tileRevalidationTimerFired):
        (WebCore::TileCache::blankPixelCount):
        (WebCore::queueTileForRemoval):
        (WebCore::TileCache::removeAllTiles):
        (WebCore::TileCache::removeAllSecondaryTiles):
        (WebCore::TileCache::removeTilesInCohort):
        (WebCore::TileCache::revalidateTiles):
        (WebCore::TileCache::nextTileCohort):
        (WebCore::TileCache::startedNewCohort):
        (WebCore::TileCache::newestTileCohort):
        (WebCore::TileCache::oldestTileCohort):
        (WebCore::TileCache::scheduleCohortRemoval):
        (WebCore::TileCache::cohortRemovalTimerFired):
        (WebCore::TileCache::ensureTilesForRect):
        (WebCore::TileCache::tileGridExtent):
        (WebCore::TileCache::tileCoverageRect):
        (WebCore::TileCache::tileLayerAtIndex):
        (WebCore::TileCache::drawTileMapContents):

2012-12-11  Simon Fraser  <simon.fraser@apple.com>

        Remove redundant AffineTransform in RenderSVGShape::fillAndStrokeShape()
        https://bugs.webkit.org/show_bug.cgi?id=104736

        Reviewed by Dean Jackson.

        RenderSVGShape::fillAndStrokeShape() allocated a AffineTransform on
        the stack which was shadowed by another one in narrower scope. It
        can be removed.

        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::fillAndStrokeShape):

2012-12-11  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Remove unused headers
        https://bugs.webkit.org/show_bug.cgi?id=104661

        Reviewed by Ryosuke Niwa.

        Header inclusion cleanup.
        Remove "NotImplemented.h".

        No new tests, no behavior change.

        * platform/efl/CursorEfl.cpp:
        * platform/efl/FileSystemEfl.cpp:
        * platform/efl/ScrollViewEfl.cpp:
        * platform/efl/ScrollbarThemeEfl.cpp:
        * platform/efl/SoundEfl.cpp:

2012-12-11  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Stub out data operations on IDBDatabaseBackendInterface
        https://bugs.webkit.org/show_bug.cgi?id=104592

        Reviewed by Dimitri Glazkov.

        In preparation for removing objectStore/index backend
        interfaces, stub out the basic data operations around
        get, put, cursors, etc. on IDBDatabaseBackendInterface.

        No new tests, this is just preparation for refactoring.

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::get):
        (WebCore):
        (WebCore::IDBDatabaseBackendImpl::put):
        (WebCore::IDBDatabaseBackendImpl::setIndexKeys):
        (WebCore::IDBDatabaseBackendImpl::setIndexesReady):
        (WebCore::IDBDatabaseBackendImpl::openCursor):
        (WebCore::IDBDatabaseBackendImpl::count):
        (WebCore::IDBDatabaseBackendImpl::deleteRange):
        (WebCore::IDBDatabaseBackendImpl::clear):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (WebCore):
        (IDBDatabaseBackendInterface):

2012-12-11  Roger Fong  <roger_fong@apple.com>

        Make Video Track compile on Windows in debug mode.
        https://bugs.webkit.org/show_bug.cgi?id=104720.

        Reviewed by Alexey Proskuryakov.

        urlForLogging method was defined in both HTMLMediaElement.cpp and HTMLTrackElement.cpp. 
        On Windows all the HTMLElements sources are included in an AllInOne source file, 
        so the definitions conflicted. Fixed by renaming the definition in each source file.

        * html/HTMLMediaElement.cpp:
        (WebCore::urlForLoggingMedia):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        (WebCore::HTMLMediaElement::didRemoveTrack):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        (WebCore::HTMLMediaElement::sourceWasRemoved):
        * html/HTMLTrackElement.cpp:
        (WebCore::urlForLoggingTrack):
        (WebCore::HTMLTrackElement::canLoadUrl):

2012-12-11  Ryosuke Niwa  <rniwa@webkit.org>

        Mail hangs when resizing the font size of a large RTL text
        https://bugs.webkit.org/show_bug.cgi?id=104643

        Reviewed by Enrica Casucci.

        The bug was caused by ApplyStyleCommand::applyInlineStyleToNodeRange obtaining computed styles while
        removing and adding nodes. Fixed the slowness by breaking it into three phases:
        1. Split the range into contiguous inline runs, and determine whether styles need to be removed or applied.
        2. Remove any conflicting styles, and insert dummy elements at positions where inline styles ought to be
        computed as needed.
        3. Remove the dummy elements and apply ilnine styles as needed.

        No new tests are added since there is no behavior change. This is just a performance improvement. 

        * editing/ApplyStyleCommand.cpp:
        (WebCore::InlineRunToApplyStyle::InlineRunToApplyStyle):
        (WebCore::InlineRunToApplyStyle::startAndEndAreStillInDocument):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::shouldApplyInlineStyleToRun):
        (WebCore::ApplyStyleCommand::removeConflictingInlineStyleFromRun):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        (WebCore::ApplyStyleCommand::positionToComputeInlineStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange):
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.h:
        (WebCore::StyleChange::StyleChange):

2012-12-11  Xianzhu Wang  <wangxianzhu@chromium.org>

        Incorrect position of layers for fixed position elements when page is scaled smaller than viewport
        https://bugs.webkit.org/show_bug.cgi?id=104294

        Reviewed by James Robinson.

        Fixed issue in scrollOffsetForFixedPosition when contentRect is smaller than visibleContentRect.
        This happens when a page originally bigger than viewport is scaled down to smaller than the viewport.

        Test: compositing/geometry/fixed-position-composited-page-scale-smaller-than-viewport.html

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::fixedPositionScrollOffset): Moved common code in scrollOffsetForFixedPosition here. Fixed issue when contentsSize < visibleContentSize.
        (WebCore::scrollOffsetForFixedPosition):

2012-12-11  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=104725
        Crash in EventHandler::selectCursor() on Mac bots running 
        fast/events/mouse-cursor-image-set.html

        Reviewed by Tim Horton.

        https://bugs.webkit.org/show_bug.cgi?id=99493 enabled image-set for 
        the CSS cursor property. Most of the change is guarded behind #if 
        ENABLE(MOUSE_CURSOR_SCALE). However, image-set was still allowed to 
        parse for the cursor property as long as image-set is enabled 
        (which is the current state on the Mac). This would lead to an 
        inconsistent state where style information would reflect a world 
        where mouse cursor scaling is enabled even though nothing else on 
        the Mac would. 

        The parsing should also be guarded by the cursor scaling flag.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

2012-12-11  Emil A Eklund  <eae@chromium.org>

        Clamp out-of-range numbers in CSS
        https://bugs.webkit.org/show_bug.cgi?id=102735

        Reviewed by Simon Fraser.

        Currently when a large number (outside of the supported range)
        is applied from a style rule or set from javascript using
        Element.style we check if it is within the supported range and
        set it to zero if it is not. This is incorrect and confusing.
        
        Change it to clamp values to the supported range. This matches
        the behavior in Gecko.

        Test: fast/css/large-numbers.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLength):
        Change to clamp out-of-range values instead of interpreting them
        as zero.

2012-12-11  Nate Chapin  <japhet@chromium.org>

        Ensure ResourceRequests for main resources include fragment indentifiers when necessary,
        regressed by r137333.
        https://bugs.webkit.org/show_bug.cgi?id=104721

        Rubber-stamped by Dimitri Glazkov.

        No new tests.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):

2012-12-11  Huang Dongsung  <luxtella@company100.net>

        [GTK] REGRESSION(r135620): Accelerated Compositing does not draw some pages.
        https://bugs.webkit.org/show_bug.cgi?id=104640

        Reviewed by Noam Rosenthal.

        After r135620, Accelerated Compositing does not draw some pages, because
        r135620 changes the tree-traversal behavior.  Before r135620, we
        returned early if TextureMapperLayer can not get TextureMapper from the
        root layer. However, after r135620, we run the tree-traversal even if
        TextureMapperLayer can not get TextureMapper.  This patch makes
        TextureMapperLayer return early like code before r135620.

        Covered by existing tests.

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

2012-12-11  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12771885> Support ruby-position: {before, after}
        https://bugs.webkit.org/show_bug.cgi?id=103569

        Reviewed by Anders Carlsson.

        Specified in <http://www.w3.org/TR/2011/WD-css3-ruby-20110630/#rubypos>, the ruby-position
        property takes four values: before, after, inter-character, and inline. This change adds
        support for the values before and after.

        Test: fast/ruby/position-after.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Handle ruby-position.
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue): Accept before and after as valid values for
        ruby-position.
        (WebCore::isKeywordPropertyID): Added ruby-position to the list of properties with keyword
        values.
        (WebCore::CSSParser::parseValue): Added ruby-position to the switch statement.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added mapping from RubyPosition.
        (WebCore::CSSPrimitiveValue::operator RubyPosition): Added mapping from CSSPrimitiveValue.
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty): Added ruby-position as an inherited property.
        * css/CSSPropertyNames.in: Added -webkit-ruby-position.
        * css/CSSValueKeywords.in: Added after and before.
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder): Added a handler for ruby-position.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty): Added ruby-position.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection): Changed to choose which of
        hasAnnotationsBefore and hasAnnotationsAfter to set based on ruby position.
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment): Changed to adjust only for
        ruby positioned before the base.
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment): Added adjustment for ruby
        positioned after the base.
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout): Account for ruby-position when positioning the ruby text
        relative to the base.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): Made a ruby-position difference a layout difference.
        * rendering/style/RenderStyle.h: Added rubyPosition(), setRubyPosition(), and 
        initialRubyPosition().
        * rendering/style/RenderStyleConstants.h: Added the RubyPosition enum.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Added initialized for
        m_rubyPosition. Added copying the value of this member to the copy constructor.
        (WebCore::StyleRareInheritedData::operator==): Added comparison of m_rubyPosition.
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData): Added m_rubyPosition member variable.

2012-12-11  Michael Pruett  <michael@68k.org>

        [JSC] Add tests for explicit serialization values
        https://bugs.webkit.org/show_bug.cgi?id=104423

        Reviewed by Oliver Hunt.

        Add tests for serialization and deserialization mechanisms of
        the JSC implementation of SerializedScriptValue. Similar tests
        already exist for the V8 implementation.

        Test: platform/jsc/fast/storage/serialized-script-value.html

        * WebCore.exp.in:
        * testing/Internals.cpp:
        (WebCore::Internals::serializeObject):
        (WebCore::Internals::deserializeBuffer):

2012-12-11  Alexis Menard  <alexis@webkit.org>

        Cleanup: Use consistent naming in CSSParser when dealing with the forward slash operator.
        https://bugs.webkit.org/show_bug.cgi?id=104699

        Reviewed by Daniel Bates.

        http://trac.webkit.org/changeset/136525 added an helper function to
        check if a CSSParserValue is a forward slash operator.
        BorderImageParseContext is also dealing with the forward slash operator
        but its naming is inconsistent with isForwardSlashOperator(). This is
        fixed with this patch where BorderImageParseContext::{allowSlash,
        commitSlash}() is now replaced by BorderImageParseContext::{allowForwardSlashOperator,
        commitForwardSlashOperator}().

        No new tests : just a renaming, covered by existing tests..

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillPosition): A little fixup on the way, use
        isForwardSlashOperator() instead of the current code here.
        (WebCore::BorderImageParseContext::BorderImageParseContext):
        (WebCore::BorderImageParseContext::allowForwardSlashOperator):
        (WebCore::BorderImageParseContext::commitImage):
        (WebCore::BorderImageParseContext::commitImageSlice):
        (WebCore::BorderImageParseContext::commitForwardSlashOperator):
        (WebCore::BorderImageParseContext::commitBorderWidth):
        (WebCore::BorderImageParseContext::commitBorderOutset):
        (WebCore::BorderImageParseContext::commitRepeat):
        (BorderImageParseContext):
        (WebCore::CSSParser::parseBorderImage):

2012-12-11  Nate Chapin  <japhet@chromium.org>

        cr-linux valgrind is showing leaks due to r137333.

        Rubber-stamped by Antti Koivisto.

        MainResourceLoader's destructor should call m_resource->removeClient(this) is m_resource is still non-null.
        The missing removeClient() call will leak the CachedResource.

        No new tests, should shut valgrind up.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::~MainResourceLoader):

2012-12-11  Andreas Kling  <akling@apple.com>

        REGRESSION(r133492): Heap-use-after-free in WebCore::Element::normalizeAttributes
        <http://webkit.org/b/104488>

        Reviewed by Antti Koivisto.

        Don't cache the AttrNodeList* in a local when iterating over an Element's Attr nodes since
        that pointer may go stale if JS runs in response to a DOMSubtreeModified event below Node::normalize().

        Test: fast/dom/normalize-attributes-mutation-event-crash.html

        * dom/Element.cpp:
        (WebCore::Element::normalizeAttributes):

2012-12-11  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        [GTK] Soup network logs are frequently interrupted by other logging messages
        https://bugs.webkit.org/show_bug.cgi?id=104668

        Reviewed by Martin Robinson.

        Set an external soup log printer that uses the WebKit logging
        infrastructure so that log messages are properly synchronized.

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

2012-12-11  Elliott Sprehn  <esprehn@chromium.org>

        Switch to new PseudoElement based :before and :after
        https://bugs.webkit.org/show_bug.cgi?id=104462

        Reviewed by Antti Koivisto.

        Switch to the new PseudoElement based generated content implementation
        that moves :before and :after into the DOM. This also switches to using
        the ComposedShadowTreeWalker for determining the siblings of PseudoElement's
        making the new generated content implementation support adding :before
        and :after into <input> elements.

        Tests: fast/css-generated-content/block-inside-inline.html
               fast/css-generated-content/box-orient.html

        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::ComposedShadowTreeWalker::pseudoAwareNextSibling):
        (WebCore):
        (WebCore::ComposedShadowTreeWalker::pseudoAwarePreviousSibling):
        (WebCore::ComposedShadowTreeWalker::traverseParent):
        * dom/ComposedShadowTreeWalker.h:
        (ComposedShadowTreeWalker):
        * dom/Element.cpp:
        (WebCore::Element::attach):
        (WebCore::Element::recalcStyle):
        * dom/Node.cpp:
        * dom/Node.h:
        (Node):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):
        (WebCore::NodeRenderingContext::createRendererForElementIfNeeded):
        * dom/Position.cpp:
        (WebCore::Position::Position):
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        * editing/visible_units.cpp:
        (WebCore::logicallyPreviousBox):
        (WebCore::logicallyNextBox):
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::childShouldCreateRenderer):
        * page/DragController.cpp:
        (WebCore::DragController::draggableNode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::splitBlocks):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::createReplacementRunIn):
        (WebCore::RenderBlock::isSelectionRoot):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        (RenderButton):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::nonPseudoNode):
        (RenderObject):
        (WebCore::RenderObject::clearNode):
        (WebCore::RenderObject::generatingNode):
        * rendering/RenderObjectChildList.cpp:
        * rendering/RenderObjectChildList.h:
        (RenderObjectChildList):
        * rendering/RenderRubyText.cpp:
        * rendering/RenderRubyText.h:
        (RenderRubyText):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2012-12-11  Jacky Jiang  <zhajiang@rim.com>

        [BlackBerry] Clean up unused defaultViewportArguments in RenderThemeBlackBerry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=104683

        Reviewed by Rob Buis.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::determineFullScreenMultiplier):

2012-12-11  Nate Chapin  <japhet@chromium.org>

        Route main resource loads through the memory cache.
        https://bugs.webkit.org/show_bug.cgi?id=49246

        Reviewed by Antti Koivisto.

        Note that this patch doesn't actually enable caching of main resources. That will be done in a later patch.
        The MainResourceLoader actually has an underlying SubresourceLoader (with the cache layer between them).
        In several places, the MainResourceLoader's SubresourceLoader is treated as special.

        No new tests, as this is primarily a refactor. A couple of expected results changed slightly.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setRequest):
        (WebCore::DocumentLoader::subresource):
        (WebCore::DocumentLoader::addSubresourceLoader): Because the SubresourceLoader underlying the main resource
            needs special handling in certain cases, track it separately from the real SubresourceLoaders.
        (WebCore::DocumentLoader::removeSubresourceLoader):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::cancel):
        (WebCore::MainResourceLoader::clearResource):
        (WebCore):
        (WebCore::MainResourceLoader::frameLoader):
        (WebCore::MainResourceLoader::request):
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
        (WebCore::MainResourceLoader::resourceData):
        (WebCore::MainResourceLoader::redirectReceived):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::responseReceived):
        (WebCore::MainResourceLoader::dataReceived):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::notifyFinished):
        (WebCore::MainResourceLoader::reportMemoryUsage):
        (WebCore::MainResourceLoader::handleSubstituteDataLoadNow):
        (WebCore::MainResourceLoader::load):
        (WebCore::MainResourceLoader::setDefersLoading):
        (WebCore::MainResourceLoader::defersLoading):
        (WebCore::MainResourceLoader::setShouldBufferData):
        (WebCore::MainResourceLoader::loader):
        (WebCore::MainResourceLoader::identifier):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):
        (WebCore::MainResourceLoader::documentLoader):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::defersLoading):
        (WebCore::ResourceLoader::cancelled):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainResponse):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForMainError):
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule):
        (WebCore::DocumentLoader::unschedule):

2012-12-11  Aaron Colwell  <acolwell@chromium.org>

        Update MediaSource to allow append() calls in "ended" state.
        https://bugs.webkit.org/show_bug.cgi?id=104581

        Reviewed by Eric Carlson.

        Updated append and setTimestampOffset to allow appending in the "ended" readyState. An append() call
        in the "ended" state now triggers a transition to the "open" state and allows the append to succeed.

        Tests: http/tests/media/media-source/video-media-source-append-in-ended-state.html
               http/tests/media/media-source/video-media-source-append-with-offset-in-ended-state.html
               http/tests/media/media-source/video-media-source-zero-byte-append-in-ended-state.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::append):
        (WebCore::MediaSource::setTimestampOffset):

2012-12-11  Robert Hogan  <robert@webkit.org>

        REGRESSION(r121789): Text not wrapping in presence of floating objects
        https://bugs.webkit.org/show_bug.cgi?id=101803

        Reviewed by David Hyatt.

        When determining if a line needs to offset to avoid any floats use RenderBlock::lineHeight() 
        to estimate the height of the line. If the container has floats stacked up with different widths
        that straddle the line, using a height of zero will make the first line think it has
        more width available than it actually does and it will end up extruding from its container.
        
        The logic for finding the offset of inline blocks and images needs to use a similar heuristic.
        So nextLineBreak() now updates the available width if it encounters a replaced element (e.g. inline block,
        image) at the start of a line, using the height of the element to decide which floats to avoid. 
        RenderBlock::computeInlineDirectionPositionsForLine() does the same thing when laying out the line.

        Tests: fast/block/float/floats-offset-image-quirk-lineheight.html
               fast/block/float/floats-offset-image-quirk.html
               fast/block/float/floats-offset-image-strict-lineheight.html
               fast/block/float/floats-offset-image-strict.html
               fast/block/float/floats-offset-inline-block-quirk-lineheight.html
               fast/block/float/floats-offset-inline-block-strict-lineheight.html
               fast/block/float/floats-offset-linebox-contain-block.html
               fast/block/float/floats-offset-linebox-contain-inline.html
               fast/block/float/floats-wrap-inside-inline-006.html
               fast/block/float/floats-wrap-inside-inline-007.html

        * rendering/RenderBlockLineLayout.cpp:
        (LineWidth):
        (WebCore::logicalHeightForLine):
            This method needs to cope with the quirk where an image alone on a line will get its descent stripped away so
            ignore the height of the line and use the height of the image in that case.
        (WebCore::LineWidth::updateAvailableWidth):
        (WebCore::updateLogicalInlinePositions):
        (WebCore):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForSegment):
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):

2012-12-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Install GObject DOM bindings headers in its own directory
        https://bugs.webkit.org/show_bug.cgi?id=104663

        Reviewed by Gustavo Noronha Silva.

        Move the headers from webkit to webkitdom directory.

        * bindings/gobject/GNUmakefile.am:
        * bindings/gobject/WebKitDOMBinding.h:
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMEventTarget.h:
        * bindings/gobject/WebKitDOMEventTargetPrivate.h:
        * bindings/gobject/WebKitDOMObject.h:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (Generate):
        (WriteData):
        * bindings/scripts/gobject-generate-headers.pl:
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.h:
        * bindings/scripts/test/GObject/WebKitDOMFloat64ArrayPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObjectPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetterPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructorPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTargetPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestExceptionPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterfacePrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListenerPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNodePrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObjPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.h:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructorsPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterfacePrivate.h:

2012-12-11  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Clean up unused interfaces in PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=104674

        Reviewed by Darin Fisher.

        Part of a refactoring series. See tracking bug 82948. Also, there
        were some function declarations that were supposed to be removed
        as part of bug 102699 but got left out of the final patch.

        * platform/chromium/PlatformSupport.h:
        (WebCore):
        (PlatformSupport):

2012-12-11  Joone Hur  <joone.hur@intel.com>, Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Update GraphicsLayerClutter
        https://bugs.webkit.org/show_bug.cgi?id=92045

        Reviewed by Gustavo Noronha Silva.

        Add more methods to GraphicsLayerClutter in order to run CSS 3D transforms 
        by using GraphicsLayerActor.

        No new tests. This will be covered by pixel tests for Qt and GTK+ accelerated
        compositing and 3D transforms.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore):
        (WebCore::GraphicsLayerClutter::GraphicsLayerClutter):
        (WebCore::idleDestroy):
        (WebCore::GraphicsLayerClutter::~GraphicsLayerClutter):
        (WebCore::GraphicsLayerClutter::setName):
        (WebCore::GraphicsLayerClutter::platformLayer): Returns the platform layer(ClutterAcotr).
        (WebCore::GraphicsLayerClutter::setNeedsDisplay): Update the display.
        (WebCore::GraphicsLayerClutter::setNeedsDisplayInRect): Update part of the Display.
        (WebCore::GraphicsLayerClutter::setAnchorPoint):
        (WebCore::GraphicsLayerClutter::setPosition):
        (WebCore::GraphicsLayerClutter::setSize):
        (WebCore::GraphicsLayerClutter::setTransform):
        (WebCore::GraphicsLayerClutter::setDrawsContent):
        (WebCore::GraphicsLayerClutter::setParent):
        (WebCore::GraphicsLayerClutter::setChildren):
        (WebCore::GraphicsLayerClutter::addChild):
        (WebCore::GraphicsLayerClutter::addChildAtIndex):
        (WebCore::GraphicsLayerClutter::addChildBelow):
        (WebCore::GraphicsLayerClutter::addChildAbove):
        (WebCore::GraphicsLayerClutter::replaceChild):
        (WebCore::GraphicsLayerClutter::removeFromParent):
        (WebCore::GraphicsLayerClutter::platformClutterLayerPaintContents):
        (WebCore::GraphicsLayerClutter::platformClutterLayerAnimationStarted):
        (WebCore::GraphicsLayerClutter::repaintLayerDirtyRects):
        (WebCore::GraphicsLayerClutter::computePositionRelativeToBase):
        (WebCore::GraphicsLayerClutter::flushCompositingState): Synchronize the corresponding Actors with the current 
        compositing states of this GraphicsLayer and its child layers. 
        (WebCore::GraphicsLayerClutter::recursiveCommitChanges):
        (WebCore::GraphicsLayerClutter::flushCompositingStateForThisLayerOnly): Commit batched changes non-recursively. 
        (WebCore::GraphicsLayerClutter::commitLayerChangesAfterSublayers): Reset layer changes after we recurse on children.
        (WebCore::GraphicsLayerClutter::noteSublayersChanged):
        (WebCore::GraphicsLayerClutter::noteLayerPropertyChanged):
        (WebCore::GraphicsLayerClutter::commitLayerChangesBeforeSublayers): Commit layer changes before we recurse on children.
        (WebCore::GraphicsLayerClutter::updateGeometry): Updated the position and size of the Actor.
        (WebCore::GraphicsLayerClutter::updateSublayerList): Updated the list of child Actors. 
        (WebCore::GraphicsLayerClutter::updateLayerNames):
        (WebCore::GraphicsLayerClutter::updateTransform):
        (WebCore::GraphicsLayerClutter::updateLayerDrawsContent):
        (WebCore::GraphicsLayerClutter::layerForSuperlayer):
        * platform/graphics/clutter/GraphicsLayerClutter.h:
        (WebCore):
        (WebCore::GraphicsLayerClutter::primaryLayer):
        (GraphicsLayerClutter):

2012-12-11  Jessie Berlin  <jberlin@apple.com>

        Revert incorrect build fix.

        * WebCore.exp.in:

2012-12-11  Jessie Berlin  <jberlin@apple.com>

        Fix the Mac build after r137261

        * WebCore.exp.in:

2012-12-11  Joone Hur  <joone.hur@intel.com>, Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Add GraphicsLayerActor
        https://bugs.webkit.org/show_bug.cgi?id=91940

        Reviewed by Gustavo Noronha Silva.

        GraphicsLayerActor, which is a new ClutterActor, represents a node in the GPU-renderable layer tree
        when accelerated compositing is enabled with Clutter as acceleration backend.
        This patch allows to support basic features of CSS 3D Transforms.

        No new tests. This will be covered by pixel tests for Qt and GTK+ accelerated
        compositing and 3D transforms.

        * GNUmakefile.list.am:
        * platform/graphics/clutter/GraphicsLayerActor.cpp: Added.
        (_GraphicsLayerActorPrivate):
        (graphics_layer_actor_class_init): GObject configuration of a new Clutter Actor.
        (graphics_layer_actor_init): Initialization of the private data of this actor.
        (graphicsLayerActorSetProperty): GObject property setter.
        (graphicsLayerActorGetProperty): GObject property getter.
        (graphicsLayerActorDispose): Called to drop all references to other objects.
        (graphicsLayerActorAllocate):  Called to set the coordinates of an actor.
        (graphicsLayerActorApplyTransform): Applying the transformation to an actor before painting it.
        (graphicsLayerActorPaint): Called to paint the actor.
        (graphicsLayerActorDraw): Called each time a ClutterCairoTexture has been invalidated.
        (graphicsLayerActorAdded): Called each time an actor has been added to container.
        (graphicsLayerActorRemoved): Called each time an actor is removed from container.
        (graphicsLayerActorNew): Create a specific layer type of GraphicsLayerActor object.
        (graphicsLayerActorNewWithClient): Create a specific layer type of GraphicsLayerActor object with 
        its PlatformClutterClientLayer.
        (graphicsLayerActorSetClient): Added setter to set the PlatformClutterClientLayer.
        (graphicsLayerActorGetClient): Added getter to get the PlatformClutterClientLayer.
        (graphicsLayerActorRemoveAll): Remove all child actors.
        (graphicsLayerUpdateTexture): Create a ClutterCairoTexture.
        (graphicsLayerActorGetSurface): Added setter to set a cairo_surface_t.
        (graphicsLayerActorSetSurface): Added getter to get the cairo_surface_t.
        (graphicsLayerActorInvalidateRectangle):
        (graphicsLayerActorSetTransform): Set a CoglMatrix to apply matrix transform.
        (graphicsLayerActorSetAnchorPoint):
        (graphicsLayerActorGetAnchorPoint):
        (graphicsLayerActorSetScrollPosition):
        (graphicsLayerActorGetnChildren):
        (graphicsLayerActorReplaceSublayer):
        (graphicsLayerActorInsertSublayer):
        (graphicsLayerActorSetSublayers):
        (graphicsLayerActorGetLayerType):
        (graphicsLayerActorSetLayerType):
        (graphicsLayerActorSetTranslateX):
        (graphicsLayerActorGetTranslateX):
        (graphicsLayerActorSetTranslateY):
        (graphicsLayerActorGetTranslateY):
        (graphicsLayerActorSetDrawsContent): Added setter to paint content inside a layer.
        (graphicsLayerActorGetDrawsContent): Added getter to get the value of the drawsContent. 
        * platform/graphics/clutter/GraphicsLayerActor.h: Added.
        (_GraphicsLayerActor):
        (_GraphicsLayerActorClass):
        * platform/graphics/clutter/GraphicsLayerClutter.h:
        (WebCore):

2012-12-11  Mike West  <mkwst@chromium.org>

        Web Inspector: ConsoleTypes should not expose MessageType - it should be private to inspector.
        https://bugs.webkit.org/show_bug.cgi?id=66371

        Reviewed by Pavel Feldman.

        We can simplify console message generation a bit, as nothing outside the
        Console object itself will generate messages of any type other than
        LogMessageType. This patch refactors the externally-facing API endpoints
        on ScriptExecutionContext and Console to drop the MessageType parameter,
        moves the MessageType enum into a new InspectorConsoleTypes.h header,
        and updates all the call sites (and ChromeClients) to drop the parameter
        from their interfaces.

        As a temporary bandage for ports using this interface, this patch
        includes aliases for the new methods that retain the old interface.
        I'll remove them in a future patch.

        Here, we only refactor an internal interface. No tests should break.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            We added a new file! OMG!
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        * Modules/webdatabase/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::logErrorMessage):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::setBinaryType):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::didFailSocketStream):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * css/MediaList.cpp:
        (WebCore::addResolutionWarningMessageToConsole):
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        (Document):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::notifyFinished):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::performTask):
        (WebCore::ScriptExecutionContext::addConsoleMessage):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::create):
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::AddConsoleMessageTask):
        * dom/ViewportArguments.cpp:
        (WebCore::reportViewportWarning):
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::canLoadUrl):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::printWarningToConsole):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        * inspector/ConsoleAPITypes.h: Added.
        (WebCore):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorProfilerAgent.cpp:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::addMessageToConsole):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportLocalLoadFailed):
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::logWarning):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::corsPolicyPreventedLoad):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::abort):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        * page/ChromeClient.h:
        (ChromeClient):
            Drop LogMessageType from everywhere.
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        (WebCore::internalAddMessage):
        (WebCore::Console::error):
        (WebCore::Console::log):
        (WebCore::Console::warn):
        (WebCore::Console::dir):
        (WebCore::Console::dirxml):
        (WebCore::Console::clear):
        (WebCore::Console::trace):
        (WebCore::Console::assertCondition):
        * page/Console.h:
        (Console):
            Create a new internalAddMessage that's used for the various
            Console message types. Everything else routes through
            ::addMessage.
        * page/ConsoleTypes.h:
            Drop MessageTypes from this file, add it to ConsoleAPIType.h
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::logToConsole):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck):
        (WebCore::DOMWindow::printErrorMessage):
        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::reportMessage):
        * workers/DefaultSharedWorkerRepository.cpp:
        (SharedWorkerProxy):
        (WebCore::postConsoleMessageTask):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::logExceptionToConsole):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::addMessageToWorkerConsole):
        * workers/WorkerContext.h:
        (WorkerContext):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::postConsoleMessageTask):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        * workers/WorkerMessagingProxy.h:
        (WorkerMessagingProxy):
        * workers/WorkerReportingProxy.h:
        (WorkerReportingProxy):
        * xml/XMLHttpRequest.cpp:
        (WebCore::logConsoleError):
        (WebCore::XMLHttpRequest::send):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTMessageHandler::handleMessage):
            Drop LogMessageType from everywhere.

2012-12-11  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Unreviewed, rolling out r137313 and r137316 because they broke the system-sqlite build.

        * WebCore.pri:

2012-12-11  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed Qt build fix: Don't error out if SQLITE3SRCDIR isn't set but
        we have a system sqlite to use.

        * WebCore.pri:

2012-12-11  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] make qtbase source requirement explicit

        Reviewed by Simon Hausmann.

        getting rid of QT.<module>.sources references, as they don't go well
        with real modularization.

        * WebCore.pri:

2012-12-11  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] move SQLITE3SRCDIR assignment to only use site

        Reviewed by Simon Hausmann.

        Target.pri includes WebCore.pri the almost first thing, so that is
        covered as well.

        * WebCore.pri:

2012-12-11  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Timeline: rename "Parse" to "Parse HTML".
        https://bugs.webkit.org/show_bug.cgi?id=104639

        Reviewed by Yury Semikhatsky.

        "Parse" sounds ambiguous, it could mean JSON.parse() or Date.parse().
        "Parse HTML" is a much more clear record description.

        * inspector/front-end/TimelinePresentationModel.js: Fix text.

2012-12-11  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] change setup of QMAKE_MOC

        Reviewed by Simon Hausmann.

        don't load(moc) explicitly - turns out that this breaks
        debug_and_release builds (the feature does not like being loaded before
        default_post has been loaded).
        so instead just do a minimal call to find the moc executable.

        as it's in fact only two files which need it, so de-centralize this call
        for the sake of saving some cpu cycles spent in qmake.

        * DerivedSources.pri:

2012-12-11  Alexander Pavlov  <apavlov@chromium.org>

        REGRESSION(r136948): inspector/styles/import-pseudoclass-crash.html hits an assertion
        https://bugs.webkit.org/show_bug.cgi?id=104473

        Reviewed by Vsevolod Vlasov.

        Avoid building full CSSOM wrappers up front during rule matching.
        Instead, move this code down to the point where these wrappers are actually needed.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willMatchRule):
        (WebCore::InspectorCSSAgent::willProcessRule):
        * inspector/InspectorCSSAgent.h:
        (WebCore):
        (InspectorCSSAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        (WebCore::InspectorInstrumentation::willProcessRuleImpl):

2012-12-11  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [GStreamer] Avoid linking to GStreamer video libraries if only using ENABLE_AUDIO
        https://bugs.webkit.org/show_bug.cgi?id=104590

        Reviewed by Philippe Normand.

        Make getVideoSizeAndFormatFromCaps() only available when ENABLE_VIDEO is set.

        No new tests, no change in behavior.

        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        * platform/graphics/gstreamer/GStreamerVersioning.h:

2012-12-11  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] Fix transparency for WebGL content.
        https://bugs.webkit.org/show_bug.cgi?id=104659

        When drawing a texture to the TextureMapper the flag SupportsBlending
        must be passed in order to allow for transparent webgl content.
        We are doing this for GLX already, but the flag was still missing
        in GraphicsSurfaceMac.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):

2012-12-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Duplicate emulated touch events in iframe
        https://bugs.webkit.org/show_bug.cgi?id=104653

        Reviewed by Vsevolod Vlasov.

        Synthetic touch events should be dispatched only on the frame containing its target, not on its ancestor frames,
        up to the top frame.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled):
          Do not dispatch a synthetic touch event on the current frame if its target is in a subframe.

2012-12-11  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Regression(r137211) WebGL is broken with NVIDIA Drivers.
        https://bugs.webkit.org/show_bug.cgi?id=104652.

        Reviewed by Kenneth Rohde Christiansen.

        Reverting some of the changes from r137211, as it causes regressions
        on NVIDIA drivers.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (GraphicsContext3DPrivate::copyToGraphicsSurface):
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::updateContents):
        * platform/graphics/opengl/GLPlatformSurface.h:
        (GLPlatformSurface):

2012-12-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: follow up to r136974: do not process shortcuts while editing
        https://bugs.webkit.org/show_bug.cgi?id=104440

        Reviewed by Alexander Pavlov.

        Currently, typing H while editing node results in corresponding shortcut processing.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline):
        (WebInspector.ElementsTreeOutline.prototype.handleShortcut):
        (WebInspector.ElementsTreeElement.prototype.onenter):
        (WebInspector.ElementsTreeElement.prototype._startEditingAttribute):
        (WebInspector.ElementsTreeElement.prototype.dispose):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML):
        (WebInspector.ElementsTreeElement.prototype._editingCancelled):

2012-12-11  Ken Kania  <kkania@chromium.org>

        [Inspector] Add command for dispatching mouse events.
        https://bugs.webkit.org/show_bug.cgi?id=104074

        Reviewed by Yury Semikhatsky.

        Platform mouse event coordinates are relative to the containing window,
        but the inspector command assumes they follow standard web coordinates,
        where the origin is at the top left of the page and y increases as you
        go down. We convert the coordinates to the window before constructing
        the event. This also fixes the fact that some platforms have flipped
        coordinate systems.
        Also, update dispatchKeyEvent test to follow simpler dispatchMouseEvent
        test.

        Test: inspector-protocol/input/dispatchMouseEvent.html

        * inspector/Inspector.json:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::dispatchMouseEvent):
        (WebCore):
        * inspector/InspectorInputAgent.h:
        (InspectorInputAgent):

2012-12-11  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: follow up to r137283: reduce inspector toolbar spacing 1px.

        * inspector/front-end/inspector.css:
        (body.dock-to-bottom:not(.show-toolbar-icons) .toolbar-item.toggleable):
        (body.dock-to-bottom:not(.show-toolbar-icons) .toolbar-item.toggleable.toggled-on):

2012-12-11  Kent Tamura  <tkent@chromium.org>

        Refactoring: Rename Element::shouldMatchReadOnlySelector and shouldMatchReadWriteSelector
        https://bugs.webkit.org/show_bug.cgi?id=104651

        Reviewed by Kentaro Hara.

        ':read-only' and ':read-write' are pseudo classes. They are not
        selectors in the context of these functions.  This patch rename them so
        that they contain 'pseudo class,' and make them match to an existing
        function, matchesFocusPseudoClass.

        No new tests. This shouldn't make behavior changes.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        (WebCore::Element::matchesReadOnlyPseudoClass):
        (WebCore::Element::matchesReadWritePseudoClass):
        * dom/Element.h:
        (Element):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::matchesReadOnlyPseudoClass):
        (WebCore::HTMLInputElement::matchesReadWritePseudoClass):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::matchesReadOnlyPseudoClass):
        (WebCore::HTMLTextAreaElement::matchesReadWritePseudoClass):
        * html/HTMLTextAreaElement.h:
        (HTMLTextAreaElement):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::matchesReadOnlyPseudoClass):
        (WebCore::SliderThumbElement::matchesReadWritePseudoClass):
        * html/shadow/SliderThumbElement.h:
        (SliderThumbElement):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::matchesReadOnlyPseudoClass):
        (WebCore::SpinButtonElement::matchesReadWritePseudoClass):
        * html/shadow/SpinButtonElement.h:
        (SpinButtonElement):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isReadOnlyControl):

2012-12-11  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: add more horizontal spacing for toolbar items in docked to bottom mode
        https://bugs.webkit.org/show_bug.cgi?id=104655

        Reviewed by Alexander Pavlov.

        Drive-by increase height to 26px.

        * inspector/front-end/inspector.css:
        (#toolbar):
        (body:not(.show-toolbar-icons) .toolbar-item):
        (body.dock-to-bottom:not(.show-toolbar-icons) .toolbar-item.toggleable):
        (body.dock-to-bottom:not(.show-toolbar-icons) .toolbar-item.toggleable.toggled-on):
        (body.show-toolbar-icons.dock-to-bottom .toolbar-item.toggleable):
        (#toolbar-dropdown-arrow):
        (#main):

2012-12-11  Keishi Hattori  <keishi@webkit.org>

        Use histogram enumeration in Calendar Picker so we can get stats on UI usage
        https://bugs.webkit.org/show_bug.cgi?id=104646

        Reviewed by Kent Tamura.

        Use histogram support to get stats on the calendar picker so we can improve the UI.

        No new tests.

        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker):
        (CalendarPicker.prototype.recordAction): Records action to histogram.
        (CalendarPicker.prototype.handleToday): Record action.
        (CalendarPicker.prototype.handleClear): Ditto.
        (YearMonthController.prototype._showPopup): Ditto.
        (YearMonthController.prototype._handleYearMonthChange): Ditto.
        (YearMonthController.prototype._handleButtonClick): Ditto.
        (DaysTable.prototype._handleDayClick): Ditto.
        * page/PagePopupController.cpp:
        (WebCore::PagePopupController::histogramEnumeration):
        (WebCore):
        * page/PagePopupController.h:
        (PagePopupController):
        * page/PagePopupController.idl: Added histogramEnumeration.

2012-12-11  Hajime Morrita  <morrita@google.com>

        IsActiveFlag, IsHoverFlag, InActiveChainFlag can be unified.
        https://bugs.webkit.org/show_bug.cgi?id=103697

        Reviewed by Ryosuke Niwa.

        To save two more NodeFlags bits, this patch inroduces
        UserActionElementSet to get IsLinkFlag, IsHoverFlag,
        InActiveChainFlag together. These three old flags are replaced by
        UserActionElementSet::ElementFlags and UserActionElementSet
        collection which tracks elements which are flagged with one of
        a ElementFlags.

        When marking an element as active for example, WebKit sets
        UserActionElementSet::IsActiveFlag to the element and store it
        into corresponding element set of the document. This set maintains
        marked elements and corresponding flags for each elements.

        UserActionElementSet can be seen as a yet another rare data for
        these flags. However, the following characteristics of these flags
        make adding a new data structure on Document an attractive
        alternative:

        - UserActionElementSet is maintained for each Document instead of a
          global collecton. This fits element lifetime better.

        - The number of elements which have these flags is generally
          small, and a group of elements for each flag is largely overlapped
          due to its nature. This property keeps the set small, and lets
          flag retrieval efficient. On majority of the elements, all these
          flags are false thus the check is done by just checking
          IsInUserActionFlag.

        As a bonus, isFocused flag, which was on NodeRareData, is also moved to this model.

        No new tests, covered by existing test.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::updateHoverActiveState):
        * dom/Document.h:
        (WebCore::Document::userActionElements): Added.
        (Document):
        * dom/Node.cpp:
        (WebCore::Node::detach):
        * dom/Node.h:
        (WebCore):
        (WebCore::Node::isUserActionElement): Added.
        (WebCore::Node::setUserActionElement): Added.
        (Node):
        (WebCore::Node::active): Switched to UserActionElementSet.
        (WebCore::Node::inActiveChain): Switched to UserActionElementSet.
        (WebCore::Node::hovered): Switched to UserActionElementSet.
        (WebCore::Node::focused): Switched to UserActionElementSet.
        (WebCore::Node::setFocus): Switched to UserActionElementSet.
        (WebCore::Node::setActive): Switched to UserActionElementSet.
        (WebCore::Node::setHovered): Switched to UserActionElementSet.
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):
        * dom/UserActionElementSet.cpp: Added.
        (WebCore):
        (WebCore::UserActionElementSet::instanceFor):
        (WebCore::UserActionElementSet::UserActionElementSet):
        (WebCore::UserActionElementSet::~UserActionElementSet):
        (WebCore::UserActionElementSet::didDetach):
        (WebCore::UserActionElementSet::documentDidRemoveLastRef):
        (WebCore::UserActionElementSet::hasFlags):
        (WebCore::UserActionElementSet::setFlags):
        (WebCore::UserActionElementSet::clearFlags):
        * dom/UserActionElementSet.h: Added.
        (WebCore):
        (UserActionElementSet):
        (WebCore::UserActionElementSet::create):
        (WebCore::UserActionElementSet::isFocused):
        (WebCore::UserActionElementSet::setFocused):
        (WebCore::UserActionElementSet::isActive):
        (WebCore::UserActionElementSet::setActive):
        (WebCore::UserActionElementSet::isInActiveChain):
        (WebCore::UserActionElementSet::setInActiveChain):
        (WebCore::UserActionElementSet::isHovered):
        (WebCore::UserActionElementSet::setHovered):
        (WebCore::UserActionElementSet::setFlags):

2012-12-11  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Disable focus navigation by right/left keys in RTL locales
        https://bugs.webkit.org/show_bug.cgi?id=104644

        Reviewed by Hajime Morita.

        Pressing the left key should focus on the field at the left of the
        current focused field, and pressing the right key should focus on the
        field at the right of the current focused field. This works well in LTR
        locales.
        In RTL locale, the current code doesn't work. We disable this behavior
        for RTL locales for now. This issue will be handled in Bug 104650.

        No new tests. Update some *-multiple-fields tests for new behavior.

        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::defaultKeyboardEventHandler):
        If this sub-field is in an RTL locale, we don't change focus.
        (WebCore::DateTimeFieldElement::localeForOwner):
        Moved from DateTimeNumericFieldElement.
        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement): Remove isRTL, add localeForOwner.
        * html/shadow/DateTimeNumericFieldElement.cpp: Remove localeForOwner.
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement): Ditto.

2012-12-11  Pavel Podivilov  <podivilov@google.com>

        Remove pango files deleted at r137263 form WebCore.gypi.

        Unreviewed, gardening.

        * WebCore.gypi:

2012-12-11  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Feature enabling/disabling should be possible through build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=99271

        Reviewed by Gustavo Noronha Silva.

        Move the contents of GNUmakefile.features.am into GNUmakefile.features.am.in.
        The former is then copied from the latter but then appropriately modified if
        the build-webkit script overrides any of the default feature defines.

        No new tests - no new testable functionality.

        * GNUmakefile.features.am.in: Renamed from Source/WebCore/GNUmakefile.features.am.

2012-12-11  Jinwoo Song  <jinwoo7.song@samsung.com>

        [QT][EFL][WK2] Move the GraphicsSurfaceGLX.cpp to common place
        https://bugs.webkit.org/show_bug.cgi?id=104433

        Reviewed by Kenneth Rohde Christiansen.

        QT and EFL are commonly using the GraphicsSurfaceGLX.cpp and
        it looks better to move this file to /glx directory.

        * PlatformEfl.cmake:
        * Target.pri:
        * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp: Renamed from Source/WebCore/platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp.
        (WebCore):
        (OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::getXWindow):
        (WebCore::OffScreenRootWindow::display):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (WebCore::GraphicsSurfacePrivate::createPixmap):
        (WebCore::GraphicsSurfacePrivate::textureIsYInverted):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
        (WebCore::GraphicsSurfacePrivate::display):
        (WebCore::GraphicsSurfacePrivate::glxPixmap):
        (WebCore::GraphicsSurfacePrivate::size):
        (WebCore::resolveGLMethods):
        (WebCore::GraphicsSurface::platformExport):
        (WebCore::GraphicsSurface::platformGetTextureID):
        (WebCore::GraphicsSurface::platformCopyToGLTexture):
        (WebCore::GraphicsSurface::platformCopyFromTexture):
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        (WebCore::GraphicsSurface::platformFrontBuffer):
        (WebCore::GraphicsSurface::platformSwapBuffers):
        (WebCore::GraphicsSurface::platformSize):
        (WebCore::GraphicsSurface::platformCreate):
        (WebCore::GraphicsSurface::platformImport):
        (WebCore::GraphicsSurface::platformLock):
        (WebCore::GraphicsSurface::platformUnlock):
        (WebCore::GraphicsSurface::platformDestroy):
        (WebCore::GraphicsSurface::platformBeginPaint):
        (WebCore::GraphicsSurface::createReadOnlyImage):

2012-12-11  Mike West  <mkwst@chromium.org>

        Web Inspector: Evaluate private browsing mode's effect on console messages.
        https://bugs.webkit.org/show_bug.cgi?id=104383

        Reviewed by Pavel Feldman.

        Two sets of console messages are currently gated on private browsing
        mode being inactive. This patch centralizes the private browsing checks
        in order to apply them equally to all console messages, and changes the
        granularity at which they act.

        The current checks block the console messages entirely. This patch
        blocks only notifications to ChromeClient and ensures that messages
        won't be passed to printf where they might end up in system logs.
        Notifications to InspectorInstrumentation seem safe; so far as I can
        tell, there's no compelling reason to prevent console-based debugging
        in private browsing mode. This patch excludes those calls from the
        private browsing check.

        Test: inspector/console/clients-ignored-in-privatebrowsing.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
            Drop the private browsing check.
        * page/Console.cpp:
        (WebCore::Console::addMessage):
            Add private browsing checks to the two ::addMessage variants that
            do real work. Ensure that calls to printf and notifications to
            ChromeClients are gated on these checks, but always allow
            notifications to InspectorInstrumentation.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::printErrorMessage):
            Drop the private browsing check.

2012-12-10  Dan Winship  <danw@gnome.org>

        [Soup] Fix spelling of "initiating" in API.

        Reviewed by Martin Robinson.

        No new tests (just internal renaming).

        * platform/network/ResourceHandle.h:
        (ResourceHandle):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore):
        (WebCore::setSoupRequestInitiatingPageIDFromNetworkingContext):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::getSoupRequestInitiatingPageID):

2012-12-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the Pango backend
        https://bugs.webkit.org/show_bug.cgi?id=104569

        Reviewed by Daniel Bates.

        Remove the Pango backend entirely. The EFL build has no support for it and it's
        not really maintained enough for the GTK+ port, now that HarfbuzzNG shapes complex
        text when Freetype is the active text rendering backend.

        No new tests. This does not change behavior.

        * GNUmakefile.am: Remove Pango backend options and move Freetype options to the common list.
        * GNUmakefile.list.am: Ditto.
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/pango/FontCachePango.cpp: Removed.
        * platform/graphics/pango/FontCustomPlatformDataPango.cpp: Removed.
        * platform/graphics/pango/FontPango.cpp: Removed.
        * platform/graphics/pango/FontPlatformData.h: Removed.
        * platform/graphics/pango/FontPlatformDataPango.cpp: Removed.
        * platform/graphics/pango/GlyphPageTreeNodePango.cpp: Removed.
        * platform/graphics/pango/PangoUtilities.cpp: Removed.
        * platform/graphics/pango/PangoUtilities.h: Removed.
        * platform/graphics/pango/SimpleFontDataPango.cpp: Removed.

2012-12-11  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [WebGL] prevent GC from collecting WebGLObject instances currently bound to the context state
        https://bugs.webkit.org/show_bug.cgi?id=104119

        Reviewed by Pavel Feldman.

        This is to prevent GC from collecting resources bound to a context (WebGL or 2D).
        Otherwise, for example in WebGL, subsequent calls to gl.getParameter() may return a recently created
        instance that is no longer bound to a Resource object (thus, no history to replay it later).

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-12-11  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed build fix after r137243.

        * bindings/gobject/GNUmakefile.am:

2012-12-10  No'am Rosenthal  <noam@webkit.org>

        REGRESSION (r137006): CSS clip on solid color composited div broken
        https://bugs.webkit.org/show_bug.cgi?id=104604

        Reviewed by Simon Fraser.

        Disable direct compositing of background color for clipping layers.

        Test: compositing/geometry/clip-inside.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::supportsDirectBoxDecorationsComposition):
            Never allow direct background composition if there is a clip.

2012-12-10  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r137215): WebKit stretches and shrinks a part of screen on scroll
        https://bugs.webkit.org/show_bug.cgi?id=104626

        Reviewed by Beth Dakin.

        r137215 removed a compositing layer repaint on size changes. However, there
        are cases where the compositing code constrains layer size by clipping
        with the viewport and a clipping ancestor. When that happens, we must
        invalidate the layer on a size change to avoid showing stretched or
        shrunken content.

        Test: compositing/repaint/clipped-layer-size-change.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

2012-12-10  Dean Jackson  <dino@apple.com>

        Remove old WebKit Animation API code
        https://bugs.webkit.org/show_bug.cgi?id=104611

        Reviewed by Simon Fraser.

        Remove the existing, unused animation API code. We'll look into
        implementing the W3C Animation API if/when it is stable.

        * CMakeLists.txt: Remove WebKitAnimation and WebKitAnimationList classes.
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp: Remove includes.
        * bindings/js/JSWebKitAnimationCustom.cpp: Removed.
        * bindings/js/JSWebKitAnimationListCustom.cpp: Removed.
        * dom/Element.cpp: Remove API.
        * dom/Element.h: Ditto.
        * dom/Element.idl: Ditto.
        * page/DOMWindow.idl: Ditto.
        * page/WebKitAnimation.cpp: Removed.
        * page/WebKitAnimation.h: Removed.
        * page/WebKitAnimation.idl: Removed.
        * page/WebKitAnimationList.cpp: Removed.
        * page/WebKitAnimationList.h: Removed.
        * page/WebKitAnimationList.idl: Removed.
        * page/animation/AnimationController.cpp: Remove API.
        * page/animation/AnimationController.h: Ditto.
        * page/animation/AnimationControllerPrivate.h: Ditto.
        * page/animation/CompositeAnimation.cpp: Ditto.
        * page/animation/CompositeAnimation.h: Ditto.

2012-12-10  Jessie Berlin  <jberlin@apple.com>

        Fix the Mac build after r137233

        * html/shadow/HTMLShadowElement.h:
        Remove a declaration of a member variable that was moved to the InsertionPoint superclass.

2012-12-10  KyungTae Kim  <ktf.kim@samsung.com>

        Build fix after r137221
        https://bugs.webkit.org/show_bug.cgi?id=104617

        Unreviewed build fix

        * html/HTMLPropertiesCollection.cpp:
        (WebCore::nextNodeWithProperty):

2012-12-10  Hajime Morrita  <morrita@google.com>

        [Shadow DOM][Refactoring] HTMLContentElement,HTMLShadowElement::m_registeredWithShadowRoot should be moved to InsertionPoint
        https://bugs.webkit.org/show_bug.cgi?id=104516

        Reviewed by Dimitri Glazkov.

        This change pulls duplicated code in removedFrom() and
        insertedInto() of both both HTMLShadowElement and
        HTMLContentElement to their super class InsertionPoint.

        This is a part of effor that encapsulate node distribution algorithm to
        ContentDistributor and its family.

        No new tests, no behavior change.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::registerInsertionPoint): Added.
        (WebCore::ShadowRoot::unregisterInsertionPoint): Added.
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ShadowRootContentDistributionData::regiterInsertionPoint): Generalized two methods for <content> and <shadow>.
        (WebCore):
        (WebCore::ShadowRootContentDistributionData::unregisterInsertionPoint): Ditto.
        * html/shadow/ContentDistributor.h:
        (ShadowRootContentDistributionData):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::HTMLContentElement):
        * html/shadow/HTMLContentElement.h:
        * html/shadow/HTMLShadowElement.cpp:
        (WebCore::HTMLShadowElement::HTMLShadowElement):
        * html/shadow/HTMLShadowElement.h:
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        (WebCore::InsertionPoint::insertedInto): Pulled up from subclasses
        (WebCore::InsertionPoint::removedFrom): Pulled up from subclasses
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):

2012-12-10  Jon Lee  <jonlee@apple.com>

        Keep track of plug-in snapshots clicked by user
        https://bugs.webkit.org/show_bug.cgi?id=103206
        <rdar://problem/12746483>

        Reviewed by Anders Carlsson.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Initially the hash is
        unknown. Set to 0. Move the check for whether to snapshot the plugin into the
        new function subframeLoaderWillLoadPlugIn.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Rename
        setPendingClickEvent to userDidClickSnapshot. In addition to holding onto the
        click event used to activate the plug-in, the function now also tells the plug-in
        client to add the origin hash as an auto-start origin.
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillLoadPlugIn): Calculate the
        hash based on the provided URL, which is the URL the plug-in will load. Extend
        the check that used to be in the constructor to see if the plug-in should not
        automatically load, including checking the plug-in size and whether the hash
        is an auto-start origin.
        * html/HTMLPlugInImageElement.h: Rename setPendingClickEvent to userDidClickSnapshot
        and add a variable for the origin hash.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestPlugin): When the loader is about to load the
        plug-in, pass the URL to the element, so that it can calculate the hash.

        * page/Page.cpp:
        (WebCore::Page::Page): Take the plugInClient from the page clients.
        (WebCore::Page::~Page): If the client exists, tell it that the page is being
        destroyed.
        (WebCore::Page::PageClients::PageClients): Initialize this optional client to
        null.
        * page/Page.h: Add PlugInClient to page clients.
        (PageClients): Add PlugInClient variable.
        (WebCore::Page::plugInClient):
        * page/PlugInClient.h: Added.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::handleEvent): Call the renamed function
        userDidClickSnapshot().
        (WebCore::RenderSnapshottedPlugIn::layout): Move the check of the plug-in size
        to subframeLoaderWillLoadPlugIn.

        Add PlugInClient.h.
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-12-10  Antti Koivisto  <antti@apple.com>

        Not reviewed.
        
        Build fix.

        * html/HTMLPropertiesCollection.cpp:
        (WebCore::nextNodeWithProperty):
        * page/TouchDisambiguation.cpp:
        (WebCore::boundingBoxForEventNodes):

2012-12-10  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=104602
        DidHitRelevantRepaintedObjectsAreaThreshold LayoutMilestone fires too 
        early on some pages with iframes

        Reviewed by Simon Fraser.

        This change makes it so that any RenderObjects inside iframes are not 
        considered relevant.
        * page/Page.cpp:
        (WebCore::Page::addRelevantRepaintedObject):

2012-12-10  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Propagate more leveldb errors to script
        https://bugs.webkit.org/show_bug.cgi?id=104422

        Reviewed by Tony Chang.

        These are the last places that ignore leveldb errors that can get the
        usual ok/found treatment.

        Nothing called getBool, so it is deleted.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore):
        (WebCore::getInt):
        (WebCore::isSchemaKnown):
        (WebCore::setUpMetadata):
        (WebCore::getMaxObjectStoreId):
        (WebCore::IDBBackingStore::open):
        (WebCore::IDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::getNewDatabaseId):
        (WebCore::IDBBackingStore::createIDBDatabaseMetaData):
        (WebCore::setMaxObjectStoreId):
        (WebCore::getNewVersionNumber):
        (WebCore::IDBBackingStore::putRecord):
        (WebCore::setMaxIndexId):
        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreStorageOperation::perform):

2012-12-09  Antti Koivisto  <antti@apple.com>

        Factor node traversal into standalone functions
        https://bugs.webkit.org/show_bug.cgi?id=104507

        Reviewed by Eric Seidel.

        Node traversal functions are currently Node and ContainerNode members. Their implementations
        are confusingly scattered over multiple header and source files. These functions have no particular
        reason to be members as they don't require non-public access. They should be made freestanding
        function instead and gathered together.
        
        This patch adds NodeTraversal namespace, defined in NodeTraversal.h. It contains freestanding
        functions for traversing Nodes. Most popular functions are inlined (as before) and
        there are ContainerNode specific specializations (as before).
        
        In client code
        
            node = node->traverseNextNode();
            node = node->traverseNextSibling();
        
        becomes
        
            node = NodeTraversal::next(node);
            node = NodeTraversal::nextSkippingChildren(node);
            
        etc.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::accessibilityDescriptionForElements):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::firstAccessibleObjectFromNode):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::allVisitedStateChanged):
        (WebCore::SelectorChecker::visitedStateChanged):
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/ContainerNode.h:
        (ContainerNode):
        (WebCore):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::collectDescendant):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        (WebCore::Document::removeAllEventListeners):
        (WebCore::Document::updateBaseURL):
        (WebCore::Document::processBaseElement):
        (WebCore::Document::nodeAbsIndex):
        (WebCore::Document::nodeWithAbsIndex):
        (WebCore::Document::getFocusableNodes):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::hasMarkers):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::get):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::collectSelectFeatureSetFrom):
        * dom/Node.cpp:
        (WebCore::Node::normalize):
        (WebCore::Node::lazyAttach):
        (WebCore):
        (WebCore::Node::detach):
        (WebCore::traverseTreeAndMark):
        * dom/Node.h:
        (Node):
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodePointer::moveToNext):
        (WebCore::NodeIterator::NodePointer::moveToPrevious):
        (WebCore::NodeIterator::updateForNodeRemoval):
        * dom/NodeTraversal.h: Added.
        (WebCore):
        (NodeTraversal):
        (WebCore::NodeTraversal::traverseNextNodeTemplate):
        (WebCore::NodeTraversal::next):
        (WebCore::NodeTraversal::traverseNextSiblingTemplate):
        (WebCore::NodeTraversal::nextSibling):
        * dom/Range.cpp:
        (WebCore::Range::toString):
        (WebCore::Range::checkDeleteExtract):
        (WebCore::Range::firstNode):
        (WebCore::Range::pastLastNode):
        (WebCore::Range::textRects):
        (WebCore::Range::textQuads):
        (WebCore::Range::getBorderAndTextQuads):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::labelElementForId):
        (WebCore::TreeScope::findAnchor):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveTreeToNewDocument):
        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::nextNode):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle):
        (WebCore::containsNonEditableRegion):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::firstEditablePositionInNode):
        (WebCore::DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPreventStyleLoss):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        * editing/EditCommand.cpp:
        (WebCore::SimpleEditCommand::addNodeAndDescendants):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::triStateOfStyle):
        (WebCore::EditingStyle::textDirectionForSelection):
        * editing/Editor.cpp:
        (WebCore::Editor::simplifyMarkup):
        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        (WebCore::FrameSelection::setSelectionFromNone):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        (WebCore::ReplacementFragment::removeInterchangeNodes):
        (WebCore::ReplaceSelectionCommand::InsertedNodes::willRemoveNodePreservingChildren):
        (WebCore::ReplaceSelectionCommand::InsertedNodes::willRemoveNode):
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::removeHeadContents):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::InsertedNodes::pastLastLeaf):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        (WebCore::shouldEmitNewlineAfterNode):
        * editing/htmlediting.cpp:
        (WebCore::hasARenderedDescendant):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontForSelection):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):
        (WebCore::findNodesSurroundingContext):
        (WebCore::trimFragment):
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/HTMLCollection.cpp:
        (WebCore::nextNode):
        * html/HTMLElement.cpp:
        (WebCore::setHasDirAutoFlagRecursively):
        (WebCore::HTMLElement::directionality):
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged):
        (WebCore::HTMLElement::getItemRefElements):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::invalidateDisabledStateUnder):
        (WebCore::HTMLFieldSetElement::refreshElementsIfNeeded):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::control):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::associatedControl):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::mapMouseEvent):
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::virtualItemAfter):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::collectOptionInnerText):
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::nextNodeWithProperty):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::recalcListItems):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::selection):
        (WebCore::HTMLTextFormControlElement::innerTextValue):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ShadowRootContentDistributionData::ensureInsertionPointList):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):
        * inspector/InspectorMemoryAgent.cpp:
        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusCandidateInContainer):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsAboveCell):
        (WebCore::Frame::searchForLabelsBeforeElement):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::collectIntersectionOrEnclosureList):
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGUseElement.cpp:
        (WebCore::removeDisallowedElementsFromSubtree):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateDocumentOrderIndexes):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis):
        * xml/XPathUtil.cpp:
        (WebCore::XPath::stringValue):

2012-12-10  Min Qin  <qinmin@chromium.org>

        Sending multi-touch events to the same Iframe
        https://bugs.webkit.org/show_bug.cgi?id=97973

        Reviewed by Dimitri Glazkov.

        Multi-Touch in different iframe can give both documents access to each other.
        This could cause cross-origin access. To solve this, all the touch events should
        be sent to the iframe where the first touchstart happens.

        Test: fast/events/touch/multi-touch-inside-iframes.html
              fast/events/touch/multi-touch-inside-nested-iframes.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:

2012-12-10  KyungTae Kim  <ktf.kim@samsung.com>

        [soup] Fix build warning in ResourceHandleSoup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=104605

        Reviewed by Martin Robinson.

        The nextMultipartResponsePartCallback has unused parameter 'source',
        comment out it to fix 'unused parameter' build warning.

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

2012-12-10  Simon Fraser  <simon.fraser@apple.com>

        Fix frame border painting in tiled drawing mode
        https://bugs.webkit.org/show_bug.cgi?id=104453
        <rdar://problem/11678611>

        Reviewed by Dan Bernstein.

        Frame borders were not correctly invalidated when in tiled drawing mode, because
        RenderFrameSet::layout() invalidated directly on the view, which skips the tile
        cache.
        
        Fix by invalidating like all other renderers, via the repaint container.
        
        Also, the layer transform should be updated before the invalidation, and
        we make use of RenderObject::updateLayerTransform() which has the same behavior
        as the old code.

        Attempts to make a layout test failed. Resizing composited framesets repainted
        via layer resizing, and an attempt to make a ref test in tiled drawing mode
        failed (the test passed without the patch).

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):

2012-12-10  Simon Fraser  <simon.fraser@apple.com>

        When converting a layer into a tiled layer, ensure that we update the visible rect
        https://bugs.webkit.org/show_bug.cgi?id=104467

        Reviewed by Darin Adler.

        When a GraphicsLayerCA toggles to use a TileCache, we have to ensure that the
        layer's visible rect (which is used to ensure tile coverage) is updated in
        the same commit. Otherwise we can get blank layers until something else causes
        the visible rect to be updated.

        Test: compositing/tiling/tiled-layer-resize.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties): With the debug flag, dump the TiledBacking
        address for ease of debugging.
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): Set the VisibleRectChanged bit in
        m_uncommittedChanges if we've just switched to a tiled layer.

2012-12-10  Simon Fraser  <simon.fraser@apple.com>

        Don't unconditionally repaint compositing layers when their size changes
        https://bugs.webkit.org/show_bug.cgi?id=104461

        Reviewed by Sam Weinig.

        RenderLayerBacking always repainted the entire compositing layer when its size
        changed. This was done to fix repaint issues when outline widths changes, but
        that issue is now solved by repainting in GraphicsLayer::setOffsetFromRenderer(),
        add in r134628. I believe this is no longer necessary.
        
        Always repainting when the size changes is terrible for the tile cache when
        loading large documents, as all tiles repaint every time the document gets
        longer.

        Test: compositing/repaint/resize-repaint.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2012-12-10  Ojan Vafai  <ojan@chromium.org>

        Unreviewed, rolling out r134150.
        http://trac.webkit.org/changeset/134150
        https://bugs.webkit.org/show_bug.cgi?id=99940

        Caused JS-based tooltips to remain during scroll on Facebook
        and Gmail. Rollout until I have time to experiment with less
        aggresive approaches.

        * page/EventHandler.cpp:
        (WebCore):
        (WebCore::MaximumDurationTracker::MaximumDurationTracker):
        (WebCore::MaximumDurationTracker::~MaximumDurationTracker):
        (MaximumDurationTracker):
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        * page/EventHandler.h:
        (EventHandler):
        * platform/Timer.h:

2012-12-10  Yi Shen  <max.hong.shen@gmail.com>

        Keyboard caret movement in textarea with RTL Override Character can make tab unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=103067

        Reviewed by Ryosuke Niwa.

        For textarea with RTL override character, the line break could be the previous leaf InlineTextBox of
        the InlineTextBox for the RTL override text. When overshots the left/right, make sure the 
        leftVisuallyDistinctCandidate and rightVisuallyDistinctCandidate return the visually distinct 
        left/right position by ignoring the line break.

        Test: editing/selection/move-by-character-crash-test-textarea.html

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):

2012-12-10  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WebGL] Minor Refactoring in GraphicsContext3DEfl.
        https://bugs.webkit.org/show_bug.cgi?id=104553.

        Reviewed by Kenneth Rohde Christiansen.

        We use different FBO for canvas and offscreen surface of our platform layer.
        Thus we need to manage any bound buffers while copying contents to the surface. Currently, Surface
        always uses double buffering but in future we should be able to configure it to use either
        double or single buffer. For these use cases, it would be handy to bind buffers directly to
        FBO used by the surface. This patch does the needed changes in GraphicsContext3DEfl and
        PlatformSurface. Also, removes some unused code.

        Covered by existing tests.

        Relevant changes in GraphicsContext3DEfl to obtain FBO id from PlatformSurface.
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):

        Renamed createGraphicsSurface to didResizeCanvas.
        (WebCore::GraphicsContext3D::createGraphicsSurfaces):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (GraphicsContext3DPrivate::didResizeCanvas):
        (GraphicsContext3DPrivate::copyToGraphicsSurface):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):

        Header cleanup.
        * platform/graphics/opengl/GLDefs.h:
        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore::GLPlatformContext::createContext):
        * platform/graphics/opengl/GLPlatformContext.h:

        Added initialize method to expose FBO id of the surface.
        Removed unused code.
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::initialize):
        (WebCore):
        (WebCore::GLPlatformSurface::updateContents):
        * platform/graphics/opengl/GLPlatformSurface.h:
        (GLPlatformSurface):
        * platform/graphics/surfaces/glx/GLXSurface.h:

2012-12-07  Simon Fraser  <simon.fraser@apple.com>

        Tidy up the tiled scrolling indicator, fix with zooming
        https://bugs.webkit.org/show_bug.cgi?id=104386

        Reviewed by Tim Horton.

        Fix the tiled scrolling indicator to not get tiny when zooming,
        to not poke out of the bottom of the window, and to not look
        so crappy.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::updateTileCoverageMap):
        (WebCore::TileCache::drawTileMapContents):

2012-12-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136817.
        http://trac.webkit.org/changeset/136817
        https://bugs.webkit.org/show_bug.cgi?id=104596

        This patch was an unnecessarily complex solution to handling
        conversion of union types. (Requested by mpruett on #webkit).

        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        (WebCore::JSDictionary::tryGetPropertyAndResult):

2012-12-10  Tab Atkins  <tabatkins@google.com>

        Deprecate prefixed linear-gradient and radial-gradient functions
        https://bugs.webkit.org/show_bug.cgi?id=104591

        Reviewed by Dean Jackson.

        Rename the old gradient parsing functions in anticipation of functions that parse the new syntax.

        No new tests added - this is a rename and has no functionality change.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseDeprecatedLinearGradient):
        (WebCore::CSSParser::parseDeprecatedRadialGradient):
        (WebCore::CSSParser::parseGeneratedImage):
        * css/CSSParser.h:

2012-12-10  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium][Win] Remove theme-related functions from PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=102699

        Reviewed by Adam Barth.

        Call theme engine directly instead of going through
        PlatformSupport. Part of a refactoring series. See tracking bug 82948.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumWin::paintButton):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):
        (WebCore::RenderThemeChromiumWin::paintButton):
        (WebCore::RenderThemeChromiumWin::paintSliderTrack):
        (WebCore::RenderThemeChromiumWin::paintSliderThumb):
        (WebCore::RenderThemeChromiumWin::paintMenuList):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):

2012-12-10  Dean Jackson  <dino@apple.com>

        Support for CSS widows and orphans
        https://bugs.webkit.org/show_bug.cgi?id=9410

        Reviewed by Darin Adler.

        The CSS 'widow' and 'orphan' properties were supported by the parser and
        style system, but were not actually doing anything in layout. Now they do!

        In order to not break existing content, I unfortunately had to go against
        the specification and change our default value from 2 to auto. A value of
        auto means that widows and orphans will not cause any page/column breaks.

        Supporting orphans was a small change. During line layout, if we realise
        we need to move to a new page in a situation that would create an orphan,
        move the entire block to the new page. There was already code to do this.

        Support for widows was trickier. When we finish laying out a block, count
        the number of hanging lines. If we've created a widow, and there are enough
        available lines on the previous page, then steal some and remember the line
        to break at. Trigger a relayout. Then notice the line that was marked for
        breaking and avoid the widow. This means some blocks go through layout
        twice, but as long as the widow value is small it shouldn't be a huge penalty.

        Tests: fast/multicol/widows-and-orphans.html (new test)
               printing/page-break-orphans.html
               printing/page-break-orphans-and-widows.html
               printing/page-break-widows.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Return CSSValueAuto for widows and orphans if necessary.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Support "auto" in widow and orphan property parsing.
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder): Change property handler to something that supports auto.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimation::ensurePropertyMap): Add widows and orphans to the animation map.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChild): Detect if we've caused a widow-fixing break, and request relayout evaluation.
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded): Test for a widow-fixing line.
        (WebCore::RenderBlock::setBreakAtLineToAvoidWidow): New function to remember where we should break on next layout.
        (WebCore::RenderBlock::adjustLinePositionForPagination): Move the entire block to a new page if this would create an orphan.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::shouldBreakAtLineToAvoidWidow): New function to indicate if we are remembering a widow.
        (WebCore::RenderBlock::clearShouldBreakAtLineToAvoidWidow): Reset the line breaks.
        (WebCore::RenderBlock::lineBreakToAvoidWidow):
        (WebCore::RenderBlock::RenderBlockRareData::RenderBlockRareData): Add a flag for indicating if we are remembering a line, and the actual line itself.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): The code to detect and fix widows. Explained above.
        * rendering/style/RenderStyle.h: New methods for indicating if widows and orphans are non-default values.
        * rendering/style/StyleRareInheritedData.cpp: Ditto.
        * rendering/style/StyleRareInheritedData.h: Ditto.

2012-12-10  Zan Dobersek  <zandobersek@gmail.com>

        REGRESSION (r118735): svg/dom/complex-svgView-specification.html, svg/dom/SVGViewSpec.html, svg/dom/viewspec-parser.html failing on GTK Linux 64-bit Release
        https://bugs.webkit.org/show_bug.cgi?id=87734

        Reviewed by Martin Robinson.

        Don't modify ResourceRequest's URL to have the value of the (encoded)
        URI of the SoupMessage. The only exception is in the case of cancelled
        SoupMessage - the URL of the ResourceRequest should then be null.

        No new tests - existing tests should show no regressions.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):

2012-12-10  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed distcheck fix.

        * GNUmakefile.list.am:

2012-12-10  Eric Seidel  <eric@webkit.org>

        Caused crashes in v8.  Rolling out until abarth can fix.  See cr-issue 165136 for more info
        https://bugs.webkit.org/show_bug.cgi?id=104575

        Unreviewed, just rolling out r136559.

        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::V8NodeFilterCondition):
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8NodeFilterCondition.h:
        (WebCore::V8NodeFilterCondition::create):
        (V8NodeFilterCondition):
        * dom/NodeFilter.h:

2012-12-10  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed build fix after r137167.

        * WebCore.xcodeproj/project.pbxproj: Add InbandTextTrackPrivate.h to framework private 
            headers.

2012-12-10  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build after a collision of two patches.

        Unreviewed build fix.

        * bindings/gobject/GNUmakefile.am: The GObject DOM bindings library needs to
        include the harfbuzz cflags when compiling.

2012-12-10  Parth Patel  <parpatel@rim.com>

        Make hiddenPageDomTimerInterval a setting
        https://bugs.webkit.org/show_bug.cgi?id=104555

        Reviewed by Yong Li.

        Make hiddenPageDomTimerInterval a setting so client can customize it.

        No new tests are needed.

        * page/Page.cpp:
        (WebCore):
        (WebCore::Page::setVisibilityState):
        * page/Settings.cpp:
        (WebCore):
        (WebCore::Settings::setHiddenPageDOMTimerAlignmentInterval):
        (WebCore::Settings::hiddenPageDOMTimerAlignmentInterval):
        * page/Settings.h:
        (Settings):

2012-12-10  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile fix in ImageCairoWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=104554

        Reviewed by Brent Fulgham.

        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize): Added parameter.
        (WebCore::BitmapImage::drawFrameMatchingSourceSize): Added parameter.

2012-12-10  Mike West  <mkwst@chromium.org>

        Log to console when script is blocked by sandbox attributes.
        https://bugs.webkit.org/show_bug.cgi?id=104365

        Reviewed by Ojan Vafai.

        Adds a console message to cover script execution blocked within the
        context of a sandboxed frame which lacks the 'allow-scripts' permission.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
            Log a warning when sandboxing flags block script execution.

2012-12-10  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash in NSAccessibilityUnignoredDescendant
        https://bugs.webkit.org/show_bug.cgi?id=104468

        Reviewed by Anders Carlsson.

        This crash occurred because AccessibilityScrollView stopped retaining it's ScrollView pointer.

        Unfortunately, there was still a case that didn't correctly clear that variable. 

        That case was when a Frame had a new FrameView associated with it. The old FrameView didn't inform the 
        accessibility object cache that it should be removed. As a result, when the FrameView deallocated and 
        did try to remove, it used the wrong AXObjectCache because it was no longer correctly hooked into the 
        document tree.

        No new tests. Existing tests will stop crashing.
 
        * page/Frame.cpp:
        (WebCore::Frame::setView): change the name of the method that tells the FrameView to detach
        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::removeFromAXObjectCache): add a method that can be called in multiple places
        (WebCore::FrameView::isFrameView):
        (WebCore::FrameView::prepareForDetach): detaches scrollbars and accessibility
        * page/FrameView.h:
        (FrameView):

2012-12-10  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Move getPluginsList out of PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=96507

        Reviewed by Darin Fisher.

        Part of a refactoring series. See tracking bug 82948.

        * WebCore.gypi:
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::PluginCache::plugins):
        * plugins/chromium/PluginListBuilder.cpp: Added.
        (WebKit):
        (WebKit::PluginListBuilder::addPlugin):
        (WebKit::PluginListBuilder::addMediaTypeToLastPlugin):
        (WebKit::PluginListBuilder::addFileExtensionToLastMediaType):
        * plugins/chromium/PluginListBuilder.h: Added.
        (WebKit):
        (PluginListBuilder):
        (WebKit::PluginListBuilder::PluginListBuilder):

2012-12-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Build GObject DOM bindings as a separate library
        https://bugs.webkit.org/show_bug.cgi?id=104527

        Reviewed by Xan Lopez.

        * bindings/gobject/GNUmakefile.am: Add libWebCoreDOM library.
        * bindings/gobject/WebKitDOMBinding.h: Define private macros.
        * bindings/gobject/WebKitDOMCustom.h: Don't include webkit/webkitdefines.h.
        * bindings/gobject/WebKitDOMEventTarget.h: Ditto.
        * bindings/gobject/WebKitDOMObject.h: Ditto.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (Generate): Don't include webkitglobalsprivate.h.
        (WriteData): Don't include webkit/webkitdefines.h.
        * bindings/scripts/gobject-generate-headers.pl: Define WEBKIT_API
        macro in webkitdomdefines.h.
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.h:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:

2012-12-10  Adam Klein  <adamk@chromium.org>

        In InbandTextTrackPrivate, return emptyAtoms instead of emptyString() by default.

        Unreviewed build fix.

        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::label):
        (WebCore::InbandTextTrackPrivate::language):

2012-12-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Native Memory Instrumentation: instrument RenderBox descendants.
        https://bugs.webkit.org/show_bug.cgi?id=104026

        Reviewed by Eric Seidel.

        Plain vanilla instrumentation for RenderBox descendants.

        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::reportMemoryUsage):
        (WebCore):
        (WebCore::RenderFrameSet::GridAxis::reportMemoryUsage):
        * rendering/RenderFrameSet.h:
        (RenderFrameSet):
        (GridAxis):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::reportMemoryUsage):
        (WebCore):
        * rendering/RenderListMarker.h:
        (RenderListMarker):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::reportMemoryUsage):
        (WebCore):
        * rendering/RenderReplaced.h:
        (RenderReplaced):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::reportMemoryUsage):
        (WebCore):
        * rendering/RenderTableCol.h:
        (RenderTableCol):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::reportMemoryUsage):
        (WebCore):
        * rendering/RenderTableRow.h:
        (RenderTableRow):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::reportMemoryUsage):
        (WebCore):
        (WebCore::RenderTableSection::RowStruct::reportMemoryUsage):
        (WebCore::RenderTableSection::CellStruct::reportMemoryUsage):
        * rendering/RenderTableSection.h:
        (CellStruct):
        (RowStruct):

2012-12-10  Alejandro Piñeiro  <apinheiro@igalia.com>

        AX: wrong Enabled states on a ListBox
        https://bugs.webkit.org/show_bug.cgi?id=104483

        Reviewed by Chris Fleizach.

        Test: accessibility/listbox-enabled-states.html

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isEnabled): taking into
        account the DISABLED attribute and the aria-disabled attribute to
        decide if the item is enabled or not.

2012-12-10  Adam Klein  <adamk@chromium.org>

        cr-win build fix after r137161.

        Unreviewed.

        * platform/graphics/MediaPlayer.h: Replace forward-decl of
        InbandTextTrackPrivate with #include as the definition is required.

2012-12-10  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Remove CSS3_BACKGROUND feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=104539

        Reviewed by Antonio Gomes.

        As discussed on webkit-dev it is not needed to keep this feature flag 
        as support for <position> type is a small feature that is already 
        implemented by three other UAs. It was useful while landing this 
        feature as partial bits were landed one after one.

        No new tests : the feature is covered by various tests and it is already enabled in many ports.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.features.am:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSParser.h:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillXPosition):
        (WebCore::CSSToStyleMap::mapFillYPosition):
        * rendering/style/FillLayer.cpp:
        (SameSizeAsFillLayer):
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::fillUnsetProperties):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::backgroundXOrigin):
        (WebCore::FillLayer::backgroundYOrigin):
        (WebCore::FillLayer::isBackgroundOriginSet):
        (WebCore::FillLayer::clearXPosition):
        (WebCore::FillLayer::clearYPosition):
        (FillLayer):

2012-12-10  Eric Carlson  <eric.carlson@apple.com>

        Add support for in-band text tracks to Mac port
        https://bugs.webkit.org/show_bug.cgi?id=103663

        Reviewed by Sam Weinig.

        Test: media/track/track-in-band.html

        * GNUmakefile.list.am: Move InbandTextTrackPrivate.h to platform/graphics. Add InbandTextTrackPrivateClient.h.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.

        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): No need to call processInbandTextTracks, in-band tracks
            are now registered by the media engine as they are discovered.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTrack): New, called by the media player when a new
            in-band track is found.
        (WebCore::HTMLMediaElement::mediaPlayerDidRemoveTrack): New, called by the media player when an
            in-band track goes away.
        * html/HTMLMediaElement.h:

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack): Use m_private instead of tracksPrivate because
            it is zeroed during assignment.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::addTextTrack): New MediaPlayerClient method to allow MediaPlayerPrivate subclasses
            to add a new in-band track.
        (WebCore::MediaPlayer::removeTextTrack): New MediaPlayerClient method to allow MediaPlayerPrivate subclasses
            to remove a new in-band track.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp: Added.
        (WebCore::InbandTextTrackPrivateAVF::InbandTextTrackPrivateAVF):
        (WebCore::InbandTextTrackPrivateAVF::~InbandTextTrackPrivateAVF):
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes): Convert an attribute string into WebVTT 
            cue setting and content strings.
        (WebCore::InbandTextTrackPrivateAVF::processCue): Process a new cue.
        (WebCore::InbandTextTrackPrivateAVF::disconnect): Clear member variables.
        (WebCore::InbandTextTrackPrivateAVF::resetCueValues): Reset cue values to defaults.
        (WebCore::InbandTextTrackPrivateAVF::setMode): Set track mode and call player's trackModeChanged.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h: Added.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp: Initialize 
            m_inbandTrackConfigurationPending.
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Flush the currently accumulating
            cue so it doesn't get the wrong duration.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Handle InbandTracksNeedConfiguration.
        (WebCore::MediaPlayerPrivateAVFoundation::flushCurrentCue): New, pass the current cue up to the client.
        (WebCore::MediaPlayerPrivateAVFoundation::configureInbandTracks): Configure in-band tracks.
        (WebCore::MediaPlayerPrivateAVFoundation::trackModeChanged): Schedule a call to configureInbandTracks.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm: Added.
        (WebCore::InbandTextTrackPrivateAVFObjC::InbandTextTrackPrivateAVFObjC):
        (WebCore::InbandTextTrackPrivateAVFObjC::disconnect):
        (WebCore::InbandTextTrackPrivateAVFObjC::kind): Return track kind.
        (WebCore::InbandTextTrackPrivateAVFObjC::label): Return track label.
        (WebCore::InbandTextTrackPrivateAVFObjC::language): Return track language.
        (WebCore::InbandTextTrackPrivateAVFObjC::isDefault): 
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItem):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize m_currentTrack.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Clear m_legibleOutput.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Create and initialize m_legibleOutput.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processTextTracks): Called when the player item's
            "tracks" changes, add and remove in-band text tracks as necessary.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): Pass an attributed string to the current 
            track to be processed.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Tell AVFoundation to select an in-band track.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTrack): Return the current track.
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]): Legible
            output delegate.

2012-12-10  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: fix front-end compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=104557

        Reviewed by Alexander Pavlov.

        Corresponding annotations added.

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightNode):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleDeclaration.prototype.):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._appendPropertyPreview):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.highlightDOMNode):
        * inspector/front-end/DOMPresentationUtils.js:
        (WebInspector.DOMPresentationUtils.linkifyNodeReference):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/Toolbar.js:

2012-12-10  Zeno Albisser  <zeno@webkit.org>

        [Qt] MediaPlayerQTKit broken after switching QPainter to raster engine.
        https://bugs.webkit.org/show_bug.cgi?id=104550

        With Qt5 QPainter changed to using the raster engine.
        Therefore we no longer have an NSGraphicsContext that we can
        use for drawing video frames.
        With this patch we are rendering the video frame into an image buffer
        and then paint it manually using QPainter.

        Reviewed by Simon Hausmann.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore):
        (WebCore::swapBgrToRgb):
            Swap the color format from BGR to RGB,
            since BGR is not supported by QImage.
        (WebCore::MediaPlayerPrivateQTKit::paint):

2012-12-10  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Link fix in InspectorController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=104556

        Reviewed by Pavel Feldman.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController): Added missing #if check.

2012-12-10  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove the Overrides / Settings context menu from gear icon
        https://bugs.webkit.org/show_bug.cgi?id=104546

        Reviewed by Alexander Pavlov.

        It sounds like too many people don't like the way it works. Bringing things back: overrides will be a tab in settings for now.
        Moving present behavior to under experiment.

        * inspector/front-end/OverridesView.js:
        (WebInspector.OverridesView):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.OverridesSettingsTab):
        (WebInspector.SettingsController):
        (WebInspector.SettingsController.prototype.get statusBarItem):
        (WebInspector.SettingsController.prototype._mouseDown.showSettings):
        (WebInspector.SettingsController.prototype._mouseDown):
        (WebInspector.SettingsController.prototype._mouseUp):
        * inspector/front-end/helpScreen.css:
        (#settings-screen .tabbed-pane-header):
        (#settings-screen .tabbed-pane-header-tabs):
        (#settings-screen .tabbed-pane-header-tab):

2012-12-10  Kent Tamura  <tkent@chromium.org>

        Visual order of empty value placeholder in INPUT_MULTIPLE_FIELDS_UI is wrong in RTL
        https://bugs.webkit.org/show_bug.cgi?id=104438

        Reviewed by Hajime Morita.

        No new tests. This updates datetimelocal-appearance-l10n.html for he-il
        and ar-eg locales.

        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::DateTimeNumericFieldElement):
        We should not append Right-to-left-mark to each of placeholder
        strings. It makes numeric field separators such as ':' and '/' RTL, and
        makes a wrong visual order. We use unicode-bidi:bidi-override and
        direction:ltr instead. It means we force LTR only to this element
        * html/shadow/DateTimeNumericFieldElement.h:
        Makes m_placeholder const again.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitLiteral):
        Explicitly set right-to-left-mark before S, WS, ON types according to
        Unicod Bidirectional Algorithm Table 4 [1]. This is needed because we
        don't have context like "This literal follows European/Arabic numbers"
        in a case of showing placeholders.
        [1] http://www.unicode.org/reports/tr9/#Bidirectional_Character_Types

2012-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [Soup] utilize multipart/x-mixed-replace support recently added to libsoup
        https://bugs.webkit.org/show_bug.cgi?id=94515

        Reviewed by Martin Robinson.

        The multipart/x-mixed-replace content type is often used for providing
        "push" server support, with each part in the multipart response
        replacing the previous one in the rendering. Soup recently acquired
        support for multipart/x-mixed replace, which this change utilizes.

        Covered by existing multipart/x-mixed-replace tests.

        * platform/network/ResourceHandleInternal.h:
        (ResourceHandleInternal): add new member to this class, the multipart input stream
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupSoupRequestOperation): also clear the multipart input stream on
        cleanup
        (WebCore::nextPartCallback): callback that handles reporting the new response delivered
        with the new part, if any; uses the factored out updateFromSoupMessageHeaders method
        (WebCore::sendRequestCallback): handle multipart/x-mixed-replace responses by
        requesting the next part
        (WebCore::readCallback): when reading has finished, request the next part when
        handling a multipart/x-mixed-replace response
        * platform/network/soup/ResourceResponse.h:
        (ResourceResponse): add declaration for new method
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage): call new updateFromSoupMessageHeaders
        method, instead of dealing with the message headers directly
        (WebCore::ResourceResponse::updateFromSoupMessageHeaders): new method, factored out from
        updateFromSoupMessage, so this same code can be reused for updating responses for
        multipart/x-mixed-replace responses parts

2012-12-10  Zoltan Nyul  <zoltan.nyul@intel.com>

        Implement testRunner.setViewModeMediaFeature() in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=103886

        Reviewed by Kenneth Rohde Christiansen.

        Export symbol for WebCore::Page::setViewMode on Mac.

        No new tests, no behavior change for layout tests.

        * WebCore.exp.in:

2012-12-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Bring Harfbuzz-ng support to Gtk
        https://bugs.webkit.org/show_bug.cgi?id=92098

        Reviewed by Gustavo Noronha Silva.

        Enable HarfBuzz support by default. With the Freetype backend we no longer
        fall back to Pango for rendering complex text.

        No new tests. This is covered by existing tests.

        * GNUmakefile.am: Add HarfBuzz include directories and define.
        * GNUmakefile.list.am: Add HarfBuzz files to source list and remove
        Pango ones.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::operator==): To properly render fallback
        fonts via HarfBuzz , it's important that we actually ask Fontconfig
        whether or not two patterns are the same. This ensures that when patterns
        are just copies of one another they only take up one slot in the font cache
        and appear to be the same font to HarfBuzzShaper.

2012-12-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Overrides] Unable to change values in Device Metrics override setting
        https://bugs.webkit.org/show_bug.cgi?id=104542

        Reviewed by Vsevolod Vlasov.

        Remove inadvertent object property assignment.

        * inspector/front-end/OverridesView.js:

2012-12-10  Michael Brüning  <michael.bruning@digia.com>

        [Qt] Builds for Mac are tied to the OS system instead of the SDK version.
        https://bugs.webkit.org/show_bug.cgi?id=104529

        Reviewed by Simon Hausmann.

        Using work by Eike Ziller <eike.ziller@digia.com>.

        The build system now first tries to assign the correct system libraries
        for the SDK being used for Mac builds. If this does not yield any
        result, it falls back to using the Mac OS version to determine the
        correct library.

        No new tests (not applicable).

        * WebCore.pri:

2012-12-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed: touch RenderingAllInOne.cpp to fix Apple Windows builder.

        * rendering/RenderingAllInOne.cpp:

2012-12-10  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Network: newly added items are not filtered.
        https://bugs.webkit.org/show_bug.cgi?id=104021

        Reviewed by Vsevolod Vlasov.

        Extracted method to higlight/hide record according to filter.
        Used this method to process newly created records.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._applyFilter): Extracted.
        (WebInspector.NetworkLogView.prototype.performFilter): Refactored.

2012-12-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Unreviewed: move reportMemoryUsage to public section.

        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.h:
        (RenderBox):

2012-12-08  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: adds an option to remove toolbar icons.
        https://bugs.webkit.org/show_bug.cgi?id=95654

        Reviewed by Vsevolod Vlasov.

        - removes compact mode in favor or dock-to-bottom
        - introduces setting for hiding toolbar icons

        * inspector/front-end/DockController.js:
        (WebInspector.DockController.prototype._toggleDockState):
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar.prototype.setDockedToBottom):
        (WebInspector.Toolbar.prototype._toolbarDragStart):
        (WebInspector.Toolbar.prototype._toolbarDrag):
        * inspector/front-end/helpScreen.css:
        (body.dock-to-bottom .help-content):
        * inspector/front-end/inspector.css:
        (body.dock-to-bottom #toolbar):
        (body.no-toolbar-icons #toolbar):
        (body.dock-to-bottom.port-qt #toolbar):
        (body.dock-to-bottom.inactive #toolbar):
        (body.no-toolbar-icons .toolbar-item.toggleable):
        (body.dock-to-bottom .toolbar-item.toggleable):
        (body.dock-to-bottom .toolbar-icon):
        (body.no-toolbar-icons .toolbar-icon):
        (body.no-toolbar-icons #main):
        (body.dock-to-bottom .toolbar-icon.custom-toolbar-icon):
        (body.dock-to-bottom .toolbar-item:active .toolbar-icon):
        (body.dock-to-bottom .toolbar-label):
        (body.dock-to-bottom #search-toolbar-label):
        (body.no-toolbar-icons .toolbar-label):
        (body.no-toolbar-icons #toolbar-dropdown):
        (#toolbar-dropdown .scrollable-content):
        (#toolbar-dropdown .toolbar-item.toggleable:hover):
        (body.no-toolbar-icons #toolbar-dropdown .toolbar-label):
        (body.no-toolbar-icons #toolbar-dropdown .toolbar-item):
        (body.dock-to-bottom .toolbar-item.resources .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.network .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.scripts .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.timeline .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.profiles .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.audits .toolbar-icon):
        (body.dock-to-bottom .toolbar-item.console .toolbar-icon):
        (body.dock-to-bottom.port-qt .toolbar-item.close-left, body.dock-to-bottom.port-qt .toolbar-item.close-right):
        (body.dock-to-bottom #main):

2012-12-10  Kent Tamura  <tkent@chromium.org>

        Refactoring: Remove HTMLFormControlElement::autofocus
        https://bugs.webkit.org/show_bug.cgi?id=104524

        Reviewed by Kentaro Hara.

        autofocus function is used only by HTMLFormControlElement itself, no
        sub-classes override it, and it is not exposed via an IDL attribute,

        No new tests. This doesn't make any behavior changes.

        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus): Use fastHasAttribute instead of autofocus().
        * html/HTMLFormControlElement.h: Remove autofocus().

2012-12-10  Jonathan Liu  <net147@gmail.com>

        Fix GC3Dintptr and GC3Dsizeiptr typedefs for Win64
        https://bugs.webkit.org/show_bug.cgi?id=104426

        Reviewed by Simon Hausmann.

        The GC3Dintptr and GC3Dsizeiptr typedefs are incorrect for Win64 as
        LLP64 is used there. This would result in compile error due to
        narrowing conversion of 64-bit pointer to signed long int which is
        32-bit.

        * platform/graphics/GraphicsTypes3D.h:

2012-12-10  Kent Tamura  <tkent@chromium.org>

        Refactoring: Introduce HTMLFormControlElement::isDisabledOrReadOnly
        https://bugs.webkit.org/show_bug.cgi?id=104508

        Reviewed by Kentaro Hara.

        We have a lot of code like element->disabled || element->readOnly().
        isDisabledOrReadOnly makes them simpler.

        No new tests. This make no behaivor change.

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isDisabledOrReadOnly):
        Added. Note that the implmentation of disabled() is not just "return m_disabled;".

        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent):
        Use isDisabledOrReadOnly.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldSpinButtonRespondToMouseEvents): Ditto.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isPickerIndicatorOwnerDisabledOrReadOnly): Ditto.
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::handleDOMActivateEvent): Ditto.
        (WebCore::ColorInputType::didChooseColor): Ditto.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::recalcWillValidate): Ditto.
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::valueMissing): Ditto.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent): Ditto.
        (WebCore::RangeInputType::handleTouchEvent): Ditto.
        (WebCore::RangeInputType::handleKeydownEvent): Ditto.
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::handleKeydownEvent): Ditto.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleKeydownEventForSpinButton): Ditto.
        (WebCore::TextFieldInputType::shouldSpinButtonRespondToMouseEvents): Ditto.
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler): Ditto.
        (WebCore::SearchFieldCancelButtonElement::willRespondToMouseClickEvents): Ditto.
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler): Ditto.
        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::defaultEventHandler): Ditto.
        (WebCore::TextFieldDecorationElement::willRespondToMouseMoveEvents): Ditto.
        (WebCore::TextFieldDecorationElement::willRespondToMouseClickEvents): Ditto.

2012-12-10  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: console broken? - console.dirxml behaves like console.log
        https://bugs.webkit.org/show_bug.cgi?id=104245

        Reviewed by Vsevolod Vlasov.

        Do not generate preview for dirxml.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsArray):

2012-12-10  Kent Tamura  <tkent@chromium.org>

        Refactoring: Remove HTMLFormControlElement::setDisabled
        https://bugs.webkit.org/show_bug.cgi?id=104510

        Reviewed by Kentaro Hara.

        Remove it because the number of call sites is only one, and the
        setDisabled implementation is equivalent to setBooleanAttribute.

        No new tests. This should not make behavior changes.

        * html/HTMLFormControlElement.cpp: Remove setDisabled.
        * html/HTMLFormControlElement.h: Ditto.
        * html/FileInputType.cpp:
        (WebCore::FileInputType::disabledAttributeChanged):
        Replace setDisabled with setBooleanAttribute.

2012-12-10  Hajime Morrita  <morrita@google.com>

        [Shadow DOM][Refacdtoring] nextTo() and previousTo() can be part of ContentDistribution
        https://bugs.webkit.org/show_bug.cgi?id=104514

        Reviewed by Kentaro Hara.

        InsertionPoint::nextTo() and InsertionPoint::previousTo() are an
        query to distributed nodes, which is what ContentDistribution
        represents. We can move them to better home.

        No new tests. No behavior change.

        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistribution::nextTo): Moved from InsertionPoint
        (WebCore):
        (WebCore::ContentDistribution::previousTo): Moved from InsertionPoint
        * html/shadow/ContentDistributor.h:
        (ContentDistribution):
        * html/shadow/InsertionPoint.cpp:
        * html/shadow/InsertionPoint.h:
        (WebCore::InsertionPoint::nextTo): Delegated to ContentDistribution
        (WebCore::InsertionPoint::previousTo): Delegated to ContentDistribution

2012-12-10  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/language-attribute.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98369

        Reviewed by Chris Fleizach.

        The test is failing for two reasons: Not exposing the language
        for accessible objects and AccessibilityUIElement::language() not
        being implemented.

        No new tests; instead, unskipped the previously-failing test.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject): Expose the language via AtkText attribute

2012-12-09  Takashi Sakamoto  <tasak@google.com>

        [Shadow DOM]: reset-style-inheritance doesn't work for insertion point
        https://bugs.webkit.org/show_bug.cgi?id=103711

        Reviewed by Hajime Morita.

        reset-style-inheritance can be specified by using insertion points'
        attribute, e.g. <content reset-style-inheritance>.
        c.f. shadow dom spec:
        https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles

        No new tests. Updated an existing test,
        fast/dom/shadow/insertion-point-resetStyleInheritance.html to cover
        this feature.

        * html/HTMLAttributeNames.in:
        Added HTMLNames::reset_style_inheritanceAttr.
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        (WebCore::InsertionPoint::parseAttribute):
        Since both shadow and content elements have to support
        reset-style-inheritance, added InsertionPoint::parseAttribute.
        (WebCore::InsertionPoint::resetStyleInheritance):
        (WebCore::InsertionPoint::setResetStyleInheritance):
        Modified to update reset-style-inheritance attribute value.
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        Removed m_shouldResetStyleInheritance. Instead, use
        reset-style-inheritance attribute value.

2012-12-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Native Memory Instrumentation: instrument a part of RenderObject class tree.
        https://bugs.webkit.org/show_bug.cgi?id=103564

        Reviewed by Eric Seidel.

        Many RenderObject descendants have OwnPtrs and RefPtrs members.
        Looks like we have to instrument all the RenderObject classes and visit
        all the render objects instead of counting entire render arena memory.

        * WebCore.exp.in:
        * dom/Node.cpp:
        (WebCore::Node::reportMemoryUsage):
        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::reportRenderTreeInfo):
        (WebCore):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore):
        * platform/PlatformMemoryInstrumentation.h:
        (PlatformMemoryTypes):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::reportMemoryUsage):
        (WebCore):
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::reportMemoryUsage):
        (WebCore):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (GraphicsLayerChromium):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::reportMemoryUsage):
        (WebCore):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::reportMemoryUsage):
        (WebCore):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::reportMemoryUsage):
        (WebCore):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::reportMemoryUsage):
        (WebCore):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::reportMemoryUsage):
        (WebCore):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::reportMemoryUsage):
        (WebCore):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::reportMemoryUsage):
        (WebCore):
        * rendering/RenderLayerModelObject.h:
        (RenderLayerModelObject):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::reportMemoryUsage):
        (WebCore):
        * rendering/RenderObject.h:
        (RenderObject):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::reportMemoryUsage):
        (WebCore):
        * rendering/RenderText.h:
        (RenderText):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::reportMemoryUsage):
        (WebCore):
        * rendering/RenderView.h:
        (RenderView):

2012-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r137003): failures in MicroData tests on EFL, GTK
        https://bugs.webkit.org/show_bug.cgi?id=104469

        Reviewed by Darin Adler.

        Fix the regression by calling propertyNodeList on HTMLPropertiesCollection
        in the named getter for HTMLCollection. It's a miracle that the old code prior to r137003
        worked at all since the return type of namedItem was different.

        Existing tests cover this.

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::V8HTMLCollection::namedPropertyGetter):

2012-12-09  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] accessibility/placeholder.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98373

        Reviewed by Martin Robinson.

        The test was failing because the placeholder text was not supported and
        AccessibilityUIElement::stringAttributeValue() was not implemented.

        No new tests; instead the failing test was unskipped.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes): Add the placeholder text as an AtkAttribute
        of the AtkObject, as is done in Gtk+ 3.

2012-12-09  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] [WebGL] Path is not resized correctly.
        https://bugs.webkit.org/show_bug.cgi?id=104458.

        Reviewed by Kenneth Rohde Christiansen.

        In GraphicsContext3D::paintToCanvas, we flip the contents and draw on the surface.
        The operations done to flip the image (translation and scale) are done before rectangle with correct size
        is added to current path. This resulted in updating pixels at wrong positions.

        Covered by existing tests.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):

2012-12-09  Joone Hur  <joone.hur@intel.com>

        [GTK][AC] build fix after r130525 and r133332
        https://bugs.webkit.org/show_bug.cgi?id=104491

        Reviewed by Martin Robinson.

        Build fix for Accelerated Compositing Clutter backend after r130525 and r133332.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        * platform/gtk/RedirectedXCompositeWindow.cpp:
        * platform/gtk/RedirectedXCompositeWindow.h:

2012-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use GObject casts instead of C++ cast for GObjects in DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=104492

        Reviewed by Martin Robinson.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateCFile):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (WebKit::kit):

2012-12-09  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: do not treat object as equal to itself when logging to console
        https://bugs.webkit.org/show_bug.cgi?id=104487

        Reviewed by Alexander Pavlov.

        Otherwise, mutating object in a loop results in the repeat count update instead of generation of the new preview.

        Test: inspector/console/console-object-preview.html

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::isEqual):

2012-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove unused code in GObject DOM bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=104490

        Reviewed by Martin Robinson.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperties): Remove code to install event listeners and
        signals.

2012-12-09  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed update for the GObject bindings after r137074 and r137078.

        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (webkit_dom_test_event_target_dispatch_event):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (webkit_dom_test_interface_supplemental_method2):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_method_that_requires_all_args_and_throws):
        (webkit_dom_test_obj_method_with_exception):
        (webkit_dom_test_obj_with_script_state_void_exception):
        (webkit_dom_test_obj_with_script_state_obj_exception):
        (webkit_dom_test_obj_with_script_execution_context_and_script_state_obj_exception):
        (webkit_dom_test_obj_strict_function):
        (webkit_dom_test_obj_get_attr_with_getter_exception):
        (webkit_dom_test_obj_set_attr_with_setter_exception):
        (webkit_dom_test_obj_get_string_attr_with_getter_exception):
        (webkit_dom_test_obj_set_string_attr_with_setter_exception):
        (webkit_dom_test_obj_get_with_script_state_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_attribute_raises):

2012-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Fix the GError check in GObject DOM bindings.

        Reviewed by Xan Lopez.

        Previous commit introduced a check to make sure the passed GError
        is valid in all DOM methods receiving an error.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetGReturnMacro): Check that the passed GError either is NULL or
        the pointer has been initialized to NULL.

2012-12-09  Leo Yang  <leoyang@rim.com>

        [BlackBerry] Adapt to name change of createNetworkBufferByCopyingData()
        https://bugs.webkit.org/show_bug.cgi?id=104449

        Reviewed by Rob Buis.

        Name change no new tests.

        * platform/network/blackberry/rss/RSSFilterStream.cpp:
        (WebCore::RSSFilterStream::handleRSSContent):

2012-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Clean up g_return macros usage in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=101079

        Reviewed by Xan Lopez.

        Several improvements:

          - Move g_return macros at the beginning of the methods.
          - Use them only to check parameters of public API.
          - Use GObject macros to check GObjects.
          - Check also GError parameters.
          - Use early returns in kit and core methods, since they should
            work even if g_return macros are disabled handling NULL
            gracefully.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetGReturnMacro):
        (GenerateFunction):
        (GenerateCFile):
        (Generate):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapFloat64Array):
        (webkit_dom_float64array_foo):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestActiveDOMObject):
        (webkit_dom_test_active_dom_object_exciting_function):
        (webkit_dom_test_active_dom_object_post_message):
        (webkit_dom_test_active_dom_object_get_exciting_attr):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestCallback):
        (webkit_dom_test_callback_callback_with_no_param):
        (webkit_dom_test_callback_callback_with_class1param):
        (webkit_dom_test_callback_callback_with_class2param):
        (webkit_dom_test_callback_callback_with_non_bool_return_type):
        (webkit_dom_test_callback_callback_with_string_list):
        (webkit_dom_test_callback_callback_with_boolean):
        (webkit_dom_test_callback_callback_requires_this_to_pass):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestCustomNamedGetter):
        (webkit_dom_test_custom_named_getter_another_function):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestEventConstructor):
        (webkit_dom_test_event_constructor_get_attr1):
        (webkit_dom_test_event_constructor_get_attr2):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestEventTarget):
        (webkit_dom_test_event_target_item):
        (webkit_dom_test_event_target_dispatch_event):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestException):
        (webkit_dom_test_exception_get_name):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestInterface):
        (webkit_dom_test_interface_supplemental_method1):
        (webkit_dom_test_interface_supplemental_method2):
        (webkit_dom_test_interface_supplemental_method4):
        (webkit_dom_test_interface_get_supplemental_str1):
        (webkit_dom_test_interface_get_supplemental_str2):
        (webkit_dom_test_interface_set_supplemental_str2):
        (webkit_dom_test_interface_get_supplemental_node):
        (webkit_dom_test_interface_set_supplemental_node):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestMediaQueryListListener):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestNamedConstructor):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestNode):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestObj):
        (webkit_dom_test_obj_void_method):
        (webkit_dom_test_obj_void_method_with_args):
        (webkit_dom_test_obj_long_method):
        (webkit_dom_test_obj_long_method_with_args):
        (webkit_dom_test_obj_obj_method):
        (webkit_dom_test_obj_obj_method_with_args):
        (webkit_dom_test_obj_method_that_requires_all_args_and_throws):
        (webkit_dom_test_obj_serialized_value):
        (webkit_dom_test_obj_idb_key):
        (webkit_dom_test_obj_options_object):
        (webkit_dom_test_obj_method_with_exception):
        (webkit_dom_test_obj_with_script_state_void):
        (webkit_dom_test_obj_with_script_state_obj):
        (webkit_dom_test_obj_with_script_state_void_exception):
        (webkit_dom_test_obj_with_script_state_obj_exception):
        (webkit_dom_test_obj_with_script_execution_context):
        (webkit_dom_test_obj_with_script_execution_context_and_script_state):
        (webkit_dom_test_obj_with_script_execution_context_and_script_state_obj_exception):
        (webkit_dom_test_obj_with_script_execution_context_and_script_state_with_spaces):
        (webkit_dom_test_obj_method_with_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_two_optional_args):
        (webkit_dom_test_obj_method_with_optional_string):
        (webkit_dom_test_obj_method_with_optional_string_is_undefined):
        (webkit_dom_test_obj_method_with_optional_string_is_null_string):
        (webkit_dom_test_obj_conditional_method1):
        (webkit_dom_test_obj_conditional_method2):
        (webkit_dom_test_obj_conditional_method3):
        (webkit_dom_test_obj_class_method):
        (webkit_dom_test_obj_class_method_with_optional):
        (webkit_dom_test_obj_overloaded_method1):
        (webkit_dom_test_obj_convert1):
        (webkit_dom_test_obj_convert2):
        (webkit_dom_test_obj_convert4):
        (webkit_dom_test_obj_convert5):
        (webkit_dom_test_obj_mutable_point_function):
        (webkit_dom_test_obj_immutable_point_function):
        (webkit_dom_test_obj_orange):
        (webkit_dom_test_obj_strict_function):
        (webkit_dom_test_obj_variadic_string_method):
        (webkit_dom_test_obj_variadic_double_method):
        (webkit_dom_test_obj_variadic_node_method):
        (webkit_dom_test_obj_get_read_only_long_attr):
        (webkit_dom_test_obj_get_read_only_string_attr):
        (webkit_dom_test_obj_get_read_only_test_obj_attr):
        (webkit_dom_test_obj_get_short_attr):
        (webkit_dom_test_obj_set_short_attr):
        (webkit_dom_test_obj_get_unsigned_short_attr):
        (webkit_dom_test_obj_set_unsigned_short_attr):
        (webkit_dom_test_obj_get_long_attr):
        (webkit_dom_test_obj_set_long_attr):
        (webkit_dom_test_obj_get_long_long_attr):
        (webkit_dom_test_obj_set_long_long_attr):
        (webkit_dom_test_obj_get_unsigned_long_long_attr):
        (webkit_dom_test_obj_set_unsigned_long_long_attr):
        (webkit_dom_test_obj_get_string_attr):
        (webkit_dom_test_obj_set_string_attr):
        (webkit_dom_test_obj_get_test_obj_attr):
        (webkit_dom_test_obj_set_test_obj_attr):
        (webkit_dom_test_obj_get_xml_obj_attr):
        (webkit_dom_test_obj_set_xml_obj_attr):
        (webkit_dom_test_obj_get_create):
        (webkit_dom_test_obj_set_create):
        (webkit_dom_test_obj_get_reflected_string_attr):
        (webkit_dom_test_obj_set_reflected_string_attr):
        (webkit_dom_test_obj_get_reflected_integral_attr):
        (webkit_dom_test_obj_set_reflected_integral_attr):
        (webkit_dom_test_obj_get_reflected_unsigned_integral_attr):
        (webkit_dom_test_obj_set_reflected_unsigned_integral_attr):
        (webkit_dom_test_obj_get_reflected_boolean_attr):
        (webkit_dom_test_obj_set_reflected_boolean_attr):
        (webkit_dom_test_obj_get_reflected_url_attr):
        (webkit_dom_test_obj_set_reflected_url_attr):
        (webkit_dom_test_obj_get_reflected_custom_integral_attr):
        (webkit_dom_test_obj_set_reflected_custom_integral_attr):
        (webkit_dom_test_obj_get_reflected_custom_boolean_attr):
        (webkit_dom_test_obj_set_reflected_custom_boolean_attr):
        (webkit_dom_test_obj_get_reflected_custom_url_attr):
        (webkit_dom_test_obj_set_reflected_custom_url_attr):
        (webkit_dom_test_obj_get_attr_with_getter_exception):
        (webkit_dom_test_obj_set_attr_with_getter_exception):
        (webkit_dom_test_obj_get_attr_with_setter_exception):
        (webkit_dom_test_obj_set_attr_with_setter_exception):
        (webkit_dom_test_obj_get_string_attr_with_getter_exception):
        (webkit_dom_test_obj_set_string_attr_with_getter_exception):
        (webkit_dom_test_obj_get_string_attr_with_setter_exception):
        (webkit_dom_test_obj_set_string_attr_with_setter_exception):
        (webkit_dom_test_obj_get_with_script_state_attribute):
        (webkit_dom_test_obj_set_with_script_state_attribute):
        (webkit_dom_test_obj_get_with_script_execution_context_attribute):
        (webkit_dom_test_obj_set_with_script_execution_context_attribute):
        (webkit_dom_test_obj_get_with_script_state_attribute_raises):
        (webkit_dom_test_obj_set_with_script_state_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_attribute_raises):
        (webkit_dom_test_obj_set_with_script_execution_context_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_attribute):
        (webkit_dom_test_obj_set_with_script_execution_context_and_script_state_attribute):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_attribute_raises):
        (webkit_dom_test_obj_set_with_script_execution_context_and_script_state_attribute_raises):
        (webkit_dom_test_obj_get_with_script_execution_context_and_script_state_with_spaces_attribute):
        (webkit_dom_test_obj_set_with_script_execution_context_and_script_state_with_spaces_attribute):
        (webkit_dom_test_obj_get_conditional_attr1):
        (webkit_dom_test_obj_set_conditional_attr1):
        (webkit_dom_test_obj_get_conditional_attr2):
        (webkit_dom_test_obj_set_conditional_attr2):
        (webkit_dom_test_obj_get_conditional_attr3):
        (webkit_dom_test_obj_set_conditional_attr3):
        (webkit_dom_test_obj_get_any_attribute):
        (webkit_dom_test_obj_set_any_attribute):
        (webkit_dom_test_obj_get_content_document):
        (webkit_dom_test_obj_get_mutable_point):
        (webkit_dom_test_obj_set_mutable_point):
        (webkit_dom_test_obj_get_immutable_point):
        (webkit_dom_test_obj_set_immutable_point):
        (webkit_dom_test_obj_get_strawberry):
        (webkit_dom_test_obj_set_strawberry):
        (webkit_dom_test_obj_get_strict_float):
        (webkit_dom_test_obj_set_strict_float):
        (webkit_dom_test_obj_get_description):
        (webkit_dom_test_obj_get_id):
        (webkit_dom_test_obj_set_id):
        (webkit_dom_test_obj_get_hash):
        (webkit_dom_test_obj_get_replaceable_attribute):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestSerializedScriptValueInterface):
        (webkit_dom_test_serialized_script_value_interface_accept_transfer_list):
        (webkit_dom_test_serialized_script_value_interface_multi_transfer_list):
        (webkit_dom_test_serialized_script_value_interface_get_value):
        (webkit_dom_test_serialized_script_value_interface_set_value):
        (webkit_dom_test_serialized_script_value_interface_get_readonly_value):
        (webkit_dom_test_serialized_script_value_interface_get_cached_value):
        (webkit_dom_test_serialized_script_value_interface_set_cached_value):
        (webkit_dom_test_serialized_script_value_interface_get_ports):
        (webkit_dom_test_serialized_script_value_interface_get_cached_readonly_value):

2012-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a private struct and placement new syntax in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=101074

        Reviewed by Xan Lopez.

        It allows to use RefPtr for the wrapped object and it simplifies
        the code. Only the classes deriving from WebKitDOMObject keep a
        reference of the wrapped object in a private struct. The wrapped
        object is added to the cache in GObjectClass::constructor() and
        removed in GObjectClass::finalize().

        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::createWrapper):
        (WebKit::kit):
        (WebKit::wrapEventTarget):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetParentImplClassName):
        (GenerateProperties):
        (GenerateCFile):
        (Generate):
        (WriteData):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapFloat64Array):
        (webkit_dom_float64array_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (_WebKitDOMTestActiveDOMObjectPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestActiveDOMObject):
        (webkit_dom_test_active_dom_object_finalize):
        (webkit_dom_test_active_dom_object_constructor):
        (webkit_dom_test_active_dom_object_class_init):
        (webkit_dom_test_active_dom_object_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (_WebKitDOMTestCallbackPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestCallback):
        (webkit_dom_test_callback_finalize):
        (webkit_dom_test_callback_constructor):
        (webkit_dom_test_callback_class_init):
        (webkit_dom_test_callback_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        (_WebKitDOMTestCustomNamedGetterPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestCustomNamedGetter):
        (webkit_dom_test_custom_named_getter_finalize):
        (webkit_dom_test_custom_named_getter_constructor):
        (webkit_dom_test_custom_named_getter_class_init):
        (webkit_dom_test_custom_named_getter_init):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (_WebKitDOMTestEventConstructorPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestEventConstructor):
        (webkit_dom_test_event_constructor_finalize):
        (webkit_dom_test_event_constructor_constructor):
        (webkit_dom_test_event_constructor_class_init):
        (webkit_dom_test_event_constructor_init):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (_WebKitDOMTestEventTargetPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestEventTarget):
        (webkit_dom_test_event_target_finalize):
        (webkit_dom_test_event_target_constructor):
        (webkit_dom_test_event_target_class_init):
        (webkit_dom_test_event_target_init):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (_WebKitDOMTestExceptionPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestException):
        (webkit_dom_test_exception_finalize):
        (webkit_dom_test_exception_constructor):
        (webkit_dom_test_exception_class_init):
        (webkit_dom_test_exception_init):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (_WebKitDOMTestInterfacePrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestInterface):
        (webkit_dom_test_interface_finalize):
        (webkit_dom_test_interface_constructor):
        (webkit_dom_test_interface_class_init):
        (webkit_dom_test_interface_init):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (_WebKitDOMTestMediaQueryListListenerPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestMediaQueryListListener):
        (webkit_dom_test_media_query_list_listener_finalize):
        (webkit_dom_test_media_query_list_listener_constructor):
        (webkit_dom_test_media_query_list_listener_class_init):
        (webkit_dom_test_media_query_list_listener_init):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        (_WebKitDOMTestNamedConstructorPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestNamedConstructor):
        (webkit_dom_test_named_constructor_finalize):
        (webkit_dom_test_named_constructor_constructor):
        (webkit_dom_test_named_constructor_class_init):
        (webkit_dom_test_named_constructor_init):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestNode):
        (webkit_dom_test_node_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (_WebKitDOMTestObjPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestObj):
        (webkit_dom_test_obj_finalize):
        (webkit_dom_test_obj_constructor):
        (webkit_dom_test_obj_class_init):
        (webkit_dom_test_obj_init):
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp:
        (_WebKitDOMTestOverloadedConstructorsPrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestOverloadedConstructors):
        (webkit_dom_test_overloaded_constructors_finalize):
        (webkit_dom_test_overloaded_constructors_constructor):
        (webkit_dom_test_overloaded_constructors_class_init):
        (webkit_dom_test_overloaded_constructors_init):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (_WebKitDOMTestSerializedScriptValueInterfacePrivate):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestSerializedScriptValueInterface):
        (webkit_dom_test_serialized_script_value_interface_finalize):
        (webkit_dom_test_serialized_script_value_interface_constructor):
        (webkit_dom_test_serialized_script_value_interface_class_init):
        (webkit_dom_test_serialized_script_value_interface_init):

2012-12-09  Jon Lee  <jonlee@apple.com>

        [WK2] Move button image to injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=104107
        <rdar://problem/12813842>

        Reviewed by Simon Fraser.

        Update RenderSnapshottedPlugIn to retrieve the start button image from the ChromeClient. Expand the
        kinds of images available for use as the button. Try to find the best sized button to use for the plug-in,
        otherwise use no image at all.

        * rendering/RenderSnapshottedPlugIn.h: Add an enum representing the size to use. Remove the label rect
        variable since it is unneeded.
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::startLabelImage): Maintain a cache of the images for reuse. Index into the
        array using the enum. If the image has been loaded, or an attempt was made, then return the result. Otherwise
        ask the chrome client for the image.
        (WebCore::RenderSnapshottedPlugIn::paintLabel): Determine the proper label to use, and paint if the image is
        available.
        (WebCore::RenderSnapshottedPlugIn::tryToFitStartLabel): Compare the label size with the provided content
        box. Return a LayoutRect representing the label's placement. If it doesn't fit, return an empty rect.
        (WebCore::RenderSnapshottedPlugIn::layout): The rect is not needed because it is all determined at paint time.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::plugInStartLabelImage): Added.

        * WebCore.exp.in: Expose GraphicsContext::drawNativeImage() for WKImageCG.cpp.
        * WebCore.xcodeproj/project.pbxproj: Remove start button assets.
        * Resources/startButton.png: Removed.
        * Resources/startButton@2x.png: Removed.

2012-12-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137053.
        http://trac.webkit.org/changeset/137053
        https://bugs.webkit.org/show_bug.cgi?id=104471

        Broke PerformanceTests/Parser/html-parser.html (Requested by
        mkwst_ on #webkit).

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):

2012-12-09  Kangil Han  <kangil.han@samsung.com>

        Fix unused parameter compile warnings
        https://bugs.webkit.org/show_bug.cgi?id=104463

        Reviewed by Kentaro Hara.

        Remove compile warning messages by omitting parameter name.

        * platform/graphics/surfaces/GraphicsSurface.cpp:
        (WebCore::GraphicsSurface::GraphicsSurface):

2012-12-08  Rakesh KN  <rakeshchaitan@gmail.com>

        Build break if SVG is disabled
        https://bugs.webkit.org/show_bug.cgi?id=104452

        Reviewed by Darin Adler.

        Build breaking after r136975 if SVG is disabled.
        No new tests required.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        As document is not an argument anymore, removing UNUSED_PARAM against it.
        * rendering/FilterEffectRenderer.h:
        Added forward declaration for RenderObject.

2012-12-08  Mike West  <mkwst@chromium.org>

        Log to console when script is blocked by sandbox attributes.
        https://bugs.webkit.org/show_bug.cgi?id=104365

        Reviewed by Ojan Vafai.

        Adds a console message to cover script execution blocked within the
        context of a sandboxed frame which lacks the 'allow-scripts' permission.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
            Log a warning when sandboxing flags block script execution.

2012-12-08  No'am Rosenthal  <noam@webkit.org>

        Use background color for GraphicsLayers when applicable
        https://bugs.webkit.org/show_bug.cgi?id=103786

        Updated RenderLayerBacking to call GraphicsLayer::setContentsToBackgroundColor when the following conditions take place:
        1. The layer doesn't paint its own content, other than background/decoration.
        2. There are no borders or other box decorations (border radius, borders, outline, shadow etc.)
        3. The image has only a background color, and no background image.
        4. background-composite is set to source-over, and background-clip is anything apart from text.
        5. The port supports setContentsToBackgroundColor.

        This allows any implementation of GraphicsLayer that supports setContentsToBackgroundColor to avoid allocating a backing store
        for that layer, but instead draw that solid color directly.
        In addition to setting the background color, the layer's contentsRect needs to be adjusted, since the default contents rect of
        a layer is not always equivalent to the rect where the background is supposed to be painted, which is derived from the box's
        background-clip property.

        Reviewed by Simon Fraser.

        Tests: compositing/background-color/background-color-alpha.html
               compositing/background-color/background-color-change-to-text.html
               compositing/background-color/background-color-composite.html
               compositing/background-color/background-color-container.html
               compositing/background-color/background-color-content-clip.html
               compositing/background-color/background-color-padding-change.html
               compositing/background-color/background-color-padding-clip.html
               compositing/background-color/background-color-simple.html
               compositing/background-color/background-color-text-change.html
               compositing/background-color/background-color-text-clip.html

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::supportsBackgroundColorContent):
            Allows different implementation of GraphicsLayer to identify whether they implement setContentsToBackgroundColor.
            Currently only the MAC implementation and TextureMapper falls under that category.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::paddingBoxRect):
            Added paddingBoxRect to compliment borderBoxRect and contentsBoxRect. paddingBoxRect corresponds to 
            background-clip: padding.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
            Update the background color if needed, for every configuration change.
            This should accomodate the old behavior for full-screen, while enabling background color changes for other layers.

        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
            Move the contentsRect logic to updateContentsRect.

        (WebCore::RenderLayerBacking::updateContentsRect):
            Use the background box when directly compositing backgrounds.

        (WebCore::RenderLayerBacking::updateBackgroundColor):
            Set the background color if applicable, otherwise set to trasnparent and clear.
            This was not needed in the past because background colors were only used for the special case of full-screen.

        (WebCore::supportsDirectBoxDecorationsComposition):
            Helper function to determine whether a particular background can be directly composited. Right now only 
            background color can be composited, and only if the GraphicsLayer implementation supports background colors.
            Also we don't yet support background-clip: text and any background-composite other than source-over.

        (WebCore::RenderLayerBacking::paintsBoxDecorations):
            Apply the new supportsDirectBoxDecorationsComposition logic.

        (WebCore::RenderLayerBacking::contentsBox):
            Remove unnecessary local variable.

        (WebCore::backgroundRectForBox):
        (WebCore::RenderLayerBacking::backgroundBox):
            Figure out the correct rect for the GraphicsLayer's contentsRect, based on the renderer's backgroundClip.
            The rectangle has to be adjusted based on the composited layer offset, and snapped to an IntRect as 
            GraphicsLayer::contentsRect expects snapped pixels.


2012-12-08  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r137011.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        (WebCore::GraphicsContext::drawBitmap):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::BufferedImage::draw):
        (WebCore::ImageBuffer::draw):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        (WebCore::BitmapImage::draw):
        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::draw):
        * platform/graphics/wince/SharedBitmap.h:

2012-12-08  Gavin Peters  <gavinp@chromium.org>

        Add status events on <link rel=prerender> elements.
        https://bugs.webkit.org/show_bug.cgi?id=96474

        Reviewed by Adam Barth.

        The new PrerenderStatusEvent is sent to link elements when
        prerenders are started by the embedder, and also sent when they
        are stopped. Pages using this feature can now serialize launching
        prerenders, and track timing performance.

        Tested in a new WebKitUnitTest for the chromium port.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        (WebCore):
        * html/HTMLLinkElement.cpp:
        (WebCore):
        (WebCore::HTMLLinkElement::didStartLinkPrerender):
        (WebCore::HTMLLinkElement::didStopLinkPrerender):
        (WebCore::HTMLLinkElement::didSendLoadForLinkPrerender):
        (WebCore::HTMLLinkElement::didSendDOMContentLoadedForLinkPrerender):
        * html/HTMLLinkElement.h:
        (HTMLLinkElement):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::didStartPrerender):
        (WebCore):
        (WebCore::LinkLoader::didStopPrerender):
        (WebCore::LinkLoader::didSendLoadForPrerender):
        (WebCore::LinkLoader::didSendDOMContentLoadedForPrerender):
        (WebCore::LinkLoader::loadLink):
        * loader/LinkLoader.h:
        (LinkLoader):
        * loader/LinkLoaderClient.h:
        (LinkLoaderClient):
        * loader/Prerenderer.cpp:
        (WebCore::Prerenderer::render):
        * loader/Prerenderer.h:
        (WebCore):
        (Prerenderer):
        * platform/PrerenderClient.h: Copied from Source/WebCore/loader/LinkLoaderClient.h.
        (WebCore):
        (PrerenderClient):
        (WebCore::PrerenderClient::~PrerenderClient):
        * platform/PrerenderHandle.h:
        (WebCore):
        (PrerenderHandle):
        * platform/chromium/Prerender.cpp:
        (WebCore::Prerender::Prerender):
        (WebCore::Prerender::removeClient):
        (WebCore):
        (WebCore::Prerender::add):
        (WebCore::Prerender::cancel):
        (WebCore::Prerender::abandon):
        (WebCore::Prerender::didStartPrerender):
        (WebCore::Prerender::didStopPrerender):
        (WebCore::Prerender::didSendLoadForPrerender):
        (WebCore::Prerender::didSendDOMContentLoadedForPrerender):
        * platform/chromium/Prerender.h:
        (WebKit):
        (WebCore):
        (Prerender):
        * platform/chromium/PrerenderHandle.cpp:
        (WebCore::PrerenderHandle::create):
        (WebCore::PrerenderHandle::PrerenderHandle):
        (WebCore::PrerenderHandle::~PrerenderHandle):
        (WebCore::PrerenderHandle::removeClient):
        (WebCore):
        * platform/chromium/support/WebPrerender.cpp:
        (WebKit::WebPrerender::toPrerender):
        (WebKit):
        (WebKit::WebPrerender::assign):
        (WebKit::WebPrerender::isNull):
        (WebKit::WebPrerender::didStartPrerender):
        (WebKit::WebPrerender::didStopPrerender):
        (WebKit::WebPrerender::didSendLoadForPrerender):
        (WebKit::WebPrerender::didSendDOMContentLoadedForPrerender):

2012-12-08  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Martin Robinson.

        Update the Chromium/Chrome version we advertise in our User-Agent
        string to version 25, to better match our current reality.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::standardUserAgent):

2012-12-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137006.
        http://trac.webkit.org/changeset/137006
        https://bugs.webkit.org/show_bug.cgi?id=104446

        Broke plugin painting on Mac (youtube, etc.) (Requested by
        thorton_ on #webkit).

        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        * rendering/RenderBox.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::clipBox):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateDrawsContent):
        (WebCore::RenderLayerBacking::updateBackgroundColor):
        (WebCore::RenderLayerBacking::paintsBoxDecorations):
        (WebCore::RenderLayerBacking::contentChanged):
        (WebCore::RenderLayerBacking::updateImageContents):
        (WebCore::RenderLayerBacking::contentsBox):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

2012-12-08  Wei James  <james.wei@intel.com>

        Remove incorrect ASSERT for m_error in CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=104333

        Reviewed by Nate Chapin.

        This assertion was brought in https://bugs.webkit.org/show_bug.cgi?id=100901 
        When the request is canceled, m_error.isNull() should be true.

        run webkit_unit_tests Debug build.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::stopLoading):

2012-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        Qt Linux Minimal build fix after r136975.

        * dom/ElementRareData.h:
        (ElementRareData):

2012-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        Qt Linux Minimal build fix attempt after r136959.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::layerTreeDidChange):
        (WebCore::InspectorInstrumentation::renderLayerDestroyed):

2012-12-08  Xan Lopez  <xlopez@igalia.com>

        Build fix after r137003. Wrap Microdata only sections with ENABLE(MICRODATA).

        * dom/NodeRareData.h:
        (NodeRareData):

2012-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r137003. Wrap NodeMutationObserverData with ENABLE(MUTATION_OBSERVERS).

        * dom/NodeRareData.h:
        (NodeRareData):

2012-12-08  Patrick Gansterer  <paroga@webkit.org>

        Build fix for ENABLE(SVG) && !ENABLE(FILTERS) after r136975.

        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::buildCachedResources):

2012-12-08  Adam Klein  <adamk@chromium.org>

        HTMLTemplateElement.innerHTML should be parsed into the template contents owner document
        https://bugs.webkit.org/show_bug.cgi?id=104407

        Reviewed by Eric Seidel.

        When parsing via innerHTML, ensure that all operations (including the
        initial fragment creation) occur in the proper document to avoid,
        e.g., images loading while being parsed into the template contents.
        This matches the parsing behavior during page load.

        Test: fast/dom/HTMLTemplateElement/innerHTML-inert.html

        * editing/markup.cpp:
        (WebCore::createFragmentForInnerOuterHTML):

2012-12-08  ChangSeok Oh  <shivamidow@gmail.com>

        Assertion failed at WebCore::RedirectedXCompositeWindow::context()
        https://bugs.webkit.org/show_bug.cgi?id=104349

        Reviewed by Martin Robinson.

        We should return GLContext if m_needsContext is CreateGLContext. By the way
        CreateGLContext is a enum value and its default value is 0. So checking
        ASSERT(m_needsContext) causes a crash on debug build.
        ASSERT(m_needsContext == CreateGLContext) is better here.

        No new tests since we can verify this with already existing AC tests.

        * platform/gtk/RedirectedXCompositeWindow.cpp:
        (WebCore::RedirectedXCompositeWindow::context):

2012-12-07  Rik Cabanier  <cabanier@adobe.com>

        Extend platform layer so it can pass blend modes to the compositing calls
        https://bugs.webkit.org/show_bug.cgi?id=104176

        Reviewed by Dirk Schulze.

        Adding blend mode enumeration to drawImage functions + stored blendmode in graphics context 

        No new tests, no new functionality.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * platform/graphics/CrossfadeGeneratedImage.h:
        (CrossfadeGeneratedImage):
        * platform/graphics/GeneratedImage.h:
        (GeneratedImage):
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::draw):
        * platform/graphics/GeneratorGeneratedImage.h:
        (GeneratorGeneratedImage):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (GraphicsContextState):
        (GraphicsContext):
        * platform/graphics/Image.cpp:
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (Image):
        * platform/graphics/ImageBuffer.h:
        (ImageBuffer):
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        (PDFDocumentImage):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):
        * platform/graphics/qt/StillImageQt.h:
        (StillImage):
        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        (BitmapImageSingleFrameSkia):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * svg/graphics/SVGImage.h:
        (SVGImage):

2012-12-07  Alpha Lam  <hclam@chromium.org>

        [chromium] ImageDecodingStore should cache partially decoded images
        https://bugs.webkit.org/show_bug.cgi?id=103796

        Reviewed by Stephen White.

        Implement caching for incomplete images, meaning the image is partially
        decoded. The image is cached together with partially decoded ImageDecoder.
        This allows decoding to resume in a later time.

        Caching logic for incomplete images is implemented in ImageDecodingStore.

        Logic for resuming image decoding is implemented in ImageFrameGenerator.

        ImageDecodingStore allows storing incomplete image with the decoder.
        The cache entry can be used in a later time to read and write (i.e. resume
        decoding.) To avoid the same entry being written and read at the same time,
        an incomplete entry can be used by one user only. Concurrent access to
        an incomplete entry should never happen and is checked by an assert.
        An entry can becomes complete when decoding is finished. In this case
        the associated decoder is deleted. Once an entry becomes complete concurrent
        read is allowed.

        ImageFrameGenerator performs the logic to resume image decoding. It
        performs the following operations in sequence:
        - Try to lookup a complete image
        - Try to perform scaling on a complete image
        - Try to lookup an incomplete image and resume decoding & scaling
        - Everything fails, start decoding from scratch
        The entire sequence of operations in under a mutex, hence there will be
        no more than 1 user of an incomplete cache entry at the same time.

        New unit tests in ImageDecodingStoreTest and ImageFrameGeneratorTest.

        * platform/graphics/chromium/ImageDecodingStore.cpp:
        (WebCore::ImageDecodingStore::lockCache):
        Change of method definition to return an image and ImageDecoder.
        (WebCore::ImageDecodingStore::unlockCache):
        (WebCore::ImageDecodingStore::insertAndLockCache):
        (WebCore::ImageDecodingStore::overwriteAndLockCache):
        New method to allow an incomplete cache entry be overwritten.
        (WebCore):
        * platform/graphics/chromium/ImageDecodingStore.h:
        (ImageDecodingStore):
        (WebCore::ImageDecodingStore::CacheEntry::createAndUse):
        (WebCore::ImageDecodingStore::CacheEntry::CacheEntry):
        (WebCore::ImageDecodingStore::CacheEntry::cachedImage):
        (WebCore::ImageDecodingStore::CacheEntry::cachedDecoder):
        (WebCore::ImageDecodingStore::CacheEntry::releaseCachedDecoder):
        (WebCore::ImageDecodingStore::CacheEntry::overwriteCachedImage):
        New method to allow an incomplete image be overwitten.
        (CacheEntry):
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::decodeAndScale):
        (WebCore::ImageFrameGenerator::tryToLockCompleteCache):
        (WebCore::ImageFrameGenerator::tryToScale):
        (WebCore::ImageFrameGenerator::tryToResumeDecodeAndScale):
        New method to lookup an incomplete cache entry and resume decoding.
        (WebCore):
        (WebCore::ImageFrameGenerator::tryToDecodeAndScale):
        (WebCore::ImageFrameGenerator::decoder):
        New helper method to do decoding for a full sized image.
        (WebCore::ImageFrameGenerator::prepareData):
        New helper method to prepare data safely.
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (ImageFrameGenerator):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::onLockPixels):
        * platform/graphics/chromium/ScaledImageFragment.h:
        (WebCore::ScaledImageFragment::setIsComplete):

2012-12-07  Alexis Menard  <alexis@webkit.org>

        Enable CSS3 position offset for CSS Masking.
        https://bugs.webkit.org/show_bug.cgi?id=104252

        Reviewed by Dirk Schulze.

        To follow CSS3 background-position, mask-position should also support
        the new <position> type (http://dvcs.w3.org/hg/FXTF/raw-file/tip/masking/index.html#mask-property).
        Now the code is shared between background and mask I renamed the
        functions used to be more generic. Note that the feature flag is not
        meant to stay and will be removed in a following commit.

        No new tests : I modified LayoutTests/fast/masking/parsing-mask.html to
        cover the new feature.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createPositionListForLayer):
        * css/CSSParser.cpp:
        (WebCore::isFillPositionKeyword):
        (WebCore::CSSParser::parse4ValuesFillPosition):
        (WebCore::CSSParser::parse3ValuesFillPosition):
        (WebCore::CSSParser::isPotentialPositionValue):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parse2ValuesFillPosition):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseTransformOriginShorthand):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::parsePerspectiveOrigin):
        * css/CSSParser.h:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillXPosition):
        (WebCore::CSSToStyleMap::mapFillYPosition):

2012-12-07  No'am Rosenthal  <noam@webkit.org>

        Use background color for GraphicsLayers when applicable
        https://bugs.webkit.org/show_bug.cgi?id=103786

        Updated RenderLayerBacking to call GraphicsLayer::setContentsToBackgroundColor when the following conditions take place:
        1. The layer doesn't paint its own content, other than background/decoration.
        2. There are no borders or other box decorations (border radius, borders, outline, shadow etc.)
        3. The image has only a background color, and no background image.
        4. background-composite is set to source-over, and background-clip is anything apart from text.
        5. The port supports setContentsToBackgroundColor.

        This allows any implementation of GraphicsLayer that supports setContentsToBackgroundColor to avoid allocating a backing store
        for that layer, but instead draw that solid color directly.
        In addition to setting the background color, the layer's contentsRect needs to be adjusted, since the default contents rect of
        a layer is not always equivalent to the rect where the background is supposed to be painted, which is derived from the box's
        background-clip property.

        Reviewed by Simon Fraser.

        Tests: compositing/background-color/background-color-alpha.html
               compositing/background-color/background-color-change-to-text.html
               compositing/background-color/background-color-composite.html
               compositing/background-color/background-color-container.html
               compositing/background-color/background-color-content-clip.html
               compositing/background-color/background-color-padding-change.html
               compositing/background-color/background-color-padding-clip.html
               compositing/background-color/background-color-simple.html
               compositing/background-color/background-color-text-change.html
               compositing/background-color/background-color-text-clip.html

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::supportsBackgroundColorContent):
            Allows different implementation of GraphicsLayer to identify whether they implement setContentsToBackgroundColor.
            Currently only the MAC implementation and TextureMapper falls under that category.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::paddingBoxRect):
            Added paddingBoxRect to compliment borderBoxRect and contentsBoxRect. paddingBoxRect corresponds to 
            background-clip: padding.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
            Update the background color if needed, for every configuration change.
            This should accomodate the old behavior for full-screen, while enabling background color changes for other layers.

        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
            Move the contentsRect logic to updateContentsRect.

        (WebCore::RenderLayerBacking::updateContentsRect):
            Use the background box when directly compositing backgrounds.

        (WebCore::RenderLayerBacking::updateBackgroundColor):
            Set the background color if applicable, otherwise set to trasnparent and clear.
            This was not needed in the past because background colors were only used for the special case of full-screen.

        (WebCore::supportsDirectBoxDecorationsComposition):
            Helper function to determine whether a particular background can be directly composited. Right now only 
            background color can be composited, and only if the GraphicsLayer implementation supports background colors.
            Also we don't yet support background-clip: text and any background-composite other than source-over.

        (WebCore::RenderLayerBacking::paintsBoxDecorations):
            Apply the new supportsDirectBoxDecorationsComposition logic.

        (WebCore::RenderLayerBacking::contentsBox):
            Remove unnecessary local variable.

        (WebCore::backgroundRectForBox):
        (WebCore::RenderLayerBacking::backgroundBox):
            Figure out the correct rect for the GraphicsLayer's contentsRect, based on the renderer's backgroundClip.
            The rectangle has to be adjusted based on the composited layer offset, and snapped to an IntRect as 
            GraphicsLayer::contentsRect expects snapped pixels.


2012-12-06  Ryosuke Niwa  <rniwa@webkit.org>

        Shrink the size of NodeRareData by moving pointers into separate objects
        https://bugs.webkit.org/show_bug.cgi?id=104312

        Reviewed by Andreas Kling.

        This patch does three things:
        1. Move ChildNodeList back into NodeListsNodeData.
        2. Move m_mutationObserverRegistry & m_transientMutationObserverRegistry into a separate object owned by NodeRareData.
        3. Move m_itemProp, m_itemRef, m_itemType & into a separate object owned by NodeRareData.

        Moving m_childNodeList from NodeRareData to NodeListsNodeData also has a nice side-effect of making ChildNodeList
        behave more like other LiveNodeLists.

        This patch also fixes Mac build when microdata is enabled.

        There should be no user-visible behavior change.

        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::~ChildNodeList):
        * dom/Node.cpp:
        (WebCore::Node::childNodes): Moved the code to create ChildNodeList into NodeListsNodeData to match other node lists.
        (WebCore::Node::invalidateNodeListCachesInAncestors):
        (WebCore): Removed removeCachedChildNodeList.
        * dom/Node.h:
        (Node):
        * dom/NodeRareData.cpp:
        (WebCore): Assert the size of NodeRareData at compilation time.
        (WebCore::NodeListsNodeData::reportMemoryUsage):
        (WebCore::NodeRareData::reportMemoryUsage):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::clearChildNodeListCache): Moved from NodeRareData.
        (WebCore::NodeListsNodeData::ensureChildNodeList): Extracted from Node::childNodes.
        (WebCore::NodeListsNodeData::removeChildNodeList): Added.
        (WebCore::NodeListsNodeData::NodeListsNodeData): Initialize m_childNodeList.
        (WebCore::NodeRareData::NodeMutationObserverData): Extracted from NodeRareData.
        (WebCore::NodeRareData::NodeMutationObserverData::create):
        (WebCore::NodeRareData::NodeMicroDataTokenLists): Ditto.
        (WebCore::NodeRareData::NodeMicroDataTokenLists::create):
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::ensureNodeLists): Merged setNodeLists since it's not called elsewhere.
        (WebCore::NodeRareData::mutationObserverRegistry):
        (WebCore::NodeRareData::ensureMutationObserverRegistry): Added.
        (WebCore::NodeRareData::transientMutationObserverRegistry):
        (WebCore::NodeRareData::ensureTransientMutationObserverRegistry):
        (WebCore::NodeRareData::ensureMicroDataTokenLists):
        (NodeRareData):
        (WebCore::NodeRareData::itemProp):
        (WebCore::NodeRareData::setItemProp):
        (WebCore::NodeRareData::itemRef):
        (WebCore::NodeRareData::setItemRef):
        (WebCore::NodeRareData::itemType):
        (WebCore::NodeRareData::setItemType):
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::propertyNodeList): Renamed from namedItem since its return type, PropertyNodeList,
        is different from that, Node, of LiveNodeList::namedItem. It was shadowing the function name instead of overriding.
        * html/HTMLPropertiesCollection.h:
        (HTMLPropertiesCollection):
        * html/HTMLPropertiesCollection.idl:

2012-12-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136993.
        http://trac.webkit.org/changeset/136993
        https://bugs.webkit.org/show_bug.cgi?id=104415

        This patch breaks the mac build (Requested by cabanier on
        #webkit).

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * platform/graphics/CrossfadeGeneratedImage.h:
        (CrossfadeGeneratedImage):
        * platform/graphics/GeneratedImage.h:
        (GeneratedImage):
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::draw):
        * platform/graphics/GeneratorGeneratedImage.h:
        (GeneratorGeneratedImage):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (GraphicsContextState):
        (GraphicsContext):
        * platform/graphics/Image.cpp:
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (Image):
        * platform/graphics/ImageBuffer.h:
        (ImageBuffer):
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        (PDFDocumentImage):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):
        * platform/graphics/qt/StillImageQt.h:
        (StillImage):
        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        (BitmapImageSingleFrameSkia):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * svg/graphics/SVGImage.h:
        (SVGImage):

2012-12-07  Alexey Proskuryakov  <ap@apple.com>

        There is no need to change cached resource storage policy through ResourceHandleClient
        https://bugs.webkit.org/show_bug.cgi?id=104413

        Reviewed by Brady Eidson.

        This code was only needed to prevent storing responses to disk in private browsing
        mode, but we now have a storage session to take care of that in a cleaner and more
        reliable way.

        * loader/ResourceLoader.cpp:
        * loader/ResourceLoader.h: (WebCore::ResourceLoader::receivedCancellation):
        * platform/network/ResourceHandleClient.h:
        * platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::willCacheResponse):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]):

2012-12-07  Adam Klein  <adamk@chromium.org>

        MutationRecord addedNodes/removedNodes should never be null
        https://bugs.webkit.org/show_bug.cgi?id=98921

        Reviewed by Ryosuke Niwa.

        Per an update to the DOM4 spec that matches Gecko's behavior,
        addedNodes/removedNodes should be empty NodeLists on 'attributes'
        and 'characterData' records, rather than null.

        This is accomplished with lazy initialization of addedNodes/removedNodes
        attributes on 'attributes'/'characterData' records and the
        addition of a new StaticNodeList::createEmpty() factory method.

        * dom/MutationRecord.cpp:
        * dom/MutationRecord.h:
        (MutationRecord):
        * dom/StaticNodeList.h:
        (WebCore::StaticNodeList::adopt):
        (StaticNodeList):
        (WebCore::StaticNodeList::createEmpty):
        (WebCore::StaticNodeList::StaticNodeList):

2012-12-07  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction after 136959.

        The initialization list should follow the same compiler macro
        exclusions as the class members.

        * inspector/InstrumentingAgents.h: Add USE(ACCELERATED_COMPOSITING)
          guards around m_inspectorLayerTreeAgent as this does not exist
          when the guard is false.

2012-12-07  Rik Cabanier  <cabanier@adobe.com>

        Extend platform layer so it can pass blend modes to the compositing calls
        https://bugs.webkit.org/show_bug.cgi?id=104176

        Reviewed by Dirk Schulze.

        Adding blend mode enumeration to drawImage functions + stored blendmode in graphics context 

        No new tests, no new functionality.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * platform/graphics/CrossfadeGeneratedImage.h:
        (CrossfadeGeneratedImage):
        * platform/graphics/GeneratedImage.h:
        (GeneratedImage):
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::draw):
        * platform/graphics/GeneratorGeneratedImage.h:
        (GeneratorGeneratedImage):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (GraphicsContextState):
        (GraphicsContext):
        * platform/graphics/Image.cpp:
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (Image):
        * platform/graphics/ImageBuffer.h:
        (ImageBuffer):
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        (PDFDocumentImage):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):
        * platform/graphics/qt/StillImageQt.h:
        (StillImage):
        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        (BitmapImageSingleFrameSkia):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * svg/graphics/SVGImage.h:
        (SVGImage):

2012-12-07  Alec Flett  <alecflett@chromium.org>

        IndexedDB: propagate transaction_ids through open/upgradeneeded
        https://bugs.webkit.org/show_bug.cgi?id=103922

        Reviewed by Tony Chang.

        Make sure front-end is always generating the transaction id,
        so that it can be relied upon as an alternative to the
        to-be-deprecated IDBTransactionBackendInterface pointer.

        No new tests, this is one stage in a larger refactor.

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::VersionChangeOperation):
        (IDBDatabaseBackendImpl::VersionChangeOperation):
        (WebCore::IDBDatabaseBackendImpl::PendingOpenCall::create):
        (WebCore::IDBDatabaseBackendImpl::PendingOpenCall::transactionId):
        (WebCore::IDBDatabaseBackendImpl::PendingOpenCall::PendingOpenCall):
        (IDBDatabaseBackendImpl::PendingOpenCall):
        (WebCore::IDBDatabaseBackendImpl::PendingOpenWithVersionCall::create):
        (WebCore::IDBDatabaseBackendImpl::PendingOpenWithVersionCall::transactionId):
        (WebCore::IDBDatabaseBackendImpl::PendingOpenWithVersionCall::PendingOpenWithVersionCall):
        (IDBDatabaseBackendImpl::PendingOpenWithVersionCall):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::createTransaction):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackendImpl::openConnectionWithVersion):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):

2012-12-07  Dima Gorbik  <dgorbik@apple.com>

        Implement general ::cue pseudo element for the <video>
        https://bugs.webkit.org/show_bug.cgi?id=104043

        Reviewed by Eric Carlson.

        Implemented the ::cue pseudo element to be able to style all WebVTT cues.
        Added the subcontainer with a '::cue' pseudoId in between the TextTrackContainerElement and WebVTT nodes to separate
        user agent default styles from user defined styles for the cue elements.

        Test: media/track/track-css-all-cues.html

        * css/CSSSelector.cpp: ::cue pseudo selector doesn't have a valid prefix but should be allowed in the user-agent stylesheet.
        (WebCore::CSSSelector::parsePseudoType):
        * html/shadow/MediaControlElements.cpp:
        (WebCore):
        (WebCore::MediaControlTextTrackContainerElement::createSubtrees): create a subcontainer and set its pseudoId to '::cue'.
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): append WebVTT nodes to the newly created subcontainer.
        * html/shadow/MediaControlElements.h:
        (MediaControlTextTrackContainerElement):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createTextTrackDisplay): initiate creating subtrees for the MediaControlTextTrackContainerElement.
        * html/shadow/MediaControlsChromium.cpp:
        (WebCore::MediaControlsChromium::createTextTrackDisplay):

2012-12-06  Geoffrey Garen  <ggaren@apple.com>

        Crash in JSC::Bindings::RootObject::globalObject() sync'ing notes in Evernote
        https://bugs.webkit.org/show_bug.cgi?id=104321
        <rdar://problem/12770497>

        Reviewed by Sam Weinig.

        Missed a null check.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject JSObject]): If our root object has been cleared, don't
        try to dereference it. This happens in Evernote during tear-down.

        This matches the behavior of other methods in the same class.

        (_isSafeScript returns false if the root object has been cleared.)

        If we believe _isSafeScript is a good idea, it's probably the right test
        to use here (as opposed to just null-checking _rootObject) because this API
        gives the client unlimited access to the underlying JavaScript object.

2012-12-07  Stephen Chenney  <schenney@chromium.org>

        XMLSerializer is too aggressive in adding prefixes
        https://bugs.webkit.org/show_bug.cgi?id=104387

        Reviewed by Ryosuke Niwa.

        We have been adding "xlink:" and "xmlns:" and "xml:" prefixes to any
        attribute that is in one of those namespaces but which did not already
        have the matching prefix. This appears to be in error, at least
        compared to other browsers.

        The correct behavior appears to be to add the prefix only if there is
        no existing prefix. If there is an existing prefix, we now leave it alone.

        No new tests. Existing test expanded.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendAttribute): Only replace the prefix
        attribute name prefix if it is empty, and in one of the recognised
        namespaces.

2012-12-07  Jon Lee  <jonlee@apple.com>

        Display the auto-start label image after a delay
        https://bugs.webkit.org/show_bug.cgi?id=104173
        <rdar://problem/12820071>

        Reviewed by Dan Bernstein.

        Treat the button now as a label. Once the user has hovered over the plug-in, wait a little while before showing the label.

        * rendering/RenderSnapshottedPlugIn.h:
        (RenderSnapshottedPlugIn): Add a one-shot timer, and a variable representing whether the label should
        be drawn. Remove the variable that determines whether the label is active.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn): Set the time to a delay of 1 second.
        (WebCore::RenderSnapshottedPlugIn::paintReplaced): Paint the label only when we should.
        (WebCore::RenderSnapshottedPlugIn::paintLabel): The label should only paint in its hovered state.
        (WebCore::startLabelImage): Renamed.
        (WebCore::RenderSnapshottedPlugIn::repaintLabel): Renamed.
        (WebCore::RenderSnapshottedPlugIn::hoverDelayTimerFired): Now that the timer has fired, we should paint
        the label. Repaint.
        (WebCore::RenderSnapshottedPlugIn::handleEvent): Update event handling. Click event handler is the
        same, except we move the label check inside so that if the click is not the left label we don't
        fall through to the other irrevelant if clauses.
            For the mouse down handler, make sure to check for the left label. If the hover timer is still running,
        stop it, so that we don't draw a label while the user is in the middle of a mouse gesture.
            Redo mouse over and out. On mouse over we start the delay timer. On mouse out we stop the delay timer
        if it is still running, reset state, and paint the label out.
        (WebCore::RenderSnapshottedPlugIn::layout): Refactor.

        * Resources/startButtonPressed.png: Removed.
        * Resources/startButtonPressed@2x.png: Removed.
        * WebCore.xcodeproj/project.pbxproj:

2012-12-07  Scott Violet  <sky@chromium.org>

        [chromium] Remove linux theme related files and switch to default
        https://bugs.webkit.org/show_bug.cgi?id=103897

        Reviewed by Dimitri Glazkov.

        Linux related theme files are now named Default.

        No new tests, code cleanup.

        * WebCore.gyp/WebCore.gyp: Update files
        * WebCore.gypi: Update files
        * platform/chromium/PlatformThemeChromiumLinux.cpp: Removed.
        * platform/chromium/PlatformThemeChromiumLinux.h: Removed.
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp: Removed.
        * platform/chromium/ScrollbarThemeChromiumLinux.h: Removed.
        * rendering/RenderThemeChromiumAndroid.cpp:
        (WebCore::RenderThemeChromiumAndroid::extraDefaultStyleSheet): Linux->Default
        * rendering/RenderThemeChromiumAndroid.h: Change superclass
        * rendering/RenderThemeChromiumLinux.cpp: Removed.
        * rendering/RenderThemeChromiumLinux.h: Removed.

2012-12-07  Eric Carlson  <eric.carlson@apple.com>

        Captions menu doesn't update to track changes
        https://bugs.webkit.org/show_bug.cgi?id=104393

        Reviewed by Dean Jackson.

        Flag the captions menu as needing an update when tracks are added or removed. Don't actually
        change the menu until it needs to be displayed.

        No new tests, media/video-controls-captions-trackmenu.html was updated to test this.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addTextTrack): Call closedCaptionTracksChanged().
        (WebCore::HTMLMediaElement::didRemoveTrack): Ditto.
        (WebCore::HTMLMediaElement::configureTextTracks): Ditto.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement):
            Intialize m_trackListHasChanged.
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay): Call rebuildTrackListMenu if
            the track list has changed.
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu): Renamed from resetTrackListMenu.
        * html/shadow/MediaControlElements.h:
        (WebCore::MediaControlClosedCaptionsTrackListElement::resetTrackListMenu): Just set m_trackListHasChanged.

        * html/shadow/MediaControls.h:
        (WebCore::MediaControls::closedCaptionTracksChanged): New, do nothing for base class.

        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::toggleClosedCaptionTrackList): Update the track list before 
            showing it.
        (WebCore::MediaControlsApple::closedCaptionTracksChanged):
        * html/shadow/MediaControlsApple.h:

2012-12-07  Stephen White  <senorblanco@chromium.org>

        CSS url() filters with forward references don't work
        https://bugs.webkit.org/show_bug.cgi?id=90405

        Based on a patch by Keyar Hood.

        Reviewed by Dirk Schulze.

        In order for CSS to reference SVG filters that will occur later in
        the document, or will be added at a future time, we need a way to
        notify the target element (the one the filter style is applied to)
        when the correct SVG filter is added to the DOM.
        There is already code for SVG elements that handles this problem, in
        SVGResourcesCache. This patch allows any element to have a reference to
        an SVG element in SVGResourceCache.

        Tests: css3/filters/effect-reference-after.html
               css3/filters/effect-reference-delete-crash.html
               css3/filters/effect-reference-delete.html
               css3/filters/effect-reference-rename.html
               css3/filters/effect-reference-reset-style-delete-crash.html
               svg/filters/filter-cycle.html

        * dom/Element.cpp:
        (WebCore::Element::hasPendingResources): Added
        (WebCore::Element::setHasPendingResources): Added
        (WebCore::Element::clearHasPendingResources): Added
        * dom/Element.h:
        Accessors for ElementRareData's new bit flag.
        (WebCore::Element::buildPendingResource):
        Virtual function to override for referenced elements (moved from SVGElement).
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        Add a new bit flag to indicate whether the element depends on pending resources or not.
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):
        Changed to the new function signature for FilterEffectRenderer::build().
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        Changed signature to accept a RenderObject rather than a Document, so we know which node to notify when the SVG filter arrives.  If the referenced filter cannot be found, add its id as a pending reference.
        (WebCore::FilterEffectRenderer::build):
        Changed signature to accept a RenderObject rather than a Document, so we know which node to notify when the SVG filter arrives.
        * rendering/FilterEffectRenderer.h:
        Change to signatures of build() and buildReferenceFilter() to pass
        a RenderObject instead of a Document.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffectRenderer):
        Use the new semantics for FilterEffectRenderer::build().
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        Notify the cache if a RenderObject is destroyed.
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        Call clearHasPendingResourceIfPossible on the SVGDocumentExtensions, not
        on the element, since we want to support generic Elements.
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::buildCachedResources):
        Add support for building filters on non-SVG elements.
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::addResourcesFromRenderObject):
        Do cycle detection only on SVG elements.
        (WebCore::SVGResourcesCache::clientStyleChanged):
        For non-SVG elements, set a synthetic style change when parent resources
        are invalidated.
        (WebCore::SVGResourcesCache::resourceDestroyed):
        Add support for non-SVG Elements.
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::isElementPendingResource):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemoval):
        Changed to allow use of Element instead of SVGElement.
        (WebCore::SVGDocumentExtensions::clearHasPendingResourcesIfPossible):
        Moved from SVGElement, and made to work on any Element.  This way,
        we avoid adding this function to Element itself.
        * svg/SVGDocumentExtensions.h:
        SVGElement -> Element.
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        All functions moved to Element, except for clearHasPendingResourcesIfPossible() moved to SVGDocumentExtensions.
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::SVGElementRareData):
        m_hasPendingResources add accessors moved to ElementRareData.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):
        SVGElement -> Element, and call SVGDocumentExtensions for
        clearHasPendingResourcesIfPossible().

2012-12-07  Eberhard Graether  <egraether@google.com>

        Web Inspector: Add shortcut to set visibility:hidden on elements in the ElementsPanel
        https://bugs.webkit.org/show_bug.cgi?id=104146

        Reviewed by Pavel Feldman.

        This change adds the shortcut H to set and unset visibility:hidden on the inline style
        of elements in the Elementspanel. This feature makes it easier to look for elements that
        cause bad rendering performance, because visibility:hidden does not paint the element,
        but preserves the layout.

        No new tests.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.toggleInlineVisibility):
        * inspector/front-end/ElementsPanelDescriptor.js:
        (WebInspector.ElementsPanelDescriptor.prototype.registerShortcuts):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.handleShortcut):
        * inspector/front-end/KeyboardShortcut.js:

2012-12-07  Andreas Kling  <akling@apple.com>

        Improve our decoded data size estimation for style sheets.
        <http://webkit.org/b/104388>

        Reviewed by Antti Koivisto.

        Tweak how we estimate the total decoded size of a given style sheet. (We were guessing at about 30% of actual size.)
        This is just used as a hint to the WebCore cache.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::averageSizeInBytes):
        * css/StyleRule.cpp:
        (WebCore::StyleRule::averageSizeInBytes):

2012-12-07  Robert Hogan  <robert@webkit.org>

        REGRESSION(r127163): Content is offset to the right at rea.ru
        https://bugs.webkit.org/show_bug.cgi?id=103116

        Reviewed by David Hyatt.

        The top margin edge of a self-collapsing block that clears a float intrudes up into it by the height of the margin,
        so to ensure any child floats of the self-collapsing block only go as far as the top content edge 
        add the margin back in to the block's current height before placing them.

        Tests: fast/block/margin-collapse/self-collapsing-block-with-float-child-collapsed-margins.html
               fast/block/margin-collapse/self-collapsing-block-with-float-child.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace):

2012-12-07  Alexis Menard  <alexis@webkit.org>

        Improve r136754 by hardening checks of expected values for background-position.
        https://bugs.webkit.org/show_bug.cgi?id=104380

        Reviewed by Antti Koivisto.

        r136754 was landed to fix the problem of checking successively two calc
        values with validUnit. It was asserting as validUnit expect you to use
        the parsed value of the calc after the call. In this case we pre-check the
        background-position longhand to count how many values it has to then
        call the right parsing functions accordingly. While r136754 is not
        wrong it is better to harden isPotentialPositionValue with the real
        expected units and keywords. For this matter we can reuse the
        ReleaseParsedCalcValueCondition enum which was created with the same
        idea as this patch. If you are not interested of the calc parsed
        value when calling validUnit() you can now specify it, I believe it is
        good to have it explicit to avoid mistake in the future.

        No new tests : this is covered by css3/*, fast/backgrounds/*.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validCalculationUnit):
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::isPotentialPositionValue):
        * css/CSSParser.h:
        (WebCore::CSSParser::validUnit):
        (CSSParser):

2012-12-07  Brent Fulgham  <bfulgham@webkit.org>

        Remove unnecessary casts in transformations.
        https://bugs.webkit.org/show_bug.cgi?id=104376

        Reviewed by Simon Fraser.

        Several casts from float-to-double are performed prior to
        storing the result in a double type. These casts are unnecessary
        overhead and reduce the clarity of the source code.

        No new tests. Covered by existing CSS test cases.

        * platform/graphics/transforms/RotateTransformOperation.cpp:
        * platform/graphics/transforms/TransformationMatrix.cpp:

2012-12-07  Antoine Quint  <graouts@apple.com>

        Provide the backend for exposing the layer tree to the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=103513

        Reviewed by Pavel Feldman.

        The purpose of this patch is to provide a new agent enabling the Web Inspector to interface
        with WebCore to access information about the render layer tree and, more specifically, expose
        useful information about layers backed by textures composited on the GPU such as metrics and
        backing store. Thus we now provide a LayerTreeAgent which will inform the front-end of 
        changes to the render layer tree via a new layerTreeDidChange event, providing an object
        containing the entire hierarchy of RenderLayers for the inspected document. This hierarchy 
        can be queried at any time using the .getLayerTree() method on the LayerTreeAgent. Finally, 
        the LayerTreeAgent also exposes a .nodeIdForLayerId() method allowing to get the id of the 
        node associated with the RenderLayer with the provided layer id.
        
        In terms of implementation, RenderLayerCompositor has been changed such that in its 
        updateCompositingLayers() method we call the layerTreeDidChange method on the 
        InspectorLayerTreeAgent instance via the InspectorInstrumentation.

        Test: inspector-protocol/layer-tree.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.json: Define new types IntRect (x, y, width, height) and Layer, which 
        holds the information for a RenderLayer (layerId, bounds, isComposited, memory, 
        compositedBounds) and its children (childLayers). We also define the methods of the 
        LayerTreeAgent object (enable, disable, getLayerTree, nodeIdForLayerId) and the 
        layerTreeDidChange event it  
        fires.
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushNodePathForRenderLayerToFrontend): New method facilitating 
        pushing the node associated with a given RenderLayer to the front-end.
        (WebCore):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::layerTreeDidChangeImpl):
        (WebCore::InspectorInstrumentation::renderLayerDestroyedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::layerTreeDidChange):
        (WebCore::InspectorInstrumentation::renderLayerDestroyed):
        * inspector/InspectorLayerTreeAgent.cpp: Added.
        (WebCore):
        (LayerTreeAgentState):
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::~InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::setFrontend):
        (WebCore::InspectorLayerTreeAgent::clearFrontend):
        (WebCore::InspectorLayerTreeAgent::restore):
        (WebCore::InspectorLayerTreeAgent::reset):
        (WebCore::InspectorLayerTreeAgent::enable):
        (WebCore::InspectorLayerTreeAgent::disable):
        (WebCore::InspectorLayerTreeAgent::layerTreeDidChange):
        (WebCore::InspectorLayerTreeAgent::renderLayerDestroyed):
        (WebCore::InspectorLayerTreeAgent::getLayerTree):
        (WebCore::InspectorLayerTreeAgent::buildObjectForRootLayer):
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer): Build the entire hierarchy of 
        RenderLayers from the provided RenderLayer.
        (WebCore::InspectorLayerTreeAgent::buildObjectForIntRect):
        (WebCore::InspectorLayerTreeAgent::bind):
        (WebCore::InspectorLayerTreeAgent::unbind):
        (WebCore::InspectorLayerTreeAgent::nodeIdForLayerId):
        * inspector/InspectorLayerTreeAgent.h: Added.
        (WebCore):
        (InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::create):
        * inspector/InstrumentingAgents.h:
        (WebCore):
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorLayerTreeAgent):
        (WebCore::InstrumentingAgents::setInspectorLayerTreeAgent):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers): Call the layerTreeDidChange method 
        on the LayerTreeAgent via the InspectorInstrumentation to inform the front-end that the 
        RenderLayer hierarchy has changed.
        (WebCore):
        (WebCore::RenderLayerCompositor::layerBecameNonComposited): Call the renderLayerDestroyed 
        method on the LayerTreeAgent via the InspectorInstrumentation to unbind the layer that is 
        being destroyed.
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-12-07  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Check SSV version when opening database
        https://bugs.webkit.org/show_bug.cgi?id=102243

        Reviewed by Tony Chang.

        Ensure that the data format (SerializedScriptValue) isn't "from the future" when opening
        a backing store. Treat an unknown version the same as an unknown schema version.

        Chromium-side test at https://codereview.chromium.org/11470013/ (same as other schema version tests)

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore):
        (WebCore::isSchemaKnown): Check data version as well.
        (WebCore::setUpMetadata): Ensure data version is recorded; bump schema version.
        * Modules/indexeddb/IDBLevelDBCoding.cpp: Encoding for "DataVersion" global metadata entry.
        (IDBLevelDBCoding):
        (WebCore::IDBLevelDBCoding::compare):
        (WebCore::IDBLevelDBCoding::DataVersionKey::encode):
        * Modules/indexeddb/IDBLevelDBCoding.h:
        (DataVersionKey):
        (IDBLevelDBCoding):
        * bindings/js/SerializedScriptValue.cpp:
        (SerializedScriptValue::wireFormatVersion): New method (JSC side).
        * bindings/js/SerializedScriptValue.h:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::wireFormatVersion): New method (V8 side).
        (WebCore):
        * bindings/v8/SerializedScriptValue.h:
        (SerializedScriptValue):

2012-12-07  Andreas Kling  <akling@apple.com>

        Throw away StyleResolvers that haven't been used for a long time.
        <http://webkit.org/b/104314>

        Reviewed by Antti Koivisto.

        A lot of memory gets tied up in StyleResolver and the structures and caches that hang from it.
        Add a mechanism to throw it away after it's been unused for a while (1 minute.)
        This frees up large amounts of memory on inactive pages (background tabs) and static content.

        We already have a number of scenarios where the document style is invalidated by throwing away
        the StyleResolver so the major code paths are prepared for having a null StyleResolver* on occasion.

        ~20MB progression on Membuster3.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):

            Call document()->didAccessStyleResolver() from the relevant parts of StyleResolver's public API.
            This prevents Document from throwing the StyleResolver away for 1 minute after it's used.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createStyleResolver):
        (WebCore::Document::didAccessStyleResolver):
        (WebCore::Document::styleResolverThrowawayTimerFired):

            Add a mechanism to call clearStyleResolver() on a refreshing timer.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):

            If an attribute change occurs while the document doesn't have a StyleResolver, dirty the element style
            since we can't be sure that the attribute change didn't affect any rules.

2012-12-07  Antonio Gomes  <a1.gomes@sisa.samsung.com>

        REGRESSION(r136947): Made two tests fail on all platforms (Requested by tonikitoo-ll on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=104368

        Unreviewed partial rollout.

        r136947 was too aggressive in the sense of fixing RenderBox::canBeScrolledAndHasScrollableArea
        as part of itself. Revert the related changes in order to fix both
        fast/events/autoscroll-should-not-stop-on-keypress.html and
        fast/events/autoscroll-in-textfield.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::canBeScrolledAndHasScrollableArea):
        * rendering/RenderBox.h:

2012-12-07  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [TexMap] Can not do multiple accelerated animations
        https://bugs.webkit.org/show_bug.cgi?id=104364

        Reviewed by Kenneth Rohde Christiansen.

        By removing all animations with the same name, it is not possible to animate more than one property accelerated. 
        Instead only remove any animations with both same name and property.

        Covered by animations/opacity-transform-animation.html.

        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore::GraphicsLayerAnimations::add):
        (WebCore::GraphicsLayerAnimations::remove):
        * platform/graphics/GraphicsLayerAnimation.h:
        (GraphicsLayerAnimations):

2012-12-07  Sujin Park  <sujjin.park@gmail.com>

        [EFL] Fix build warning in StyleResolver.cpp using gcc 4.7.2
        https://bugs.webkit.org/show_bug.cgi?id=104262

        Reviewed by Alexis Menard.

        EFL port treats build warning as compile error and there are
        maybe-uninitialized when building with gcc 4.7.2.
        This patch adds default case to resolve a build break.

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

2012-12-06  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Chromium] Ctrl + ']' "Goto right panel" keyboard shortcut doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=104250

        Reviewed by Pavel Feldman.

        Ignore "keypress" event resulting from a WM_CHAR message emitted by Win7 upon Ctrl + ']' keypress.

        * inspector/front-end/InspectorView.js:
        (WebInspector.InspectorView.prototype._keyPress): Ignore all events with charCode < 32.

2012-10-03  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: provide a way to reload page with given script preprocessor.
        https://bugs.webkit.org/show_bug.cgi?id=80992

        Reviewed by Yury Semikhatsky.

        This change introduces a way to inject 'preprocessor' script that would process
        each JavaScript file before it gets into the VM for compilation. That way inspector
        can expose capabilities such as assessing code coverage or tracing all the calls.

        Preprocessor script is stored in the page agent where it waits for reload to happen.
        Upon reload, ScriptDebugServer is using it to patch the script sources.

        
        Test: inspector/debugger/debugger-script-preprocessor.html

        * bindings/js/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::setScriptPreprocessor):
        (ScriptDebugServer):
        * bindings/v8/DebuggerScript.js:
        * bindings/v8/ScriptDebugServer.cpp:
        (ScriptDebugServer::ScriptPreprocessor):
        (WebCore::ScriptDebugServer::ScriptPreprocessor::ScriptPreprocessor):
        (WebCore::ScriptDebugServer::ScriptPreprocessor::preprocessSourceCode):
        (WebCore::ScriptDebugServer::ScriptPreprocessor::~ScriptPreprocessor):
        (WebCore):
        (WebCore::ScriptDebugServer::~ScriptDebugServer):
        (WebCore::ScriptDebugServer::setScriptSource):
        (WebCore::ScriptDebugServer::setScriptPreprocessor):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        * bindings/v8/ScriptDebugServer.h:
        (ScriptDebugServer):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createInjectedScript):
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::frameNavigated):
        * inspector/InspectorPageAgent.h:
        (WebCore::InspectorPageAgent::page):
        (WebCore::InspectorPageAgent::scriptPreprocessor):
        (InspectorPageAgent):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::create):
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::injectedScriptForEval):
        (WebCore::PageDebuggerAgent::didClearMainFrameWindowObject):
        (WebCore):
        * inspector/PageDebuggerAgent.h:
        (WebCore):
        (PageDebuggerAgent):

2012-12-07  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: the "Sources" column is always empty in CSS selector profiles
        https://bugs.webkit.org/show_bug.cgi?id=104225

        Reviewed by Pavel Feldman.

        r112923 and preceding changesets modified the CSSOM wrapper creation for StyleRules in a way
        that would not specify the parent CSSStyleSheet for the CSSStyleRules created. Instead,
        styleResolver->ensureFullCSSOMWrapperForInspector(rule) is now used to make sure the CSSStyleRule
        has a valid parent CSSStyleSheet.

        Test: inspector/profiler/selector-profiler-url.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::applyProperties):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willMatchRuleImpl):
        (WebCore::InspectorInstrumentation::willProcessRuleImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore):
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willMatchRule):
        (WebCore::InspectorInstrumentation::willProcessRule):

2012-12-05  Antonio Gomes  <a1.gomes@sisa.samsung.com>

        Rework bug 97927 to not depend on RenderLayer::allowsScrolling
        https://bugs.webkit.org/show_bug.cgi?id=103999

        Reviewed by James Robinson.

        Patch makes it possible for methods like
        RenderLayer::{updateScrollbarsAfterLayout,updateScrollbarsAfterStyleChange}
        to not depend on RenderLayer::allowsScrolling to determine if a layer should
        be added or removed from its FrameView's ScrollableArea set.

        Following the same logic, the patch also fixes RenderBox::canBeScrolledAndHasScrollableArea
        method to take into account the box' scroll allowance in a given direction only
        when it overflows. This allows simplifying custom methods like InRegionScrollerPrivate::canScrollRenderBox
        (@WebKit/blackberry/Api/InRegionScroller.cpp).

        The naming pattern for the newly added methods were chosen to keep the consistency
        with the existing ones, in the same class.

        No new test: it is already covered by ScrollingCoordinatorChromiumTest.clippedBodyTest.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::canBeScrolledAndHasScrollableArea):
        * rendering/RenderBox.h:
        (RenderBox):
        (WebCore::RenderBox::hasScrollableOverflowX):
        (WebCore::RenderBox::hasScrollableOverflowY):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasScrollableHorizontalOverflow):
        (WebCore):
        (WebCore::RenderLayer::hasScrollableVerticalOverflow):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::updateScrollbarsAfterStyleChange):
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-12-07  Max Feil  <mfeil@rim.com>

        [BlackBerry] make "isVideo" information available to platform media player
        https://bugs.webkit.org/show_bug.cgi?id=104334

        Reviewed by Rob Buis.

        The platform player needs to know whether the element is <video>
        or <audio>, so it can make certain decisions before metadata
        is ready. This is part of a performance optimization refactor
        which does not change functionality so no new tests are required.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::load):

2012-12-07  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] [AC] Implement ImageExtractor::extractImage in GraphicsContext3DEfl.
        https://bugs.webkit.org/show_bug.cgi?id=104271.

        Reviewed by Kenneth Rohde Christiansen.

        This patch implements ImageExtractor::extractImage in GraphicsContext3DEfl.

        Covered by existing tests.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::~ImageExtractor):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

2012-12-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Use always the order iterator from data member in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=104112

        Reviewed by Tony Chang.

        Some methods receive it as parameter and others use the data
        member.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems):
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::computeNextFlexLine):
        (WebCore::RenderFlexibleBox::alignFlexLines):
        (WebCore::RenderFlexibleBox::alignChildren):
        (WebCore::RenderFlexibleBox::flipForRightToLeftColumn):
        (WebCore::RenderFlexibleBox::flipForWrapReverse):
        * rendering/RenderFlexibleBox.h:

2012-12-07  Kent Tamura  <tkent@chromium.org>

        Improve confusing code in BaseMultipleFieldsDateAndTimeInputType
        https://bugs.webkit.org/show_bug.cgi?id=104353

        Reviewed by Kentaro Hara.

        This doesn't change any behavior because call sites of
        isEditControlOwnerDisabled and isEditControlOwnerReadOnly treat them
        similarly.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isEditControlOwnerDisabled):
        Checks element()->disabled, not readOnly.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isEditControlOwnerReadOnly):
        Checks element()->readOnly, not disabled.

2012-12-07  Jon Lee  <jonlee@apple.com>

        Build fix.

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

2012-12-04  Jon Lee  <jonlee@apple.com>

        Add PlugInOriginHash
        https://bugs.webkit.org/show_bug.cgi?id=103655
        <rdar://problem/12778949>

        Reviewed by Alexey Proskuryakov.

        Add the concept of plug-in origin hashes, which are based on a combination of the base domains of the
        page's main frame and the plug-in, and the plug-in MIME type.

        * plugins/PlugInOriginHash.cpp: Added.
        (WebCore::addCaseFoldedCharacters): Add the case-folded string to the hash.
        (WebCore::PlugInOriginHash::hash): The hash is based on the concatenation of the page's host, the plug-in
        URL's host, and the MIME type. We use StringHasher to get all 32-bits of the hash, since using StringImpl's hash
        masks out 8 of the hash bits to make room for bit flags.
        * plugins/PlugInOriginHash.h: Added.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-12-06  Kent Tamura  <tkent@chromium.org>

        Refactoring: Clean up placeholder attribute usage
        https://bugs.webkit.org/show_bug.cgi?id=104337

        Reviewed by Kentaro Hara.

        No new tests. This doesn't change any behavior.

        * html/HTMLInputElement.cpp: Remove placeholder and setPlacehodler.
        * html/HTMLInputElement.h: Ditto.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::strippedPlaceholder):
        We can use fastGetAttribute for placeholder.
        (WebCore::HTMLTextFormControlElement::isPlaceholderEmpty):
        Ditto.

2012-12-06  Kent Tamura  <tkent@chromium.org>

        Refactoring: Rename HTMLFormControlElement::required to isRequired
        https://bugs.webkit.org/show_bug.cgi?id=104336

        Reviewed by Kentaro Hara.

        m_required should be m_isRequired, and required() should be
        isRequired. It's safe to rename them because HTML*Element::required IDL
        attributes are [Reflected].
        http://www.webkit.org/coding/coding-style.html#names-bool

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isRequired):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithControl):
        * dom/CheckedRadioButtons.cpp:
        (WebCore::RadioButtonGroup::add):
        (WebCore::RadioButtonGroup::requiredAttributeChanged):
        (WebCore::RadioButtonGroup::remove):
        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::valueMissing):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::valueMissing):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::parseAttribute):
        (WebCore::HTMLFormControlElement::isRequired):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isRequiredFormControl):
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::valueMissing):
        (WebCore::HTMLSelectElement::isRequiredFormControl):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::isRequiredFormControl):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::valueMissing):

2012-12-06  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Implement Element::shadowRoot with prefix
        https://bugs.webkit.org/show_bug.cgi?id=102912

        Reviewed by Dimitri Glazkov.

        - Added Element::shadowRoot() which return the youngest author shadow root.
        - Renamed existing Node::shadowRoot() to containingShadowRoot() to avoid name shadowing.
          The name shadowRoot() is confusing anyway so this is good opportunity to rename it.

        Test: fast/dom/shadow/shadow-aware-shadow-root.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::scopeFor):
        (WebCore::StyleScopeResolver::addHostRule):
        * dom/Element.cpp:
        (WebCore::Element::shadowRoot):
        (WebCore):
        * dom/Element.h:
        (Element):
        * dom/Element.idl:
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::setShouldCollectSelectFeatureSet):
        * dom/Node.cpp:
        (WebCore::Node::rendererIsEditable):
        (WebCore::Node::shadowHost):
        (WebCore::Node::shadowAncestorNode):
        (WebCore::Node::containingShadowRoot):
        * dom/Node.h:
        (Node):
        * dom/Range.cpp:
        (WebCore::Range::shadowRoot):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertedInto):
        (WebCore::ShadowRoot::removedFrom):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::isAccessible):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * editing/htmlediting.cpp:
        (WebCore::indexForVisiblePosition):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::scopedAttributeChanged):
        (WebCore::HTMLStyleElement::registerWithScopingNode):
        (WebCore::HTMLStyleElement::removedFrom):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseAttribute):
        (WebCore::HTMLContentElement::insertedInto):
        (WebCore::HTMLContentElement::removedFrom):
        * html/shadow/HTMLShadowElement.cpp:
        (WebCore::HTMLShadowElement::insertedInto):
        (WebCore::HTMLShadowElement::removedFrom):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::attach):
        (WebCore::InsertionPoint::detach):
        (WebCore::InsertionPoint::isActive):
        (WebCore::InsertionPoint::childrenChanged):
        (WebCore::InsertionPoint::insertedInto):
        (WebCore::InsertionPoint::removedFrom):
        (WebCore::InsertionPoint::setResetStyleInheritance):
        * page/EventHandler.cpp:
        (WebCore::instanceAssociatedWithShadowTreeElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::correspondingElement):
        (WebCore::collectInstancesForSVGElement):

2012-12-06  Michael Pruett  <michael@68k.org>

        IndexedDB: Replace int64 with int64_t
        https://bugs.webkit.org/show_bug.cgi?id=104338

        Reviewed by Kentaro Hara.

        Cleaning up coding inconsistencies, no change in behavior.

        Tests: storage/indexeddb/*

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):

2012-12-06  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] Allow detailed timing on same origin sites
        https://bugs.webkit.org/show_bug.cgi?id=104328

        Reviewed by Tony Gentilcore.

        This block was lost when I moved it to PerformanceResourceTiming.cpp.

        Test: http/tests/w3c/webperf/submission/resource-timing/html/test_resource_attribute_order.html

        * page/PerformanceResourceTiming.cpp:
        (WebCore::passesTimingAllowCheck):

2012-12-06  Rick Byers  <rbyers@chromium.org>

        CSS cursor property should support webkit-image-set
        https://bugs.webkit.org/show_bug.cgi?id=99493

        Reviewed by Beth Dakin.

        Add support for image scale factors attached to custom mouse cursor images
        behind ENABLE(MOUSE_CURSOR_SCALE).

        This required refactoring CSSCursorImageValue to derive directly from
        CSSValue since it can contain either a CSSImageValue or a CSSImageSetValue.
        If it contains an image-set, then we can plumb directly through to the
        CSSImageSetValue.  If it contains an image, then either we can plumb directly
        through to the CSSImageValue, or if the URL represents an SVG cursor we have
        to intercept the image loading in order to substitute the actual SVG image URL
        and do the appropriate lifetime management.

        Tests: fast/css/cursor-parsing-image-set.html
               fast/events/mouse-cursor-image-set.html

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_MOUSE_CURSOR_SCALE - disabled
        * GNUmakefile.features.am: ditto
        * css/CSSCursorImageValue.cpp: Refactor to inherit directly from CSSValue and support image sets
        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::customCssText):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        (WebCore::CSSCursorImageValue::cachedImage):
        (WebCore::CSSCursorImageValue::cachedOrPendingImage):
        (WebCore::CSSCursorImageValue::isSVGCursor):
        (WebCore::CSSCursorImageValue::cachedImageURL):
        (WebCore::CSSCursorImageValue::clearCachedImage):
        (WebCore::CSSCursorImageValue::reportDescendantMemoryUsage):
        * css/CSSCursorImageValue.h: Remove cursor-specific hacks
        (WebCore::CSSCursorImageValue::create):
        (CSSCursorImageValue):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImageValue.h:
        (CSSImageValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Parse cursor(-webkit-image-set(...)) rules
        * css/CSSValue.h:
        (WebCore::CSSValue::isImageValue):
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyCursor::applyValue):
        * css/StyleResolver.cpp: Hook up new CSSCursorImageValue support since it can't be handled like other images any more.
        (WebCore::StyleResolver::styleImage):
        (WebCore::StyleResolver::cursorOrPendingFromValue):
        (WebCore::StyleResolver::loadPendingImage):
        * css/StyleResolver.h:
        (StyleResolver):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor): Handle StyleCachedImageSet images and plumb scale factor through
        * platform/Cursor.cpp:
        (WebCore::Cursor::Cursor): Add imageScaleFactor
        * platform/Cursor.h: Add imageScaleFactor
        (Cursor):
        (WebCore::Cursor::imageScaleFactor):
        * platform/chromium/CursorChromium.cpp: Add imageScaleFactor
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::operator=):
        * rendering/style/CursorData.h: Clarify hotspot units
        (CursorData):
        * rendering/style/StyleCachedImage.h:
        (StyleCachedImage::cachedImage): Override new virtual.
        * rendering/style/StyleCachedImageSet.h:
        (StyleCachedImageSet::cachedImage): Override new virtual.
        * rendering/style/StyleImage.h:
        (StyleImage::cachedImage): Add new virtual method to avoid lots of casts and typechecks.
        * rendering/style/StylePendingImage.h: Add CSSCursorImageValue support
        (WebCore::StylePendingImage::cssCursorImageValue):
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentCursorInfo): Print non-identity scale factors for testing

2012-12-06  Hayato Ito  <hayato@chromium.org>

        Event's relatedTarget re-targeting does not occur for manually fired mouse events created by event.initMouseEvent().
        https://bugs.webkit.org/show_bug.cgi?id=102681

        Reviewed by Dimitri Glazkov.

        Make sure that event's relatedTarget re-targeting occurs for mouse
        events created by event.initMouseEvent().  Since user-generated
        mouse events can have a relatedTarget which is same to the target
        node, the algorithm which calculates event's ancestors is also
        updated so that ancestors are not shrunk wrongly.

        Test: fast/events/dispatch-synthetic-mouseevent.html
              fast/dom/shadow/shadow-dom-event-dispatching.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedTargetAdjuster::adjust):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::create):
        (WebCore::MouseEventDispatchMediator::MouseEventDispatchMediator):
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEventDispatchMediator::isSyntheticMouseEvent):
        (MouseEventDispatchMediator):
        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent):

2012-12-06  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Disabled file input box stops a certain other div from being rendered
        https://bugs.webkit.org/show_bug.cgi?id=104226

        Reviewed by Dimitri Glazkov.

        The bug was caused by setNeedsStyleRecalc() call during style recalculation,
        which resulted in inconsistent ChildNeedsStyleRecalc flags in DOM tree.

        When reattach of file input happens during style recalculation,
        RenderFileUploadControl::updateFromElement() is called from attach().
        It may change the disabled state of the upload button in its shadow tree,
        but it triggers style recalculation.

        This patch solves this issue by setting disabled state of the upload button in
        FileInputType::disabledAttributeChanged instead of RenderFileUploadControl.

        Test: fast/forms/file/sibling-of-disabled-file-input.html

        * html/FileInputType.cpp:
        (WebCore::FileInputType::disabledAttributeChanged): Added.
        * html/FileInputType.h:
        (FileInputType): Declare disabledAttributeChanged.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::updateFromElement): Remove call to button->setDisabled().

2012-12-06  Dominic Cooney  <dominicc@chromium.org>

        Element.pseudo property should be prefixed
        https://bugs.webkit.org/show_bug.cgi?id=104060

        Reviewed by Hajime Morita.

        Other Shadow DOM properties are prefixed; pseudo should be too.

        Covered by updated tests in fast/dom/shadow.

        * dom/Element.idl:

2012-12-06  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Remove the sanitize mechanism from LineFragmentationData
        https://bugs.webkit.org/show_bug.cgi?id=104234

        Reviewed by David Hyatt.

        Remove previous work that ensured an invalid region is never returned by the containingRegion getter. After r136793 the blocks always
        relayout children if the region chain changes. This means the sanitize() method is only necessary when all the regions are removed.
        This case is treated separately in layoutInlineChildren.

        Tests: no new functionality, no bug fixed.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineWidthForPaginatedLineChanged):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::containingRegion):
        (WebCore):
        (WebCore::RootInlineBox::setContainingRegion):
        * rendering/RootInlineBox.h:
        (RootInlineBox):
        (WebCore::RootInlineBox::LineFragmentationData::LineFragmentationData):
        (LineFragmentationData):

2012-12-06  Kenneth Russell  <kbr@google.com>

        Associate URLs with GraphicsContext3D instances created for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=103793

        Reviewed by Adam Barth.

        Pass down the URL of the topmost frame's document creating the
        WebGL context to the platform layer through
        GraphicsContext3D::Attributes.

        Not feasible to write a layout test for this change; has no
        user-visible effect. Tested manually with failure injection in
        Chromium port.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::create):
            Pass top document's URL in context creation attributes.
        * platform/chromium/support/GraphicsContext3DChromium.cpp:
        (WebCore::GraphicsContext3D::create):
            Pass URL through WebKit API.
        * platform/graphics/GraphicsContext3D.h:
        (Attributes):
            Add top document's URL to context creation attributes.

2012-12-06  Philip Rogers  <pdr@google.com>

        Unify SVG's animation and target tracking systems.
        https://bugs.webkit.org/show_bug.cgi?id=102655

        Reviewed by Dirk Schulze.

        This patch unifies our animation target tracking system and regular target tracking system.
        This simplifies the code, fixes a bug, and cleans up a historically security-sensitive area.

        Background: When <use>, <mpath>, <animate>, etc. reference another element using
        xlink:href="#id", we need to track when #id changes to #otherId, when #id is removed, etc.
        This bookkeeping of element -> target is done in SVGDocumentExtensions. Additionally, when
        a target changes that causes layout (e.g., rect.x is changed), all dependent elements with
        renderers are notified (<animate> has no renderer and will not use this).

        Previously, xlink:href changes were lazily resolved when targetElement() was called, target
        changes were tracked using the animation tracking framework, and pending targets did not
        work (e.g., <animate xlink:href="#p"><!--animate is now pending #p --><rect id="p"/>).

        After this patch, we no longer lazily resolve targetElement() but instead change it when
        our xlink:href attribute changes. Instead of using the animation tracking framework in
        SVGDocumentExtensions, we now use the regular target tracking framework. Lastly, by using
        the regular target tracking framework we are able to hook into the pending resource handling
        which fixes a bug (see the test).

        A test has been added to test that the order of animation elements does not matter. A second
        test has been added to show we do not regress a pending-while-pending case.

        Tests: svg/animations/svg-animation-order.html
               svg/custom/svg-pending-twice.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::setTargetElement):

            setTargetElement and setAttributeName now work similarly. When the corresponding attribute
            changes, we update our internal state (target or attributeName) and save it instead of
            looking these values up on each iteration.

        (WebCore::SVGAnimateElement::setAttributeName):
        (WebCore):
        (WebCore::SVGAnimateElement::resetAnimatedPropertyType):
        * svg/SVGAnimateElement.h:
        (SVGAnimateElement):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setAttributeType):
        (WebCore::SVGAnimationElement::setTargetElement):
        (WebCore::SVGAnimationElement::setAttributeName):
        * svg/SVGAnimationElement.h:
        (SVGAnimationElement):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions):
        (WebCore):
        * svg/SVGDocumentExtensions.h:
        (SVGDocumentExtensions):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::removedFrom):
        (WebCore::SVGElement::attributeChanged):
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement):

            This can be removed after r131631 landed.

        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):

            A bug was discovered in review with our resource tracking in a pending-while-pending
            case. SVGMpathElement and SVGTextPathElement have been updated to fix this as well.

        * svg/animation/SVGSMILElement.cpp:

            The changes in SVGSMILElement should look very similar to SVGFEImageElement,
            SVGMPathElement, etc. The idea is to build pending resources when added or
            removed from the document, or when the href attribute changes.

        (WebCore::SVGSMILElement::~SVGSMILElement):
        (WebCore):
        (WebCore::SVGSMILElement::clearResourceReferences):
        (WebCore::SVGSMILElement::buildPendingResource):
        (WebCore::SVGSMILElement::insertedInto):
        (WebCore::SVGSMILElement::removedFrom):
        (WebCore::SVGSMILElement::svgAttributeChanged):
        (WebCore::SVGSMILElement::setAttributeName):
        (WebCore::SVGSMILElement::setTargetElement):
        * svg/animation/SVGSMILElement.h:
        (WebCore):
        (WebCore::SVGSMILElement::targetElement):
        (SVGSMILElement):

2012-12-06  Jon Lee  <jonlee@apple.com>

        Retry snapshots if they are too empty
        https://bugs.webkit.org/show_bug.cgi?id=104174
        <rdar://problem/12820146>

        Reviewed by Simon Fraser.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateSnapshot): Change the state machine check so that even
        when the plug-in is displaying a snapshot, the snapshot can still be updated. This allows for the
        retries to be drawn.

2012-12-06  Adam Klein  <adamk@chromium.org>

        [HTMLTemplateElement] make content readonly and cloneNode(deep) clone content
        https://bugs.webkit.org/show_bug.cgi?id=104181

        Reviewed by Adam Barth.

        Note that this patch also adds IDL attributes/custom code to tie the lifetime
        of the content DocumentFragment wrapper to the lifetime of the template element wrapper
        via a hidden JS property.

        Based on a patch by Rafael Weinstein.

        Test: fast/dom/HTMLTemplateElement/contentWrappers.html

        * DerivedSources.cpp:
        * Target.pri:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSHTMLTemplateElementCustom.cpp: Copied from Source/WebCore/html/HTMLTemplateElement.idl.
        (WebCore):
        (WebCore::JSHTMLTemplateElement::content):
        * bindings/scripts/CodeGeneratorV8.pm: Add support for new V8CacheAttributeForGC attribute.
        * dom/Element.h:
        (Element): Annotate cloneNode() with OVERRIDE
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::cloneNode):
        * html/HTMLTemplateElement.h:
        (HTMLTemplateElement): override cloneNode
        * html/HTMLTemplateElement.idl: Make content readonly and add custom attributes.

2012-12-06  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Unreviewed build correction.

        Exclude 'DocumentSharedObjectPool.cpp' from build, since it is
        built as part of DOMAllInOne.cpp.  The build (besides wasting
        time) generates a bunch of build warnings for duplicate symbols.

        * WebCore.vcproj/WebCore.vcproj: Mark DocumentSharedObjectPool.cpp
        to not build independently of DOMAllInOne.cpp.

2012-12-06  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Abort transactions because of leveldb errors part 4
        https://bugs.webkit.org/show_bug.cgi?id=103964

        Reviewed by Tony Chang.

        deleteDatabase, open, and deleteObjectStore will now fire more aborts
        and errors in case of leveldb problems

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::getVarInt): Make return value indicate leveldb error.
        (WebCore::getString): ditto.
        (WebCore::IDBBackingStore::getIDBDatabaseMetaData):
        Change return value to indicate leveldb error.

        (WebCore::IDBBackingStore::deleteDatabase):
        Already had the desired return value semantics. As a consumer of
        getIDBDatabaseMetadata, will return an error (causing an abort) more
        often.

        (WebCore::IDBBackingStore::deleteObjectStore):
        Needed return value change. Will return error to DatabaseBackend to
        indicate leveldb problems.

        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::openInternal):
        Pass leveldb errors up to callers, who already handle internal errors.

        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreOperation::perform):
        Abort transaction if there were leveldb problems deleting an object
        store.

2012-12-06  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Add webkitErrorMessage to IDBTransaction
        https://bugs.webkit.org/show_bug.cgi?id=104199

        Reviewed by Tony Chang.

        Don't drop error messages on the floor.

        Expose an error message on IDBTransaction to give developers more
        information than the opaque error code currently available. This is
        exactly what is done in IDBRequest. 

        Tests - transaction-error.html

        * Modules/indexeddb/IDBDatabaseError.h:
        (WebCore::IDBDatabaseError::create):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::setError):
        (WebCore):
        (WebCore::IDBTransaction::webkitErrorMessage):
        (WebCore::IDBTransaction::onAbort):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * Modules/indexeddb/IDBTransaction.idl:

2012-12-06  Alexander Shalamov  <alexander.shalamov@intel.com>

        XMLHttpRequest Content-Type should be taken from Blob type
        https://bugs.webkit.org/show_bug.cgi?id=99983

        Reviewed by Alexey Proskuryakov.

        Fix XMLHttpRequest::send(Blob*) method, so that the Content-Type is set according to W3C specification.
        http://www.w3.org/TR/XMLHttpRequest/#the-send-method

        Added test that check if content type is set correctly when blob object is sent.

        Test: http/tests/xmlhttprequest/post-blob-content-type.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
            Set correct MIME type for Blob objects.
        * WebCore.vcproj/WebCore.vcproj:
            Added ParsedContentType to project file.

2012-12-06  Min Qin  <qinmin@chromium.org>

        Make LazyDecodingPixelRef inherit from skia::LazyPixelRef so that cc thread can access it
        https://bugs.webkit.org/show_bug.cgi?id=103555

        Reviewed by Stephen White.

        Expose LazyDecodingPixelRef to the cc thread by inheriting from skia::LazyPixelRef.
        No test added for now as impl side paiting is still WIP.

        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::PrepareToDecode):
        (WebCore):
        (WebCore::LazyDecodingPixelRef::Decode):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (LazyDecodingPixelRef):

2012-12-06  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate mandatory in v8UnsignedInteger()
        https://bugs.webkit.org/show_bug.cgi?id=104235

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/ArrayValue.cpp:
        (WebCore::ArrayValue::get):
        * bindings/v8/V8Binding.h:
        (WebCore::v8UnsignedInteger):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):

2012-12-06  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Add requiresBalancing booleans to track which column sets need to rebalance.
        https://bugs.webkit.org/show_bug.cgi?id=104297

        Reviewed by Simon Fraser.

        Add requiresBalancing booleans to RenderMultiColumnBlock and RenderMultiColumnSet. For now the former is just propagated
        to the latter, but eventually RenderMultiColumnSets will have a notion of balancing that has to be independent of the
        owning block (e.g., maybe only the last set rebalances, or maybe only a set that contains the content between two forced
        breaks wants to rebalance, etc.).

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        (WebCore::RenderMultiColumnBlock::checkForPaginationLogicalHeightChange):
        (WebCore::RenderMultiColumnBlock::ensureColumnSets):
        * rendering/RenderMultiColumnBlock.h:
        (WebCore::RenderMultiColumnBlock::requiresBalancing):
        (RenderMultiColumnBlock):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        * rendering/RenderMultiColumnSet.h:
        (WebCore::RenderMultiColumnSet::requiresBalancing):
        (WebCore::RenderMultiColumnSet::setRequiresBalancing):
        (RenderMultiColumnSet):
        (WebCore::toRenderMultiColumnSet):
        (WebCore):

2012-12-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136871.
        http://trac.webkit.org/changeset/136871
        https://bugs.webkit.org/show_bug.cgi?id=104293

        crashes on bots and memory leaks (Requested by esprehn on
        #webkit).

        * dom/Document.h:
        (WebCore::Node::treeScope):
        * dom/Element.cpp:
        (WebCore::Element::createRareData):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::setTreeScope):
        (WebCore::Node::ensureRareData):
        (WebCore::Node::createRareData):
        (WebCore::Node::clearRareData):
        * dom/Node.h:
        (WebCore::NodeRareDataBase::~NodeRareDataBase):
        (WebCore::NodeRareDataBase::NodeRareDataBase):
        (NodeRareDataBase):
        (WebCore::Node::renderer):
        (WebCore::Node::setRenderer):
        (Node):
        (WebCore::Node::hasRareData):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):

2012-12-06  Adam Klein  <adamk@chromium.org>

        Remove non-v8 binding files from WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=104288

        Reviewed by Adam Barth.

        Since the gyp build is only used by the Chromium project,
        there's no need for cpp, gobject, objc, or jsc bindings
        in these build files.

        * WebCore.gypi:

2012-12-06  Tony Chang  <tony@chromium.org>

        REGRESSION(r135082): Restore the ability to insert author level style sheets from script
        https://bugs.webkit.org/show_bug.cgi?id=104042

        Reviewed by Antti Koivisto.

        Add DocumentStyleSheetCollection::addAuthorSheet so embedders can allow scripts
        to insert author level styles. Expose the method to window.interals for testing.

        Test: userscripts/insert-stylesheets.html

        * WebCore.exp.in: Update exports for Internals.cpp.
        * WebCore.order: Update exports for Internals.cpp.
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::~DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::addAuthorSheet): Add the stylesheet and force a style recalc.
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets): Include author level styles.
        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage): Include author styles.
        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::documentAuthorStyleSheets): Accessor.
        (DocumentStyleSheetCollection): Keep track of author styles added by script.
        * testing/Internals.cpp:
        (WebCore::Internals::insertAuthorCSS): Testing addAuthorSheet.
        (WebCore::Internals::insertUserCSS): Testing addUserSheet.
        * testing/Internals.h:
        * testing/Internals.idl: Add addAuthorSheet and addUserSheet.

2012-12-06  Elliott Sprehn  <esprehn@gmail.com>

        Create only NodeRareDataBase when setting TreeScope
        https://bugs.webkit.org/show_bug.cgi?id=104202

        Reviewed by Dimitri Glazkov.

        Move many fields from NodeRareData into NodeRareDataBase and rename it
        UncommonNodeData and add a flag to determine if a UncommonNodeData is
        actually a full NodeRareData instance. By moving fields up from NodeRareData
        we ensure that this new flag in the base class doesn't make NodeRareData
        grow in size.

        We then make setting the tree scope only allocate the UncommonNodeData
        instead of creating the full NodeRareData or ElementRareData. This is
        important because when putting nodes into ShadowRoot or any descendant
        we must associate the node with a tree scope which adds rare data to the
        node making NodeRareData and ElementRareData not very rare.

        On 64bit, this reduces the overhead per element from 136 bytes to
        32 bytes for a 76% savings, and on other nodes from 64 bytes to 32 bytes
        for a 50% savings.

        No new tests, no change in behavior.

        * dom/Document.h:
        (WebCore::Node::treeScope):
        * dom/Element.cpp:
        (WebCore::Element::createRareData):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::setTreeScope):
        (WebCore::Node::ensureRareData):
        (WebCore::Node::createRareData):
        (WebCore::Node::clearRareData):
        * dom/Node.h:
        (WebCore::UncommonNodeData::create):
        (UncommonNodeData):
        (WebCore::UncommonNodeData::~UncommonNodeData):
        (WebCore::UncommonNodeData::isNodeRareData):
        (WebCore::UncommonNodeData::UncommonNodeData):
        (WebCore::Node::renderer):
        (WebCore::Node::setRenderer):
        (Node):
        (WebCore::Node::hasRareData):
        (WebCore::Node::hasUncommonNodeData):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):

2012-12-06  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove IDBDatabaseException.idl
        https://bugs.webkit.org/show_bug.cgi?id=102961

        Reviewed by Adam Barth.

        Delete the IDL and references to it. No longer needed as a enum member
        in the autogenerated ExceptionCodeDescription.h so removed from the ".in"
        file; only direct references are retained in the autogenerated cpp file.

        Ideally the code generator would handle these new-style DOMExceptions,
        but we don't have any other examples yet to know what pattern to follow.

        No new tests - just removing dead code.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBDatabaseException.idl: Removed.
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMExceptions.in:
        * dom/make_dom_exceptions.pl:
        (generateImplementation):

2012-12-06  Andreas Kling  <akling@apple.com>

        [Mac] Drain the CSSValuePool on memory pressure.
        <http://webkit.org/b/104274>

        Reviewed by Antti Koivisto.

        Add a drain() mechanism to CSSValuePool and call it when we're under memory pressure.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::drain):
        * css/CSSValuePool.h:
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):

2012-12-05  Adam Klein  <adamk@chromium.org>

        Remove gyp config for incomplete and unused Apple Mac gyp build
        https://bugs.webkit.org/show_bug.cgi?id=104068

        Reviewed by Adam Barth.

        As part of the removal, move some files to the proper sections
        of the gypi file.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2012-12-06  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Add support for computing the first included interval position.
        https://bugs.webkit.org/show_bug.cgi?id=103327

        Reviewed by Levi Weintraub.

        If the first "word" in a line doesn't fit within the shape-inside when lineTop
        is the top of the shape's logical bounding box, adjust lineTop downwards to where
        the word fits.  Currently only rounded rectangle shapes are supported.

        Added ExclusionShape::firstIncludedIntervalLogicalTop(). The new virtual method
        computes the topmost/leftmost location where a line segment with the specified
        minLogicalIntervalSize will fit within the exclusion shape and returns the
        corresponding logical Y coordinate.  The result is additionally constrained to
        be at or below minLogicalIntervalTop. If the segment will not fit anywhere within
        the shape, then false is returned.

        During layout, minLogicalIntervalTop is the nominal top of the line being laid
        out within the exclusion shape.

        RenderBlock::layoutRunsAndFloatsInRange() now calls a new ExclusionShapeInsideInfo
        method, adjustLogicalLineTop(), which uses firstIncludedIntervalLogicalTop() to
        decide if the logical top of the line has to be moved downwards, for the first
        word to fit within the exclusion shape.

        Tests: fast/exclusions/shape-inside/shape-inside-rounded-rectangle-fit-001.html
               fast/exclusions/shape-inside/shape-inside-rounded-rectangle-fit-002.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop): This is a stub implementation.
        * rendering/ExclusionPolygon.h:
        * rendering/ExclusionRectangle.cpp:
        (WebCore::ellipseXIntercept): Added spaces to conform to webkit style and to be consistent with ellipseYIntercept()
        (WebCore::ellipseYIntercept): Compute an ellipse's Y intercept for an X coordinate.
        (WebCore::ExclusionRectangle::firstIncludedIntervalLogicalTop): See the description above.
        * rendering/ExclusionRectangle.h:
        * rendering/ExclusionShape.h:
        (ExclusionShape):
        (WebCore::ExclusionShape::logicalTopForMinY): Internal to logical coordinate conversion.
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::adjustLogicalLineTop): A new method that updates m_lineTop with firstIncludedIntervalPosition().
        * rendering/ExclusionShapeInsideInfo.h:
        (ExclusionShapeInsideInfo):
        (WebCore::ExclusionShapeInsideInfo::logicalLineTop): This is just a cover for the private m_lineTop field.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Added code that restarts the layout loop if it's necessary to adjust the line's logicalTop.
        (WebCore::RenderBlock::restartLayoutRunsAndFloatsInRange): Factored newly common code into this helper function.

2012-12-06  Ryosuke Niwa  <rniwa@webkit.org>

        Use ownerNode() instead of base() in HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=104244

        Reviewed by Adam Barth.

        Use ownerNode() instead of base() in HTMLCollection to match LiveNodeList.
        Notice that the definition of base(), which this patch removes, is "return ownerNode()".

        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        (WebCore::JSHTMLOptionsCollection::remove):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOpaqueRootForGC):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/v8/custom/V8HTMLFormControlsCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::removeCallback):
        (WebCore::V8HTMLOptionsCollection::indexedPropertySetter):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::ownerNode):
        * dom/WebKitNamedFlow.h:
        (WebKitNamedFlow):
        * dom/WebKitNamedFlow.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLCollection.h:
        (HTMLCollection):
        * html/HTMLCollection.idl:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::HTMLFormControlsCollection):
        (WebCore::HTMLFormControlsCollection::create):
        (WebCore::HTMLFormControlsCollection::formControlElements):
        (WebCore::HTMLFormControlsCollection::formImageElements):
        (WebCore::HTMLFormControlsCollection::namedItem):
        (WebCore::HTMLFormControlsCollection::updateNameCache):
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::~HTMLNameCollection):
        (WebCore::HTMLNameCollection::virtualItemAfter):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        (WebCore::HTMLOptionsCollection::remove):
        (WebCore::HTMLOptionsCollection::selectedIndex):
        (WebCore::HTMLOptionsCollection::setSelectedIndex):
        (WebCore::HTMLOptionsCollection::setLength):
        * html/HTMLOptionsCollection.idl:
        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::updateRefElements):
        (WebCore::HTMLPropertiesCollection::namedItem):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::virtualItemAfter):

2012-12-06  Tommy Widenflycht  <tommyw@google.com>

        Speech Recognition API: Change the error code to a string on SpeechRecognitionError
        https://bugs.webkit.org/show_bug.cgi?id=104254

        Reviewed by Adam Barth.

        SpeechRecognitionError::code (numeric value) has been changed to SpeechRecognitionError::error (string)
        in the latest specification.

        http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#speechreco-error

        Existing tests modified to cover this patch.

        * Modules/speech/SpeechRecognitionError.cpp:
        (WebCore::ErrorCodeToString):
        (WebCore):
        (WebCore::SpeechRecognitionError::create):
        (WebCore::SpeechRecognitionError::SpeechRecognitionError):
        * Modules/speech/SpeechRecognitionError.h:
        (SpeechRecognitionErrorInit):
        (WebCore::SpeechRecognitionError::error):
        (SpeechRecognitionError):
        * Modules/speech/SpeechRecognitionError.idl:

2012-12-06  Stephen Chenney  <schenney@chromium.org>

        SVG <use> element inside an svg-as-image fails
        https://bugs.webkit.org/show_bug.cgi?id=104007

        Reviewed by Eric Seidel.

        Upon redraw, SVGImage calls layout on the document it is drawing into
        the image if the image, provided it believes the redraw does not need
        to be delayed. Unfortunately, when an SVG <use> element is modified
        (by animation, say) and regenerates its shadow tree, the destructors
        invoke redraw, causing the SVGImage to call layout on something that
        is in the process of being deleted. That's bad.

        This change causes SVGImage to always delay the redraw. It is the most robust
        way to protect against this problem, as there may be any number of
        ways to cause this issue (a node being deleted in an svg-as-image
        target) and this protects against them all.

        The test case crashes in Asan Chromium.

        Test: svg/as-image/animated-use-as-image-crash.html

        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageContentChanged): Always redraw on the timer.

2012-12-06  Antoine Quint  <graouts@apple.com>

        TextTrack's .cues not ordered correctly when two cues have the same .startTime
        https://bugs.webkit.org/show_bug.cgi?id=103266

        Reviewed by Eric Carlson.

        Adding a new method TextTrackCueList::updateCueIndex() to update the list of
        cues after changing the .startTime or .endTime of a TextTrackCue. I elected to
        add a new method to TextTrackCueList rather than calling remove() and then add()
        on the list from TextTrack::cueDidChange() so that the nature of the operation
        is abstracted and we can easily change the way we keep the cue list sorted at
        a later time should we choose to.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::cueDidChange):
        * html/track/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::updateCueIndex):
        (WebCore):
        * html/track/TextTrackCueList.h:
        (TextTrackCueList):

2012-12-06  Andras Becsi  <andras.becsi@digia.com>

        [Qt][Mac] Fix libxslt and libxml2 config tests
        https://bugs.webkit.org/show_bug.cgi?id=104164

        Reviewed by Simon Hausmann.

        Since libxml2 is a dependency for libxslt and is not used
        standalone the configurations for it should also depend on
        whether XSLT is enabled.
        Also avoid using pkg-config on Mac, instead use direct
        include paths and add needed libraries to the linker.

        No new tests needed.

        * WebCore.pri:

2012-12-06  Shinya Kawanaka  <shinyak@chromium.org>

        Internals.getElementByIdInShadowRoot is nonsense now.
        https://bugs.webkit.org/show_bug.cgi?id=104241

        Reviewed by Kent Tamura.

        Since we have ShadowRoot.getElementById() now, we don't need Internals.getElementByIdInShadowRoot, which is
        the same functionality of ShadowRoot.getElementById().

        Test: fast/dom/shadow/get-element-by-id-in-shadow-root.html

        * WebCore.exp.in:
        * testing/Internals.cpp:
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-12-06  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] Active texture state gets corrupted after updating graphics surface contents.
        https://bugs.webkit.org/show_bug.cgi?id=104248.

        Reviewed by Kenneth Rohde Christiansen.

        GraphicsContext3DPrivate::copyToGraphicsSurface() doesn't restore the previously bound texture
        after copying texture contents. This corrupts the texture state.

        Existing Tests should cover this.

        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (GraphicsContext3DPrivate::copyToGraphicsSurface):
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::updateContents):
        * platform/graphics/opengl/GLPlatformSurface.h:
        (GLPlatformSurface):

2012-12-06  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Goto panel shortcuts and description are reversed
        https://bugs.webkit.org/show_bug.cgi?id=103988

        Reviewed by Pavel Feldman.

        Swap the square brackets in the shortcuts.

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

2012-12-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136818.
        http://trac.webkit.org/changeset/136818
        https://bugs.webkit.org/show_bug.cgi?id=104249

        simulatedClick does not work as per #chrmium irc. (Requested
        by hayato on #webkit).

        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedTargetAdjuster::adjust):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::create):
        (WebCore::MouseEventDispatchMediator::MouseEventDispatchMediator):
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.h:
        (MouseEventDispatchMediator):
        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent):

2012-12-06  Ulan Degenbaev  <ulan@chromium.org>

        [v8] Fix hidden property name of V8ArrayBufferView flag.
        https://bugs.webkit.org/show_bug.cgi?id=104099

        Reviewed by Kentaro Hara.

        Fix hidden property name of V8ArrayBufferView hidden copy method.

        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        * bindings/v8/custom/V8ArrayBufferViewCustom.cpp:
        (WebCore::getHiddenCopyMethod):
        (WebCore::installHiddenCopyMethod):

2012-12-06  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Fixed a wrong comment landed in r136822.

        * bindings/v8/V8Binding.h:
        (WebCore):

2012-12-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Implement deprecatedV8String()
        https://bugs.webkit.org/show_bug.cgi?id=104230

        Reviewed by Adam Barth.

        To make an Isolate mandatory in v8String(), we implement
        deprecatedV8String() for call sites that don't have
        an Isolate. Eventually we want to kill the method though.

        No tests. No change in behavior.

        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithClass2Param):
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::getKey):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::get):
        (WebCore::set):
        * bindings/v8/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::compileAndRunScript):
        (WebCore::ScriptController::bindToWindowObject):
        (WebCore::ScriptController::disableEval):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::setScriptSource):
        (WebCore::ScriptDebugServer::ensureDebuggerScriptCompiled):
        (WebCore::ScriptDebugServer::compileScript):
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptCallArgumentHandler::appendArgument):
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptFunctionCall::construct):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptSourceCode.cpp:
        (WebCore::ScriptSourceCode::compileScript):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::deprecatedV8String):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        (WebCore::V8DOMWindowShell::namedItemAdded):
        (WebCore::V8DOMWindowShell::namedItemRemoved):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8WindowErrorHandler.cpp:
        (WebCore::V8WindowErrorHandler::callListenerFunction):
        * bindings/v8/V8WorkerContextErrorHandler.cpp:
        (WebCore::V8WorkerContextErrorHandler::callListenerFunction):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/v8/custom/V8ArrayBufferViewCustom.cpp:
        (WebCore::installHiddenCopyMethod):
        (WebCore::copyElements):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::getEventListenersCallback):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createInjectedScript):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAccessorGetter):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::V8WebGLRenderingContext::getSupportedExtensionsCallback):

2012-12-06  Keishi Hattori  <keishi@webkit.org>

        Page popup should align to the right when the anchor element is rtl
        https://bugs.webkit.org/show_bug.cgi?id=104219

        Reviewed by Kent Tamura.

        Page popup should align to the right edge of the anchor element when the anchor element is rtl.

        No new tests. Mock page popup can't test popup window position.

        * Resources/pagepopups/pickerCommon.js:
        (_adjustWindowRectHorizontally): Align to the right edge when anchor element is rtl. Removed some redundant lines.
        (setWindowRect): If the window is hidden we want to move first then resize so the popup doesn't flicker.
        (isWindowHidden): Returns true if the window is hidden using hideWindow().

2012-12-06  Kentaro Hara  <haraken@chromium.org>

        [V8] Make an Isolate mandatory for v8StringOrNull() and v8StringOrUndefined()
        https://bugs.webkit.org/show_bug.cgi?id=104213

        Reviewed by Adam Barth.

        All call sites of v8StringOrNull() and v8StringOrUndefined() have an Isolate.

        No tests. No change in behavior.

        * bindings/v8/V8Binding.h:
        (WebCore::v8StringOrNull):
        (WebCore::v8StringOrUndefined):

2012-12-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Implement deprecatedV8Integer(int i)
        https://bugs.webkit.org/show_bug.cgi?id=104220

        Reviewed by Adam Barth.

        To make an Isolate mandatory in v8Integer(), we implement
        deprecatedV8Integer(int i) for call sites that don't have
        an Isolate. Eventually we want to kill deprecatedV8Integer(int i).

        No new tests. No change in behavior.

        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        * bindings/v8/NPV8Object.cpp:
        (_NPN_Enumerate):
        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::compileScript):
        * bindings/v8/ScriptSourceCode.cpp:
        (WebCore::ScriptSourceCode::compileScript):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::deprecatedV8Integer):
        * bindings/v8/V8DOMConfiguration.cpp:
        (WebCore::V8DOMConfiguration::batchConfigureConstants):
        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertNPVariantToV8Object):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::createHiddenDependency):
        (WebCore::removeHiddenDependency):
        * bindings/v8/V8WindowErrorHandler.cpp:
        (WebCore::V8WindowErrorHandler::callListenerFunction):
        * bindings/v8/V8WorkerContextErrorHandler.cpp:
        (WebCore::V8WorkerContextErrorHandler::callListenerFunction):
        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        * bindings/v8/custom/V8MutationCallbackCustom.cpp:
        (WebCore::V8MutationCallback::handleEvent):

2012-12-06  Hayato Ito  <hayato@chromium.org>

        Event's relatedTarget re-targeting does not occur for manually fired mouse events created by event.initMouseEvent().
        https://bugs.webkit.org/show_bug.cgi?id=102681

        Reviewed by Dimitri Glazkov.

        Make sure that event's relatedTarget re-targeting occurs for mouse
        events created by event.initMouseEvent().  Since user-generated
        mouse events can have a relatedTarget which is same to the target
        node, the algorithm which calculates event's ancestors is also
        updated so that ancestors are not shrunk wrongly.

        Test: fast/events/dispatch-synthetic-mouseevent.html
              fast/dom/shadow/shadow-dom-event-dispatching.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedTargetAdjuster::adjust):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::create):
        (WebCore::MouseEventDispatchMediator::MouseEventDispatchMediator):
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEventDispatchMediator::isSyntheticMouseEvent):
        (MouseEventDispatchMediator):
        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent):

2012-12-06  Michael Pruett  <michael@68k.org>

        [JSC] Check whether property is an array before attempting conversion to array in JSDictionary
        https://bugs.webkit.org/show_bug.cgi?id=96614

        Reviewed by Kentaro Hara.

        JSDictionary should check whether the property being accessed in get()
        is an array before attempting to convert the value to an array.

        Previously calling get() with a result type of Vector<String> when
        the named property could not be converted to an array would generate
        an exception.

        Tests: storage/indexeddb/*

        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        (WebCore::JSDictionary::tryGetPropertyAndResult):

2012-12-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Pass Isolate to toDOMStringList()
        https://bugs.webkit.org/show_bug.cgi?id=104224

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (JSValueToNative):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::overloadedMethod6Callback):
        (WebCore::TestObjV8Internal::overloadedMethod7Callback):
        (WebCore::TestObjV8Internal::overloadedMethod9Callback):
        (WebCore::TestObjV8Internal::stringArrayFunctionCallback):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toDOMStringList):
        * bindings/v8/V8Binding.h:
        (WebCore):

2012-12-06  Kentaro Hara  <haraken@chromium.org>

        Remove JSDependentRetained.h and V8DependentRetained.h
        https://bugs.webkit.org/show_bug.cgi?id=104232

        Reviewed by Adam Barth.

        Although (JS|V8)DependentRetained.h were introduced for MutationObservers,
        they are not going to be used (See the discussion in bug 95519).
        We can remove them.

        No tests. No change in behavior.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDependentRetained.h: Removed.
        * bindings/v8/V8DependentRetained.h: Removed.
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::V8PerIsolateData):
        * bindings/v8/V8PerIsolateData.h:
        (V8PerIsolateData):

2012-12-06  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace v8String("symbol") with v8::String::NewSymbol("symbol")
        https://bugs.webkit.org/show_bug.cgi?id=104209

        Reviewed by Adam Barth.

        V8 can look up symbols faster than strings.

        No tests. No change in behavior.

        * bindings/v8/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::caller):
        (WebCore::JavaScriptCallFrame::sourceID):
        (WebCore::JavaScriptCallFrame::line):
        (WebCore::JavaScriptCallFrame::column):
        (WebCore::JavaScriptCallFrame::functionName):
        (WebCore::JavaScriptCallFrame::scopeChain):
        (WebCore::JavaScriptCallFrame::scopeType):
        (WebCore::JavaScriptCallFrame::thisObject):
        (WebCore::JavaScriptCallFrame::evaluate):
        (WebCore::JavaScriptCallFrame::restart):
        * bindings/v8/V8ThrowException.cpp:
        (WebCore::domExceptionStackGetter):
        (WebCore::domExceptionStackSetter):
        (WebCore::V8ThrowException::setDOMException):
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::platformCallback):
        * bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp:
        (WebCore::V8JavaScriptCallFrame::typeAccessorGetter):

2012-12-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136784 and r136802.
        http://trac.webkit.org/changeset/136784
        http://trac.webkit.org/changeset/136802
        https://bugs.webkit.org/show_bug.cgi?id=104231

        breaks chromium canary (Requested by morrita on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/PlatformThemeChromiumLinux.cpp: Added.
        (WebCore):
        (WebCore::PlatformThemeChromiumLinux::setScrollbarColors):
        (WebCore::clamp):
        (WebCore::PlatformThemeChromiumLinux::saturateAndBrighten):
        (WebCore::PlatformThemeChromiumLinux::outlineColor):
        (WebCore::PlatformThemeChromiumLinux::paintArrowButton):
        * platform/chromium/PlatformThemeChromiumLinux.h: Added.
        (WebCore):
        (PlatformThemeChromiumLinux):
        (WebCore::PlatformThemeChromiumLinux::thumbInactiveColor):
        (WebCore::PlatformThemeChromiumLinux::thumbActiveColor):
        (WebCore::PlatformThemeChromiumLinux::trackColor):
        (WebCore::PlatformThemeChromiumLinux::PlatformThemeChromiumLinux):
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp: Added.
        (WebCore):
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeChromiumLinux::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):
        (WebCore::ScrollbarThemeChromiumLinux::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeChromiumLinux::buttonSize):
        (WebCore::ScrollbarThemeChromiumLinux::minimumThumbLength):
        * platform/chromium/ScrollbarThemeChromiumLinux.h: Added.
        (ScrollbarThemeChromiumLinux):
        * rendering/RenderThemeChromiumAndroid.cpp:
        (WebCore::RenderThemeChromiumAndroid::extraDefaultStyleSheet):
        * rendering/RenderThemeChromiumAndroid.h:
        * rendering/RenderThemeChromiumLinux.cpp: Added.
        (WebCore):
        (WebCore::getWebThemeState):
        (WebCore::RenderThemeChromiumLinux::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::~RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::systemColor):
        (WebCore::RenderThemeChromiumLinux::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumLinux::controlSupportsTints):
        (WebCore::RenderThemeChromiumLinux::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::activeListBoxSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::inactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::sliderTickSize):
        (WebCore::RenderThemeChromiumLinux::sliderTickOffsetFromTrackCenter):
        (WebCore::RenderThemeChromiumLinux::adjustSliderThumbSize):
        (WebCore::RenderThemeChromiumLinux::supportsControlTints):
        (WebCore::RenderThemeChromiumLinux::setCaretBlinkInterval):
        (WebCore::RenderThemeChromiumLinux::caretBlinkIntervalInternal):
        (WebCore::RenderThemeChromiumLinux::setSelectionColors):
        (WebCore::RenderThemeChromiumLinux::paintCheckbox):
        (WebCore::RenderThemeChromiumLinux::setCheckboxSize):
        (WebCore::RenderThemeChromiumLinux::paintRadio):
        (WebCore::RenderThemeChromiumLinux::setRadioSize):
        (WebCore::RenderThemeChromiumLinux::paintButton):
        (WebCore::RenderThemeChromiumLinux::paintTextField):
        (WebCore::RenderThemeChromiumLinux::paintMenuList):
        (WebCore::RenderThemeChromiumLinux::paintSliderTrack):
        (WebCore::RenderThemeChromiumLinux::paintSliderThumb):
        (WebCore::RenderThemeChromiumLinux::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeChromiumLinux::paintInnerSpinButton):
        (WebCore::RenderThemeChromiumLinux::paintProgressBar):
        (WebCore::RenderThemeChromiumLinux::shouldOpenPickerWithF4Key):
        * rendering/RenderThemeChromiumLinux.h: Added.
        (WebCore):
        (RenderThemeChromiumLinux):

2012-12-05  Sankeerth V S  <sankeerth.vs@samsung.com>

        Web Inspector: Title of "Record Timeline" status button on "Timeline
        Panel" should reflect the recording state.
        https://bugs.webkit.org/show_bug.cgi?id=104108

        Reviewed by Alexander Pavlov.

        Title should be toggled between "Record"/"Stop" to reflect current
        state of the Status bar button.

        No new tests as UI related change.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get _toggleTimelineButtonClicked):

2012-12-03  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI doesn't show digits well in RTL locales
        https://bugs.webkit.org/show_bug.cgi?id=103869

        Reviewed by Hajime Morita.

        We need to use display:inline elements to wrap sub-fields and static
        text in DateTimeEditElement children to apply the Unicode Bidi
        Algorithm.

        Because we can't use display:inline-block for them, we can't specify
        min-width CSS property for them. We stop using customStyleForRenderer of
        sub-fields to specify each of their widths, and use
        customStyleForRenderer of DateTimeEditElement to specify the total
        required width. A sub-field width shrink and grow so that the width fits
        to the field value, and a DateTimeEditElement doesn't.

        No new tests. Coverred by existing tests, especially
        fast/forms/datetime/datetime-appearance-l10n.html shows "23:59"
        correctly.

        * css/html.css:
        (input::-webkit-datetime-edit-year-field):
        - Make this display:inline to apply the Unicode Bidi Algorithm.
        - Use padding instead of margin because of ease of width computation.
          Also, the focus apparance gets better by padding.
        - Don't allow to specify font property here because of ease of width
          computation.
        - Remove text-align:center. It doesn't work for display:inline.
        (input::-webkit-datetime-edit-text):
        - Make this display:inline to apply the Unicode Bidi Algorithm.
        - Don't allow to specify font property here because of ease of width
          computation.

        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement): Declare customStyleForRenderer.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::DateTimeEditElement):
        Enable customStyleForRenderer.
        (WebCore::DateTimeEditElement::customStyleForRenderer):
        Compute required width with a font for this element and child maximum
        widths, and set it to min-width style.
        The resultant width value can be inaccurate if a page author specifies
        padding, border, margin, etc. to ::-webkit-datetime-edit-*-field or
        ::-webkit-datetime-edit-text. In such case, the page author should specify
        wider width to <input>.

        * dom/Element.h:
        (Element): Add isDateTimeFieldElement to do static_cast<DateTimeFieldElement> safely.
        * dom/Element.cpp:
        (WebCore::Element::isDateTimeFieldElement): Added.

        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement): Declare isDateTimeFieldElement and maximumWidth.
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::isDateTimeFieldElement):
        Added. Returns true.
        (WebCore::DateTimeFieldElement::maximumWidth):
        Added. Returns padding width.

        * html/shadow/DateTimeSymbolicFieldElement.h:
        (DateTimeSymbolicFieldElement):
        Remove customStyleForRenderer, and declare maximumWidth.
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::DateTimeSymbolicFieldElement):
        Disable customStyleForRenderer.
        (WebCore::DateTimeSymbolicFieldElement::maximumWidth):
        Added. Returns the expected maximum width with the specified font.

        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement):
        Remove customStyleForRenderer, declare maximumWidth, and make m_placeholder
        non-const because it is updated in the constructor.
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::DateTimeNumericFieldElement):
        Disable customStyleForRenderer.
        If a numeric value for this field is LTR and the whole direction is RTL,
        wrap the placeholder string with left-to-right-mark and
        right-to-left-mark so that it is handled as LTR. Without this,
        sub-fields order would be changed when the content of a field is changed
        from a placeholder to a numeric value.
        (WebCore::DateTimeNumericFieldElement::maximumWidth):
        Added. Returns the expected maximum width with the specified font.

2012-12-05  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: The hour, am/pm, millisecond fields should support read-only state correctly
        https://bugs.webkit.org/show_bug.cgi?id=104210

        Reviewed by Kentaro Hara.

        1. The hour, am/pm, and millisecond fields should have CSS rules for
           [readonly]. They should be gray when they are read-only.
        2. The am/pm field should reject to set an empty value like other
           numeric fields do.

        Tests: Add test cases to fast/forms/time/time-appearance-basic.html.

        * css/html.css: merge existing readonly rules, and add ampm, hour, and
        millisecond pseudo classes.
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::setEmptyValue):
        Reject to set empty value if it is read-only.

2012-12-05  Dan Beam  <dbeam@chromium.org>

        HTMLFormElement#requestAutocomplete() should require a user action
        https://bugs.webkit.org/show_bug.cgi?id=102320

        Reviewed by Kent Tamura.

        This patch dispatches an autocompleteerror when HTMLFormElement::requestAutocomplete() is called while not processing
        a user gesture.

        * fast/forms/form-request-autocomplete.html is updated.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::requestAutocomplete):

        Asynchronously dispatch an autocomplete error when not processing a user action when
        HTMLFormElement#requestAutocomplete() is invoked.

2012-12-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Optimize v8StringOrNull() and v8StringOrUndefined()
        https://bugs.webkit.org/show_bug.cgi?id=104206

        Reviewed by Adam Barth.

        Currently v8StringOrNull() and v8StringOrUndefined() are checking
        a null string twice. It is redundant.

        [div.localName]
        Before this patch: 20.03 ns
        After this patch:  19.34 ns

        * bindings/v8/V8Binding.h:
        (WebCore::v8StringOrNull):
        (WebCore::v8StringOrUndefined):

2012-12-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Optimize v8String() for uninitialized DOM attributes
        https://bugs.webkit.org/show_bug.cgi?id=104205

        Reviewed by Adam Barth.

        This patch makes uninitialized div.lang, div.title etc 6.3% faster.

        [div.lang]
        Before this patch: 12.6 ns
        After this patch:  11.8 ns

        * bindings/v8/V8Binding.h:
        (WebCore::v8String):

2012-12-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove addImplicitReferencesForNodeWithEventListeners()
        https://bugs.webkit.org/show_bug.cgi?id=104203

        Reviewed by Adam Barth.

        We can use opaqueRootForGC() instead. By this change, we can remove
        all AddImplicitReferences() from V8 bindings.

        Tests: fast/dom/gc-image-element.html
               fast/dom/gc-image-element-2.html
               fast/dom/inline-event-attributes-lookup-removed.html

        * bindings/v8/V8GCController.cpp:

2012-12-05  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Blocks don't relayout children if the width of a region changes
        https://bugs.webkit.org/show_bug.cgi?id=103993

        Reviewed by David Hyatt.

        After r135750 lines are no longer invalidating when regions change width. This is happening because the detection for the width change was being done
        only at line layout time. This patch moves the line relayout decision to the containing block by setting the relayoutChildren flag if the block
        has no region chain attached.

        Tests: fast/regions/region-width-change-relayout-1.html
               fast/regions/region-width-change-relayout-2.html
               fast/regions/region-width-change-relayout-3.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::logicalWidthChangedInRegions):

2012-12-05  Kihong Kwon  <kihong.kwon@samsung.com>

        Parameter event need to covert to RefPtr in the DeviceController::dispatchDeviceEvent
        https://bugs.webkit.org/show_bug.cgi?id=104201

        Reviewed by Laszlo Gombos.

        Parameter 'event' need to covert to RefPtr in the DeviceController::dispatchDeviceEvent.
        This can make crash sometimes.

        No new tests. Covered by existing layout tests.

        * page/DeviceController.cpp:
        (WebCore::DeviceController::dispatchDeviceEvent):

2012-12-05  Halton Huo  <halton.huo@intel.com>

        [CMake] Unify coding style for CMake files
        https://bugs.webkit.org/show_bug.cgi?id=103605

        Reviewed by Laszlo Gombos.

        Update cmake files(.cmake, CMakeLists.txt) with following style rules:
        1. Indentation
        1.1 Use spaces, not tabs.
        1.2 Four spaces as indent.
        2. Spacing
        2.1 Place one space between control statements and their parentheses.
            For eg, if (), else (), elseif (), endif (), foreach (),
            endforeach (), while (), endwhile (), break ().
        2.2 Do not place spaces between function and macro statements and
            their parentheses. For eg, macro(), endmacro(), function(),
            endfunction().
        2.3 Do not place spaces between a command or function or macro and its
            parentheses, or between a parenthesis and its content. For eg,
            message("testing") not message( "testing") or message ("testing" )
        2.4 No space at line ending.
        3. Lowercase when call commands macros and functions. For eg,
           add_executable() not ADD_EXECUTABLE(), set() not SET().

        * CMakeLists.txt:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformWinCE.cmake:
        * UseJSC.cmake:
        * UseV8.cmake:

2012-12-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove unused property names from V8HiddenPropertyName
        https://bugs.webkit.org/show_bug.cgi?id=104194

        Reviewed by Adam Barth.

        We can remove unused property names from V8HiddenPropertyName.

        No tests. No change in behavior.

        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):

2012-12-05  Greg Billock  <gbillock@google.com>

        Add runtime enable for web intents.
        https://bugs.webkit.org/show_bug.cgi?id=103669

        Reviewed by Adam Barth.

        Make web intents Javascript API enabled by a runtime setting.

        * Modules/intents/DOMWindowIntents.idl:
        * Modules/intents/NavigatorIntents.idl:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::webkitStartActivityEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIntentEnabled):
        (WebCore::RuntimeEnabledFeatures::webKitIntentEnabled):
        (WebCore::RuntimeEnabledFeatures::setWebIntentsEnabled):

2012-12-05  Scott Violet  <sky@chromium.org>

        [chromium] Remove linux theme related files and switch to default
        https://bugs.webkit.org/show_bug.cgi?id=103897

        Reviewed by Tony Chang.

        Linux related theme files are now named Default.

        No new tests, code cleanup.

        * WebCore.gyp/WebCore.gyp: Update files
        * WebCore.gypi: Update files
        * platform/chromium/PlatformThemeChromiumLinux.cpp: Removed.
        * platform/chromium/PlatformThemeChromiumLinux.h: Removed.
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp: Removed.
        * platform/chromium/ScrollbarThemeChromiumLinux.h: Removed.
        * rendering/RenderThemeChromiumAndroid.cpp:
        (WebCore::RenderThemeChromiumAndroid::extraDefaultStyleSheet): Linux->Default
        * rendering/RenderThemeChromiumAndroid.h: Change superclass
        * rendering/RenderThemeChromiumLinux.cpp: Removed.
        * rendering/RenderThemeChromiumLinux.h: Removed.

2012-12-05  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Allow multiple transactions to interleave request execution
        https://bugs.webkit.org/show_bug.cgi?id=97570

        Reviewed by Tony Chang.

        Implement spec logic for allowing read-only transactions, and read-write transactions
        with non-overlapping scopes, to run concurrently. Transactions all still run in the
        same thread with tasks triggered via timers, so tasks and the underlying database
        operations are interleaved rather than truly parallelized.

        Within IDBTransactionCoordinator, rename started->queued, running->started to match
        spec terminology and clear up confusion.

        Test: storage/indexeddb/transaction-coordination-across-databases.html
              storage/indexeddb/transaction-coordination-within-database.html
              storage/indexeddb/transaction-readwrite-exclusive.html
              storage/indexeddb/transaction-scope-sequencing.html
              storage/indexeddb/transaction-starvation.html

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: Use IDBTransaction::Mode enum
        (WebCore::IDBDatabaseBackendImpl::createTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h: Ditto.
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h: Ditto.
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp: Convert scope as a HashSet for
        fast intersecting.
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::mode):
        (WebCore::IDBTransactionBackendImpl::scope):
        * Modules/indexeddb/IDBTransactionCoordinator.cpp: Spec logic goes here.
        (WebCore::IDBTransactionCoordinator::processStartedTransactions): Extend this
        method to test all plausibly runnable transactions.
        (WebCore):
        (WebCore::IDBTransactionCoordinator::canRunTransaction): Test to see if one
        particular transaction can be run.
        (WebCore::IDBTransactionCoordinator::doScopesOverlap): Do a quick intersection
        test between transaction scopes.
        * Modules/indexeddb/IDBTransactionCoordinator.h:
        (IDBTransactionCoordinator):

2012-12-05  No'am Rosenthal  <noam@webkit.org>

        Coordinated Graphics: Enable support for setContentsToBackgroundColor
        https://bugs.webkit.org/show_bug.cgi?id=104128

        Reviewed by Kenneth Rohde Christiansen.

        Enable background color in GraphicsLayerTextureMapper, and paint it using TextureMapper::drawSolidColor.
        Once https://bugs.webkit.org/show_bug.cgi?id=103786 is enabled, this would enable Qt/GTK/EFL to directly
        composite colors that only have a background color, without having to create a backing store for them.
        This would eliminate the memory usage for those layers, reduce the time needed for them to draw into the
        backing store and upload the texture, and in the future allow direct compositing of things other than
        background colors.

        Compositing tests cover this, but are still skipped for ports using coordinated graphics. 
        See https://bugs.webkit.org/show_bug.cgi?id=104129.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsToBackgroundColor):
        (WebCore::GraphicsLayerTextureMapper::backgroundColor):
            Maintain a backgroundColor member variable in GraphicsLayerTextureMapper

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawSolidColor):
            TextureMapperGL::drawSolidColor should allow blending when the solid color has alpha.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::flushCompositingStateSelf):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (State):

2012-12-05  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r136481.
        http://trac.webkit.org/changeset/136481
        https://bugs.webkit.org/show_bug.cgi?id=103868

        it might have regressed dom_perf/CloneNodes (See bug 104177)

        * dom/ContainerNodeAlgorithms.h:
        (ChildNodeInsertionNotifier):
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoTree):
        (WebCore::ChildNodeInsertionNotifier::notify):

2012-12-05  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Abort transactions because of leveldb errors part 3
        https://bugs.webkit.org/show_bug.cgi?id=103960

        Reviewed by Tony Chang.

        Transactions are aborted when there are leveldb problems creating
        indexes on an object store with existing data or when adding data to an
        objectstore that has indexes.

        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore):
        (WebCore::makeIndexWriters):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreStorageOperation::perform):

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

        Fix some repaint/paintCounter confusion, and reset it when getting layers out of the layer pool
        https://bugs.webkit.org/show_bug.cgi?id=104180

        Reviewed by Tim Horton.

        Layers retrieved from the LayerPool by TileCache need to have their
        repaint counters reset, otherwise the scroll performance logging gets
        confused.
        
        Also, the counter counts paints, not repaints (invalidations), so
        rename it accordingly.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea): Whitespace fix.
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::blankPixelCountForTiles):
        (WebCore::TileCache::createTileLayer):
        (WebCore::TileCache::drawRepaintCounter):
        * platform/graphics/ca/mac/WebTileLayer.h:
        * platform/graphics/ca/mac/WebTileLayer.mm:
        (-[WebTileLayer resetPaintCount]):
        (-[WebTileLayer incrementPaintCount]):
        (-[WebTileLayer paintCount]):
        (-[WebTileLayer logFilledFreshTile]):

2012-12-05  Oliver Hunt  <oliver@apple.com>

        Empty parse cache when receiving a low memory warning
        https://bugs.webkit.org/show_bug.cgi?id=104161

        Reviewed by Filip Pizlo.

        Use new discardAllCode() function on the global data, rather than
        directly interacting with the heap.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::discardAllCompiledCode):

2012-12-05  Dan Bernstein  <mitz@apple.com>

        Text decorations are rotated when text-combine takes effect
        https://bugs.webkit.org/show_bug.cgi?id=104172

        Reviewed by Dave Hyatt.

        Test: fast/text/decorations-with-text-combine.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Applied a rotation to the graphics context when painting
        the text decorations for combined text.

2012-12-05  Justin Novosad  <junov@google.com>

        [skia] Improve performance of GraphicsContext::createCompatibleBuffer by using SkDevice:createCompatibleDevice
        https://bugs.webkit.org/show_bug.cgi?id=103896

        Reviewed by Stephen White.

        Refactored GraphicsContext::createCompatibleBuffer (platform common
        code) to use platform-specific implementations provided by ImageBuffer.
        There is no change in behavior for non-skia ports. The skia
        implementation uses skia'a own createCompatibleDevice implementation,
        which offers several performance benefits:
        1. For accelerated contexts, the backing store may be allocated from
        the scratch texture pool, which minimizes texture allocation and
        deallocation overhead.
        2. The backing store will not be initially cleared if it is known
        in advance that fully opaque contents will be drawn into the buffer.
        3. For non-accelerated contexts, if the backing store is flagged as
        opaque, faster blitter loop implementations will be used for drawing
        the buffer contents into other buffers. (e.g. generated opaque gradient
        fills)

        No new tests: covered by existing layout tests 

        * platform/graphics/Generator.h:
        (Generator):
        Added hasAlpha method so that it can be used by GeneratorGeneratedImage
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::drawPattern):
        Passing m_generator->hasAlpha() to createCompatibleBuffer in order to
        take advantage of optimizations that apply to opaque buffers.
        * platform/graphics/Gradient.h:
        (Gradient):
        Made hasAlpha virtual so that it now overrides Generator::hasAlpha
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::createCompatibleBuffer):
        Refactored to use platform-specific implementation
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::createCompatibleBuffer):
        Non-skia implementation. Mimics old
        GraphicsContext::createCompatibleBuffer
        * platform/graphics/ImageBuffer.h:
        (ImageBuffer):
        New skia-specific constructor
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::createCompatibleDevice):
        (WebCore):
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia):

2012-12-05  Alexis Menard  <alexis@webkit.org>

        REGRESSION (r136683): css3/calc/background-position-parsing.html failing on EFL Linux 64-bit Debug WK2
        https://bugs.webkit.org/show_bug.cgi?id=104131

        Reviewed by Antti Koivisto.

        css3/calc/background-position-parsing.html assert in debug because we
        call CSSParser::validUnit multiple times in a row. The problem was with
        validUnit which check calc() values and save the result inside
        m_parsedCalculation for later usage. validUnit expects you to
        use m_parsedCalculation therefore calling validUnit again with
        m_parsedCalculation being set asserts. As parseFillBackgroundPosition
        just want to check wether the current value is maybe valid for
        background-position we can just relax the check to allow either the
        valid keywords or any other units (we will anyway filter the incorrect
        values later in the parsing). The most important check at this point
        for the shorthand is the validity of the keyword.

        No new tests : the assert was covered by css3/calc/background-position-parsing.html.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::isPotentialPositionValue):
        (WebCore::CSSParser::parseFillBackgroundPosition):
        * css/CSSParser.h:

2012-12-05  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r136735.
        http://trac.webkit.org/changeset/136735
        https://bugs.webkit.org/show_bug.cgi?id=102699

        Broke Chrome/Win build.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumWin::paintButton):
        (WebCore::ScrollbarThemeChromiumWin::paintThumb):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):
        (WebCore::RenderThemeChromiumWin::paintButton):
        (WebCore::RenderThemeChromiumWin::paintSliderTrack):
        (WebCore::RenderThemeChromiumWin::paintSliderThumb):
        (WebCore::RenderThemeChromiumWin::paintMenuList):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):

2012-12-05  Jun Jiang  <jun.a.jiang@intel.com>

        WebGL: use pointer to the source data for Image directly in texImage2D and texSubImage2D to avoid memory copy if no conversion is needed
        https://bugs.webkit.org/show_bug.cgi?id=103885

        Reviewed by Kenneth Russell.

        In texImage2D() and texSubImage2D(), there is a redundant memory copy from Image data to the intermediate vector when no conversion is needed. If the Image resource can be locked properly, it is better to use the pointer to the image source directly and hence avoid the memory copy and improve the performance. 

        Already covered by current tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::texImage2DBase):
        (WebCore::WebGLRenderingContext::texImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2DBase):
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):
        * platform/graphics/GraphicsContext3D.h:
        (ImageExtractor):

2012-12-05  Elliott Sprehn  <esprehn@chromium.org>

        Add infrastructure for :before and :after in DOM
        https://bugs.webkit.org/show_bug.cgi?id=103705

        Reviewed by Eric Seidel.

        Add all infrastructure for reimplementing generated content :before and
        :after as DOM Elements. Now ElementRareData has two pointers to PseudoElements
        for the generated content and Node has methods for traversing the tree
        including generated content.

        This will allow the generated content to be treated as real nodes instead
        of anonymous and take part in the usual recalcStyle and attach flow which
        fixes many bugs and vastly simplifies the ifecycle of generated content.

        Instead of attempting to land both the infrastructure and enable it at
        the same time which has proven problematic due to how drastic this change
        is, this patch contains only the support code so a much smaller future
        patch can be used to switch it on.

        No new behavior, this is just the infrastructure.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::detach):
        (WebCore::Element::updatePseudoElement):
        (WebCore::Element::createPseudoElementIfNeeded):
        (WebCore::Element::beforePseudoElement):
        (WebCore::Element::afterPseudoElement):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::~ElementRareData):
        (WebCore::ElementRareData::setPseudoElement):
        (WebCore::ElementRareData::pseudoElement):
        (WebCore::ElementRareData::releasePseudoElement):
        * dom/Node.cpp:
        (WebCore::Node::pseudoAwarePreviousSibling):
        (WebCore::Node::pseudoAwareNextSibling):
        (WebCore::Node::rendererIsEditable):
        (WebCore::checkAcceptChild):
        * dom/Node.h:
        (Node):
        (WebCore::Node::isPseudoElement):
        (WebCore::Node::isBeforePseudoElement):
        (WebCore::Node::isAfterPseudoElement):
        (WebCore::Node::pseudoId):
        (WebCore::Node::customPseudoId):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):
        * dom/Position.cpp:
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        * dom/PseudoElement.cpp: Added.
        (WebCore::pseudoElementTagName):
        (WebCore::PseudoElement::PseudoElement):
        (WebCore::PseudoElement::customStyleForRenderer):
        (WebCore::PseudoElement::attach):
        (WebCore::PseudoElement::rendererIsNeeded):
        (WebCore::PseudoElement::updateChildStyle):
        (WebCore::PseudoElement::didRecalcStyle):
        * dom/PseudoElement.h: Added.
        (PseudoElement):
        (WebCore::PseudoElement::create):
        (WebCore::pseudoElementIsNeeded):
        * editing/visible_units.cpp:
        (WebCore::logicallyPreviousBox):
        (WebCore::logicallyNextBox):
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setInnerNode):
        (WebCore::HitTestResult::setInnerNonSharedNode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot):
        (WebCore::RenderBlock::renderName):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::originalText):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::renderName):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::renderName):
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::renderName):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        (WebCore::RenderObject::setPseudoStyle):
        (WebCore::RenderObject::createVisiblePosition):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isPseudoElement):
        (RenderObject):
        (WebCore::RenderObject::generatingNode):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::renderName):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::renderName):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::renderName):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createRenderer):
        (WebCore::TextContentData::createRenderer):
        (WebCore::CounterContentData::createRenderer):
        (WebCore::QuoteContentData::createRenderer):

2012-12-05  Justin Novosad  <junov@google.com>

        Use of uninitialized variable in WebCore::RenderBox::paintFillLayers
        https://bugs.webkit.org/show_bug.cgi?id=104154

        Reviewed by Stephen White.

        Method FillLayer::clipOccludesNextLayers performs an internal
        initialization when called on the first layer of a list of layers.
        Without this initialization, calls to clipOccludesNextLayers on
        subsequent layers will use uninitialized data.  In some cases, the
        call to clipOccludesNextLayers was being short-circuited in
        RenderBox::paintFillLayers. 
        Fix: Predicate was permuted to ensure that clipOccludesNextLayers
        is never short-circuited.
        
        Test: fast/backgrounds/size/contain-and-cover-zoomed.html
        Running with valgrind reveals the error.

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

2012-12-05  Elliott Sprehn  <esprehn@gmail.com>

        Encapsulate ElementRareData for possible future sharing
        https://bugs.webkit.org/show_bug.cgi?id=103948

        Reviewed by Eric Seidel.

        Encapsulate ElementRareData and make all access go through getters and
        setters. This is already true for NodeRareData, but ElementRareData
        had many places where people directly access it.

        This the first step in possible future sharing of ElementRareData
        instances across nodes. All nodes in a shadow tree have rare data to
        store the TreeScope, but in most cases all they have is the TreeScope!
        Instead of making every node in a shadow subtree have rare data
        and use lots of memory we could just share a single instance of rare data
        and only allocate a unique one on modification. Encapsulation lets us
        assert about mutations on shared instances.

        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::attributes):
        (WebCore::Element::shadow):
        (WebCore::Element::ensureShadow):
        (WebCore::Element::minimumSizeForResizing):
        (WebCore::Element::setMinimumSizeForResizing):
        (WebCore::Element::computedStyle):
        (WebCore::Element::classList):
        (WebCore::Element::optionalClassList):
        (WebCore::Element::dataset):
        (WebCore::Element::hasNamedNodeMap):
        (WebCore::Element::savedLayerScrollOffset):
        (WebCore::Element::setSavedLayerScrollOffset):
        * dom/ElementRareData.cpp:
        (WebCore::ElementRareData::reportMemoryUsage):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::needsFocusAppearanceUpdateSoonAfterAttach):
        (WebCore::ElementRareData::setNeedsFocusAppearanceUpdateSoonAfterAttach):
        (ElementRareData):
        (WebCore::ElementRareData::styleAffectedByEmpty):
        (WebCore::ElementRareData::setStyleAffectedByEmpty):
        (WebCore::ElementRareData::isInCanvasSubtree):
        (WebCore::ElementRareData::setIsInCanvasSubtree):
        (WebCore::ElementRareData::containsFullScreenElement):
        (WebCore::ElementRareData::setContainsFullScreenElement):
        (WebCore::ElementRareData::isInTopLayer):
        (WebCore::ElementRareData::setIsInTopLayer):
        (WebCore::ElementRareData::childrenAffectedByHover):
        (WebCore::ElementRareData::setChildrenAffectedByHover):
        (WebCore::ElementRareData::childrenAffectedByActive):
        (WebCore::ElementRareData::setChildrenAffectedByActive):
        (WebCore::ElementRareData::childrenAffectedByDrag):
        (WebCore::ElementRareData::setChildrenAffectedByDrag):
        (WebCore::ElementRareData::childrenAffectedByFirstChildRules):
        (WebCore::ElementRareData::setChildrenAffectedByFirstChildRules):
        (WebCore::ElementRareData::childrenAffectedByLastChildRules):
        (WebCore::ElementRareData::setChildrenAffectedByLastChildRules):
        (WebCore::ElementRareData::childrenAffectedByDirectAdjacentRules):
        (WebCore::ElementRareData::setChildrenAffectedByDirectAdjacentRules):
        (WebCore::ElementRareData::childrenAffectedByForwardPositionalRules):
        (WebCore::ElementRareData::setChildrenAffectedByForwardPositionalRules):
        (WebCore::ElementRareData::childrenAffectedByBackwardPositionalRules):
        (WebCore::ElementRareData::setChildrenAffectedByBackwardPositionalRules):
        (WebCore::ElementRareData::childIndex):
        (WebCore::ElementRareData::setChildIndex):
        (WebCore::ElementRareData::shadow):
        (WebCore::ElementRareData::setShadow):
        (WebCore::ElementRareData::attributeMap):
        (WebCore::ElementRareData::setAttributeMap):
        (WebCore::ElementRareData::computedStyle):
        (WebCore::ElementRareData::setComputedStyle):
        (WebCore::ElementRareData::classList):
        (WebCore::ElementRareData::setClassList):
        (WebCore::ElementRareData::dataset):
        (WebCore::ElementRareData::setDataset):
        (WebCore::ElementRareData::minimumSizeForResizing):
        (WebCore::ElementRareData::setMinimumSizeForResizing):
        (WebCore::ElementRareData::savedLayerScrollOffset):
        (WebCore::ElementRareData::setSavedLayerScrollOffset):
        (WebCore::ElementRareData::resetComputedStyle):
        * dom/NodeRareData.h:
        (NodeRareData):

2012-12-05  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium][Win] Remove theme-related functions from PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=102699

        Reviewed by Adam Barth.

        Call theme engine directly instead of going through
        PlatformSupport. Part of a refactoring series. See tracking bug 82948.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumWin::paintButton):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):
        (WebCore::RenderThemeChromiumWin::paintButton):
        (WebCore::RenderThemeChromiumWin::paintSliderTrack):
        (WebCore::RenderThemeChromiumWin::paintSliderThumb):
        (WebCore::RenderThemeChromiumWin::paintMenuList):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):

2012-12-05  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r136609.
        http://trac.webkit.org/changeset/136609
        https://bugs.webkit.org/show_bug.cgi?id=103793

        Breaking Chrome/Mac Debug builds.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::create):
        * platform/chromium/support/GraphicsContext3DChromium.cpp:
        (WebCore::GraphicsContext3D::create):
        * platform/graphics/GraphicsContext3D.h:
        (Attributes):

2012-12-05  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions] Enable shape-inside for multiple-segment polygons
        https://bugs.webkit.org/show_bug.cgi?id=91878

        Reviewed by David Hyatt.

        Patch adding support for multiple-segment polygons for shape-insides from
        the CSS Exclusions specification. The layout code has been modified to first
        support dividing text into multiple segments per line, and then to lay out
        multiple segments per line box.

        Tests:  fast/exclusions/shape-inside/shape-inside-multiple-segments-001.html
                fast/exclusions/shape-inside/shape-inside-multiple-segments-002.html
                fast/exclusions/shape-inside/shape-inside-multiple-segments-003.html
                fast/exclusions/shape-inside/shape-inside-multiple-segments-004.html

        * platform/text/BidiResolver.h:
        (WebCore::BidiCharacterRun::BidiCharacterRun):
        (BidiCharacterRun): Added a 'startsSegment' bitfield to track whether a
        run begins a new segment. The field is here, rather than in BidiRun, in
        order to save space. See Bug 100173.
        * rendering/BidiRun.h:
        (WebCore::BidiRun::BidiRun):
        (BidiRun): Set the initial value for 'startsSegment'.
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::computeSegmentsForLine): Clear the
        segment ranges when computing segments for a new line.
        * rendering/ExclusionShapeInsideInfo.h:
        (LineSegmentRange): Added a new type to track segment offsets.
        (WebCore::ExclusionShapeInsideInfo::segmentRanges): Added a getter for
        the line segment ranges vector.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection): Modified to call
        a refactored box placement algorithm that takes a beginning and end position.
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection): Similar to the
        placeBoxes method, but takes an end position that may occur before the end
        of the line.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::exclusionShapeInsideInfo): Factored out calls
        to ExclusionShapeInsideInfo to the .cpp file, as ExclusionShapeInsideInfo
        requires InlineIterator.h, which would create a circular dependency in
        ExclusionShapeInsideInfo.h.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::exclusionShapeInsideInfo): Modified to call
        exclusionShapeInsideInfo to be non-inline.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::LineWidth): LineWidth now uses the number of computed
        segmentRanges to determine which LineSegment to use when calculating width.
        (WebCore::RenderBlock::createLineBoxes): Now takes a boolean to determine
        whether or not it can share the same parentBox as its siblings (segments
        must be able to position themselves separately in the RootInlineBox).
        (WebCore::RenderBlock::constructLine):
        (WebCore::computeExpansionForJustifiedText): Do include runs that start new
        segments when calculating justification for the current segment.
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Modified to
        use the computeInlineDirectionPositionsForSegment, which can position
        multiple segments of text per line.
        (WebCore::RenderBlock::computeInlineDirectionPositionsForSegment): Positions
        the given segment of text and calculates its layout offsets.
        (WebCore::constructBidiRuns): Modified some variables from 'endOfLine' to 'endOfSegment'.
        (WebCore::constructBidiRunsForLine): Construct the bidi runs for each segment in
        the given line.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Call constructBidiRunsForLine.
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): Moved the line breaking code
        to break segments, with nextLineBreak iterating over segment breaks for the entire line.
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak): Calculates how much text a
        segment can hold. This code was originally in nextLineBreak.

2012-12-05  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r136630.
        http://trac.webkit.org/changeset/136630
        https://bugs.webkit.org/show_bug.cgi?id=103555

        It's breaking Chrome/Win Debug builds.

        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (LazyDecodingPixelRef):

2012-12-05  Andreas Kling  <akling@apple.com>

        REGRESSION(r136615): Incorrect style sharing in view-source documents.
        <http://webkit.org/b/104089>

        Reviewed by Antti Koivisto.

        Make sure we collect feature data about the default view-source style sheet before evaluating
        style sharing candidates, otherwise it won't know which class selectors to care about.

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

2012-12-05  Mike West  <mkwst@chromium.org>

        Stop generating call stacks inside ContentSecurityPolicy
        https://bugs.webkit.org/show_bug.cgi?id=104126

        Reviewed by Yury Semikhatsky.

        Now that bug 100650 has made it possible for ConsoleMessage to generate
        call stacks, we can remove the stack being generated in
        ContentSecurityPolicy::logToConsole. We need the ScriptState*, however,
        so this patch makes it possible to pipe it through addConsoleMessage
        down into the guts of the inspector.

        This patch also removes an unused addConsoleMessage variant from
        ScriptExecutionContext, which should have been removed from the patch to
        100650 before landing it. My bad.

        * dom/Document.cpp:
        (WebCore::Document::addMessage):
        * dom/Document.h:
        (Document):
            Accept a ScriptState* parameter in Document::addMessage, and pass it
            through to Console::addMessage.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::addConsoleMessage):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
            Accept a ScriptState* parameter in Document::addMessage, and pass it
            through to ScriptExecutionContext::addMessage. Also, remove an unused
            variant of ScriptExecutionContext::addConsoleMessage that accepted
            only a call stack in addition to the basics.
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        (ConsoleMessage):
            Accept a ScriptState* and pass it into autogenerateMetadata for
            call stack generational goodness.
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
            Accept a ScriptState* and pass it into addConsoleMessage.
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
            Add an empty ScriptState parameter to the addConsoleMessage call.
        * inspector/InspectorConsoleAgent.h:
        (InspectorConsoleAgent):
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        * page/Console.h:
        (Console):
            Pipe ScriptState through the intermediate classes.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::logToConsole):
            Drop call stack generation, and pass ScriptState* into addConsoleMessage.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addConsoleMessage):
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::addMessageToWorkerConsole):
        * workers/WorkerContext.h:
        (WorkerContext):
            Accept ScriptState* and pass it into addMessageToConsole.

2012-12-05  Rafael Weinstein  <rafaelw@chromium.org>

        DOMImplementation.createDocument should call appendChild rather than parserAppendChild to add docType and documentElement
        https://bugs.webkit.org/show_bug.cgi?id=104040

        Reviewed by Ojan Vafai.

        createDocument now calls appendChild.

        No new tests (no observable changes).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserAppendChild):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

2012-12-05  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Stub out transaction-backend methods
        https://bugs.webkit.org/show_bug.cgi?id=103921

        Reviewed by Dimitri Glazkov.

        In preparation for a refactoring. Legacy methods 
        will be removed in https://bugs.webkit.org/show_bug.cgi?id=103923.

        No new tests, just adding unused methods for refactoring.

        * Modules/indexeddb/IDBCallbacks.h:
        (WebCore::IDBCallbacks::onUpgradeNeeded):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::onAbort):
        (WebCore):
        (WebCore::IDBDatabase::onComplete):
        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createTransaction):
        (WebCore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::commit):
        (WebCore::IDBDatabaseBackendImpl::abort):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBDatabaseCallbacks.h:
        (IDBDatabaseCallbacks):
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp:
        (WebCore::IDBDatabaseCallbacksImpl::onAbort):
        (WebCore):
        (WebCore::IDBDatabaseCallbacksImpl::onComplete):
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
        (IDBDatabaseCallbacksImpl):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * Modules/indexeddb/IDBFactoryBackendImpl.h:
        (WebCore::IDBFactoryBackendImpl::open):
        (IDBFactoryBackendImpl):
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        (IDBFactoryBackendInterface):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        (WebCore):
        * Modules/indexeddb/IDBOpenDBRequest.h:
        (IDBOpenDBRequest):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        (WebCore):
        * Modules/indexeddb/IDBTransactionCoordinator.h:

2012-11-27  Alec Flett  <alecflett@chromium.org>

        IndexedDB: remove IDBDatabaseBackendInterface::transaction()
        https://bugs.webkit.org/show_bug.cgi?id=102733

        Reviewed by Darin Fisher.

        Part 3 of a refactor, remove the old transaction() method.

        No new tests as this is just post-refactor cleanup.

        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):

2012-12-05  Robert Hogan  <robert@webkit.org>

        REGRESSION(r126683): Table cell are getting borders when the style doesn't mention any
        https://bugs.webkit.org/show_bug.cgi?id=101677

        Reviewed by Julien Chaffraix.

        The bordercolor attribute on a cell or row has no effect on FF and Opera, even when the parent
        table has a border attribute. IE displays the bordercolor of the cell and row in all cases except when
        the parent has no border attribute. WebKit's old behaviour (before r126683) was to display the
        bordercolor of the row but not the cells (I don't think this behaviour was particularly deliberate). No
        browser displays the bordercolor for a col or tbody element.

        Bring WebKit into line with Opera and FF by ignoring the bordercolor attribute on cells, rows, cols, rowgroups, and
        colgroups in all cases, regardless of whether the table has a border or not.

        Test: fast/table/td-bordercolor-attribute.html

        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::isPresentationAttribute):
        (WebCore::HTMLTablePartElement::collectStyleForPresentationAttribute):

2012-12-05  Krzysztof Czech  <k.czech@samsung.com>

        [EFL][WK2] Introduce WebKit-EFL to Assistive Technologies
        https://bugs.webkit.org/show_bug.cgi?id=104000

        Reviewed by Chris Fleizach.

        Introduce Webkit-EFL so that Assistive Technologies can distinguish it.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

2012-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove unneeded WTF prefix from WTF types in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=104109

        Reviewed by Eric Seidel.

        WTF prefix is not needed because WTF headers have a using
        statement at the end of the file.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems):
        (WebCore::RenderFlexibleBox::layoutFlexItems):
        (WebCore::RenderFlexibleBox::freezeViolations):
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::alignFlexLines):
        (WebCore::RenderFlexibleBox::alignChildren):
        (WebCore::RenderFlexibleBox::flipForWrapReverse):
        * rendering/RenderFlexibleBox.h:

2012-12-05  Andras Becsi  <andras.becsi@digia.com>

        Fix compilation for Qt5.0.0 stable branch.
        https://bugs.webkit.org/show_bug.cgi?id=103870

        Reviewed by Simon Hausmann.

        This is a squashed patch consisting of patches by multiple authors.

        Fixed use of to-be-removed compatibility functions in QWindow
        Patch by Samuel Rødal <samuel.rodal@digia.com>

        Build fix. No new tests needed.

        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp:
        (FullScreenVideoWindow::FullScreenVideoWindow):
        (PlatformVideoWindow::PlatformVideoWindow):

2012-12-05  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: more robust treeoutline.findTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=103911

        Reviewed by Vsevolod Vlasov.

        Non-recursive algorithm to populate the treeoutline given an DOMNode
        as representedObject. Walk up the parents from the desired object
        until we find one that is currently represented in the treeoutline 
        cache. Then walk down, putting children in the cache until we get 
        to the desired object again. 
        With Pavel Feldeman <pfeldman@chromium.org>

        No new tests, refactoring, no new function

       * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype.findTreeElement):

2012-12-05  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL][GTK] List value response headers are not handled in RespourceResponse (libsoup specific)
        https://bugs.webkit.org/show_bug.cgi?id=95181

        Reviewed by Martin Robinson.

        When list-value response headers are received, they are handled as single
        value headers. This patch fixes incorrect behavior. New test was added to
        verify list-value header handling.

        Test: http/tests/xmlhttprequest/xmlhttprequest-test-custom-headers.html

        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage):

2012-12-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Don't include error message text in the editor buffer.
        https://bugs.webkit.org/show_bug.cgi?id=103932

        Reviewed by Alexander Pavlov.

        Skip entire decoration content when collecting dirty regions.
        
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDOM):

2012-12-05  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Replace use of ScriptExecutionContext::Task (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=103931

        Reviewed by Tony Chang.

        Actually drop use of ScriptExecutionContext::Task and remove incorrect usage of
        ThreadSafeRefCounted<>. Define a new IDBTransactionBackendImpl::Operation base class
        for operations; storage of per-operation data becomes explicit.

        No new tests - just a refactor.

        * Modules/indexeddb/IDBCallbacks.h: Remove bogus "ThreadSafe"
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::CursorIterationOperation::create):
        (IDBCursorBackendImpl::CursorIterationOperation):
        (WebCore::IDBCursorBackendImpl::CursorIterationOperation::CursorIterationOperation):
        (WebCore::IDBCursorBackendImpl::CursorAdvanceOperation::create):
        (IDBCursorBackendImpl::CursorAdvanceOperation):
        (WebCore::IDBCursorBackendImpl::CursorAdvanceOperation::CursorAdvanceOperation):
        (WebCore::IDBCursorBackendImpl::CursorPrefetchIterationOperation::create):
        (IDBCursorBackendImpl::CursorPrefetchIterationOperation):
        (WebCore::IDBCursorBackendImpl::CursorPrefetchIterationOperation::CursorPrefetchIterationOperation):
        (WebCore::IDBCursorBackendImpl::CursorAdvanceOperation::perform):
        (WebCore::IDBCursorBackendImpl::CursorIterationOperation::perform):
        (WebCore::IDBCursorBackendImpl::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendInterface.h: Remove bogus "ThreadSafe"
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreOperation::create):
        (IDBDatabaseBackendImpl::CreateObjectStoreOperation):
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreOperation::create):
        (IDBDatabaseBackendImpl::DeleteObjectStoreOperation):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::create):
        (IDBDatabaseBackendImpl::VersionChangeOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::VersionChangeOperation):
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreAbortOperation::create):
        (IDBDatabaseBackendImpl::CreateObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreAbortOperation::create):
        (IDBDatabaseBackendImpl::DeleteObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreAbortOperation::DeleteObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::create):
        (IDBDatabaseBackendImpl::VersionChangeAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::VersionChangeAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h: Remove bogus "ThreadSafe"
        * Modules/indexeddb/IDBDatabaseCallbacks.h: Remove bogus "ThreadSafe"
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        * Modules/indexeddb/IDBFactoryBackendInterface.h: Remove bogus "ThreadSafe"
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::OpenIndexCursorOperation::create):
        (IDBIndexBackendImpl::OpenIndexCursorOperation):
        (WebCore::IDBIndexBackendImpl::OpenIndexCursorOperation::OpenIndexCursorOperation):
        (WebCore::IDBIndexBackendImpl::IndexCountOperation::create):
        (IDBIndexBackendImpl::IndexCountOperation):
        (WebCore::IDBIndexBackendImpl::IndexCountOperation::IndexCountOperation):
        (WebCore::IDBIndexBackendImpl::IndexReferencedValueRetrievalOperation::create):
        (IDBIndexBackendImpl::IndexReferencedValueRetrievalOperation):
        (WebCore::IDBIndexBackendImpl::IndexReferencedValueRetrievalOperation::IndexReferencedValueRetrievalOperation):
        (WebCore::IDBIndexBackendImpl::IndexValueRetrievalOperation::create):
        (IDBIndexBackendImpl::IndexValueRetrievalOperation):
        (WebCore::IDBIndexBackendImpl::IndexValueRetrievalOperation::IndexValueRetrievalOperation):
        (WebCore::IDBIndexBackendImpl::OpenIndexCursorOperation::perform):
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        (WebCore::IDBIndexBackendImpl::IndexCountOperation::perform):
        (WebCore::IDBIndexBackendImpl::count):
        (WebCore::IDBIndexBackendImpl::IndexReferencedValueRetrievalOperation::perform):
        (WebCore::IDBIndexBackendImpl::IndexValueRetrievalOperation::perform):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        * Modules/indexeddb/IDBIndexBackendInterface.h: Remove bogus "ThreadSafe"
        * Modules/indexeddb/IDBKey.h: Remove bogus "ThreadSafe"
        (IDBKey):
        * Modules/indexeddb/IDBKeyRange.h: Remove bogus "ThreadSafe"
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreRetrievalOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreRetrievalOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreRetrievalOperation::ObjectStoreRetrievalOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreStorageOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreStorageOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreStorageOperation::ObjectStoreStorageOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreIndexesReadyOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreIndexesReadyOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreIndexesReadyOperation::ObjectStoreIndexesReadyOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreDeletionOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreDeletionOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreDeletionOperation::ObjectStoreDeletionOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreClearOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreClearOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreClearOperation::ObjectStoreClearOperation):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexOperation::create):
        (IDBObjectStoreBackendImpl::CreateIndexOperation):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexOperation::CreateIndexOperation):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexOperation::create):
        (IDBObjectStoreBackendImpl::DeleteIndexOperation):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::IDBObjectStoreBackendImpl::OpenObjectStoreCursorOperation::create):
        (IDBObjectStoreBackendImpl::OpenObjectStoreCursorOperation):
        (WebCore::IDBObjectStoreBackendImpl::OpenObjectStoreCursorOperation::OpenObjectStoreCursorOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreCountOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreCountOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreCountOperation::ObjectStoreCountOperation):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexAbortOperation::create):
        (IDBObjectStoreBackendImpl::CreateIndexAbortOperation):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexAbortOperation::create):
        (IDBObjectStoreBackendImpl::DeleteIndexAbortOperation):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreRetrievalOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReady):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreIndexesReadyOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreStorageOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreDeletionOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreClearOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::OpenObjectStoreCursorOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::count):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreCountOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexAbortOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexAbortOperation::perform):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h: Remove bogus "ThreadSafe"
        * Modules/indexeddb/IDBRequest.h: Remove bogus "ThreadSafe"
        (IDBRequest):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl): Appease RefPtr<> adoption strictness.
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (Operation):
        (WebCore::IDBTransactionBackendImpl::Operation::~Operation):
        (IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        * Modules/indexeddb/IDBTransactionBackendInterface.h: Remove bogus "ThreadSafe"

2012-12-05  Noel Gordon  <noel.gordon@gmail.com>

        ENABLE(IMAGE_DECODER_DOWN_SAMPLING): Don't swizzle decode down sampled images
        https://bugs.webkit.org/show_bug.cgi?id=103856

        Reviewed by Yong Li.

        For ports using ENABLE(IMAGE_DECODER_DOWN_SAMPLING), turbo swizzle decodes provide
        no speed-up when the decoded image will be down sampled because the data must pass
        through the buffer.setRGBA() slow path. That is not the swizzled path. Instead use
        JCS_RGB decodes to clarify the output color space handling in outputScanlines().

        No new tests. Covered by existing JPEG decoding tests.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode): libjpeg-turbo swizzle decodes provides no real
        speed-up if the image will be down sampled. Revert to using JCS_RGA in this case.
        (WebCore::setPixel): Remove the libjpeg-turbo JCS_EXT_BGRA and JCS_EXT_RGBA cases.
        (WebCore::JPEGImageDecoder::outputScanlines): ditto.
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::willDownSample): Return true if image down sampling 
        will be applied to the decoded image (m_scaled). Note: the willDownSample() return
        value is valid only after setSize() has been called: add an ASSERT for that.

2012-12-05  Michael Pruett  <michael@68k.org>

        IndexedDB: Implement IndexedDB bindings for JSC
        https://bugs.webkit.org/show_bug.cgi?id=103484

        Reviewed by Kentaro Hara.

        IndexedDB is currently implemented only for V8. This change adds
        the bindings necessary for IndexedDB to work with JSC. With this
        patch, IndexedDB for JSC passes 112 out of the 196 layout tests in
        storage/indexeddb. IndexedDB is still not enabled for any JSC port.

        Tests: storage/indexeddb/*

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBOpenDBRequest.idl:
        * Modules/indexeddb/IDBVersionChangeRequest.idl:
        * UseJSC.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMRequestState.h: Added to match bindings/v8/DOMRequestState.h.
        (WebCore):
        (DOMRequestState):
        (WebCore::DOMRequestState::DOMRequestState):
        (WebCore::DOMRequestState::clear):
        (Scope):
        (WebCore::DOMRequestState::Scope::Scope):
        (WebCore::DOMRequestState::exec):
        * bindings/js/IDBBindingUtilities.cpp: Add utility functions matching those in bindings/v8/IDBBindingUtilities.cpp.
        (WebCore::get):
        (WebCore):
        (WebCore::canSet):
        (WebCore::set):
        (WebCore::createIDBKeyFromValue):
        (WebCore::getNthValueOnKeyPath):
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::ensureNthValueOnKeyPath):
        (WebCore::canInjectNthValueOnKeyPath):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        (WebCore::deserializeIDBValue):
        (WebCore::idbKeyToScriptValue):
        * bindings/js/IDBBindingUtilities.h: Add utility functions matching those in bindings/v8/IDBBindingUtilities.h.
        (WebCore):
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSIDBKeyCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSIDBVersionChangeRequestCustom.cpp: Removed.

2012-12-05  Antoine Quint  <graouts@apple.com>

        TextTrackCue's .endTime property should fire a TypeError when NaN is assigned
        https://bugs.webkit.org/show_bug.cgi?id=103413

        Reviewed by Eric Carlson.

        Check whether the new time passed to setStartTime() and setEndTime() is none of NaN or Infinity,
        otherwise throwing a TypeError.
        
        Thanks to this fix, we're no longer skipping media/track/opera/interfaces/TextTrackCue/endTime.html and
        media/track/opera/interfaces/TextTrackCue/startTime.html.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::setStartTime):
        (WebCore::TextTrackCue::setEndTime):
        * html/track/TextTrackCue.h:
        (TextTrackCue):
        * html/track/TextTrackCue.idl:

2012-12-05  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Allow the CSS3 background position offset for background shorthand.
        https://bugs.webkit.org/show_bug.cgi?id=104014

        Reviewed by Dirk Schulze.

        Add the support of the new <position> type if set from within the
        background shorthand. The patch just modify the way we count the values
        of the current context by checking wether we encounter a comma (it is
        then the next background layer), or if we encounter a '/' (which is in the
        background shorthand context the background-size) or any value that is
        not a valid background-position keyword or length (which means we are
        already parsing the next property of the background shorthand).

        Tests: LayoutTests/fast/backgrounds/background-position-parsing-2.html
        has been modified to cover this use case.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::isPositionValue):
        (WebCore):
        (WebCore::CSSParser::parseFillBackgroundPosition):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSParser.h:

2012-12-05  Elliott Sprehn  <esprehn@gmail.com>

        ShadowRoot should recalcStyle for itself
        https://bugs.webkit.org/show_bug.cgi?id=103933

        Reviewed by Hajime Morita.

        ShadowRoot should support recalcStyle just like Element instead of
        having the code inside ElementShadow. This was once the case and
        the dead method prototype for recalcShadowTreeStyle is still in
        ShadowRoot.h.

        No new tests, just refactoring.

        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::recalcStyle):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::recalcStyle):
        * dom/ShadowRoot.h:

2012-12-05  Keishi Hattori  <keishi@webkit.org>

        Fix text direction in datalist popup for time controls
        https://bugs.webkit.org/show_bug.cgi?id=103853

        Reviewed by Kent Tamura.

        The datalist entry value should be displayed with the same text direction as the date/time format.

        Tests: platform/chromium/fast/forms/suggestion-picker/datetime-suggestion-picker-appearance-locale-hebrew.html
               platform/chromium/fast/forms/suggestion-picker/datetimelocal-suggestion-picker-appearance-locale-hebrew.html
               platform/chromium/fast/forms/suggestion-picker/time-suggestion-picker-appearance-locale-hebrew.html

        * Resources/pagepopups/calendarPicker.js: Renamed isCalendarRTL to isLocaleRTL.
        (CalendarPicker.prototype._layout):
        (CalendarPicker.prototype.fixWindowSize):
        (DaysTable.prototype._handleKey):
        (MonthPickerDaysTable.prototype._handleKey):
        (WeekPickerDaysTable.prototype._handleKey):
        * Resources/pagepopups/suggestionPicker.css:
        (.suggestion-list-entry .title): Title should have the same text direction as the locale.
        (.locale-rtl .suggestion-list-entry .title):
        * Resources/pagepopups/suggestionPicker.js:
        (SuggestionPicker.prototype._layout): Add locale-rtl class if the isLocaleRTL is true.

2012-12-05  Keishi Hattori  <keishi@webkit.org>

        Fix flickering when hiding page popup
        https://bugs.webkit.org/show_bug.cgi?id=104100

        Reviewed by Kent Tamura.

        Moving the page popup while hiding was causing flickering in some environments.

        No new tests. Can't reproduce in layout test.

        * Resources/pagepopups/pickerCommon.js:
        (hideWindow): Don't move and just resize.

2012-12-05  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Don't rely on QMimeDatabase for essential MIME types
        https://bugs.webkit.org/show_bug.cgi?id=103865

        Based on patch by Pierre Rossi.
        Reviewed by Jocelyn Turcotte.

        Extend the short static list to also include MIME types essential to WebKit,
        and detect these first before checking the system mimedatabase.

        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):

2012-12-05  Zoltan Herczeg  <zherczeg@webkit.org>

        Optimize ColorMatrix filter
        https://bugs.webkit.org/show_bug.cgi?id=103728

        Reviewed by Dirk Schulze.

        ColorMatrix filter recalculates several constants for
        every pixel. It is enough to do these calculations only
        once during the initialization. Style issues also fixed.

        Existing tests cover this feature.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::matrix):
        (WebCore::saturateAndHueRotate):
        (WebCore::effectType):

2012-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Flex item auto margins in the cross direction should safe center
        https://bugs.webkit.org/show_bug.cgi?id=103919

        Reviewed by Ojan Vafai.

        Do not apply auto margins for cross axis if there's no alignment
        space available.

        Test: css3/flexbox/flex-flow-auto-margins-no-available-space.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::alignChildren): Make sure we pass a
        positive value for availableAlignmentSpace to
        updateAutoMarginsInCrossAxis().

2012-12-05  Mike West  <mkwst@chromium.org>

        Web Inspector: Autogenerate stack traces and line numbers when possible.
        https://bugs.webkit.org/show_bug.cgi?id=100650

        Reviewed by Yury Semikhatsky.

        Console messages generated in WebCore generally are asked to do a bit of
        work in order to provide a developer with a detailed report. We ask the
        caller to either generate stack traces, or pass in a url/line number
        pair, which can be a bit of work. Predictably, most callers don't pass
        in what we'd like to see.

        This patch creates a new, simpler console message generation API that we
        expect most call sites to use. Source, type, level, and message are
        required, and an optional request ID can be passed in. Everything else
        will be autogenerated inside ConsoleMessage when appropriate.

        In a subsequent patch, we expect to be able to trim down more of the
        external call sites (ContentSecurityPolicy springs to mind) in order to
        further consolidate the external interface. Simple is good.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didFailSocketStream):
            Drop the now-redundant URL parameter from various WebSocket errors.
        * css/MediaList.cpp:
        (WebCore::addResolutionWarningMessageToConsole):
            Switch to Document::addConsoleMessage, which means that we can move
            line-number generation out of MediaList.
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
            Use the long-form 'addMessage()' rather than the public interface.
        (WebCore::Document::processHttpEquiv):
            Drop the URL parameter, as it's now autogenerated.
        (WebCore::Document::addConsoleMessage):
        (WebCore):
        * dom/Document.h:
        (Document):
            Override the pure virtual method on ScriptExecutionContext, and pass
            the call through to the new Console::addMessage, which accepts a
            pointer to the Document in order to do line-number generation.
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
            Add a pure virtual variant of addConsoleMessage which accepts only
            bare minimum data, and expects autogeneration of the rest.
            Additionally, ensure that the other variants always have either a
            URL/line number, or a stack trace.
        * dom/ViewportArguments.cpp:
        (WebCore::reportViewportWarning):
            Drop line numbers and URLs from Viewport warnings. We can generate
            these now.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
            Drop the URL from form autofocus warnings
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
            Drop the URL and line from sandbox attribute warnings.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::printWarningToConsole):
            Drop the URL from WebGL warnings.
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
            Call 'autogenerateMetadata' to ensure that a stack trace is
            generated if one isn't provided. Create a new constructor that
            accepts a ScriptState/ScriptArguments pair, and use it for console
            API calls.
        (WebCore):
        (WebCore::ConsoleMessage::autogenerateMetadata):
            Generate a stack trace given whatever information we've got.
        * inspector/ConsoleMessage.h:
        (ConsoleMessage):
            Create a new constructor that accepts a ScriptState/ScriptArguments
            pair, and use it for console API calls.
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::enable):
            Use the short-form ConsoleMessage constructor.
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
            Use the stack-only constructor, or the ScriptState
            constructor, as appropriate.
        (WebCore::InspectorConsoleAgent::count):
            We generated a stack, pass it in.
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::isWorkerAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::isWorkerAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::isWorkerAgent):
            We only want to generate call stacks for non-Workers (because
            createScriptCallStack explodes in JSC if we're not on the main
            thread). This method will allow us to distinguish between those
            messages generated from Workers, and those from Pages.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
            Drop the URL parameter from the console message for X-Frame-Options
            parsing errors.
        * page/Console.cpp:
        (WebCore::Console::addMessage):
            When given a Document*, generate a line number if: 1) the document
            is still being parsed, 2) the document is not in document.write(),
            3) the parser isn't waiting for script, and 4) the parser isn't
            executing script. Many callsites didn't check all of these, which
            is why the SVG rebaseline (for example) drops lots and lots of line
            numbers which point at a closing '</script>' tag.
        (WebCore):
        * page/Console.h:
        (WebCore):
        (Console):
            Update the public API to accept a Document* and little else.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::printErrorMessage):
            Don't generate a stack here. We can do it later.
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::reportMessage):
            Drop the URL and line number. We'll generate them. It'll be sweet.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addConsoleMessage):
        (WebCore):
        * workers/WorkerContext.h:
        (WorkerContext):
            Implement the new addConsoleMessage variant.

2012-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reduce the children repaints when moved multiple times during the layout
        https://bugs.webkit.org/show_bug.cgi?id=103510

        Reviewed by Darin Adler.

        Cache the children positions before the layout and move to the
        final position after the layout.

        Test: css3/flexbox/repaint-column-reverse.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderIterator::OrderIterator): Do not
        call first() on the consructor.
        (WebCore::RenderFlexibleBox::layoutBlock): Use a Vector with the
        children frame rects before the layout and call
        repaintChildrenDuringLayoutIfMoved() to repaint the children that
        have been moved.
        (WebCore::RenderFlexibleBox::appendChildrenFrameRects): Return a
        Vector with children frame rects.
        (WebCore::RenderFlexibleBox::repaintChildrenDuringLayoutIfMoved):
        Call repaintDuringLayoutIfMoved() for every children using the old
        frame rects.
        (WebCore::RenderFlexibleBox::setFlowAwareLocationForChild): Do not
        call repaintDuringLayoutIfMoved().
        (WebCore::RenderFlexibleBox::layoutFlexItems): Make sure the
        passed iterator points to the first child.
        * rendering/RenderFlexibleBox.h:

2012-12-05  Dan Carney  <dcarney@google.com>

        [V8] toV8Fast for all classes with ScriptWrapper Holder objects
        https://bugs.webkit.org/show_bug.cgi?id=102686

        Reviewed by Adam Barth.

        This patch makes most generated bindings use toV8Fast
        by adding a fast path to the main world DOMDataStore.
        Additionally, toV8Fast is now being called on callbacks
        which use v8::Arguments.

        No new tests. No change in functionality.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallString):
        (NativeToJSValue):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::mainWorldStore):
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMDataStore.h:

2012-12-05  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] nit: add more typization for js compiler
        https://bugs.webkit.org/show_bug.cgi?id=103994

        Reviewed by Pavel Feldman.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-12-05  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] ExclusionShape inlines should use isFlippedBlocksWritingMode()
        https://bugs.webkit.org/show_bug.cgi?id=103939

        Reviewed by Dirk Schulze.

        Just a minor cleanup: the protected ExclusionShape inlines, like minYForLogicalLine(),
        now use isFlippedBlocksWritingMode() instead of testing for RightToLeftWritingMode directly.
        This changeimproves consistency with the rest of WebKit and will work correctly
        if "horizontal-bt" writing-mode support is ever added.

        No new tests were added since the existing tests cover these methods.

        * rendering/ExclusionShape.h:
        (WebCore::ExclusionShape::minYForLogicalLine):
        (WebCore::ExclusionShape::maxYForLogicalLine):
        (WebCore::ExclusionShape::internalToLogicalBoundingBox):

2012-12-05  Bear Travis  <betravis@adobe.com>

        Absolutely positioned non-replaced elements should resolve vertical margins against
        their containing block's logical width
        https://bugs.webkit.org/show_bug.cgi?id=103576

        Reviewed by Emil A Eklund.

        According to the CSS box model specification, all percentage margin & padding values,
        including top & bottom, should be resolved based on the containing block's width.
        http://www.w3.org/TR/CSS2/box.html#margin-properties
        The writing modes specification has refined this definition to use the containing
        block's logical width to resolve percentage margin & padding values.
        http://dev.w3.org/csswg/css3-writing-modes/#dimension-mapping

        Previously, positioned elements measured their container in the element's block
        direction (containerLogicalHeight) to resolve margin-before/after, and in the inline
        direction (containerLogicalWidth) to resolve margin-start/end. This patch measures the
        container's logical width in its own inline direction (containerRelativeLogicalWidth)
        to resolve all margin percentage values.

        Test: fast/writing-mode/percentage-margins-absolute.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthUsing): Calculate the logical width
        of the container, and use it to calculate margins.
        (WebCore::RenderBox::computePositionedLogicalHeightUsing): Ditto.

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace String::New("symbol") with String::NewSymbol("symbol") (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=104082

        Reviewed by Adam Barth.

        V8 can look up symbols faster than strings.

        No tests. No change in behavior.

        * bindings/v8/custom/V8ArrayBufferViewCustom.cpp:
        (WebCore::getHiddenCopyMethod):
        (WebCore::installHiddenCopyMethod):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::DialogHandler::dialogCreated):
        (WebCore::DialogHandler::returnValue):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::createPositionOptions):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::wrapInShadowObject):
        (WebCore::V8HTMLDocument::openCallback):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):

2012-12-04  Elliott Sprehn  <esprehn@chromium.org>

        Clicking a scrollbar unfocuses the current activeElement
        https://bugs.webkit.org/show_bug.cgi?id=96335

        Reviewed by Ojan Vafai.

        Previously we only tested for clicks inside frame scrollbars before
        moving the focus, this patch expands the check to overflow scrollbars.
        Now clicking inside a scrollbar only moves the focus when the scrollbar
        has an ancestor that is mouse focusable.

        This matches Gecko behavior, and was agreed to be the most sensible for now:
        http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-October/037759.html

        Test: fast/overflow/scrollbar-click-retains-focus.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
          Never start selections inside scrollbars because it would cause asserts. 
          This wasn't a problem before because we always moved the focus when clicking a scrollbar.        
        (WebCore::EventHandler::dispatchMouseEvent): 
          Check that the click is not inside a scrollbar before moving the focus.
        (WebCore::EventHandler::isInsideScrollbar): Tests if a point is in a scrollbar.
        (WebCore):
        (WebCore::EventHandler::sendContextMenuEvent):
          Never start selections inside scrollbars because it would cause asserts.
        * page/EventHandler.h:
        (EventHandler):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestOverflowControls):

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace String::New("symbol") with String::NewSymbol("symbol")
        https://bugs.webkit.org/show_bug.cgi?id=104084

        Reviewed by Adam Barth.

        V8 can look up symbols faster than strings. This is a final patch for the replacement.

        No tests. No change in behavior.

        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::setAllowSleep):
        (WebCore::DateExtension::GetNativeFunction):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npIdentifierToV8Identifier):
        (_NPN_Invoke):
        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setContextDebugId):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::callDebuggerMethod):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        (WebCore::ScriptGlobalObject::get):
        (WebCore::ScriptGlobalObject::remove):
        * bindings/v8/V8Binding.h:
        (WebCore::toV8Sequence):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::setInjectedScriptContextDebugId):
        (WebCore::V8DOMWindowShell::updateDocumentProperty):
        (WebCore::V8DOMWindowShell::clearDocumentProperty):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectPropertyEnumerator):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::constructorOfToString):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initializeContextIfNeeded):
        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):

2012-12-04  Dan Bernstein  <mitz@apple.com>

        Support text-orientation: sideways-right (and sideways when it maps to sideways-right)
        https://bugs.webkit.org/show_bug.cgi?id=104035

        Reviewed by Anders Carlsson.

        Test: fast/text/orientation-sideways.html

        * GNUmakefile.list.am: Updated for rename of TextOrientation.h.

        * WebCore.gypi: Ditto.

        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Changed to retrieve
        text-orientation from RenderStyle rather than from the font description.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Added sideways and sideways-right as acceptable
        text-orientation values.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added mappings for sideways and
        sideways-right.
        (WebCore::CSSPrimitiveValue::operator TextOrientation): Ditto.

        * css/CSSValueKeywords.in: Added sideways and sideways-right.

        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder): Removed text-orientation property handler, as it is
        now handled in CSSStyleResolver.

        * css/StyleResolver.cpp:
        (WebCore::getFontAndGlyphOrientation): Added this helper function that determines the font
        orientation and non-CJK glyph orientation based on writing-mode and text-orientation.
        (WebCore::StyleResolver::styleForDocument): Added code to set the font orientation and
        non-CJK glyph orientation in the document style.
        (WebCore::checkForOrientationChange): Added. Sets the font orientation and non-CJK glyph
        orientation in the child style if the difference between the parent and child styles requires
        doing so.
        (WebCore::StyleResolver::updateFont): Added call to checkForOrientationChange().
        (WebCore::StyleResolver::applyProperty): Changed the writing-mode case to call the new
        setWritingMode helper, which dirties the font as needed, rather than changing the font
        here. Moved handling of text-orientation here, by calling setTextOrientation, which also
        dirties the font as needed.

        * css/StyleResolver.h:
        (WebCore::StyleResolver::setWritingMode): Added. Dirties the font if the writing mode changes.
        (WebCore::StyleResolver::setTextOrientation): Ditto for text orientation.

        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription): Updated initializer for rename.
        (WebCore::FontDescription::nonCJKGlyphOrientation): Renamed textOrientation to this.
        (WebCore::FontDescription::setNonCJKGlyphOrientation): Renamed setTextOrientation to this.
        (FontDescription): Renamed member variable m_textOrientation to m_nonCJKGlyphOrientation.
        (WebCore::FontDescription::operator==): Updated for rename.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::glyphDataAndPageForNonCJKCharacterWithGlyphOrientation): Renamed
        glyphDataAndPageForCharacterWithTextOrientation to this and changed the parameter type from
        TextOrientation to NonCJKGlyphOrientation.
        (WebCore::Font::glyphDataAndPageForCharacter): Updated for above rename.

        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::fontDataForCombiningCharacterSequence): Updated for rename of
        FontDescription::textOrientation().

        * platform/text/NonCJKGlyphOrientation.h: Renamed TextOrientation.h to this, and renamed
        the enum and its values to better reflect that they describe how glyphs for non-CJK
        characters are to be rendered in vertical text.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::requiresIdeographicBaseline): Updated for rename of
        FontDescription::textOrientation().

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): Made text-orientation change a layout change.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setTextOrientation): Added.

        * rendering/style/RenderStyleConstants.h: Added a new TextOrientation enum here.

        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Added initialization and copying
        of m_textOrientation member variable.
        (WebCore::StyleRareInheritedData::operator==): Added comparing of m_textOrientation.

        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData): Added m_textOrientation member variable.

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Use ScopedPersistent for IntegerCache::smallIntegers
        https://bugs.webkit.org/show_bug.cgi?id=104066

        Reviewed by Adam Barth.

        We can use ScopedPersistent for IntegerCache::smallIntegers
        instead of manual Persistent::New().

        I confirmed no performance regression in Bindings/scroll-top.html

        No tests. No change in behavior.

        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::V8PerIsolateData):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::IntegerCache::IntegerCache):
        * bindings/v8/V8ValueCache.h:
        (IntegerCache):
        (WebCore::IntegerCache::v8Integer):
        (WebCore::IntegerCache::v8UnsignedInteger):

2012-12-04  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Resources: domain cookies are not shown for sub-sub domain pages.
        https://bugs.webkit.org/show_bug.cgi?id=104016

        Reviewed by Pavel Feldman.

        Fixed regexp to allow zero or more subdomain prefix (was zero or one).

        * inspector/front-end/CookieParser.js:
        (WebInspector.Cookies.cookieDomainMatchesResourceDomain): Fixed regexp.

2012-12-04  Alpha Lam  <hclam@chromium.org>

        Not reviewed. Build fix.

        Fix Chromium Windows build.

        * platform/graphics/chromium/ImageDecodingStore.h:
        (CacheEntry):

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove toV8Object()
        https://bugs.webkit.org/show_bug.cgi?id=103987

        Reviewed by Adam Barth.

        toV8Object() is used only for MessagePort and ArrayBuffer
        only by SerializedScriptValue. It is wasteful to generate
        toV8Object() for all interfaces.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        * bindings/scripts/test/V8/V8TestException.h:
        * bindings/scripts/test/V8/V8TestInterface.h:
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        * bindings/scripts/test/V8/V8TestNode.h:
        * bindings/scripts/test/V8/V8TestObj.h:
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        * bindings/v8/SerializedScriptValue.cpp:

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace v8::Null(isolate) with v8Null(isolate)
        https://bugs.webkit.org/show_bug.cgi?id=104070

        Reviewed by Adam Barth.

        v8Null(isolate) is a faster version of v8::Null(isolate).

        No tests. No change in behavior.

        * bindings/v8/V8Binding.h:
        (WebCore::v8StringOrNull):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::typesAccessorGetter):
        * bindings/v8/custom/V8CoordinatesCustom.cpp:
        (WebCore::V8Coordinates::altitudeAccessorGetter):
        (WebCore::V8Coordinates::altitudeAccuracyAccessorGetter):
        (WebCore::V8Coordinates::headingAccessorGetter):
        (WebCore::V8Coordinates::speedAccessorGetter):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::accelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::accelerationIncludingGravityAccessorGetter):
        (WebCore::V8DeviceMotionEvent::rotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::intervalAccessorGetter):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::alphaAccessorGetter):
        (WebCore::V8DeviceOrientationEvent::betaAccessorGetter):
        (WebCore::V8DeviceOrientationEvent::gammaAccessorGetter):
        (WebCore::V8DeviceOrientationEvent::absoluteAccessorGetter):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::V8Document::locationAccessorGetter):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::stateAccessorGetter):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::dataAccessorGetter):
        * bindings/v8/custom/V8MicroDataItemValueCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::insertBeforeCallback):
        (WebCore::V8Node::replaceChildCallback):
        (WebCore::V8Node::removeChildCallback):
        (WebCore::V8Node::appendChildCallback):
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        (WebCore::V8PopStateEvent::stateAccessorGetter):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::V8SQLResultSetRowList::itemCallback):
        * bindings/v8/custom/V8TrackEventCustom.cpp:
        (WebCore::V8TrackEvent::trackAccessorGetter):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getSupportedExtensionsCallback):

2012-12-04  Min Qin  <qinmin@chromium.org>

        Make LazyDecodingPixelRef inherit from skia::LazyPixelRef so that cc thread can access it
        https://bugs.webkit.org/show_bug.cgi?id=103555

        Reviewed by Stephen White.

        Expose LazyDecodingPixelRef to the cc thread by inheriting from skia::LazyPixelRef.
        No test added for now as impl side paiting is still WIP.

        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::PrepareToDecode):
        (WebCore):
        (WebCore::LazyDecodingPixelRef::Decode):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (LazyDecodingPixelRef):

2012-12-04  Takashi Sakamoto  <tasak@google.com>

        Fix compile error when SVG is disabled.

        Unreviewed gardening.

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

2012-12-04  Anthony Scian  <ascian@rim.com>

        Static code analysis warning fixes
        https://bugs.webkit.org/show_bug.cgi?id=103837

        Reviewed by Rob Buis.

        172,174: disable copy ctor, op= in AutofillBackingStore
        504,506: disable copy ctor, op= in CookieManager
        1488,1491: disable copy ctor, op= in RSSParserBase
        1489,1490: disable copy ctor, op= in RSSItem
        514,516: disable copy ctor, op= in CredentialBackingStore
        1363: m_state not initialized in ctor

        * platform/blackberry/CookieManager.h:
        * platform/blackberry/PlatformTouchPointBlackBerry.cpp:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):
        * platform/network/blackberry/AutofillBackingStore.h:
        (AutofillBackingStore):
        * platform/network/blackberry/CredentialBackingStore.h:
        (CredentialBackingStore):
        * platform/network/blackberry/rss/RSSParserBase.h:
        (RSSParserBase):

2012-12-04  Noel Gordon  <noel.gordon@gmail.com>

        [v8] Improve worker.postMessage() string performance: avoid utf8 conversion
        https://bugs.webkit.org/show_bug.cgi?id=102230

        Reviewed by Eric Seidel.

        Avoid utf8 conversion when serializing strings with SerializedScriptValue. Provide 
        Ascii and UChar writers for v8 string serialization and provide a UChar reader for
        deserialization. Define/use serialization StringUCharTag to indicate UChar strings
        in the wire format. Increment the SerializedScriptValue wire format version.

        In the wire format, StringUCharTag is followed by the string length in bytes, then
        the length/2 UChars of the string.

        Note the string length is VarInt encoded. During serialization, compute the number
        of bytes used to encode the length and prepend a PaddingTag if needed so the UChar
        data appears on an even-byte boundary. This prevents unaligned reads of UChar data
        during deserialization (the deserialization buffer is even-byte aligned).

        Testing transfers of large strings to and from workers indicates a 10X improvement
        in transfer rate for strings, and strings within js objects, with this change. For
        example, 500 MByte/s on my test machine (50 MByte/s without this change) for flat,
        32 MByte string postMessage() transfers.

        Covered by platform/chromium/fast/storage/serialized-script-value.html

        * bindings/v8/SerializedScriptValue.cpp:

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] V8Binding::v8ExternalString() is redundant
        https://bugs.webkit.org/show_bug.cgi?id=103979

        Reviewed by Adam Barth.

        v8String(), v8StringOrNull() and v8StringOrUndefined() are enough.
        We can remove V8Binding::v8ExternalString().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::compileAndRunScript):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::compileScript):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::v8String):
        (WebCore::v8StringOrNull):
        (WebCore::v8StringOrUndefined):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove v8NonStringValueToWebCoreString() and v8NonStringValueToAtomicWebCoreString()
        https://bugs.webkit.org/show_bug.cgi?id=103981

        Reviewed by Adam Barth.

        v8NonStringValueToWebCoreString() and v8NonStringValueToAtomicWebCoreString()
        are equivalent to what StringResource does.

        No tests. No change in behavior.

        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8Binding.h:
        (WebCore::toWebCoreString):
        (WebCore):
        (WebCore::toWebCoreStringWithNullCheck):
        (WebCore::toWebCoreStringWithUndefinedOrNullCheck):
        (WebCore::toWebCoreAtomicString):
        (WebCore::toWebCoreAtomicStringWithNullCheck):
        * bindings/v8/V8StringResource.h:
        (WebCore::V8StringResource::V8StringResource):
        (V8StringResource):

2012-12-04  Abhishek Arya  <inferno@chromium.org>

        Crash in WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode
        https://bugs.webkit.org/show_bug.cgi?id=103515

        Reviewed by Ryosuke Niwa.

        |current| is weak node pointer that iterates in the hierarchy chain
        between |highestAncestor| and |targetNode|. Script executed as part
        of iframe onload event can blow away the nodes and we no longer have
        |targetNode| in our descendants chain. So, we RefPtr |current| and bail
        out when |targetNode| stops being a part of descendant chain.

        Test blocked on https://bugs.webkit.org/show_bug.cgi?id=104044.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):

2012-12-04  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        Avoid repeated calls to decorationColor on RenderObject::getTextDecorationColors
        https://bugs.webkit.org/show_bug.cgi?id=94131

        Reviewed by Brent Fulgham.

        Replaces repeated calls to decorationColor by adding a variable that reads the
        return value from that function just once on each loop and gets used upon need.

        This change won't affect text decoration behavior, so current tests suffice.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTextDecorationColors):

2012-12-04  Alpha Lam  <hclam@chromium.org>

        [chromium] Implement cache eviction logic in ImageDecodingStore
        https://bugs.webkit.org/show_bug.cgi?id=103480

        Reviewed by James Robinson.

        This patch implements these features in the new image cache:
        - Least-recently-used eviction logic
        - Setting cache limit (default is 32MB)
        - Remove cache entries when ImageFrameGenerator is removed

        New tests in ImageDecodingTestTest. Also covered by platform/chromium/virtual/deferred.

        * platform/graphics/chromium/ImageDecodingStore.cpp:
        (WebCore::ImageDecodingStore::ImageDecodingStore):
        (WebCore::ImageDecodingStore::~ImageDecodingStore):
        Code to assert that everything is cleaned up.
        (WebCore::ImageDecodingStore::lockCompleteCache):
        (WebCore::ImageDecodingStore::unlockCache):
        (WebCore::ImageDecodingStore::insertAndLockCache):
        (WebCore::ImageDecodingStore::removeCacheIndexedByGenerator):
        New method to remove all cache entries index by ImageFrameGenerator.
        (WebCore):
        (WebCore::ImageDecodingStore::setCacheLimitInBytes):
        (WebCore::ImageDecodingStore::memoryUsageInBytes):
        (WebCore::ImageDecodingStore::cacheEntries):
        (WebCore::ImageDecodingStore::prune):
        New code to implement LRU eviction logic.
        (WebCore::ImageDecodingStore::insertCacheInternal):
        New method to help new cache insertion. This is separately because it touches 3 containers.
        (WebCore::ImageDecodingStore::removeFromCacheInternal):
        New method to help remove a cache entry from containers.
        (WebCore::ImageDecodingStore::removeFromCacheListInternal):
        New helper method to help remove cache entry from doubly linked list.
        * platform/graphics/chromium/ImageDecodingStore.h:
        (ImageDecodingStore):
        (CacheEntry):
        (WebCore::ImageDecodingStore::CacheEntry::createAndUse):
        (WebCore::ImageDecodingStore::CacheEntry::CacheEntry):
        (WebCore::ImageDecodingStore::CacheEntry::~CacheEntry):
        (WebCore::ImageDecodingStore::CacheEntry::cacheKey):
        (WebCore::ImageDecodingStore::CacheEntry::cachedImage):
        (WebCore::ImageDecodingStore::CacheEntry::useCount):
        (WebCore::ImageDecodingStore::CacheEntry::incrementUseCount):
        (WebCore::ImageDecodingStore::CacheEntry::decrementUseCount):
        (WebCore::ImageDecodingStore::CacheEntry::memoryUsageInBytes):
        (WebCore::ImageDecodingStore::incrementMemoryUsage):
        (WebCore::ImageDecodingStore::decrementMemoryUsage):
        New helper methods.
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::~ImageFrameGenerator):

2012-12-04  Andreas Kling  <akling@apple.com>

        Style sharing: Allow sharing between elements with classes not referenced by any selectors.
        <http://webkit.org/b/103925>

        Reviewed by Antti Koivisto.

        When looking for elements that can share style, instead of blindly rejecting candidates with
        a different "class" attribute, check if it's actually referenced by any of the tracked style rules.
        It's surprisingly common for web pages to have elements with classes to which no rules apply,
        mediawiki content is especially good at this.

        ~2100 new sharing "hits" on <https://en.wikipedia.org/wiki/Steve_Jobs>.

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

            Don't bail early if the two elements have different return values for hasClass().

        (WebCore::StyleResolver::classNamesAffectedByRules):

            Helper function that returns whether a SpaceSplitString contains a class name referenced
            by any style rules.

        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):

            Make this a member function since we need access to m_features.classesInRules.

        * css/StyleResolver.h:
        (StyleResolver):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::locateSharedStyle):

            Cache whether the element we're resolving style for has a "class" attribute referenced by style rules.

2012-12-04  Silvia Pfeiffer  <silviapf@chromium.org>

        Refactor Media Control Elements to remove code duplication.
        https://bugs.webkit.org/show_bug.cgi?id=101877

        Reviewed by Eric Carlson.

        Instead of having two different types of inheritance trees for
        MediaControlElement and MediaControlInputElement, this
        creates a stand-alone virtual class MediaControlElement that
        provides the common functions: show(), hide(), isShowing(),
        setMediaController(), displayType(), isMediaControlElement(),
        shadowPseudoId(), mediaController(), setDisplayType().

        The individual elements inherit from MediaControlElement and
        either HTMLInputElement or HTMLDivElement. They extend/override
        the base functions as appropriate.

        As part of this, the RenderXXX classes mixed in between the media
        controls in MediaControlElements.cpp are also moved to
        rendering/RenderMediaControls.h/cpp to follow common code separation.

        No new tests since this is just a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Build files extended with new files.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::textTracksIndexNotFound):
        Replaced const with function, since it is used in multiple files.

        * html/shadow/MediaControlElementTypes.cpp: new file
        * html/shadow/MediaControlElementTypes.h: new file
        Added new MediaControlElement class. Moved MediaControlDivElement and MediaControlInputElement
        classes into these files from MediaControlElements.cpp/h. Moved MediaControlElementTypes enum
        into these. Moved other media control element classes that are the basis for inheriting media
        control elements into these (MediaControlTimeDisplayElement, MediaControlMuteButtonElement,
        MediaControlSeekButtonElement, MediaControlVolumeSliderElement).

        * html/shadow/MediaControlElements.cpp:
        * html/shadow/MediaControlElements.h:
        Removed common functions between media elements that are now in the common
        base class MediaControlElement.
        Also moved common base classes to MediaControlElementTypes.h/cpp

        * html/shadow/MediaControls.cpp:
        * html/shadow/MediaControls.h:
        Renamed MediaControlVolumeSliderElement to MediaControlPanelVolumeSliderElement
        to be consistent in inheritance tree. Updated copyright date.

        * html/shadow/MediaControlsApple.cpp:
        * html/shadow/MediaControlsApple.h:
        Renamed MediaControlVolumeSliderElement to MediaControlPanelVolumeSliderElement
        to be consistent in inheritance tree. Updated copyright dates.n

        * html/shadow/MediaControlsChromium.cpp:
        * html/shadow/MediaControlsChromium.h:
        Renamed MediaControlVolumeSliderElement to MediaControlPanelVolumeSliderElement
        to be consistent in inheritance tree.
        Moved enclosure element definitions to common MediaControlElements.cpp/h
        file through which different media elements are made available to different ports.

        * html/shadow/MediaControlsChromiumAndroid.cpp:
        * html/shadow/MediaControlsChromiumAndroid.h:
        Moved enclosure for overlay button to MediaControlElements.cpp/h files
        through which different media elements are made available to different ports.

        * rendering/RenderMediaControlElements.cpp: new file
        * rendering/RenderMediaControlElements.h: new file
        Moved rendering classes for media control elements into these files from
        MediaControlElements.cpp/h.

        * rendering/RenderThemeMac.mm:
        Added new RenderMediaControlElements.h file.

        * rendering/RenderingAllInOne.cpp:
        Added new RenderMediaControlEleemnt.cpp file.

2012-12-04  Kenneth Russell  <kbr@google.com>

        Associate URLs with GraphicsContext3D instances created for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=103793

        Reviewed by Adam Barth.

        Pass down the URL of the topmost frame's document creating the
        WebGL context to the platform layer through
        GraphicsContext3D::Attributes.

        Not feasible to write a layout test for this change; has no
        user-visible effect. Tested manually with failure injection in
        Chromium port.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::create):
            Pass top document's URL in context creation attributes.
        * platform/chromium/support/GraphicsContext3DChromium.cpp:
        (WebCore::GraphicsContext3D::create):
            Pass URL through WebKit API.
        * platform/graphics/GraphicsContext3D.h:
        (Attributes):
            Add top document's URL to context creation attributes.

2012-12-04  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: simplify reportMemoryUsage signature
        https://bugs.webkit.org/show_bug.cgi?id=104028

        Reviewed by Vsevolod Vlasov.

        Removed const& modifier from instrumented pointer type. Was const T* const&,
        now it is const T*

        * platform/graphics/NativeImagePtr.h:
        (WebCore):
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::reportMemoryUsage):

2012-12-04  Adam Barth  <abarth@webkit.org>

        [V8] Rename V8DOMWrapper member functions to be more descriptive
        https://bugs.webkit.org/show_bug.cgi?id=104069

        Reviewed by Eric Seidel.

        In addition to the renames, this patch also inline lookupDOMWrapper
        into its callers.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        (GenerateDomainSafeFunctionSetter):
        (GenerateNormalAttrGetter):
        (GenerateSingleConstructorCallback):
        (GenerateEventConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateToV8Converters):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::retrieveFrameWithGlobalObjectCheck):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toDOMWindow):
        (WebCore::toScriptExecutionContext):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::clearForNavigation):
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::create):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::setNativeInfo):
        (WebCore::V8DOMWrapper::clearNativeInfo):
        (WebCore::V8DOMWrapper::associateObjectWithWrapper):
        * bindings/v8/V8Initializer.cpp:
        (WebCore::findFrame):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::createV8ObjectForNPObject):
        (WebCore::forgetV8ObjectForNPObject):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initializeContextIfNeeded):
        (WebCore::WorkerScriptController::controllerForContext):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCallbackCustom):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::wrapArrayBufferView):
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallbackCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCallbackCustom):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::eventAccessorGetter):
        (WebCore::V8DOMWindow::eventAccessorSetter):
        (WebCore::V8DOMWindow::toStringCallback):
        (WebCore::V8DOMWindow::namedSecurityCheck):
        (WebCore::V8DOMWindow::indexedSecurityCheck):
        (WebCore::toV8):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallbackCustom):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::wrapInShadowObject):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * bindings/v8/custom/V8IntentCustom.cpp:
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadAccessorGetter):
        (WebCore::V8Location::replaceAccessorGetter):
        (WebCore::V8Location::assignAccessorGetter):
        * bindings/v8/custom/V8MessageChannelCustom.cpp:
        (WebCore::V8MessageChannel::constructorCallbackCustom):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallback):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallbackCustom):
        * bindings/v8/custom/V8ScriptProfileCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ScriptProfileNodeCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8WebKitPointCustom.cpp:
        (WebCore::V8WebKitPoint::constructorCallbackCustom):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallbackCustom):

2012-12-04  Adam Barth  <abarth@webkit.org>

        [V8] Cleanup style in V8DOMWrapper
        https://bugs.webkit.org/show_bug.cgi?id=104062

        Reviewed by Kentaro Hara.

        This patch moves a number of functions from inside the class
        declaration to below the class declaration. I've also inlined
        domWrapperType into each of its callers and renamed a few functions.
        A subsequent patch will improve the names of the remaining functions.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateToV8Converters):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitExternalArrays):
        * bindings/v8/V8Collection.h:
        (WebCore::getNamedPropertyOfCollection):
        (WebCore::getIndexedPropertyOfCollection):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateDOMWrapper):
        (WebCore::V8DOMWrapper::isWrapperOfType):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::setWrapperClass):
        (WebCore::V8DOMWrapper::setDOMWrapper):
        (WebCore):
        (WebCore::V8DOMWrapper::clearDOMWrapper):
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        (WebCore::V8DOMWrapper::createDOMWrapper):
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::showContextMenuCallback):

2012-12-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136597.
        http://trac.webkit.org/changeset/136597
        https://bugs.webkit.org/show_bug.cgi?id=104065

        broke Windows compilation (Requested by yurys on #webkit).

        * platform/graphics/NativeImagePtr.h:
        (WebCore):
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::reportMemoryUsage):

2012-12-04  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: simplify reportMemoryUsage signature
        https://bugs.webkit.org/show_bug.cgi?id=104028

        Reviewed by Vsevolod Vlasov.

        Removed const& modifier from instrumented pointer type. Was const T* const&,
        now it is const T*

        * platform/graphics/NativeImagePtr.h:
        (WebCore):
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::reportMemoryUsage):

2012-12-04  Adam Barth  <abarth@webkit.org>

        [V8] V8DOMWrapper shouldn't know about NodeFilter
        https://bugs.webkit.org/show_bug.cgi?id=104057

        Reviewed by Kentaro Hara.

        This patch just moves this code into V8Bindings.h, which is where we
        have our other type conversion functions. It's too bad that we still
        need to special case NodeFilter, but fixing that is going to be a bit
        more work.

        * bindings/scripts/CodeGeneratorV8.pm:
        (JSValueToNative):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toNodeFilter):
        (WebCore):
        * bindings/v8/V8Binding.h:
        (WebCore):
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore):
        (V8DOMWrapper):

2012-12-04  Simon Fraser  <simon.fraser@apple.com>

        Show a mini visualizer for the tile cache tiles
        https://bugs.webkit.org/show_bug.cgi?id=104053

        Reviewed by Beth Dakin.

        Replace the current red/green/yellow scrolling indicator with a
        mini map of the tile cache that shows the current tiles, and the
        visible rect.
        
        Visibility is controlled via a new preference.

        * WebCore.exp.in: Add Settings::setShowTiledScrollingIndicator(bool),
        and remove ScrollingTree::setDebugRootLayer(CALayer*)
        * WebCore.xcodeproj/project.pbxproj: Remove ScrollingTreeMac.mm which
        is no longer needed; it just contained debug layer stuff.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Support the new setting.
        (WebCore::Settings::setShowTiledScrollingIndicator):
        * page/Settings.h:
        (WebCore::Settings::showTiledScrollingIndicator):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState): We no longer update the debug
        indicator on tree commit.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::hasWheelEventHandlers): Needed for the tiled
        scrolling indicator.
        (ScrollingTree):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState): Tell the TiledBacking
        about the current scrolling mode.
        * page/scrolling/mac/ScrollingTreeMac.mm: Removed.
        * platform/graphics/TiledBacking.h: Add functions to set the indicator scrolling
        mode, and to get the tiled scrolling indicator layer. This has to be parented by
        the DrawingArea, to ensure that it's in front of all other layers.
        * platform/graphics/ca/mac/TileCache.h:
        (WebCore::TileCache::scale): Exposed for the indicator drawing code to use.
        * platform/graphics/ca/mac/TileCache.mm:
        (-[WebTileCacheMapLayer init]): The indicator has a sublayer which renders the
        visible rect frame, owned by it.
        (-[WebTileCacheMapLayer drawInContext:]):
        (WebCore::TileCache::TileCache): The indicator mode has to be stored here,
        since it can be pushed down before we have an indicator layer.
        (WebCore::TileCache::~TileCache): Clear the TileCache on the indicator layer, which
        may outlive us.
        (WebCore::TileCache::revalidateTiles): Call updateTileCoverageMap().
        (WebCore::TileCache::updateTileCoverageMap): Resize the indicator layer to fit
        within the window, and update the indicator color.
        (WebCore::TileCache::tiledScrollingIndicatorLayer): Create and initialize the layer.
        (WebCore::TileCache::setScrollingModeIndication):
        (WebCore::TileCache::drawTileMapContents): Draw small white rects for the tiles over
        an translucent gray background.

2012-12-04  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Propagate more leveldb errors to IDBIndex and IDBObjectStore
        https://bugs.webkit.org/show_bug.cgi?id=103782

        Reviewed by Tony Chang.

        index.get[Key]() and objectStore.get() will receive more error events.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::getRecord):
        (WebCore::versionExists):
        (WebCore::IDBBackingStore::findKeyInIndex):
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStore::keyExistsInIndex):
        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::getKeyInternal):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore):

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove IntegerCache::m_initialized
        https://bugs.webkit.org/show_bug.cgi?id=103978

        Reviewed by Adam Barth.

        Thanks to r136479, we can now initialize V8 integers in IntegerCache's
        constructor. We can remove IntegerCache::m_initialized, which slightly
        improves performance.

        [Bindings/scroll-top.html in Chromium/Linux]
        Before this patch: 285 runs/sec, 281 runs/sec, 281 runs/sec, 280 runs/sec
        After this patch : 290 runs/sec, 291 runs/sec, 297 runs/sec, 291 runs/sec

        No tests. No change in behavior.

        * bindings/v8/V8ValueCache.cpp:
        (WebCore::IntegerCache::IntegerCache):
        (WebCore::IntegerCache::~IntegerCache):
        * bindings/v8/V8ValueCache.h:
        (IntegerCache):
        (WebCore::IntegerCache::v8Integer):
        (WebCore::IntegerCache::v8UnsignedInteger):
        (WebCore):

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace String::New("symbol") with String::NewSymbol("symbol")
        https://bugs.webkit.org/show_bug.cgi?id=103989

        Reviewed by Adam Barth.

        In V8, a symbol lookup is faster than a string lookup. We should use
        String::NewSymbol("symbol") for symbols.

        No tests. No change in behavior.

        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::typeCallback):
        (WebCore::V8InjectedScriptHost::functionDetailsCallback):
        (WebCore::getJSListenerFunctions):
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::populateContextMenuItems):

2012-12-04  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Implement CSS parsing and handling for <track-minmax>
        https://bugs.webkit.org/show_bug.cgi?id=103799

        Reviewed by Tony Chang.

        This change adds support for:
        <track-minmax> => minmax( <track-breadth> , <track-breadth> ) | auto | <track-breadth>
        (note that we already supported auto | <track-breadth>).

        The change is mostly mechanical, the only newness is that GridTrackSize was updated to
        hold 2 Lengths internally and we map the single Length case to 2 by duplicating the value
        as this matches the rendering algorithm in the spec.

        Tests: fast/css-grid-layout/grid-columns-rows-get-set-multiple.html
               fast/css-grid-layout/resources/grid-columns-rows-get-set-multiple.js

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackBreadth):
        Changed the function to do the conversion of one track breadth (one Length).
        This was forgotten in the preparatory change in bug 103703.

        (WebCore::valueForGridTrackMinMax):
        Convert the value back using valueForGridTrackBreadth.

        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::CSSFunctionValue):
        * css/CSSFunctionValue.h:
        (WebCore::CSSFunctionValue::create):
        (CSSFunctionValue):
        Added a new constructor. This enables us to return minmax(..., ...) when queried
        from JavaScript. I couldn't find a better way to serialize inside CSSComputedStyleDeclaration
        so that it properly match the function output.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackMinMax):
        Added parsing for the new syntax. We convert the 2 values into a Pair if we manage to
        parse both values correctly.

        * css/StyleResolver.cpp:
        (WebCore::createGridTrackMinMax):
        Updated to handle a Pair - for minmax - and set the 2 values on GridTrackSize.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        Updated to check the style. For now, we don't handle minmax values.

        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::GridTrackSize):
        (WebCore::GridTrackSize::length):
        (WebCore::GridTrackSize::setLength):
        (WebCore::GridTrackSize::minTrackBreadth):
        (WebCore::GridTrackSize::maxTrackBreadth):
        (WebCore::GridTrackSize::setMinMax):
        (WebCore::GridTrackSize::operator==):
        Updated the class to handle minmax values. This means that we now always store
        2 values (the <length> case being a subset of minmax, however we kept the distinction
        to be able to reconstruct a <length> for getComputedStyle).

2012-12-04  Elliott Sprehn  <esprehn@chromium.org>

        parser* methods in ContainerNode should not support DocumentFragment
        https://bugs.webkit.org/show_bug.cgi?id=103965

        Reviewed by Darin Adler.

        Only parserInsertBefore ever supported DocumentFragment and this feature
        is never used. It appears this code ended up in parserInsertBefore when
        it was created as a copy of insertBefore that didn't fire events. This
        patch removes that code and adds assertions that we never pass
        DocumentFragments since doing so would cause a corrupted tree as we never
        check checkAcceptChild or do other validation in the parser methods.

        No new tests, just refactoring.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::parserAppendChild):

2012-12-04  Elliott Sprehn  <esprehn@gmail.com>

        Simplify ShadowRoot::cloneNode(bool,ExceptionCode)
        https://bugs.webkit.org/show_bug.cgi?id=103928

        Reviewed by Dimitri Glazkov.

        ShadowRoot can never be cloned and ShadowRoot::cloneNode(bool) always
        returns null so there's no reason to have code in the cloneNode method
        for script that acts as if it may not return null.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::cloneNode):

2012-12-04  Elliott Sprehn  <esprehn@chromium.org>

        setIsInTopLayer is not really a setter
        https://bugs.webkit.org/show_bug.cgi?id=103912

        Reviewed by Eric Seidel.

        Element::setInTopLayer isn't just a setter, it also adds the element
        to the top layer vector in the document which changes it's display and
        causes a reattach.

        To make this more obvious make HTMLDialogElement use the methods on
        Document and make those update the state boolean.

        There also doesn't seem to be any reason for setInTopLayer
        or isInTopLayer to be virtual, it appears it was a typo.

        No new tests, just refactoring.

        * dom/Document.cpp:
        (WebCore::Document::addToTopLayer):
        (WebCore::Document::removeFromTopLayer):
        * dom/Element.cpp:
        (WebCore::Element::setIsInTopLayer):
        * dom/Element.h:
        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::close):
        (WebCore::HTMLDialogElement::showModal):

2012-12-04  Elliott Sprehn  <esprehn@chromium.org>

        Automatically handle suspend and resume of post attach callbacks
        https://bugs.webkit.org/show_bug.cgi?id=103910

        Reviewed by Eric Seidel.

        Use RAII to handle suspend and resume of post attach callbacks since
        they should always be called in pairs.

        No new tests, just refactoring.

        * dom/ContainerNode.h:
        (PostAttachCallbackDisabler):
        (WebCore::PostAttachCallbackDisabler::PostAttachCallbackDisabler):
        (WebCore::PostAttachCallbackDisabler::~PostAttachCallbackDisabler):
        (ContainerNode):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Element.cpp:
        (WebCore::Element::attach):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::attach):
        (WebCore):

2012-12-04  Elliott Sprehn  <esprehn@chromium.org>

        createRareData should return a PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=103851

        Reviewed by Eric Seidel.

        createRareData should return a PassOwnPtr, not an OwnPtr since it's
        transfering ownership.

        * dom/Element.cpp:
        (WebCore::Element::createRareData):
        * dom/Element.h:
        (Element):
        * dom/Node.cpp:
        (WebCore::Node::createRareData):
        * dom/Node.h:

2012-12-04  Filip Pizlo  <fpizlo@apple.com>

        Rename Profiler to LegacyProfiler
        https://bugs.webkit.org/show_bug.cgi?id=104031

        Rubber stamped by Mark Hahnenberg

        Just renaming, no new tests.

        * ForwardingHeaders/profiler/LegacyProfiler.h: Copied from Source/WebCore/ForwardingHeaders/profiler/Profiler.h.
        * ForwardingHeaders/profiler/Profiler.h: Removed.
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):

2012-12-04  James Simonsen  <simonjam@chromium.org>

        [User Timing] Fix clang build by removing need for exit time destructor
        https://bugs.webkit.org/show_bug.cgi?id=104036

        Reviewed by Tony Gentilcore.

        Modeled after r99588.

        No new tests. No change in functionality.

        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::UserTiming):
        (WebCore::UserTiming::mark):
        (WebCore::UserTiming::findExistingMarkStartTime):
        * page/PerformanceUserTiming.h:
        (UserTiming):

2012-12-04  James Simonsen  <simonjam@chromium.org>

        [User Timing] Fix negative durations
        https://bugs.webkit.org/show_bug.cgi?id=104038

        Reviewed by Tony Gentilcore.

        At some point, we went from passing in a duration to passing in the end time. User Timing
        wasn't updated.

        Tests: http/tests/w3c/webperf/submission/Intel/user-timing

        * page/PerformanceMark.h:
        (WebCore::PerformanceMark::PerformanceMark):
        * page/PerformanceUserTiming.cpp:
        (WebCore::UserTiming::measure):

2012-12-04  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::StyleCachedImageSet::cssValue
        https://bugs.webkit.org/show_bug.cgi?id=100621

        Reviewed by Eric Seidel.

        r115639 fixed a memory leak caused by reference cycle between StyleCachedImageSet
        and its owner CSSImageSetValue. The fix caused StyleCachedImageSet to maintain
        a weak pointer to CSSImageSetValue. This patch makes sure that the weak pointer
        is cleared when CSSImageSetValue is going away.

        Test: fast/css/image-set-value-not-removed-crash.html

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::~CSSImageSetValue):
        * rendering/style/StyleCachedImageSet.h:
        (WebCore::StyleCachedImageSet::clearImageSetValue):
        (StyleCachedImageSet):

2012-12-04  Adam Barth  <abarth@webkit.org>

        NodeFilter leaks memory in V8
        https://bugs.webkit.org/show_bug.cgi?id=104027

        Reviewed by Eric Seidel.

        NodeFilter holds a RefPtr to NodeFilterCondition, which holds a
        ScopedPersistent to its callback function. If the callback function can
        see the NodeFilter wrapper, we have a cycle and a leak.

        This patch makes the NodeFilterCondition hold a weak pointer to the
        callback function and ties the lifetime of that callback function to
        the NodeFilter wrapper (so they live and die together).

        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::V8NodeFilterCondition):
        (WebCore::V8NodeFilterCondition::weakCallback):
        (WebCore):
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8NodeFilterCondition.h:
        (WebCore::V8NodeFilterCondition::create):
        (V8NodeFilterCondition):
        (WebCore::V8NodeFilterCondition::callback):
        * dom/NodeFilter.h:
        (WebCore::NodeFilter::condition):

2012-12-04  Abhishek Arya  <inferno@chromium.org>

        Crash in CachedResource::checkNotify due to -webkit-crossfade.
        https://bugs.webkit.org/show_bug.cgi?id=98068

        Reviewed by Nate Chapin.

        Make sure to not re-add the same client again for |m_cachedFromImage|
        and |m_cachedToImage|. This would otherwise cause the CSSCrossfadeValue
        client to not get removed from its cached image resource (when it is
        going away).

        Test: fast/images/crossfade-client-not-removed-crash.html

        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::loadSubimages):

2012-12-04  Julien Chaffraix  <jchaffraix@webkit.org>

        Heap-use-after-free in WebCore::RenderLayer::paintList [MathML]
        https://bugs.webkit.org/show_bug.cgi?id=100764

        Reviewed by Eric Seidel.

        Test: mathml/mfenced-root-layer.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::stackingContext):
        Fixed this function to ensure that it always returns a stacking context, the bug
        was that the document element's layer wasn't guaranteed to be a stacking context.

2012-12-04  Adam Barth  <abarth@webkit.org>

        [V8] GetNativeType in CodeGeneratorV8.pm needs a bath
        https://bugs.webkit.org/show_bug.cgi?id=104022

        Reviewed by Eric Seidel.

        This change shouldn't have any effect on the generated code.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetNativeType):
            - DOMUserData was removed in 2005. There's no need for the code
              generator to still know about it.
        (JSValueToNative):
        (ConvertToV8StringResource):

2012-12-04  Adam Barth  <abarth@webkit.org>

        [V8] EventTarget shouldn't be a special snowflake
        https://bugs.webkit.org/show_bug.cgi?id=104018

        Reviewed by Eric Seidel.

        Previously we special-cased the toV8 operation for event targets.
        There's no need for that. We can use IDL attribute to handle
        EventTarget using the same general-purpose code that we use for other
        interfaces.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        (NativeToJSValue):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/custom/V8EventTargetCustom.cpp: Added.
        (WebCore):
        (WebCore::toV8):
        * dom/EventTarget.idl:

2012-12-04  Florin Malita  <fmalita@chromium.org>

        Stale SVGUseElement reference in CachedResource::checkNotify()
        https://bugs.webkit.org/show_bug.cgi?id=104004

        Reviewed by Eric Seidel.

        SVGUseElement tracks one CachedSVGDocument at a time (for external references), but when
        the href attribute is updated it fails to unregister with the current CachedSVGDocument
        and only updates its CachedSVGDocument with the new instance. This leaves an untracked
        reference with the original CachedSVGDocument.

        The patch adds the missing removeClient() call on href change, and encapsulates the
        CachedSVGDocument manipulation in a helper method which handles the necessary cleanup.

        Test: svg/custom/use-href-update-crash.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::~SVGUseElement):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::setCachedDocument):
        (WebCore):
        * svg/SVGUseElement.h:
        (SVGUseElement):

2012-12-04  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: Can't take a heap snapshot in chromium ("Uncaught ReferenceError")
        https://bugs.webkit.org/show_bug.cgi?id=103997

        Reviewed by Pavel Feldman.

        utilities.js used in both page and worker contexts should not access window
        object as there is no one in case of workers. NonLeakingMutationObserver implementation
        has moved to DOMExtension.js

        * inspector/front-end/DOMExtension.js:
        (NonLeakingMutationObserver.NonLeakingMutationObserver._unloadListener):
        (NonLeakingMutationObserver):
        (NonLeakingMutationObserver.prototype.observe):
        (NonLeakingMutationObserver.prototype.disconnect):
        * inspector/front-end/utilities.js:

2012-12-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136509.
        http://trac.webkit.org/changeset/136509
        https://bugs.webkit.org/show_bug.cgi?id=104015

        broke layout tests (Requested by eae on #webkit).

        * platform/graphics/IntSize.h:
        (WebCore::IntSize::scale):

2012-12-04  Antoine Quint  <graouts@apple.com>

        INVALID_STATE_ERR error upon calling .addCue() for an already-in-use cue
        https://bugs.webkit.org/show_bug.cgi?id=103264

        Reviewed by Eric Carlson.

        Adhere to the latest spec for TextTrack's .addCue() method. This also fixes
        https://bugs.webkit.org/show_bug.cgi?id=103265 and we've removed
        media/track/opera/interfaces/TextTrack/addCue.html from the Skipped list.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue):
        * html/track/TextTrack.h:
        (TextTrack):
        * html/track/TextTrack.idl:

2012-12-04  Mike West  <mkwst@chromium.org>

        Log to console when forms and popups are blocked by 'sandbox'.
        https://bugs.webkit.org/show_bug.cgi?id=103615

        Reviewed by Adam Barth.

        Adds two console messages to cover form submissions blocked by a
        sandboxed frame lacking the 'allow-forms' permission, and window
        creation blocked by a sandboxed frame lacking the 'allow-popups'
        permission.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
            Log a warning when form submission is blocked by sandboxing flags.
        (WebCore::createWindow):
            Log a warning when window.open is blocked due to sandboxing flags.

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        [V8] Make v8::Null(isolate) faster by caching the value in V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=103862

        Reviewed by Adam Barth.

        Performance comparison between V8 and JSC revealed that DOM attributes
        that return v8::Null(isolate) are much slower than JSC.
        (https://docs.google.com/a/chromium.org/spreadsheet/ccc?key=0AlobCOyvTnPKdDg5S0dMdGRGRTRSaW53V1ppVzh6eXc#gid=2)

        We can optimize v8::Null(isolate) by caching the value to V8PerIsolateData.
        (Although I don't like the optimization, it looks difficult to optimize
        v8::Null(isolate) more.)

        [Bindings/undefined-first-child.html]
        Before: 969 runs/sec, 970 runs/sec, 962 runs/sec
        After:  1086 runs/sec, 1085 runs/sec, 1086 runs/sec

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallback):
        (NativeToJSValue):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8Fast):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::contentDocumentAttrGetter):
        (WebCore::TestObjV8Internal::getSVGDocumentCallback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::valueAttrGetter):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::readonlyValueAttrGetter):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedValueAttrGetter):
        (WebCore::TestSerializedScriptValueInterfaceV8Internal::cachedReadonlyValueAttrGetter):
        * bindings/v8/V8Binding.h:
        (WebCore):
        (WebCore::v8Null):
        (WebCore::v8NullWithCheck):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::V8PerIsolateData):
        * bindings/v8/V8PerIsolateData.h:
        (WebCore::V8PerIsolateData::v8Null):
        (V8PerIsolateData):

2012-12-04  Alexis Menard  <alexis@webkit.org>

        Add an helper function in CSSParser to check for '/' character.
        https://bugs.webkit.org/show_bug.cgi?id=104009

        Reviewed by Ryosuke Niwa.

        Remove unwanted null check from r136525

        No new tests : just a refactor, existing tests should cover.

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

2012-12-04  Alexis Menard  <alexis@webkit.org>

        Add an helper function in CSSParser to check for '/' character.
        https://bugs.webkit.org/show_bug.cgi?id=104009

        Reviewed by Ryosuke Niwa.

        I'm about to add the same pattern in a following patch. Let's do an
        helper function first. We also did that for the comma. The slash
        character is pretty used in shorthands definitions.

        No new tests : just a refactor, existing tests should cover.

        * css/CSSParser.cpp:
        (WebCore::isForwardSlashOperator):
        (WebCore):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseAspectRatio):

2012-12-04  Ken Kania  <kkania@chromium.org>

        Inspector: Introduce Input.dispatchKeyEvent and DOM.focus for typing simulation.
        https://bugs.webkit.org/show_bug.cgi?id=103530

        Reviewed by Yury Semikhatsky.

        Input.dispatchKeyEvent simply calls EventHandler::keyEvent with the key event data
        from the command parameters. The client will be responsible for providing proper
        events to simulate desired typing behavior.
        DOM.focus calls focus on a dom element.

        Tests: inspector-protocol/dom-focus.html
               inspector-protocol/input-dispatchKeyEvent.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::focus):
        (WebCore):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorInputAgent.cpp: Added.
        (WebCore):
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        (WebCore::InspectorInputAgent::~InspectorInputAgent):
        (WebCore::InspectorInputAgent::dispatchKeyEvent):
        * inspector/InspectorInputAgent.h: Added.
        (WebCore):
        (InspectorInputAgent):
        (WebCore::InspectorInputAgent::create):

2012-12-04  Dan Bernstein  <mitz@apple.com>

        FontPlatformData has unnecessary m_textOrientation member
        https://bugs.webkit.org/show_bug.cgi?id=103971

        Reviewed by Darin Adler.

        Nothing in SimpleFontData depends on the FontPlatformData’s textOrientation, so we don’t
        need separate data for vertical-right and upright. We simply choose between
        verticalRightOrientationFontData() and uprightOrientationFontData() based on the
        textOrientation in the FontDescription.

        * WebCore.exp.in: Updated FontPlatformData constructor exports.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Removed the text orientation bit from the hash key,
        and updated for the removal of the TextOrientation parameter to
        CachedFont::platformDataFromCustomData().

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData): Removed the TextOrientation parameter.
        * loader/cache/CachedFont.h:

        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey): Removed the TextOrientation
        parameter and initializer.
        (WebCore::FontPlatformDataCacheKey::operator==): Updated for removal of m_textOrientation
        member variable.
        (FontPlatformDataCacheKey): Removed m_textOrientation member variable.
        (WebCore::computeHash): Removed text orientation bit from the hash.
        (WebCore::FontCache::getCachedFontPlatformData): Updated for FontPlatformDataCacheKey
        change.

        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Removed TextOrientation parameters and
        initializers.
        (WebCore::FontPlatformData::operator=): Updated for removal of m_textOrientation
        member variable.
        * platform/graphics/FontPlatformData.h:
        (FontPlatformData): Removed m_textOrientation member variable, removed TextOrientation
        parameters from constructors.
        (WebCore::FontPlatformData::hash): Removed text orientation bit.
        (WebCore::FontPlatformData::operator==): Updated for removed member variable.

        * platform/graphics/cairo/FontCustomPlatformData.h:
        (FontCustomPlatformData::fontPlatformData): Removed TextOrientation parameter.

        * platform/graphics/chromium/FontCacheAndroid.cpp:
        (WebCore::FontCache::createFontPlatformData): Updated for FontPlatformData change.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData): Removed TextOrientation parameter and
        initializer.

        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Removed TextOrientation parameter.
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Removed TextOrientation parameter and
        initializers.
        (WebCore::FontPlatformData::operator=): Updated for removed member variable.
        (WebCore::FontPlatformData::operator==): Ditto.
        (WebCore::FontPlatformData::hash): Removed text orientation bit.

        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h:
        (FontPlatformData): Removed TextOrientation parameter from the constructor declaration.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData): Updated for FontPlatformData change.

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Removed TextOrientation parameter.

        * platform/graphics/mac/FontCustomPlatformData.h:
        (FontCustomPlatformData): Removed TextOrientation parameter from declaration of
        fontPlatformData().

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData): Updated for FontPlatformData
        change.

        * platform/graphics/pango/FontCustomPlatformDataPango.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Removed TextOrientation parameter.
        * platform/graphics/qt/FontCustomPlatformData.h:

        * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Ditto.

        * platform/graphics/skia/FontCacheSkia.cpp:
        (WebCore::FontCache::createFontPlatformData): Updated for FontPlatformData change.

        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Removed TextOrientation parameter.
        * platform/graphics/skia/FontCustomPlatformData.h:

        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Removed TextOrientation parameter.
        * platform/graphics/win/FontCustomPlatformData.h:

        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Removed TextOrientation parameter.
        * platform/graphics/win/FontCustomPlatformDataCairo.h:

        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Removed m_textOrientation initializer.

        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Ditto.

        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Ditto.

        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Removed TextOrientation parameter.
        * platform/graphics/wince/FontCustomPlatformData.h:

2012-12-04  Charlie Reis  <creis@chromium.org>

        Add FrameLoaderClient::didDisownOpener
        https://bugs.webkit.org/show_bug.cgi?id=103789

        Reviewed by Darin Fisher.

        Adds a didDisownOwner notification when a frame's opener is cleared,
        so that FrameLoaderClients can react.

        No new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setOpener): Calls didDisownOpener if opener is cleared.
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        (WebCore::FrameLoaderClient::didDisownOpener):

2012-12-04  Robert Hogan  <robert@webkit.org>

        Redrawing issue with inserting new inline element between existing inline elements
        https://bugs.webkit.org/show_bug.cgi?id=50315

        Reviewed by Levi Weintraub.

        When inserting an element such as '<span>text<br></span>' between two lineboxes, the second of which has leading space
        collapsed away after a line-break, dirtyLinesFromChangeChild() needs to ensure that the linebox the fragment is inserted into (the second 
        of the two lineboxes) gets dirtied. 
        
        Since the element has been inserted before the first element in the linebox, but after the collapsed leading
        space, the search for the new element's linebox will go past the leading space to the previous linebox and select that
        one by mistake.
        
        So in order to ensure the element's linebox is dirtied make sure its previous sibling is not the line-break object of the
        linebox we selected when searching for a linebox to dirty. If the previous sibling is the linebox's line-break object then
        the element is in the one after the one we selected and we should dirty that linebox too. 

        Test: fast/inline/layout-after-inserting-nested-br.html

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

2012-12-04  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        IntSize::scale() should return rounded value
        https://bugs.webkit.org/show_bug.cgi?id=103984

        Reviewed by Kenneth Rohde Christiansen.

        IntSize::scale() is now rounding float value to the nearest integer instead of blind type casting.

        Test: css3/device-adapt/viewport-width-not-affecting-next-page.html

        * platform/graphics/IntSize.h:
        (WebCore::IntSize::scale):

2012-12-04  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Add support for generic types in arrays and sequences to the code generators
        https://bugs.webkit.org/show_bug.cgi?id=103642

        Reviewed by Kentaro Hara.

        Updated the bindings generators to support arrays and sequences of host objects.

        - Arrays and sequences of host objects are mapped to Vector<RefPtr<%RefPtrType%> >.
        - Fixed issue where "sequence<String>" was used in IDL files instead of "sequence<DOMString>".

        Updated existing test results.

        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/mediastream/RTCStatsElement.idl:
        * Modules/websockets/WebSocket.idl:
        * bindings/js/JSDOMBinding.h:
        (WebCore::toRefPtrNativeArray):
        (WebCore):
        * bindings/scripts/CodeGenerator.pm:
        (IsRefPtrType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForType):
        (GetNativeType):
        (GetNativeVectorInnerType):
        (JSValueToNative):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateParametersCheckExpression):
        (GenerateFunctionCallString):
        (GetNativeType):
        (JSValueToNative):
        (CreateCustomSignature):
        (NativeToJSValue):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::longLongAttrAttrSetter):
        (WebCore::TestObjV8Internal::unsignedLongLongAttrAttrSetter):
        (WebCore::TestObjV8Internal::methodWithSequenceArgCallback):
        (WebCore::TestObjV8Internal::overloadedMethod10Callback):
        * bindings/v8/V8Binding.h:
        (WebCore::toRefPtrNativeArray):
        * testing/Internals.idl:

2012-12-04  Antoine Quint  <graouts@apple.com>

        TextTrack's .kind property should return lower-case values
        https://bugs.webkit.org/show_bug.cgi?id=103411

        Reviewed by Eric Carlson.

        While the HTML "kind" attribute on the <track> element allows upper-case values, the related APIs
        on HTMLMediaElement and TextTrack expect only to deal with lower-case values. As such, we're updating
        TextTrack::isValidKindKeyword() to be case-sensitive and ensure that values fed from the DOM (the values
        read from HTML attributes) are lower-case'd.

        Thanks to this fix, we're no longer skipping media/track/opera/interfaces/TextTrack/kind.html and
        media/track/opera/interfaces/HTMLElement/HTMLMediaElement/addTextTrack.html 

        This patch also fixes https://bugs.webkit.org/show_bug.cgi?id=103256.

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::parseAttribute):
        (WebCore::HTMLTrackElement::ensureTrack):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::isValidKindKeyword):

2012-12-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136498.
        http://trac.webkit.org/changeset/136498
        https://bugs.webkit.org/show_bug.cgi?id=103992

        Patch causes a lot of tests to crash in GTK+ bots (Requested
        by KaL on #webkit).

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperties):
        (GenerateHeader):
        (GenerateCFile):
        (GenerateEventTargetIface):
        (WriteData):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (WebKit::core):
        (WebKit::wrapFloat64Array):
        (webkit_dom_float64array_finalize):
        (webkit_dom_float64array_class_init):
        (webkit_dom_float64array_init):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.h:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (WebKit::core):
        (WebKit::wrapTestActiveDOMObject):
        (webkit_dom_test_active_dom_object_finalize):
        (webkit_dom_test_active_dom_object_class_init):
        (webkit_dom_test_active_dom_object_init):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (WebKit::core):
        (WebKit::wrapTestCallback):
        (webkit_dom_test_callback_finalize):
        (webkit_dom_test_callback_class_init):
        (webkit_dom_test_callback_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        (WebKit::core):
        (WebKit::wrapTestCustomNamedGetter):
        (webkit_dom_test_custom_named_getter_finalize):
        (webkit_dom_test_custom_named_getter_class_init):
        (webkit_dom_test_custom_named_getter_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (WebKit::core):
        (WebKit::wrapTestEventConstructor):
        (webkit_dom_test_event_constructor_finalize):
        (webkit_dom_test_event_constructor_class_init):
        (webkit_dom_test_event_constructor_init):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (WebKit::core):
        (WebKit::wrapTestEventTarget):
        (webkit_dom_test_event_target_dispatch_event):
        (webkit_dom_test_event_target_add_event_listener):
        (webkit_dom_test_event_target_remove_event_listener):
        (webkit_dom_test_event_target_finalize):
        (webkit_dom_test_event_target_class_init):
        (webkit_dom_test_event_target_init):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (WebKit::core):
        (WebKit::wrapTestException):
        (webkit_dom_test_exception_finalize):
        (webkit_dom_test_exception_class_init):
        (webkit_dom_test_exception_init):
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (WebKit::core):
        (WebKit::wrapTestInterface):
        (webkit_dom_test_interface_finalize):
        (webkit_dom_test_interface_class_init):
        (webkit_dom_test_interface_init):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (WebKit::core):
        (WebKit::wrapTestMediaQueryListListener):
        (webkit_dom_test_media_query_list_listener_finalize):
        (webkit_dom_test_media_query_list_listener_class_init):
        (webkit_dom_test_media_query_list_listener_init):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        (WebKit::core):
        (WebKit::wrapTestNamedConstructor):
        (webkit_dom_test_named_constructor_finalize):
        (webkit_dom_test_named_constructor_class_init):
        (webkit_dom_test_named_constructor_init):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (WebKit::core):
        (WebKit::wrapTestNode):
        (webkit_dom_test_node_dispatch_event):
        (webkit_dom_test_node_add_event_listener):
        (webkit_dom_test_node_remove_event_listener):
        (webkit_dom_test_node_finalize):
        (webkit_dom_test_node_class_init):
        (webkit_dom_test_node_init):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (WebKit::core):
        (WebKit::wrapTestObj):
        (webkit_dom_test_obj_finalize):
        (webkit_dom_test_obj_class_init):
        (webkit_dom_test_obj_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp:
        (WebKit::core):
        (WebKit::wrapTestOverloadedConstructors):
        (webkit_dom_test_overloaded_constructors_finalize):
        (webkit_dom_test_overloaded_constructors_class_init):
        (webkit_dom_test_overloaded_constructors_init):
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (WebKit::core):
        (WebKit::wrapTestSerializedScriptValueInterface):
        (webkit_dom_test_serialized_script_value_interface_finalize):
        (webkit_dom_test_serialized_script_value_interface_class_init):
        (webkit_dom_test_serialized_script_value_interface_init):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:

2012-12-04  Markus Heintz  <markusheintz@chromium.org>

        Web Inspector: Viewport console warnings cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=102890

        Reviewed by Jochen Eisinger.

        Improve the console message text for a viewport console warning and
        change the log level to warning.

        No new tests added, as this change is covered by updates to existing
        test expectations.

        * dom/ViewportArguments.cpp:
        (WebCore::viewportErrorMessageTemplate):
            Improve the console message text for invalid values.
        (WebCore::viewportErrorMessageLevel):
            Upgraded the TruncatedViewportArgumentValueError and the
            TargetDensityDpiUnsupported messages's MessageLeval to warning.
        (WebCore::reportViewportWarning):
            Adding only a comment for a FIXIT reminder.

2012-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a private struct and placement new syntax in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=101074

        Reviewed by Xan Lopez.

        It allows to use RefPtr for the wrapped object and it simplifies
        the code.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperties):
        (GenerateHeader):
        (GenerateCFile):
        (GenerateEventTargetIface):
        (WriteData):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (_WebKitDOMFloat64ArrayPrivate):
        (WebKit::core):
        (WebKit::wrapFloat64Array):
        (webkit_dom_float64array_finalize):
        (webkit_dom_float64array_constructor):
        (webkit_dom_float64array_class_init):
        (webkit_dom_float64array_init):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.h:
        (_WebKitDOMFloat64Array):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (_WebKitDOMTestActiveDOMObjectPrivate):
        (WebKit::core):
        (WebKit::wrapTestActiveDOMObject):
        (webkit_dom_test_active_dom_object_finalize):
        (webkit_dom_test_active_dom_object_constructor):
        (webkit_dom_test_active_dom_object_class_init):
        (webkit_dom_test_active_dom_object_init):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        (_WebKitDOMTestActiveDOMObject):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (_WebKitDOMTestCallbackPrivate):
        (WebKit::core):
        (WebKit::wrapTestCallback):
        (webkit_dom_test_callback_finalize):
        (webkit_dom_test_callback_constructor):
        (webkit_dom_test_callback_class_init):
        (webkit_dom_test_callback_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        (_WebKitDOMTestCallback):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        (_WebKitDOMTestCustomNamedGetterPrivate):
        (WebKit::core):
        (WebKit::wrapTestCustomNamedGetter):
        (webkit_dom_test_custom_named_getter_finalize):
        (webkit_dom_test_custom_named_getter_constructor):
        (webkit_dom_test_custom_named_getter_class_init):
        (webkit_dom_test_custom_named_getter_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        (_WebKitDOMTestCustomNamedGetter):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (_WebKitDOMTestEventConstructorPrivate):
        (WebKit::core):
        (WebKit::wrapTestEventConstructor):
        (webkit_dom_test_event_constructor_finalize):
        (webkit_dom_test_event_constructor_constructor):
        (webkit_dom_test_event_constructor_class_init):
        (webkit_dom_test_event_constructor_init):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        (_WebKitDOMTestEventConstructor):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (_WebKitDOMTestEventTargetPrivate):
        (WebKit::core):
        (WebKit::wrapTestEventTarget):
        (webkit_dom_test_event_target_dispatch_event):
        (webkit_dom_test_event_target_add_event_listener):
        (webkit_dom_test_event_target_remove_event_listener):
        (webkit_dom_test_event_target_finalize):
        (webkit_dom_test_event_target_constructor):
        (webkit_dom_test_event_target_class_init):
        (webkit_dom_test_event_target_init):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        (_WebKitDOMTestEventTarget):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (_WebKitDOMTestExceptionPrivate):
        (WebKit::core):
        (WebKit::wrapTestException):
        (webkit_dom_test_exception_finalize):
        (webkit_dom_test_exception_constructor):
        (webkit_dom_test_exception_class_init):
        (webkit_dom_test_exception_init):
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        (_WebKitDOMTestException):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (_WebKitDOMTestInterfacePrivate):
        (WebKit::core):
        (WebKit::wrapTestInterface):
        (webkit_dom_test_interface_finalize):
        (webkit_dom_test_interface_constructor):
        (webkit_dom_test_interface_class_init):
        (webkit_dom_test_interface_init):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        (_WebKitDOMTestInterface):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (_WebKitDOMTestMediaQueryListListenerPrivate):
        (WebKit::core):
        (WebKit::wrapTestMediaQueryListListener):
        (webkit_dom_test_media_query_list_listener_finalize):
        (webkit_dom_test_media_query_list_listener_constructor):
        (webkit_dom_test_media_query_list_listener_class_init):
        (webkit_dom_test_media_query_list_listener_init):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h:
        (_WebKitDOMTestMediaQueryListListener):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        (_WebKitDOMTestNamedConstructorPrivate):
        (WebKit::core):
        (WebKit::wrapTestNamedConstructor):
        (webkit_dom_test_named_constructor_finalize):
        (webkit_dom_test_named_constructor_constructor):
        (webkit_dom_test_named_constructor_class_init):
        (webkit_dom_test_named_constructor_init):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:
        (_WebKitDOMTestNamedConstructor):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (_WebKitDOMTestNodePrivate):
        (WebKit::core):
        (WebKit::wrapTestNode):
        (webkit_dom_test_node_dispatch_event):
        (webkit_dom_test_node_add_event_listener):
        (webkit_dom_test_node_remove_event_listener):
        (webkit_dom_test_node_finalize):
        (webkit_dom_test_node_constructor):
        (webkit_dom_test_node_class_init):
        (webkit_dom_test_node_init):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
        (_WebKitDOMTestNode):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (_WebKitDOMTestObjPrivate):
        (WebKit::core):
        (WebKit::wrapTestObj):
        (webkit_dom_test_obj_finalize):
        (webkit_dom_test_obj_constructor):
        (webkit_dom_test_obj_class_init):
        (webkit_dom_test_obj_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        (_WebKitDOMTestObj):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (_WebKitDOMTestSerializedScriptValueInterfacePrivate):
        (WebKit::core):
        (WebKit::wrapTestSerializedScriptValueInterface):
        (webkit_dom_test_serialized_script_value_interface_finalize):
        (webkit_dom_test_serialized_script_value_interface_constructor):
        (webkit_dom_test_serialized_script_value_interface_class_init):
        (webkit_dom_test_serialized_script_value_interface_init):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        (_WebKitDOMTestSerializedScriptValueInterface):

2012-12-04  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Make leveldb histogram entries more fine-grained
        https://bugs.webkit.org/show_bug.cgi?id=103688

        Reviewed by Tony Chang.

        Allow us better insight into which functions the IO errors originate
        from.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::setUpMetadata):
        (WebCore::IDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::getObjectStores):
        (WebCore::IDBBackingStore::getRecord):
        (WebCore::IDBBackingStore::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBBackingStore::getIndexes):
        (WebCore::IDBBackingStore::findKeyInIndex):
        (WebCore::ObjectStoreKeyCursorImpl::loadCurrentRow):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):
        (WebCore::IndexKeyCursorImpl::loadCurrentRow):
        (WebCore::IndexCursorImpl::loadCurrentRow):

2012-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Avoid unnecessary heap allocations during drag and drop operations
        https://bugs.webkit.org/show_bug.cgi?id=87938

        Reviewed by Martin Robinson.

        * platform/gtk/GtkDragAndDropHelper.cpp:
        (WebCore::GtkDragAndDropHelper::handleDragMotion): Return a
        pointer to the DataObjectGtk so that the caller can create the
        DragData object in the stack.
        (WebCore::GtkDragAndDropHelper::handleDragDataReceived): Ditto.
        (WebCore::GtkDragAndDropHelper::handleDragDrop): Ditto.
        * platform/gtk/GtkDragAndDropHelper.h:

2012-12-04  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Overrides] Add ability to override the page CSS media type
        https://bugs.webkit.org/show_bug.cgi?id=103752

        Reviewed by Pavel Feldman.

        This change emulates the CSS media types through the instrumentation of FrameView::mediaType().
        Even though it already checks the associated FrameLoaderClient::overrideMediaType(), instrumenting
        every single platform FrameLoaderClient implementation out there seems wrong.

        Test: inspector/styles/media-emulation.html

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json: Add Page.setEmulatedMedia().
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::applyEmulatedMediaImpl): Added.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::applyEmulatedMedia): Added.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::restore): Restores the media emulation state.
        (WebCore::InspectorPageAgent::disable): Resets the media emulation state.
        (WebCore::InspectorPageAgent::setEmulatedMedia): Added.
        (WebCore::InspectorPageAgent::applyEmulatedMedia): Applies the emulated CSS media if needed.
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/CSSStyleModel.js: Add the list of media types.
        * inspector/front-end/OverridesView.js: Add the CSS media type override UI.
        (WebInspector.OverridesView):
        (WebInspector.OverridesView.prototype._createMediaEmulationElement): Builds the UI.
        (WebInspector.OverridesView.prototype._emulateMediaChanged): Handles the control value changes.
        * inspector/front-end/Settings.js: Add the "emulatedCSSMedia" setting.
        * page/FrameView.cpp:
        (WebCore::FrameView::mediaType):
          Uses InspectorInstrumentation::applyEmulatedMedia() to provide the emulated value.

2012-12-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Simplify GObject DOM bindings code for handling properties
        https://bugs.webkit.org/show_bug.cgi?id=101072

        Reviewed by Xan Lopez.

        Do not override GObjectClass::set_property if the wrapped object
        doesn't have writable properties, and don't override
        GObjectClass::get_property if the wrapped object doesn't have
        properties at all. It reduces some GObject boilerplate in
        generated code for some objects.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperties):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        (webkit_dom_float64array_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        (webkit_dom_test_active_dom_object_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        (webkit_dom_test_custom_named_getter_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        (webkit_dom_test_event_constructor_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (webkit_dom_test_event_target_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        (webkit_dom_test_exception_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (webkit_dom_test_interface_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (webkit_dom_test_media_query_list_listener_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        (webkit_dom_test_named_constructor_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (webkit_dom_test_node_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (webkit_dom_test_serialized_script_value_interface_class_init):

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::visitChildren):
        (WebCore):

2012-12-03  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [REGRESSION] [Styles] Rule disappears if edited selector does not affect selected node
        https://bugs.webkit.org/show_bug.cgi?id=103059

        Reviewed by Pavel Feldman.

        This change effectively turns WebInspector.cssModel.setRuleSelector() into a _userOperation
        (in terms of StylesSidebarPane), which finishes upon the _finishOperationAndMoveEditor() invocation.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSRule): Fix selectorText now that r136370 has landed.
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.update): Update the selector text from the model.
        (WebInspector.StylePropertiesSection.prototype._markSelectorMatches): Set the "selector" className regardless of the matched selectors presence.
        (WebInspector.StylePropertiesSection.prototype.successCallback): Make use of the _userOperation flag.
        (WebInspector.StylePropertiesSection.prototype.finishOperationAndMoveEditor): Delete the _userOperation flag.
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted): Make use of the _userOperation flag.
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted): Mark selector matches.
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCancelled): Delete the _userOperation flag.

2012-12-04  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WK2][AC] USE_GRAPHICS_SURFACE should be enabled only if Xcomposite and Xrender extensions are found.
        https://bugs.webkit.org/show_bug.cgi?id=103710.

        Reviewed by Kenneth Rohde Christiansen.

        When using GLX back-end we are dependent on GLX support, Xcomposite and Xrender extensions.
        In this case, GraphicsSurface usage depends on Xcomposite and Xrender extensions. 
        USE_GRAPHICS_SURFACE should be enabled only if Xcomposite and Xrender extensions are found.

        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createTransportSurface):
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore):
        * platform/graphics/surfaces/glx/GLXSurface.h:
        (WebCore::SharedX11Resources::createConfig):
        (SharedX11Resources):

2012-12-04  Michael Pruett  <michael@68k.org>

        [JSC] Generate visitChildren() for uncustomized EventTarget interfaces
        https://bugs.webkit.org/show_bug.cgi?id=103908

        Reviewed by Geoffrey Garen.

        CodeGeneratorJS.pm should automatically generate visitChildren()
        for EventTarget interfaces without custom mark functions even if
        those interfaces have no functions or cached attributes.

        This change is needed for IDBOpenDBRequest and IDBVersionChangeRequest.

        No new tests. Covered by existing tests.

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

2012-12-04  Kentaro Hara  <haraken@chromium.org>

        Change ChildNodeInsertionNotifier::m_postInsertionsNotificationTargets from a Vector to an OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=103868

        Reviewed by Darin Adler.

        ChildNodeInsertionNotifier::m_postInsertionsNotificationTargets is
        used for HTMLFrameElement and HTMLBodyElement only, which would be
        a cold path. We can change it from a Vector to an OwnPtr<Vector>
        so that ChildNodeInsertionNotifier can be allocated faster. This patch
        optimizes Dromaeo/dom-modify by 1.4%.

        [Dromaeo/dom-modify in Chromium/Linux]
        Before: 4532 runs/sec, 4545 runs/sec, 4530 runs/sec, 4536 runs/sec
        After:  4595 runs/sec, 4606 runs/sec, 4597 runs/sec, 4602 runs/sec

        No tests. No change in behavior.

        * dom/ContainerNodeAlgorithms.h:
        (ChildNodeInsertionNotifier):
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoTree):
        (WebCore::ChildNodeInsertionNotifier::notify):

2012-12-03  Rafael Weinstein  <rafaelw@chromium.org>

        Unreviewed build fix after r136467

        The template element patch added asserts in parserAppendChild and parserInsertBefore which should be valid, but DOMImplementation::createDocument() calls parserAppendChild with docType without regard to its owner. This patch removes the assert and adds a FIXME.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::parserAppendChild):

2012-12-03  Kentaro Hara  <haraken@chromium.org>

        [V8] Enter an Isolate before initializing PerIsolateData
        https://bugs.webkit.org/show_bug.cgi?id=103949

        Reviewed by Adam Barth.

        Currently we initialize PerIsolateData before entering an Isolate,
        which prevents us from using an Isolate in the PerIsolateData
        constructor. We should enter an Isolate first and then initialize
        PerIsolateData.

        No tests. No change in behavior.

        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):

2012-12-03  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Add WebKitDOMShadowRoot.h to the list of public API headers after r135693
        https://bugs.webkit.org/show_bug.cgi?id=103909

        Reviewed by Martin Robinson.

        WebKitDOMShadowRoot was added in r135693. As it is added to
        webkitdom.h we have to export the include file, otherwise clients
        will fail to build due to the missing file.

        * bindings/gobject/GNUmakefile.am:

2012-12-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Correct database version after aborted upgrade
        https://bugs.webkit.org/show_bug.cgi?id=103763

        Reviewed by Tony Chang.

        After an aborted "versionchange" transaction, the IDBDatabase would fetch a fresh snapshot
        of the metadata from the back end. If the back end had already started a new "versionchange"
        transaction the snapshot would be bogus. Instead, save a copy of the IDBDatabase's metadata
        and roll back to that, as is done for IDBObjectStore.

        Tests: storage/indexeddb/intversion-abort-in-initial-upgradeneeded.html
               storage/indexeddb/mozilla/versionchange-abort.html
               storage/indexeddb/unblocked-version-changes.html

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::transactionCreated):
        * Modules/indexeddb/IDBDatabase.h:
        (WebCore::IDBDatabase::setMetadata): Let IDBOpenDBRequest and IDBTransaction tinker.
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded): Fetch new and compute old metadata.
        (WebCore::IDBOpenDBRequest::onSuccess): Fetch new metadata, in case upgrade changed it.
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create): Stash the old metadata, in case of rollback.
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::onAbort): Revert the database as well as the stores.
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):

2012-12-03  Rafael Weinstein  <rafaelw@chromium.org>

        Implement HTMLTemplateElement
        https://bugs.webkit.org/show_bug.cgi?id=86031

        Reviewed by Adam Barth.

        Initial implementation. This patch includes the parser changes, new IDL and element implementation for <template>.

        Spec: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html

        Tests: fast/dom/HTMLTemplateElement/cloneNode.html
               fast/dom/HTMLTemplateElement/inertContents.html
               fast/dom/HTMLTemplateElement/innerHTML.html
               fast/dom/HTMLTemplateElement/ownerDocument.html
               html5lib/run-template.html

        * WebCore.gypi:
        * css/html.css:
        (template):
        * dom/Document.cpp:
        (WebCore):
        (WebCore::Document::templateContentsOwnerDocument):
        * dom/Document.h:
        (Document):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:
        * html/HTMLTemplateElement.cpp: Added.
        (WebCore):
        (WebCore::HTMLTemplateElement::HTMLTemplateElement):
        (WebCore::HTMLTemplateElement::setInnerHTML):
        (WebCore::HTMLTemplateElement::~HTMLTemplateElement):
        (WebCore::HTMLTemplateElement::create):
        (WebCore::HTMLTemplateElement::content):
        (WebCore::HTMLTemplateElement::setContent):
        (WebCore::toHTMLTemplateElement):
        * html/HTMLTemplateElement.h: Added.
        (WebCore):
        (HTMLTemplateElement):
        (WebCore::toHTMLTemplateElement):
        * html/HTMLTemplateElement.idl: Added.
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeTask):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::ownerDocumentForCurrentNode):
        (WebCore):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore::HTMLConstructionSite::findFosterSite):
        * html/parser/HTMLConstructionSite.h:
        (HTMLConstructionSite):
        * html/parser/HTMLElementStack.cpp:
        (WebCore):
        (WebCore::HTMLElementStack::hasTemplateInHTMLScope):
        * html/parser/HTMLElementStack.h:
        (HTMLElementStack):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore):
        (WebCore::HTMLTreeBuilder::processTemplateEndTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processHtmlStartTagForInBody):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processTableEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        * html/parser/HTMLTreeBuilder.h:
        (HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::isParsingTemplateContents):
        (WebCore::HTMLTreeBuilder::isParsingFragmentOrTemplateContents):
        * page/DOMWindow.idl:

2012-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136460.
        http://trac.webkit.org/changeset/136460
        https://bugs.webkit.org/show_bug.cgi?id=103958

        This patch caused compile error when building DumpRenderTree
        (Requested by tasak on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/PlatformThemeChromiumLinux.cpp: Added.
        (WebCore):
        (WebCore::PlatformThemeChromiumLinux::setScrollbarColors):
        (WebCore::clamp):
        (WebCore::PlatformThemeChromiumLinux::saturateAndBrighten):
        (WebCore::PlatformThemeChromiumLinux::outlineColor):
        (WebCore::PlatformThemeChromiumLinux::paintArrowButton):
        * platform/chromium/PlatformThemeChromiumLinux.h: Added.
        (WebCore):
        (PlatformThemeChromiumLinux):
        (WebCore::PlatformThemeChromiumLinux::thumbInactiveColor):
        (WebCore::PlatformThemeChromiumLinux::thumbActiveColor):
        (WebCore::PlatformThemeChromiumLinux::trackColor):
        (WebCore::PlatformThemeChromiumLinux::PlatformThemeChromiumLinux):
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp: Added.
        (WebCore):
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeChromiumLinux::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):
        (WebCore::ScrollbarThemeChromiumLinux::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeChromiumLinux::buttonSize):
        (WebCore::ScrollbarThemeChromiumLinux::minimumThumbLength):
        * platform/chromium/ScrollbarThemeChromiumLinux.h: Added.
        (ScrollbarThemeChromiumLinux):
        * rendering/RenderThemeChromiumAndroid.cpp:
        (WebCore::RenderThemeChromiumAndroid::extraDefaultStyleSheet):
        * rendering/RenderThemeChromiumAndroid.h:
        * rendering/RenderThemeChromiumLinux.cpp: Added.
        (WebCore):
        (WebCore::getWebThemeState):
        (WebCore::RenderThemeChromiumLinux::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::~RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::systemColor):
        (WebCore::RenderThemeChromiumLinux::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumLinux::controlSupportsTints):
        (WebCore::RenderThemeChromiumLinux::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::activeListBoxSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::inactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumLinux::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumLinux::sliderTickSize):
        (WebCore::RenderThemeChromiumLinux::sliderTickOffsetFromTrackCenter):
        (WebCore::RenderThemeChromiumLinux::adjustSliderThumbSize):
        (WebCore::RenderThemeChromiumLinux::supportsControlTints):
        (WebCore::RenderThemeChromiumLinux::setCaretBlinkInterval):
        (WebCore::RenderThemeChromiumLinux::caretBlinkIntervalInternal):
        (WebCore::RenderThemeChromiumLinux::setSelectionColors):
        (WebCore::RenderThemeChromiumLinux::paintCheckbox):
        (WebCore::RenderThemeChromiumLinux::setCheckboxSize):
        (WebCore::RenderThemeChromiumLinux::paintRadio):
        (WebCore::RenderThemeChromiumLinux::setRadioSize):
        (WebCore::RenderThemeChromiumLinux::paintButton):
        (WebCore::RenderThemeChromiumLinux::paintTextField):
        (WebCore::RenderThemeChromiumLinux::paintMenuList):
        (WebCore::RenderThemeChromiumLinux::paintSliderTrack):
        (WebCore::RenderThemeChromiumLinux::paintSliderThumb):
        (WebCore::RenderThemeChromiumLinux::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeChromiumLinux::paintInnerSpinButton):
        (WebCore::RenderThemeChromiumLinux::paintProgressBar):
        (WebCore::RenderThemeChromiumLinux::shouldOpenPickerWithF4Key):
        * rendering/RenderThemeChromiumLinux.h: Added.
        (WebCore):
        (RenderThemeChromiumLinux):

2012-12-03  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Support paddings and margins on grid items
        https://bugs.webkit.org/show_bug.cgi?id=103677

        Reviewed by Tony Chang.

        After bug 102968, we properly resolve grid items' width and height against the
        grid areas' sizes. However we didn't check for paddings and margins, which is
        what this change fixes..

        Test: fast/css-grid-layout/percent-padding-margin-resolution-grid-item.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        Don't stretch the end margin to match the containing block's extent.
        The fix is similar to what was done for flex-box in bug 65887.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints):
        Added a comment about not using containingBlockLogicalWidthForContent.

        (WebCore::RenderBoxModelObject::computedCSSPaddingTop):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBottom):
        (WebCore::RenderBoxModelObject::computedCSSPaddingLeft):
        (WebCore::RenderBoxModelObject::computedCSSPaddingRight):
        (WebCore::RenderBoxModelObject::computedCSSPaddingBefore):
        (WebCore::RenderBoxModelObject::computedCSSPaddingAfter):
        (WebCore::RenderBoxModelObject::computedCSSPaddingStart):
        (WebCore::RenderBoxModelObject::computedCSSPaddingEnd):
        Updated these functions to use containingBlockLogicalWidthForContent.

        * rendering/RenderGrid.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderGrid):
        Added isRenderGrid.

2012-12-03  Scott Violet  <sky@chromium.org>

        [chromium] Remove linux theme related files and switch to default
        https://bugs.webkit.org/show_bug.cgi?id=103897

        Reviewed by Darin Fisher.

        linux theme related files are now named default. This removes
        linux theme files, updates build files and removes ifdefs.

        Code cleanup, no new tests.

        * WebCore.gyp/WebCore.gyp: Update build rules
        * WebCore.gypi: Update build rules
        * platform/chromium/PlatformThemeChromiumLinux.cpp: Removed.
        * platform/chromium/PlatformThemeChromiumLinux.h: Removed.
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp: Removed.
        * platform/chromium/ScrollbarThemeChromiumLinux.h: Removed.
        * rendering/RenderThemeChromiumAndroid.h: Change superclass
        * rendering/RenderThemeChromiumAndroid.cpp: Change call to superclass
        * rendering/RenderThemeChromiumLinux.cpp: Removed.
        * rendering/RenderThemeChromiumLinux.h: Removed.

2012-12-03  Pierre Rossi  <pierre.rossi@digia.com>

        [Qt] Unreviewed build fix after r136410

        When building without libjpeg, take JPEGImageDecoder's header out, since it now includes libjpeg.h.

        * Target.pri: conditionally add JPEGImageDecoder.h to HEADERS
        * platform/image-decoders/ImageDecoder.cpp: guard JPEGImageDecoder.h's include

2012-12-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][Qt][WK2] Fixed position elements are not always fixed
        https://bugs.webkit.org/show_bug.cgi?id=103452

        Reviewed by Simon Fraser.

        The code figuring out whether fixed position layers are inside
        the visible viewport, assumes that the visible viewport is always
        the size of the layout viewport. This assumption doesn't hold with
        how the Qt and EFL tiled backing store and coordinated graphics
        works, so instead using the visibleContentsRect(), which provides
        the right values in all cases.

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

            Use visibleContentsRect instead of scrollOffsetForFixedPosition().

            scrollOffsetForFixedPosition() is needed sometimes in the Mac code
            because visibleContentRect() will return negative offsets when you
            are in the rubber-band phase of a scroll on the Mac.

            However that is not an issue here.

2012-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135271.
        http://trac.webkit.org/changeset/135271
        https://bugs.webkit.org/show_bug.cgi?id=103940

        Some user stylesheet API clients broken (Requested by anttik
        on #webkit).

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::collectRulesFromUserStyleSheets):
        (WebCore::collectCSSOMWrappers):
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/Document.cpp:
        (WebCore::Document::setCompatibilityMode):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::~DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::pageUserSheet):
        (WebCore::DocumentStyleSheetCollection::clearPageUserSheet):
        (WebCore::DocumentStyleSheetCollection::updatePageUserSheet):
        (WebCore::collectActiveCSSStyleSheetsFromSeamlessParents):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage):
        * dom/DocumentStyleSheetCollection.h:
        (DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::documentUserStyleSheets):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):

2012-11-30  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: make it possible to fliter out messages from console.{time,timeEnd}()
        https://bugs.webkit.org/show_bug.cgi?id=103781

        Reviewed by Yury Semikhatsky.

        - make console messages produced by console.timeEnd() TimingMessageType & DebugMessageLevel;
        - add console filter for Debug messages;

        * inspector/ConsoleMessage.cpp:
        (WebCore::messageTypeValue):
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::stopTiming):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.toMessageElement):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.):
        (WebInspector.ConsoleView.prototype.filter):
        * inspector/front-end/inspector.css:
        (.console-warning-level, .console-error-level, .console-log-level, .console-debug-level):
        (.filter-all .console-debug-level, .filter-debug .console-debug-level):
        (.filter-all .console-debug-level.repeated-message, .filter-debug .console-debug-level.repeated-message):
        * page/ConsoleTypes.h:

2012-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136444.
        http://trac.webkit.org/changeset/136444
        https://bugs.webkit.org/show_bug.cgi?id=103938

        broke chromium build (Requested by zhenyao_wfh on #webkit).

        * Target.pri:
        * platform/image-decoders/ImageDecoder.cpp:

2012-12-03  Pierre Rossi  <pierre.rossi@digia.com>

        [Qt] Unreviewed build fix after r136410

        When building without libjpeg, take JPEGImageDecoder's header out, since it now includes libjpeg.h.

        * Target.pri: conditionally add JPEGImageDecoder.h to HEADERS
        * platform/image-decoders/ImageDecoder.cpp: guard JPEGImageDecoder.h's include

2012-11-30  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] Record and report initiator
        https://bugs.webkit.org/show_bug.cgi?id=103777

        Reviewed by Nate Chapin.

        This will start populating the Resource Timing buffer with entries. The initiator will be
        recorded for each CachedResourceLoader. This should match the next update of the spec.

        Tests: http/tests/w3c/webperf/submission/resource-timing

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadTimerFired):
        * loader/ResourceLoadNotifier.cpp: Always record timing information if ENABLE(RESOURCE_TIMING).
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::releaseResources): Report the actual resource that called loadDone().
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadResource): Record the initiator.
        (WebCore::CachedResourceLoader::loadDone): Record the entry in Resource Timing.
        * loader/cache/CachedResourceLoader.h:
        (CachedResourceLoader):
        (InitiatorInfo):

2012-12-03  Florin Malita  <fmalita@chromium.org>

        [Skia] Deferred SkCanvas save()
        https://bugs.webkit.org/show_bug.cgi?id=102272

        Reviewed by Stephen White.

        Implement a lazy save() strategy: instead of delegating to the canvas upfront, defer and
        only commit when a clip/matrix mutation is observed.

        The patch yields a 1-20% SkCanvas save/restore reduction for heavy pages, with much larger
        gains observed for deeply nested SVG content.

        No new tests: no behaviour changes, coverage provided by existing tests.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore):
        (WebCore::PlatformContextSkia::DeferredSaveState::DeferredSaveState):
        (PlatformContextSkia::DeferredSaveState):
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::save):
        (WebCore::PlatformContextSkia::saveLayer):
        (WebCore::PlatformContextSkia::beginLayerClippedToImage):
        (WebCore::PlatformContextSkia::restore):
        (WebCore::PlatformContextSkia::applyClipFromImage):
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia):
        (WebCore::PlatformContextSkia::realizeSave):
        (WebCore):
        (WebCore::PlatformContextSkia::canvas):
        (WebCore::PlatformContextSkia::clipPath):
        (WebCore::PlatformContextSkia::clipRect):
        (WebCore::PlatformContextSkia::setMatrix):
        (WebCore::PlatformContextSkia::concat):
        (WebCore::PlatformContextSkia::rotate):
        (WebCore::PlatformContextSkia::scale):
        (WebCore::PlatformContextSkia::translate):

2012-12-03  Simon Fraser  <simon.fraser@apple.com>

        When animating mask-postion on a composited layer, element renders incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=103700

        Reviewed by Tim Horton.

        When a composited layer has a mask, we clipped the layer bounds to the
        size of the mask. This caused problems when animating the mask origin,
        which is considered a 'repaint' style change and so should not require
        layout or compositing geometry changes.
        
        Fix by ignoring the mask when computing the bounds of the compositing
        layer.

        Test: compositing/masks/mask-layer-size.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::localBoundingBox):
        (WebCore::RenderLayer::calculateLayerBounds):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):

2012-12-03  Xan Lopez  <xan@igalia.com>

        [CSS Grid Layout] Support <percentage> and viewport-relative breadth sizes
        https://bugs.webkit.org/show_bug.cgi?id=103335

        Reviewed by Julien Chaffraix.

        Test: fast/css-grid-layout/breadth-size-resolution-grid.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackBreadth): Support the new types.
        (WebCore::valueForGridTrackMinMax): Modify the call to previous
        method, since the signature has changed.
        (WebCore::valueForGridTrackGroup): Ditto.
        (WebCore::valueForGridTrackList): Ditto.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Ditto.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks): Suport
        percent and viewport relative types, calc() will be supported in a
        follow up (see bug #103761)

2012-12-03  Peter Rybin  <prybin@chromium.org>

        Web Inspector: make ASSERTION FAILED: foundPropertiesCount == object->size() more useful
        https://bugs.webkit.org/show_bug.cgi?id=103254

        Reviewed by Pavel Feldman.

        Assert code generation is slightly changed so that it dumped JSON object text before crashing.

        * inspector/CodeGeneratorInspector.py:

2012-12-03  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Do not clamp indirect array indices during CSS Shaders ANGLE validation pass
        https://bugs.webkit.org/show_bug.cgi?id=102731

        Reviewed by Dean Jackson.

        Before this patch, we validated all shaders with the compile flag
        SH_CLAMP_INDIRECT_ARRAY_BOUNDS in ANGLEWebKitBridge. This would insert a GLSL function
        "webgl_int_clamp" in validated CSS shaders. However, when validated CSS shaders would pass
        through ANGLE again at the GC3D level, ANGLE would reject them because they would contain
        the "webgl_" restricted prefix.

        Now, we only pass the compile flag SH_CLAMP_INDIRECT_ARRAY_BOUNDS at the GC3D level.

        Test: css3/filters/custom/custom-filter-array-uniform-indirect-index.html

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::ANGLEWebKitBridge::compileShaderSource):
            Remove the SH_CLAMP_INDIRECT_ARRAY_BOUNDS compile flag.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::compiledProgram):
            Add an assert that validated programs compile at the GC3D or platform level to help us
            catch validation and rewriting issues.
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
            Pass the SH_CLAMP_INDIRECT_ARRAY_BOUNDS to compileShaderSource.

2012-12-03  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Make main-thread monitoring go through InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=103550

        Reviewed by Pavel Feldman.

        InspectorInstrumentation was a wrong path.

        * inspector/InspectorClient.h: Remove start/stop methods.
        * inspector/InspectorController.cpp:
        Dispatch main thread activity notifications.
        * inspector/InspectorController.h: Ditto.
        * inspector/InspectorInstrumentation.cpp: Remove dispatchng.
        * inspector/InspectorInstrumentation.h: Ditto.
        * inspector/InspectorTimelineAgent.cpp:
        Do not subscribe for notifications explicitly.

2012-12-03  Philip Rogers  <pdr@google.com>

        Invalidate SVG width on width attribute changes.
        https://bugs.webkit.org/show_bug.cgi?id=103304

        Reviewed by Dirk Schulze.

        An inline SVG element's replaced width can depend on both attributes and style properties.
        After r105513, we invalidated this width on style changes but not attribute changes. With
        this patch we invalidate the replaced width on width attribute changes too. Note that height
        is handled differently for replaced elements so only the width attribute needs this handling
        (the added test covers this too).

        Test: svg/custom/root-size-attribute-changes.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):

2012-12-03  Alec Flett  <alecflett@chromium.org>

        IndexedDB: remove IDBDatabaseBackendInterface::transaction()
        https://bugs.webkit.org/show_bug.cgi?id=102733

        Reviewed by Darin Fisher.

        Part 3 of a refactor, remove the old transaction() method.

        No new tests as this is just post-refactor cleanup.

        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):

2012-12-03  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] show replay screenshot of the last call's canvas
        https://bugs.webkit.org/show_bug.cgi?id=103739

        Reviewed by Pavel Feldman.

        When many canvases are being instrumented we'll want to show replay screenshots for each canvas.
        Meanwhile, show the screenshot of the last-touched canvas during the current replay.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-12-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Rename exception enum members from UGLY_ERR to PrettyError
        https://bugs.webkit.org/show_bug.cgi?id=103759

        Reviewed by Darin Fisher.

        Now that IDBDatabaseException isn't exposed to script with constants, the exception types
        can be renamed to match the much friendlier names used in newer iterations of the spec. Also
        remove the legacy/unused types.

        No new tests, just constant renames.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::advance):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::deleteFunction):
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::advance):
        (WebCore::IDBCursorBackendImpl::prefetchContinue):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::openConnectionWithVersion):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        (WebCore::IDBDatabaseBackendImpl::close):
        * Modules/indexeddb/IDBDatabaseException.cpp: Tidying and renaming.
        (WebCore):
        (WebCore::getErrorEntry):
        * Modules/indexeddb/IDBDatabaseException.h:
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::cmp):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::getDatabaseNames):
        (WebCore::IDBFactoryBackendImpl::deleteDatabase):
        (WebCore::IDBFactoryBackendImpl::open):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        (WebCore::IDBIndexBackendImpl::count):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::count):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreStorageOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::count):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::result):
        (WebCore::IDBRequest::error):
        (WebCore::IDBRequest::errorCode):
        (WebCore::IDBRequest::webkitErrorMessage):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::abort):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::objectStore):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):

2012-12-03  Alexis Menard  <alexis@webkit.org>

        [Mac] Enable CSS3 background-position offset by default.
        https://bugs.webkit.org/show_bug.cgi?id=103905

        Reviewed by Simon Fraser.

        Turn the flag on by default.

        No new tests : covered by tests landed previously.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillXPosition): Build fix in release on Mac with unused variable.
        (WebCore::CSSToStyleMap::mapFillYPosition): Ditto.

2012-12-03  Jan Keromnes  <janx@linux.com>

        Web Inspector: Implement context menus in CodeMirrorTextEditor
        https://bugs.webkit.org/show_bug.cgi?id=94062

        Reviewed by Pavel Feldman.

        Listen for contextmenu events in the editor and handle them differently
        if triggered on gutter line number or in text body. This adds controls
        for breakpoints (including disabled / conditional), debugger navigation
        and text input methods.

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

2012-12-03  Nate Chapin  <japhet@chromium.org>

        Make MainResourceLoader not use m_frame directly.
        https://bugs.webkit.org/show_bug.cgi?id=103907

        Reviewed by Darin Adler.

        MainResourceLoader will soon cease to be a ResourceLoader subclass.  It currently
        makes extensively use of both m_documentLoader and m_frame from ResourceLoader.
        By moving everything over to going through m_documentLoader, we reduce the number
        of members we have to add to MainResourceLoader in https://bugs.webkit.org/show_bug.cgi?id=49246.

        No new tests, refactor only.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::create):
        (WebCore::MainResourceLoader::receivedError):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::startDataLoadTimer):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):

2012-12-03  Anton Vayvod  <avayvod@chromium.org>

        Text Autosizing: don't autosize horizontal menu items implemented via floating list items
        https://bugs.webkit.org/show_bug.cgi?id=103840

        Reviewed by Kenneth Rohde Christiansen.

        Floating list items are often used to implement horizontal menus. Currently, text autosizing 
        disregards such elements as autosizing containers. List items are often then autosized as part
        of a bigger cluster (usually the whole page) and look too big.
        This change turns floating list items into autosizing clusters so they are autosized separately
        resulting in no font size multiplication for menu items implemented in this manner.

        Test: fast/text-autosizing/cluster-list-item.html

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::isAutosizingContainer): Returns true for floating list items; split the
        condition logically.

2012-12-03  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        Optimization in image decoding
        https://bugs.webkit.org/show_bug.cgi?id=88424

        Reviewed by Brent Fulgham.

        Replace int with J_COLOR_SPACE in parameters of templates setPixel and
        outputScanlines to avoid casting from int to enum. It required move 
        inclusion of jpeglib.h and related #if to JPEGImageDecoder.h .

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore):
        (WebCore::setPixel):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (JPEGImageDecoder):

2012-12-03  Tony Chang  <tony@chromium.org>

        [mathml] Improve performance of nested sup or sub elements
        https://bugs.webkit.org/show_bug.cgi?id=103665

        Reviewed by Darin Adler.

        Reduce the number of extra layouts. Since RenderMathMLSubSup calls
        layout twice, this can lead to an exponential number of layouts. Avoid
        extra layouts.

        Test: mathml/presentation/sup-nested.html - Should not time out.

        * css/mathml.css:
        (msup): Stretching children also causes extra layouts. Avoid this by aligning to the top.
        (msub): Same as msup, but align to the bottom.
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::layout): Only do the second layout if the padding changed.
        Also fix up the calls to setNeedsLayout (since we're calling it on this) and
        setChildNeedsLayout (since we're calling it on a child).

2012-12-03  Konrad Piascik  <kpiascik@rim.com>

        Web Inspector: free Page resources on inspector disconnect
        https://bugs.webkit.org/show_bug.cgi?id=103888

        Reviewed by Yury Semikhatsky.

        We don't need to keep the page around and can free up memory when disconnecting web inspector.

        Not testable.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::freePage):
        (WebCore):
        * inspector/InspectorOverlay.h:
        (InspectorOverlay):

2012-12-03  Alexis Menard  <alexis@webkit.org>

        [GTK] Enable CSS3 background-background position offset by default.
        https://bugs.webkit.org/show_bug.cgi?id=103903

        Reviewed by Philippe Normand.

        Turn the feature on by default.

        No new tests : covered by tests already landed.

        * GNUmakefile.features.am:

2012-12-03  Hajime Morrita  <morrita@google.com>

        Corrupted DOM tree during appendChild/insertBefore
        https://bugs.webkit.org/show_bug.cgi?id=103601

        Reviewed by Abhishek Arya.

        There are some missing protection in appendChild() and insertBefore().
        This change added these.

        Dromaeo dom-modify shows no speed regression (5445run/s before vs 5351run/s after)

        Tests: fast/events/mutation-during-append-child.html
               fast/events/mutation-during-insert-before.html

        * dom/ContainerNode.cpp:
        (WebCore::checkAcceptChildGuaranteedNodeTypes):
        (WebCore):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::appendChild):

2012-12-03  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Document::initSecurityContext() fails to call securityOrigin().grantLoadLocalResources()
        https://bugs.webkit.org/show_bug.cgi?id=68711

        Reviewed by Adam Barth.

        It currently fails since Document::loader() will return 0 until
        Frame::setDocument is called and we are doing this check before it happens.

        Delay the check and let the FrameLoader take care of doing grantLoadLocalResources()
        on the Document along with other header checks in FrameLoader::didBeginDocument.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):

2012-12-03  Yong Li  <yoli@rim.com>

        ENABLE(IMAGE_DECODER_DOWN_SAMPLING): Should use TURBO_JPEG_RGB_SWIZZLE fast path for non-scaled images
        https://bugs.webkit.org/show_bug.cgi?id=103749

        Reviewed by Rob Buis.

        Replace !ENABLE(IMAGE_DECODER_DOWN_SAMPLING) with !m_scaled.

        No new tests as existing jpegs are good with IMAGE_DECODER_DOWN_SAMPLING set up.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::outputScanlines):

2012-12-03  Tommy Widenflycht  <tommyw@google.com>

        Speech Recognition API: Update SpeechRecognitionEvent to match the specification
        https://bugs.webkit.org/show_bug.cgi?id=103407

        Reviewed by Kentaro Hara.

        Specification for the Speech Recognition API:
        http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html

        This patch does the following:
        o Adds results, and removing result, on SpeechRecognitionEvent
        o Renaming SpeechRecognitionResult::final to isFinal
        o Removing emma from SpeechRecognitionResult

        The emma attribute is supposed to move from SpeechRecognitionResult to the SpeechRecognitionEvent,
        but that caused GC issues for unrelated code so it will be added later when properly fixed.

        Existing tests updated to test the new API.

        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::start):
        (WebCore::SpeechRecognition::didReceiveResults):
        (WebCore):
        * Modules/speech/SpeechRecognition.h:
        (SpeechRecognition):
        * Modules/speech/SpeechRecognitionEvent.cpp:
        (WebCore::SpeechRecognitionEvent::createResult):
        (WebCore):
        (WebCore::SpeechRecognitionEvent::SpeechRecognitionEvent):
        (WebCore::SpeechRecognitionEvent::~SpeechRecognitionEvent):
        * Modules/speech/SpeechRecognitionEvent.h:
        (SpeechRecognitionEventInit):
        (SpeechRecognitionEvent):
        (WebCore::SpeechRecognitionEvent::resultIndex):
        (WebCore::SpeechRecognitionEvent::results):
        * Modules/speech/SpeechRecognitionEvent.idl:
        * Modules/speech/SpeechRecognitionResult.cpp:
        * Modules/speech/SpeechRecognitionResult.h:
        (WebCore::SpeechRecognitionResult::isFinal):
        (SpeechRecognitionResult):
        * Modules/speech/SpeechRecognitionResult.idl:
        * WebCore.gypi:
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        (WebCore):
        * bindings/js/JSDictionary.h:
        * bindings/v8/Dictionary.cpp:
        (WebCore::Dictionary::get):
        (WebCore):
        * bindings/v8/Dictionary.h:
        (Dictionary):
        * bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp: Removed.

2012-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136377.
        http://trac.webkit.org/changeset/136377
        https://bugs.webkit.org/show_bug.cgi?id=103881

        Causes crashes on debug builds that use JSC. (Requested by
        mkwst on #webkit).

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didFailSocketStream):
        * css/MediaList.cpp:
        (WebCore::addResolutionWarningMessageToConsole):
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::processHttpEquiv):
        * dom/Document.h:
        (Document):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        * dom/ViewportArguments.cpp:
        (WebCore):
        (WebCore::parserLineNumber):
        (WebCore::reportViewportWarning):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::printWarningToConsole):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        (ConsoleMessage):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::count):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * page/Console.cpp:
        * page/Console.h:
        (Console):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::printErrorMessage):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore):
        (WebCore::parserLineNumber):
        (WebCore::reportMessage):
        * workers/WorkerContext.cpp:
        * workers/WorkerContext.h:
        (WorkerContext):

2012-12-03  Kihong Kwon  <kihong.kwon@samsung.com>

        Remove useless included header and change position of Proximity Events test cases
        https://bugs.webkit.org/show_bug.cgi?id=103871

        Reviewed by Antonio Gomes.

        Remove useless included header from DeviceProximityEvent.cpp.

        No new tests, It is just code refactoring.

        * Modules/proximity/DeviceProximityEvent.cpp:

2012-12-03  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [GStreamer] initial volume events on media elements should happen earlier
        https://bugs.webkit.org/show_bug.cgi?id=96912

        Reviewed by Philippe Normand.

        Update mediaelement volume and mute properties to whatever values
        playbin has as soon as possible (when the playbin reaches PAUSED state).
        This will improve user experience as the volume visuals won't suddenly
        change when user clicks play.

        No new tests: media/event-attributes.html already tests media events.
        Unfortunately this test is flaky on EFL and GTK (more specifically
        it is flaky on pulseaudio-using gstreamer platforms: http://webkit.org/b/83704).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2012-12-03  Alexis Menard  <alexis@webkit.org>

        Unreviewed build fix after r136378.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore):
        (WebCore::CSSPrimitiveValue::operator BackgroundEdgeOrigin):

2012-12-03  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Implement CSS3 background-position offsets rendering.
        https://bugs.webkit.org/show_bug.cgi?id=103440

        Reviewed by Julien Chaffraix.

        Add the rendering bits of the new background-position offsets. It adds
        new bits in FillLayer to store the edges used to position the
        background. The old x and y members are used the same way as before, to
        store the value of the offset.

        Test: fast/backgrounds/background-position-rendering.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createPositionListForLayer): Refactor into a function the
        code duplicated in getPropertyCSSValue to avoid more code
        duplication.
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        Add implicit conversion from the enums used in the rendering code to
        CSS values.
        (WebCore::CSSPrimitiveValue::operator BackgroundEdgeOrigin):
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillXPosition):
        (WebCore::CSSToStyleMap::mapFillYPosition):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Add
        support for the new positioning and refactor a little naming of the
        variables for better readability.
        * rendering/style/FillLayer.cpp:
        (SameSizeAsFillLayer):
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::fillUnsetProperties):
        (WebCore::FillLayer::fillUnsetProperties): When filling the layer with
        unset properties make sure we also set the x and y origins of the
        background in case they were set.
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::backgroundXOrigin):
        (WebCore::FillLayer::backgroundYOrigin):
        (WebCore::FillLayer::isBackgroundOriginSet):
        (FillLayer):
        (WebCore::FillLayer::setBackgroundXOrigin):
        (WebCore::FillLayer::setBackgroundYOrigin):
        (WebCore::FillLayer::clearPositionX):
        (WebCore::FillLayer::clearPositionY):
        * rendering/style/RenderStyleConstants.h:

2012-12-03  Mike West  <mkwst@chromium.org>

        Web Inspector: Autogenerate stack traces and line numbers when possible.
        https://bugs.webkit.org/show_bug.cgi?id=100650

        Reviewed by Yury Semikhatsky.

        Console messages generated in WebCore generally are asked to do a bit of
        work in order to provide a developer with a detailed report. We ask the
        caller to either generate stack traces, or pass in a url/line number
        pair, which can be a bit of work. Predictably, most callers don't pass
        in what we'd like to see.

        This patch creates a new, simpler console message generation API that we
        expect most call sites to use. Source, type, level, and message are
        required, and an optional request ID can be passed in. Everything else
        will be autogenerated inside ConsoleMessage when appropriate.

        In a subsequent patch, we expect to be able to trim down more of the
        external call sites (ContentSecurityPolicy springs to mind) in order to
        further consolidate the external interface. Simple is good.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didFailSocketStream):
            Drop the now-redundant URL parameter from various WebSocket errors.
        * css/MediaList.cpp:
        (WebCore::addResolutionWarningMessageToConsole):
            Switch to Document::addConsoleMessage, which means that we can move
            line-number generation out of MediaList.
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
            Use the long-form 'addMessage()' rather than the public interface.
        (WebCore::Document::processHttpEquiv):
            Drop the URL parameter, as it's now autogenerated.
        (WebCore::Document::addConsoleMessage):
        (WebCore):
        * dom/Document.h:
        (Document):
            Override the pure virtual method on ScriptExecutionContext, and pass
            the call through to the new Console::addMessage, which accepts a
            pointer to the Document in order to do line-number generation.
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
            Add a pure virtual variant of addConsoleMessage which accepts only
            bare minimum data, and expects autogeneration of the rest.
            Additionally, ensure that the other variants always have either a
            URL/line number, or a stack trace.
        * dom/ViewportArguments.cpp:
        (WebCore::reportViewportWarning):
            Drop line numbers and URLs from Viewport warnings. We can generate
            these now.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
            Drop the URL from form autofocus warnings
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
            Drop the URL and line from sandbox attribute warnings.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::printWarningToConsole):
            Drop the URL from WebGL warnings.
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
            Call 'autogenerateMetadata' to ensure that a stack trace is
            generated if one isn't provided. Create a new constructor that
            accepts a ScriptState/ScriptArguments pair, and use it for console
            API calls.
        (WebCore):
        (WebCore::ConsoleMessage::autogenerateMetadata):
            Generate a stack trace given whatever information we've got.
        * inspector/ConsoleMessage.h:
        (ConsoleMessage):
            Create a new constructor that accepts a ScriptState/ScriptArguments
            pair, and use it for console API calls.
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::enable):
            Use the short-form ConsoleMessage constructor.
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
            Use the stack-only constructor, or the ScriptState
            constructor, as appropriate.
        (WebCore::InspectorConsoleAgent::count):
            We generated a stack, pass it in.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
            Drop the URL parameter from the console message for X-Frame-Options
            parsing errors.
        * page/Console.cpp:
        (WebCore::Console::addMessage):
            When given a Document*, generate a line number if: 1) the document
            is still being parsed, 2) the document is not in document.write(),
            3) the parser isn't waiting for script, and 4) the parser isn't
            executing script. Many callsites didn't check all of these, which
            is why the SVG rebaseline (for example) drops lots and lots of line
            numbers which point at a closing '</script>' tag.
        (WebCore):
        * page/Console.h:
        (WebCore):
        (Console):
            Update the public API to accept a Document* and little else.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::printErrorMessage):
            Don't generate a stack here. We can do it later.
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::reportMessage):
            Drop the URL and line number. We'll generate them. It'll be sweet.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addConsoleMessage):
            Generate a stack here, as we likely won't have the context to do
            so later. Pass it through.
        (WebCore):
        * workers/WorkerContext.h:
        (WorkerContext):
            Implement the new addConsoleMessage variant.

2012-12-03  Gabor Rapcsanyi  <rgabor@webkit.org>

        [Qt] Remove an unnecessary masking from swapBgrToRgb()
        https://bugs.webkit.org/show_bug.cgi?id=103630

        Reviewed by Zoltan Herczeg.

        Get rid of a masking command in swapBgrToRgb() to speed up a little bit.

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

2012-12-03  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        CSS Device Adaptation: window.innerWidth returns wrong value if CSS viewport descriptors are applied
        https://bugs.webkit.org/show_bug.cgi?id=103737

        Reviewed by Kenneth Rohde Christiansen.

        ViewportStyleResolver used frame view visibleContentRect size as initial viewport size.
        This however caused a problem when page enabled/disabled CSS stylesheets, having viewport
        descriptors. Viewport descriptors from new stylesheet were applied to the visibleContentRect
        affected already by the viewport descriptors from the previous stylesheet.

        New 'initialViewportSize' property (http://dev.w3.org/csswg/css-device-adapt/#initial-viewport)
        was added to frame view so that viewport descriptors can always be applied to the reliable
        viewport size.

        Test: css3/device-adapt/viewport-width-check-window-innerwidth-correct.html

        * css/ViewportStyleResolver.cpp:
        (WebCore::ViewportStyleResolver::ViewportStyleResolver):
        (WebCore::ViewportStyleResolver::getViewportArgumentValue):
        * css/ViewportStyleResolver.h:
        (ViewportStyleResolver):
        * dom/Document.cpp:
        (WebCore):
        (WebCore::Document::initialViewportSize):
        * dom/Document.h:
        (Document):
        * page/FrameView.h:
        (FrameView):
        (WebCore::FrameView::initialViewportSize):
        (WebCore::FrameView::setInitialViewportSize):

2012-12-03  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Retain selector case as written in the source code
        https://bugs.webkit.org/show_bug.cgi?id=103118

        Reviewed by Antti Koivisto.

        This change:
        - adds parsing of selector group components in the CSSParser;
        - builds the SelectorList.selectors based on the source code whenever possible.
          Strips [multiline] comments and whitespace;
        - adds the MultilineMode to RegularExpression.

        Test: inspector/styles/selector-list.html

        * WebCore.exp.in: Update the exported symbol.
        * css/CSSGrammar.y.in: Add invocations for CSSParser::markSelector[Start|End]() as required.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::markSelectorStart): Gets invoked to mark a selector group item start offset.
        (WebCore::CSSParser::markSelectorEnd): Ditto for the end offset.
        * css/CSSParser.h: Add new methods and a SourceRange tracking field.
        * css/CSSPropertySourceData.h: Add SelectorRangeList to the CSSRuleSourceData.
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::selectorsFromSource): Builds the SelectorList based on the underlying source data.
        Strips comments and whitespace from selectors.
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        Builds SelectorList based on the availability of the source code.
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._markSelectorMatches):
        Update selectors in all cases to make use of the source-based information whenever possible.
        * platform/text/RegularExpression.cpp:
        Add the MultilineMode parameter into the constructor/factory method and ultimately pass it into YarrPattern.
        (WebCore::RegularExpression::Private::create): See above.
        (WebCore::RegularExpression::Private::Private): See above.
        (WebCore::RegularExpression::Private::compile): See above.
        (WebCore::RegularExpression::RegularExpression): See above.
        * platform/text/RegularExpression.h:
        Add enum MultilineMode, modify constructor and factory method signatures accordingly.

2012-12-02  Noel Gordon  <noel.gordon@gmail.com>

        ImageOrientation::transformFromDefault() case labels should be in numerical order
        https://bugs.webkit.org/show_bug.cgi?id=101596

        Reviewed by Simon Fraser.

        Place the orientation case labels in numerical order to better match the EXIF2.2 spec
        definitions of orientation values and their ImageOrientation.h enumeration.

        No change in behavior. Covered by existing tests:
           fast/images/exif-orientation-css.html
           fast/images/exif-orientation-image-document.html
           fast/images/exif-orientation.html

        * platform/graphics/ImageOrientation.cpp:
        (WebCore::ImageOrientation::transformFromDefault): Numerically order the orientation 
        case statement labels.

2012-12-02  Mary Wu  <mary.wu@torchmobile.com.cn>

        should sniff it if mimetype don't contain a slash.
        https://bugs.webkit.org/show_bug.cgi?id=102778

        Reviewed by George Staikos.

        Based on http://mimesniff.spec.whatwg.org/, a valid media type
        is the string represented by concatenating type, the string "/",
        and subtype. So if the mimetype don't contain slash, we should
        possible get sniffed type from the content like Firefox/chrome/safari.

        RIM Bug# 219590, internally reviewed by Liam Quinn.

        No new tests, the patch only impact qt/blackberry porting to be consistent
        with chrome, other portings have their own behavior.

        * platform/network/MIMESniffing.cpp:
        (std::isUnknownType):

2012-12-02  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Adding checks for null when checking cookie status in CookieJarBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=103748

        Reviewed by Rob Buis.

        The logic is flipped in the previous patch.

        * loader/blackberry/CookieJarBlackBerry.cpp:
        (WebCore::cookiesEnabled):

2012-12-02  Robert Hogan  <robert@webkit.org>

        Bad rendering of web page because of image's height is set to 100%
        https://bugs.webkit.org/show_bug.cgi?id=28035

        Reviewed by Eric Seidel.

        Call computeReplacedLogicalHeight() to get the correct logical height of a replaced element
        for calculating the element's width. RenderBox::computeLogicalHeightUsing() is a helper function designed for finding
        the min and max height values and is not the way to find the actual used height of a replaced element.

        WebKit's quirks-mode behaviour for the test case is unaffected by this change.

        Tests: fast/css/computed-image-width-with-percent-height-quirksmode.html
               fast/css/computed-image-width-with-percent-height.html

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):

2012-12-02  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] regionlayoutupdate event fires continuously
        https://bugs.webkit.org/show_bug.cgi?id=102101

        Reviewed by David Hyatt.

        According to the CSSRegions spec, http://dev.w3.org/csswg/css3-regions/#region-flow-layout-events, the regionlayoutupdate event
        should be dispatched when there is a possible layout change in the region chain.
        In the current implementation, regionlayoutupdate is dispatched when:
        1. a region from region chain changed its regionOverset value
        2. a region from region chain has regionOverset = fit| overset

        In the case of a named flow having an auto-height region with regionOverset = fit, the second step of layout was done
        also when there was not required, therefore the regionlayoutuodate was unnecessary triggered.

        We should proceed with the 2-pass layout only if the flow-thread having auto-height regions in region chain needs layout.

        Test: fast/regions/autoheight-regionlayoutupdate-multipletimes.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::hasRenderNamedFlowThreadsNeedingLayout):
        * rendering/FlowThreadController.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):

2012-12-02  Rik Cabanier  <cabanier@adobe.com>

        Extend JavaScript support for blending in canvas
        https://bugs.webkit.org/show_bug.cgi?id=101804

        Reviewed by Dirk Schulze.

        Added parsing code and variables to support additional canvas blend modes
        see spec: https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#canvascompositingandblending

        Test: canvas/philip/tests/2d.composite.globalComposite.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::State::operator=):
        (WebCore::CanvasRenderingContext2D::globalCompositeOperation):
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * html/canvas/CanvasRenderingContext2D.h:
        (State):
        * platform/graphics/GraphicsTypes.cpp:
        (WebCore):
        (WebCore::parseCompositeAndBlendOperator):
        (WebCore::compositeOperatorName):
        * platform/graphics/GraphicsTypes.h:

2012-12-02  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL] Fix build warning in GraphicsContext3DEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=103807

        Reviewed by Laszlo Gombos.

        Because GraphicsContext3D::ImageExtractor::extractImage is not implemented yet, 
        comment out the parameter names for removing -Wunused-parameter warnings.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

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

        Keep ElementAttributeData sharing cache open for a while after document parsing finishes.
        <http://webkit.org/b/103720>

        Reviewed by Antti Koivisto.

        Allow web pages that generate content dynamically to benefit more from the ElementAttributeData sharing
        cache by keeping it open for 10 seconds after document parsing finishes. This enables elements constructed
        from HTML fragments to share attribute data with other identical elements.

        Elements created via Document.createElement are still unsupported since we don't know the list of attributes
        at the time of construction.

        401kB progression on Membuster3.

        Document now holds on to a DocumentSharedObjectPool, accessible via Document::sharedObjectPool().
        It is non-null during parsing and for some time afterwards, and can be used to implement additional
        caches that are not worth holding on to permanently.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:

            Add new class DocumentSharedObjectPool.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setParsing):
        (WebCore::Document::finishedParsing):
        (WebCore::Document::sharedObjectPoolClearTimerFired):
        * dom/Document.h:
        (WebCore::Document::sharedObjectPool):

            Create DocumentSharedObjectPool when parsing starts, kill it on a 10s timer after parsing finishes.

        * dom/DocumentSharedObjectPool.cpp: Added.
        (ImmutableElementAttributeDataCacheKey):
        (WebCore::ImmutableElementAttributeDataCacheKey::ImmutableElementAttributeDataCacheKey):
        (WebCore::ImmutableElementAttributeDataCacheKey::operator!=):
        (WebCore::ImmutableElementAttributeDataCacheKey::hash):
        (ImmutableElementAttributeDataCacheEntry):
        (WebCore::ImmutableElementAttributeDataCacheEntry::ImmutableElementAttributeDataCacheEntry):
        (WebCore::DocumentSharedObjectPool::cachedImmutableElementAttributeData):
        (WebCore::DocumentSharedObjectPool::DocumentSharedObjectPool):
        (WebCore::DocumentSharedObjectPool::~DocumentSharedObjectPool):
        * dom/DocumentSharedObjectPool.h: Added.
        (DocumentSharedObjectPool):
        (WebCore::DocumentSharedObjectPool::create):
        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):

            Moved the ElementAttributeData cache to DocumentSharedObjectPool.

2012-12-02  John Bauman  <jbauman@chromium.org>

        [chromium] Let Pepper Flash use integrated GPU
        https://bugs.webkit.org/show_bug.cgi?id=103800

        Reviewed by Kenneth Russell.

        Pepper Flash uses the SharedGraphicsContext3D as a parent, so don't
        require that to use the discrete GPU. This means that accelerated
        canvas will use the integrated GPU, but that will save battery life
        and seems acceptable. 

        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3DImpl::createContext):

2012-12-02  Elliott Sprehn  <esprehn@gmail.com>

        documentElement should not always get a renderer
        https://bugs.webkit.org/show_bug.cgi?id=103475

        Reviewed by Ojan Vafai.

        Only SVG documents need a renderer on the documentElement when it's
        display: none. This behavior is wrong, but there's assumptions in
        FrameView and SVGImage that depend on a RenderSVGRoot existing for all
        loaded SVG document and images.

        The current code has logic that makes it appear as if we always create
        a renderer for the documentElement even when it's display: none, but
        because HTMLElement::createRenderer doesn't call super we end up with
        HTMLElement::rendererIsNeeded returning true for display: none, but
        HTMLElement::createRenderer returning null.

        Instead of this generic documentElement logic only special case SVG
        until someone can fix Bug 103493 so we don't need it.

        Test: fast/css/display-none-documentElement.html

        * dom/Element.cpp:
        (WebCore::Element::rendererIsNeeded):
        (WebCore::Element::createRenderer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::rendererIsNeeded):
        * svg/SVGSVGElement.h:
        (SVGSVGElement):

2012-12-02  Pan Deng  <pan.deng@intel.com>

        [Resource Timing] implementation of cross origin resouce timing restrictions.
        https://bugs.webkit.org/show_bug.cgi?id=84886.

        Reviewed by Tony Gentilcore.

        This patch implemented resource timing behaviors of cross origin. By default, detailed timing info is hided in cross origin resource timing, only startTime, duration, fetchStart and responseEnd can be observed. Exceptions are, server side allow its origin can be timing by another through a header with "timing-allow-origin" field.

        Tests: http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_cross_origin_resource_request.html
               http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_timing_allow_cross_origin_resource_request.html

        * page/Performance.cpp:
        (WebCore::passesTimingAllowCheck):
        (WebCore):
        (WebCore::Performance::addResourceTiming):
        * page/Performance.h:
        (WebCore):
        (Performance):
        * page/PerformanceResourceTiming.cpp:
        (WebCore):
        * page/PerformanceResourceTiming.h:
        (WebCore::PerformanceResourceTiming::create):
        (PerformanceResourceTiming):

2012-12-02  Elliott Sprehn  <esprehn@gmail.com>

        Simplify treeScope and setTreeScope
        https://bugs.webkit.org/show_bug.cgi?id=103708

        Reviewed by Hajime Morita.

        By making the default treeScope in NodeRareData the document and then
        moving the m_treeScope field to NodeRareDataBase we can make treeScope
        inline and make setTreeScope much simpler.

        There's also no reason to save calls to rareData() now that the map has
        been eliminated by r133372 so we can eliminate the return value from
        setTreeScope.

        No new tests, just refactoring.

        * WebCore.exp.in:
        * dom/Document.h:
        (WebCore::Node::treeScope):
        (WebCore):
        * dom/Element.cpp:
        (WebCore::Element::createRareData):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::setTreeScope):
        (WebCore::Node::createRareData):
        * dom/Node.h:
        (NodeRareDataBase):
        (WebCore::NodeRareDataBase::treeScope):
        (WebCore::NodeRareDataBase::setTreeScope):
        (WebCore::NodeRareDataBase::NodeRareDataBase):
        (Node):
        * dom/NodeRareData.cpp:
        (WebCore::NodeRareData::reportMemoryUsage):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):

2012-12-02  Justin Novosad  <junov@google.com>

        Fix occlusion culling logic to handle css background layer clipping
        https://bugs.webkit.org/show_bug.cgi?id=103276

        Reviewed by Simon Fraser.

        Bug was introduced by r135629
        This patch fixes it by verifying layer clip.  A fill layer must
        not be treated as if it occludes the layers under it unless it has
        a larger or equal clip setting than the layers under it.

        Test: fast/backgrounds/background-opaque-clipped-gradients.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayers):
        * rendering/style/FillLayer.cpp:
        (WebCore::clipMax):
        (WebCore::FillLayer::computeClipMax):
        (WebCore::FillLayer::clipOccludesNextLayers):
        * rendering/style/FillLayer.h:
        (FillLayer):

2012-12-02  Tony Chang  <tony@chromium.org>

        Avoid a second layout of flex items in layoutAndPlaceChildren()
        https://bugs.webkit.org/show_bug.cgi?id=102352

        Reviewed by Ojan Vafai.

        Avoid doing a second layout if we're going to get the same size as before.
        This prevents us from doing an exponential number of layouts in some
        common cases.

        Test: css3/flexbox/stretch-after-sibling-size-change.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::layout): Force a layout of the track, which positions the thumb.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::needToStretchChild): Determine if a child is going to stretch.
        (WebCore::RenderFlexibleBox::resetAutoMarginsAndLogicalTopInCrossAxis): Makes sure we're in a consistent state before
        we apply auto margins.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        * rendering/RenderFlexibleBox.h: Add needToStretchChild.

2012-12-02  Yongjun Zhang  <yongjun_zhang@apple.com>

        Need a method to close all idle localstorage databases immediately.
        https://bugs.webkit.org/show_bug.cgi?id=103469

        Reviewed by David Kilzer.

        Add a new PageGroup method closeIdleLocalStorageDatabases, which walks through
        all local storage areas that don't have document referencing to them and closes
        their underlying databases.

        Test: storage/domstorage/localstorage/close-idle-localstorage-databases-immediately.html

        * WebCore.exp.in:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::clearLocalStorageForOrigin):
        (WebCore):
        (WebCore::PageGroup::closeIdleLocalStorageDatabases): walking through all idle local storages and
            closing their databases.
        * page/PageGroup.h:
        (PageGroup):
        * storage/StorageArea.h:
        (WebCore::StorageArea::closeDatabaseIfIdle):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::closeDatabaseIfIdle): close the database if it is idle.
        (WebCore):
        * storage/StorageAreaImpl.h:
        (StorageAreaImpl):
        * storage/StorageNamespace.h:
        (StorageNamespace):
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::closeIdleLocalStorageDatabases):
        (WebCore):
        * storage/StorageNamespaceImpl.h:
        (StorageNamespaceImpl):

2012-12-02  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Adding checks for null when checking cookie status in CookieJarBlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=103748

        Reviewed by Rob Buis.

        Updating CookieJarBlackBerry::cookieEnabled and have other methods in the class call that
        method. Also, adding null checks for document->settings().

        No change in behaviour.

        * loader/blackberry/CookieJarBlackBerry.cpp:
        (WebCore::cookies):
        (WebCore::setCookies):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::cookieRequestHeaderFieldValue):

2012-12-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136236.
        http://trac.webkit.org/changeset/136236
        https://bugs.webkit.org/show_bug.cgi?id=103833

        [chromium] Flakey crashes in SpeechRecognitionEvent::emma
        during GC. (Requested by mkwst on #webkit).

        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::start):
        * Modules/speech/SpeechRecognition.h:
        (SpeechRecognition):
        * Modules/speech/SpeechRecognitionEvent.cpp:
        (WebCore::SpeechRecognitionEvent::SpeechRecognitionEvent):
        * Modules/speech/SpeechRecognitionEvent.h:
        (SpeechRecognitionEventInit):
        (SpeechRecognitionEvent):
        (WebCore::SpeechRecognitionEvent::resultIndex):
        * Modules/speech/SpeechRecognitionEvent.idl:
        * Modules/speech/SpeechRecognitionResult.cpp:
        (WebCore::emmaQualifiedName):
        (WebCore):
        (WebCore::SpeechRecognitionResult::emma):
        * Modules/speech/SpeechRecognitionResult.h:
        (WebCore):
        (WebCore::SpeechRecognitionResult::final):
        (SpeechRecognitionResult):
        * Modules/speech/SpeechRecognitionResult.idl:
        * WebCore.gypi:
        * bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8SpeechRecognitionEventCustom.cpp.
        (WebCore):
        (WebCore::V8SpeechRecognitionResult::opaqueRootForGC):

2012-12-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136015.
        http://trac.webkit.org/changeset/136015
        https://bugs.webkit.org/show_bug.cgi?id=103821

        Did not heal performance bot and caused other performance
        regressions (Requested by abarth on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):

2012-12-01  Xiaobo Wang  <xiaobo.wang@torchmobile.com.cn>

        DRT - crashed in WebCore::SearchFieldCancelButtonElement::defaultEventHandler
        https://bugs.webkit.org/show_bug.cgi?id=103592

        Reviewed by Kent Tamura.

        The crash happened when the search field cancel button handles mouseout
        event after the search input was detached. When it happens the input
        element returned from shadowHost() is null, need to check the pointer
        before dereferencing.
        InputFieldSpeechButton and SearchFieldResultsButtonElement have the
        similar issue.

        No new tests. The patch fixes the following test on BlackBerry platform.
        Test: fast/forms/search-delete-while-cancel-button-clicked.html

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::willRespondToMouseClickEvents):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::willRespondToMouseClickEvents):
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult):

2012-11-30  Mike West  <mkwst@chromium.org>

        CSP 1.1: Make the CSP_NEXT flag runtime enabled.
        https://bugs.webkit.org/show_bug.cgi?id=103652

        Reviewed by Adam Barth.

        Content Security Policy 1.1 continues to live behind the CSP_NEXT flag,
        this patch adds another layer on top of that in order to enable runtime
        decisions about whether it should be active.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::experimentalContentSecurityPolicyFeaturesEnabled):
        (WebCore::RuntimeEnabledFeatures::setExperimentalContentSecurityPolicyFeaturesEnabled):
            Adds methods in order to correctly handle enabling and disabling
            CSP 1.1 features.
        * dom/Document.idl:
            Gate the 'document.securityPolicy' object on the runtime flag.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::addDirective):
            Check that experimental features are runtime enabled before
            processing 1.1 directives.
        (WebCore::ContentSecurityPolicy::experimentalFeaturesEnabled):
        (WebCore):
        * page/ContentSecurityPolicy.h:
            Adds a new method which checks against the runtime flag to determine
            whether CSP 1.1 features are enabled.

2012-11-30  Simon Fraser  <simon.fraser@apple.com>

        Avoid calling into NSUserDefaults every time we start a scroll
        https://bugs.webkit.org/show_bug.cgi?id=103804

        Reviewed by Dan Bernstein.

        Cache the NSScrollAnimationEnabled preference to avoid
        hitting NSUserDefaults every time we start scrolling.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::scrollAnimationEnabledForSystem):

2012-11-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=103790
        The LayerPool m_pruneTimer should have a longer delay

        Reviewed by Simon Fraser.

        A 1 second delay is more appropriate here.
        * platform/graphics/ca/mac/LayerPool.mm:
        (WebCore::LayerPool::schedulePrune):

2012-11-30  Jer Noble  <jer.noble@apple.com>

        Unreviewed Windows build fix.

        Add a default: entry to an case statement to fix a build error when compiled in VS2005.

        * html/MediaController.cpp:
        (MediaController::playbackState):

2012-11-30  Jer Noble  <jer.noble@apple.com>

        Add support for the 'unpause()' method on MediaController.
        https://bugs.webkit.org/show_bug.cgi?id=103751

        Reviewed by Eric Carlson.

        The MediaController spec has been updated to add an unpause() method
        which is functionally identical to the old play() method, and changes
        the semantics of play() to call play() on the underlying slaved media
        elements. The spec also added a playbackState() method, returning a
        string representing the last calculated playback state.

        Test: media/media-controller-unpause.html

        * html/MediaController.cpp:
        (MediaController::unpause): Renamed from play().
        (MediaController::play): Added. Same as unpause(), but also call
            play() on slaved media elements.
        (playbackStateWaiting): Static string accessor.
        (playbackStatePlaying): Ditto.
        (playbackStateEnded): Ditto.
        (MediaController::playbackState): Added. Returns string value of
            m_playbackState.
        * html/MediaController.h:
        * html/MediaController.idl:

2012-11-30  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] Align the grid track code with the specification's production rules
        https://bugs.webkit.org/show_bug.cgi?id=103703

        Reviewed by Alexis Menard.

        In order to support more of the syntax and make the code more readable, this change
        splits following the grammar's production rules (see
        http://dev.w3.org/csswg/css3-grid-layout/#grid-definition-columns-and-grid-definit).

        Refactoring covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackMinMax):
        (WebCore::valueForGridTrackGroup):
        (WebCore::valueForGridTrackList):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseGridTrackGroup):
        (WebCore::CSSParser::parseGridTrackMinMax):
        * css/CSSParser.h:
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackMinMax):
        (WebCore::createGridTrackGroup):
        (WebCore::createGridTrackList):
        Mechanical split of the parsing, resolving and computed style code into
        <track-list>, <track-group>, <track-minmax> and <track-breadth> parts.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridBreadth):
        Changed this function to just parse a single value (without any extra logic).

        * css/StyleResolver.cpp:
        (WebCore::createGridTrackBreadth):
        Changed this function to take a Length as it is used to parse a <track-breadth>.
        The goal is for it to be the low-level function createGridTrackMinmax will call on
        each function parameter.

2012-11-30  Simon Fraser  <simon.fraser@apple.com>

        Fix potential crash when canceling animations on renderers with no node
        https://bugs.webkit.org/show_bug.cgi?id=103784

        Reviewed by Dan Bernstein.

        We could crash when tearing down RenderScrollbars because we hit
        AnimationController::cancelAnimations() for a renderer with no node.
        The assertion already check for a null node, but the line after
        does not, so fix that.

        I tried to make a test with animations/transitions on a custom scrollbar, but was not able
        to get it to crash.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::cancelAnimations):

2012-11-30  Tim Horton  <timothy_horton@apple.com>

        PluginDocument fires didFinishDocumentLoadForFrame upon receiving initial bytes instead of when load completes
        https://bugs.webkit.org/show_bug.cgi?id=103702
        <rdar://problem/12762534>

        Reviewed by Alexey Proskuryakov.

        Remove the call to finish() from PluginDocumentParser::appendBytes().

        This was introduced in http://trac.webkit.org/changeset/14838, when finish() wouldn't get
        called for PluginDocuments any other way. In the time since, DocumentWriter::end() was made
        to call finish() anyway, at the correct time (the call from appendBytes makes a PluginDocument
        appear to be finished loading after the first bytes are received).

        No new tests, because there doesn't seem to be any state in a PluginDocument that can be accessed
        from JavaScript to determine whether or not it has finished loading.

        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes):

2012-11-29  Ilya Tikhonovsky  <loislo@chromium.org>

        RenderBlock minor clean-up: replace raw pointers with OwnPtrs.
        https://bugs.webkit.org/show_bug.cgi?id=103690

        Reviewed by Eric Seidel.

        raw pointers were replaced with OwnPtrs.
        Probably we also gain a small performance improvements because
        I replaced get && remove pair with take.

        * rendering/RenderBlock.cpp:
        (WebCore):
        (WebCore::removeBlockFromDescendantAndContainerMaps):
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::addContinuationWithOutline):
        (WebCore::RenderBlock::paintContinuationOutlines):
        (WebCore::RenderBlock::insertIntoTrackedRendererMaps):
        (WebCore::RenderBlock::removeFromTrackedRendererMaps):
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
        * rendering/RenderBlock.h:
        (WebCore):

2012-11-30  Jun Jiang  <jun.a.jiang@intel.com>

        WebGL: Add a class to abstract the status of the Image in texImage2D() and texSubImage2D()
        https://bugs.webkit.org/show_bug.cgi?id=103606

        Reviewed by Kenneth Russell.

        In texImage2D() and texSubImage2D() for WebGL, the status of the Image is extracted and kept in the function GraphicsContext3D::getImageData() but provides no interface or guaranteed way to use the status of the Image outside GraphicsContext3D::getImageData() safely. For example, you can not get the address of the raw Image data and operate it outside the scope of the GraphicsContext3D::getImageData() and there is at least one memory copy existed from the Image to the intermediate vector.
       This patch refactors the code by adding a ImageExtractor class to abstract and keep the status of the Image. The lifetime and validity of Image status are determined by the lifetime of the object instead of the scope of getImageData(). It provides flexibility on future optimizations.

        No new tests. It is a code refactoring patch.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::texImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::ImageExtractor):
        (WebCore):
        (WebCore::GraphicsContext3D::packImageData):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore):
        (GraphicsContext3D):
        (ImageExtractor):
        (WebCore::GraphicsContext3D::ImageExtractor::extractSucceeded):
        (WebCore::GraphicsContext3D::ImageExtractor::imagePixelData):
        (WebCore::GraphicsContext3D::ImageExtractor::imageWidth):
        (WebCore::GraphicsContext3D::ImageExtractor::imageHeight):
        (WebCore::GraphicsContext3D::ImageExtractor::imageSourceFormat):
        (WebCore::GraphicsContext3D::ImageExtractor::imageAlphaOp):
        (WebCore::GraphicsContext3D::ImageExtractor::imageSourceUnpackAlignment):
        * platform/graphics/NativeImagePtr.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::~ImageExtractor):
        (WebCore):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::~ImageExtractor):
        (WebCore):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/clutter/GraphicsContext3DClutter.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::~ImageExtractor):
        (WebCore):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::~ImageExtractor):
        (WebCore):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::~ImageExtractor):
        (WebCore):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::~ImageExtractor):
        (WebCore):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

2012-11-30  Simon Fraser  <simon.fraser@apple.com>

        Make RenderLayer::updateLayerPosition() private
        https://bugs.webkit.org/show_bug.cgi?id=102624

        Reviewed by Ryosuke Niwa.

        Made updateLayerPosition() private. The only external caller was
        MouseRelatedEvent::computeRelativePosition(), which has no business updating
        layer positions. In fact it had positively dangerous behavior; doing just
        a style update without layout, and then calling absoluteToLocal() and walking
        layers. Fixed by having it call updateLayoutIgnorePendingStylesheets().
        
        This revealed a bug where event.offsetX/offsetY could be wrong in some cases.
        fast/events/stopPropagation-submit.html does a simulated click (which has
        client coordinates at 0,0), so the image submit coordinates were incorrectly
        0,0. Now that we do layout before computing them, they are correctly reported
        as being relative to the element.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-11-30  Simon Fraser  <simon.fraser@apple.com>

        Late-loading stylesheets can cause composited layers to be blank
        https://bugs.webkit.org/show_bug.cgi?id=103773

        Reviewed by Tim Horton.

        Early painting can be short-circuited in RenderBlock::paintContents() if we know a stylesheet
        is pending, which is done to avoid a flash of unstyled content (FOUC). When the stylesheet
        finally loaded, Document::styleResolverChanged() would try to repaint everything by calling
        repaint() on the RenderView(). In a composited world, however, this repaint() doesn't repaint
        composited layers.
        
        This was particularly prevalent on this specific URL because it failed to load
        a CSS file from typekit.com, so Document::styleResolverChanged()
        just did the repaint and returned (rather than doing a recalc style as would
        happen for correctly loaded stylesheets).
        
        Fix by making a way to repaint all compositing layers, and calling it
        from Document::styleResolverChanged().

        No tests because this is timing-dependant.

        * dom/Document.cpp:
        (WebCore::Document::styleResolverChanged): Call repaintViewAndCompositedLayers().
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents): Fix the comment.
        * rendering/RenderLayerCompositor.cpp: Convert repaintCompositedLayersAbsoluteRect()
        and associated recursiveRepaintLayerRect() to allow the rect to be null, which indicates
        that we should just repaint the entire layer, and improve their names.
        (WebCore::RenderLayerCompositor::repaintCompositedLayers):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayer):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers): repaintCompositedLayersAbsoluteRect()
        was renamed to repaintCompositedLayers().
        (WebCore::RenderView::repaintViewAndCompositedLayers):
        * rendering/RenderView.h:
        (RenderView): repaintViewRectangle() and repaintRectangleInViewAndCompositedLayers() should not
        be virtual. Add repaintViewAndCompositedLayers().

2012-11-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136142.
        http://trac.webkit.org/changeset/136142
        https://bugs.webkit.org/show_bug.cgi?id=103768

        break a bunch of interactive_ui_tests in chromium win
        (Requested by zhenyao_home on #webkit).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData):

2012-11-30  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Replace use of ScriptExecutionContext::Task (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=101483

        Reviewed by Tony Chang.

        The IDB back end (which runs on a single thread) makes use of ScriptExecutionContext's
        Task and facilities for cross-task posting with callbacks, and requires decorating various
        IDB classes with "ThreadSafe" when they are not. Move towards encapsulating the tasks
        in "Operation" classes which are IDB-operation specific.

        Part 1 (this patch) retains the use of ScriptExecutionContext::Task but wraps the creation
        and the callback function in an Operation class which will be fleshed out in later patches.
        As an aside, a little bit of RefPtr churn is eliminated, and IDB_TRACE sprinkled in.

        No new tests - just a refactor.

        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (IDBCursorBackendImpl::CursorIterationOperation):
        (WebCore::IDBCursorBackendImpl::CursorIterationOperation::create):
        (WebCore):
        (IDBCursorBackendImpl::CursorAdvanceOperation):
        (WebCore::IDBCursorBackendImpl::CursorAdvanceOperation::create):
        (IDBCursorBackendImpl::CursorPrefetchIterationOperation):
        (WebCore::IDBCursorBackendImpl::CursorPrefetchIterationOperation::create):
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::advance):
        (WebCore::IDBCursorBackendImpl::CursorAdvanceOperation::perform):
        (WebCore::IDBCursorBackendImpl::CursorIterationOperation::perform):
        (WebCore::IDBCursorBackendImpl::prefetchContinue):
        (WebCore::IDBCursorBackendImpl::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (IDBCursorBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (IDBDatabaseBackendImpl::CreateObjectStoreOperation):
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreOperation::create):
        (WebCore):
        (IDBDatabaseBackendImpl::DeleteObjectStoreOperation):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreOperation::create):
        (IDBDatabaseBackendImpl::VersionChangeOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::create):
        (IDBDatabaseBackendImpl::CreateObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreAbortOperation::create):
        (IDBDatabaseBackendImpl::DeleteObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreAbortOperation::create):
        (IDBDatabaseBackendImpl::VersionChangeAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::create):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackendImpl::CreateObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (IDBIndexBackendImpl::OpenIndexCursorOperation):
        (WebCore::IDBIndexBackendImpl::OpenIndexCursorOperation::create):
        (WebCore):
        (IDBIndexBackendImpl::IndexCountOperation):
        (WebCore::IDBIndexBackendImpl::IndexCountOperation::create):
        (IDBIndexBackendImpl::IndexReferencedValueRetrievalOperation):
        (WebCore::IDBIndexBackendImpl::IndexReferencedValueRetrievalOperation::create):
        (IDBIndexBackendImpl::IndexValueRetrievalOperation):
        (WebCore::IDBIndexBackendImpl::IndexValueRetrievalOperation::create):
        (WebCore::IDBIndexBackendImpl::OpenIndexCursorOperation::perform):
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        (WebCore::IDBIndexBackendImpl::IndexCountOperation::perform):
        (WebCore::IDBIndexBackendImpl::count):
        (WebCore::IDBIndexBackendImpl::IndexReferencedValueRetrievalOperation::perform):
        (WebCore::IDBIndexBackendImpl::IndexValueRetrievalOperation::perform):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        * Modules/indexeddb/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::metadata):
        (IDBIndexBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (IDBObjectStoreBackendImpl::ObjectStoreRetrievalOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreRetrievalOperation::create):
        (WebCore):
        (IDBObjectStoreBackendImpl::ObjectStoreStorageOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreStorageOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreIndexesReadyOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreIndexesReadyOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreDeletionOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreDeletionOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreClearOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreClearOperation::create):
        (IDBObjectStoreBackendImpl::CreateIndexOperation):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexOperation::create):
        (IDBObjectStoreBackendImpl::DeleteIndexOperation):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexOperation::create):
        (IDBObjectStoreBackendImpl::OpenObjectStoreCursorOperation):
        (WebCore::IDBObjectStoreBackendImpl::OpenObjectStoreCursorOperation::create):
        (IDBObjectStoreBackendImpl::ObjectStoreCountOperation):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreCountOperation::create):
        (IDBObjectStoreBackendImpl::CreateIndexAbortOperation):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexAbortOperation::create):
        (IDBObjectStoreBackendImpl::DeleteIndexAbortOperation):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexAbortOperation::create):
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreRetrievalOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReady):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreIndexesReadyOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreStorageOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreDeletionOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreClearOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::OpenObjectStoreCursorOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::count):
        (WebCore::IDBObjectStoreBackendImpl::ObjectStoreCountOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::CreateIndexAbortOperation::perform):
        (WebCore::IDBObjectStoreBackendImpl::DeleteIndexAbortOperation::perform):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):

2012-11-30  Tim Horton  <timothy_horton@apple.com>

        (Simple)PDFPlugin: Support conversion of PostScript documents
        https://bugs.webkit.org/show_bug.cgi?id=103289
        <rdar://problem/10235708>

        Reviewed by Dan Bernstein.

        SimplePDFPlugin (and PDFPlugin) should support converting PostScript files
        to PDF before handing them off to their respective backends.

        * English.lproj/Localizable.strings:
        * WebCore.exp.in:
        * platform/LocalizedStrings.cpp:
        (WebCore::postScriptDocumentTypeDescription):
        * platform/LocalizedStrings.h:
        Add and export postScriptDocumentTypeDescription, for PostScript files.

2012-11-30  Justin Novosad  <junov@google.com>

        [Chromium] Animation updates fail when using a canvas as a CSS backround-image style with -webkit-canvas
        https://bugs.webkit.org/show_bug.cgi?id=103643

        Reviewed by Stephen White.

        CanvasRenderingContext2D::didDraw was not propagating the change
        notification to observers in the accelerated compositing case.
        Problem fixed by adding observer notifications.

        New manual test: animated-canvas-as-background.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::didDraw):
        The observer notification was factored out into a separate method
        so that it can be invoked directly for accelerated compositing.
        (WebCore):
        (WebCore::HTMLCanvasElement::notifyObserversCanvasChanged):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::didDraw):
        Added observer notification call to trigger repainting of elements that
        use this canvas for their style.

2012-11-30  James Simonsen  <simonjam@chromium.org>

        Report CSS as initiator instead of elements, except body
        https://bugs.webkit.org/show_bug.cgi?id=103546

        Reviewed by Tony Gentilcore.

        The Resource Timing spec says the initiator should be "css" when the the load comes from a
        url() rule in a stylesheet. Separately, WebKit reports <body background> as a CSS load, we
        need to override that to match the spec.

        Tests: http/tests/w3c/webperf/submission/resource-timing

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedImage):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage): By default, the initiator is "css".
        * css/CSSImageValue.h:
        (CSSImageValue):
        (WebCore::CSSImageValue::setInitiator): Allow users to manually override it (see body).
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::collectStyleForPresentationAttribute): Record "body" as the initiator.

2012-11-30  James Simonsen  <simonjam@chromium.org>

        Remember the CachedResourceRequest for preloads
        https://bugs.webkit.org/show_bug.cgi?id=102995

        Reviewed by Tony Gentilcore.

        Without this, the initiator is lost.

        Tests: http/tests/w3c/webperf/submission/resource-timing

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::loadResource):
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::checkForPendingPreloads):
        (WebCore::CachedResourceLoader::requestPreload):
        (WebCore::CachedResourceLoader::isPreloaded):
        * loader/cache/CachedResourceLoader.h:
        (CachedResourceLoader):
        (PendingPreload):

2012-11-30  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Clamp input colors before blending
        https://bugs.webkit.org/show_bug.cgi?id=98962

        Reviewed by Dean Jackson.

        The result of css_ColorMatrix multiplication is now clamped in [0.0, 1.0]
        before the blending step.

        Relevant spec section is:
        http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#shader-processing-model

        Tests: css3/filters/custom/custom-filter-color-clamping-negative.html
               css3/filters/custom/custom-filter-color-clamping.html

        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::rewriteMixFragmentShader): Added clamping
        code.

2012-11-30  Abhishek Arya  <inferno@chromium.org>

        Crash due to intruding float not removed after writing mode changed.
        https://bugs.webkit.org/show_bug.cgi?id=100149

        Reviewed by Levi Weintraub.

        When RenderView writing mode changes, make sure to mark all descendants
        with floats for layout.

        Test: fast/block/float/intruding-float-not-removed-writing-mode.xhtml

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

2012-11-30  Florin Malita  <fmalita@chromium.org>

        SVG pattern data deleted while in use
        https://bugs.webkit.org/show_bug.cgi?id=103415

        Reviewed by Dirk Schulze.

        Various calls in RenderSVGResourcePattern::applyResource() can trigger invalidations,
        which may end up deleting our current pattern data (via removeAllClientsFromCache).
        To avoid this, we should add the pattern data to the cache only after it is fully built.
        For clarity, the patch also refactors the pattern setup code into a separate method.

        Test: svg/custom/large-image-pattern-crash.html

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/svg/RenderSVGResourcePattern.h:
        (RenderSVGResourcePattern):

2012-11-30  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: It's Sass, not SASS
        https://bugs.webkit.org/show_bug.cgi?id=103626

        Reviewed by Yury Semikhatsky.

        Change "SASS" to "Sass" in UI strings.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:

2012-11-29  Tommy Widenflycht  <tommyw@google.com>

        Speech Recognition API: Update SpeechRecognitionEvent/Result to match the specification
        https://bugs.webkit.org/show_bug.cgi?id=103407

        Reviewed by Adam Barth.

        This patch does the following:
        o Adds results, and removing result on SpeechRecognitionEvent
        o Renaming SpeechRecognitionResult::final to isFinal
        o Moving emma to SpeechRecognitionEvent from SpeechRecognitionResult

        Existing tests updated to test the new API.

        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::start):
        (WebCore::SpeechRecognition::didReceiveResults):
        (WebCore):
        * Modules/speech/SpeechRecognition.h:
        (SpeechRecognition):
        * Modules/speech/SpeechRecognitionEvent.cpp:
        (WebCore::SpeechRecognitionEvent::createResult):
        (WebCore):
        (WebCore::SpeechRecognitionEvent::SpeechRecognitionEvent):
        (WebCore::SpeechRecognitionEvent::~SpeechRecognitionEvent):
        (WebCore::emmaQualifiedName):
        (WebCore::SpeechRecognitionEvent::emma):
        * Modules/speech/SpeechRecognitionEvent.h:
        (WebCore):
        (SpeechRecognitionEventInit):
        (SpeechRecognitionEvent):
        (WebCore::SpeechRecognitionEvent::resultIndex):
        (WebCore::SpeechRecognitionEvent::results):
        * Modules/speech/SpeechRecognitionEvent.idl:
        * Modules/speech/SpeechRecognitionResult.cpp:
        * Modules/speech/SpeechRecognitionResult.h:
        (WebCore::SpeechRecognitionResult::isFinal):
        (SpeechRecognitionResult):
        * Modules/speech/SpeechRecognitionResult.idl:
        * WebCore.gypi:
        * bindings/v8/custom/V8SpeechRecognitionEventCustom.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp.
        (WebCore):
        (WebCore::V8SpeechRecognitionEvent::opaqueRootForGC):

2012-11-30  Simon Hausmann  <simon.hausmann@digia.com>, Pierre Rossi  <pierre.rossi@digia.com>

        [Qt] Separate Qt WebKit into Qt WebKit and Qt WebKit Widgets
        https://bugs.webkit.org/show_bug.cgi?id=99314

        Reviewed by Tor Arne Vestbø.

        This big change separates QtWebKit into QtWebKit and QtWebKitWidgets as
        shared libraries.

        It's a big refactoring that mostly involves moving WebCore dependent
        code into QtWebKit and accessing it through exported QWebFrameAdapter
        and QWebPageAdapter classes.

        * Target.pri:
        * platform/qt/QStyleFacade.h: Get rid of styleForPage function, not needed
        anymore.
        * platform/qt/QWebPageClient.h:
        (QWebPageClient): Remove a whole lot of cruft in favour of a simple GL enabling
        callback to select the GL texture mapper.
        (QWebPageClient::makeOpenGLContextCurrentIfAvailable):

2012-11-30  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed, rolling out r136227.
        http://trac.webkit.org/changeset/136227

        Broke the Qt bots due to version mismatch

        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp:
        (FullScreenVideoWindow::FullScreenVideoWindow):
        (PlatformVideoWindow::PlatformVideoWindow):

2012-11-30  Samuel Rødal  <samuel.rodal@digia.com>

        [Qt] Fixed use of to-be-removed compatibility functions in QWindow.

        Reviewed by Simon Hausmann.

        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp:
        (FullScreenVideoWindow::FullScreenVideoWindow):
        (PlatformVideoWindow::PlatformVideoWindow):

2012-11-30  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Caret is painted horizontally in vertical writing mode when there are no visible text
        https://bugs.webkit.org/show_bug.cgi?id=102359

        Reviewed by Ryosuke Niwa.

        In the vertical writing mode the caret rect on an empty editable box or
        an empty line is rendered as per the horizontal writing mode.

        This changes though when any text is added; the caret is then displayed
        in accordance with the vertical writing mode.

        Test: editing/selection/caret-alignment-for-vertical-text.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::localCaretRectForEmptyElement):
        The caret rect should be transposed for the vertical writing mode. Its
        width and height values need to be interchanged for it to be oriented
        as per the vertical text.

2012-11-30  Sankeerth V S  <sankeerth.vs@samsung.com>

        Web Inspector: [Timeline] JS error when clicking in Memory Statistics view
        https://bugs.webkit.org/show_bug.cgi?id=103486

        Reviewed by Alexander Pavlov.

        The counter value can be null/undefined. Hence a check is needed
        before we access the "time" property on this counter object.

        No new tests required as UI related change.

        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype._onClick):

2012-11-30  Kent Tamura  <tkent@chromium.org>

        Fix typos in DateTimeNumericFieldElement.cpp and DateTimeSymbolicFieldElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=103717

        Reviewed by Hajime Morita.

        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::customStyleForRenderer):
        maximum, not maxium.
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::customStyleForRenderer): Ditto.

2012-11-30  Halton Huo  <halton.huo@intel.com>

        [EFL] libwebcore_efl.a fail to link when enable webgl
        https://bugs.webkit.org/show_bug.cgi?id=103610

        Reviewed by Gyuyoung Kim.

        libwebcore_efl.a should link to X11, Xcomposite and Xrender libraries when ENABLE_WEBGL is ON

        No new tests, no behavior change for layout tests.

        * PlatformEfl.cmake: Append ${X11_X11_LIB}, ${X11_Xcomposite_LIB} and ${X11_Xrender_LIB} to WebCore_LIBRARIES

2012-11-30  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, fix the PDFPlugin build after http://trac.webkit.org/changeset/136205.

        * WebCore.xcodeproj/project.pbxproj:

2012-11-30  Mihai Maerean  <mmaerean@adobe.com>

        [CSSRegions] when WebKit uses V8, there should be a single variable to store if the CSS Regions feature is enabled
        https://bugs.webkit.org/show_bug.cgi?id=101192

        Reviewed by Hajime Morita.

        Removed the CSS Regions flag in Settings and switched to using the new flag I have added in RuntimeEnabledFeatures.

        Tests: No new tests because there is no functional change.

        * WebCore.exp.in:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        (WebCore::RuntimeEnabledFeatures::setCSSRegionsEnabled):
        (WebCore::RuntimeEnabledFeatures::cssRegionsEnabled):
        * dom/Document.cpp:
        (WebCore::Document::cssRegionsEnabled):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (Settings):

2012-11-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] WebKitWebViewBase creates a GL context for the redirected XComposite window crashing WebKit in Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=103476

        Reviewed by Alejandro G. Castro.

        Allow creation of RedirectedXCompositeWindow in a mode which does not have a backing
        GLContext. For WebKit2 the GLContext is always in the WebProcess. Creating the GLContext
        in both processes can cause crashes when library is run in Xvfb.

        No new tests. This fixes a crash running tests on some systems.

        * platform/gtk/RedirectedXCompositeWindow.cpp:
        (WebCore::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        (WebCore::RedirectedXCompositeWindow::resize): Do not create the GLContext when
        in the new no-GLContext mode.
        (WebCore::RedirectedXCompositeWindow::context): ASSERT that we are not in
        no-GLContext mode.

2012-11-29  Keishi Hattori  <keishi@webkit.org>

        Better type ahead for DateTimeSymbolicFieldElement
        https://bugs.webkit.org/show_bug.cgi?id=103031

        Reviewed by Kent Tamura.

        This cuts out the type ahead code that will be used by HTMLSelectElement
        and DateTimeSymbolicFieldElement into a TypeAhead class. This will
        improve DateTimeSymbolicFieldElement type ahead which was first
        character match only, by adding cycling, prefix match and index number
        match.

        Added tests to month-multiple-fields-keyboard-events.html.

        * GNUmakefile.list.am: Added TypeAhead.{h,cpp}
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * CMakeLists.txt: Ditto.
        * html/HTMLSelectElement.cpp:
        (WebCore):
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        (WebCore::HTMLSelectElement::indexOfSelectedOption): Returns index of current selection.
        (WebCore::HTMLSelectElement::optionCount): Returns total number of options.
        (WebCore::HTMLSelectElement::optionAtIndex): Returns option at index.
        (WebCore::HTMLSelectElement::typeAheadFind): Use TypeAhead.
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):
        * html/TypeAhead.cpp: Added.
        (WebCore):
        (WebCore::TypeAhead::TypeAhead):
        (WebCore::stripLeadingWhiteSpace): Moved from HTMLSelectElement.cpp.
        (WebCore::TypeAhead::handleEvent): Returns index for match.
        * html/TypeAhead.h: Added.
        (WebCore):
        (TypeAheadDataSource): Provide the data about the options that TypeAhead should match against.
        (TypeAhead):
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::DateTimeSymbolicFieldElement):
        (WebCore::DateTimeSymbolicFieldElement::handleKeyboardEvent):
        (WebCore::DateTimeSymbolicFieldElement::indexOfSelectedOption):
        (WebCore):
        (WebCore::DateTimeSymbolicFieldElement::optionCount):
        (WebCore::DateTimeSymbolicFieldElement::optionAtIndex):
        * html/shadow/DateTimeSymbolicFieldElement.h:
        (DateTimeSymbolicFieldElement):

2012-11-29  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] Add feature flag
        https://bugs.webkit.org/show_bug.cgi?id=103694

        Reviewed by Adam Barth.

        This flag will guard the implementation of the HTMLTemplateElement.
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.features.am:

2012-11-29  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        Fix typo in commit 136189
        https://bugs.webkit.org/show_bug.cgi?id=103706

        Reviewed by Kentaro Hara.

        Because of typo in commit 136189 blue color value was set twice for every pixel.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::setPixel):

2012-11-29  Elliott Sprehn  <esprehn@chromium.org>

        Node::isDescendantOf contains logic that duplicates isDocumentNode
        https://bugs.webkit.org/show_bug.cgi?id=103698

        Reviewed by Hajime Morita.

        Instead of checking for documents with node->document() == node just
        use node->isDocumentNode().

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

2012-11-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Forward cookie jar calls to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=103457

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        PlatformCookieJar.h functions are now used in WebKit2.

        * loader/CookieJar.cpp:
        (WebCore::cookies):
        (WebCore::setCookies):
        (WebCore::cookiesEnabled):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        Use a strategy instead of going to PlatformCookieJar directly.

        * platform/Cookie.h: (Cookie): Added a default constructor, so that Cookie could be
        sent over IPC.

        * platform/CookiesStrategy.h: Added functions for cookie jar.

2012-11-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136167.
        http://trac.webkit.org/changeset/136167
        https://bugs.webkit.org/show_bug.cgi?id=103701

        Win debug build failure (Requested by zhenyao on #webkit).

        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (LazyDecodingPixelRef):

2012-11-29  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Propagate more leveldb errors to script
        https://bugs.webkit.org/show_bug.cgi?id=103580

        Reviewed by Tony Chang.

        LevelDBDatabase used a single return value to indicate both I/O problems
        and a missing key. Now an out variable is used to indicate if the
        requested key was found. The return value is used to report corruption
        or disk error.

        This is a small step toward propagating low level errors everywhere
        possible. So far only one scenario will newly cause script to receive
        an error: when leveldb has trouble looking for existing keys during an
        objectstore->add.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::getInt):
        (WebCore::getVarInt):
        (WebCore::getString):
        (WebCore::IDBBackingStore::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::generateKey):
        (WebCore::IDBObjectStoreBackendImpl::updateKeyGenerator):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::safeGet):
        * platform/leveldb/LevelDBDatabase.h:
        (LevelDBDatabase):
        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::safeGet):
        (WebCore):
        (WebCore::LevelDBTransaction::get):
        * platform/leveldb/LevelDBTransaction.h:
        (LevelDBTransaction):

2012-11-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136171.
        http://trac.webkit.org/changeset/136171
        https://bugs.webkit.org/show_bug.cgi?id=103695

        Likely caused ReOpenedWithID and ReOpenedWithURL to fail in
        linux/chromeos (Requested by zhenyao on #webkit).

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::startMainThreadMonitoring):
        (WebCore::InspectorClient::stopMainThreadMonitoring):
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        (InspectorController):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willProcessTaskImpl):
        (WebCore::InspectorInstrumentation::didProcessTaskImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willProcessTask):
        (WebCore):
        (WebCore::InspectorInstrumentation::didProcessTask):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):

2012-11-29  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        Optimization in image decoding.
        https://bugs.webkit.org/show_bug.cgi?id=88424

        Reviewed by Brent Fulgham.

        Reduce branching and multiplications in JPEG image decoding loops and functions.
        Code is moved to the template functions with scale and color space template parameters
        because they were reason of branches inside loops. With templated funtions compiler
        will generate separate instance of function for every set of parameters removing
        unreachable code in every condition where constant value is used.

        Rebase and update of original patch by Misha Tyutyunik <michael.tyuytunik@nokia.com> .

        Thanks to Noel Gordon for his help in cleaning up remaining issues.

        Covered by existing tests.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore):
        (WebCore::setPixel):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (JPEGImageDecoder):

2012-11-29  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r135862.
        http://trac.webkit.org/changeset/135862
        https://bugs.webkit.org/show_bug.cgi?id=103367

        We've been observing 'Fatal error in
        v8::V8::AddMessageListener()' in bots

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8NonStringValueToWebCoreString):
        * bindings/v8/V8StringResource.cpp:
        (WebCore::int32ToWebCoreStringFast):
        (WebCore::int32ToWebCoreString):
        * bindings/v8/V8StringResource.h:
        (WebCore::V8StringResource::V8StringResource):
        (WebCore::V8StringResource::prepareBase):
        (WebCore::V8StringResource::setString):
        (V8StringResource):
        (WebCore::V8StringResource::toString):
        (WebCore::::prepare):

2012-11-29  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: optimize repaint regions upon text editing
        https://bugs.webkit.org/show_bug.cgi?id=103674

        Reviewed by Vsevolod Vlasov.

        There is a lot happening that makes repaint area larger than it should be,
        namely unnecessary tabbed pane and navigator updates.

        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype._updateScriptTitle):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPaneTab.prototype.set title):

2012-11-29  KyungTae Kim  <ktf.kim@samsung.com>

        Unused parameters on plugins/npapi.cpp
        https://bugs.webkit.org/show_bug.cgi?id=103676

        Reviewed by Kentaro Hara.

        Because 'instance' and 'menu' are not used when !PLATFORM(QT) || !defined(XP_MACOSX),
        use UNUSED_PARAM macro to fix build warning -Wunused-parameter

        * plugins/npapi.cpp:
        (NPN_PopUpContextMenu):

2012-11-29  Pablo Flouret  <pablof@motorola.com>

        REGRESSION(r134693): Compilation error on @supports grammar code
        https://bugs.webkit.org/show_bug.cgi?id=103678

        Reviewed by Tony Chang.

        Coming from https://bugs.webkit.org/show_bug.cgi?id=102295

        No new tests, compile fix.

        * css/CSSGrammar.y.in:

2012-11-29  Simon Fraser  <simon.fraser@apple.com>

        Avoid painting lots of small rects in WebLayer painting
        https://bugs.webkit.org/show_bug.cgi?id=103673

        Reviewed by Tim Horton.

        r109186 added code in drawLayerContents() to enumerate over the rects in
        the CALayer's dirty region, and paint them individually. This was done
        to help performance on the IE Maze Solver test.
        
        On large, complex pages like Facebook, the overhead of traversing the
        RenderLayer tree for painting is such that it's better to paint a single,
        or fewer rects rather than lots of little ones.
        
        So adopt a heuristic similar to that in DrawingArea, where if the
        combined area of the small rects is 75% or more of the combined rect,
        just paint the combined rect. Also paint the combined rect if there
        are more than 5 individual rects.
        
        I verified that this preserves the optimization for IE Maze Solver.

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2012-11-29  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: Web Inspector: Make main-thread monitoring go through InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=103550

        Reviewed by Pavel Feldman.

        InspectorInstrumentation was a wrong path.

        * inspector/InspectorClient.h: Remove start/stop methods.
        * inspector/InspectorController.cpp:
        Dispatch main thread activity notifications. 
        * inspector/InspectorController.h: Ditto.
        * inspector/InspectorInstrumentation.cpp: Remove dispatching.
        * inspector/InspectorInstrumentation.h: Ditto.
        * inspector/InspectorTimelineAgent.cpp:
        Do not subscribe for notifications explicitly.

2012-11-29  Adam Barth  <abarth@webkit.org>

        [V8] DOM callbacks shouldn't reimplement ScopedPersistent they should use it
        https://bugs.webkit.org/show_bug.cgi?id=103662

        Reviewed by Eric Seidel.

        This patch replaces yet another instance of the ScopedPersistent
        pattern with ScopedPersistent.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8SQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8MutationCallbackCustom.cpp:
        (WebCore::V8MutationCallback::handleEvent):

2012-11-29  Min Qin  <qinmin@chromium.org>

        Make LazyDecodingPixelRef inherit from skia::LazyPixelRef so that cc thread can access it
        https://bugs.webkit.org/show_bug.cgi?id=103555

        Reviewed by Stephen White.

        Expose LazyDecodingPixelRef to the cc thread by inheriting from skia::LazyPixelRef.
        No test added for now as impl side paiting is still WIP.

        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::PrepareToDecode):
        (WebCore):
        (WebCore::LazyDecodingPixelRef::Decode):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (LazyDecodingPixelRef):

2012-11-29  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed build fix.

        * WebCore.gypi:
        The new file is GridTrackSize.h not GridTrackSizes.h. For some reason, the
        EWS didn't complain.

2012-11-29  John Knottenbelt  <jknotten@chromium.org>

        Use GeolocationController's last geoposition as cached position.
        https://bugs.webkit.org/show_bug.cgi?id=103540

        Reviewed by Benjamin Poulain.

        The page's GeolocationController mediates access to the
        GeolocationClient for multiple frames' Geolocation instances. This
        patch changes the position cache to be on the GeolocationController
        rather than on the Geolocation instance.

        This fixes a bug where if one frame has has received a fresh
        position, then a request for a cached position from a second frame
        does not succeed because the Geolocation instance in the second
        frame's position cache hasn't received the position update that
        went to the first frame.

        Test: fast/dom/Geolocation/cached-position-iframe.html

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::makeCachedPositionCallbacks):
        (WebCore::Geolocation::haveSuitableCachedPosition):
        (WebCore::Geolocation::positionChanged):
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/GeolocationController.h:
        (GeolocationController):

2012-11-29  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Allow sorting in NMI snapshot grid view
        https://bugs.webkit.org/show_bug.cgi?id=102955

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotDataGrid.prototype.sortingChanged):
        (WebInspector.NativeSnapshotDataGrid.prototype._sortingFunction):
        (WebInspector.NativeSnapshotNode):
        (WebInspector.NativeSnapshotNode.prototype._storeState):
        (WebInspector.NativeSnapshotNode.prototype._restoreState):
        (WebInspector.NativeSnapshotNode.prototype.uid):
        (WebInspector.NativeSnapshotNode.prototype._createSizeCell):

2012-11-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Embed the HTTP authentication dialog into the WebView
        https://bugs.webkit.org/show_bug.cgi?id=103277

        Reviewed by Carlos Garcia Campos.

        Refactor the WebCore authentication dialog so that it can be reused for the WebKit2
        embedded authentication dialog. The main purpose of this refactor is so that the
        dialog does not rely on GtkDialog to add the action buttons to the dialog itself.
        This also simplifies the structure of the dialog, using the GtkTable or GtkGrid to
        contain more of the widget elements, greatly simplifying this code. We also expose
        a new constructor that does not create the parent GtkDialog -- so that WebKit2
        can embed the dialog directly into the WebView.

        No new tests. This shouldn't change behavior, only slightly the look of the authentication
        dialog.

        * platform/gtk/GtkAuthenticationDialog.cpp:
        (WebCore::GtkAuthenticationDialog::GtkAuthenticationDialog): Added this new constructor
        which does not add the dialog contents to a GtkDialog.
        (WebCore::packTwoColumnLayoutInBox): Added this generic method for creating a two column
        layout in the style the dialog box needs (for both GTK+ 2.x and GTK+ 3.x).
        (WebCore::createDialogLabel): Added this helper.
        (WebCore::createDialogEntry): ditto.
        (WebCore::GtkAuthenticationDialog::createContentsInContainer): Added this method which
        can be used by subclasses to add the guts of the dialog to the parent container.
        (WebCore::GtkAuthenticationDialog::show): Added some focus/default handling code that
        GtkDialog was calling before.
        (WebCore::GtkAuthenticationDialog::buttonClickedCallback): Added a button clicked handler.
        Before GtkDialog handled this.
        * platform/gtk/GtkAuthenticationDialog.h: Updated methods to reflect new functionality.
        (WebCore::GtkAuthenticationDialog::~GtkAuthenticationDialog): Inline the default constructor.

2012-11-29  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=103577
        TiledDrawingArea should recycle tiles
        -and corresponding-
        <rdar://problem/12714586>

        Reviewed by Simon Fraser.

        New class LayerPool will keep a list of layers to reuse so that 
        we can avoid creating and destroying so many layer.

        When removing layers, add them to the LayerPool
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::revalidateTiles):

        Before creating a new layer, try to get one of the appropriate size 
        from the LayerPool.
        (WebCore::TileCache::createTileLayer):

        New class.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/mac/LayerPool.h: Added.
        (WebCore):
        (LayerPool):
        (WebCore::LayerPool::capacity):
        (WebCore::LayerPool::canReuseLayerWithSize):
        * platform/graphics/ca/mac/LayerPool.mm: Added.
        (WebCore):
        (WebCore::LayerPool:: LayerPool):
        (WebCore::LayerPool::sharedPool):
        (WebCore::LayerPool::bytesBackingLayerWithPixelSize):
        (WebCore::LayerPool::listOfLayersWithSize):
        (WebCore::LayerPool::addLayer):
        (WebCore::LayerPool::takeLayerWithSize):
        (WebCore::LayerPool::decayedCapacity):
        (WebCore::LayerPool::schedulePrune):
        (WebCore::LayerPool::prune):
        (WebCore::LayerPool::drain):

        If we're under memory pressure, drain the LayerPool
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):

2012-11-29  Julien Chaffraix  <jchaffraix@webkit.org>

        [CSS Grid Layout] track sizing functions should have their own type
        https://bugs.webkit.org/show_bug.cgi?id=103343

        Reviewed by Tony Chang.

        The current code uses a Length to represent the track sizing function. This is
        fine as we only parse <length> | <percentage> but in order to support minmax
        sizing, we have to store 2 Lengths. We could go with a pair but that would make
        the code not very readable so this change introduces GridTrackSize.

        Refactoring, covered by existing tests.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added GridTrackSize.h to all our build systems.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackBreadth):
        (WebCore::valueForGridTrackList):
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackBreadth):
        (WebCore::createGridTrackList):
        (WebCore::StyleResolver::applyProperty):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computePreferredLogicalWidths):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        * rendering/style/RenderStyle.h:
        Updated the above call sites to use GridTrackSize. While
        touching them, changed the code to use an empty Vector to represent
        'none' instead of Length(Undefined).

        * rendering/style/StyleGridData.h:
        Updated #include, removed a comment as it would have gone stale after
        adding more grammar support and added a FIXME to rename some variables.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):
        Implemented a work-around to avoid crashing due to implicit columns / rows.

        * rendering/style/GridTrackSize.h: Added.
        (WebCore::GridTrackSize::GridTrackSize):
        (WebCore::GridTrackSize::length):
        (WebCore::GridTrackSize::setLength):
        (WebCore::GridTrackSize::type):
        (WebCore::GridTrackSize::operator==):
        New class, it now only wraps a single Length.

2012-11-29  Helder Correia  <helder.correia@nokia.com>

        Typo in Color creation function name
        https://bugs.webkit.org/show_bug.cgi?id=103464

        Reviewed by Alexey Proskuryakov.

        Renaming createUnCheked() as createUnchecked().

        No new tests.

        * platform/graphics/Color.cpp:
        (WebCore::colorFromPremultipliedARGB):
        * platform/graphics/Color.h:
        (WebCore::Color::createUnchecked):

2012-11-29  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Cookies in private mode should not have access to public cookies
        https://bugs.webkit.org/show_bug.cgi?id=103649

        Reviewed by Rob Buis.

        PR 253983

        When CookieManager switches back from public to private mode,
        we will clear the cookie tree so the browser won't have access
        to the public cookies.

        Tested using browser.swlab.rim.net cookie tests and the steps in
        the PR.

        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::setPrivateMode):

2012-11-29  Brent Fulgham  <bfulgham@gmail.com>

        Be consistent in handling of frameAtIndex (and related) returns.
        https://bugs.webkit.org/show_bug.cgi?id=103207

        Reviewed by David Hyatt.

        Under various conditions, frameAtIndex (and therefore,
        nativeImageForCurrentFrame) returns null. A series of bugs over
        the years has ensured null returns are handled in some cases,
        but there are a handful of remaining cases where this is still a
        problem. 

        No new tests, as these low-level functions are covered by
        numerous existing test cases.

2012-11-29  David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Add minimum column height tracking and forced break tracking to column sets.
        https://bugs.webkit.org/show_bug.cgi?id=103657

        Reviewed by Simon Fraser.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        * rendering/RenderMultiColumnSet.h:
        (WebCore::RenderMultiColumnSet::updateMinimumColumnHeight):
        (WebCore::RenderMultiColumnSet::minimumColumnHeight):
        (RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::forcedBreaksCount):
        (WebCore::RenderMultiColumnSet::forcedBreakOffset):
        (WebCore::RenderMultiColumnSet::maximumDistanceBetweenForcedBreaks):
        (WebCore::RenderMultiColumnSet::clearForcedBreaks):
        (WebCore::RenderMultiColumnSet::addForcedBreak):

2012-11-29  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce fast case for within-chunk edit
        https://bugs.webkit.org/show_bug.cgi?id=103545

        Reviewed by Vsevolod Vlasov.

        Special-casing edits within the chunk for faster operation.

        * inspector/front-end/DOMExtension.js:
        (removeSubsequentNodes):
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):

2012-11-29  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Console: hovering node wrappers in object tree should highlight them on the page
        https://bugs.webkit.org/show_bug.cgi?id=101150

        Reviewed by Vsevolod Vlasov.

        - Introduced a way to highlight nodes by object id in addition to node id.
        - Decorated nodes in the object tree outline and added on-hover highlighting.

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightNode):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._appendPropertyPreview):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.highlightDOMNode):
        * inspector/front-end/DOMPresentationUtils.js:
        (WebInspector.DOMPresentationUtils.createSpansForNodeTitle):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype._mouseMove):
        (WebInspector.ObjectPropertyTreeElement.prototype._mouseOut):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.highlightAsDOMNode):
        (WebInspector.RemoteObject.prototype.hideDOMNodeHighlight):
        * inspector/front-end/TestController.js:
        * inspector/front-end/externs.js:
        * inspector/front-end/inspector.css:
        (.console-formatted-node:hover):
        * inspector/front-end/utilities.js:

2012-11-29  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12771885> Support ruby-position: {before, after}
        https://bugs.webkit.org/show_bug.cgi?id=103569

        Reviewed by Anders Carlsson.

        Specified in <http://www.w3.org/TR/2011/WD-css3-ruby-20110630/#rubypos>, the ruby-position
        property takes four values: before, after, inter-character, and inline. This change adds
        support for the values before and after.

        Test: fast/ruby/position-after.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Handle ruby-position.
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue): Accept before and after as valid values for
        ruby-position.
        (WebCore::isKeywordPropertyID): Added ruby-position to the list of properties with keyword
        values.
        (WebCore::CSSParser::parseValue): Added ruby-position to the switch statement.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added mapping from RubyPosition.
        (WebCore::CSSPrimitiveValue::operator RubyPosition): Added mapping from CSSPrimitiveValue.
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty): Added ruby-position as an inherited property.
        * css/CSSPropertyNames.in: Added -webkit-ruby-position.
        * css/CSSValueKeywords.in: Added after and before.
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder): Added a handler for ruby-position.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty): Added ruby-position.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection): Changed to choose which of
        hasAnnotationsBefore and hasAnnotationsAfter to set based on ruby position.
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment): Changed to adjust only for
        ruby positioned before the base.
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment): Added adjustment for ruby
        positioned after the base.
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout): Account for ruby-position when positioning the ruby text
        relative to the base.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): Made a ruby-position difference a layout difference.
        * rendering/style/RenderStyle.h: Added rubyPosition(), setRubyPosition(), and 
        initialRubyPosition().
        * rendering/style/RenderStyleConstants.h: Added the RubyPosition enum.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Added initialized for
        m_rubyPosition. Added copying the value of this member to the copy constructor.
        (WebCore::StyleRareInheritedData::operator==): Added comparison of m_rubyPosition.
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData): Added m_rubyPosition member variable.

2012-11-29  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        Internally Reviewed by Eli Fidler.
        Set text color after buttons are pressed.

        * css/themeBlackBerry.css:
        (input[type="button"]:active, input[type="submit"]:active, input[type="reset"]:active, input[type="file"]:active::-webkit-file-upload-button, button:active):
        (select:active):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):
        (WebCore::RenderThemeBlackBerry::paintButton):
        (WebCore::RenderThemeBlackBerry::paintMenuList):

2012-11-29  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurfaceGLX: remove redundant parameter from resolveGLMethods.
        https://bugs.webkit.org/show_bug.cgi?id=103636

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::resolveGLMethods):
        (WebCore::GraphicsSurface::platformCreate):
        (WebCore::GraphicsSurface::platformImport):

2012-11-29  Mike West  <mkwst@chromium.org>

        Typo in 'autofocus' sandboxing error message.
        https://bugs.webkit.org/show_bug.cgi?id=103616

        Reviewed by Jochen Eisinger.

        The sandbox attribute name is 'allow-scripts', not 'allow-script'. :(

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

2012-11-29  Hajime Morrita  <morrita@google.com>

        HTMLMediaElement's .textTracks property does not reflect <track> element
        https://bugs.webkit.org/show_bug.cgi?id=103420

        Reviewed by Eric Carlson.

        There were some assumptions that <track> elements are valid only
        if the parent <media> is in document. This change relaxes this
        assumption so that <track> is valid when it has <media> as a
        parent regardless whether the <media> is in the document or not.

        HTMLMediaElement::didAddTrack and didRemoveTrack are now called
        when the <track> is inserted to or removed from the parent <media>
        element.

        Test: media/track/track-node-add-remove.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didRemoveTrack):
        Renamed from willRemoveTrack() to reflect the timing. This was once called from
        Node::willRemove(), which was removed a while ago.
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedInto):
        The old code notified parent <media> only if the subtree became a part of the document.
        Now it notifies the <media> when this <track> becomes a child of that <media>.

        (WebCore::HTMLTrackElement::removedFrom):
        The old code notifies the parent <media> every time as long as the parent is available.
        Now it notifies the <media> only if this <track> is removed from the parent <media>.
        This matches how corresponding notification is done in insertedInto().

        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::trackElementIndex):

2012-11-29  Florin Malita  <fmalita@chromium.org>

        [Skia] Add missing OpaqueRegionSkia notifier calls
        https://bugs.webkit.org/show_bug.cgi?id=102824

        Reviewed by Stephen White.

        http://trac.webkit.org/changeset/135390 exposed some canvas draw clients which are not
        updating the opaque region tracker. This patch adds the required notifier calls.

        No new tests: platform unit tests added.

        * platform/graphics/skia/OpaqueRegionSkia.h:
        (OpaqueRegionSkia):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::writePixels):
        (WebCore::PlatformContextSkia::drawBitmap):
        (WebCore::PlatformContextSkia::drawBitmapRect):
        (WebCore::PlatformContextSkia::drawIRect):
        (WebCore::PlatformContextSkia::drawPosText):
        (WebCore::PlatformContextSkia::drawPosTextH):
        (WebCore::PlatformContextSkia::drawTextOnPath):

2012-11-29  Andy Shaw  <andy.shaw@digia.com>

        [Qt] Implement support for Cocoa based NPAPI plugins on Mac
        https://bugs.webkit.org/show_bug.cgi?id=72358

        Reviewed by Simon Hausmann.

        With later versions of Flash they are only Cocoa based which meant that it was not possible to use Flash in a QtWebKit browser.
        This makes it possible to also use 64bit based plugins too.  

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::initializeBrowserFuncs):
        (WebCore):
        * plugins/PluginQuirkSet.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::PluginView):
        (WebCore):
        (WebCore::PluginView::userAgent):
        * plugins/PluginView.h:
        (WebCore):
        (PluginView):
        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::PluginPackage::fetchInfo):
        * plugins/mac/PluginViewMac.mm:
        (WebCore):
        (WebCore::initializeNPCocoaEvent):
        (WebCore::getModifiers):
        (WebCore::PluginView::platformStart):
        * plugins/npapi.cpp:
        (NPN_PopUpContextMenu):
        * plugins/npapi.h:

2012-11-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136111.
        http://trac.webkit.org/changeset/136111
        https://bugs.webkit.org/show_bug.cgi?id=103620

        Broke compilation on Mac (unused private field m_matchMode)
        (Requested by apavlov on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLSelectElement.cpp:
        (WebCore):
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        (WebCore::stripLeadingWhiteSpace):
        (WebCore::HTMLSelectElement::typeAheadFind):
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):
        * html/TypeAhead.cpp: Removed.
        * html/TypeAhead.h: Removed.
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::DateTimeSymbolicFieldElement):
        (WebCore::DateTimeSymbolicFieldElement::handleKeyboardEvent):
        * html/shadow/DateTimeSymbolicFieldElement.h:
        (DateTimeSymbolicFieldElement):

2012-11-29  Keishi Hattori  <keishi@webkit.org>

        Better type ahead for DateTimeSymbolicFieldElement
        https://bugs.webkit.org/show_bug.cgi?id=103031

        Reviewed by Kent Tamura.

        This cuts out the type ahead code that will be used by HTMLSelectElement
        and DateTimeSymbolicFieldElement into a TypeAhead class. This will
        improve DateTimeSymbolicFieldElement type ahead which was first
        character match only, by adding cycling, prefix match and index number
        match.

        Added tests to month-multiple-fields-keyboard-events.html.

        * GNUmakefile.list.am: Added TypeAhead.{h,cpp}
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * CMakeLists.txt: Ditto.
        * html/HTMLSelectElement.cpp:
        (WebCore):
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        (WebCore::HTMLSelectElement::indexOfSelectedOption): Returns index of current selection.
        (WebCore::HTMLSelectElement::optionCount): Returns total number of options.
        (WebCore::HTMLSelectElement::optionAtIndex): Returns option at index.
        (WebCore::HTMLSelectElement::typeAheadFind): Use TypeAhead.
        * html/HTMLSelectElement.h:
        (HTMLSelectElement):
        * html/TypeAhead.cpp: Added.
        (WebCore):
        (WebCore::TypeAhead::TypeAhead):
        (WebCore::stripLeadingWhiteSpace): Moved from HTMLSelectElement.cpp.
        (WebCore::TypeAhead::handleEvent): Returns index for match.
        * html/TypeAhead.h: Added.
        (WebCore):
        (TypeAheadDataSource): Provide the data about the options that TypeAhead should match against.
        (TypeAhead):
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::DateTimeSymbolicFieldElement):
        (WebCore::DateTimeSymbolicFieldElement::handleKeyboardEvent):
        (WebCore::DateTimeSymbolicFieldElement::indexOfSelectedOption):
        (WebCore):
        (WebCore::DateTimeSymbolicFieldElement::optionCount):
        (WebCore::DateTimeSymbolicFieldElement::optionAtIndex):
        * html/shadow/DateTimeSymbolicFieldElement.h:
        (DateTimeSymbolicFieldElement):

2012-11-29  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Fix content node renderers ordering inside the named flow thread
        https://bugs.webkit.org/show_bug.cgi?id=103501

        Reviewed by David Hyatt.

        This patch fixes two issues with how content nodes renderers are added to a named flow thread.
        The first issue was about determining the insertion position of a renderer inside the children list of a named flow thread. Before this patch, the
        insertion point was based on both the DOM ordering of the elements and insertion order of previous renderers.
        The patch fixes this and makes the renderer position just a function of the DOM ordering of elements.
        The second issue appeared when next/previousRenderer methods were skipping nodes because they had the flow-into property as a side effect
        of copying the style of the parent element (e.g. Text nodes). The patch ensures the skipped nodes are also elements.

        Tests: fast/regions/named-flow-content-order-1.html
               fast/regions/named-flow-content-order-2.html
               fast/regions/named-flow-content-order-3.html

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::nextRenderer): Skip only elements.
        (WebCore::NodeRenderingContext::previousRenderer): Skip only elements.
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::addFlowChild): Insert the renderer in the list based on the DOM position of the owner element.
        * rendering/RenderNamedFlowThread.h:
        (RenderNamedFlowThread):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::renderNamedFlowThreadWrapper): Rename to eliminate the confusion with enclosingRenderFlowThread.
        (WebCore::RenderObject::insertedIntoTree):
        (WebCore::RenderObject::willBeRemovedFromTree):
        * rendering/RenderObject.h:
        (RenderObject):

2012-11-28  Mike West  <mkwst@chromium.org>

        Add a test to ensure that 'seamless' iframes do not inherit contenteditable.
        https://bugs.webkit.org/show_bug.cgi?id=95890

        Reviewed by Ojan Vafai.

        We don't currently support inheriting contenteditable into a seamless
        frame. http://html5.org/tools/web-apps-tracker?from=7318&to=7319
        brought the spec in line with WebKit's behavior (ha!). This patch
        defends the behavior by adding a test, and removes a FIXME comment
        now that the question is settled.

        It also exposes a brand new bug: https://bugs.webkit.org/show_bug.cgi?id=103539
        How exciting.

        Test: fast/frames/seamless/seamless-contenteditable-not-inherited.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForDocument):
            No functional change, just dropping a FIXME comment.

2012-11-28  Mike West  <mkwst@chromium.org>

        Web Inspector: Console message's anchor element should be trimmed for readability.
        https://bugs.webkit.org/show_bug.cgi?id=100095

        Reviewed by Pavel Feldman.

        We're currently trimming URLs that go through
        'WebInspector.linkifyURLAsNode' down to 150 characters total. Not all
        URLs go that path, however. We were missing a few cases that dropped
        back to the default Linkifier (which especially showed up for "Live"
        anchor elements).

        This patch ensures that anything using WebInspector.Linkifier is also
        trimmed by default. It adds a new constant to do so in order to avoid
        magic numbers in the code.

        Test: http/tests/inspector/network/script-as-text-loading-long-url.html

        * inspector/front-end/Linkifier.js:
        (WebInspector.Linkifier):
            Pass the max length into the default formatter that's created and
            stored when creating a 'WebInspector.Linkifier' object.
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.linkifyURLAsNode):
            Use the new maxlength constant rather than hard-coding 150.

2012-11-28  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8Fast):

2012-11-28  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] ShadowRoot should cache InsertionPointList.
        https://bugs.webkit.org/show_bug.cgi?id=103212

        Reviewed by Hajime Morita.

        When distributing or invalidating distribution, we used to traverse all descendent nodes in Shadow DOM.
        If ShadowRoot has a InsertionPoint list, we can just traverse the list.

        No new tests, should be covered by existing tests.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertionPointList):
        (WebCore):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ShadowRootContentDistributionData::ShadowRootContentDistributionData):
        (WebCore::ShadowRootContentDistributionData::invalidateInsertionPointList):
        (WebCore):
        (WebCore::ShadowRootContentDistributionData::ensureInsertionPointList): Creates InsertionPoint list
        if it's not created and return it.
        (WebCore::ContentDistributor::distribute): Traverse InsertionPointList instead of all descendent nodes in Shadow DOM.
        (WebCore::ContentDistributor::invalidate): ditto.
        * html/shadow/ContentDistributor.h:
        (WebCore::ShadowRootContentDistributionData::incrementNumberOfShadowElementChildren): Invalidate InsertionPointList cache.
        (WebCore::ShadowRootContentDistributionData::decrementNumberOfShadowElementChildren): ditto.
        (WebCore::ShadowRootContentDistributionData::incrementNumberOfContentElementChildren): ditto.
        (WebCore::ShadowRootContentDistributionData::decrementNumberOfContentElementChildren): ditto.
        (ShadowRootContentDistributionData):

2012-11-28  Michael Pruett  <michael@68k.org>

        IndexedDB: Remove duplicate toWireString() and createFromWire() methods in JSC SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=103554

        Reviewed by Kentaro Hara.

        In r135022, duplicate createFromWire() and toWireString() methods
        were added to the JSC version of SerializedScriptValue. In
        order to allow the JSC SerializedScriptValue to compile when
        ENABLE(INDEXED_DATABASE) is turned on, these new methods have
        been removed and the old methods have been moved outside the
        ENABLE(INDEXED_DATABASE) guard.

        No new tests. No change in functionality.

        * WebCore.exp.in:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::toWireString):
        (WebCore):
        (WebCore::SerializedScriptValue::createFromWire):
        * bindings/js/SerializedScriptValue.h:

2012-11-28  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Element.createShadowRoot() should be prefixed.
        https://bugs.webkit.org/show_bug.cgi?id=103595

        Reviewed by Kentaro Hara.

        No new tests, updated shadow-aware-create-shadow-root.html to follow the change.

        * dom/Element.idl:

2012-11-28  Hayato Ito  <hayato@chromium.org>

        Node::compareDocumentPosition returns wrong value for a node in the different shadow tree.
        https://bugs.webkit.org/show_bug.cgi?id=103502

        Reviewed by Dimitri Glazkov.

        Make Node::compareDocumentPosition() return the correct value when two nodes are in the different shadow trees.

        Test: fast/dom/shadow/compare-document-position.html

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

2012-11-28  Joshua Bell  <jsbell@chromium.org>

        [Chromium] IndexedDB: Assert/crash in indexing layout tests in content_shell
        https://bugs.webkit.org/show_bug.cgi?id=103562

        Reviewed by Tony Chang.

        In multi-process ports, an commit request or setIndexesReady request may arrive from the
        front-end after the back-end has already aborted. Don't freak out if those occur.

        Tests: storage/indexeddb/index-population.html
               storage/indexeddb/lazy-index-population.html
               storage/indexeddb/transaction-error.html

        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys): Ensure transaction hasn't finished before continuing.
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReady): Ditto.
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::commit): Ignore a commit request if already aborted.

2012-11-28  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Move Distribution requirements from ShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=103481

        Reviewed by Hajime Morita.

        We would like to shrink the ShadowRoot memory size in this patch. ShadowRoot had several distribution related members,
        however they were used only if ShadowRoot has <content>, <shadow>, or nested ShadowRoot.
        Since <input> or <textarea> do not have such requirements, the members consume a few amount of memory.

        We remove them from ShadowRoot and introduce some RareData-like data structure for ShadowRoot.
        This will reduce memory footprint in most cases.

        No new tests, refactoring.

        * WebCore.exp.in:
        * dom/ShadowRoot.cpp:
        (SameSizeAsShadowRoot): Reduced 3 * sizeof(unsigned) bytes from ShadowRoot.
        (WebCore::ShadowRoot::ShadowRoot): DistributionData is created only when necessary. <input> or <textarea> won't
        create such data.
        (WebCore::ShadowRoot::assignedTo):
        (WebCore):
        (WebCore::ShadowRoot::setAssignedTo):
        (WebCore::ShadowRoot::ensureDistributionData):
        (WebCore::ShadowRoot::registerShadowElement):
        (WebCore::ShadowRoot::unregisterShadowElement):
        (WebCore::ShadowRoot::hasShadowInsertionPoint):
        (WebCore::ShadowRoot::registerContentElement):
        (WebCore::ShadowRoot::unregisterContentElement):
        (WebCore::ShadowRoot::hasContentElement):
        (WebCore::ShadowRoot::registerElementShadow):
        (WebCore::ShadowRoot::unregisterElementShadow):
        (WebCore::ShadowRoot::hasElementShadow):
        (WebCore::ShadowRoot::countElementShadow):
        (WebCore::ShadowRoot::reportMemoryUsage):
        * dom/ShadowRoot.h:
        (WebCore):
        (ShadowRoot):
        (WebCore::ShadowRoot::distributionData):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ShadowRootContentDistributionData::ShadowRootContentDistributionData):
        (WebCore):
        * html/shadow/ContentDistributor.h:
        (ShadowRootContentDistributionData): Distribution related fields in ShadowRoot are moved to here.
        (WebCore::ShadowRootContentDistributionData::insertionPointAssignedTo):
        (WebCore::ShadowRootContentDistributionData::setInsertionPointAssignedTo):
        (WebCore::ShadowRootContentDistributionData::incrementNumberOfShadowElementChildren):
        (WebCore::ShadowRootContentDistributionData::decrementNumberOfShadowElementChildren):
        (WebCore::ShadowRootContentDistributionData::numberOfShadowElementChildren):
        (WebCore::ShadowRootContentDistributionData::incrementNumberOfContentElementChildren):
        (WebCore::ShadowRootContentDistributionData::decrementNumberOfContentElementChildren):
        (WebCore::ShadowRootContentDistributionData::numberOfContentElementChildren):
        (WebCore::ShadowRootContentDistributionData::incrementNumberOfElementShadowChildren):
        (WebCore::ShadowRootContentDistributionData::decrementNumberOfElementShadowChildren):
        (WebCore::ShadowRootContentDistributionData::numberOfElementShadowChildren):
        (WebCore):

2012-11-23  Dirk Schulze  <krit@webkit.org>

        Remove -webkit-mask-attachment
        https://bugs.webkit.org/show_bug.cgi?id=67137

        Reviewed by David Hyatt.

        Remove CSS property '-webkit-attachment'. The CSS WG agreed that this should not be
        part of the CSS Masking specification. WebKit never implemented the behavior of
        attached masks either. The property was just exposed in CSSOM.

        Test: Added negative tests to fast/masking/parsing-mask.html.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitMaskShorthand):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:

2012-11-28  Michael Pruett  <michael@68k.org>

        IndexedDB: Add forward declaration of SecurityOrigin to IDBBackingStore.h
        https://bugs.webkit.org/show_bug.cgi?id=103578

        Reviewed by Kentaro Hara.

        Add forward declaration of SecurityOrigin to IDBBackingStore.h
        in order to enable compilation of IndexedDB for JSC.

        Tests: storage/indexeddb/*

        * Modules/indexeddb/IDBBackingStore.h:
        (WebCore):

2012-11-28  Hajime Morrita  <morrita@google.com>

        checkAcceptChild() needs fewer virtual calls
        https://bugs.webkit.org/show_bug.cgi?id=103372

        Reviewed by Ojan Vafai.

        This change reorganizes checkAcceptChild family for speed.

        - Made Node::checkAddChild and Node::checkReplaceChild() static inline functions
          in ContainerNode.cpp. checkAcceptChild() was also moved to the same file. This allows us
          more aggressive inlining.

        - Added a fast path in checkAcceptChild(), where we can assume that the parent is element
          and the new child is element or text. Under this assumption, we need no extra type checks
          and just needs a cycle prevention through Node::contains(). This is faster than current generic version.

        - Moved extra checks from checkAddChild() and checkReplaceChild() to
          checkAcceptChild(). This allows the fast path skips even these extra checks.

        - Node::canReplaceChild() is devirtualized. Since the only override is on
          Document, we can check isDocumentNode() to call it directly.

        - The default implemenation of Node::canReplaceChild() just calls isChildTypeAllowed().
          That is what an extra check for checkAddChild() did. So we can share these code path in checkAcceptChild().

        This gains 2-3% win on Dromaeo dom-modify.html.

        No new tests, covered by existing tests.

        * dom/ContainerNode.cpp:
        (WebCore::isChildTypeAllowed): Moved from Node.cpp
        (WebCore::checkAcceptChild): Moved from Node.cpp, Added a fast path.
        (WebCore::checkAddChild): Moved from Node.cpp
        (WebCore::checkReplaceChild): Moved from Node.cpp
        (WebCore::ContainerNode::insertBefore): Followed the signature change.
        (WebCore::ContainerNode::replaceChild): Followed the signature change, moved null check from checkReplaceChild to here.
        (WebCore::ContainerNode::appendChild): Followed the signature change.
        * dom/Document.h:
        (Document):
        * dom/Node.cpp:
        * dom/Node.h:
        (WebCore::Node::isDocumentTypeNode): Added for better readability of call sites.

2012-11-28  Kenichi Ishibashi  <bashi@chromium.org>

        StyleResolver should not set NaN to font size
        https://bugs.webkit.org/show_bug.cgi?id=99506

        Reviewed by Abhishek Arya.

        fixedScaleFactor could be NaN since settings->defaultFixedFontSize()
        and settings->defaultFontSize() are zero in some case. This turns
        out setting NaN to font size. Add a zero checks so that
        fixedScaleFactor won't be NaN.

        Test: fast/css/font-size-nan.html

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

2012-11-28  Tim Horton  <timothy_horton@apple.com>

        [mac] WebHTMLConverter should maintain font size even when there is no related NSFont
        https://bugs.webkit.org/show_bug.cgi?id=103568

        Reviewed by Alexey Proskuryakov.

        WebHTMLConverter should use the default font at the correct size when it
        encounters a font that cannot be backed by an NSFont (e.g. a WebFont).

        * platform/mac/HTMLConverter.mm:
        (+[WebHTMLConverter editingAttributedStringFromRange:]):

2012-11-23  Dirk Schulze  <krit@webkit.org>

        CSS parser does not support -webkit-mask-size for -webkit-mask shorthand
        https://bugs.webkit.org/show_bug.cgi?id=103020

        Reviewed by David Hyatt.

        Harmonize the syntax of '-webkit-mask' property with 'background' according to the
        CSS Masking specification[1]. This should make it easier to maintain both shorthand
        properties in the long term.
        It is very unlikely that a lot of content (if any) is affected by this change. The
        computed style still is not implemented and this change should rather make it easier
        for developers.

        With the harmonization, the '-webkit-mask-size' property is part of the shorthand as
        well now.

        parsing-mask.html covers all the changes. Added new tests for the changed syntax and
        '-webkit-mask-size'

        [1] http://dvcs.w3.org/hg/FXTF/raw-file/tip/masking/index.html#mask-property

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitMaskShorthand):

2012-11-28  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Change frontend to call IDBDatabaseBackendInterface::createTransaction()
        https://bugs.webkit.org/show_bug.cgi?id=102732

        Reviewed by Tony Chang.

        Use the new createTransaction, now that it has been stubbed
        out. This is part 2 of 3 of a refactor. See
        https://bugs.webkit.org/show_bug.cgi?id=102733 for part 3.

        No new tests as this refactor simply keeps and propagates a
        counter that is currently unused.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::nextTransactionId):
        (WebCore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):

2012-11-28  Michael Saboff  <msaboff@apple.com>

        HTMLFontElement font size parsing should directly handle 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=103315

        Reviewed by Oliver Hunt.

        Split parseFontSize() into a templated function based on character type and a wrapper that determines
        a string's bitness before calling the template.

        No new tests. No change in functionality.

        * html/HTMLFontElement.cpp:
        (WebCore::parseFontSize):

2012-11-28  Robert Kroeger  <rjkroege@chromium.org>

        remove unused PlatformGestureCurve code
        https://bugs.webkit.org/show_bug.cgi?id=103296

        Reviewed by Adam Barth.

        Previous CLs have made the Chromium embedder provide gesture fling
        curve implementation to WebKit. Consequently no platform uses the
        gestural fling code currently found in WebKit. This CL removes this code.

        Code removal only: covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * platform/ActivePlatformGestureAnimation.cpp: Removed.
        * platform/ActivePlatformGestureAnimation.h: Removed.
        * platform/PlatformGestureCurve.h: Removed.
        * platform/PlatformGestureCurveTarget.h: Removed.
        * platform/ScrollAnimatorNone.cpp: References to removed code removed.
        * platform/ScrollAnimatorNone.h:
        * platform/TouchFlingPlatformGestureCurve.cpp: Removed.
        * platform/TouchFlingPlatformGestureCurve.h: Removed.
        * platform/WheelFlingPlatformGestureCurve.cpp: Removed.
        * platform/WheelFlingPlatformGestureCurve.h: Removed.
        * platform/chromium/support/PlatformGestureCurveFactory.cpp: Removed.
        * platform/chromium/support/PlatformGestureCurveFactory.h: Removed.
        * platform/chromium/support/WebFlingAnimatorToGestureCurveAdapter.h: Removed.

2012-11-28  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::EventHandler::handleMousePressEvent
        https://bugs.webkit.org/show_bug.cgi?id=101098

        Reviewed by Adam Barth.

        |subframe| can be blown away inside passMousePressEventToSubframe
        call. Use RefPtr to protect it in handleMousePressEvent function.
        We use similar approach in handleMouseMoveEvent function.

        No new tests. Test is extremely time dependent and needs to trigger
        interaction gesture. Reproduced on ClusterFuzz.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):

2012-11-28  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor bypass with script src=data: URL ending in <!--
        https://bugs.webkit.org/show_bug.cgi?id=103548

        Reviewed by Adam Barth.

        This fixes an additional case where characters from the page itself are
        included with the snippet to match against the reflected vector, and the
        JS remains legitimate because of a <!--- comment. Truncate the snippet at
        such a comment.
        
        Test: http/tests/security/xssAuditor/script-tag-with-source-data-url3.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodedSnippetForAttribute):

2012-11-28  Abhishek Arya  <inferno@chromium.org>

        Heap-use-after-free in WebCore::RenderLayerModelObject::hasSelfPaintingL
ayer
        https://bugs.webkit.org/show_bug.cgi?id=101970

        Reviewed by David Hyatt.

        RenderInline::splitFlow and RenderBlock::splitFlow re-use |pre|
        block in some cases. In those cases, |pre| might hold floating objects
        and those floating descendants might get moved to |post| block. If
        the |pre| block does not get a layout later, then the floating
        descendant will never get removed since it is now part of |post|
        ancestor chain. We don't want failing-to-layout bugs turned into
        security bugs and hence clear floating objects list since we expect
        it to be rebuilt in subsequent layout.

        Test: fast/block/float/float-not-removed-from-pre-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitFlow): Call removeFloatingObjects on |pre| block.
        (WebCore::RenderBlock::removeFloatingObjects): Clear all floating objects from our list.
        (WebCore):
        * rendering/RenderBlock.h: 
        (RenderBlock):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitFlow): Call removeFloatingObjects on |pre| block.

2012-11-28  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Remove pluginsScriptableObject from PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=103542

        Reviewed by Adam Barth.

        Part of a refactoring series. See tracking bug 82948.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * plugins/PluginViewBase.h:
        (PluginViewBase):
        (WebCore::PluginViewBase::scriptableObject):

2012-11-28  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] CookieJarBlackBerry will use document settings for cookiesEnabled
        https://bugs.webkit.org/show_bug.cgi?id=103560

        Reviewed by Rob Buis.

        PR 253490

        CookieJarBlackBerry will now use page settings to check whether
        cookie is enabled.

        Tested setting/reading cookies on different client cookie settings using
        javascript and HTTP. Cookie behaviour is now back to spec.

        * loader/blackberry/CookieJarBlackBerry.cpp:
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):

2012-11-28  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium][Win] Remove ensureFontLoaded from PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=97696

        Reviewed by Adam Barth.

        Move ensureFontLoaded() from PlatformSupport to
        FontPlatformDataChromiumWin. Part of a refactoring series; see
        tracking bug 82948.

        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):
        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontContainsCharacter):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::drawGlyphsWin):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::scriptFontProperties):
        (WebCore):
        (WebCore::FontPlatformData::ensureFontLoaded):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (FontPlatformData):
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::getGlyphIndices):
        (WebCore::fillBMPGlyphs):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/UniscribeHelperTextRun.cpp:
        (WebCore::UniscribeHelperTextRun::tryToPreloadFont):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2012-11-28  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Crash when requesting favicon.
        https://bugs.webkit.org/show_bug.cgi?id=102689

        Reviewed by Brent Fulgham.

        * platform/graphics/BitmapImage.h: Made frameCount() method virtual, subclasses made for testing can then override it.
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize): Added NULL pointer check.
        (WebCore::BitmapImage::drawFrameMatchingSourceSize): Added NULL pointer check.

2012-11-28  Tony Chang  <tony@chromium.org>

        Move internals.settings.setPageScaleFactor to internals.setPageScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=103559

        Reviewed by Jochen Eisinger.

        This method doesn't alter the Settings object, so move it to internals.

        No new tests, this is a refactor.

        * testing/InternalSettings.cpp: Remove.
        * testing/InternalSettings.h: Remove.
        * testing/InternalSettings.idl: Remove.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Add reset code.
        (WebCore::Internals::setPageScaleFactor): Add method.
        * testing/Internals.h: Add method.
        * testing/Internals.idl: Add method.

2012-11-28  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Regions] Elements using transforms are not repainted correctly when rendered in a region
        https://bugs.webkit.org/show_bug.cgi?id=102826

        Reviewed by Dave Hyatt.

        Follow up update of a comment after the patch was landed by the commit queue in r135921.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):

2012-11-28  Christophe Dumez  <christophe.dumez@intel.com>

        CSS3 Multicolumn: column-span should accept value 'none' (instead of '1')
        https://bugs.webkit.org/show_bug.cgi?id=101462

        Reviewed by David Hyatt.

        According to the latest CSS3 Multi-column specification:
        http://www.w3.org/TR/2011/CR-css3-multicol-20110412/#column-span

        column-span should accept values [ none | all ], instead of
        [ 1 | all ]. This patch updates WebKit implementation to reflect
        this change in the specification. The value 1 is still supported
        for compatibility reasons and is mapped to none.

        No new tests, already covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ColumnSpan):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2012-11-28  Anton Vayvod  <avayvod@chromium.org>

        Text Autosizing: Clusters should use width of LCA of their text nodes
        https://bugs.webkit.org/show_bug.cgi?id=102562

        Reviewed by Kenneth Rohde Christiansen.

        Many pages set a max-width on their content. So especially for the
        RenderView, instead of just taking the width of |cluster| we find
        the lowest common ancestor of the first and last descendant text node of
        the cluster (i.e. the deepest wrapper block that contains all the text),
        and use its width instead.

        Tests: fast/text-autosizing/cluster-with-narrow-lca-and-cluster.html
               fast/text-autosizing/cluster-with-narrow-lca.html
               fast/text-autosizing/cluster-with-wide-lca.html
               fast/text-autosizing/list-item-out-of-flow.html
               fast/text-autosizing/wide-in-narrow-overflow-scroll.html

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processCluster): use text nodes LCA instead of cluster for width calculation
        (WebCore::TextAutosizer::isAutosizingContainer): list items that are out of parent list element's flow are valid containers (that therefore become clusters in isAutosizingCluster)
        (WebCore::TextAutosizer::findDeepestBlockContainingAllText): searches for LCA of text nodes ignoring descendant clusters
        (WebCore::TextAutosizer::findFirstTextLeafNotInCluster): searches for the first or the last (depending on specified direction) text leaf node in-order ignoring any descendant clusters
        * rendering/TextAutosizer.h: new private methods declarations and an enum for tree traversal direction.

2012-11-28  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        cleanup: Change some code to be cleaner, more readable and style conforming
        https://bugs.webkit.org/show_bug.cgi?id=103543

        Reviewed by Antonio Gomes.

        Use more appropriate function name and more meaningful variable names to make the code cleaner.
        This is covered by existing tests. This does not make any behavioural changes, so no new tests.

        * page/EventHandler.cpp:
        (WebCore::closestScrollableNodeInDocumentIfPossible):
        (WebCore::EventHandler::handleWheelEvent):

2012-11-28  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Regions] Crash when using hover and first-letter inside a flow-thread
        https://bugs.webkit.org/show_bug.cgi?id=102957

        Reviewed by David Hyatt.

        Some RenderObjects use a different path when they are destroyed. That's because they are dynamically
        added just before layout happens and their parent is usually not their actual owner. In those cases the parent
        will remove the object from the tree, but it's actually the owner that will destroy the object and all its
        children.

        RenderFlowThread maintains a RenderBoxRegionInfo object for each RenderObject that is rendered inside the
        flow-thread. When the RenderObject is removed from the RenderFlowThread, the associated RenderBoxRegionInfo object
        also needs to be removed.

        In these special cases (list-marker, first-letter), the object itself was removed from the RenderFlowThread,
        but its children were still left in the flow-thread. When the these special objects were later destroyed, 
        they will remove their own children. Removing their children means it will try to remove them from the
        associated RenderFlowThread. However, in this cases there would be no link back to the parent flow-thread,
        as the tree is now detached from the enclosing RenderFlowThread.

        Added code that recursively removes the whole children tree from the RenderFlowThread when the root is removed.

        Tests: fast/regions/firstletter-inside-flowthread.html
               fast/regions/listmarker-inside-flowthread.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeRemovedFromTree):
        (WebCore::RenderObject::removeFromRenderFlowThread):
        (WebCore):
        (WebCore::RenderObject::removeFromRenderFlowThreadRecursive):
        * rendering/RenderObject.h:
        (RenderObject):

2012-11-28  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Regions] Auto-height regions will not calculate the height correctly when the content changes dynamically
        https://bugs.webkit.org/show_bug.cgi?id=102954

        Reviewed by David Hyatt.

        Whenever the flow changes, we need to reset the region computed auto-heights.
        However, when we reset the region heights to "auto" or "un-computed", we also need to make
        sure that all the region breaks are counted again, so that we split regions correctly during the new layout.
        I've reused the m_regionsInvalidated property to force the flow do a complete layout.

        Test: fast/regions/autoheight-dynamic-update.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::resetRegionsOverrideLogicalContentHeight):

2012-11-28  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Regions] InRenderFlowThread returns false in the first setStyle
        https://bugs.webkit.org/show_bug.cgi?id=102839

        Reviewed by Dave Hyatt.

        Some render objects use the "inRenderFlowThread" during the first styleWillChange/styleDidChange.
        The first call to these methods comes from NodeRendererFactory::createRenderer. That happens before the RenderObject is 
        attached to the parent renderer, meaning that inRenderFlowThread is false. That means a RenderLayerBacking will be 
        created for renderers inside the RenderFlowThread, but composited layers inside the RenderFlowThread are not supported yet.
        https://bugs.webkit.org/show_bug.cgi?id=84900

        Test: fast/repaint/region-painting-composited-element.html

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRendererFactory::createRenderer):
        Added code to propagate the inRenderFlowThread flag from the parent node before the style is set for the first time.

2012-11-28  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12645085> REGRESSION (r130851): With kerning enabled, a white-space: pre-wrap inline starting with tab+space has the wrong width
        https://bugs.webkit.org/show_bug.cgi?id=103541

        Reviewed by Anders Carlsson.

        Test: fast/text/tab-with-kerning.html

        When kerning is enabled, words are measured with their trailing space, then the width of a
        space is subtracted. The logic to do this was incorrectly being invoked even when the
        trailing whitespace character was a tab or a newline.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): Changed to check only for the space
        character, not other space-like characters.

2012-11-28  Nate Chapin  <japhet@chromium.org>

        Move empty loading to DocumentLoader, simplify FrameLoader::init()
        https://bugs.webkit.org/show_bug.cgi?id=101512

        Reviewed by Adam Barth.

        No new tests, though several outputs changed because we no longer send resource
            load callbacks for empty loads.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::clearMainResourceLoader):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::documentURL):
        (WebCore::DocumentLoader::isLoadingMainResource):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        (WebCore):
        (WebCore::DocumentLoader::startLoadingMainResource): Handle empty main resource
             loads directly here.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::serverRedirectSourceForHistory):
        (DocumentLoader):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Initialize some variables whose values
            were previously being reset in init(). Given that the FrameLoader is in
            an inconsistent state before init() is called anyway, there doesn't seem
            to be a disadvantage to just initializing them to their post-init() values.
        (WebCore::FrameLoader::init): Just call startLoadingMainResource(), instead of
            doing a bunch of direct calls to functions FrameLoader shouldn't know about.
        * loader/FrameLoaderStateMachine.cpp:
        (WebCore::FrameLoaderStateMachine::FrameLoaderStateMachine):
        * loader/FrameLoaderStateMachine.h:
        * loader/MainResourceLoader.cpp: Throughout, remove the concept of an empty load.
        (WebCore::MainResourceLoader::loadNow): This only returned true when an empty
            load got deferred, which won't happen now. Return void and always treat
            as returning false.
        * loader/MainResourceLoader.h:
        (MainResourceLoader):

2012-11-28  Antoine Quint  <graouts@apple.com>

        Calling .removeCue() for a cue that was never added should raise a NOT_FOUND_ERR
        https://bugs.webkit.org/show_bug.cgi?id=103412

        Reviewed by Eric Carlson.

        Updating the .removeCue() implementation to match the latest spec. This means we now
        raise a NOT_FOUND_ERR exception when trying to remove a cue that wasn't present in the
        cue list instead of a INVALID_STATE_ERR exception like the spec used to mandate.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::removeCue):

2012-11-28  Zeno Albisser  <zeno@webkit.org>

        [Qt][Win] Enable usage of QTWEBKIT_PLUGIN_PATH.
        https://bugs.webkit.org/show_bug.cgi?id=103529

        This patch enables the same behavior for Windows
        as it is currently implemented for all other operating
        systems supported by Qt.
        Directories listed in the environment variable
        QTWEBKIT_PLUGIN_PATH are being searched for additional
        plugins.
        The only difference is that directories on Windows
        need to be separated by a semicolon instead of a colon.

        Reviewed by Kenneth Rohde Christiansen.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore):
        (WebCore::addQtWebKitPluginPath):
        (WebCore::PluginDatabase::defaultPluginDirectories):

2012-11-28  Adam Barth  <abarth@webkit.org>

        [v8] 4% regression in dom_traverse tests
        https://bugs.webkit.org/show_bug.cgi?id=102858

        Unreviewed.

        This patch is a manual rollout of
        http://trac.webkit.org/changeset/134729. We can't do a mechanical
        rollout because V8DOMWrapper::getCachedWrapper no longer exists.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):

2012-11-28  Denis Nomiyama  <d.nomiyama@samsung.com>

        Removed extra definition of GLXContext.
        https://bugs.webkit.org/show_bug.cgi?id=103500

        Reviewed by Martin Robinson.

        A minor cleanup to remove a spare definition of GLXContext in GLContextGLX.h.

        No new tests. This doesn't change any behavior.

        * platform/graphics/glx/GLContextGLX.h:

2012-11-28  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Fix gesture scrolling when the target-element of scroll-begin is removed
        https://bugs.webkit.org/show_bug.cgi?id=103355

        Reviewed by Antonio Gomes.

        When a touch-scroll starts, the node under the touch-point gets latched, and
        subsequent scroll-update events are dispatched to that node. But if the node is
        removed while the gesture event is in progress (e.g. in a dynamically updated
        list), then the scrolling stops, although there are enough elements to still
        enable scrolling. So instead of latching on to the node immediately under the
        touch point, latch on to the scrollable node under the touch point.

        Test: fast/events/touch/gesture/touch-gesture-scroll-remove-node.html

        * page/EventHandler.cpp:
        (WebCore::getClosestScrollableNodeInDocumentIfPossible):
        (WebCore):
        (WebCore::EventHandler::handleWheelEvent):

2012-11-28  Anton Obzhirov  <a.obzhirov@samsung.com>

        Fix .libs/libwebkitgtk-3.0.so: undefined reference to `WebCore::validationMessageBadInputForNumberText().
        https://bugs.webkit.org/show_bug.cgi?id=103509

        Reviewed by Philippe Normand.

        GTK build fix after r136001.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::validationMessageBadInputForNumberText):
        (WebCore):

2012-11-28  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Use mutex locker in wakeUp() to ensure thread-safety.
        https://bugs.webkit.org/show_bug.cgi?id=101132

        Reviewed by Gyuyoung Kim.

        Add mutex locker for the ecore pipe to ensure thread-safety of
        RunLoop::wakeUp().

        RunLoop::wakeUp() can be called by multiple thread. It uses
        ecore_pipe_write() function but the function is not thread-safe.

        * platform/RunLoop.h:
        (RunLoop):
        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::wakeUp):

2012-11-28  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Refactor theme to choose whether to support foreground color of selection
        https://bugs.webkit.org/show_bug.cgi?id=102037

        Reviewed by Kenneth Rohde Christiansen.

        If foreground selection color is supported, selected text is painted to
        SelectionForegroundColor instead of text color. If not, text can be painted
        to text color.

        However, EFL port does not have a way to disable support of foreground
        selection color. So this patch refactors color classes of theme from
        active and inactive to foreground and background in order to disable support
        of foreground selection color when foreground color class is not specified.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::fillColorsFromEdjeClass):
        Returned false without error message when colorClass is not specified.
        (WebCore::RenderThemeEfl::setColorFromThemeClass):
        (WebCore::RenderThemeEfl::loadTheme):
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::supportsSelectionForegroundColors):
        (WebCore):
        * platform/efl/RenderThemeEfl.h:
        (RenderThemeEfl):

2012-11-28  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Move childrenAffectedBy bits from RenderStyle to Element
        https://bugs.webkit.org/show_bug.cgi?id=101448

        Unreviewed buildfix.

        To use renderStyle() on some Macs we need to include NodeRenderStyle.h.

        * dom/ContainerNode.cpp:

2012-11-28  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Move childrenAffectedBy bits from RenderStyle to Element
        https://bugs.webkit.org/show_bug.cgi?id=101448
        https://bugs.webkit.org/show_bug.cgi?id=98021

        Reviewed by Antti Koivisto.

        Moves facts observed about restyling dependencies out of RenderStyle and
        into RareData for Node and Element. This also enables further cleanup
        in related code that tried to deal with problems caused with the placement
        of the data.

        Test: fast/css/nth-child-not-in-rightmost.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        (WebCore::SelectorChecker::checkOneSelector):
        * css/SiblingTraversalStrategies.h:
        (WebCore::DOMSiblingTraversalStrategy::countElementsBefore):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sortAndTransferMatchedRules):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::parentElementPreventsSharing):
        (WebCore::StyleResolver::locateSharedStyle):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::setActive):
        (WebCore::ContainerNode::setHovered):
        * dom/Element.cpp:
        (WebCore::Element::detach):
        (WebCore::Element::recalcStyle):
        (WebCore::checkForEmptyStyleChange):
        (WebCore::checkForSiblingStyleChanges):
        (WebCore::Element::setChildrenAffectedByHover):
        (WebCore::Element::setChildrenAffectedByActive):
        (WebCore::Element::setChildrenAffectedByDrag):
        (WebCore::Element::setChildrenAffectedByFirstChildRules):
        (WebCore::Element::setChildrenAffectedByLastChildRules):
        (WebCore::Element::setChildrenAffectedByDirectAdjacentRules):
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules):
        (WebCore::Element::setChildrenAffectedByBackwardPositionalRules):
        (WebCore::Element::setChildIndex):
        (WebCore::Element::rareDataStyleAffectedByEmpty):
        (WebCore::Element::rareDataChildrenAffectedByHover):
        (WebCore::Element::rareDataChildrenAffectedByActive):
        (WebCore::Element::rareDataChildrenAffectedByDrag):
        (WebCore::Element::rareDataChildrenAffectedByFirstChildRules):
        (WebCore::Element::rareDataChildrenAffectedByLastChildRules):
        (WebCore::Element::rareDataChildrenAffectedByDirectAdjacentRules):
        (WebCore::Element::rareDataChildrenAffectedByForwardPositionalRules):
        (WebCore::Element::rareDataChildrenAffectedByBackwardPositionalRules):
        (WebCore::Element::rareDataChildIndex):
        * dom/Element.h:
        (Element):
        (WebCore::Element::styleAffectedByEmpty):
        (WebCore::Element::childrenAffectedByHover):
        (WebCore::Element::childrenAffectedByActive):
        (WebCore::Element::childrenAffectedByDrag):
        (WebCore::Element::childrenAffectedByPositionalRules):
        (WebCore::Element::childrenAffectedByFirstChildRules):
        (WebCore::Element::childrenAffectedByLastChildRules):
        (WebCore::Element::childrenAffectedByDirectAdjacentRules):
        (WebCore::Element::childrenAffectedByForwardPositionalRules):
        (WebCore::Element::childrenAffectedByBackwardPositionalRules):
        (WebCore::Element::childIndex):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::resetComputedStyle):
        (WebCore::ElementRareData::resetDynamicRestyleObservations):
        * dom/Node.cpp:
        (WebCore::Node::diff):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::childrenAffectedByHover):
        (WebCore::NodeRareData::setChildrenAffectedByHover):
        (WebCore::NodeRareData::childrenAffectedByActive):
        (WebCore::NodeRareData::setChildrenAffectedByActive):
        (WebCore::NodeRareData::childrenAffectedByDrag):
        (WebCore::NodeRareData::setChildrenAffectedByDrag):
        (NodeRareData):
        (WebCore::NodeRareData::childrenAffectedByFirstChildRules):
        (WebCore::NodeRareData::setChildrenAffectedByFirstChildRules):
        (WebCore::NodeRareData::childrenAffectedByLastChildRules):
        (WebCore::NodeRareData::setChildrenAffectedByLastChildRules):
        (WebCore::NodeRareData::childrenAffectedByDirectAdjacentRules):
        (WebCore::NodeRareData::setChildrenAffectedByDirectAdjacentRules):
        (WebCore::NodeRareData::childrenAffectedByForwardPositionalRules):
        (WebCore::NodeRareData::setChildrenAffectedByForwardPositionalRules):
        (WebCore::NodeRareData::childrenAffectedByBackwardPositionalRules):
        (WebCore::NodeRareData::setChildrenAffectedByBackwardPositionalRules):
        (WebCore::NodeRareData::childIndex):
        (WebCore::NodeRareData::setChildIndex):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::createRendererForElementIfNeeded):
        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::nodeRespondsToTapGesture):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateDragState):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::copyNonInheritedFrom):
        * rendering/style/RenderStyle.h:

2012-11-28  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurface: Implement usage of GraphicsSurface for WebGL in WK1.
        https://bugs.webkit.org/show_bug.cgi?id=103497

        Unreviewed buildfix.

        Any usage of GraphicsSurface needs to be wrapped with USE(GRAPHICS_SURFACE).

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):

2012-11-28  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurface: Implement usage of GraphicsSurface for WebGL in WK1.
        https://bugs.webkit.org/show_bug.cgi?id=103497

        This is a temporary workaround for an issue with GraphicsSurfaceMac.
        GraphicsSurfaceMac is currently implemented using CGL only.
        CGL does not allow us to properly restore the NSView a context was made current with.
        Therefore we have to go through QOpenGLContext to ensure the context
        is being restored correctly.
        As soon as we are updating GraphicsSurfaceMac to use NSOpenGL,
        we should revert this patch.

        Reviewed by Simon Hausmann.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):

2012-11-28  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurface: Implement usage of GraphicsSurface for WebGL in WK1.
        https://bugs.webkit.org/show_bug.cgi?id=103497

        Using GraphicsSurface for WebGL in WK1 allows us to share
        the code with the WK2 implementation.

        Reviewed by Simon Hausmann.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
            Remove obsolete code.
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
            After blitting the multisample framebuffer,
            we can copy the contents onto the GraphicsSurface.
            Right after that we can use the GraphicsSurface
            as a texture origin to paint to the TextureMapper.
            Flags related to flipping and blending are being resolved
            by GraphicsSurface, and do not need to be handled here anymore.
        (WebCore::GraphicsContext3DPrivate::copyToGraphicsSurface):
            Remove a redundant makeCurrentIfNeeded call.
            The original context is being restored by
            blitMultisampleFramebufferAndRestoreContext anyway.
            Instead of explicitly calling swapBuffers here,
            we call swapBuffers on the GraphicsSurface implicitly
            after in GraphicsSurfacePrivate::copyFromTexture().
        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
            Add members to hold the reading end texture IDs.
            The texture on the reading side are in a different
            context than the texture on the writing side.
            By using GraphicsSurface in WK1 we have to distinguish
            between these textures, as a single instance serves
            for reading and writing.
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
            Add an implicit call to swapBuffers().
        (WebCore::GraphicsSurfacePrivate::frontBufferTextureID):
        (GraphicsSurfacePrivate):
        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
            Add a flag to distinguish between sending and receiving/reading
            side of the surface. This flag is being initialized in the constructor
            which is the only place where we know if an instance will be used for
            writing or reading.
            The purpose of this flag is to avoid erroneously swapping the buffers
            on the reading side. We can no longer rely on m_xPixmap for this purpose.
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
        (WebCore::GraphicsSurfacePrivate::glxPixmap):
            Lazily create the GLX pixmap on demand.
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurface::platformImport):

2012-11-28  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix extra spaces in SimpleFontData::initGDIFont().

        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):

2012-11-28  Dan Carney  <dcarney@google.com>

        [V8] Crash wrapping media element when MediaPlayer isn't available
        https://bugs.webkit.org/show_bug.cgi?id=103431

        Reviewed by Kentaro Hara.

        Call HTMLElement::createWrapper directly when dispatching a
        disabled MediaElement wrap.

        No new tests. Testing this must apparently be manual.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * dom/make_names.pl:
        (printWrapperFunctions):
        (printWrapperFactoryHeaderFile):

2012-11-28  Roger Fong  <roger_fong@apple.com>

        Initialize identity matrix in SimpleFontData::initGDIFont() properly.
        https://bugs.webkit.org/show_bug.cgi?id=103499
        <rdar://problem/12400700>

        Reviewed by Timothy Horton.

        We are incorrectly initializing the matrix passed into GetGlyphOutline.
        This patch fixes MAT2 initialization to match the way we initialize the 
        identity matrix in SimpleFontData::boundsForGDIGlyph and SimpleFontData::widthForGDIGlyph.

        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):

2012-11-28  Huang Dongsung  <luxtella@company100.net>

        [Texmap] REGRESSION(r135620) QtTestBrowser crashes on Google-gravity.
        https://bugs.webkit.org/show_bug.cgi?id=103410

        Reviewed by Noam Rosenthal.

        GraphicsLayerTextureMapper::updateBackingStore() should return early
        before TextureMapper is set.

        GraphicsLayer::FlushCompositingState() can be called by RenderLayerBacking. It
        means this method can be called before creating TextureMapper. So
        TextureMapperLayer::flushCompositingState() checks and returns early if
        TextureMapper was not created.

        However, GraphicsLayerTextureMapper::updateBackingStore() expects that TextureMapper
        always exists. updateBackingStore should also return early when TextureMapper
        was not created.

        No new tests. Covered by existing tests.

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

2012-11-28  Tommy Widenflycht  <tommyw@google.com>

        Add basic implementation for MediaStreamAudioDestinationNode
        https://bugs.webkit.org/show_bug.cgi?id=101815

        Reviewed by Chris Rogers.

        Implements an audio destination node which has a MediaStream.
        This can be added to a PeerConnection with peerConnection.addStream().
        Please see use case (3):
        https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/webrtc-integration.html

        Test: webaudio/mediastreamaudiodestinationnode.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore):
        (WebCore::AudioContext::createMediaStreamDestination):
        * Modules/webaudio/AudioContext.h:
        (WebCore):
        (AudioContext):
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: Added.
        (WebCore):
        (WebCore::MediaStreamAudioDestinationNode::create):
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        (WebCore::MediaStreamAudioDestinationNode::mediaStreamSource):
        (WebCore::MediaStreamAudioDestinationNode::~MediaStreamAudioDestinationNode):
        (WebCore::MediaStreamAudioDestinationNode::process):
        (WebCore::MediaStreamAudioDestinationNode::reset):
        * Modules/webaudio/MediaStreamAudioDestinationNode.h: Added.
        (WebCore):
        (MediaStreamAudioDestinationNode):
        (WebCore::MediaStreamAudioDestinationNode::stream):
        * Modules/webaudio/MediaStreamAudioDestinationNode.idl: Added.
        * WebCore.gypi:
        * platform/audio/AudioDestinationConsumer.h: Copied from Source/WebCore/platform/mediastream/MediaStreamSource.cpp.
        (WebCore):
        (AudioDestinationConsumer):
        (WebCore::AudioDestinationConsumer::~AudioDestinationConsumer):
        * platform/chromium/support/WebMediaStreamSource.cpp:
        (WebKit::WebMediaStreamSource::extraData):
        (WebKit::WebMediaStreamSource::setExtraData):
        (WebKit::WebMediaStreamSource::requiresAudioConsumer):
        (WebKit):
        (ConsumerWrapper):
        (WebKit::ConsumerWrapper::create):
        (WebKit::ConsumerWrapper::consumer):
        (WebKit::ConsumerWrapper::ConsumerWrapper):
        (WebKit::ConsumerWrapper::consumeAudio):
        (WebKit::WebMediaStreamSource::addAudioConsumer):
        (WebKit::WebMediaStreamSource::removeAudioConsumer):
        * platform/mediastream/MediaStreamSource.cpp:
        (WebCore::MediaStreamSource::create):
        (WebCore::MediaStreamSource::MediaStreamSource):
        (WebCore::MediaStreamSource::addAudioConsumer):
        (WebCore):
        (WebCore::MediaStreamSource::removeAudioConsumer):
        (WebCore::MediaStreamSource::consumeAudio):
        * platform/mediastream/MediaStreamSource.h:
        (WebCore):
        (MediaStreamSource):
        (WebCore::MediaStreamSource::requiresAudioConsumer):
        (WebCore::MediaStreamSource::audioConsumers):

2012-11-27  Mike West  <mkwst@chromium.org>

        Improve WebSocketChannel connection failure console messages.
        https://bugs.webkit.org/show_bug.cgi?id=103448

        Reviewed by Adam Barth.

        When a WebSocket connection fails, the current implementation of
        WebSocketChannel::fail binds the generated console message to the
        document's URL, but doesn't give much indication as to the connection
        itself. This patch adjusts the console message to explicitly show the
        URL of the failed connection to give developers a better chance of
        debugging and resolving errors.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):
            Drop the URL parameter from addConsoleMessage, in favour of adding
            the WebSocketHandshake's URL to the message text.

2012-11-27  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed functionality fix, return the height in ImageFrame::height()
        on non-Skia platforms.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::height):

2012-11-27  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        Optimization in image decoding
        https://bugs.webkit.org/show_bug.cgi?id=88424

        Reviewed by Brent Fulgham.

        Optimization in image decoding.
        Reduce branching and multiplications in GIF image decoding loops and functions.
        Rebase and update of original patch by Misha Tyutyunik <michael.tyuytunik@nokia.com>

        Covered by existing tests.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):

2012-11-27  Michael Saboff  <msaboff@apple.com>

        TextIterator unnecessarily converts 8 bit strings to 16 bits
        https://bugs.webkit.org/show_bug.cgi?id=103295

        Reviewed by Brent Fulgham.

        Changed TextIterator to use the contained string instead of calling characters() on that string.
        Other sources of text, like emitCharacter() still use the contained UChar* buffer.
        Added appendTextToStringBuilder() to append the text contents of the current iterator to a string builder
        irrespective of the source of the text.

        No new tests as functionality covered by existing tests.

        * WebCore.exp.in: Updated plainText export and eliminated plainTextToMallocAllocatedBuffer export
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::stringForVisiblePositionRange): Updated to use TextIterator::appendTextToStringBuilder()
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::characterAt): New function to return the indexed character of the current TextIterator
        (WebCore::TextIterator::appendTextToStringBuilder): Added method to append whatever the current text to a StringBuilder
        (WebCore::TextIterator::emitText): Eliminated accessing the character data via characters().
        (WebCore::TextIterator::rangeFromLocationAndLength): Changed to use characterAt().
        (WebCore::plainText): Combined with plainTextToMallocAllocatedBuffer().
        * editing/TextIterator.h:
        (WebCore::TextIterator::startOffset): New getter.
        (WebCore::TextIterator::string): New getter.
        (WebCore::TextIterator::characters): Updated to use correct test source.
        * page/ContextMenuController.cpp:
        (WebCore::selectionContainsPossibleWord): Changed to use characterAt().

2012-11-27  Noel Gordon  <noel.gordon@gmail.com>

        Inline ImageFrame width() and height()
        https://bugs.webkit.org/show_bug.cgi?id=103401

        Reviewed by Brent Fulgham.

        Inline ImageFrame width() and height() to improve the performance of ImageFrame
        function getAddr(x,y) per https://bugs.webkit.org/show_bug.cgi?id=88424#c38

        No new tests. Covered by many existing tests.

        * platform/image-decoders/ImageDecoder.cpp: Remove width() and height() routines
        since they now inlined in the ImageFrame class definition in ImageDecoder.h.
        * platform/image-decoders/ImageDecoder.h: Add inline definitions of width() and
        height() for all ports.
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::width): Remove.
        (WebCore::ImageFrame::height): Remove.

2012-11-27  Michael Pruett  <michael@68k.org>

        Remove ASSERT_NOT_REACHED() from IDBCursorBackendImpl::postSuccessHandlerCallback()
        https://bugs.webkit.org/show_bug.cgi?id=103461

        Reviewed by Kentaro Hara.

        The assertion is applicable only to the Chromium port.

        Tests: storage/indexeddb/*

        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::postSuccessHandlerCallback):

2012-11-27  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] HasSelectorForClassStyleFunctor in Element.cpp seems verbose
        https://bugs.webkit.org/show_bug.cgi?id=103474

        Reviewed by Hajime Morita.

        The code introduced in r135174 looks verbose. We would like to make it simpler.
        We have removed several inline functions and unnecessary structs.

        No new tests, simple refactoring.

        * dom/Element.cpp:
        (WebCore):
        (WebCore::checkSelectorForClassChange):
        (WebCore::Element::classAttributeChanged):
        (WebCore::Element::shouldInvalidateDistributionWhenAttributeChanged):

2012-11-27  Julien Chaffraix  <jchaffraix@webkit.org>

        Support proper <percent> / calc() resolution for grid items
        https://bugs.webkit.org/show_bug.cgi?id=102968

        Reviewed by Ojan Vafai.

        This change introduces a mechanism similar to logical height / width override
        but for containing block. This is required as we don't have a renderer for the
        grid area but any <percent> or calc() size should be resolved against the grid
        area size (which is sized after the grid tracks).

        Tests: fast/css-grid-layout/calc-resolution-grid-item.html
               fast/css-grid-layout/percent-resolution-grid-item.html
               fast/css-grid-layout/percent-grid-item-in-percent-grid-track.html
               fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        Remove any containing block size override.

        (WebCore::RenderBox::overrideContainingBlockContentLogicalWidth):
        (WebCore::RenderBox::overrideContainingBlockContentLogicalHeight):
        (WebCore::RenderBox::hasOverrideContainingBlockLogicalWidth):
        (WebCore::RenderBox::hasOverrideContainingBlockLogicalHeight):
        (WebCore::RenderBox::setOverrideContainingBlockContentLogicalWidth):
        (WebCore::RenderBox::setOverrideContainingBlockContentLogicalHeight):
        (WebCore::RenderBox::clearContainingBlockOverrideSize):
        Containing block override size functions.

        (WebCore::RenderBox::containingBlockLogicalWidthForContent):
        Updated the function to check for any override logical width.

        (WebCore::RenderBox::containingBlockLogicalHeightForContent):
        New function, similar to RenderBox::containingBlockLogicalWidthForContent.

        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        Updated these function to return overrideContainingBlockContentLogicalHeight as needed.

        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        Updated these functions to use the new containingBlockLogicalHeightForContent instead
        of availableLogicalHeight.

        * rendering/RenderBox.h:
        Added the previous new functions.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):
        Updated to override the containing block size so that we properly size our grid items.

2012-11-27  Kent Tamura  <tkent@chromium.org>

        Fix build errors by r135955.

        * dom/ShadowRoot.cpp: Use struct instead of class.
        * dom/TreeScope.cpp: Ditto.

2012-11-27  Eugene Klyuchnikov  <eustas@chromium.com>

        Web Inspector: [Timeline] "Show CPU activity on the ruler" settings checkbox does not take effect until Inspector restart
        https://bugs.webkit.org/show_bug.cgi?id=102210

        Reviewed by Pavel Feldman.

        The checkbox changes should take effect in the real time.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):
        Do not show checkpox if browser is not capable.
        * inspector/front-end/TimelinePanel.js:
        Added setting change listener.

2012-11-27  Andreas Kling  <akling@apple.com>

        Compile time size assertions for TreeScope, ShadowRoot and ElementAttributeData.

        Rubber-stamped by Anders Carlsson.

        * dom/ShadowRoot.cpp:
        (SameSizeAsShadowRoot):
        * dom/TreeScope.cpp:
        (SameSizeAsTreeScope):
        * dom/ElementAttributeData.cpp: Derp.

2012-11-27  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        There's a FIXME that we have too many FrameLoader::load*() functions. This patch consolidates 3 into 1.
        There are still a few more load functions that will be consolidated later. Using FrameLoadRequest as
        the interface into FrameLoader will also provide a place to pass in the initiator. Finally, this matches
        the refactoring done with CachedResourceRequest and CachedResourceLoader.

        No new tests. No change in functionality.

        * WebCore.exp.in:
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::setLockHistory): These are former arguments to load().
        (WebCore::FrameLoadRequest::lockHistory): Ditto.
        (FrameLoadRequest):
        (WebCore::FrameLoadRequest::setShouldCheckNewWindowPolicy): Ditto.
        (WebCore::FrameLoadRequest::shouldCheckNewWindowPolicy): Ditto.
        (WebCore::FrameLoadRequest::substituteData): Ditto.
        (WebCore::FrameLoadRequest::setSubstituteData): Ditto.
        (WebCore::FrameLoadRequest::hasSubstituteData): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load): No change in behavior, just merged it all into one function.
        * loader/FrameLoader.h:
        (FrameLoader):
        * page/DragController.cpp:
        (WebCore::DragController::performDrag):

2012-11-27  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; NSSize is not a CGSize in 32-bit.

        * platform/mac/WebCoreFullScreenWarningView.mm:

2012-11-27  Dean Jackson  <dino@apple.com>

        Attempted build fix for my last commit. The private member variable
        is only used on MAC (at the moment) so guard it with #if PLATFORM.
        I did this rather than having another constructor, because I expect
        other platforms will follow the MAC code soon.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        * html/shadow/MediaControlElements.h:

2012-11-14  Jer Noble  <jer.noble@apple.com>

        Add a new shared class WebCoreFullScreenPlaceholderView, for use in WebKit and WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=102300

        Reviewed by Anders Carlsson.

        Add a new shared class WebCoreFullScreenPlaceholderView, which presents the contents of the 
        WebView prior to full screen with a message informing the user how to exit from full screen mode.

        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        (-[WebCoreFullScreenPlaceholderView initWithFrame:]): Create the warning view and set up the placeholder layer.
        (-[WebCoreFullScreenPlaceholderView setContents:]): Pass along to content view layer.
        (-[WebCoreFullScreenPlaceholderView contents]): Ditto.
        (-[WebCoreFullScreenPlaceholderView setExitWarningVisible:]): Show or hide the exit warning.
        (-[WebCoreFullScreenPlaceholderView mouseDown:]): Call the target with action.

         Add a localized string entry for the "click to exit" text:
         * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::clickToExitFullScreenText):
        * platform/LocalizedStrings.h:
        * English.lproj/Localizable.strings:

        Add the new files to the project and exports list:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2012-11-27  Andreas Kling  <akling@apple.com>

        Shrink ShadowRoot and TreeScope.
        <http://webkit.org/b/103459>

        Reviewed by Antti Koivisto.

        We're creating ~1500 ShadowRoots on Apple's PLT3 content (from <input> and <textarea> elements)
        and a lot of this is wasted space.

        Shrink ShadowRoot and TreeScope a bit by making TreeScope's DocumentOrderedMaps heap-allocated
        and packing the counters on ShadowRoot harder together with the bits.

        202kB progression on Membuster3.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::countElementShadow):
        (ShadowRoot):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::getElementById):
        (WebCore::TreeScope::addElementById):
        (WebCore::TreeScope::removeElementById):
        (WebCore::TreeScope::addImageMap):
        (WebCore::TreeScope::removeImageMap):
        (WebCore::TreeScope::getImageMap):
        (WebCore::TreeScope::addLabel):
        (WebCore::TreeScope::removeLabel):
        (WebCore::TreeScope::labelElementForId):
        * dom/TreeScope.h:
        (WebCore::TreeScope::shouldCacheLabelsByForAttribute):
        (TreeScope):
        (WebCore::TreeScope::hasElementWithId):
        (WebCore::TreeScope::containsMultipleElementsWithId):

2012-11-14  Jer Noble  <jer.noble@apple.com>

        Add a new shared class WebCoreFullScreenWarningView which presents a styled warning message.
        https://bugs.webkit.org/show_bug.cgi?id=102299

        Reviewed by Alexey Proskuryakov.

        Add a shared implementation of a warning view for use in WebKit and WebKit2.

        * platform/mac/WebCoreFullScreenWarningView.h: Added.
        * platform/mac/WebCoreFullScreenWarningView.mm: Added.
        (-[WebCoreFullScreenWarningView initWithTitle:]): Create the view.

        Add the new files to the project and exports list:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2012-11-27  Dean Jackson  <dino@apple.com>

        Make track list control active
        https://bugs.webkit.org/show_bug.cgi?id=101670

        Reviewed by Eric Carlson.

        Hook up the event handler for the captions menu so that it enables or
        disables tracks in the associated HTMLMediaElement.

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

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::toggleTrackAtIndex): New method to toggle the state of a track, by index.
        * html/HTMLMediaElement.h:
        (HTMLMediaElement): Ditto.
        (WebCore::HTMLMediaElement::textTracksOffIndex): Static method to return the "Off" value.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::trackListIndexForElement): Helper function to take a track list <li> element and return the value of the custom attribute.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType): Toggle the state of the button based on captions visibility.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler): On Mac platforms show the captions menu. On other platforms, toggle captions.
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement): Now has a reference to the controls.
        (WebCore::MediaControlClosedCaptionsTrackListElement::create):
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler): When the user clicks on a track list item, look
        for the custom attribute that identifies the associated track, and then toggle that track.
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay): Set a class on the track list elements so they can be
        styled by the injected CSS (with tick marks to represent visibility).
        (WebCore::MediaControlClosedCaptionsTrackListElement::resetTrackListMenu): When building the list of track menu items, add
        a custom HTML attribute to the element so that the corresponding track can be found in the event handler.
        * html/shadow/MediaControlElements.h:
        (MediaControlClosedCaptionsTrackListElement): Add a list of elements representing the track list.
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::createControls):
        (WebCore::MediaControlsApple::changedClosedCaptionsVisibility): Make sure to update the track menu.
        (WebCore::MediaControlsApple::reset):
        * html/shadow/MediaControlsApple.h:
        (MediaControlsApple):

2012-11-27  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Simplify transaction timers and event tracking
        https://bugs.webkit.org/show_bug.cgi?id=102984

        Reviewed by Tony Chang.

        Now that the transaction "commit" decision is made on the front-end, the back end no-longer
        needs to be aware of when individual IDBRequests have dispatched to script or track pending
        events (except for preemptive ones like createIndex). This also lets two timers be collapsed
        into one which significantly simplifies the code flow in IDBTransactionBackendImpl.

        No new tests - just simplification. Exercised by storage/indexeddb/transaction-*.html etc.

        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::prefetchContinueInternal): No more tracking.
        (WebCore::IDBCursorBackendImpl::prefetchReset): No more tracking.
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal): No more tracking.
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStoreInternal): No more tracking.
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReadyInternal): No more tracking.
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal): No more tracking.
        (WebCore::IDBObjectStoreBackendImpl::deleteIndexInternal): No more tracking.
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent): Order must be:
        1. request is unregistered from transaction (so request list may be empty)
        2. abort transaction if event being dispatched was an error
        3. deactivate transaction (which may commit if #1 left it empty and #2 didn't abort)
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl): Need to track if commit
        was requested; previously the front end would have triggered an event timer which, on
        completion, would be the signal that the front end was finished.
        (WebCore::IDBTransactionBackendImpl::scheduleTask): Schedule a timer to service the new
        task, if necessary.
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::hasPendingTasks):
        (WebCore::IDBTransactionBackendImpl::commit):
        (WebCore::IDBTransactionBackendImpl::taskTimerFired): Picks up "commit" responsibilities
        from the now deleted taskEventTimerFired, if everything is truly complete done.
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        (WebCore::IDBTransactionBackendInterface::didCompleteTaskEvents): Removed from interface.

2012-11-27  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace toWebCoreString()/toWebCoreAtomicString() in CodeGeneratorV8.pm with V8StringResource
        https://bugs.webkit.org/show_bug.cgi?id=103391

        Reviewed by Adam Barth.

        This is an incremental effort for fixing bug 103331.
        I confirmed that this patch causes no performance regression
        for the micro benchmarks (https://bugs.webkit.org/attachment.cgi?id=176178).

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrSetter):
        (GenerateEventListenerCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::addEventListenerCallback):
        (WebCore::TestEventTargetV8Internal::removeEventListenerCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::addEventListenerCallback):
        (WebCore::TestObjV8Internal::removeEventListenerCallback):

2012-11-27  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Regions] Elements using transforms are not repainted correctly when rendered in a region
        https://bugs.webkit.org/show_bug.cgi?id=102826

        Reviewed by David Hyatt.

        When the page is composited, all the elements will have a composited repaint container. In that case we will
        never catch the repaints in the RenderFlowThread, but they will go directly to the RenderView. 
        There's a single case when the parent composited layer of an element inside the RenderFlowThread will get 
        its own repaints. That case only happens when the parent composited layer is also part of the same flow thread.
        Right now compositing is disabled for elements inside the RenderFlowThread, so that case doesn't even happen yet.
        That will be fixed in https://bugs.webkit.org/show_bug.cgi?id=84900.

        Test: fast/repaint/region-painting-in-composited-view.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):

2012-11-27  Tony Chang  <tony@chromium.org>

        Unreviewed, win compile fix take 2.

        Try again to force this file to recompile.

        * rendering/RenderingAllInOne.cpp:

2012-11-27  Tony Chang  <tony@chromium.org>

        Unreviewed, win compile fix.

        Touch RenderingAllInOne.cpp to force it to rebuild.

        * rendering/RenderingAllInOne.cpp:

2012-11-27  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Scroll bars do not grow on hover
        https://bugs.webkit.org/show_bug.cgi?id=103382
        <rdar://problem/12555262>

        Reviewed by Beth Dakin.

        Export a few WebCore::Scrollbar methods to WebKit(2).

        * WebCore.exp.in:

2012-11-27  Tom Sepez  <tsepez@chromium.org>

        Regression(r129406): Fix the scope of the WidgetHierarchyUpdateSuspensionScope in Element::Attach().
        https://bugs.webkit.org/show_bug.cgi?id=100803

        Reviewed by Abhishek Arya.

        Ensures that the suspension scope has gone out of scope before calling into
        resumePostAttachCallbacks().
        
        Test: fast/dom/adopt-node-crash-2.html

        * dom/Element.cpp:
        (WebCore::Element::attach):

2012-11-27  Tony Chang  <tony@chromium.org>

        Remove hidden limiter div in the input slider shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=102993

        Reviewed by Ojan Vafai.

        The shadow DOM for input sliders would have a hidden div (the TrackLimiterElement)
        the size of the thumb which would limit the position of thumb since the width of
        the thumb takes up space in the track. This patch simplifies the shadow DOM by
        removing this hidden div and computing the position of the thumb taking the size of
        the thumb into account.

        No new tests, covered by existing tests in fast/forms.

        * css/mediaControlsChromium.css:
        (input[type="range"]::-webkit-media-slider-container > div): We were depending on the behavior of the limiter having negative margins, causing the slider div
        to overflow. Moving the negative margin to the slider produces the same effect.
        * css/mediaControlsChromiumAndroid.css:
        (input[type="range"]::-webkit-media-slider-container > div): Ditto.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree): Remove limiter div.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::layout): Adjust the available space for the thumb and correctly position in the vertical case.
        (WebCore::SliderThumbElement::setPositionFromPoint): Adjust the usable track size and simplify RTL code (no need to account for the limiter).
        (WebCore): Delete limiter code.
        * html/shadow/SliderThumbElement.h:
        (WebCore): Delete limiter code.
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout): Delete limiter code.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks): Simplify code for painting tick marks.

2012-11-27  Alpha Lam  <hclam@chromium.org>

        [chromium] Implement full-featured image cache
        https://bugs.webkit.org/show_bug.cgi?id=99784

        Reviewed by Stephen White.

        Implement a thread-safe image cache to be used with deferred image
        decoding. Image cache can now be accessed on any thread.

        The patch implements the following logic:
        1. Mutex to protect all cache operations.
        2. Cache indexing using key (ImageFrameGenerator*, SkISize scaledSize)
        3. Cache lookup.
        4. Cache insertion.
        5. Generation of cache entry by scaling full size image.
        6. Generation of cache entries by decoding and scaling.

        Classes involved:

        ImageDecodingStore

        Responsible for owning cache entries and indexing. Pruning and memory
        management will be added later.

        ImageFrameGenerator

        Responsible for generating new cache enties and insert them into
        ImageDecodingStore.

        LazyDecodingPixelRef

        Responsible for cache lookup and lazy generation of cache entries
        using ImageFrameGenerator. There is a mutex to protect concurrent
        lock operations.

        These items are not implemented in this patch:
        1. Cache pruning.
        2. Setting cache memory limit.
        3. Cache deletion.
        4. Caching incomplete images and ImageDecoder.

        Unit tests added in ImageFrameGeneratorTest.cpp.
        Layout tests are under platform/chromium/virtual/fast/images.

        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::~DeferredImageDecoder):
        (WebCore::DeferredImageDecoder::createResizedLazyDecodingBitmap):
        (WebCore::DeferredImageDecoder::setEnabled):
        (WebCore):
        (WebCore::DeferredImageDecoder::frameBufferAtIndex):
        (WebCore::DeferredImageDecoder::createLazyDecodingBitmap):
        * platform/graphics/chromium/DeferredImageDecoder.h:
        (DeferredImageDecoder):
        * platform/graphics/chromium/ImageDecodingStore.cpp:
        (WebCore::ImageDecodingStore::instance):
        (WebCore::ImageDecodingStore::initializeOnce):
        (WebCore::ImageDecodingStore::shutdown):
        (WebCore::ImageDecodingStore::lockCompleteCache):
        Lookup complete cache entry using hash key, increment use count.
        (WebCore::ImageDecodingStore::lockIncompleteCache): TODO.
        (WebCore::ImageDecodingStore::unlockCache):
        Lookup cache entry using hash key, decrement use count.
        (WebCore):
        (WebCore::ImageDecodingStore::insertAndLockCache):
        Insert new cache entry and increment use count.
        (WebCore::ImageDecodingStore::prune): TODO.
        * platform/graphics/chromium/ImageDecodingStore.h:
        (WebCore):
        (ImageDecodingStore):
        (WebCore::ImageDecodingStore::CacheEntry::create):
        (WebCore::ImageDecodingStore::CacheEntry::createAndUse):
        (CacheEntry):
        (WebCore::ImageDecodingStore::CacheEntry::CacheEntry):
        (WebCore::ImageDecodingStore::CacheEntry::~CacheEntry):
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::setData):
        (WebCore::ImageFrameGenerator::decodeAndScale):
        Method for creating new cache entries. This is protected by a mutex
        to prevent concurrent operations. Which means only one thread can
        generate new cache entries for a set of encoded data.
        (WebCore):
        (WebCore::ImageFrameGenerator::tryToLockCache):
        Tries to lookup a cache entry.
        (WebCore::ImageFrameGenerator::tryToScale):
        Tries to lookup a full size cache entry and generate a scaled version.
        (WebCore::ImageFrameGenerator::tryToDecodeAndScale):
        Tries to decode and scale.
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (WebCore):
        (ImageDecoderFactory):
        (WebCore::ImageFrameGenerator::create):
        (ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::setImageDecoderFactoryForTesting):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::onLockPixels):
        (WebCore::LazyDecodingPixelRef::onUnlockPixels):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (WebCore):
        (LazyDecodingPixelRef):
        * platform/graphics/chromium/ScaledImageFragment.cpp:
        (WebCore::ScaledImageFragment::ScaledImageFragment):
        * platform/graphics/chromium/ScaledImageFragment.h:
        (WebCore):
        (WebCore::ScaledImageFragment::create):
        (ScaledImageFragment):
        (WebCore::ScaledImageFragment::scaledSize):
        * platform/graphics/chromium/SkSizeHash.h: Added.
        (WTF):

2012-11-27  Mike West  <mkwst@chromium.org>

        Expanding variable names in ConsoleMessage.
        https://bugs.webkit.org/show_bug.cgi?id=103436

        Reviewed by Adam Barth.

        Variable names like 'm' should be replaced with full words, like
        'myOhMyThisIsAnAwesomeVariable' (or something more descriptive).

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        (ConsoleMessage):

2012-11-27  Aaron Colwell  <acolwell@chromium.org>

        Use-after-free in media player handling
        https://bugs.webkit.org/show_bug.cgi?id=103426

        Reviewed by Eric Carlson.

        Fixed use-after-free bugs caused by the MediaSource not being closed before the HTMLMediaElement or the MediaPlayer
        is destroyed. Closing the MediaSource causes it to clear its reference to the MediaPlayer which prevents
        the use-after-free problems from happening.

        Test: http/tests/media/media-source/video-media-source-closed-on-htmlmediaelement-destruction.html

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

2012-11-27  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Remove IDBDatabase.setVersion API
        https://bugs.webkit.org/show_bug.cgi?id=94972

        Reviewed by Tony Chang.

        This has been out of the spec for over a year. No other browser has
        implemented it for close to a year.

        Tests - removed.html

        * Modules/indexeddb/IDBCallbacks.h:
        (IDBCallbacks):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:

2012-11-27  Mike West  <mkwst@chromium.org>

        Log to console when autofocus is blocked by sandbox attribute.
        https://bugs.webkit.org/show_bug.cgi?id=103255

        Reviewed by Ojan Vafai.

        Adding a short log message when autofocus is blocked by a document's
        sandbox flags, as it's currently a black box.

        Test: fast/forms/autofocus-in-sandbox-without-allow-scripts.html

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

2012-11-27  Dean Jackson  <dino@apple.com>

        Attempted build fix after http://trac.webkit.org/changeset/135888.

        * WebCore.exp.in:
        * WebCore.order:

2012-11-27  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r135890. #else, not #elif.

        * platform/graphics/ca/PlatformCALayer.h:
        (PlatformCALayer):

2012-11-27  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLCollection on Document should be stored on NodeListsNodeData like other HTMLCollections and LiveNodeLists
        https://bugs.webkit.org/show_bug.cgi?id=103364

        Reviewed by Anders Carlsson.

        Replaced the HTMLCollection storage in Document by NodeListsNodeData used by other HTMLCollection's
        and LiveNodeList's. Now NodeListsNodeData is the only storage for HTMLCollection and LiveNodeList.

        * dom/Document.cpp:
        (WebCore::Document::Document): Removed code for m_collection since it has been removed.
        (WebCore::Document::~Document): Ditto.
        (WebCore::Document::registerNodeList): Renamed. 
        (WebCore::Document::unregisterNodeList): Ditto.
        (WebCore::Document::ensureCachedCollection): Renamed from cachedCollection to match the convetion
        used elsewhere. Also use NodeListNodeData::addCacheWithAtomicName now that m_collection is gone.
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::plugins):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems): Use addCacheWithAtomicName.
        (WebCore::Document::documentNamedItems): Ditto.
        (WebCore::Document::reportMemoryUsage): Removed code for m_collection since it has been removed.
        * dom/Document.h:
        (WebCore::Document): Removed m_collections, m_documentNamedItemCollections, and
        m_windowNamedItemCollections.
        * dom/Element.cpp:
        (WebCore::Element::ensureCachedHTMLCollection): Merged ElementRareData::ensureCachedHTMLCollection.
        (WebCore::Element::cachedHTMLCollection): Merged ElementRareData::cachedHTMLCollection.
        * Source/WebCore/dom/ElementRareData.h: Removed ensureCachedHTMLCollection, cachedHTMLCollection,
        and removeCachedHTMLCollection since they're no longer used.
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeListBase::LiveNodeListBase): Call registerNodeList now that LiveNodeList
        and HTMLCollection share the same storage in all nodes.
        (WebCore::LiveNodeListBase::~LiveNodeListBase): Ditto about unregisterNodeList.
        (WebCore::LiveNodeList): Removed the calls to registerNodeList and unregisterNodeList since they
        are now called in the base class.
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::create):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCacheWithAtomicName): Pass in CollectionType as the second argument
        to T::create. This is used in HTMLNameCollection::create. Sevearl LiveNodeList constructors and
        create functions have been modified to support this.
        (WebCore::NodeListsNodeData::adoptTreeScope):
        (WebCore::NodeListsNodeData::namedNodeListKey): CollectionType is no longer restricted in its range.
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::create):
        (WebCore::HTMLTagNodeList::create):
        * html/CollectionType.h: Deleted a bunch of unused inline functions and constants, and cleanup enum.
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection): Removed the call to registerNodeListCache since it's called
        in LiveNodeListBase now.
        (WebCore::HTMLCollection::~HTMLCollection): Ditto. Also replaced calls to removeCachedHTMLCollection
        of Element and Document by a call to NodeListsNodeData::removeCacheWithAtomicName.
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::HTMLFormControlsCollection):
        (WebCore::HTMLFormControlsCollection::create):
        * html/HTMLFormControlsCollection.h:
        (HTMLFormControlsCollection):
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection):
        (WebCore::HTMLNameCollection::~HTMLNameCollection):
        * html/HTMLNameCollection.h:
        (WebCore::HTMLNameCollection::create):
        (HTMLNameCollection):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection):
        (WebCore::HTMLOptionsCollection::create):
        * html/HTMLOptionsCollection.h:
        (HTMLOptionsCollection):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection):
        (WebCore::HTMLTableRowsCollection::create):
        * html/HTMLTableRowsCollection.h:
        (HTMLTableRowsCollection):
        * html/LabelsNodeList.h:
        (WebCore::LabelsNodeList::create):
        * html/RadioNodeList.h:
        (WebCore::RadioNodeList::create):

2012-11-27  Pravin D  <pravind.2k4@gmail.com>

        max-height property not respected in case of tables
        https://bugs.webkit.org/show_bug.cgi?id=98633

        Reviewed by Julien Chaffraix.

        The max-height property determines the maximum computed height an element can have. In case of tables
        the computed height was not being limited by the max-height property. The current patch fixes the same.

        Test: fast/table/css-table-max-height.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
          Helper function to compute height from the given style height.
          This function handles style height of type fixed, percent and viewport percent.
          As height of type 'calculated' gets internally resolved to either fixed or percent
          there is no special handling required for the same.

        (WebCore):
        (WebCore::RenderTable::layout):
          Logic to compute the logical height of an element such that it does not exceed the max-height value given that
          min-width < Content height < max-height, when min-height < max-height.
          However max-height value is not respected if either min-height > max-height or Content height > max-height.

        * rendering/RenderTable.h:
        (RenderTable):
          Function definition for the newly add function convertStyleLogicalHeightToComputedHeight().

2012-11-27  Roger Fong  <roger_fong@apple.com>

        Windows specific implementation of usesTileCacheLayer needed after r133056.
        https://bugs.webkit.org/show_bug.cgi?id=103321

        Reviewed by Simon Fraser.

        After r133056 it no longer suffices to use the existing usesTileCacheLayer method on Windows.
        The change resulted in 3 crashing tests:
        compositing/rotated-tiled-clamped
        compositing/rotated-tiled-preserve3d-clamped
        fast/events/tabindex-focus-blur-all

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::usesTileCacheLayer):
        (PlatformCALayer): 
        Adding in platform specific method for Windows that returns false for this method.

2012-11-27  Christophe Dumez  <christophe.dumez@intel.com>

        Canvas does not draw any text if the font is not fully loaded yet
        https://bugs.webkit.org/show_bug.cgi?id=103392

        Reviewed by Kenneth Rohde Christiansen.

        Update CanvasRenderingContext2D::drawTextInternal() so that the
        text is being drawn, even if custom fonts are still being loaded.
        Without this, WebKit was not drawing any text on the canvas if
        the needed font is custom and is not fully loaded yet. This seems
        broken.

        The new behavior is according to specification:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html

        The specification says: "If a font is used before it is fully
        loaded, or if the font style source object does not have that
        font in scope at the time the font is to be used, then it must be
        treated as if it was an unknown font, falling back to another as
        described by the relevant CSS specifications."

        Test: http/tests/canvas/canvas-slow-font-loading.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText): Add argument to specify the behavior
        when custom fonts are not ready. By default, it will not draw
        anything (same behavior as before). However, the Canvas code
        can now request that a fallback font is used if the custom
        font is not fully loaded yet.
        * platform/graphics/Font.h: #undef Complex if defined to avoid
        conflicting with Complex value in CodePath enum. X11/X.h is
        defining Complex to 0.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText):
        * platform/graphics/GraphicsContext.h:
        (WebCore):
        (GraphicsContext):

2012-11-27  Dean Jackson  <dino@apple.com>

        No need for ExceptionCode in HTMLMediaElement::load
        https://bugs.webkit.org/show_bug.cgi?id=103438

        Reviewed by Eric Carlson.

        After https://bugs.webkit.org/show_bug.cgi?id=103318, there is no
        need for the ExceptionCode parameter in load(). The HTML5 spec says
        that all errors in loading are communicated via state.
        http://dev.w3.org/html5/spec/media-elements.html#dom-media-load

        Of the 29 tests exercising load(), none of them were exercising
        exceptions (obviously).

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

2012-11-27  Robert Hogan  <robert@webkit.org>

        REGRESSION (r125578): word-wrapping in absolute position with nbsp, word-spacing and custom font
        https://bugs.webkit.org/show_bug.cgi?id=101443

        Reviewed by David Hyatt.

        Leading non-breaking space in a text run should always get word-spacing applied. When RenderText
        calculates the preferred with of a run of text it breaks it up into word segments that contain
        no breaking spaces and calculates the width of each. So when calculating the width of '&nbsp;b' 
        it needs to add word-spacing to the leading non-breaking space as it does not get collapsed away.

        Test: fast/text/word-space-nbsp.html

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):

2012-11-27  Yong Li  <yoli@rim.com>

        [BlackBerry] EventLoop should end when WebKit thread is exiting
        https://bugs.webkit.org/show_bug.cgi?id=103301

        Reviewed by Rob Buis.
        RIM PR# 194379.
        Internally reviewed by Joe Mason.

        Break the nested event loop when WebKit thread has been asked to quit.

        * platform/blackberry/EventLoopBlackBerry.cpp:
        (WebCore::EventLoop::cycle):

2012-11-27  Pratik Solanki  <psolanki@apple.com>

        objc/objc-runtime.h does not exist on all PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=101780

        Reviewed by Brent Fulgham.

        Clean up header includes so we don't include objc/objc-runtime.h.

        No new tests because no functional changes.

        * bridge/objc/objc_header.h:
        * page/mac/EventHandlerMac.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/graphics/mac/WebLayer.mm:
        * platform/mac/WebCoreObjCExtras.mm:
        * platform/mac/WebVideoFullscreenController.mm:

2012-11-27  Eberhard Graether  <egraether@google.com>

        Plumbing showPaintRects out of InspectorPageAgent to use a different drawing implementation if available.
        https://bugs.webkit.org/show_bug.cgi?id=102452

        Reviewed by Pavel Feldman.

        This change makes the showPaintRects setting in the Web Inspector's settings notify InspectorClient
        when changed. And the default paint rects drawing is not used if an alternative is available.
        This allows Chromium to draw the paint rects in the compositor's HUDLayer.

        No new tests.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::overridesShowPaintRects):
        (WebCore::InspectorClient::setShowPaintRects):
        (InspectorClient):
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::setShowPaintRects):
        (WebCore::InspectorPageAgent::didPaint):

2012-11-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Unreviewed cleanup.

        Remove leftover file that was replaced by PlatformScreenQt.cpp 4 years ago.

        * platform/qt/ScreenQt.cpp: Removed.

2012-11-27  Istiaque Ahmed  <lazyboy@chromium.org>

        freeV8NPObject: Skip trying to remove object from per context data's ObjectMap if the object does not exist in the map.
        https://bugs.webkit.org/show_bug.cgi?id=103356

        Reviewed by Adam Barth.

        Before introducing per context data, it used to be the case that we would ignore removing v8 object
        from context data's map if we couldn't find it. With perContextData change, this turned into an ASSERT
        instead and we had crash reports.
        Related crbug.com/154462.

        Test: platform/chromium/plugins/release-frame-content-window.html

        * bindings/v8/NPV8Object.cpp:
        (WebCore::freeV8NPObject):

2012-11-27  Marja Hölttä  <marja@chromium.org>

        Add callbacks to the FrameLoaderClient when a resource is requested
        https://bugs.webkit.org/show_bug.cgi?id=92761

        Reviewed by Adam Barth.

        In Chromium, when an extension script cancels a network
        request (which happens out of process), we'd like to
        notify content scripts running on the current page about
        which elements failed to load because the requests were
        cancelled (as opposed to e.g. the network request just
        didn't work). Since the resource request itself does not
        carry any information what DOM element is was made for,
        currently a content script has to search the DOM tree and
        guess which requests will be cancelled by its counter
        part. By adding these callbacks, the embedder can make
        this connection explictly.

        Test: platform/chromium/fast/loader/resource-request-callbacks.html

        * loader/FrameLoaderClient.h:
        (WebCore):
        (WebCore::FrameLoaderClient::dispatchWillRequestResource):
        (FrameLoaderClient):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2012-11-27  Dean Jackson  <dino@apple.com>

        Unreviewed build fix for r135866.

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

2012-11-27  Leo Yang  <leoyang@rim.com>

        [BlackBerry] Adapt to the change of BlackBerry::Platform::FilterStream::notifyHeadersReceived
        https://bugs.webkit.org/show_bug.cgi?id=103425

        Reviewed by Yong Li.

        A const has been added for HeaderList parameter of BlackBerry::Platform::FilterStream::notifyHeadersReceived.
        The patch is adapting to this change.

        No functionalities changed no new tests.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyHeadersReceived):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        * platform/network/blackberry/rss/RSSFilterStream.cpp:
        (WebCore::RSSFilterStream::notifyHeadersReceived):
        * platform/network/blackberry/rss/RSSFilterStream.h:

2012-11-27  Min Qin  <qinmin@chromium.org>

        Don't throw an exception if user gesture is required for load
        https://bugs.webkit.org/show_bug.cgi?id=103318

        Reviewed by Eric Carlson.

        There is no need to throw an exception if media load requires user gesture.
        Since chrome does not render the poster and media control after an exception is thrown, throwing an exception may break a lot of sites on android.
        Change a current test to match the new behavior: media/video-load-require-user-gesture.html

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

2012-11-27  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GStreamer] Verify if GStreamer was previously initialized
        https://bugs.webkit.org/show_bug.cgi?id=103151

        Reviewed by Philippe Normand.

        This patch calls gst_is_initialized() before calling gst_init_check()
        in order to verify if GStreamer has not been initialized before.

        This is useful particularly for WebKit1 so the applications could
        initialize GStreamer before.

        As the API call was added in GStreamer v0.10.31, the patch fences the
        call only in that version of GStreamer or above.

        No new tests, existing media tests cover this change.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::initializeGStreamer):

2012-11-27  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove V8StringResource::m_string
        https://bugs.webkit.org/show_bug.cgi?id=103367

        Reviewed by Adam Barth.

        This patch cleans up V8StringResource and removes V8StringResource::m_string.
        This patch won't change performance. (This patch just adds one redundant IsString()
        check and one IsInt32() check.) I confirmed no performance regression in micro benchmarks
        (https://bugs.webkit.org/attachment.cgi?id=176178).

        No tests. No change in behavior.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8NonStringValueToWebCoreString):
        * bindings/v8/V8StringResource.cpp:
        (WebCore::int32ToWebCoreStringFast):
        (WebCore::String):
        (WebCore::AtomicString):
        (WebCore):
        * bindings/v8/V8StringResource.h:
        (WebCore::V8StringResource::V8StringResource):
        (WebCore::V8StringResource::prepareBase):
        (WebCore::V8StringResource::toString):
        (V8StringResource):
        (WebCore::::prepare):

2012-11-27  Alec Flett  <alecflett@chromium.org>

        IndexedDB: stub out IDBDatabaseBackendInterface::createTransaction
        https://bugs.webkit.org/show_bug.cgi?id=102730

        Reviewed by Darin Fisher.

        Stub out and support passing a 64-bit transaction id
        so the frontend can refer to transactions by id rather than
        a proxy object or a direct pointer reference. This will ultimately
        loosen ownership and lifetime of transactions from the frontend
        and backend.

        No new tests, this is just part of a refactor.

        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::createTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::id):

2012-11-27  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Crash when dispatching regionlayoutupdate
        https://bugs.webkit.org/show_bug.cgi?id=102944

        Reviewed by Andreas Kling.

        The event dispatch function was incorrectly assuming the RenderNamedFlowThread is valid. Because the event is asynchronous it's
        possible for the flow to be in the "NULL" state (the renderer is 0) while the regionlayoutupdate event is dispatched.

        Test: fast/regions/webkit-named-flow-event-crash.html

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::dispatchRegionLayoutUpdateEvent): Remove the ASSERT and don't dispatch the event if the flow is
            in the "NULL" state.

2012-11-27  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Absolutely positioned regions do not expand to fill their container
        https://bugs.webkit.org/show_bug.cgi?id=102385

        Reviewed by Julien Chaffraix.

        In the case of an absolutely positioned region with height auto, height computation should follow
        the path of block elements instead of replaced elements.

        Tests: fast/regions/autosize-abspos-anchoredregion-vertlr.html
               fast/regions/autosize-abspos-anchoredregion.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalHeight): Skip replaced element height computation when a region has height auto.
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::shouldHaveAutoLogicalHeight): Make it private since it is not accessed from outside.

2012-11-27  Alexander Pavlov  <apavlov@chromium.org>

        Incorrect value of CSSStyleDeclaration#length when a shorthand property is inherit or initial
        https://bugs.webkit.org/show_bug.cgi?id=73002

        Reviewed by Alexis Menard.

        Before the patch, "inherit" and "initial" shorthands would get added to the StylePropertySet as-is, their longhands unspecified.
        This patch tackles two aspects of the problem:
        - When parsing "initial" and "inherit" shorthands, their longhands are added to the property set with the corresponding values.
        - When querying "initial" and "inherit" shorthands, their values are reconstructed from the longhands as usual, but if all of the longhands
          are found to have the same explicit "initial" or "inherit" value, the respective single value is returned as the shorthand value.

        When reconstructing shorthands, a "common value" is tracked. If all longhands involved have the same explicit value, it becomes the
        "common value", otherwise it is a String(). The "inherit" or "initial" common value ultimately becomes the shorthand value
        (except for the "background-position" shorthand, which is a special case).

        * css/CSSParser.cpp:
        (WebCore::parseKeywordValue): Parse shorthands' "initial" and "inherit" values using the CSSParser.
        (WebCore::CSSParser::addExpandedPropertyForValue): Add simple property or all sharthand's longhands with given value and priority.
        (WebCore::CSSParser::parseValue): For "initial" and "inherit" shorthands, add their longhands with the respective value, not the shorthands proper.
        * css/CSSParser.h: Add addExpandedPropertyForValue().
        * css/StylePropertySet.cpp:
        (WebCore::isInitialOrInherit): Check if the value is "initial" or "inherit".
        (WebCore):
        (WebCore::StylePropertySet::appendFontLonghandValueIfExplicit): Modified to track the common value for the "font" shorthand.
        (WebCore::StylePropertySet::fontValue): Ditto.
        (WebCore::StylePropertySet::get4Values): Return "inherit" or "initial" if all 4 values are explicitly "inherit" or "initial".
        (WebCore::StylePropertySet::getLayeredShorthandValue): Use the common value approach for layered shorthands.
        (WebCore::StylePropertySet::getShorthandValue): Ditto for ordinary shorthands.
        (WebCore::StylePropertySet::borderPropertyValue): Ditto for the "border" shorthand.
        * css/StylePropertySet.h: Modify the appendFontLonghandValueIfExplicit() signature.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont): Now that "inherit" and "initial" shorthands are represented by their longhands,
        we need to check the string value of the "font" shorthand for being "inherit" or "initial" instead: getPropertyCSSValue() no longer works,
        since the shorthand itself is no longer added to the StylePropertySet.

2012-11-27  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Renamed TRYCATCH => V8TRYCATCH.
        (I forgot to apply reviewer's comment in bug 103352 when landing r135817.)

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        (GenerateEventConstructorCallback):
        (ConvertToV8StringResource):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooCallback):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionCallback):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::itemCallback):
        (WebCore::TestEventTargetV8Internal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::TestMediaQueryListListenerV8Internal::methodCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::staticStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::voidMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::longMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodWithSequenceArgCallback):
        (WebCore::TestObjV8Internal::methodReturningSequenceCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::idbKeyCallback):
        (WebCore::TestObjV8Internal::optionsObjectCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsUndefinedCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsNullStringCallback):
        (WebCore::TestObjV8Internal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        (WebCore::TestObjV8Internal::overloadedMethod2Callback):
        (WebCore::TestObjV8Internal::overloadedMethod3Callback):
        (WebCore::TestObjV8Internal::overloadedMethod4Callback):
        (WebCore::TestObjV8Internal::overloadedMethod6Callback):
        (WebCore::TestObjV8Internal::overloadedMethod7Callback):
        (WebCore::TestObjV8Internal::overloadedMethod8Callback):
        (WebCore::TestObjV8Internal::overloadedMethod9Callback):
        (WebCore::TestObjV8Internal::overloadedMethod10Callback):
        (WebCore::TestObjV8Internal::overloadedMethod11Callback):
        (WebCore::TestObjV8Internal::classMethodWithOptionalCallback):
        (WebCore::TestObjV8Internal::overloadedMethod12Callback):
        (WebCore::TestObjV8Internal::classMethodWithClampCallback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod1Callback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod2Callback):
        (WebCore::TestObjV8Internal::enabledPerContextMethod1Callback):
        (WebCore::TestObjV8Internal::enabledPerContextMethod2Callback):
        (WebCore::TestObjV8Internal::stringArrayFunctionCallback):
        (WebCore::TestObjV8Internal::convert1Callback):
        (WebCore::TestObjV8Internal::convert2Callback):
        (WebCore::TestObjV8Internal::convert4Callback):
        (WebCore::TestObjV8Internal::convert5Callback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        (WebCore::TestObjV8Internal::variadicStringMethodCallback):
        (WebCore::TestObjV8Internal::variadicDoubleMethodCallback):
        (WebCore::TestObjV8Internal::variadicNodeMethodCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructor1Callback):
        (WebCore::V8TestOverloadedConstructors::constructor2Callback):
        (WebCore::V8TestOverloadedConstructors::constructor3Callback):
        (WebCore::V8TestOverloadedConstructors::constructor4Callback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/v8/V8Binding.h:
        (WebCore::toV8Sequence):
        * bindings/v8/V8BindingMacros.h:
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallbackCustom):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::profileCallback):
        (WebCore::V8Console::profileEndCallback):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::getInt8Callback):
        (WebCore::V8DataView::getUint8Callback):
        (WebCore::V8DataView::setInt8Callback):
        (WebCore::V8DataView::setUint8Callback):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventCallback):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::addCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8IntentCustom.cpp:
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::importScriptsCallback):

2012-11-27  Dan Carney  <dcarney@google.com>

        [V8] add contextForWorld helper function to ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=103376

        Reviewed by Kentaro Hara.

        Reducing some commonly occuring code with an inline function.

        No new tests. No change in functionality.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::contextForWorld):
        (WebCore):
        (WebCore::ScriptController::currentWorldContext):
        (WebCore::ScriptController::mainWorldContext):
        * bindings/v8/ScriptController.h:
        (ScriptController):

2012-11-26  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Implement the mimetype icon methods
        https://bugs.webkit.org/show_bug.cgi?id=103260

        Reviewed by Simon Hausmann.

        * platform/graphics/Icon.h:
        (Icon):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):

2012-09-17  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Incorrect rect-based hit-test result when hit-test region includes culled inlines
        https://bugs.webkit.org/show_bug.cgi?id=88376

        Reviewed by Dave Hyatt.

        Move the handling of culled inlines from HitTestResult::addNodeToRectBasedTestResult to 
        InlineFlowBox::nodeAtPoint. This makes it possible to fix a number of bugs with how
        culled inlines were handled. They are now checked after all their children, and may
        terminate area-based hit-testing if they contain the whole area.

        Tests: fast/dom/nodesFromRect/nodesFromRect-culled-inlines.html
               fast/dom/nodesFromRect/nodesFromRect-culled-inline-with-linebreak.html

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestLocation::HitTestLocation):
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        * rendering/HitTestResult.h:
        (HitTestLocation):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::hitTestCulledInline):
        * rendering/RenderInline.h:
        (RenderInline):

2012-11-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        REGRESSION(134887) [Qt][EFL][WK2] Repaint counter not working
        https://bugs.webkit.org/show_bug.cgi?id=103261

        Reviewed by Noam Rosenthal.

        Fixed regression introduced in 134887, which introduced the
        updateContentsNoSwizzle method and called it directly from
        the repaint counter.

        This method obviously needs to bind the texture.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContentsNoSwizzle):

2012-11-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135786.
        http://trac.webkit.org/changeset/135786
        https://bugs.webkit.org/show_bug.cgi?id=103379

        It made 3 plugin tests timeout on several platforms (Requested
        by Ossy on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoadRequest.cpp: Removed.
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (FrameLoadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        * loader/FrameLoader.h:
        (FrameLoader):
        * page/DragController.cpp:
        (WebCore::DragController::performDrag):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):

2012-11-27  Kent Tamura  <tkent@chromium.org>

        Implement ValidityState::badInput
        https://bugs.webkit.org/show_bug.cgi?id=102861

        Reviewed by Hajime Morita.

        Add ValidityState::badInput, add hasBadInput, which always returns
        false, to FormAssociatedElement, HTMLInputElement, and InputType.

        For NumberInputType, we had hasUnacceptableValue, which was a hack to
        make an input element match to :invalid if the element had non-number
        strings. We don't need the hack any more because badInput affects :invalid
        style. hasUnacceptableValue is re-used for hasBadInput implementation.
        We cleared invalid numbers when elements lost focus to tell users that
        the element had invalid numbers. We don't need this behavior because the
        interactive validation tells it.

        For date/time input types, we should make an input badInput when the
        input has empty value but its sub-fields have values. It covers both of
        partial input cases such as 12/--/2012 and invalid dates such as
        02/31/2012.

        For other types, ValidityState::badInput always returns false.

        This patch doesn't contain tests for badInput validation messages. They
        will be added later.

        Tests: fast/forms/date-multiple-fields/date-multiple-fields-validity-badinput.html
               fast/forms/datetime-multiple-fields/datetime-multiple-fields-validity-badinput.html
               fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-validity-badinput.html
               fast/forms/month-multiple-fields/month-multiple-fields-validity-badinput.html
               fast/forms/number/number-validity-badinput.html
               fast/forms/time-multiple-fields/time-multiple-fields-validity-badinput.html
               fast/forms/week-multiple-fields/week-multiple-fields-validity-badinput.html

        * html/ValidityState.idl: Add badInput IDL attribute.
        * html/ValidityState.h:
        (ValidityState): Add badInput.
        * html/ValidityState.cpp:
        (WebCore::ValidityState::badInput):
        Added. Calls FormAssociatedElement::hasBadInput.

        * html/FormAssociatedElement.h:
        (FormAssociatedElement): Add hasBadInput.
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::hasBadInput):
        Added. It always returns false.
        (WebCore::FormAssociatedElement::valid): Takes account of hasBadInput().

        * html/HTMLInputElement.h:
        (HTMLInputElement):
        Remove hasUnacceptableValue, and add hasBadInput override.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::hasBadInput):
        Added. Delegate to InputType::hasBadInput.
        (WebCore): Remove hasUnacceptableValue.

        * html/InputType.h:
        (InputType): Add hasBadInput and badInputText, and remove
        hasUnacceptableValue.
        * html/InputType.cpp:
        (WebCore::InputType::hasBadInput): Added. Returns false.
        (WebCore::InputType::badInputText):
        Added. This function should not be called because hasBadInput always
        returns false.
        (WebCore::InputType::validationMessage):
        Supports badInput. This returns badInputText if hasBadInput is true.

        * html/NumberInputType.h:
        (NumberInputType): Add hasBadInput and badInputTest. Remove
        handleBlurEvent and hasUnacceptableValue.
        * html/NumberInputType.cpp:
        Remove handleBlurEvent, which cleared invalid number strings.
        (WebCore::NumberInputType::hasBadInput):
        Added. We don't need to check existence of a renderer. The standard form
        validation feature doesn't care of it.
        (WebCore::NumberInputType::badInputText): Returns
        validationMessageBadInputForNumberText defined in LocalizedStrings.h.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):
        Remove a hack for hasUnacceptableValue. isValidFormControlElement takes
        account of badInput.
        * dom/Element.h: Remove hasUnacceptableValue.

        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Add hasBadInput and badInputText.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::badInputText):
        Returns validationMessageBadInputForDateTimeText defined in LocalizedStrings.h.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::hasBadInput):
        Added.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::setValue):
        Add setNeedsValidityCheck call. It is needed because
        updateInnerTextValue can modify subfields empty state.

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::subtreeHasChanged): Update a comment.
        * platform/LocalizedStrings.h:
        (WebCore): Add validationMessageBadInputForNumberText and
        validationMessageBadInputForDateTimeText.
        * platform/LocalizedStrings.cpp:
        (WebCore::validationMessageBadInputForNumberText):
        Added a placeholder implementation. This should be fixed later.
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        (WebCore::validationMessageBadInputForNumberText): Ditto.
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::validationMessageBadInputForNumberText): Ditto.
        * platform/qt/LocalizedStringsQt.cpp:
        (WebCore::validationMessageBadInputForNumberText): Ditto.

2012-11-27  Hajime Morrita  <morrita@google.com>

        [Refactoring] NodeFlags::IsShadowRootFlag should be Node::IsDocumentFragmentFlag
        https://bugs.webkit.org/show_bug.cgi?id=103370

        Reviewed by Kentaro Hara.

        This chagne introduces Node::IsDocumentFragmentFlag so that we can
        have fast Node::isDocumentFragment().

        Note that Node::isShadowRoot() can become slightly slower when it
        returns true, but that is minor in terms of the number of calls at runtime.

        No new tests. No behavior change.

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::create):
        * dom/DocumentFragment.h:
        * dom/Node.cpp:
        (WebCore::Node::documentFragmentIsShadowRoot):
        (WebCore):
        * dom/Node.h:
        (Node):
        (WebCore::Node::isDocumentFragment):
        (WebCore::Node::isShadowRoot):
        (WebCore::Node::parentNode):
        (WebCore::Node::parentNodeGuaranteedHostFree):
        * dom/ShadowRoot.h:

2012-11-26  Kent Tamura  <tkent@chromium.org>

        :read-only selector should match to date/time input types
        https://bugs.webkit.org/show_bug.cgi?id=103350

        Reviewed by Kentaro Hara.

        We supported :read-only and :read-write only for text form controls;
        i.e. <textarea> and text-field <input>. According to [1], we should
        support them for date/time types. So, this patch removes
        isTextFormControl check in SelectorChecker, and just relies on
        shouldMatchRead{Only,Write}Selector virtual functions.

        Tests: Update fast/forms/*/*-appearance-pseudo-classes.html.

        [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOneSelector):
        Remove isFormControlElement check and isTextFormControl check.

        * html/HTMLFormControlElement.cpp:
        Remove shouldMatchRead{Only,Write}Selector functions. We don't need
        common implementations any more.
        * html/HTMLFormControlElement.h: Ditto.

        * html/HTMLTextAreaElement.h:
        (HTMLTextAreaElement): Add shouldMatchRead{Only,Write}Selector overrides.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::shouldMatchReadOnlySelector): Added.
        (WebCore::HTMLTextAreaElement::shouldMatchReadWriteSelector): Added.

        * html/HTMLInputElement.h:
        (HTMLInputElement): Add shouldMatchRead{Only,Write}Selector overrides.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::shouldMatchReadOnlySelector):
        Added. This checks InputType::supportsReadOnly and readOnly.
        (WebCore::HTMLInputElement::shouldMatchReadWriteSelector): Ditto.

        * html/InputType.h:
        (InputType): Add supportsReadOnly.
        * html/InputType.cpp:
        (WebCore::InputType::supportsReadOnly): Added. Returns false by default.

        * html/BaseDateAndTimeInputType.h:
        (BaseDateAndTimeInputType): Add supportsReadOnly.
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::supportsReadOnly): Added. Returns true.
        * html/TextFieldInputType.h:
        (TextFieldInputType): Add supportsReadOnly.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::supportsReadOnly): Added. Returns true.

2012-11-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135822.
        http://trac.webkit.org/changeset/135822
        https://bugs.webkit.org/show_bug.cgi?id=103369

        Undo the revert of r135818, since that change does not affect
        code used by Chromium (Requested by apavlov on #webkit).

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

2012-11-26  Michael Pruett  <michael@68k.org>

        [GTK] Fix build error on GTK due to r135749
        https://bugs.webkit.org/show_bug.cgi?id=103365

        Reviewed by Dean Jackson.

        In r135749, many files which were already included
        in webcore_built_sources were erroneously added to
        webcore_svg_built_sources in GNUmakefile.list.am.

        * GNUmakefile.list.am:

2012-11-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135818.
        http://trac.webkit.org/changeset/135818
        https://bugs.webkit.org/show_bug.cgi?id=103368

        platform/chromium/virtual/threaded/compositing/visibility
        /visibility-simple-webgl-layer.html crash on Mountain Lion
        (Requested by apavlov on #webkit).

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

2012-11-26  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Set visibility to a mask layer in GraphicsLayer::setContentsVisible().
        https://bugs.webkit.org/show_bug.cgi?id=103297

        Reviewed by Noam Rosenthal.

        GraphicsLayerTextureMapper and CoordinatedGraphicsLayer set the visibility of a
        mask layer in setContentsVisible() and setMaskLayer() like setting a size.
        This patch is needed because RenderLayerBacking does not set the visibility to a
        mask layer like the size.

        This patch does not change user experience because an invisible layer is not
        rendered although the mask layer is rendered. In that sense, it is an
        optimization patch.

        No new tests. It is an optimization patch.

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

2012-11-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename EXCEPTION_BLOCK() macros
        https://bugs.webkit.org/show_bug.cgi?id=103352

        Reviewed by Adam Barth.

        Since V8Parameter was renamed to V8StringResource,
        we rename macros that use V8Parameter.

        EXCEPTION_BLOCK() => V8TRYCATCH()
        STRING_TO_V8PARAMETER_EXCEPTION_BLOCK() => V8TRYCATCH_FOR_V8STRINGRESOURCE()
        STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID() => V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID()

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateParametersCheck):
        (GenerateEventConstructorCallback):
        (ConvertToV8StringResource):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::Float64ArrayV8Internal::fooCallback):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::excitingFunctionCallback):
        (WebCore::TestActiveDOMObjectV8Internal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::TestEventTargetV8Internal::itemCallback):
        (WebCore::TestEventTargetV8Internal::dispatchEventCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::TestMediaQueryListListenerV8Internal::methodCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::staticStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::voidMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::longMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodWithSequenceArgCallback):
        (WebCore::TestObjV8Internal::methodReturningSequenceCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::idbKeyCallback):
        (WebCore::TestObjV8Internal::optionsObjectCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjV8Internal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsUndefinedCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsNullStringCallback):
        (WebCore::TestObjV8Internal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        (WebCore::TestObjV8Internal::overloadedMethod2Callback):
        (WebCore::TestObjV8Internal::overloadedMethod3Callback):
        (WebCore::TestObjV8Internal::overloadedMethod4Callback):
        (WebCore::TestObjV8Internal::overloadedMethod6Callback):
        (WebCore::TestObjV8Internal::overloadedMethod7Callback):
        (WebCore::TestObjV8Internal::overloadedMethod8Callback):
        (WebCore::TestObjV8Internal::overloadedMethod9Callback):
        (WebCore::TestObjV8Internal::overloadedMethod10Callback):
        (WebCore::TestObjV8Internal::overloadedMethod11Callback):
        (WebCore::TestObjV8Internal::classMethodWithOptionalCallback):
        (WebCore::TestObjV8Internal::overloadedMethod12Callback):
        (WebCore::TestObjV8Internal::classMethodWithClampCallback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod1Callback):
        (WebCore::TestObjV8Internal::enabledAtRuntimeMethod2Callback):
        (WebCore::TestObjV8Internal::enabledPerContextMethod1Callback):
        (WebCore::TestObjV8Internal::enabledPerContextMethod2Callback):
        (WebCore::TestObjV8Internal::stringArrayFunctionCallback):
        (WebCore::TestObjV8Internal::convert1Callback):
        (WebCore::TestObjV8Internal::convert2Callback):
        (WebCore::TestObjV8Internal::convert4Callback):
        (WebCore::TestObjV8Internal::convert5Callback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        (WebCore::TestObjV8Internal::variadicStringMethodCallback):
        (WebCore::TestObjV8Internal::variadicDoubleMethodCallback):
        (WebCore::TestObjV8Internal::variadicNodeMethodCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructor1Callback):
        (WebCore::V8TestOverloadedConstructors::constructor2Callback):
        (WebCore::V8TestOverloadedConstructors::constructor3Callback):
        (WebCore::V8TestOverloadedConstructors::constructor4Callback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/v8/V8Binding.h:
        (WebCore::toV8Sequence):
        * bindings/v8/V8BindingMacros.h:
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallbackCustom):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::profileCallback):
        (WebCore::V8Console::profileEndCallback):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::getInt8Callback):
        (WebCore::V8DataView::getUint8Callback):
        (WebCore::V8DataView::setInt8Callback):
        (WebCore::V8DataView::setUint8Callback):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventCallback):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::addCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8IntentCustom.cpp:
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::importScriptsCallback):

2012-11-26  Andreas Kling  <akling@apple.com>

        Node: Move AreSVGAttributesValidFlag to ElementAttributeData.
        <http://webkit.org/b/103349>

        Reviewed by Anders Carlsson.

        Moved AreSVGAttributesValidFlag to ElementAttributeData and change it to use "dirty" semantics.
        This frees up a bit on Node, and we will always have ElementAttributeData if the animated
        attributes are dirty anyway.

        * dom/Element.cpp:
        (WebCore::Element::getAttribute):
        * dom/Element.h:
        (WebCore::Element::updateInvalidAttributes):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ElementAttributeData):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::ElementAttributeData):
        (ElementAttributeData):
        * dom/Node.h:
        (Node):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::updateAnimatedSVGAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGAttributes):

2012-11-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135798.
        http://trac.webkit.org/changeset/135798
        https://bugs.webkit.org/show_bug.cgi?id=103354

        Broke the chrome mac build (Requested by noel_ on #webkit).

        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::~DeferredImageDecoder):
        (WebCore::DeferredImageDecoder::createResizedLazyDecodingBitmap):
        (WebCore::DeferredImageDecoder::frameBufferAtIndex):
        (WebCore::DeferredImageDecoder::createLazyDecodingBitmap):
        * platform/graphics/chromium/DeferredImageDecoder.h:
        (DeferredImageDecoder):
        * platform/graphics/chromium/ImageDecodingStore.cpp:
        (WebCore::ImageDecodingStore::instanceOnMainThread):
        (WebCore::ImageDecodingStore::initializeOnMainThread):
        (WebCore::ImageDecodingStore::shutdown):
        (WebCore::ImageDecodingStore::calledOnValidThread):
        (WebCore::ImageDecodingStore::lookupFrameCache):
        (WebCore::ImageDecodingStore::deleteFrameCache):
        * platform/graphics/chromium/ImageDecodingStore.h:
        (WebCore):
        (ImageDecodingStore):
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::~ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::setData):
        (WebCore::ImageFrameGenerator::decodeAndScale):
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (WebCore):
        (WebCore::ImageFrameGenerator::create):
        (ImageFrameGenerator):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::onLockPixels):
        (WebCore::LazyDecodingPixelRef::onUnlockPixels):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (WebCore):
        (LazyDecodingPixelRef):
        * platform/graphics/chromium/ScaledImageFragment.cpp:
        (WebCore::ScaledImageFragment::ScaledImageFragment):
        (WebCore::ScaledImageFragment::isEqual):
        (WebCore):
        * platform/graphics/chromium/ScaledImageFragment.h:
        (WebCore):
        (WebCore::ScaledImageFragment::create):
        (ScaledImageFragment):
        * platform/graphics/chromium/SkSizeHash.h: Removed.

2012-11-26  Huang Dongsung  <luxtella@company100.net>

        [TexMap] GraphicsLayerTextureMapper::setSize() sets the size of a mask layer.
        https://bugs.webkit.org/show_bug.cgi?id=103297

        Reviewed by Noam Rosenthal.

        Currently, CoordinatedGraphicsLayer sets the size of a mask layer in setSize()
        and setMaksLayer(). GraphicsLayerTextureMapper follows the behavior. If so we
        don't have to check the size of the mask layer in TextureMapperLayer::flushCompositingState().

        No new tests. Covered by existing tests.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setMaskLayer):
        (WebCore::GraphicsLayerTextureMapper::setSize):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::flushCompositingState):

2012-11-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove V8Parameter::object()
        https://bugs.webkit.org/show_bug.cgi?id=103340

        Reviewed by Adam Barth.

        V8Parameter can use m_v8Object directly.

        No tests. No change in behavior.

        * bindings/v8/V8StringResource.h:
        (WebCore::::prepare):

2012-11-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename V8Parameter to V8StringResource
        https://bugs.webkit.org/show_bug.cgi?id=103341

        Reviewed by Adam Barth.

        We can rename V8Parameter to V8StringResource. In a follow-up patch,
        I will rename macros around V8Parameter.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateParametersCheck):
        (GenerateEventConstructorCallback):
        (GetNativeTypeFromSignature):
        (GetNativeType):
        (ConvertToV8StringResource):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::staticStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::voidMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::longMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsUndefinedCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsNullStringCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        (WebCore::TestObjV8Internal::overloadedMethod3Callback):
        (WebCore::TestObjV8Internal::overloadedMethod11Callback):
        (WebCore::TestObjV8Internal::overloadedMethod12Callback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        (WebCore::TestObjV8Internal::variadicStringMethodCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructor4Callback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/v8/V8StringResource.h:
        (WebCore::V8StringResource::V8StringResource):
        (WebCore::::prepare):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::profileCallback):
        (WebCore::V8Console::profileEndCallback):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8IntentCustom.cpp:
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):

2012-11-26  Andreas Kling  <akling@apple.com>

        HTMLOptionElement: Remove two unused members.
        <http://webkit.org/b/103337>

        Reviewed by Kent Tamura.

        Remove two unused members from HTMLOptionElement, m_value and m_label.
        40kB progression on Membuster3.

        * html/HTMLOptionElement.h:
        (HTMLOptionElement):

2012-11-26  Stephen White  <senorblanco@chromium.org>

        [Chromium] Shared graphics context should only pushGroupMarker() once
        https://bugs.webkit.org/show_bug.cgi?id=103082

        Reviewed by James Robinson.

        GraphicsContext3D's pushGroupMarkerEXT() is being called every time
        an ImageBuffer is created, leading to unlimited memory growth, since
        they share a common GraphicsContext3D.  It should be called only once,
        on context creation.

        Tested by manually checking the memory usage in Chrome's TaskManager.
        (Sorry, I can't think of a way to test this automatically.)

        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3DImpl::getOrCreateContext):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::createAcceleratedCanvas):

2012-11-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove WorkerContextExecutionProxy.{h,cpp}
        https://bugs.webkit.org/show_bug.cgi?id=103325

        Reviewed by Adam Barth.

        Now WorkerContextExecutionProxy.{h,cpp} are empty.

        No tests. No change in behavior.

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/ScheduledAction.cpp:
        * bindings/v8/V8AbstractEventListener.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8WorkerContextEventListener.h:
        (WebCore):
        * bindings/v8/WorkerContextExecutionProxy.cpp: Removed.
        * bindings/v8/WorkerContextExecutionProxy.h: Removed.
        * bindings/v8/WorkerScriptController.cpp:
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        * bindings/v8/custom/V8MessageChannelCustom.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:

2012-11-26  Michael Saboff  <msaboff@apple.com>

        Grapheme cluster functions can be simplified for 8 bit Strings
        https://bugs.webkit.org/show_bug.cgi?id=102996

        Reviewed by Alexey Proskuryakov.

        For 8 bit strings, check for the uncommon CR-LF by looking for any CR.  If there aren't any CR characters,
        the number of Extended Grapheme Clusters is equal to the string length.  If we need to handle Tailored
        Graheme Clusters, then this will need to change.

        No new tests. No change in functionality.

        * platform/text/TextBreakIterator.cpp:
        (WebCore::numGraphemeClusters):
        (WebCore::numCharactersInGraphemeClusters):

2012-11-26  Istiaque Ahmed  <lazyboy@chromium.org>

        Check for empty perContextData while creating NP V8 Object.
        https://bugs.webkit.org/show_bug.cgi?id=98448

        Reviewed by Adam Barth.

        Fixes crash in npCreateV8ScriptObject(), if NP Invoke is called from a document
        that is no longer displayed in frame (isCurrentlyDisplayedInFrame() ==
        false), we have empty perContextData and this results in invalid memory access.

        Test: platform/chromium/plugins/empty-per-context-data.html

        * bindings/v8/NPV8Object.cpp:
        (WebCore::npCreateV8ScriptObject):

2012-11-26  Michael Saboff  <msaboff@apple.com>

        HTML/XML parser helper unconsumeCharacters() can push back 8 bit text as 16 bit text
        https://bugs.webkit.org/show_bug.cgi?id=103317

        Reviewed by Oliver Hunt.

        Changed to use the String directly from the StringBuilder instead of creating our own.
        Used toStringPreserveCapacity() in case the caller may want to add to the StringBuilder
        even though current callers don't.

        No new tests. No change in functionality.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::unconsumeCharacters):

2012-11-26  Noel Gordon  <noel.gordon@gmail.com>

        PNG decode performance: avoid using frame buffer.setRGBA(x,y)
        https://bugs.webkit.org/show_bug.cgi?id=103216

        Reviewed by Brent Fulgham.

        Writing decoded row pixels to the frame buffer with buffer.setRGBA(x,y) is slow compared
        to writing direct to the frame buffer address. Use buffer.getAddr() to obtain the output
        pixel row address, write the decoded row pixels to that address.

        No new tests. Covered by many existing tests.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::setRGBA): Make routine setRGBA(PixelData* dest, ...) public. Test
        m_premultiplyAlpha once to minimize code branching in this routine.
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable): Write decoded row pixels to the frame buffer
        using the pixel address form: buffer.setRGBA(address++, ...).

2012-11-26  Alpha Lam  <hclam@chromium.org>

        [chromium] Implement full-featured image cache
        https://bugs.webkit.org/show_bug.cgi?id=99784

        Reviewed by James Robinson.

        Implement a thread-safe image cache to be used with deferred image
        decoding. Image cache can now be accessed on any thread.

        The patch implements the following logic:
        1. Mutex to protect all cache operations.
        2. Cache indexing using key (ImageFrameGenerator*, SkISize scaledSize)
        3. Cache lookup.
        4. Cache insertion.
        5. Generation of cache entry by scaling full size image.
        6. Generation of cache entries by decoding and scaling.

        Classes involved:

        ImageDecodingStore

        Responsible for owning cache entries and indexing. Pruning and memory
        management will be added later.

        ImageFrameGenerator

        Responsible for generating new cache enties and insert them into
        ImageDecodingStore.

        LazyDecodingPixelRef

        Responsible for cache lookup and lazy generation of cache entries
        using ImageFrameGenerator. There is a mutex to protect concurrent
        lock operations.

        These items are not implemented in this patch:
        1. Cache pruning.
        2. Setting cache memory limit.
        3. Cache deletion.
        4. Caching incomplete images and ImageDecoder.

        Unit tests added in ImageFrameGeneratorTest.cpp.
        Layout tests are under platform/chromium/virtual/fast/images.

        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::~DeferredImageDecoder):
        (WebCore::DeferredImageDecoder::createResizedLazyDecodingBitmap):
        (WebCore::DeferredImageDecoder::setEnabled):
        (WebCore):
        (WebCore::DeferredImageDecoder::frameBufferAtIndex):
        (WebCore::DeferredImageDecoder::createLazyDecodingBitmap):
        * platform/graphics/chromium/DeferredImageDecoder.h:
        (DeferredImageDecoder):
        * platform/graphics/chromium/ImageDecodingStore.cpp:
        (WebCore::ImageDecodingStore::instance):
        (WebCore::ImageDecodingStore::initializeOnce):
        (WebCore::ImageDecodingStore::shutdown):
        (WebCore::ImageDecodingStore::lockCompleteCache):
        Lookup complete cache entry using hash key, increment use count.
        (WebCore::ImageDecodingStore::lockIncompleteCache): TODO.
        (WebCore::ImageDecodingStore::unlockCache):
        Lookup cache entry using hash key, decrement use count.
        (WebCore):
        (WebCore::ImageDecodingStore::insertAndLockCache):
        Insert new cache entry and increment use count.
        (WebCore::ImageDecodingStore::prune): TODO.
        * platform/graphics/chromium/ImageDecodingStore.h:
        (WebCore):
        (ImageDecodingStore):
        (WebCore::ImageDecodingStore::CacheEntry::create):
        (WebCore::ImageDecodingStore::CacheEntry::createAndUse):
        (CacheEntry):
        (WebCore::ImageDecodingStore::CacheEntry::CacheEntry):
        (WebCore::ImageDecodingStore::CacheEntry::~CacheEntry):
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::setData):
        (WebCore::ImageFrameGenerator::decodeAndScale):
        Method for creating new cache entries. This is protected by a mutex
        to prevent concurrent operations. Which means only one thread can
        generate new cache entries for a set of encoded data.
        (WebCore):
        (WebCore::ImageFrameGenerator::tryToLockCache):
        Tries to lookup a cache entry.
        (WebCore::ImageFrameGenerator::tryToScale):
        Tries to lookup a full size cache entry and generate a scaled version.
        (WebCore::ImageFrameGenerator::tryToDecodeAndScale):
        Tries to decode and scale.
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (WebCore):
        (ImageDecoderFactory):
        (WebCore::ImageFrameGenerator::create):
        (ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::setImageDecoderFactoryForTesting):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::onLockPixels):
        (WebCore::LazyDecodingPixelRef::onUnlockPixels):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (WebCore):
        (LazyDecodingPixelRef):
        * platform/graphics/chromium/ScaledImageFragment.cpp:
        (WebCore::ScaledImageFragment::ScaledImageFragment):
        * platform/graphics/chromium/ScaledImageFragment.h:
        (WebCore):
        (WebCore::ScaledImageFragment::create):
        (ScaledImageFragment):
        (WebCore::ScaledImageFragment::scaledSize):
        * platform/graphics/chromium/SkSizeHash.h: Added.
        (WTF):

2012-11-26  Andreas Kling  <akling@apple.com>

        Node: Remove IsSynchronizingSVGAttributesFlag.
        <http://webkit.org/b/103328>

        Reviewed by Antti Koivisto.

        Animated SVG attributes used to be synchronized by using DOM API which could use unwanted re-entrancy
        via callbacks below Element::attributeChanged(). The "is synchronizing SVG attributes" flag was used
        to protect against such re-entrancy.

        These days, lazy attributes are synchronized using Element::setSynchronizedLazyAttribute() to avoid
        issues like this. The flag does nothing, so we can just remove it.

        * dom/Node.h:
        (WebCore):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):
        (WebCore::SVGElement::updateAnimatedSVGAttribute):

2012-11-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Refactor WorkerScriptController
        https://bugs.webkit.org/show_bug.cgi?id=103330

        Reviewed by Adam Barth.

        r135703 just moved methods from WorkerContextExecutionProxy
        to WorkerScriptController. We should refactor the methods as a follow-up.

        No tests. No change in behavior.

        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):
        (WebCore::WorkerScriptController::disposeContext):
        (WebCore::WorkerScriptController::initializeContextIfNeeded):
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::disableEval):
        * bindings/v8/WorkerScriptController.h:
        (WorkerScriptController):

2012-11-26  Varun Jain  <varunjain@chromium.org>

        LongPress and LongTap gestures should start drag/drop and open context menu respectively.
        https://bugs.webkit.org/show_bug.cgi?id=101545

        Reviewed by Antonio Gomes.

        For LongPress, we simulate drag by sending a mouse down and mouse drag
        events. If a drag is not started (because maybe there is no draggable
        element), then we show context menu instead (which is the current
        behavior for LongPress). For LongTap, we use the existing functions that
        LongPress uses to summon the context menu. LongPress initiated drag and
        drop can be enabled/disabled by the platform using the Setting
        touchDragDropEnabled which is disabled by default.

        Tests: fast/events/touch/gesture/context-menu-on-long-tap.html
               fast/events/touch/gesture/long-press-on-draggable-element-triggers-drag.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureLongPress):
        (WebCore::EventHandler::handleGestureLongTap):
        (WebCore):
        (WebCore::EventHandler::handleGestureForTextSelectionOrContextMenu):
        (WebCore::EventHandler::adjustGesturePosition):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:
        (EventHandler):
        * page/Settings.in:

2012-11-26  Andreas Kling  <akling@apple.com>

        RenderStyle: Move 'list-style-image' to rare inherited data.
        <http://webkit.org/b/103300>

        Reviewed by Antti Koivisto.

        list-style-image is not nearly common enough to merit a spot in StyleInheritedData.
        Move it to StyleRareInheritedData.

        134kB progression on Membuster3.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::listStyleImage):
        (WebCore::RenderStyle::setListStyleImage):
        * rendering/style/StyleInheritedData.cpp:
        (WebCore::StyleInheritedData::StyleInheritedData):
        (WebCore::StyleInheritedData::operator==):
        * rendering/style/StyleInheritedData.h:
        (StyleInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (SameSizeAsStyleRareInheritedData):
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):

2012-11-26  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        There's a FIXME that we have too many FrameLoader::load*() functions. This patch consolidates 3 into 1.
        There are still a few more load functions that will be consolidated later. Using FrameLoadRequest as
        the interface into FrameLoader will also provide a place to pass in the initiator. Finally, this matches
        the refactoring done with CachedResourceRequest and CachedResourceLoader.

        No new tests. No change in functionality.

        * WebCore.exp.in:
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::setLockHistory): These are former arguments to load().
        (WebCore::FrameLoadRequest::lockHistory): Ditto.
        (FrameLoadRequest):
        (WebCore::FrameLoadRequest::setShouldCheckNewWindowPolicy): Ditto.
        (WebCore::FrameLoadRequest::shouldCheckNewWindowPolicy): Ditto.
        (WebCore::FrameLoadRequest::substituteData): Ditto.
        (WebCore::FrameLoadRequest::setSubstituteData): Ditto.
        (WebCore::FrameLoadRequest::hasSubstituteData): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load): No change in behavior, just merged it all into one function.
        * loader/FrameLoader.h:
        (FrameLoader):
        * page/DragController.cpp:
        (WebCore::DragController::performDrag):

2012-11-24 Genevieve Mak <gmak@rim.com>

        [BlackBerry] Stop sending touch events to plugins.
        https://bugs.webkit.org/show_bug.cgi?id=103188

        Reviewed by Rob Buis.

        Reviewed internally by Jeff Rogers and Mike Lattanzio.
        No tests required.
        PR #248605

        * plugins/blackberry/PluginViewBlackBerry.cpp:
        (WebCore::PluginView::handleTouchEvent):
        (WebCore::PluginView::handleMouseEvent):

2012-11-26  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Removing unnecessary friend classes in RenderObject: LayoutRepainter, RenderSVGContainer
        https://bugs.webkit.org/show_bug.cgi?id=103164

        Reviewed by Simon Fraser.

        Removing some of classes marked as friend of RenderObject. This patch solves this issue
        for 2 classes: RenderSVGContainer (that is derived from RenderObject) and LayoutRepainter
        (that accesses one const member function in RenderObject that is now made public).

        No new tests, no changes in functionality.

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

2012-11-26  Jon Lee  <jonlee@apple.com>

        Pass clicks through to the restarted plugin
        https://bugs.webkit.org/show_bug.cgi?id=102150
        <rdar://problem/12695575>

        Reviewed by Simon Fraser.

        Add a new state to the machine for plugin snapshotting, called PlayingWithPendingMouseClick.
        This represents the state where the plugin is playing, but before the pending mouse click
        has been fired. Once the click is sent, the plugin state transitions to Playing. For
        situations where the plugin just runs normally without a simulated click, the plugin state
        jumps from DisplayingSnapshot straight to Playing, as before.

        * html/HTMLPlugInElement.h: Add new display state to represent when the plugin is running,
        but a pending mouse click is about to be sent to the plugin.
        (WebCore::HTMLPlugInElement::dispatchPendingMouseClick): Called by the plugin when it is
        ok for the element to send the pending mouse click.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler): Update the handler to pass the event
        to the renderer to handle if the state is before PlayingWithPendingMouseClick.

        * html/HTMLPlugInImageElement.h:
        * html/HTMLPlugInImageElement.cpp: Add a click timer to delay the mouse click so that the
        plugin has some time to initialize.
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Initialize the mouse timer.
        (WebCore::HTMLPlugInImageElement::setPendingClickEvent): Keep track of the click event
        the user made to restart the plugin.
        (WebCore::HTMLPlugInImageElement::dispatchPendingMouseClick): Start the timer.
        (WebCore::HTMLPlugInImageElement::simulatedMouseClickTimerFired): When the timer fires,
        dispatch the simulated click, with mouse over, mouse down, and mouse up events. Transition
        to the Playing state, and we no longer need the click event.

        * rendering/RenderSnapshottedPlugIn.cpp: Change the threshold state to PlayingWithPendingMouseClick
        instead of Playing, since that is the earliest state where the plugin is playing.
        (WebCore::RenderSnapshottedPlugIn::paint):
        (WebCore::RenderSnapshottedPlugIn::paintReplaced):
        (WebCore::RenderSnapshottedPlugIn::getCursor):
        (WebCore::RenderSnapshottedPlugIn::handleEvent): If the user clicked on the button, jump to
        Playing, and don't send a simulated click. Otherwise, transition to PlayingWithPendingMouseClick,
        and keep track of that mouse event.

        * WebCore.exp.in: Export MouseRelatedEvent::offsetX() and offsetY().

2012-11-26  Dan Carney  <dcarney@google.com>

        Refactor V8 bindings to allow content scripts to access subframes
        https://bugs.webkit.org/show_bug.cgi?id=93646

        Reviewed by Adam Barth.

        Isolated window shells are now initialized on the fly
        as needed.

        No new tests. Existing test modified.

        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::ensureIsolatedWorld):
        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::createdFromUnitializedWorld):
        (DOMWrapperWorld):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::currentWorldContext):

2012-11-26  Alex Christensen  <alex.christensen@flexsim.com>

        clipboardwin compile error for win64
        https://bugs.webkit.org/show_bug.cgi?id=94124

        Reviewed by Brent Fulgham.

        The clipboard utilities code uses std::min with one unsigned int parameter and one size_t parameter.
        This causes a problem when compiling for 64-bit Windows because the two types are not the same size.
        To resolve this issue, we specify the template type as the type the return value is being cast into

        Fixed a few compile errors for Windows x64 by specifying template parameters.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::setFileDescriptorData): Specify the types for the std::min macro to avoid compiler errors
        under 64-bit builds.

2012-11-26  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [GTK] GtkSocket is leaked until webview is destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=102564

        Reviewed by Martin Robinson.

        Remove GtkSocket from its parent when pluginview is destroyed. Then,
        the GtkSocket and it's possible child widgets are realeased when it is
        no more needed.

        No new tests, already covered by existing tests.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformDestroy):

2012-11-26  Luke Macpherson   <macpherson@chromium.org>

        Make StyleResolver::applyProperty use isInherit in CSSPropertyWebkitMarquee instead of calculating equivalent in-place.
        https://bugs.webkit.org/show_bug.cgi?id=102446

        Reviewed by Tony Chang.

        !m_parentNode || !value->isInheritedValue() is equivalent to !isInherit (by De Morgan's law).

        No new tests / code is provably equivalent.

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

2012-11-26  Pratik Solanki  <psolanki@apple.com>

        Add ResourceBuffer::append(CFDataRef) to get code to compile with USE(NETWORK_CFDATA_ARRAY_CALLBACK)
        https://bugs.webkit.org/show_bug.cgi?id=102706

        Reviewed by Brent Fulgham.

        No new tests because the flag isn't enabled. Also the functionality should be covered by
        existing tests.

        * loader/ResourceBuffer.cpp:
        (WebCore):
        (WebCore::ResourceBuffer::append):
        * loader/ResourceBuffer.h:
        (ResourceBuffer):
        * loader/mac/ResourceLoaderMac.mm:

2012-11-26  Tony Chang  <tony@chromium.org>

        Move more functions from internals.settings to internals
        https://bugs.webkit.org/show_bug.cgi?id=102976

        Reviewed by Adam Barth.

        Move functions that don't have to do with Settings off of internals.settings.
        setPagination and configurationForViewport were defined on internals, so we
        can inline the functions (no test change).

        setEnableMockPagePopup is moved to Internals.

        No new tests, this is a refactor.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::reset): Move reset code into Internals.
        * testing/InternalSettings.h:
        (InternalSettings): Remove code for setPagination, configurationForViewport and setEnableMockPagePopup.
        * testing/InternalSettings.idl: Remove setPagination and setEnableMockPagePopup.
        * testing/Internals.cpp:
        (WebCore): Use a static to keep track of the MockPagePopupDriver.
        (WebCore::Internals::resetToConsistentState): Code from InternalSettings::reset
        (WebCore::Internals::setEnableMockPagePopup): Code copied from InternalSettings.
        (WebCore::Internals::pagePopupController): Code copied from InternalSettings.
        (WebCore::Internals::setPagination): Code copied from InternalSettings.
        (WebCore::Internals::configurationForViewport): Code copied from InternalSettings.
        * testing/Internals.h:
        (Internals): Add setEnableMockPagePopup.
        * testing/Internals.idl: Add setEnableMockPagePopup.

2012-11-26  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Add Region info for RootLineBoxes and pack the pagination data
        https://bugs.webkit.org/show_bug.cgi?id=101332

        Reviewed by David Hyatt.

        Currently the pagination information for lines is spread between the RootInlineBox and InlineFlowBox classes, consuming memory even though
        the boxes were not the result of an pagination layout. To overcome this, a new struct (LineFragmentationData) is created that wraps all the data,
        including two new members, the containing Region for the line and a boolean that states if the line was laid out in a Region or not.
        The flag is necessary because the sanitize function on LineFragmentationData resets the containing Region to 0 if the Region was removed from
        chain (so a value of 0 for the containing Region means two things). The sanitize function should prevent access to an invalid address.
        The containing Region is used to detect if a line changed the Region where it resides. This will be helpful especially when implementing region
        styling for layout properties (e.g. the font-size property https://bugs.webkit.org/show_bug.cgi?id=95559 ).
        A line can change the region when it is shifted inside the containing block or if the entire block moves. This means it's better to delegate
        the task of updating the containing Region to the block.

        Tests: fast/regions/line-containing-region-crash.html

        * rendering/InlineFlowBox.cpp:
        (SameSizeAsInlineFlowBox):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (InlineFlowBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineWidthForPaginatedLineChanged):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::linkToEndLineIfNeeded):
        (WebCore::RenderBlock::determineStartPosition):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::setContainingRegion):
        (WebCore):
        (WebCore::RootInlineBox::LineFragmentationData::sanitize): This is an O(1) function that checks if the containig Region is still valid pointer.
        * rendering/RootInlineBox.h:
        (WebCore):
        (WebCore::RootInlineBox::paginationStrut):
        (WebCore::RootInlineBox::setPaginationStrut):
        (WebCore::RootInlineBox::isFirstAfterPageBreak):
        (WebCore::RootInlineBox::setIsFirstAfterPageBreak):
        (WebCore::RootInlineBox::paginatedLineWidth):
        (WebCore::RootInlineBox::setPaginatedLineWidth):
        (RootInlineBox):
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::hasContainingRegion): Use this to determine if the line has a region or not.
        (WebCore::RootInlineBox::ensureLineFragmentationData):
        (LineFragmentationData):
        (WebCore::RootInlineBox::LineFragmentationData::LineFragmentationData):


2012-11-26  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Add IDL file and bindings for mix function
        https://bugs.webkit.org/show_bug.cgi?id=93011

        Reviewed by Dean Jackson.

        JavaScript bindings have been added for the Custom Filter mix()
        function (WebKitCSSMixFunctionValue). As of now, this is only a
        placeholder that extends CSSValueList without adding any new
        property.

        Test: css3/filters/custom/custom-filter-mix-bindings.html

        * CMakeLists.txt: mix() IDL has been added to the Generator;
        DerivedSources have been included.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS): return a JSC DOM wrapper for WebKitCSSMixFunctionValue.
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::V8CSSValue::dispatchWrapCustom): Ditto, for V8.
        * css/WebKitCSSMixFunctionValue.idl: Added.

2012-11-26  Simon Fraser  <simon.fraser@apple.com>

        Optimize layer updates after scrolling
        https://bugs.webkit.org/show_bug.cgi?id=102635

        Reviewed by Sam Weinig.

        updateLayerPositionsAfterScroll() previously unconditionally cleared clip
        rects, and recomputed repaint rects too often. Recomputing both of these
        can be very expensive, as they involve tree walks up to the root.
        
        We can optimize layer updates after document scrolling by only clearing clip
        rects, and recomputing repaint rects, if we encounter a fixed- or sticky-position
        element. For overflow scroll, we have to clear clip rects and recompute repaint rects.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintFixedElementsAfterScrolling): Call updateLayerPositionsAfterDocumentScroll().
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions): Call clearClipRects() because
        updateLayerPosition() no longer does.
        (WebCore::RenderLayer::updateLayerPositionsAfterDocumentScroll): Version of updateLayerPositionsAfterScroll()
        that is for document scrolls. It has no need to push layers to the geometry map.
        (WebCore::RenderLayer::updateLayerPositionsAfterOverflowScroll): Pushes layers to the geometry map,
        and calls updateLayerPositionsAfterScroll() with the IsOverflowScroll flag.
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll): Set the HasChangedAncestor flag
        if our location changed, and use that as a hint to clear cached rects. Be more conservative
        than before about when to clear cached clip rects.
        (WebCore::RenderLayer::updateLayerPosition):  Move responsibility for calling
        clearClipRects() ouf of this function and into callers.
        (The one caller outside RenderLayer will be removed via bug 102624).
        Return a bool indicating whether our position changed.
        (WebCore::RenderLayer::scrollTo): Call updateLayerPositionsAfterOverflowScroll().
        (WebCore::RenderLayer::updateClipRects): Added some #ifdeffed out code that is useful
        to verify that cached clips are correct; it's too slow to leave enabled in debug builds.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::setLocation): Change to take a LayoutPoint, rather than separate
        x and y.

2012-11-26  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Cairo] Surface should not be destroyed before its usage
        https://bugs.webkit.org/show_bug.cgi?id=103273

        Reviewed by Brent Fulgham.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawRepaintCounter): There's some calls to get
        the bits and stride from surface right after its destructions. It should
        be postponed to avoid annoying bugs.

2012-11-26  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderBox::computePercentageLogicalHeight should use containingBlockLogicalWidthForContent
        https://bugs.webkit.org/show_bug.cgi?id=103075

        Reviewed by Ojan Vafai.

        Using the containing block's content logical block was working for most renderers but 2 renderers
        were special and were broken in orthogonal writing modes:
        - captions as they override containingBlockLogicalWidthForContent to return the table's logical width.
        - multi-column renderers as they override availableLogicalWidth to constrain the child to the column logical width.

        By switching to containingBlockLogicalWidthForContent, we got those 2 cases covered.

        Tests: fast/multicol/fixed-column-percent-logical-height-orthogonal-writing-mode.html
               fast/table/caption-orthogonal-writing-mode-sizing.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight):
        Updated the function to track which renderer's containing block we use and call
        containingBlockLogicalWidthForContent on it.

2012-11-26  Abhishek Arya  <inferno@chromium.org>

        Crash in Frame::dispatchVisibilityStateChangeEvent.
        https://bugs.webkit.org/show_bug.cgi?id=102053

        Reviewed by Adam Barth.

        Child frame can go away inside webkitvisibilitychange
        event handler. Store it in a ref counted vector.

        Test: fast/frames/page-visibility-crash.html

        * page/Frame.cpp:
        (WebCore::Frame::dispatchVisibilityStateChangeEvent):

2012-11-26  Hurnjoo Lee  <hurnjoo.lee@samsung.com>

        [Cairo] fillRectWithColor with Color::transparent doesn't perform anything
        https://bugs.webkit.org/show_bug.cgi?id=101911

        Reviewed by Kenneth Rohde Christiansen.

        fillRectWithColor with Color::transparent doesn't perform anything
        because fillRectWithColor does early-return if the alpha value of
        color is zero. But we expect that fill the rect with transparent color
        in case the cairo_operator is CAIRO_OPERATOR_SOURCE.

        Covered by existing tests.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::fillRectWithColor):Add condition to prevent early-return if
        cairo_operator is not CAIRO_OPERATOR_OVER

2012-11-26  Jae Hyun Park  <jae.park@company100.net>

        Remove redundant assignment in TextureMapperLayer::flushCompositingStateSelf
        https://bugs.webkit.org/show_bug.cgi?id=103233

        Reviewed by Noam Rosenthal.

        This patch removes redundant assignment in TextureMapperLayer::flushCompositingStateSelf.

        No new tests, because no change in bahavior.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::flushCompositingStateSelf):

2012-11-26  Tamas Czene  <tczene@inf.u-szeged.hu>

        OpenCL version of SourceAlpha, SourceGraphics and FETurbulence filter effects 
        https://bugs.webkit.org/show_bug.cgi?id=99829

        Reviewed by Zoltan Herczeg.

        This patch contains the OpenCL implementation of SourceAlpha, SourceGraphic, FETurbulence and a simple OpenCL environment. 
        At the moment only the Qt build system is supported 
        ~3x speed-up (depending on hardware configuration)

        * Target.pri:
        * WebCore.pri:
        * platform/graphics/filters/FETurbulence.h: Added platformApplyOpenCL() virtual function.
        (FETurbulence):
        * platform/graphics/filters/FilterEffect.cpp: Added platform specific apply.
        (WebCore::FilterEffect::apply):
        (WebCore):
        (WebCore::FilterEffect::platformApplyOpenCL): A function to use software computing if a filter is not implemented on OpenCL. It will be deleted after all of the filters are implemented.
        (WebCore::FilterEffect::clearResult):
        (WebCore::FilterEffect::asImageBuffer):
        (WebCore::FilterEffect::openCLImageToImageBuffer): Gets the result of the filter from the OpenCL device and converts it to ImageBuffer type.
        (WebCore::FilterEffect::createOpenCLImageResult): Allocates memory on OpenCL device and if it gets an image as a parameter, it uploads the image to the OpenCL device.
        (WebCore::FilterEffect::transformResultColorSpace): 
        * platform/graphics/filters/FilterEffect.h:
        (FilterEffect):
        (WebCore::FilterEffect::openCLImage):
        (WebCore::FilterEffect::setOpenCLImage):
        (WebCore::FilterEffect::hasResult):
        * platform/graphics/filters/SourceAlpha.h:
        (SourceAlpha):
        * platform/graphics/filters/SourceGraphic.h:
        (SourceGraphic):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.cpp: Added.
        (WebCore):
        (WebCore::FilterContextOpenCL::context): Configures the OpenCL environment.
        (WebCore::FilterContextOpenCL::createOpenCLImage): Allocates memory on OpenCL device.
        (WebCore::FilterContextOpenCL::openCLTransformColorSpace): OpenCL implementation of transformColorSpace.
        (WebCore::FilterContextOpenCL::compileProgram):
        * platform/graphics/gpu/opencl/FilterContextOpenCL.h: Added.
        (WebCore):
        (FilterContextOpenCL):
        (WebCore::FilterContextOpenCL::deviceId):
        (WebCore::FilterContextOpenCL::deviceContext):
        (WebCore::FilterContextOpenCL::commandQueue):
        (RunKernel):
        (WebCore::FilterContextOpenCL::RunKernel::RunKernel):
        (WebCore::FilterContextOpenCL::RunKernel::addArgument):
        (WebCore::FilterContextOpenCL::RunKernel::run):
        (WebCore::FilterContextOpenCL::kernelByName): Returns the reference of a function in the OpenCL program.
        * platform/graphics/gpu/opencl/OpenCLFESourceAlpha.cpp: Added.
        (WebCore):
        (WebCore::SourceAlpha::platformApplyOpenCL):
        * platform/graphics/gpu/opencl/OpenCLFESourceGraphic.cpp: Added.
        (WebCore):
        (WebCore::SourceGraphic::platformApplyOpenCL):
        * platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp: Added.
        (WebCore):
        (WebCore::FilterContextOpenCL::compileFETurbulence):
        (WebCore::FilterContextOpenCL::applyFETurbulence):
        (WebCore::FETurbulence::platformApplyOpenCL):
        * platform/graphics/gpu/opencl/OpenCLHandle.h: Added.
        (WebCore):
        (OpenCLHandle):
        (WebCore::OpenCLHandle::OpenCLHandle):
        (WebCore::OpenCLHandle::operator cl_mem):
        (WebCore::OpenCLHandle::operator=):
        (WebCore::OpenCLHandle::operator UnspecifiedBoolType):
        (WebCore::OpenCLHandle::handleAddress):
        (WebCore::OpenCLHandle::clear):

2012-11-26  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: follow up for r135720, fixing node highlight.

        * inspector/InspectorOverlayPage.html:

2012-11-26  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        [EFL] Crashes in compositing layout tests with AC on.
        https://bugs.webkit.org/show_bug.cgi?id=103144

        Reviewed by Noam Rosenthal.

        Application could leave texture packing parameters in non-zero state before
        texture mapper drawing/texture uploading. To avoid crash texture upload should
        specify packing parameters before each texture upload if packing is supported.

        Covered by existing tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContentsNoSwizzle):

2012-11-26  George Staikos  <staikos@webkit.org>

        [BlackBerry] Remove a lot of unnecessary and incorrect code causing crashes
        https://bugs.webkit.org/show_bug.cgi?id=103199

        Reviewed by Yong Li.

        This is the first big step to unforking this code.  It's very close to
        where it needs to be now, but the first step is to get rid of the
        crashes by deleting code that isn't needed and makes bad assumptions
        about object lifetime.  Crashes were found by automation without
        test case or reproduction steps.

        * loader/blackberry/CookieJarBlackBerry.cpp:
        (WebCore::cookies): delete most code
        (WebCore::setCookies): delete most code

2012-11-26  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Viewport CSS rules should not clamp values like Viewport META
        https://bugs.webkit.org/show_bug.cgi?id=103068

        Reviewed by Kenneth Rohde Christiansen.

        CSS Device Adaption does not clamp the length and zoom values the
        same way as the Viewport META. In fact, they are not clamped at all,
        but instead, we just make sure that length values are at least 1px.

        Tests: css3/device-adapt/opera/constrain-018.xhtml
               css3/device-adapt/opera/constrain-019.xhtml
               css3/device-adapt/opera/constrain-023.xhtml
               css3/device-adapt/opera/constrain-024.xhtml

        * dom/ViewportArguments.cpp:
        (WebCore::ViewportArguments::resolve):

2012-11-26  Mike West  <mkwst@chromium.org>

        Web Inspector: URLs containing '^' are improperly linked in console messages.
        https://bugs.webkit.org/show_bug.cgi?id=103248

        Reviewed by Yury Semikhatsky.

        This patch adds '^' to WebInspector's regex of acceptable characters for
        URLs that it knows how to display.

        Test: http/tests/inspector/network/script-as-text-loading-with-caret.html

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

2012-11-26  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Qt minimal compilation after r135713.

        * inspector/InspectorController.h: hid file content behind ENABLE(INSPECTOR)

2012-11-26  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: object preview does not render node id, className; logs too many functions for jQuery.
        https://bugs.webkit.org/show_bug.cgi?id=103222

        Reviewed by Yury Semikhatsky.

        - Added node class name and id into the preview
        - Now keeps track of properties separately from array indexes.

        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/InspectorOverlayPage.html:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._appendObjectPreview):
        (WebInspector.ConsoleMessageImpl.prototype._appendPropertyPreview):

2012-11-26  Florin Malita  <fmalita@chromium.org>

        RenderSVGResourceContainer does not clear cached data on removal
        https://bugs.webkit.org/show_bug.cgi?id=102620

        Reviewed by Dirk Schulze.

        RenderSVGResourceContainer::removeClient needs to also remove the client from specialized
        caches, otherwise we can end up with stale references.

        Test: svg/custom/stale-resource-data-crash.svg

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::removeClient):

2012-11-26  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: rolling out r135714 and r135712 for breaking debug tests.

        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/InspectorOverlayPage.html:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._appendObjectPreview):

2012-11-26  Zeno Albisser  <zeno@webkit.org>

        [Qt][Win] buildfix after r135706.
        https://bugs.webkit.org/show_bug.cgi?id=103249

        The Windows implementation of GraphicsSurface cannot use
        m_size anymore, as this member has been removed.
        Further it needs to implement a platformSize() function.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp:
        (WebCore::GraphicsSurfacePrivate::size):
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
        (WebCore::GraphicsSurface::platformSize):
        (WebCore):

2012-11-26  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: unify agents handling in Page and Worker inspector controllers
        https://bugs.webkit.org/show_bug.cgi?id=103238

        Reviewed by Alexander Pavlov.

        Introduced a class that represents a collection of inspector agents and allows
        to call methods declared on InspectorAgentBaseInterface for all registered agents.
        InspectorController and WorkerInspectorController switched to this class.

        * inspector/InspectorBaseAgent.cpp:
        (WebCore::InspectorAgentRegistry::append):
        (WebCore):
        (WebCore::InspectorAgentRegistry::setFrontend):
        (WebCore::InspectorAgentRegistry::clearFrontend):
        (WebCore::InspectorAgentRegistry::restore):
        (WebCore::InspectorAgentRegistry::registerInDispatcher):
        (WebCore::InspectorAgentRegistry::discardAgents):
        * inspector/InspectorBaseAgent.h:
        (InspectorAgentRegistry):
        (WebCore):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::reconnectFrontend):
        * inspector/InspectorController.h:
        (InspectorController):

2012-11-26  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: object preview does not render node id, className; logs too many functions for jQuery.
        https://bugs.webkit.org/show_bug.cgi?id=103222

        Reviewed by Yury Semikhatsky.

        - Added node class name and id into the preview
        - Now keeps track of properties separately from array indexes.

        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/InspectorOverlayPage.html:
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._appendObjectPreview):
        (WebInspector.ConsoleMessageImpl.prototype._appendPropertyPreview):

2012-11-26  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [WebGL] Save WebGL extensions and restore on replay
        https://bugs.webkit.org/show_bug.cgi?id=103141

        Reviewed by Yury Semikhatsky.

        Save WebGL extensions that were enabled by the application, and restore it before the replay.
        Drive-by: remove redundant if- checks in WebGL custom function wrappers (similar to 2D canvas).

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-11-26  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        HitTestResult should not be a HitTestLocation
        https://bugs.webkit.org/show_bug.cgi?id=101590

        Reviewed by Sam Weinig.

        Change HitTestResult from being a HitTestLocation to having a HitTestLocation. 
        A result of a test should not be a special case of the location of the test.

        No change in functionality. No new tests.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        (WebCore::HitTestResult::isSelected):
        (WebCore::HitTestResult::spellingToolTip):
        (WebCore::HitTestResult::replacedString):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::isRectBasedTest):
        (WebCore::HitTestResult::pointInInnerNodeFrame):
        (WebCore::HitTestResult::hitTestLocation):
        (HitTestResult):

2012-11-26  Marja Hölttä  <marja@chromium.org>

        Circular reference between Document and MediaQueryMatcher.
        https://bugs.webkit.org/show_bug.cgi?id=103242

        Reviewed by Kenneth Rohde Christiansen.

        It's not enough to clean up listeners in MediaQueryMatcher in ~Document,
        since MediaQueryListListener keeps the Document alive. This caused
        www.crbug.com/113983.

        No new tests: No visible change in behavior (except that it doesn't leak memory).

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

2012-11-26  Eugene Klyuchnikov  <eustas@chromium.org>

        Web Inspector: HeapProfiler: remove snapshotView reference from data-grids.
        https://bugs.webkit.org/show_bug.cgi?id=103240

        Reviewed by Yury Semikhatsky.

        Cleanup: remove redundant dependency.

        * inspector/front-end/HeapSnapshotDataGrids.js: Do not store view ref.
        * inspector/front-end/HeapSnapshotGridNodes.js:
        Removed unused assignments.
        * inspector/front-end/HeapSnapshotView.js:
        Do not pass self to data-grids.

2012-11-26  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurface should only store its size in a single place.
        https://bugs.webkit.org/show_bug.cgi?id=103143

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
            Cosmetics only.
        * platform/graphics/surfaces/GraphicsSurface.cpp:
        (WebCore::GraphicsSurface::size):
            Return the size as received from the platform abstraction.
        (WebCore):
        (WebCore::GraphicsSurface::GraphicsSurface):
        * platform/graphics/surfaces/GraphicsSurface.h:
        (GraphicsSurface):
            Remove data member m_size.
        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
            Always take the size of the GraphicsSurface as an argument.
        (WebCore::GraphicsSurfacePrivate::size):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
            Retrieve the size from GraphicsSurfacePrivate where necessary.
        (WebCore::GraphicsSurface::platformSize):
        (WebCore):
        (WebCore::GraphicsSurface::platformImport):
        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
            Add a constructor that takes a window id as an argument
            for the receiving side of the GraphcisSurface.
            The GraphicsSurface can then determine its dimensions
            from the provided XWindow.
        (WebCore::GraphicsSurfacePrivate::createPixmap):
        (WebCore::GraphicsSurfacePrivate::size):
            Query the size of the GraphicsSurface backing from X.
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
            Retrieve the size from GraphicsSurfacePrivate where necessary.
        (WebCore::GraphicsSurface::platformSize):
        (WebCore):
        (WebCore::GraphicsSurface::platformImport):

2012-11-26  Thiago Santos  <thiago.sousa.santos@collabora.com>

        [GStreamer] Floating reference handling fix
        https://bugs.webkit.org/show_bug.cgi?id=101349

        Reviewed by Philippe Normand.

        GStreamer 0.10 and 1.0 differ when creating GstGhostPad from pad
        templates, the 1.0 doesn't take ownership on the passed
        GstPadTemplate, while 0.10 does. So this patch adds a
        GStreamerVersioning function to handle this different approach
        transparently in Webkit gstreamer elements.

        Existing media tests cover this change.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkit_web_audio_src_init):
        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        (webkitGstGhostPadFromStaticTemplate):
        * platform/graphics/gstreamer/GStreamerVersioning.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):

2012-11-26  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove WorkerContextExecutionProxy
        https://bugs.webkit.org/show_bug.cgi?id=103210

        Reviewed by Adam Barth.

        This patch moves all methods in WorkerContextExecutionProxy
        to WorkerScriptController.

        Due to the dependency between WorkerContextExecutionProxy's methods,
        it is a bit difficult to split this patch into pieces.
        This patch simply moves methods without changing their logic.
        Also this patch doesn't remove empty WorkerContextExecutionProxy.{h,cpp}
        to keep the diff sane. I will address these issues in a follow-up patch.

        Tests: fast/worker/*

        * bindings/v8/ScriptState.cpp:
        (WebCore::scriptStateFromWorkerContext):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toV8Context):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::~WorkerScriptController):
        (WebCore::WorkerScriptController::dispose):
        (WebCore):
        (WebCore::WorkerScriptController::initializeIfNeeded):
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setEvalAllowed):
        (WebCore::WorkerScriptController::disableEval):
        * bindings/v8/WorkerScriptController.h:
        (WebCore):
        (WebCore::WorkerContextExecutionState::WorkerContextExecutionState):
        (WorkerContextExecutionState):
        (WorkerScriptController):
        (WebCore::WorkerScriptController::context):
        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):
        (WebCore::toV8):

2012-11-26  Hajime Morrita  <morrita@google.com>

        [Refactoring] Some Node::isDescendant calls can be replaced with Node::contains()
        https://bugs.webkit.org/show_bug.cgi?id=103211

        Reviewed by Daniel Bates.

        A couple of call sites of isDescendant() does same as Node::contains().
        This change replaces these locations with Node::contains().

        No new tests, no behavior change.

        * dom/Node.cpp:
        (WebCore::checkAcceptChild):
        * dom/Range.cpp:
        (WebCore::Range::surroundContents):

2012-11-26  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        [Chromium] Enable input type datetime-local
        https://bugs.webkit.org/show_bug.cgi?id=103213

        Reviewed by Kent Tamura.

        This patch enables <input type=datetime-local> for Chromium.

        No new tests. Covered by existing tests.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore): Changed RuntimeEnabledFeatures::isInputTypeDateTimeLocalEnabled to true
        if INPUT_TYPE_DATETIMELOCAL is enabled.

2012-11-26  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Implement Element::createShadowRoot()
        https://bugs.webkit.org/show_bug.cgi?id=102911

        Reviewed by Kentaro Hara.

        Added an API implementation and exposed it.

        This is basically an alias of the ShadowRoot constructor, which
        will be removed as bug 102913.

        Test: fast/dom/shadow/shadow-aware-create-shdow-root.html

        * bindings/gobject/GNUmakefile.am:
        * dom/Element.cpp:
        (WebCore::Element::createShadowRoot):
        (WebCore):
        * dom/Element.h:
        (Element):
        * dom/Element.idl:

2012-11-26  Jon Lee  <jonlee@apple.com>

        Extend EventDispatcher::dispatchSimulatedClick to allow sending a mouseover event
        https://bugs.webkit.org/show_bug.cgi?id=102610
        <rdar://problem/12725663>

        Reviewed by Darin Adler.

        Update the dispatchSimulatedClick() to take option enums for dispatching events.

        * dom/SimulatedClickOptions.h: Added. Define two options enums. One tracks which mouse
        events to send. The other determines whether to force the element to repaint.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick): Refactor to use the option enums.
        * dom/EventDispatcher.h:
        (EventDispatcher): Update function signature.

        * dom/Node.cpp: Refactor parameters to use the options enums rather than booleans.
        (WebCore::Node::dispatchSimulatedClick):
        * dom/Node.h:

        Refactor. Remove redundant comments.
        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::accessKeyAction):
        * html/BaseClickableWithKeyInputType.cpp:
        (WebCore::BaseClickableWithKeyInputType::accessKeyAction):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::accessKeyAction):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::accessKeyAction):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::click):
        (WebCore::HTMLElement::accessKeyAction):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::accessKeyAction):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::accessKeyAction):

        Add SimulatedClickOptions.h.
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2012-11-26  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Attaching children of a shadow host takes O(N^2) where N is the number of host children
        https://bugs.webkit.org/show_bug.cgi?id=103017

        Reviewed by Hajime Morita.

        Since ContentDistribution was just a Vector, ContentDistribution::find() took O(N). Each child of shadow host calls it.
        As a result, attaching children of shadow host takes O(N^2) at all.

        In this patch, we make ContentDistribution::find() O(1) amortizedly. We introduce HashMap from a Node to Vector index,
        and use it for ContentDistribution::find().

        No new tests, covered by existing tests.

        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistribution::swap):
        (WebCore):
        (WebCore::ContentDistribution::append):
        (WebCore::ContentDistribution::find):
        (WebCore::ContentDistributor::distributeSelectionsTo):
        * html/shadow/ContentDistributor.h:
        (ContentDistribution): ContentDistribution now contains Vector and a reverse map.
        (WebCore::ContentDistribution::first):
        (WebCore::ContentDistribution::last):
        (WebCore::ContentDistribution::at):
        (WebCore::ContentDistribution::size):
        (WebCore::ContentDistribution::isEmpty):
        (WebCore::ContentDistribution::clear):
        (WebCore::ContentDistribution::contains):
        (WebCore::ContentDistribution::nodes):

2012-11-26  Dan Carney  <dcarney@google.com>

        [V8] Give isolated shells a lifecycle like that of main shells
        https://bugs.webkit.org/show_bug.cgi?id=96522

        Reviewed by Adam Barth.

        Refactored the isolated shells in ScriptController
        to be cleaned up the same way the main shell is.

        No new tests. No change in functionality.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::clearForOutOfMemory):
        (WebCore::ScriptController::clearForClose):
        (WebCore::ScriptController::clearWindowShell):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::destroyIsolatedShell):
        (WebCore::V8DOMWindowShell::clearForClose):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):

2012-11-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135656.
        http://trac.webkit.org/changeset/135656
        https://bugs.webkit.org/show_bug.cgi?id=103218

        Made a few SVG tests crash on all platforms (Requested by
        apavlov on #webkit).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForFamily):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFamilyValue):

2012-11-25  Takashi Sakamoto  <tasak@google.com>

        WebCore::RenderBlock::determineStartPosition crash
        https://bugs.webkit.org/show_bug.cgi?id=98993

        Reviewed by Brent Fulgham.

        If we move some node and the node has some text,
        InlineFlowBox::removeChild() is invoked. The method invokes
        RootInlineBox::childRemoved(). childRemoved() checks whether the
        removed inlinebox has the renderer of its parent's line break object.
        If so, use setLineBreakInfo to make the parent's line break info to
        be 0. However in RenderBlock::determineStartPosition(), the code
        assume that all line break info is solved, i.e.
        prevRootBox->lineBreakObj()->isText(). Since lineBreakObj() returns 0
        because of removeChild(), determineStartPosition crash occurs.

        Test: fast/inline/inline-box-append-child-crash.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::determineStartPosition):
        Checks whether lineBreakObj() is 0 or not before using lineBreakObj().

2012-11-25  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: use native Element.prototype.normalize instead of custom defined Element.prototype.pruneEmptyTextNodes
        https://bugs.webkit.org/show_bug.cgi?id=103205

        Reviewed by Pavel Feldman.

        * inspector/front-end/DOMExtension.js:
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.clearAutoComplete):
        (WebInspector.TextPrompt.prototype._completionsReady):
        (WebInspector.TextPrompt.prototype.applySuggestion):

2012-11-25  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: remove unused DOM methods
        https://bugs.webkit.org/show_bug.cgi?id=103204

        Reviewed by Pavel Feldman.

        * inspector/front-end/DOMExtension.js:

2012-11-25  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: Remove unused Array.convert method
        https://bugs.webkit.org/show_bug.cgi?id=103202

        Reviewed by Daniel Bates.

        * inspector/front-end/utilities.js:

2012-11-25  Chris Fleizach  <cfleizach@apple.com>

        AX: file upload input cannot be activated with VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=100343

        Reviewed by Sam Weinig.

        Simulated events were not allowed to be processed in the file input type in the DOMActivate handler.
        This was a problem for accessibility clients which rely on simulated events.

        The solution is to mark the UserGestureIndicator as definitely processing an event.

        Test: accessibility/file-upload-button-with-axpress.html

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

2012-11-25  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: dispatch an event upon heap snapshot filter change
        https://bugs.webkit.org/show_bug.cgi?id=103201

        Reviewed by Pavel Feldman.

        Dispatch heapSnapshotFilterChanged event so it can be received by third parties.

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._changeFilter):
        * inspector/front-end/UserMetrics.js:

2012-11-25  Kent Tamura  <tkent@chromium.org>

        Refactoring: Move the content of HTMLInputElement::subtreeHasChanged to TextFieldInputType
        https://bugs.webkit.org/show_bug.cgi?id=103195

        Reviewed by Kentaro Hara.

        HTMLInputElement::subtreeHasChanged is called only if the input is
        a text field. The code should be moved to TextFieldInputType.

        No new tests. This should not change any behavior.

        * html/HTMLInputElement.cpp:
        - Remove unnecessary NumberInputType.h inclusion.
        - Remove convertFromVisibleValue. It was used only by subtreeHasChanged.
        (WebCore::HTMLInputElement::subtreeHasChanged):
        Move the code to TextFieldInputType::subtreeHasChanged except
        calculateAndAdjustDirectionality, which is a protected member of
        HTMLElement.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Remove convertFromVisibleValue.

        * html/InputType.cpp:
        Move convertFromVisibleValue to TextFieldInputType.
        (WebCore::InputType::subtreeHasChanged):
        Add ASSERT_NOT_REACHED.
        * html/InputType.h:
        (InputType): Remove convertFromVisibleValue.

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::convertFromVisibleValue):
        Moved from InputType.
        (WebCore::TextFieldInputType::subtreeHasChanged):
        Moved from HTMLInputElement. A latter part is moved to
        didSetValueByUserEdit to be hooked by SearchInputType.
        (WebCore::TextFieldInputType::didSetValueByUserEdit):
        Moved from HTMLInputElement::subtreeHasChanged, and clean up the code.
        * html/TextFieldInputType.h:
        (TextFieldInputType):
        - Move convertFromVisibleValue from InputType.
        - Add didSetValueByUserEdit and subtreeHasChanged.

        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::didSetValueByUserEdit):
        Renamed from subtreeHasChanged, and calls TextFieldInputType::didSetValueByUserEdit.
        * html/SearchInputType.h:
        (SearchInputType): Rename subtreeHasChanged to didSetValueByUserEdit.

2012-11-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Move WorkerExecutionContextProxy::initializeIfNeeded() to V8Initializer
        https://bugs.webkit.org/show_bug.cgi?id=103061

        Reviewed by Adam Barth.

        This is an incremental step to remove WorkerExecutionContextProxy.
        This patch moves WorkerExecutionContextProxy::initializeIfNeeded() to V8Initializer.
        This patch also renames methods so that the names become consistent
        between the main thread and workers.

        No tests. No change in behavior.

        * bindings/v8/V8Initializer.cpp:
        (WebCore::reportFatalErrorInMainThread):
        (WebCore::messageHandlerInMainThread):
        (WebCore::failedAccessCheckCallbackInMainThread):
        (WebCore::V8Initializer::initializeMainThreadIfNeeded):
        (WebCore::reportFatalErrorInWorker):
        (WebCore):
        (WebCore::messageHandlerInWorker):
        (WebCore::V8Initializer::initializeWorkerIfNeeded):
        * bindings/v8/V8Initializer.h:
        (V8Initializer):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy):
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WorkerContextExecutionProxy):

2012-11-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Refactor RenderThemeEfl::ThemePartCacheEntry::reuse()
        https://bugs.webkit.org/show_bug.cgi?id=103189

        Reviewed by Kenneth Rohde Christiansen.

        Check if the entry size and type changed in
        RenderThemeEfl::ThemePartCacheEntry::reuse() to avoid
        useless processing if one of them did not change.

        Remove useless call to cairo_surface_finish() since
        we are using a smart pointer for the surface.

        Resize the edge object *after* loading its content
        from the theme file as it seems more logical this
        way.

        No new tests, no behavior change for layout tests.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::ThemePartCacheEntry::reuse):
        * platform/efl/RenderThemeEfl.h:
        (ThemePartCacheEntry):

2012-11-25  Ryosuke Niwa  <rniwa@webkit.org>

        Rename DynamicNodeList to LiveNodeList
        https://bugs.webkit.org/show_bug.cgi?id=103197

        Reviewed by Ojan Vafai.

        Rename DynamicNodeList to LiveNodeList to match the terminology used in DOM4 working draft:
        http://www.w3.org/TR/2012/WD-dom-20120405/#concept-collection-live
        "A collection (either NodeList or HTMLCollection) can be either live or static".

        Also rename DynamicNodeListCacheBase to LiveNodeListBase, and merge DynamicSubtreeNodeList
        into LiveNodeList (old DynamicNodeList) now that the only difference between those two classes
        is the former calling registerNodeListCache and unregisterNodeListCache on Document.

        This patch completes the series of simplification of NodeList/HTMLCollection classes.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::opaqueRootForGC):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::nodeMatches):
        * dom/ChildNodeList.h:
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList):
        * dom/ClassNodeList.h:
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::registerNodeListCache):
        (WebCore::Document::unregisterNodeListCache):
        (WebCore):
        * dom/Document.h:
        (WebCore):
        (Document):
        * dom/DynamicNodeList.cpp: Removed.
        * dom/DynamicNodeList.h: Removed.
        * dom/LiveNodeList.cpp: Copied from Source/WebCore/dom/DynamicNodeList.cpp.
        (WebCore::LiveNodeListBase::rootNode):
        (WebCore::LiveNodeListBase::invalidateCache):
        (WebCore::LiveNodeListBase::invalidateIdNameCacheMaps):
        (WebCore::LiveNodeListBase::reportMemoryUsage):
        (WebCore::LiveNodeList::namedItem):
        * dom/LiveNodeList.h: Copied from Source/WebCore/dom/DynamicNodeList.h.
        (WebCore::LiveNodeListBase::LiveNodeListBase):
        (WebCore::LiveNodeListBase::shouldInvalidateTypeOnAttributeChange):
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::~LiveNodeList):
        (LiveNodeList):
        * dom/MicroDataItemList.cpp:
        (WebCore::MicroDataItemList::MicroDataItemList):
        * dom/MicroDataItemList.h:
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        * dom/NameNodeList.h:
        * dom/Node.cpp:
        (WebCore::shouldInvalidateNodeListCachesForAttr):
        (WebCore::Document::invalidateNodeListCaches):
        * dom/Node.h:
        (WebCore):
        * dom/NodeList.h:
        (WebCore::NodeList::isLiveNodeList):
        * dom/NodeRareData.h:
        (NodeListsNodeData):
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName):
        (WebCore::NodeListsNodeData::removeCacheWithName):
        (WebCore::NodeListsNodeData::removeCacheWithQualifiedName):
        (WebCore::NodeListsNodeData::adoptTreeScope):
        * dom/PropertyNodeList.cpp:
        (WebCore::PropertyNodeList::PropertyNodeList):
        * dom/PropertyNodeList.h:
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList):
        * dom/TagNodeList.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::LiveNodeListBase::iterateForNextNode):
        (WebCore::LiveNodeListBase::itemBeforeOrAfter):
        (WebCore::LiveNodeListBase::itemBefore):
        (WebCore::LiveNodeListBase::itemAfter):
        (WebCore::LiveNodeListBase::isLastItemCloserThanLastOrCachedItem):
        (WebCore::LiveNodeListBase::isFirstItemCloserThanCachedItem):
        (WebCore::LiveNodeListBase::setItemCache):
        (WebCore::LiveNodeListBase::length):
        (WebCore::LiveNodeListBase::item):
        (WebCore::LiveNodeListBase::itemBeforeOrAfterCachedItem):
        * html/HTMLCollection.h:
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::LabelsNodeList):
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::RadioNodeList):
        * html/RadioNodeList.h:

2012-10-08  Robert Hogan  <robert@webkit.org>

        Changing position:relative to position:static results in mis-positioned div
        https://bugs.webkit.org/show_bug.cgi?id=26397

        Reviewed by Ojan Vafai.

        When a block changes position from relative to static it is no longer the containing block for any
        positioned objects it may have. If any of those positioned objects actually have a position specified
        they are going to need a layout as their new containing block will likely have a different location they
        need to offset from. Positioned objects without a specified position always get a layout anyway 
        in layoutPositionedObjects() so no need to worry about them in this situation. 

        Test: fast/block/abspos-child-container-changes-from-relative-to-static-expected.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::removePositionedObjects):
        * rendering/RenderBlock.h:
        (RenderBlock):

2012-11-24  Antti Koivisto  <antti@apple.com>

        Make renderer construction less generic
        https://bugs.webkit.org/show_bug.cgi?id=103175

        Reviewed by Ojan Vafai.

        The renderer construction code currently operates on Nodes and is very generic. In reality
        only Element and Text nodes can have renderers and the Text case is much simpler.

        This patch separates the Text and Element renderer construction paths and makes it statically
        known that other Node types can't have renderers. Less generic code is less branchy and enables
        further optimizations.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        (WebCore):
        (WebCore::CharacterData::rendererIsNeeded):
        (WebCore::CharacterData::createRenderer):
        
            Only Text subclass of CharacterData can have renderers.

        * dom/CharacterData.h:
        (CharacterData):
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::childShouldCreateRenderer):
        
            Move childShouldCreateRenderer from Node to ContainerNode.

        (ContainerNode):
        * dom/Element.cpp:
        (WebCore::Element::rendererIsNeeded):
        (WebCore):
        (WebCore::Element::attach):
        (WebCore::Element::childShouldCreateRenderer):
        * dom/Element.h:
        
            Move rendererIsNeeded and createRenderer from Node to Element.

        (Element):
        * dom/Node.cpp:
        (WebCore::Node::attach):
        (WebCore):
        * dom/Node.h:
        (Node):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::createRendererForElementIfNeeded):
        (WebCore::NodeRenderingContext::createRendererForTextIfNeeded):
        
            Separate the Element and Text renderer creation paths. Both are less branchy.
            The Text path is much simpler and avoids a bunch of virtual calls.

        (WebCore):
        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        * dom/Text.cpp:
        (WebCore::Text::textRendererIsNeeded):
        (WebCore::Text::createTextRendererIfNeeded):
        (WebCore):
        (WebCore::Text::createTextRenderer):
        (WebCore::Text::attach):
        (WebCore::Text::updateTextRenderer):
        * dom/Text.h:
        
                Add non-virtual Text specific functions.

        (WebCore):
        (Text):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone):

2012-11-22  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r135493): HTMLCollection and DynamicNodeList have two vtable pointers
        https://bugs.webkit.org/show_bug.cgi?id=103096

        Reviewed by Sam Weinig.

        Co-authored by Ilya Tikhonovsky.

        Made DynamicNodeListCacheBase inherit from NodeList. While HTMLCollection doesn't inherit
        from NodeList in IDL, it makes a lot of sense for the C++ implementation to do so via
        DynamicNodeListCacheBase since HTMLCollection and live NodeList share a lot of code in
        DynamicNodeListCacheBase.

        This lets remove proxies for item() and length() in DynamicNodeList and HTMLCollection
        and directly implement them in DynamicNodeListCacheBase which used to provide itemCommon()
        and lengthCommon().

        Also renamed NodeList::itemWithName() to NodeList::namedItem() to match HTMLCollection's
        naming convention.

        Finally, removed reportMemoryUsage in DynamicNodeList::reportMemoryUsage since DynamicNodeList
        now uses single inheritance.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::canGetItemsForName): Calls namedItem, which has been renamed from
        itemWithName.
        (WebCore::JSNodeList::nameGetter): Ditto.
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::namedPropertyGetter): Ditto.
        * bindings/v8/custom/V8NamedNodesCollection.cpp:
        (WebCore::V8NamedNodesCollection::namedItem): Renamed from itemWithName.
        * bindings/v8/custom/V8NamedNodesCollection.h:
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::nodeMatches): Updated comment.
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::namedItem): Renamed from itemWithName.
        * dom/DynamicNodeList.h:
        (DynamicNodeListCacheBase): Inhertis from NodeList and renamed lengthCommon and itemCommon
        to virtual length and item respectively.
        (DynamicNodeList): Now inherits from just DynamicNodeListCacheBase instead of NodeList
        and DynamicNodeListCacheBase since the former now inhertis from NodeList. Also removed
        length() and item() since they're implemented in DynamicNodeListCacheBase now and renamed
        itemWithName() to namedItem() to match HTMLCollection's naming convention.
        * dom/NodeList.h:
        (NodeList::namedItem): Renamed from itemWithName. Note that this member function is not
        exposed via IDL. It's merely used in the binding code.
        * dom/StaticHashSetNodeList.cpp:
        (WebCore::StaticHashSetNodeList::namedItem): Ditto.
        * dom/StaticHashSetNodeList.h:
        (StaticHashSetNodeList::namedItem): Ditto.
        * dom/StaticNodeList.cpp:
        (WebCore::StaticNodeList::namedItem): Ditto.
        * dom/StaticNodeList.h:
        (StaticNodeList::namedItem): Ditto.
        * html/HTMLCollection.cpp:
        (WebCore::DynamicNodeListCacheBase::length): Renamed from lengthCommon.
        (WebCore::DynamicNodeListCacheBase::item): Renamed from itemCommon.
        * html/HTMLCollection.h:
        (HTMLCollection): Inherits from DynamicNodeListCacheBase since DynamicNodeListCacheBase
        is already RefCount'ed and NodeList, from which DynamicNodeListCacheBase inherits,
        inherits from ScriptWrappable.

2012-11-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Refactor RenderThemeEfl::paintThemePart()
        https://bugs.webkit.org/show_bug.cgi?id=103192

        Reviewed by Kenneth Rohde Christiansen.

        Refactor RenderThemeEfl::paintThemePart() so that:
        - Some C'ism is removed
        - RTL related code is moved to applyEdjeRTLState()
        - evas_render() is called instead of evas_render_updates()
          to avoid creating uselessly update rects.

        No new tests, no behavior change for layout tests.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::applyEdjeRTLState):
        (WebCore):
        (WebCore::RenderThemeEfl::paintThemePart):
        * platform/efl/RenderThemeEfl.h:
        (RenderThemeEfl):

2012-11-24  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Avoid access violation when frame is NULL.
        https://bugs.webkit.org/show_bug.cgi?id=68753

        BitmapImage::drawFrameMatchingSourceSize causes an access violation
        if BitmapImage::frameAtIndex returns NULL. (Found by David Delaune).

        Reviewed by Simon Fraser.

        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::drawFrameMatchingSourceSize): Check for null
        cairo_surface_t pointer and avoid dereferencing.

2012-11-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Refactor RenderThemeEfl::getThemePartFromCache()
        https://bugs.webkit.org/show_bug.cgi?id=103186

        Reviewed by Kenneth Rohde Christiansen.

        Refactor getThemePartFromCache() so that a list is used
        for the cache instead of a vector. The function moves
        items to the head of the container which is much more
        efficient with a list than a vector.

        The list ordering is also slightly altered so that the
        cached parts that were used last come first. Previously,
        they were sorted by creation time which may cause an
        item to be removed from the cache because it is older
        even if is was used recently.

        This patch also gets rid of some code duplication at the
        end of the function.

        No new tests, no behavior change.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::ThemePartCacheEntry::create): Return
        a smart pointer instead of a raw pointer.
        (WebCore::RenderThemeEfl::getThemePartFromCache):
        (WebCore::RenderThemeEfl::clearThemePartCache): Rename 
        flushThemePartCache to clearThemePartCache for clarity.
        (WebCore::RenderThemeEfl::loadTheme):
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::~RenderThemeEfl):
        * platform/efl/RenderThemeEfl.h:
        (ThemePartCacheEntry):
        (RenderThemeEfl):

2012-11-24  Liam Quinn  <lquinn@rim.com>

        [BlackBerry] RTSP should use the same MediaDocument as HTTP videos.
        https://bugs.webkit.org/show_bug.cgi?id=103185
        RIM PR 250114

        Reviewed by George Staikos.

        Make our MediaPlayer implementation indicate that it supports RTSP. That way, DOMImplementation::createDocument will create the same MediaDocument as is used for HTTP videos.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):

2012-11-24  Andreas Kling  <akling@apple.com>

        Put computed style 'font-family' values in the CSSValuePool.
        <http://webkit.org/b/103184>

        Reviewed by Ojan Vafai.

        Use CSSValuePool::createFontFamilyValue() when handing out 'font-family' values from CSSComputedStyleDeclaration.
        This avoids creating extra CSSPrimitiveValue objects since we already have these in the pool from parsing.
        Also added a max capacity to the font-family cache (using random eviction.)

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForFamily):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFamilyValue):

2012-11-24  Hayato Ito  <hayato@chromium.org>

        It's confusing that return values of 'bool Node::dispatchEvent(...)' and 'bool Node::dispatchMouseEvent(..)' have the opposite meanings.
        https://bugs.webkit.org/show_bug.cgi?id=103058

        Reviewed by Ojan Vafai.

        Refactor MouseEventDispatchMediator::dispatchEvent() and
        EventHandler::dispatchMouseEvent() so that they return bool
        which has the same meaning of the return value of
        Node::dispatchEvent().

        No tests. No change in behavior.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):

2012-11-23  Kangil Han  <kangil.han@samsung.com>

        Fix unused parameter compile warnings
        https://bugs.webkit.org/show_bug.cgi?id=103167

        Reviewed by Gyuyoung Kim.

        Remove compile warning messages by omitting parameter name and using UNUSED_PARAM.

        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (webkitAccessibleHyperlinkIsSelectedLink):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextGetTextAfterOffset):
        (webkitAccessibleTextGetTextAtOffset):
        (webkitAccessibleTextGetTextBeforeOffset):
        (webkitAccessibleTextGetOffsetAtPoint):

2012-11-23  Michael Saboff  <msaboff@apple.com>

        listMarkerText() should create 8 bit strings when possible
        https://bugs.webkit.org/show_bug.cgi?id=103011

        Reviewed by Filip Pizlo.

        Made processing of marker text items use 8 bit strings where possible in order to reduce 16 bit strings.

        Changes covered by existing tests.

        * rendering/RenderListMarker.cpp:
        (WebCore::toRoman): Changed character constants and buffer to build string to LChar's
        (WebCore::toAlphabeticOrNumeric): Made a template based on character type.
        (WebCore::toSymbolic): Made a template based on character type.
        (WebCore::toAlphabetic): Made a template based on character type.
        (WebCore::toNumeric): Added character type template parameter.
        (WebCore::listMarkerText): Changed character constants to LChar where possible.

2012-11-23  Robert Kroeger  <rjkroege@chromium.org>

        Remove unused ScrollByPixelVelocity
        https://bugs.webkit.org/show_bug.cgi?id=102840

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=80311 wrongly introduced a new
        kind of scroll: "ScrollByPixelVelocity". This code is not used on any platform
        and will not be of use in the future so this patch removes it.

        No new tests: code removal/cleanup.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultWheelEventHandler):
        (WebCore::EventHandler::handleGestureEvent):
        * platform/PlatformWheelEvent.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::ScrollAnimatorNone):
        (WebCore::ScrollAnimatorNone::scroll):
        (WebCore::ScrollAnimatorNone::cancelAnimations):
        (WebCore::ScrollAnimatorNone::animationTimerFired):
        * platform/ScrollAnimatorNone.h:
        (ScrollAnimatorNone):
        * platform/ScrollTypes.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scroll):

2012-11-23  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Removing unnecessary RenderBox friend access in RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=103159

        Reviewed by Eric Seidel.

        RenderObject has several classes marked as friend, between them,
        there is RenderBox which is derived from it indirectly and is not accessing
        its forefather private data making unnecessary the 'friend' access level.

        No new tests, no changes in functionality.

        * rendering/RenderObject.h:
        (RenderObject):

2012-11-23  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Implement new CSS3 background-position parsing.
        https://bugs.webkit.org/show_bug.cgi?id=102104

        Reviewed by Julien Chaffraix.

        Implement the parsing of the CSS3 background-position property which
        allows to specify up to four values to position the background. It is
        documented here :
        http://www.w3.org/TR/css3-background/#the-background-position . I
        decided to split up the patch is two pieces, the parsing and later I
        will do the rendering. I kept the old code as much as possible (i.e.
        the two values parsing) as it is used not only by background-position
        but by few other properties. The new four values support is only valid
        on the property itself but does not work on the shorthand.

        Opera has already implemented this feature.

        I extended backgrounds/background-position-parsing-2.html to cover the
        new possible values as well as buggy values.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.features.am:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillPositionComponent): Modify this function
        to allow creation of CSS primitive values with not only percentage or
        length but with keywords also as the new <position> type allows to
        specify keywords, for example top 30px right 20px.
        (WebCore):
        (WebCore::isValueConflictingWithCurrentEdge):
        (WebCore::isBackgroundPositionKeyword):
        (WebCore::CSSParser::parse3ValuesBackgroundPosition):
        (WebCore::CSSParser::parse4ValuesBackgroundPosition):
        (WebCore::CSSParser::parseFillBackgroundPosition): This function counts
        the number of words for the property value and call dedicated parsing
        functions for each case. Note that in case of two values we just call the old CSS 2.1
        method.
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillProperty): Only call the new parsing
        function if the feature is activated otherwise fallback to the old code
        path.
        * css/CSSParser.h:

2012-11-23  Justin Novosad  <junov@google.com>

        Adding occlusion detection to reduce overdraw in RenderBox background rendering
        https://bugs.webkit.org/show_bug.cgi?id=102557

        Reviewed by Stephen White.

        Adding hasAlpha method to all classes dervived from CSSImageValue and
        StyleImage, in order to support occlusion testing. 
        This allows the FillLayer recursion to stop early when an opaque layer
        is encountered while applying a CSS background style. This also allows
        the elimination of background color application when the background is
        completely covered by an image.  The optimization also skips the
        clearing of the page's root element when the page background is
        entirely covered by an image (e.g a tiled bitmap or a gradient)

        Test: fast/backgrounds/background-opaque-images-over-color.html

        * css/CSSCrossfadeValue.cpp:
        (WebCore::subimageHasAlpha):
        (WebCore):
        (WebCore::CSSCrossfadeValue::isPending):
        (WebCore::CSSCrossfadeValue::hasAlpha):
        * css/CSSCrossfadeValue.h:
        (CSSCrossfadeValue):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::hasAlpha):
        (WebCore):
        * css/CSSGradientValue.h:
        (CSSGradientValue):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::hasAlpha):
        (WebCore):
        * css/CSSImageGeneratorValue.h:
        (CSSImageGeneratorValue):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::hasAlpha):
        (WebCore):
        * css/CSSImageValue.h:
        (WebCore):
        (CSSImageValue):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::currentFrameHasAlpha):
        Test whether a cached image has alpha, with side effect of ensuring
        the image is in cache. (new method)
        (WebCore):
        * loader/cache/CachedImage.h:
        (CachedImage):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayers):
        Added layer recursion early exit when an opaque layer is encountered.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Eliminated background color fill when the layer contains an opaque
        image that covers the entire RenderBox.
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::hasOpaqueImage):
        Returns true if the layer's image is known to be fully opaque.
        (WebCore):
        (WebCore::FillLayer::hasRepeatXY):
        * rendering/style/FillLayer.h:
        (FillLayer):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::hasAlpha):
        (WebCore):
        * rendering/style/StyleCachedImage.h:
        (StyleCachedImage):
        * rendering/style/StyleCachedImageSet.cpp:
        (WebCore::StyleCachedImageSet::hasAlpha):
        (WebCore):
        * rendering/style/StyleCachedImageSet.h:
        (StyleCachedImageSet):
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::hasAlpha):
        (WebCore):
        * rendering/style/StyleGeneratedImage.h:
        (StyleGeneratedImage):
        * rendering/style/StyleImage.h:
        (StyleImage):
        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::hasAlpha):

2012-11-23  Justin Novosad  <junov@google.com>

        Page background color bleeds through inner edge of div border with rounded edges
        https://bugs.webkit.org/show_bug.cgi?id=103089

        Reviewed by Stephen White.

        Test that verifies whether a RenderBoxEdge is more than 2 pixels wide
        was applying the content scale factor backwards, so the
        obscuresBackgroundEdge was falsely passing for downsized boxes.

        Test: fast/backgrounds/gradient-background-leakage-2.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::BorderEdge::obscuresBackgroundEdge):

2012-11-23  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Remove dependency of TextureMapperLayer on GraphicsLayerTextureMapper.
        https://bugs.webkit.org/show_bug.cgi?id=103046

        Reviewed by Noam Rosenthal.

        It is a preparation patch for Threaded Coordinated Graphics on WK1.

        We want to make TextureMapperLayer into an actor model. After making an actor
        model, GraphicsLayerTextureMapper and LayerTreeRenderer will communicate with
        TextureMapperLayer using message passing. In the first step, we want to hide
        GraphicsLayerTextureMapper from TextureMapperLayer.

        There are 2 kinds of dependencies of TextureMapperLayer in GraphicsLayerTextureMapper.
        1. To query layer states
        2. To paint layer contents

        In this patch, we removed the second dependency. Currently, TextureMapperLayer
        requests painting contents to GraphicsLayerTextureMapper in WK1 while
        Coordinated Graphics prepares the contents in LayerTreeRenderer. This patch
        makes WK1 prepare the contents in GraphicsLayerTextureMapper like
        LayerTreeRenderer.

        We will remove the first dependency in a follow-up patch.

        Covered by existing layout tests.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingState):
        (WebCore):
        (WebCore::GraphicsLayerTextureMapper::didFlushCompositingState):
        (WebCore::GraphicsLayerTextureMapper::didFlushCompositingStateRecursive):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStore):
        (WebCore::GraphicsLayerTextureMapper::prepareBackingStore):
        (WebCore::GraphicsLayerTextureMapper::shouldHaveBackingStore):
        (WebCore::GraphicsLayerTextureMapper::drawRepaintCounter):
        (WebCore::GraphicsLayerTextureMapper::setDebugBorder):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::setHasOwnBackingStore):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::rootLayer):
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::textureMapper):
        (WebCore):
        (WebCore::TextureMapperLayer::flushCompositingState):
        (WebCore::TextureMapperLayer::flushCompositingStateSelf):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore):
        (WebCore::TextureMapperLayer::TextureMapperLayer):
        (TextureMapperLayer):
        (WebCore::TextureMapperLayer::setBackingStore):
        (State):
        (WebCore::TextureMapperLayer::State::State):

2012-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ENCHANT] Infinite loop when end word position is not found
        https://bugs.webkit.org/show_bug.cgi?id=103139

        Reviewed by Martin Robinson.

        Covered by existing tests in editing/spelling.

        * editing/visible_units.cpp:
        (WebCore::isLogicalStartOfWord): Make it private again.
        (WebCore::islogicalEndOfWord): Ditto.
        * editing/visible_units.h:
        * platform/text/enchant/TextCheckerEnchant.cpp:
        (WebCore::TextCheckerEnchant::checkSpellingOfWord): Helper funtion
        to check a word inside a string using the loaded dictionaries.
        (WebCore::TextCheckerEnchant::checkSpellingOfString): Optimize and
        simply the code by using the word iterator to iterate the
        words.
        * platform/text/enchant/TextCheckerEnchant.h:
        (TextCheckerEnchant):

2012-11-23  Zeno Albisser  <zeno@webkit.org>

        [Qt] GraphicsContext3DQt makes wrong surface current.
        https://bugs.webkit.org/show_bug.cgi?id=103136

        blitMultisampleFramebufferAndRestoreContext restores
        the wrong surface in case the currentContext is the same
        as m_platformContext.
        In this case we would reset the bound surface to NULL.
        Instead we should just leave the context unchanged.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::blitMultisampleFramebufferAndRestoreContext):

2012-11-23  Alexei Filippov  <alph@chromium.org>

        Web Inspector: remove total item from NMI snapshot grid
        https://bugs.webkit.org/show_bug.cgi?id=101926

        Reviewed by Yury Semikhatsky.

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

2012-11-23  Zeno Albisser  <zeno@webkit.org>

        [Qt] GraphicsContext3DQt should not overwrite glClearColor of sharing context.
        https://bugs.webkit.org/show_bug.cgi?id=103135

        In case we use GraphicsContext3DQt to render into or
        read from an existing context, we should not reset
        the glClearColor on construction.
        Otherwise we might overwrite an existing definition from
        the sharing context.

        Reviewed by Kenneth Rohde Christiansen.

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

2012-11-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: damaging last chunk does not remove its garbage from DOM
        https://bugs.webkit.org/show_bug.cgi?id=103132

        Reviewed by Vsevolod Vlasov.

        Removing everything between undamaged chunks, not registered chunk rows.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._insertSpanBefore):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        (WebInspector.TextEditorMainChunk.prototype.updateCollapsedLineRow):
        (WebInspector.TextEditorMainChunk.prototype.firstElement):
        (WebInspector.TextEditorMainChunk.prototype.lastElement):

2012-11-23  Ilya Tikhonovsky  <loislo@chromium.org>

        RenderLayer minor clean-up: replace raw pointers with OwnPtrs.
        https://bugs.webkit.org/show_bug.cgi?id=103134

        Reviewed by Eric Seidel.

        I found that RenderLayer still uses raw pointers to the objects which it owns.
        Looks like these pointers could be replaced with OwnPtrs.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateNormalFlowList):
        (WebCore::RenderLayer::collectLayers):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::marquee):
        (WebCore::RenderLayer::posZOrderList):
        (WebCore::RenderLayer::negZOrderList):
        (WebCore::RenderLayer::normalFlowList):
        (RenderLayer):
        (WebCore::RenderLayer::clearZOrderLists):

2012-11-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][AC] Mouse cursor is not updated when accelerated compositing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=103131

        Reviewed by Kenneth Rohde Christiansen.

        Make sure we try to get the Ecore_X_Window using ecore_evas_gl_x11_window_get()
        in applyFallbackCursor() if accelerated compositing is enabled instead of
        using ecore_evas_software_x11_window_get(). This fixes mouse cursor update
        when accelerated compositing is enabled.

        No new tests, no behavior change for layout tests.

        * platform/efl/EflScreenUtilities.cpp:
        (WebCore::applyFallbackCursor):

2012-11-16  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: extract MemoryObjectInfo declaration into a separate file
        https://bugs.webkit.org/show_bug.cgi?id=102510

        Reviewed by Pavel Feldman.

        Added necessary includes where MemoryObjectInfo declaration is required.

        * platform/audio/FFTFrame.cpp:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/StyleRareInheritedData.cpp:
        * rendering/style/StyleRareNonInheritedData.cpp:

2012-11-23  Dan Carney  <dcarney@google.com>

        Remove V8DOMWindowShell::getEntered
        https://bugs.webkit.org/show_bug.cgi?id=96637

        Reviewed by Adam Barth.

        V8DOMWindowShell::getEntered was refactored so that the window shell
        no longer has to be kept alive by a v8 context. Instead, only
        the DOMWrapperWorld will be kept alive.

        No new tests. No change in functionality.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::isolatedWorldWeakCallback):
        (WebCore):
        (WebCore::DOMWrapperWorld::makeContextWeak):
        (WebCore::DOMWrapperWorld::setIsolatedWorldField):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::isolated):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::currentWorldContext):
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * bindings/v8/V8Binding.h:
        (WebCore::worldForEnteredContextIfIsolated):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::destroyIsolatedShell):
        (WebCore::V8DOMWindowShell::disposeContext):
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        * bindings/v8/V8PerContextData.h:
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2012-11-23  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Refine JsDoc in ProfilesPanel.js
        https://bugs.webkit.org/show_bug.cgi?id=103042

        Reviewed by Yury Semikhatsky.

        I'm going to make profiler output typed.

        This will require some amount of refactoring.

        Before refactoring I would like to make things
        unambiguous by adding JsDoc where they are missing.

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._onToggleProfiling):
        Added to eliminate parameter type ambiguity.

2012-11-23  Kent Tamura  <tkent@chromium.org>

        Correct input[type=number] value sanitization for user-input
        https://bugs.webkit.org/show_bug.cgi?id=103018

        Reviewed by Kentaro Hara.

        If a number field has non-number string, HTMLInputElement::value is not
        updated and returns the past valid value. It doesn't match to the value
        sanitization algorithm defined by the HTML standard [1], and Opera's
        behavior. We should sanitize non-number strings to "".

        [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#number-state-(type=number)
        > The value sanitization algorithm is as follows: If the value of the
        > element is not a valid floating-point number, then set it to the empty
        > string instead.

        No new tests. Update existing tests;
        fast/forms/number/number-commit-valid-only.html and
        fast/forms/number/number-unacceptable-style.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::subtreeHasChanged):
        Remove isAcceptableValue check.

        * html/HTMLInputElement.h:
        (HTMLInputElement): isAcceptableValue is no longer needed.
        * html/InputType.cpp: Remove isAcceptableValue.
        * html/InputType.h: Ditto.
        * html/NumberInputType.cpp: Ditto.
        (WebCore::NumberInputType::hasUnacceptableValue):
        Fold the isAcceptableValue content into this.
        * html/NumberInputType.h:
        (NumberInputType): Remove isAcceptableValue.

2012-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135592.
        http://trac.webkit.org/changeset/135592
        https://bugs.webkit.org/show_bug.cgi?id=103126

        broke Chromium Mac compilation (Requested by yurys on
        #webkit).

        * WebCore.gypi:

2012-11-23  Yury Semikhatsky  <yurys@chromium.org>

        Remove references to non-chromium entries from WebCore.gypi (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=103124

        Reviewed by Pavel Feldman.

        * WebCore.gypi: removed references to gtk, cocoa, posix, ios, cf, win and mac

2012-11-23  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] add startCapturing and stopCapturing methods to protocol
        https://bugs.webkit.org/show_bug.cgi?id=103053

        Reviewed by Pavel Feldman.

        Add startCapturing and stopCapturing methods to the protocol to instrument several canvas frames in a row.
        Drive-by: support start offset index in retrieving trace logs in the backend as well as "alive" flag.

        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::captureFrame):
        (WebCore):
        (WebCore::InjectedScriptCanvasModule::startCapturing):
        (WebCore::InjectedScriptCanvasModule::callStartCapturingFunction):
        (WebCore::InjectedScriptCanvasModule::stopCapturing):
        (WebCore::InjectedScriptCanvasModule::dropTraceLog):
        (WebCore::InjectedScriptCanvasModule::callVoidFunctionWithTraceLogIdArgument):
        (WebCore::InjectedScriptCanvasModule::traceLog):
        * inspector/InjectedScriptCanvasModule.h:
        (InjectedScriptCanvasModule):
        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::startCapturing):
        (WebCore):
        (WebCore::InspectorCanvasAgent::stopCapturing):
        (WebCore::InspectorCanvasAgent::getTraceLog):
        * inspector/InspectorCanvasAgent.h:
        (InspectorCanvasAgent):
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):

2012-11-23  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: dispatch events upon certain user actions on inspector's notification services
        https://bugs.webkit.org/show_bug.cgi?id=103114

        Reviewed by Pavel Feldman.

        Add a bunch of WebInspector.UserMetrics.UserAction, so platform-specific code can wire to user actions
        without breaking too often.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._setPseudoClassForNodeId):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._setBreakpoint):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView.prototype._tabSelected.set WebInspector):
        (WebInspector.NetworkItemView.prototype._tabSelected):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._sortItems):
        (WebInspector.NetworkDataGridNode.prototype.select):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showSourceLine):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSource):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.revertToOriginal):
        (WebInspector.UISourceCode.prototype.revertAndClearHistory):
        (WebInspector.UISourceCode.prototype.commitWorkingCopy):
        * inspector/front-end/UserMetrics.js:
        * inspector/front-end/externs.js:
        * inspector/front-end/inspector.js:
        (WebInspector._requestZoom.set var):
        (WebInspector._requestZoom):

2012-11-23  Christophe Dumez  <christophe.dumez@intel.com>

        WebSocket's MessageEvent.origin attribute is an empty string
        https://bugs.webkit.org/show_bug.cgi?id=102889

        Reviewed by Kentaro Hara.

        Fix WebSocket implementation so that the message event's origin
        attribute is properly set to the Unicode serialization of the
        origin of the URL that was passed to the WebSocket object's
        constructor, instead of an empty string.

        The new behavior is according to the specification:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/network.html#feedback-from-the-protocol

        It also matches the behavior of Firefox.

        Tests: http/tests/websocket/tests/hybi/send-blob-onmessage-origin.html
               http/tests/websocket/tests/hybi/send-onmessage-origin.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didReceiveBinaryData):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        (MessageEvent):

2012-11-22  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: No "Save Heap Snapshot" option after canceling save to file dialog.
        https://bugs.webkit.org/show_bug.cgi?id=100916

        Reviewed by Yury Semikhatsky.

        Fixed order of operations - now receiver is assigned only when save
        dialog responds.

        * inspector/front-end/HeapSnapshotView.js: Fixed order of operations.

2012-11-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] REGRESSION(r135507): It made 13 tests fail
        https://bugs.webkit.org/show_bug.cgi?id=103069

        Reviewed by Simon Hausmann.

        The subframe loading logic depends on that script extensions are not recognized,
        so avoid recognizing them in getMIMETypeForExtension which is used for pre-load
        mimetype detection.

        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2012-11-23  Jochen Eisinger  <jochen@chromium.org>

        REGRESSION (r135455): Compilation without SVG enabled broken
        https://bugs.webkit.org/show_bug.cgi?id=103108

        Reviewed by Yury Semikhatsky.

        Move SVG-only code behind #if ENABLE(SVG) that was accidentially moved
        outside of the #if block during the refactoring.

        * platform/graphics/filters/FilterOperation.h:
        (ReferenceFilterOperation):

2012-11-23  Julian Pastarmov  <pastarmovj@chromium.org>

        REGRESSION (r128633): td changes size during re-layout of table although it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=102802

        Reviewed by Ojan Vafai.

        The bug was caused by incorrectly rewriting a nested condition which caused the else
        clause to trigger in wrong cases.

        Test: fast/table/nested-tables-with-div-offset.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight):
        Reverted wrong combination of nested if statements.

2012-11-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] REGRESSION(r135507): It made 13 tests fail
        https://bugs.webkit.org/show_bug.cgi?id=103069

        Reviewed by Simon Hausmann.

        Fix regression in recognizing MHTML on some platforms.

        * platform/qt/MIMETypeRegistryQt.cpp:
        (ExtensionMap):
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):

2012-11-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: ctrl+end in editor does not select the last symbol.
        https://bugs.webkit.org/show_bug.cgi?id=103078

        Reviewed by Vsevolod Vlasov.

        Test: inspector/editor/text-editor-selection.html

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype._handleScrollChanged):
        (WebInspector.DefaultTextEditor.prototype.overrideViewportForTest):
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorChunkedPanel.prototype._scrollTop):
        (WebInspector.TextEditorChunkedPanel.prototype._clientHeight):
        (WebInspector.TextEditorMainPanel.prototype._paintLineChunks):
        (WebInspector.TextEditorMainPanel.prototype._selectionToPosition):
        (WebInspector.TextEditorMainPanel.prototype._updateHighlightsForRange):

2012-11-23  Yury Semikhatsky  <yurys@chromium.org>

        Remove references to non-chromium entries from WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=103103

        Reviewed by Pavel Feldman.

        * WebCore.gypi: Removed references to files specific for wince, cairo, qt, wx and efl.

2012-11-23  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: inspector overlay is always updated when inspector is open
        https://bugs.webkit.org/show_bug.cgi?id=103106

        Reviewed by Pavel Feldman.

        Provide empty size into the InspectorOverlay if the metrics emulation is disabled,
        so that it will not get painted in all cases.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::webViewResized): Call InspectorPageAgent::webViewResized() rather than InspectorOverlay::resize().
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::webViewResized): Provide empty size into InspectorOverlay::resize() if device metrics are not emulated.
        * inspector/InspectorPageAgent.h:

2012-11-23  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Platform support for Accessibility feature.
        https://bugs.webkit.org/show_bug.cgi?id=100848

        Reviewed by Gyuyoung Kim.

        Add EFL platform's definitions to enable proper accessibility routines.

        No new tests. Covered by existing layout tests.

        * PlatformEfl.cmake: Add accessibility/atk content to compilation.
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        * accessibility/efl/AccessibilityObjectEfl.cpp: Removed. No needed platform specific implementation. ATK shared implementation will be used.

2012-11-23  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Expose DOM interface for CSS Device Adaptation
        https://bugs.webkit.org/show_bug.cgi?id=95966

        Reviewed by Kenneth Rohde Christiansen.

        Added V8 and JSC bindings for CSS Device Adapation.

        Test: css3/device-adapt/opera/cssom-001.xhtml

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::wrap):
        * css/CSSRule.idl:
        * css/WebKitCSSViewportRule.idl: Added.
        * page/DOMWindow.idl:

2012-11-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135549.
        http://trac.webkit.org/changeset/135549
        https://bugs.webkit.org/show_bug.cgi?id=103102

        Multiple layout test crashes (Requested by yurys on #webkit).

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTable.h:
        (RenderTable):

2012-11-22  Rick Byers  <rbyers@chromium.org>

        window is missing Touch and TouchList - touch event conformance test failure
        https://bugs.webkit.org/show_bug.cgi?id=96295

        Reviewed by Adam Barth.

        Add Touch and TouchList constructors to window for ENABLE(TOUCH_EVENTS).

        Tests: fast/js/global-constructors.html
               fast/events/touch/document-create-touch-list.html

        * page/DOMWindow.idl:

2012-11-22  Dan Carney  <dcarney@google.com>

        [V8] Make worker context prototype chain match other browsers
        https://bugs.webkit.org/show_bug.cgi?id=103057

        Reviewed by Adam Barth.

        The following should be defined in a worker:
        Object.getOwnPropertyDescriptor(this.__proto__, "postMessage")
        It is currently undefined in chrome only. This patch fixes that.

        No new tests. No change in functionality.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):

2012-11-22  Rafael Brandao  <rafael.lobo@openbossa.org>

        Remove PLATFORM(HAIKU) leftovers code
        https://bugs.webkit.org/show_bug.cgi?id=103086

        Reviewed by Antti Koivisto.

        * platform/PlatformWheelEvent.h:
        (PlatformWheelEvent):

2012-11-22  Dirk Schulze  <krit@webkit.org>

        -webkit-mask shorthand switches -webkit-mask-clip and -webkit-mask-origin values
        https://bugs.webkit.org/show_bug.cgi?id=103083

        Reviewed by Antti Koivisto.

        The order of CSSPropertyWebkitMaskOrigin and CSSPropertyWebkitMaskClip was not correct
        for property value. Just changed the order in the property array to match behavior of
        background and CSS Masking spec.

        Test: fast/masking/parsing-mask.html

        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitMaskShorthand):

2012-11-22  John Mellor  <johnme@chromium.org>

        Text Autosizing: Improve handling of nested comments on reddit.com
        https://bugs.webkit.org/show_bug.cgi?id=102409

        Reviewed by Kenneth Rohde Christiansen.

        No longer consider overflow != visible as requiring an independent
        cluster. Some sites (e.g. reddit.com) wrap ordinary blocks (such as
        comments) in overflow:hidden or overflow:auto, for various reasons
        (like allowing it to be scrollable, or clipping an element that sticks
        out). These reasons are not sufficient justification for a new cluster.

        On reddit.com this means that comments will all get the same multiplier,
        rather than being independently assigned a variety of multipliers based
        on how much text each comment contains (etc), which significantly
        improves the look.

        Test: fast/text-autosizing/cluster-narrow-in-wide-ohidden.html

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::isAutosizingCluster):

2012-11-22  Pravin D  <pravind.2k4@gmail.com>

        max-height property not respected in case of tables
        https://bugs.webkit.org/show_bug.cgi?id=98633

        Reviewed by Julien Chaffraix.

        The max-height property determines the maximum computed height an element can have. In case of tables
        the computed height was not being limited by the max-height property. The current patch fixes the same.

        Test: fast/table/css-table-max-height.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
          Helper function to compute height from the given style height.
          This function handles style height of type fixed, percent and viewport percent.
          As height of type 'calculated' gets internally resolved to either fixed or percent
          there is no special handling required for the same.

        (WebCore):
        (WebCore::RenderTable::layout):
          Logic to compute the logical height of an element such that it does not exceed the max-height value given that
          min-width < Content height < max-height, when min-height < max-height.
          However max-height value is not respected if either min-height > max-height or Content height > max-height.

        * rendering/RenderTable.h:
        (RenderTable):
          Function definition for the newly add function convertStyleLogicalHeightToComputedHeight().

2012-11-22  Kentaro Hara  <haraken@chromium.org>

        Remove 'module' from IDL parser
        https://bugs.webkit.org/show_bug.cgi?id=102670

        Reviewed by Adam Barth.

        The Web IDL spec no longer supports 'module'. We already removed
        'module's from WebKit IDL files. So this patch removes 'module'
        from the IDL parser.

        No tests. No change in behavior.

        * bindings/scripts/IDLParser.pm:
        (Parse):
        (parseDefinitionOld):

2012-11-22  Dan Carney  <dcarney@google.com>

        [V8] fix DOMWrapperWorld destructor
        https://bugs.webkit.org/show_bug.cgi?id=103066

        Reviewed by Jochen Eisinger.

        DOMWrapperWorld had a workaround in place during deletion.
        This patch brings it in line with WebKit standards.

        No new tests: refactor.

        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::ensureIsolatedWorld):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::isolatedWorldDOMDataStore):

2012-11-22  Antti Koivisto  <antti@apple.com>

        Remove SVGShadowText class
        https://bugs.webkit.org/show_bug.cgi?id=103088

        Reviewed by Ryosuke Niwa.

        Remove SVGShadowText class and merge the little functionality it has to Text.

        * dom/Text.cpp:
        (WebCore):
        (WebCore::isSVGShadowText):
        
            Figure out if we are a SVGShadowText from the context.

        (WebCore::isSVGText):
        (WebCore::Text::createRenderer):
        (WebCore::Text::recalcTextStyle):
        
            Factor SVG special case testing to functions.

        * dom/Text.h:
        (Text):

            Get rid of the now unnecessary willRecalcTextStyle mechanism.

        * svg/SVGTRefElement.cpp:
        (WebCore):
        (WebCore::SVGTRefElement::updateReferencedText):

2012-11-22  Andreas Kling  <akling@apple.com>

        Style sharing: Remove O(n^2) presentation attribute checks that never found anything anyway.
        <http://webkit.org/b/103019>

        Reviewed by Ojan Vafai.

        Rely on the global presentation attribute cache and remove the slow-path code that compares
        the full StylePropertySets for attribute-derived style.
        There are virtually no cases of logically equivalent presentation attribute styles that don't
        already share the same memory address. (Zero hits on Apple and Chromium PLT content.)

        * css/StyleResolver.cpp:
        (WebCore::haveIdenticalStyleAffectingAttributes):
        (WebCore::StyleResolver::canShareStyleWithElement):

2012-11-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: evaluate on hover regressed with the editor change
        https://bugs.webkit.org/show_bug.cgi?id=103063

        Reviewed by Vsevolod Vlasov.

        We are no longer mutating the editor's dom from outside.

        * inspector/front-end/DOMExtension.js:
        (Element.prototype.remove):
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.highlightRangesWithStyleClass):
        (WebInspector.DefaultTextEditor.prototype.highlightExpression):
        (WebInspector.DefaultTextEditor.prototype.hideHighlightedExpression):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._getPopoverAnchor):
        (WebInspector.JavaScriptSourceFrame.prototype._onHidePopover):
        (WebInspector.JavaScriptSourceFrame.prototype._highlightExpression):

2012-09-26  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Split SVG from WebCore to work-around make limitation
        https://bugs.webkit.org/show_bug.cgi?id=97735

        Reviewed by Carlos Garcia Campos.

        Add a new libtool convenience library, libWebCoreSVG.la, to work-around
        make limitation when linking libWebCore.

        * GNUmakefile.am: new libWebCoreSVG.la library.
        * GNUmakefile.list.am: move SVG-related files to be part of the new library.

2012-11-22  Pan Deng  <pan.deng@intel.com>

        [Web Inspector]Code Style changes in TimelinePresentationModel.js.
        https://bugs.webkit.org/show_bug.cgi?id=102885.

        Reviewed by Pavel Feldman.

        This patch changes "switch" code style for TimelinePresentationModel.js, no functionality update.

        No new tests.

        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record.prototype._getRecordDetails):

2012-11-22  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt.

        * html/HTMLCollection.h:
        (HTMLCollection):

2012-11-22  Ryosuke Niwa  <rniwa@webkit.org>

        Get rid of HTMLCollectionCacheBase
        https://bugs.webkit.org/show_bug.cgi?id=103085

        Reviewed by Sam Weinig.

        Merged HTMLCollectionCacheBase into HTMLCollection now that DynamicNodeList and HTMLCollection
        share one implementation.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeListCacheBase::rootNode): Merged ownerNodeHasItemRefAttribute since this was
        the only caller of this function, and the function name didn't match what it was checking.
        (WebCore::DynamicNodeListCacheBase::invalidateCache):
        (WebCore::DynamicNodeListCacheBase::invalidateIdNameCacheMaps):
        * dom/DynamicNodeList.h:
        (WebCore):
        (WebCore::DynamicNodeListCacheBase::cachedItemOffset):
        (DynamicNodeListCacheBase):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::DynamicNodeListCacheBase::setItemCache):
        (WebCore::DynamicNodeListCacheBase::itemBeforeOrAfterCachedItem): Merged cachedElementsArrayOffset()
        now that this is the only caller.
        (WebCore::HTMLCollection::append):
        * html/HTMLCollection.h:
        (HTMLCollection):
        (WebCore::HTMLCollection::idCache): Moved from HTMLCollectionCacheBase.
        (WebCore::HTMLCollection::nameCache): Ditto.
        (WebCore::HTMLCollection::appendIdCache): Ditto.
        (WebCore::HTMLCollection::appendNameCache): Ditto.

2012-11-22  Antti Koivisto  <antti@apple.com>

        Merge EditingText into Text
        https://bugs.webkit.org/show_bug.cgi?id=103060

        Reviewed by Ryosuke Niwa.

        Remove the EditingText class. Its only function beyond the regular Text is that it always creates a renderer.
        It can be replaced with a bit.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CDATASection.cpp:
        (WebCore::CDATASection::CDATASection):
        * dom/Document.cpp:
        (WebCore::Document::createEditingTextNode):
        * dom/Document.h:
        (WebCore):
        (Document):
        * dom/EditingText.cpp: Removed.
        * dom/EditingText.h: Removed.
        * dom/Node.h:
        (WebCore::Node::hasName):
        (WebCore::Node::isEditingText):
        (WebCore::Node::setHasName):
        
            Use the same bit as hasName() which is Element specific.

        * dom/Text.cpp:
        (WebCore::Text::create):
        (WebCore):
        (WebCore::Text::createEditingText):
        (WebCore::Text::rendererIsNeeded):
        * dom/Text.h:
        (Text):
        (WebCore::Text::Text):
        * editing/Editor.cpp:
        * editing/InsertTextCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/htmlediting.cpp:
        * editing/mac/EditorMac.mm:
        * page/Frame.cpp:

2012-11-22  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: Disclosure arrows rendered underneath frame boundaries
        https://bugs.webkit.org/show_bug.cgi?id=101053

        Reviewed by Yury Semikhatsky.

        In Timeline, when in "frames" mode, event disclosure arrows are rendered
        below the dividing lines for the frame (div.timeline-frame-divider).
        When this happens, the frame divider can capture mouse clicks and make
        it difficult to open the disclosure arrow.

        * inspector/front-end/timelinePanel.css:
        (#timeline-grid-header): Render dividers under timeline bars.

2012-11-22  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Reduce public methods of TextureMapperTiledBackingStore.
        https://bugs.webkit.org/show_bug.cgi?id=103032

        Reviewed by Noam Rosenthal.

        This patch makes two methods private and removes one method.

        No new tests, refactoring only.

        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (WebCore::TextureMapperTiledBackingStore::create):
        (TextureMapperTiledBackingStore):
        (WebCore::TextureMapperTiledBackingStore::setContentsToImage):
        (WebCore::TextureMapperTiledBackingStore::rect):

2012-11-22  Simon Hausmann  <simon.hausmann@digia.com>, Pierre Rossi <pierre.rossi@digia.com>

        [Qt] Separate QWidget dependant code into separate WebKitWidgets static library
        https://bugs.webkit.org/show_bug.cgi?id=102800

        Reviewed by Tor Arne Vestbø.

        This patch separates code that needs to use QWidget related APIs in
        WebKit/qt/WebCoreSupport and Api from code that doesn't. This means for
        example FrameLoaderClientQt.cpp remains in the WebKit1 static library,
        while qwebpage.cpp and qwebframe.cpp become part of the WebKitWidgets
        static library. WebKit1 is compiled without QT += widgets and therefore
        any widget related dependency has been moved "up" and out of WebKit1 into
        the WebKitWidgets library.

        Between the code in WebKit.a and WebKitWidgets.a new adapters and
        interfaces have been introduced, such as QWebPageAdapter and
        QWebFrameAdapter. QWebPageAdapter, when used from WebKit1, is a way to
        call out into the API layer, implemented by QWebPage (QWebPagePrivate).
        The other way around if QWebPage wants to access WebCore or
        WebCoreSupport related functionality, it will go through
        QWebPageAdapater (as base class). The separation in the direction up
        into the API layer is complete with this patch, no code in WebKit1
        depends on QtWidgets. The separation the other way around, code in the
        API layer not using any WebCore types, is not complete yet.

        Some classes such as QWebSettings, QWebElement or
        DumpRenderTreeSupportQt remain in WebKit1. While they are API layer,
        they do not depend on widget related Qt APIs and they make much more
        use of WebCore internal APIs and therefore are easier to keep in
        WebKit1.

        In the future we plan to place a real shared library boundary between
        WebKit1 and WebKitWidgets, by keeping the WebKit1 static library as
        part of the QtWebKit shared library and by turning the WebKitWidgets
        static library into a shared one.

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

2012-11-22  Dan Carney  <dcarney@google.com>

        [V8] Add context checks to WorldContextHandle and V8DOMWindowShell
        https://bugs.webkit.org/show_bug.cgi?id=101573

        Reviewed by Adam Barth.

        Added a bunch of assertions to ensure the problems with IndexedDB
        contexts cannot reemerge.

        No new tests. No change in functionality.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore):
        (WebCore::V8DOMWindowShell::assertContextHasCorrectPrototype):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        (WebCore::V8DOMWindowShell::isolated):
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2012-11-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Correct extensions on preferredFilename
        https://bugs.webkit.org/show_bug.cgi?id=103054

        Reviewed by Simon Hausmann.

        When guessing a filename we will now ensure it has an extension that is valid for its mimetype.
        To do this the two missing methods getExtensionsForMIMEType and getPreferredExtensionForMIMEType
        have been added to the Qt implementation of MIMETypeRegistry.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):

2012-11-22  Kent Tamura  <tkent@chromium.org>

        INPUT_MULTIPLE_FIELDS_UI: Refactoring: Do not call updateInnerTextValue if only read-only sub-fields have values
        https://bugs.webkit.org/show_bug.cgi?id=103033

        Reviewed by Kentaro Hara.

        input[type=time] can have read-only sub fields. If only read-only fields
        have values, we don't need to call updateInnerTextValue when
        HTMLInputElement::value is set to "".

        Tests: this patch doesn't change any visible behavior, but we add test cases to
        fast/forms/time-multiple-fields/time-multiple-fields-value-set-empty.html
        just in case.

        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement): Declare anyEditableFieldsHaveValues.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::anyEditableFieldsHaveValues):
        Added. This function checks value existence against only editable sub-fields.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::setValue):
        Call DateTimeEditElement::anyEditableFieldsHaveValues() instead of
        DateTimeFieldsState::hasAnyValue().
        * html/DateTimeFieldsState.h: Remove hasAnyValue.

2012-11-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Lookup mimetypes using QMimeDatabase
        https://bugs.webkit.org/show_bug.cgi?id=102667

        Reviewed by Simon Hausmann.

        The Qt backend of MIMETypeRegistry now looks up using QMimeDatabase.

        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):
            Also map the preferred freedesktop mimetype for MIME archives to MIME archive constructor.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getNormalizedMIMEType):
        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):
        (WebCore::MIMETypeRegistry::getNormalizedMIMEType):

2012-11-22  Cosmin Truta  <ctruta@rim.com>

        Move URL-checking code into Frame
        https://bugs.webkit.org/show_bug.cgi?id=103014

        Reviewed by Ojan Vafai.

        Move the common URL checking logic from HTMLFrameElementBase::isURLAllowed
        and HTMLPlugInImageElement::allowedToLoadFrameURL into Frame::isURLAllowed.

        No new tests. Refactoring.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed): Call Frame::isURLAllowed.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::allowedToLoadFrameURL): Call Frame::isURLAllowed.
        * page/Frame.cpp:
        (WebCore::Frame::isURLAllowed): Added.
        * page/Frame.h:
        (Frame): Added isURLAllowed.

2012-11-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename toWebCoreStringWithNullOrUndefinedCheck() with toWebCoreStringWithUndefinedOrNullCheck()
        https://bugs.webkit.org/show_bug.cgi?id=103013

        Reviewed by Adam Barth.

        IDL attributes and other V8 and JSC files use "UndefinedOrNull" instead of "NullOrUndefined".

        No tests. No change in behavior.

        * bindings/v8/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::functionName):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setScriptSource):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::compileScript):
        (WebCore::ScriptDebugServer::runScript):
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerLocation):
        * bindings/v8/V8Binding.h:
        (WebCore::toWebCoreStringWithUndefinedOrNullCheck):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::showModalDialogCallback):
        (WebCore::V8DOMWindow::openCallback):
        * bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp:
        (WebCore::V8JavaScriptCallFrame::evaluateCallback):

2012-11-22  Harald Alvestrand  <hta@google.com>

        Name enumerator function for GetStats RTCStatsElement
        https://bugs.webkit.org/show_bug.cgi?id=102933

        Reviewed by Adam Barth.

        Tested by extensions to the RTCPeerConnection-stats test.

        * Modules/mediastream/RTCStatsElement.cpp:
        (WebCore::RTCStatsElement::names):
        (WebCore):
        * Modules/mediastream/RTCStatsElement.h:
        (RTCStatsElement):
        * Modules/mediastream/RTCStatsElement.idl:

2012-11-22  Kentaro Hara  <haraken@chromium.org>

        Rename the "eden" bit to something more descriptive
        https://bugs.webkit.org/show_bug.cgi?id=102985

        Reviewed by Adam Barth.

        InEdenFlag is not descriptive. Per the discussion in IRC,
        we rename InEdenFlag to V8CollectableDuringMinorGCFlag.

        No tests. No change in behavior.

        * bindings/v8/V8GCController.cpp:
        (WebCore::gcTree):
        (WebCore::V8GCController::didCreateWrapperForNode):
        (WebCore::V8GCController::minorGCPrologue):
        * dom/Node.h:
        (WebCore::Node::isV8CollectableDuringMinorGC):
        (WebCore::Node::setV8CollectableDuringMinorGC):

2012-11-22  Kentaro Hara  <haraken@chromium.org>

        [V8] Move AddMessageListener() from WorkerContextExecutionProxy::initializeIfNeeded() to WorkerContextExecutionProxy::initIsolate()
        https://bugs.webkit.org/show_bug.cgi?id=102998

        Reviewed by Adam Barth.

        This is an incremental step for moving initializeIfNeeded()
        to V8Initializer.h. Given that AddMessageListener() needs to
        be called once per Isolate, we can move AddMessageListener()
        from initializeIfNeeded() to initIsolate().

        No tests. No change in behavior.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initIsolate):
        (WebCore::WorkerContextExecutionProxy::initializeIfNeeded):

2012-11-22  Michael Saboff  <msaboff@apple.com>

        HTML integer parsing functions don't natively handle 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=102997

        Reviewed by Filip Pizlo.

        In order to avoid unnecessary up convering of 8 bit strings to 16 bits, added 8 bit paths to
        parseHTMLInteger() and parseHTMLNonNegativeInteger() by breaking out the core logic into
        templated helper functions.  These methods are primarily used to process attribute values.

        No new tests needed, functionnality covered by existing tests.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseHTMLIntegerInternal):
        (WebCore::parseHTMLInteger):
        (WebCore::parseHTMLNonNegativeIntegerInternal):
        (WebCore::parseHTMLNonNegativeInteger):

2012-11-22  Kentaro Hara  <haraken@chromium.org>

        [V8] WebCoreStringResourceBase should be located in V8StringResource.h
        https://bugs.webkit.org/show_bug.cgi?id=103002

        Reviewed by Adam Barth.

        Currently WebCoreStringResourceBase is mis-located in V8ValueCache.h.
        It should be in V8StringResource.h.

        No tests. No change in behavior.

        * bindings/v8/V8StringResource.cpp:
        (WebCore::WebCoreStringResourceBase::toWebCoreStringResourceBase):
        (WebCore):
        (WebCore::WebCoreStringResourceBase::visitStrings):
        * bindings/v8/V8StringResource.h:
        (WebCore):
        (WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::~WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::webcoreString):
        (WebCore::WebCoreStringResourceBase::atomicString):
        (WebCore::WebCoreStringResourceBase::memoryConsumption):
        (WebCoreStringResource16):
        (WebCore::WebCoreStringResource16::WebCoreStringResource16):
        (WebCoreStringResource8):
        (WebCore::WebCoreStringResource8::WebCoreStringResource8):
        * bindings/v8/V8ValueCache.cpp:
        * bindings/v8/V8ValueCache.h:
        (WebCore):

2012-11-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI add instrumentation to DynamicNodeList classes hierarchy.
        https://bugs.webkit.org/show_bug.cgi?id=103025

        Reviewed by Yury Semikhatsky.

        RNiwa changed pointer type in NodeRareData::NodeListAtomicNameCacheMap from the topmost
        DynamicSubtreeNodeList to the base DynamicNodeListCacheBase at r135429.
        As a result we got non zero count of pointers that don't match with tcmalloc data,
        because DynamicNodeList uses multiple inheritance.
        It could be fixed with help of explicit native memory instrumentation for DynamicNodeList class hierarchy.

        No change in behavior, so no new tests.

        * dom/Document.cpp: drive by fix.
        (WebCore::Document::reportMemoryUsage):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeListCacheBase::reportMemoryUsage):
        (WebCore):
        (WebCore::DynamicNodeList::reportMemoryUsage):
        (WebCore::DynamicSubtreeNodeList::reportMemoryUsage):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeListCacheBase::~DynamicNodeListCacheBase):
        (DynamicNodeListCacheBase):
        (DynamicNodeList):
        (DynamicSubtreeNodeList):

2012-11-22  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r135482.
        http://trac.webkit.org/changeset/135482
        https://bugs.webkit.org/show_bug.cgi?id=103002

        It broke Chrome/Linux Debug build

        * bindings/v8/V8StringResource.cpp:
        * bindings/v8/V8StringResource.h:
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::WebCoreStringResourceBase::toWebCoreStringResourceBase):
        (WebCore):
        (WebCore::WebCoreStringResourceBase::visitStrings):
        * bindings/v8/V8ValueCache.h:
        (WebCore):
        (WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::~WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::webcoreString):
        (WebCore::WebCoreStringResourceBase::atomicString):
        (WebCore::WebCoreStringResourceBase::memoryConsumption):
        (WebCoreStringResource16):
        (WebCore::WebCoreStringResource16::WebCoreStringResource16):
        (WebCoreStringResource8):
        (WebCore::WebCoreStringResource8::WebCoreStringResource8):

2012-11-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134927 and r134944.
        http://trac.webkit.org/changeset/134927
        http://trac.webkit.org/changeset/134944
        https://bugs.webkit.org/show_bug.cgi?id=103028

        Reverting the reverts after merging. (Requested by vsevik on
        #webkit).

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/AdvancedSearchController.js:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerShortcuts):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        * inspector/front-end/ElementsPanelDescriptor.js:
        (WebInspector.ElementsPanelDescriptor.prototype.registerShortcuts):
        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.install):
        * inspector/front-end/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut._keyName):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.registerShortcuts):
        (WebInspector.PanelDescriptor.prototype.panel):
        (WebInspector.PanelDescriptor.prototype.registerShortcuts):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._createDebugToolbar):
        (WebInspector.ScriptsPanel.prototype._createButtonAndRegisterShortcuts):
        * inspector/front-end/ScriptsPanelDescriptor.js:
        (WebInspector.ScriptsPanelDescriptor.prototype.registerShortcuts):
        * inspector/front-end/ShortcutsScreen.js:
        (WebInspector.ShortcutsScreen):
        (WebInspector.ShortcutsSection):
        (WebInspector.ShortcutsSection.prototype._renderKey):
        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._registerShortcuts):
        * inspector/front-end/TimelinePanelDescriptor.js: Copied from Source/WebCore/inspector/front-end/ScriptsPanelDescriptor.js.
        (WebInspector.TimelinePanelDescriptor):
        (WebInspector.TimelinePanelDescriptor.prototype.registerShortcuts):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._panelDescriptors):
        (WebInspector._registerShortcuts):

2012-11-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135433 and r135479.
        http://trac.webkit.org/changeset/135433
        http://trac.webkit.org/changeset/135479
        https://bugs.webkit.org/show_bug.cgi?id=103029

        "IDBRequestTest.EventsAfterStopping crashes" (Requested by
        yurys on #webkit).

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.cpp:
        * bindings/v8/DOMWrapperWorld.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::currentWorldContext):
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * bindings/v8/V8Binding.h:
        (WebCore::worldForEnteredContextIfIsolated):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::destroyIsolatedShell):
        (WebCore::isolatedContextWeakCallback):
        (WebCore):
        (WebCore::V8DOMWindowShell::disposeContext):
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWindowShell.h:
        (WebCore::V8DOMWindowShell::isolated):
        (V8DOMWindowShell):
        * bindings/v8/V8PerContextData.h:
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2012-11-21  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: simplify the _updateChunksForRanges routine
        https://bugs.webkit.org/show_bug.cgi?id=102927

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        (WebInspector.TextEditorMainChunk.prototype.updateCollapsedLineRow):
        (WebInspector.TextEditorMainChunk.prototype.detachFromDOM):
        (WebInspector.TextEditorMainChunk.prototype.anchorElement):

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        [V8] WebCoreStringResourceBase should be located in V8StringResource.h
        https://bugs.webkit.org/show_bug.cgi?id=103002

        Reviewed by Adam Barth.

        Currently WebCoreStringResourceBase is mis-located in V8ValueCache.h.
        It should be in V8StringResource.h.

        No tests. No change in behavior.

        * bindings/v8/V8StringResource.cpp:
        (WebCore::WebCoreStringResourceBase::toWebCoreStringResourceBase):
        (WebCore):
        (WebCore::WebCoreStringResourceBase::visitStrings):
        * bindings/v8/V8StringResource.h:
        (WebCore):
        (WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::~WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::webcoreString):
        (WebCore::WebCoreStringResourceBase::atomicString):
        (WebCore::WebCoreStringResourceBase::memoryConsumption):
        (WebCoreStringResource16):
        (WebCore::WebCoreStringResource16::WebCoreStringResource16):
        (WebCoreStringResource8):
        (WebCore::WebCoreStringResource8::WebCoreStringResource8):
        * bindings/v8/V8ValueCache.cpp:
        * bindings/v8/V8ValueCache.h:
        (WebCore):

2012-11-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135464.
        http://trac.webkit.org/changeset/135464
        https://bugs.webkit.org/show_bug.cgi?id=103026

        breaks gtk bot (Requested by morrita on #webkit).

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

2012-11-21  Dan Carney  <dcarney@google.com>

        Remove V8DOMWindowShell::getEntered
        https://bugs.webkit.org/show_bug.cgi?id=96637

        Reviewed by Adam Barth.

        V8DOMWindowShell::getEntered was refactored so that the window shell
        no longer has to be kept alive by a v8 context. Instead, only
        the DOMWrapperWorld will be kept alive.

        No new tests. No change in functionality.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::isolatedWorldWeakCallback):
        (WebCore):
        (WebCore::DOMWrapperWorld::makeContextWeak):
        (WebCore::DOMWrapperWorld::setIsolatedWorldField):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::isolated):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::currentWorldContext):
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * bindings/v8/V8Binding.h:
        (WebCore::worldForEnteredContextIfIsolated):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::destroyIsolatedShell):
        (WebCore::V8DOMWindowShell::disposeContext):
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        * bindings/v8/V8PerContextData.h:
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2012-11-21  Cosmin Truta  <ctruta@rim.com>

        Numeric identifiers of events should not be globally sequential
        https://bugs.webkit.org/show_bug.cgi?id=102244

        Reviewed by Alexey Proskuryakov.

        The functions setTimeout, setInterval and navigator.geolocation.watchPosition
        are currently returning values that are unique across all JavaScript execution
        contexts, due to their dependency on global variables.
        Such a guarantee is unnecessarily strong. In this patch, we constrain uniqueness
        to these functions' own script execution context only.

        Tests: fast/dom/Geolocation/watchPosition-unique.html
               fast/dom/Window/setTimeout-setInterval-unique.html

        * Modules/geolocation/Geolocation.cpp:
        (WebCore): Remove firstAvailableWatchId.
        (WebCore::Geolocation::watchPosition): Get new watchID from script execution context.
        (WebCore::Geolocation::clearWatch): Invalid watchID means less than or equal to 0.
        * Modules/geolocation/Geolocation.h:
        (Geolocation): Renamed the argument of Geolocation::clearWatch to WatchID.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext): Update initialization.
        (WebCore::ScriptExecutionContext::newUniqueID): Add.
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext): Add m_sequentialID.
        (WebCore::ScriptExecutionContext::addTimeout): Inline.
        (WebCore::ScriptExecutionContext::removeTimeout): Inline.
        (WebCore::ScriptExecutionContext::findTimeout): Inline.
        * page/DOMTimer.cpp:
        (WebCore): Remove timeoutId.
        (WebCore::DOMTimer::DOMTimer): Get new timeoutId from script execution context.

2012-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        CollectionType and DynamicNodeList::NodeListType should be merged
        https://bugs.webkit.org/show_bug.cgi?id=102983

        Reviewed by Antti Koivisto.

        Merged DynamicNodeList::NodeListType (for live NodeList) into CollectionType.

        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::~ClassNodeList):
        * dom/Document.cpp:
        (WebCore::Document::registerNodeListCache):
        (WebCore::Document::unregisterNodeListCache):
        (WebCore::Document::getItems):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeListCacheBase::invalidateCache):
        (WebCore::DynamicNodeListCacheBase::invalidateIdNameCacheMaps):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeListCacheBase::DynamicNodeListCacheBase):
        (WebCore::DynamicNodeListCacheBase::hasIdNameCache): Added. Returns iff this is a HTMLCollection.
        (WebCore::DynamicNodeListCacheBase::invalidateCache):
        (WebCore::DynamicNodeList::DynamicNodeList):
        (WebCore::DynamicSubtreeNodeList::DynamicSubtreeNodeList):
        * dom/MicroDataItemList.cpp:
        (WebCore::MicroDataItemList::~MicroDataItemList):
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::~NameNodeList):
        * dom/Node.cpp:
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        (WebCore::Node::radioNodeList):
        (WebCore::Node::propertyNodeList):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCacheWithAtomicName): No longer converts CollectionType to
        a NodeListType equivalent since two enums have been merged.
        (WebCore::NodeListsNodeData::cacheWithAtomicName): Ditto.
        (WebCore::NodeListsNodeData::addCacheWithName): Ditto.
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName): Ditto.
        (WebCore::NodeListsNodeData::removeCacheWithName): Ditto.
        (WebCore::NodeListsNodeData::namedNodeListKey): Ignore types before FirstNodeCollectionType
        to minimize the hash conflicts.
        * dom/PropertyNodeList.cpp:
        (WebCore::PropertyNodeList::~PropertyNodeList):
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::~TagNodeList):
        * html/CollectionType.h:
        (WebCore::isNodeList): Added.
        * html/HTMLCollection.cpp:
        (WebCore::shouldOnlyIncludeDirectChildren):
        (WebCore::rootTypeFromCollectionType):
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::isAcceptableElement):
        (WebCore::DynamicNodeListCacheBase::iterateForNextNode):
        (WebCore::DynamicNodeListCacheBase::itemBeforeOrAfter):
        * html/LabelableElement.cpp:
        (WebCore::LabelableElement::labels):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::~LabelsNodeList):
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::~RadioNodeList):

2012-11-21  Michael Pruett  <michael@68k.org>

        IndexedDB: Obtain ScriptState from IDL binding generator
        https://bugs.webkit.org/show_bug.cgi?id=102552

        Reviewed by Kentaro Hara.

        Obtain ScriptState from IDL binding generator rather than directly
        calling ScriptState::current() since that method does not exist
        in JSC.

        Tests: storage/indexeddb/*

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl:

2012-11-21  Filip Pizlo  <fpizlo@apple.com>

        Rename dataLog() and dataLogV() to dataLogF() and dataLogFV()
        https://bugs.webkit.org/show_bug.cgi?id=103001

        Rubber stamped by Dan Bernstein.

        No change in behavior, so no new tests.

        * platform/KURLWTFURL.cpp:
        (WebCore::KURL::print):

2012-11-21  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] Refactor GraphicsContext3DEFL.
        https://bugs.webkit.org/show_bug.cgi?id=101291.

        Reviewed by Kenneth Rohde Christiansen.

        GraphicsContext3DEfl creates GraphicsContext3DPrivate, which acts as its platform Layer.
        GraphicsContext3DPrivate needs to handle the following cases:
        1) To provide an off-screen buffer for accelerated composition.
        2) Render to a current context.
        3) To render directly to host window. (currently not supported.)

        Before this patch Evas was used to provide us an off-screen context and buffer. GLX was used in
        the other supported case. Evas acts as a glue layer to provide us with appropriate
        GL bindings (OpenGL functions), GL context and drawable (surface/offscreenbuffer).
        However, primitive rendering is handled by TextureMapper and OpenGLShims is used to load the needed GL functions.

        It would be for our advantage to be able to take in to use any optimisations/extensions
        provided by underlying drivers, specific to a platform (e.g. GLX_MESA_copy_sub_buffer etc.).
        This patch introduces an abstraction layer to make it easy to add support for any GL backend (GLX, EGL etc.)
        and do any platform specific optimizations as needed without complicating GraphicsContext3DPrivate class.
        Two new classes are added with this implementation, GLPlatformContext and GLPlatformSurface.
        GraphicsContext3DPrivate would create and own a GLPlatformContext and GLPlatformSurface.

        GLPlatformContext encapsulates an OpenGL context hiding any platform specific management.
        It uses GL extension ARB_robustness (when available) to detect driver resets.
        It defines a simple interface for things that need to be handled by the context. Support
        for multi-threaded usage and shared context-group would be added later.

        GLPlatformSurface encapsulates an OpenGL drawable hiding any platform specific management.
        It defines a simple interface for things that need to be handled by the surface.
        It creates an off-screen rendering area. Any GLPlatformContext (compatible with the surface)
        can be used to render into this off-screen area.

        This patch also adds GLX implementation. To keep the patch to minimum EGL support would be added in another changeset.

        * PlatformEfl.cmake:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (GraphicsContext3DPrivate::releaseResources):
        (GraphicsContext3DPrivate::setContextLostCallback):
        (GraphicsContext3DPrivate::platformGraphicsContext3D):
        (GraphicsContext3DPrivate::makeContextCurrent):
        (GraphicsContext3DPrivate::createGraphicsSurfaces):
        (GraphicsContext3DPrivate::copyToGraphicsSurface):
        (GraphicsContext3DPrivate::graphicsSurfaceToken):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/opengl/GLDefs.h: Added.
        (WebCore):
        * platform/graphics/opengl/GLPlatformContext.cpp: Added.
        (WebCore):
        (WebCore::GLPlatformContext::createContext):
        (WebCore::GLPlatformContext::createOffScreenContext):
        (WebCore::GLPlatformContext::createCurrentContextWrapper):
        (WebCore::GLPlatformContext::GLPlatformContext):
        (WebCore::GLPlatformContext::~GLPlatformContext):
        (WebCore::GLPlatformContext::makeCurrent):
        (WebCore::GLPlatformContext::isValid):
        (WebCore::GLPlatformContext::releaseCurrent):
        (WebCore::GLPlatformContext::handle):
        (WebCore::GLPlatformContext::isCurrentContext):
        (WebCore::GLPlatformContext::initialize):
        (WebCore::GLPlatformContext::getCurrent):
        (WebCore::GLPlatformContext::platformMakeCurrent):
        (WebCore::GLPlatformContext::platformReleaseCurrent):
        (WebCore::GLPlatformContext::destroy):
        * platform/graphics/opengl/GLPlatformContext.h: Added.
        (WebCore):
        (GLPlatformContext):
        * platform/graphics/opengl/GLPlatformSurface.cpp: Added.
        (WebCore):
        (WebCore::GLPlatformSurface::createOffscreenSurface):
        (WebCore::GLPlatformSurface::createTransportSurface):
        (WebCore::GLPlatformSurface::GLPlatformSurface):
        (WebCore::GLPlatformSurface::~GLPlatformSurface):
        (WebCore::GLPlatformSurface::handle):
        (WebCore::GLPlatformSurface::geometry):
        (WebCore::GLPlatformSurface::sharedDisplay):
        (WebCore::GLPlatformSurface::configuration):
        (WebCore::GLPlatformSurface::swapBuffers):
        (WebCore::GLPlatformSurface::copyTexture):
        (WebCore::GLPlatformSurface::updateContents):
        (WebCore::GLPlatformSurface::setGeometry):
        (WebCore::GLPlatformSurface::destroy):
        * platform/graphics/opengl/GLPlatformSurface.h: Added.
        (WebCore):
        (GLPlatformSurface):
            GLXOffScreenContext creates an off-screen context. This is used when
            renderstyle is RenderOffscreen.
            It uses GL extension GLX_ARB_create_context (when available)
            to create a context else falls back to use glXCreateNewContext.
        * platform/graphics/surfaces/glx/GLXContext.cpp: Added.
        (WebCore):
        (WebCore::initializeARBExtensions):
        (WebCore::GLXOffScreenContext::GLXOffScreenContext):
        (WebCore::GLXOffScreenContext::initialize):
        (WebCore::GLXOffScreenContext::~GLXOffScreenContext):
        (WebCore::GLXOffScreenContext::isCurrentContext):
        (WebCore::GLXOffScreenContext::platformMakeCurrent):
        (WebCore::GLXOffScreenContext::platformReleaseCurrent):
        (WebCore::GLXOffScreenContext::freeResources):
        (WebCore::GLXOffScreenContext::destroy):
            GLXCurrentContextWrapper acts as a wrapper for current context.
            This is used when renderstyle is RenderToCurrentGLContext.
        * platform/graphics/surfaces/glx/GLXContext.h: Added.
        (WebCore):
        (GLXCurrentContextWrapper):
        (WebCore::GLXCurrentContextWrapper::GLXCurrentContextWrapper):
        (WebCore::GLXCurrentContextWrapper::~GLXCurrentContextWrapper):
        (GLXOffScreenContext):
        * platform/graphics/surfaces/glx/GLXSurface.cpp: Added.
        (WebCore):
        (WebCore::GLXSurface::GLXSurface):
        (WebCore::GLXSurface::~GLXSurface):
        (WebCore::GLXSurface::visualInfo):
        (WebCore::GLXSurface::xWindow):
        (WebCore::GLXSurface::pBufferConfiguration):
        (WebCore::GLXSurface::transportSurfaceConfiguration):
        (WebCore::GLXSurface::isXRenderExtensionSupported):
            GLXTransportSurface creates Window and uses it as an off-screen surface.
            Any GLContext that was created with respect to configuration can be used
            to render into this.
            This is used when contents of the buffer are to be provided to UI Process
            for display.
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXTransportSurface::~GLXTransportSurface):
        (WebCore::GLXTransportSurface::configuration):
        (WebCore::GLXTransportSurface::swapBuffers):
        (WebCore::GLXTransportSurface::setGeometry):
        (WebCore::GLXTransportSurface::initialize):
        (WebCore::GLXTransportSurface::destroy):
        (WebCore::GLXTransportSurface::freeResources):
           GLXPBuffer, Creates a GL surface (PBuffer) used for offscreen rendering.
           Any GLContext that was created with respect to configuration can be used
           to render into this.
        (WebCore::GLXPBuffer::GLXPBuffer):
        (WebCore::GLXPBuffer::~GLXPBuffer):
        (WebCore::GLXPBuffer::initialize):
        (WebCore::GLXPBuffer::configuration):
        (WebCore::GLXPBuffer::destroy):
        (WebCore::GLXPBuffer::freeResources):
        * platform/graphics/surfaces/glx/GLXSurface.h: Added.
        (WebCore):
            Creates X resources which are shared between surface and context.
        (SharedX11Resources):
        (WebCore::SharedX11Resources::create):
        (WebCore::SharedX11Resources::deref):
        (WebCore::SharedX11Resources::getXWindow):
        (WebCore::SharedX11Resources::display):
        (WebCore::SharedX11Resources::visualInfo):
        (WebCore::SharedX11Resources::createConfig):
        (WebCore::SharedX11Resources::pBufferContextConfig):
        (WebCore::SharedX11Resources::surfaceContextConfig):
        (WebCore::SharedX11Resources::isXRenderExtensionSupported):
        (WebCore::SharedX11Resources::SharedX11Resources):
        (WebCore::SharedX11Resources::~SharedX11Resources):
        (GLXSurface):
        (GLXTransportSurface):
        (GLXPBuffer):

2012-11-21  Andreas Kling  <akling@apple.com>

        Re-virtualize CSSRule.
        <http://webkit.org/b/103003>

        Reviewed by Anders Carlsson.

        Make CSSRule virtual once again, since it's no longer important to keep it as small as possible.
        StyleRuleBase and its various subclasses are the relevant ones now.

        * css/CSSCharsetRule.cpp:
        (WebCore::CSSCharsetRule::CSSCharsetRule):
        (WebCore::CSSCharsetRule::reportMemoryUsage):
        * css/CSSCharsetRule.h:
        (WebCore::CSSCharsetRule::~CSSCharsetRule):
        (WebCore::CSSCharsetRule::encoding):
        (WebCore::CSSCharsetRule::setEncoding):
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::CSSFontFaceRule):
        (WebCore::CSSFontFaceRule::reattach):
        (WebCore::CSSFontFaceRule::reportMemoryUsage):
        * css/CSSFontFaceRule.h:
        (CSSFontFaceRule):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::CSSImportRule):
        (WebCore::CSSImportRule::reportMemoryUsage):
        (WebCore::CSSImportRule::reattach):
        (WebCore):
        * css/CSSImportRule.h:
        (CSSImportRule):
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):
        (WebCore::CSSMediaRule::reattach):
        (WebCore::CSSMediaRule::reportMemoryUsage):
        * css/CSSMediaRule.h:
        (CSSMediaRule):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        (WebCore::CSSPageRule::reattach):
        (WebCore::CSSPageRule::reportMemoryUsage):
        * css/CSSPageRule.h:
        (CSSPageRule):
        * css/CSSRule.cpp:
        (SameSizeAsCSSRule):
        (WebCore::CSSRule::reportMemoryUsage):
        * css/CSSRule.h:
        (WebCore::CSSRule::~CSSRule):
        (CSSRule):
        (WebCore::CSSRule::CSSRule):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        (WebCore::CSSStyleRule::reattach):
        (WebCore::CSSStyleRule::reportMemoryUsage):
        * css/CSSStyleRule.h:
        (CSSStyleRule):
        (WebCore::CSSStyleRule::type):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::rules):
        * css/CSSUnknownRule.h:
        (WebCore::CSSUnknownRule::CSSUnknownRule):
        (WebCore::CSSUnknownRule::~CSSUnknownRule):
        * css/StyleResolver.cpp:
        (WebCore::collectCSSOMWrappers):
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::WebKitCSSKeyframeRule):
        (WebCore::WebKitCSSKeyframeRule::reportMemoryUsage):
        (WebCore::WebKitCSSKeyframeRule::reattach):
        (WebCore):
        * css/WebKitCSSKeyframeRule.h:
        (WebKitCSSKeyframeRule):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::WebKitCSSKeyframesRule):
        (WebCore::WebKitCSSKeyframesRule::reattach):
        (WebCore::WebKitCSSKeyframesRule::reportMemoryUsage):
        * css/WebKitCSSKeyframesRule.h:
        (WebKitCSSKeyframesRule):
        * css/WebKitCSSRegionRule.cpp:
        (WebCore::WebKitCSSRegionRule::WebKitCSSRegionRule):
        (WebCore::WebKitCSSRegionRule::reattach):
        (WebCore::WebKitCSSRegionRule::reportMemoryUsage):
        * css/WebKitCSSRegionRule.h:
        (WebKitCSSRegionRule):
        * css/WebKitCSSViewportRule.cpp:
        (WebCore::WebKitCSSViewportRule::WebKitCSSViewportRule):
        (WebCore::WebKitCSSViewportRule::reattach):
        (WebCore::WebKitCSSViewportRule::reportMemoryUsage):
        * css/WebKitCSSViewportRule.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::asCSSStyleRule):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::fillMediaListChain):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeCSSStyleSheet):

2012-11-21  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Implement Element::createShadowRoot()
        https://bugs.webkit.org/show_bug.cgi?id=102911

        Reviewed by Kentaro Hara.

        Added an API implementation and exposed it.

        This is basically an alias of the ShadowRoot constructor, which
        will be removed as bug 102913.

        Test: fast/dom/shadow/shadow-aware-create-shdow-root.html

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

2012-11-20  James Simonsen  <simonjam@chromium.org>

        [Resource Timing] Populate PerformanceResourceTiming structs with timing data
        https://bugs.webkit.org/show_bug.cgi?id=102862

        Reviewed by Tony Gentilcore.

        This allows CachedResourceLoader to pass in all of the necessary values and populates
        them in the PerformanceResourceTiming struct. A follow up patch will actually call
        addResourceTiming() as necessary.

        Tests: http/tests/w3c/webperf/submission/resource-timing

        * page/Performance.cpp:
        (WebCore::Performance::addResourceTiming): Accept all necessary timing data.
        * page/Performance.h:
        (WebCore):
        (Performance):
        * page/PerformanceEntry.cpp:
        (WebCore::PerformanceEntry::PerformanceEntry):
        * page/PerformanceEntry.h:
        (PerformanceEntry):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::monotonicTimeToDocumentMilliseconds):
        (WebCore):
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::initiatorType): Return the spec'd values.
        (WebCore::PerformanceResourceTiming::fetchStart):
        (WebCore::PerformanceResourceTiming::domainLookupStart):
        (WebCore::PerformanceResourceTiming::domainLookupEnd):
        (WebCore::PerformanceResourceTiming::connectStart):
        (WebCore::PerformanceResourceTiming::connectEnd):
        (WebCore::PerformanceResourceTiming::secureConnectionStart):
        (WebCore::PerformanceResourceTiming::requestStart):
        (WebCore::PerformanceResourceTiming::responseStart):
        (WebCore::PerformanceResourceTiming::responseEnd):
        (WebCore::PerformanceResourceTiming::resourceTimeToDocumentMilliseconds):
        * page/PerformanceResourceTiming.h:
        (WebCore::PerformanceResourceTiming::create):
        (PerformanceResourceTiming):

2012-11-21  Hajime Morrita  <morrita@google.com>

        [Shadow DOM][V8] Assertion failure when shadow host is reclaimed before ShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=102893

        Reviewed by Kentaro Hara.

        Due to bug 88834, shadow hosts can be reclaimed before
        corresponding ShadowRoots are.  This breaks an invariant, that is,
        the host is always available for any ShadowRoot.  This change adds
        guards for the possibly broken invariant.

        Since bug 88834 is planned to be fixed shortly, this change
        doesn't aim to fix this problem by make it work correctly, but
        just lays a safety net which is needed until the root cause is
        gone.

        Test: fast/dom/shadow/host-wrapper-reclaimed.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::setInnerHTML):
        (WebCore::ShadowRoot::setApplyAuthorStyles):
        (WebCore::ShadowRoot::setResetStyleInheritance):
        (WebCore::ShadowRoot::childrenChanged):

2012-11-21  Dirk Schulze  <krit@webkit.org>

        Make CachedSVGDocumentReference independent of FilterOperation
        https://bugs.webkit.org/show_bug.cgi?id=102967

        Reviewed by Antti Koivisto.

        Make CachedSVGDocumentReference independent of FilterOperation to reuse the code for clip-path and masking.

        No new tests, refactoring.

        * GNUmakefile.list.am: Move CachedSVGDocumentReference to it's proper location and it to the projects. 
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::createFilterOperations):
        * loader/cache/CachedSVGDocumentReference.h: Renamed from Source/WebCore/css/CachedSVGDocumentReference.h.
        (WebCore):
        (CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::document):
        * platform/graphics/filters/FilterOperation.h: Rename data() and setData() to
            cachedSVGDocumentReference() and its setter. Adapt other classes.
        (WebCore::FilterOperation::ReferenceFilterOperation::cachedSVGDocumentReference):
        (WebCore::FilterOperation::ReferenceFilterOperation::setCachedSVGDocumentReference):
        (ReferenceFilterOperation):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayerFilterInfo::updateReferenceFilterClients):

2012-11-21  James Simonsen  <simonjam@chromium.org>

        Remove the concept of initiatorDocument from CachedResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=102855

        Reviewed by Sam Weinig.

        It turns out this isn't necessary for the new implementation of Resource Timing. Instead,
        we can get at it from the CachedResourceLoader. I don't think anyone else needed it either.

        No new tests. This was never used.

        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cachedImageSet):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * css/WebKitCSSSVGDocumentValue.cpp:
        (WebCore::WebKitCSSSVGDocumentValue::load):
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::cachedShader):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::PreloadTask::preload):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setInitiator):
        * loader/cache/CachedResourceRequest.h:
        (CachedResourceRequest):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):

2012-11-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135437.
        http://trac.webkit.org/changeset/135437
        https://bugs.webkit.org/show_bug.cgi?id=102986

        This patch causes crash to some layout tests (Requested by
        jianli on #webkit).

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::createRendererIfNeeded):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):

2012-11-21  Andreas Kling  <akling@apple.com>

        Style sharing: Compare class lists via SpaceSplitString instead of string comparison.
        <http://webkit.org/b/102982>

        Reviewed by Antti Koivisto.

        Add an operator!= to SpaceSplitString and use that check if two elements are eligible
        for style sharing instead of comparing the fastGetAttribute(classAttr) return values.
        This works because SpaceSplitString maps equal strings to the same data internally.

        * css/StyleResolver.cpp:
        (WebCore::haveIdenticalStyleAffectingAttributes):
        * dom/SpaceSplitString.h:
        (WebCore::SpaceSplitString::operator!=):
        (SpaceSplitString):

2012-11-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135338, r135359, and r135378.
        http://trac.webkit.org/changeset/135338
        http://trac.webkit.org/changeset/135359
        http://trac.webkit.org/changeset/135378
        https://bugs.webkit.org/show_bug.cgi?id=102981

        Likely caused a 10% regression in
        dromaeo_domcoreattr/dom_attr_getAttribute (Requested by abarth
        on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateEventConstructorCallback):
        (ConvertToV8Parameter):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::staticStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::voidMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::longMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsUndefinedCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsNullStringCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        (WebCore::TestObjV8Internal::overloadedMethod3Callback):
        (WebCore::TestObjV8Internal::overloadedMethod11Callback):
        (WebCore::TestObjV8Internal::overloadedMethod12Callback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        (WebCore::TestObjV8Internal::variadicStringMethodCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructor4Callback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/v8/V8BindingMacros.h:
        * bindings/v8/V8StringResource.h:
        (WebCore::V8Parameter::V8Parameter):
        (V8Parameter):
        (WebCore::V8Parameter::prepareBase):
        (WebCore::V8Parameter::object):
        (WebCore::::prepare):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::profileCallback):
        (WebCore::V8Console::profileEndCallback):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8IntentCustom.cpp:
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):

2012-11-21  Tien-Ren Chen  <trchen@chromium.org>

        Invalidate non-composited content host when page scale factor changes
        https://bugs.webkit.org/show_bug.cgi?id=100718

        Reviewed by Adam Barth.

        During a scale change, non-composited content layer doesn't get invalidated
        automatically by the transformation change on RenderView. Need to force
        update non-composited contents ourself.

        Test: compositing/repaint/page-scale-repaint.html

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

2012-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another EFL & GTK+ build fix after r135429.

        * html/HTMLPropertiesCollection.cpp:
        (WebCore::HTMLPropertiesCollection::create):

2012-11-21  Elliott Sprehn  <esprehn@chromium.org>

        Node::createRenderer should never return null
        https://bugs.webkit.org/show_bug.cgi?id=102975

        Reviewed by Ojan Vafai.

        Node::createRenderer should never return null, instead Node::rendererIsNeeded
        should return false if a node doesn't wish to have a renderer. This method
        never actually returns null right now, but the code makes it look like it
        could.

        No new tests, just refactoring.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::createRendererIfNeeded):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):

2012-11-21  Fady Samuel  <fsamuel@chromium.org>

        Clear MousePressed state on context menu to avoid initiating a drag
        https://bugs.webkit.org/show_bug.cgi?id=101786

        Reviewed by Ojan Vafai.

        If a user initiates a drag via left mouse down, brings up the context menu,
        and then cancels the context menu while keeping the left mouse button down,
        then the drag operation will continue. This does not match the platform
        conventions on Windows, Linux or Mac .

        This change cancels the drag if the context menu is about to be displayed.

        Test: fast/events/context-nodrag.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):

2012-11-21  Patrick Gansterer  <paroga@webkit.org>

        Use MIMETypeRegistryWin for WinCE port too
        https://bugs.webkit.org/show_bug.cgi?id=102977

        Reviewed by Laszlo Gombos.

        r135217 made MIMETypeRegistryWin compile on WinCE too,
        which allows us to get rid of MIMETypeRegistryWinCE.

        * PlatformWinCE.cmake:
        * WebCore.gypi:
        * platform/wince/MIMETypeRegistryWinCE.cpp: Removed.

2012-11-21  Dan Carney  <dcarney@google.com>

        [V8] Add context checks to WorldContextHandle and V8DOMWindowShell
        https://bugs.webkit.org/show_bug.cgi?id=101573

        Reviewed by Adam Barth.

        Added a bunch of assertions to ensure the problems with IndexedDB
        contexts cannot reemerge.

        No new tests. No change in functionality.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore):
        (WebCore::V8DOMWindowShell::assertContextHasCorrectPrototype):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        (WebCore::V8DOMWindowShell::isolated):
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2012-11-21  Elliott Sprehn  <esprehn@chromium.org>

        Remove unnecessary ternaries in createRendererIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=102974

        Reviewed by Ojan Vafai.

        parentRenderer, nextRenderer and previousRenderer all handle flow
        threads automatically so there's no reason to duplicate the check in 
        createRendererIfNeeded.

        Note that while these methods first check the node for a renderer and
        then delegate to the flow thread the node never has a renderer when
        calling createRendererIfNeeded per the assertion at the top so this
        change is equivalent.

        No new tests, just refactoring.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::createRendererIfNeeded):

2012-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        EFL and GTK+ build fix after r135429.

        * dom/Element.cpp:
        (WebCore::ElementRareData::ensureCachedHTMLCollection):

2012-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLCollection should use the same storage as DynamicNodeList
        https://bugs.webkit.org/show_bug.cgi?id=102886

        Reviewed by Antti Koivisto.

        This patch removes ElementRareData::m_collection. HTMLCollections are now held by
        NodeListNodeData in NodeRareData like DynamicNodeLists. This simplifies several
        Element and Node functions where we used to call into both ElementRareData and
        NodeRareData to invalidate caches.

        This is a refactoring and there should be no behavioral change.

        * dom/DynamicNodeList.h:
        * dom/Element.cpp:
        (WebCore::ElementRareData::ensureCachedHTMLCollection):
        * dom/ElementRareData.cpp:
        (WebCore::ElementRareData::reportMemoryUsage):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::cachedHTMLCollection):
        (WebCore::ElementRareData::removeCachedHTMLCollection):
        * dom/Node.cpp:
        (WebCore::Node::invalidateNodeListCachesInAncestors):
        * dom/NodeRareData.h:
        (NodeListsNodeData):
        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::cacheWithAtomicName):
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName):
        (WebCore::NodeListsNodeData::adoptTreeScope):
        (WebCore::NodeListsNodeData::namedNodeListKey):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::create):
        * html/HTMLFormControlsCollection.h:
        (HTMLFormControlsCollection):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::create):
        * html/HTMLOptionsCollection.h:
        (HTMLOptionsCollection::create):
        * html/HTMLPropertiesCollection.h:
        (HTMLPropertiesCollection::create):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::create):
        * html/HTMLTableRowsCollection.h:
        (HTMLTableRowsCollection):

2012-11-21  Andreas Kling  <akling@apple.com>

        Update incorrect assertion in ImmutableElementAttributeData(MutableElementAttributeData).
        <http://webkit.org/b/102972>

        Reviewed by Antti Koivisto.

        Manipulation by editing code may cause an element to have mutable inline style, and this is fine.

        Change the assertion to confirm that the inline style doesn't have a CSSOM wrapper attached,
        which is where real problems would happen. 

        Fixes an assertion on editing/undo/replace-by-span-then-remove.html

        * dom/ElementAttributeData.cpp:
        (WebCore::ImmutableElementAttributeData::ImmutableElementAttributeData):

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        Remove $outputDir and $outputHeadersDir from global variables of code generators
        https://bugs.webkit.org/show_bug.cgi?id=102492

        Reviewed by Adam Barth.

        $outputDir and $outputHeadersDir are used in WriteData() only.
        We don't need to use global variables for them.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        (FileNamePrefix):
        * bindings/scripts/CodeGeneratorCPP.pm:
        (new):
        (GenerateInterface):
        (WriteData):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (new):
        (WriteData):
        (GenerateInterface):
        * bindings/scripts/CodeGeneratorJS.pm:
        (new):
        (GenerateInterface):
        (WriteData):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (new):
        (GenerateInterface):
        (WriteData):
        * bindings/scripts/CodeGeneratorV8.pm:
        (new):
        (GenerateInterface):
        (WriteData):

2012-11-21  Joshua Bell  <jsbell@chromium.org>

        Remove IDBDatabaseException
        https://bugs.webkit.org/show_bug.cgi?id=102514

        Reviewed by Adam Barth.

        After the WebKit implementation landed, the IndexedDB spec changed from defining new
        exception codes with constants hanging off an interface to using DOM4-styled named
        DOMExceptions. Remove the IDBDatabaseException interface and set codes for IDB-specific
        exceptions to 0. (The .idl file is retained pending general ExceptionCode cleanup.)

        Also remove IDBRequest.errorCode which was used for reporting asynchronous errors;
        IDBRequest.error - a DOMError - should be used instead.

        No new tests - covered by plenty of existing tests which have been updated.

        * Modules/indexeddb/DOMWindowIndexedDatabase.idl: Don't expose the interface.
        * Modules/indexeddb/IDBCursor.idl: Remove reference to IDBDatabaseException.
        * Modules/indexeddb/IDBDatabase.idl: Ditto.
        * Modules/indexeddb/IDBDatabaseException.cpp:
        (IDBDatabaseExceptionNameDescription): Use either a DOMException code or 0.
        (WebCore::IDBDatabaseException::initializeDescription):
        (WebCore::IDBDatabaseException::getLegacyErrorCode):
        * Modules/indexeddb/IDBFactory.idl: Remove reference to IDBDatabaseException.
        * Modules/indexeddb/IDBIndex.idl: Ditto.
        * Modules/indexeddb/IDBKeyRange.idl: Ditto.
        * Modules/indexeddb/IDBObjectStore.idl: Ditto.
        * Modules/indexeddb/IDBRequest.idl: Ditto.
        * Modules/indexeddb/IDBTransaction.idl: Ditto.
        * Modules/indexeddb/WorkerContextIndexedDatabase.idl: Don't expose the interface.
        * bindings/v8/IDBBindingUtilities.cpp: Remove unneeded #include.

2012-11-21  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Fix indenting in RenderThemeChromiumSkia.h.
        https://bugs.webkit.org/show_bug.cgi?id=102965

        Reviewed by Adam Barth.

        Much of RenderThemeChromiumSkia.h was indented too far, making the
        file confusing to read. This CL removes the extra indents.

        * rendering/RenderThemeChromiumSkia.h:
        (RenderThemeChromiumSkia):

2012-11-21  Andreas Kling  <akling@apple.com>

        Make it possible for elements with different tag names to share attribute data.
        <http://webkit.org/b/102845>

        Reviewed by Antti Koivisto.

        Allow all elements to share ElementAttributeData with one another. This means that the elements
        in this hypothetical markup will all point to the same attribute data:

            <div class="foo">
                <span class="foo">
                    <hr class="foo"/>
                </span>
            </div>

        This optimization happens at the expense of an old one. We no longer share attribute data
        between elements that have presentation attributes, since they map to different CSS properties
        depending on what tag they're attached to. These are mostly used in ye olde web 1.0 content
        though, and we should prefer optimizing in favor of modern markup. The global cache for
        presentation attribute style in StyledElement.cpp still prevents redundant parsing.

        On the upside, excluding elements with presentation attributes from the data cache means that
        we can move one pointer (m_presentationAttributeStyle) from ImmutableElementAttributeData
        to MutableElementAttributeData.

        800kB progression on Membuster3.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::ImmutableAttributeDataCacheKey::ImmutableAttributeDataCacheKey):
        (WebCore::ImmutableAttributeDataCacheKey::operator!=):
        (WebCore::ImmutableAttributeDataCacheKey::hash):
        (ImmutableAttributeDataCacheKey):
        (WebCore::Document::cachedImmutableAttributeData):
        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):

            Don't use the element's tag name in the key for the immutable attribute data cache.

        (WebCore::Element::cloneAttributesFromElement):

            Prevent cloneNode() from converting mutable attribute data to immutable if it has
            presentation attributes.

        * dom/ElementAttributeData.cpp:
        (WebCore::ImmutableElementAttributeData::ImmutableElementAttributeData):

            Add an assertion that mutable-to-immutable conversion never happens with presentation
            attribute style present.

        (WebCore::ElementAttributeData::ElementAttributeData):
        (WebCore::MutableElementAttributeData::MutableElementAttributeData):
        (WebCore::ElementAttributeData::reportMemoryUsage):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        (MutableElementAttributeData):
        (WebCore::ElementAttributeData::presentationAttributeStyle):
        (WebCore):
        (WebCore::ElementAttributeData::setPresentationAttributeStyle):

            Move the RefPtr<StylePropertySet> that holds presentation attribute-derived style
            from the common ElementAttributeData base class to MutableElementAttributeData.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):

            Always dirty the presentation attribute style when a presentation attribute changes.

        (WebCore::StyledElement::rebuildPresentationAttributeStyle):

            Force promotion to mutable attribute data when it turns out that we need to hang a
            StylePropertySet with the presentation attribute style off of it.

2012-11-21  Antti Koivisto  <antti@apple.com>

        Replace NodeRendererFactory class with a function
        https://bugs.webkit.org/show_bug.cgi?id=102950

        Reviewed by Andreas Kling.

        Simplify the code by turning NodeRendererFactory single-use class into function of NodeRenderingContext.

        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::NodeRenderingContext):
        (WebCore):
        (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
        (WebCore::NodeRenderingContext::createRendererIfNeeded):
        * dom/NodeRenderingContext.h:
        (NodeRenderingContext):
        (WebCore::NodeRenderingContext::style):
        (WebCore):

2012-11-21  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Change default tap highlight color for Chromium Windows & Linux.
        https://bugs.webkit.org/show_bug.cgi?id=102939

        Reviewed by Adam Barth.

        Change default tap highlight colour on Chromium Win/Linux to be 18% black.

        * rendering/RenderThemeChromiumSkia.h:
        (RenderThemeChromiumSkia): Override platformTapHighlightColor() to change default highlight colour.

2012-11-21  Tony Chang  <tony@chromium.org>

        Relayout the slider track when a data list is set
        https://bugs.webkit.org/show_bug.cgi?id=102851

        Reviewed by Ojan Vafai.

        Previously, we would relayout the <input>.  Once we fix bug 102352, this
        causes the slider track to not relayout.  It should relayout because it
        draws the data list tick marks and needs to provide space for them.

        No new tests, not testable until bug 102352 is fixed. Specifically,
        fast/forms/datalist/update-range-with-datalist.html reveals the bug.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::listAttributeTargetChanged):

2012-11-21  Kevin Ellis  <kevers@chromium.org>

        [chromium] Add flag to enable/disable touch adjustment at runtime.
        https://bugs.webkit.org/show_bug.cgi?id=102534

        Reviewed by Antonio Gomes.

        Add setting for enabling or disabling touch adjustment.  Note that for
        touch adjustment to apply, the compile flag must also be enabled.  A
        compile only option is insufficient as it does not allow developers to
        quickly test the impact of touch adjustemnt without recompiling.  Nor
        does it allow end users to disable touch adjustemnt if they find that
        touch adjustment is not working well for a particular site.

        No new tests required.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent): Move enable check to adjustGesturePosition.
        (WebCore::EventHandler::handleGestureTap): Move enable check to adjustGesturePosition.
        (WebCore::EventHandler::shouldApplyTouchAdjustment): Checks if touch adjustment is enabled.
        (WebCore):
        (WebCore::EventHandler::adjustGesturePosition): Add check for enabling of touch adjustment.
        (WebCore::EventHandler::sendContextMenuEventForGesture): Move enable check to adjustGesturePosition.
        * page/EventHandler.h:
        (EventHandler):
        * page/Settings.in:

2012-11-21  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, build fix after r135410.

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::addCue): Prevent unused parameter error.

2012-11-21  Andrey Lushnikov  <lushnikov@chromium.com>

        Web Inspector: Ctrl+A closes breakpoint condition editor
        https://bugs.webkit.org/show_bug.cgi?id=102906

        Reviewed by Pavel Feldman.

        Check if e.target has no ancestors with className
        "webkit-line-decorations" in DefaultTextEditor._handleKeyDown

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype._handleKeyDown): Add check

2012-11-21  Tom Hudson  <tomhudson@chromium.org>

        Avoid creating degenerate cubics at corners of rounded rects.
        https://bugs.webkit.org/show_bug.cgi?id=102945

        Reviewed by Stephen White.

        Covered by existing layout tests.

        * platform/graphics/Path.cpp:
        (Path::addBeziersForRoundedRect):

2012-11-21  Eric Carlson  <eric.carlson@apple.com>

        In-band text tracks infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=102830

        Reviewed by Philippe Normand.

        Add the infrastructure necessary to allow a port-specific media engine to expose in-band text
        tracks.

        No new tests, this patch only adds plumbing. Existing tests verify that these changes don't
        break existing functionality.

        * CMakeLists.txt: Add new project files.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Call processInbandTextTracks when readyState reaches
            HAVE_METADATA
        (WebCore::HTMLMediaElement::processInbandTextTracks): Fetch the in-band text tracks from the 
            media player and processes them.
        * html/HTMLMediaElement.h:

        * html/track/InbandTextTrack.cpp: Added.
        * html/track/InbandTextTrack.h: Added.
        * html/track/InbandTextTrackPrivate.h: Added.

        * html/track/TextTrack.h:
        (TextTrack):
        (WebCore::TextTrack::clearClient): Remove virtual, it is unnecessary
        (WebCore::TextTrack::mode): Make virtual so derived classes can override.
        (WebCore::TextTrack::setMode): Ditto.

        * html/track/TextTrackList.cpp:
        (TextTrackList::length): Update to deal with in-band tracks.
        (TextTrackList::getTrackIndex): Ditto.
        (TextTrackList::getTrackIndexRelativeToRenderedTracks): Ditto.
        (TextTrackList::item): Ditto.
        (TextTrackList::invalidateTrackIndexesAfterTrack): New, invalidate the cached track indexes of
            all tracks after another.
        (TextTrackList::append): Update to deal with in-band tracks.
        (TextTrackList::remove): Update to deal with in-band tracks.
        (TextTrackList::scheduleAddTrackEvent): Remove typo.
        * html/track/TextTrackList.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::getTextTracks): New, pass through to the media engine.
        (WebCore::MediaPlayer::setTextTrackClient):
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPreload): Cleanup.
        (WebCore::MediaPlayerPrivateInterface::sourceEndOfStream): Ditto.
        (WebCore::MediaPlayerPrivateInterface::getTextTracks): New client method.
        (WebCore::MediaPlayerPrivateInterface::setTextTrackClient): Ditto.

2012-11-21  Kai Koehne  <kai.koehne@digia.com>

        [Qt] MinGW: Explicitly add OpenGL library dependencies
        https://bugs.webkit.org/show_bug.cgi?id=102924

        Reviewed by Simon Hausmann.

        Adding the dependencies to WebKit1 is too late, because linking will have already failed. Also make sure that 
        the we link against OpenGLES1 e.g. for Angle.

        * WebCore.pri:

2012-11-21  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Disambiguate innerNodeFramePoint and mainFramePoint
        https://bugs.webkit.org/show_bug.cgi?id=98139

        Reviewed by Julien Chaffraix.

        Splits the point() method in HitTestResult into two, innerNodeFramePoint and mainFramePoint().
        To do this HitTestResult no longer inherits publically from HitTestLocation, which should also
        help to later separate the two classes completely.

        Many of the call-sites of hitTestResultAtPoint confuses which coordinates the point is in.
        These have not have been fixed in this patch, and they should be audited by the individual ports.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::nodesFromRect):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::hitTestResultAtPoint):
            Set and maintain pointInMainFrame on the HitTestResult.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
            Construct pointInMainFrame as a copy of pointInInnerNodeFrame. This is correct
            for all hit-tests outside of the recursion in EventHandler::hitTestResultAtPoint.
        (WebCore::HitTestResult::operator=):
        (WebCore::HitTestResult::innerNodeFrame):
        (WebCore::HitTestResult::append):
        * rendering/HitTestResult.h:
        (WebCore::HitTestLocation::point):
        (HitTestResult):
            Inherits protected now from HitTestLocation to avoid exposing the ambiguous
            point() and roundedPoint() methods. 
            HitTestResult will be split completely from HitTestLocation in a later patch.
        (WebCore::HitTestResult::isRectBasedTest):
        (WebCore::HitTestResult::pointInMainFrame):
        (WebCore::HitTestResult::roundedPointInMainFrame):
        (WebCore::HitTestResult::setPointInMainFrame):
        (WebCore::HitTestResult::pointInInnerNodeFrame):
        (WebCore::HitTestResult::roundedPointInInnerNodeFrame):
        (WebCore::HitTestResult::localPoint):
        (WebCore::HitTestResult::setLocalPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):

2012-11-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135383.
        http://trac.webkit.org/changeset/135383
        https://bugs.webkit.org/show_bug.cgi?id=102935

        IDBRequestTest.* unit tests are failing (Requested by yurys on
        #webkit).

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        (WebCore::V8DOMWindowShell::isolated):
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2012-11-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Support Context Menu
        https://bugs.webkit.org/show_bug.cgi?id=96200

        Reviewed by Laszlo Gombos.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        EFL port also doesn't hide unavailable menus as gtk port.

2012-11-21  Florin Malita  <fmalita@chromium.org>

        [Chromium] Unreviewed Mac build fix after http://trac.webkit.org/changeset/135390.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::drawInnerPath):

2012-11-21  Florin Malita  <fmalita@chromium.org>

        [Skia] Encapsulate access to PlatformContextSkia's SkCanvas
        https://bugs.webkit.org/show_bug.cgi?id=102694

        Reviewed by Stephen White.

        Add SkCanvas-equivalent methods to PlatformContextSkia, and refactor direct canvas call
        sites to use these wrappers instead. This reduces the number of canvas() users from 90+
        to 22 (mostly theme/ui code).

        No new tests: refactoring only.

        * platform/chromium/PlatformThemeChromiumLinux.cpp:
        (WebCore::PlatformThemeChromiumLinux::paintArrowButton):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::computeLayerSize):
        (WebCore::TransparencyWin::compositeOpaqueComposite):
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/filters/skia/FEBlendSkia.cpp:
        (WebCore::FEBlend::platformApplySkia):
        * platform/graphics/filters/skia/FEColorMatrixSkia.cpp:
        (WebCore::FEColorMatrix::platformApplySkia):
        * platform/graphics/filters/skia/FEComponentTransferSkia.cpp:
        (WebCore::FEComponentTransfer::platformApplySkia):
        * platform/graphics/filters/skia/FELightingSkia.cpp:
        (WebCore::FELighting::platformApplySkia):
        * platform/graphics/harfbuzz/FontHarfBuzz.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/skia/FontSkia.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::clipConvexPolygon):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::drawOuterPath):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::platformFillEllipse):
        (WebCore::GraphicsContext::platformStrokeEllipse):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawResampledBitmap):
        (WebCore::hasNon90rotation):
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::save):
        (WebCore::PlatformContextSkia::beginLayerClippedToImage):
        (WebCore::PlatformContextSkia::restore):
        (WebCore::PlatformContextSkia::drawRect):
        (WebCore::PlatformContextSkia::couldUseLCDRenderedText):
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia):
        (WebCore::PlatformContextSkia::layerBitmap):
        (WebCore):
        (WebCore::PlatformContextSkia::readPixels):
        (WebCore::PlatformContextSkia::writePixels):
        (WebCore::PlatformContextSkia::isDrawingToLayer):
        (WebCore::PlatformContextSkia::isVector):
        (WebCore::PlatformContextSkia::clipPath):
        (WebCore::PlatformContextSkia::clipRect):
        (WebCore::PlatformContextSkia::getClipBounds):
        (WebCore::PlatformContextSkia::setMatrix):
        (WebCore::PlatformContextSkia::getTotalMatrix):
        (WebCore::PlatformContextSkia::concat):
        (WebCore::PlatformContextSkia::rotate):
        (WebCore::PlatformContextSkia::scale):
        (WebCore::PlatformContextSkia::translate):
        (WebCore::PlatformContextSkia::drawBitmap):
        (WebCore::PlatformContextSkia::drawBitmapRect):
        (WebCore::PlatformContextSkia::drawOval):
        (WebCore::PlatformContextSkia::drawPath):
        (WebCore::PlatformContextSkia::drawPoints):
        (WebCore::PlatformContextSkia::drawRect):
        (WebCore::PlatformContextSkia::drawIRect):
        (WebCore::PlatformContextSkia::drawPosText):
        (WebCore::PlatformContextSkia::drawPosTextH):
        (WebCore::PlatformContextSkia::drawTextOnPath):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::skiaDrawText):
        (WebCore::paintSkiaText):
        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::ClipRectToCanvas):
        * platform/graphics/skia/SkiaUtils.h:
        (WebCore):

2012-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reset the slider thumb location before every layout of the slider container
        https://bugs.webkit.org/show_bug.cgi?id=102817

        Reviewed by Tony Chang.

        The location of the slider thumb is set by the slider container
        assuming the slider thumb has been laid out. When this happens,
        the location of the slider thumb is reset during the layout
        ignoring any previous location set. If the slider thumb is not
        laid out, the previous value is added to the new one by the slider
        container.

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::layout): Reset the location of
        the slider thumb before calling RenderFlexibleBox::layout().

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r135340.
        http://trac.webkit.org/changeset/135340
        https://bugs.webkit.org/show_bug.cgi?id=102492

        It broke Safari's internal build

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        (FileNamePrefix):
        * bindings/scripts/CodeGeneratorCPP.pm:
        (new):
        (GenerateInterface):
        (WriteData):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (new):
        (WriteData):
        (GenerateInterface):
        * bindings/scripts/CodeGeneratorJS.pm:
        (new):
        (GenerateInterface):
        (WriteData):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (new):
        (GenerateInterface):
        (WriteData):
        * bindings/scripts/CodeGeneratorV8.pm:
        (new):
        (GenerateInterface):
        (WriteData):

2012-11-21  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: reparenting view does not detach from the previous parent.
        https://bugs.webkit.org/show_bug.cgi?id=102902

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/View.js:
        (WebInspector.View.prototype.show):

2012-11-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI add instrumentation to widely used ActiveDOMObjects. XMLHttpRequest, Prerenderer, HTMLMediaElement and DOMTimer.
        https://bugs.webkit.org/show_bug.cgi?id=102818

        Reviewed by Vsevolod Vlasov.

        Our test bot counts pointers which don't match with objects allocated by tcmalloc.
        This counter becomes nonzero after instrumenting ActiveDOMObject class.
        It happens because it is the base class for many other classes (~30).
        And almost all these classes use multiple inheritance.

        * dom/Document.cpp:
        (WebCore::Document::reportMemoryUsage):
        * dom/DocumentEventQueue.cpp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::reportMemoryUsage):
        (WebCore):
        * html/HTMLMediaElement.h:
        * loader/Prerenderer.cpp:
        (WebCore::Prerenderer::reportMemoryUsage):
        (WebCore):
        * loader/Prerenderer.h:
        (Prerenderer):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::reportMemoryUsage):
        (WebCore):
        * page/DOMTimer.h:
        (DOMTimer):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::reportMemoryUsage):
        (WebCore):
        * xml/XMLHttpRequest.h:
        (XMLHttpRequest):

2012-11-21  Dan Carney  <dcarney@google.com>

        [V8] Add context checks to WorldContextHandle and V8DOMWindowShell
        https://bugs.webkit.org/show_bug.cgi?id=101573

        Reviewed by Adam Barth.

        Added a bunch of assertions to ensure the problems with IndexedDB
        contexts cannot reemerge.

        No new tests. No change in functionality.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore):
        (WebCore::V8DOMWindowShell::assertContextHasCorrectPrototype):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        (WebCore::V8DOMWindowShell::isolated):
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2012-11-21  Harald Alvestrand  <hta@google.com>

        WebMediaStreamComponent: Add assignment and copy operators
        https://bugs.webkit.org/show_bug.cgi?id=102915

        Reviewed by Adam Barth.

        Tests that use this functionality are being submitted to Chrome.

        * platform/chromium/support/WebMediaStreamComponent.cpp:
        (WebKit::WebMediaStreamComponent::assign):
        (WebKit):
        * platform/chromium/support/WebMediaStreamDescriptor.cpp:

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove STRING_TO_V8PARAMETER_EXCEPTION_BLOCK()
        https://bugs.webkit.org/show_bug.cgi?id=102917

        Reviewed by Adam Barth.

        Now EXCEPTION_BLOCK() and STRING_TO_V8PARAMETER_EXCEPTION_BLOCK()
        are equivalent. We can remove STRING_TO_V8PARAMETER_EXCEPTION_BLOCK().
        To make a code generate change smaller, this patch also renames
        STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID() to EXCEPTION_BLOCK_VOID().
        I will rename these macros in a follow-up patch.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateEventConstructorCallback):
        (ConvertToV8Parameter):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::TestActiveDOMObjectV8Internal::postMessageCallback):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::TestCustomNamedGetterV8Internal::anotherFunctionCallback):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::TestInterfaceV8Internal::supplementalStaticAttrAttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalStr2AttrSetter):
        (WebCore::TestInterfaceV8Internal::supplementalMethod2Callback):
        (WebCore::V8TestInterface::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::staticStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedStringAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::reflectedCustomURLAttrAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithGetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::stringAttrWithSetterExceptionAttrSetter):
        (WebCore::TestObjV8Internal::voidMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::longMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::objMethodWithArgsCallback):
        (WebCore::TestObjV8Internal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsUndefinedCallback):
        (WebCore::TestObjV8Internal::methodWithOptionalStringIsNullStringCallback):
        (WebCore::TestObjV8Internal::overloadedMethod1Callback):
        (WebCore::TestObjV8Internal::overloadedMethod3Callback):
        (WebCore::TestObjV8Internal::overloadedMethod11Callback):
        (WebCore::TestObjV8Internal::overloadedMethod12Callback):
        (WebCore::TestObjV8Internal::strictFunctionCallback):
        (WebCore::TestObjV8Internal::variadicStringMethodCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructor4Callback):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::constructorCallback):
        * bindings/v8/V8BindingMacros.h:
        * bindings/v8/V8StringResource.h:
        (V8Parameter):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::profileCallback):
        (WebCore::V8Console::profileEndCallback):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):
        * bindings/v8/custom/V8IntentCustom.cpp:
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        [V8] Move V8DOMWindowShell::initializeV8IfNeeded() to V8Initializer
        https://bugs.webkit.org/show_bug.cgi?id=102899

        Reviewed by Adam Barth.

        This is an incremental step to kill WorkerContextExecutionProxy.
        As commented by abarth in bug 97066, we move
        V8DOMWindowShell::initializeV8IfNeeded() to V8Initializer.
        This patch renames initializeV8IfNeeded() to initializeMainThreadIfNeeded()
        because we will add initializeWorkerIfNeeded() in a follow-up patch.

        No tests. No change in behavior.

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8Initializer.cpp: Added.
        (WebCore):
        (WebCore::findFrame):
        (WebCore::reportFatalError):
        (WebCore::reportUncaughtException):
        (WebCore::reportUnsafeJavaScriptAccess):
        (WebCore::V8Initializer::initializeMainThreadIfNeeded):
        * bindings/v8/V8Initializer.h: Added.
        (WebCore):
        (V8Initializer):

2012-11-21  Alexander Pavlov  <apavlov@chromium.org>

        Turn -webkit-text-emphasis into a shorthand property
        https://bugs.webkit.org/show_bug.cgi?id=102879

        Reviewed by Antti Koivisto.

        -webkit-text-emphasis value is no longer empty.

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue): Reconstruct the -webkit-text-emphasis value based on the longhands.

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Build fix.

        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallbackCustom):

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename v8/custom/*Constructor.cpp to v8/custom/*Custom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102881

        Reviewed by Adam Barth.

        Writing constructorCallback()s in *Custom.cpp is a convention of
        custom bindings of JSC and V8. We can rename v8/custom/*Constructor.cpp
        to v8/custom/*Custom.cpp.

        No tests. No change in behavior.

        * UseV8.cmake: This file is already out of sync.
        * WebCore.gypi:
        * bindings/v8/custom/V8IntentCustom.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp.
        (WebCore):
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8MessageChannelCustom.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8MessageChannelConstructor.cpp.
        (WebCore):
        (WebCore::V8MessageChannel::constructorCallbackCustom):
        * bindings/v8/custom/V8WebKitPointCustom.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8WebKitPointConstructor.cpp.
        (WebCore):
        (WebCore::V8WebKitPoint::constructorCallbackCustom):

2012-11-21  Dan Carney  <dcarney@google.com>

        [V8] Inspector does not callback IDB methods in context
        https://bugs.webkit.org/show_bug.cgi?id=101725

        Reviewed by Adam Barth.

        Inserted v8 context before calling out to IDB.

        No new tests.

        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):

2012-11-21  Huang Dongsung  <luxtella@company100.net>

        REGRESSION(134048): TiledBackingStore must create tiles when the contents rect is changed.
        https://bugs.webkit.org/show_bug.cgi?id=102035

        Reviewed by Kenneth Rohde Christiansen.

        Before r134048, the visibleRect contained information of both the viewport and
        the contents rect. Now the visible rect is related to only the viewport. So
        TiledBackingStore::coverWithTilesIfNeeded() early returns even if the contents
        rect is changed, because changing the contents rect is independent on changing
        both a trajectory vector and the visible rect.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded):

2012-11-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Request preview tuning: enable json preview for text/html XHRs
        https://bugs.webkit.org/show_bug.cgi?id=102892

        Reviewed by Alexander Pavlov.

        * inspector/front-end/RequestPreviewView.js:
        (WebInspector.RequestPreviewView.prototype._jsonView):
        (WebInspector.RequestPreviewView.prototype._htmlView):
        (WebInspector.RequestPreviewView.prototype._createPreviewView):

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove manually written v8::TryCatches in custom bindings
        https://bugs.webkit.org/show_bug.cgi?id=102883

        Reviewed by Adam Barth.

        We can replace them with the EXCEPTION_BLOCK() macro or its friends.

        No new tests. This patch shouldn't change any behavior.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::handlePostMessageCallback):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::addCallback):
        * bindings/v8/custom/V8HistoryCustom.cpp:
        (WebCore::V8History::pushStateCallback):
        (WebCore::V8History::replaceStateCallback):

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r135358.
        http://trac.webkit.org/changeset/135358
        https://bugs.webkit.org/show_bug.cgi?id=102881

        It broke Chromium/Linux build

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8HTMLImageElementCustom.cpp.
        (WebCore):
        (WebCore::v8HTMLImageElementConstructorCallback):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLImageElementConstructor.h: Renamed from Source/WebCore/bindings/v8/custom/V8HTMLImageElementCustom.h.
        (WebCore):
        (V8HTMLImageElementConstructor):
        * bindings/v8/custom/V8IntentConstructor.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp.
        (WebCore):
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8MessageChannelCustom.cpp.
        (WebCore):
        (WebCore::V8MessageChannel::constructorCallbackCustom):
        * bindings/v8/custom/V8WebKitPointConstructor.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8WebKitPointCustom.cpp.
        (WebCore):
        (WebCore::V8WebKitPoint::constructorCallbackCustom):

2012-11-21  KyungTae Kim  <ktf.kim@samsung.com>

        Unused parameters on ScrollingCoordinator.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102884

        Reviewed by Kentaro Hara.

        Because the 'scrollingLayerPositionAction' parameter is not used when !USE(ACCELERATED_COMPOSITING),
        use UNUSED_PARAM macro to fix build warning -Wunused-parameter

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace V8Parameter::prepare() with V8Parameter::operator=()
        https://bugs.webkit.org/show_bug.cgi?id=102870

        Reviewed by Adam Barth.

        This is an incremental step for V8Parameter refactoring.
        By replacing V8Parameter::prepare() with V8Parameter::operator=(),
        we can make EXCEPTION_BLOCK() and STRING_TO_V8PARAMETER_EXCEPTION_BLOCK()
        equivalent (except for a return value).

        Tests: fast/workers/worker-constructor.html
               storage/websql/sql-error-codes.html
               inspector/console/alert-toString-exception.html
               http/tests/websocket/tests/hybi/send-throw.html

        * bindings/v8/V8BindingMacros.h:
        * bindings/v8/V8StringResource.h:
        (WebCore::V8Parameter::V8Parameter):
        (V8Parameter):
        (WebCore::=):

2012-11-21  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename v8/custom/*Constructor.cpp to v8/custom/*Custom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102881

        Reviewed by Adam Barth.

        Writing constructorCallback()s in *Custom.cpp is a convention of
        custom bindings of JSC and V8. We can rename v8/custom/*Constructor.cpp
        to v8/custom/*Custom.cpp.

        No tests. No change in behavior.

        * UseV8.cmake: This file is already out of sync.
        * WebCore.gypi:
        * bindings/v8/custom/V8HTMLImageElementCustom.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8HTMLImageElementConstructor.cpp.
        (WebCore):
        (WebCore::v8HTMLImageElementConstructorCallback):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLImageElementCustom.h: Renamed from Source/WebCore/bindings/v8/custom/V8HTMLImageElementConstructor.h.
        (WebCore):
        (V8HTMLImageElementConstructor):
        * bindings/v8/custom/V8IntentCustom.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8IntentConstructor.cpp.
        (WebCore):
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8MessageChannelCustom.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8MessageChannelConstructor.cpp.
        (WebCore):
        (WebCore::V8MessageChannel::constructorCallbackCustom):
        * bindings/v8/custom/V8WebKitPointCustom.cpp: Renamed from Source/WebCore/bindings/v8/custom/V8WebKitPointConstructor.cpp.
        (WebCore):
        (WebCore::V8WebKitPoint::constructorCallbackCustom):

2012-11-21  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] throttle wait icon in the ui
        https://bugs.webkit.org/show_bug.cgi?id=102685

        Reviewed by Vsevolod Vlasov.

        Do not show the wait icon for small operations during the replay to reduce flickering.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView.prototype._enableWaitIcon):

2012-11-21  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Enable datalist UI for input types datetime and datetime-local
        https://bugs.webkit.org/show_bug.cgi?id=102882

        Reviewed by Kent Tamura.

        Enabling datalist UI for input types datetime and datetime-local.

        No new tests yet. Tests will be added later in Bug 102888.

        * platform/text/PlatformLocale.cpp:
        (WebCore::Locale::formatDateTime): Support datetime and datetime-local types.
        * rendering/RenderThemeChromiumCommon.cpp:
        (WebCore::RenderThemeChromiumCommon::supportsDataListUI): Add datetime and datetimelocal to the list.

2012-11-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove v8/custom/V8XMLHttpRequestConstructor.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102876

        Reviewed by Sam Weinig.

        It doesn't make sense to have one custom cpp file for
        XXX::constructorCallback() only. We can move XXX::constructorCallback()
        in v8/custom/V8XXXConstructor.cpp to v8/custom/V8XXXCustom.cpp
        and thus remove v8/custom/V8XXXConstructor.cpp.

        Note: Some XXX::constructorCallback()s are already written in
        v8/custom/V8XXXCustom.cpp. JSC already has almost all
        XXX::constructorCallback()s in js/JSXXXCustom.cpp.

        No tests. No change in behavior.

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp: Removed.
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallbackCustom):
        (WebCore):

2012-11-20  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/CPP/WebDOMFloat64Array.cpp:
        * bindings/scripts/test/CPP/WebDOMTestActiveDOMObject.cpp:
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        * bindings/scripts/test/CPP/WebDOMTestCustomNamedGetter.cpp:
        * bindings/scripts/test/CPP/WebDOMTestEventConstructor.cpp:
        * bindings/scripts/test/CPP/WebDOMTestEventTarget.cpp:
        * bindings/scripts/test/CPP/WebDOMTestException.cpp:
        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp:
        * bindings/scripts/test/CPP/WebDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/CPP/WebDOMTestNamedConstructor.cpp:
        * bindings/scripts/test/CPP/WebDOMTestNode.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestOverloadedConstructors.cpp:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrGetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateAttributeRaisesAttrSetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrGetter):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptStateVoidCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjCallback):
        (WebCore::TestObjV8Internal::withScriptStateVoidExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateObjExceptionCallback):
        (WebCore::TestObjV8Internal::withScriptExecutionContextAndScriptStateWithSpacesCallback):

2012-11-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Introduce constructorCallbackCustom()
        https://bugs.webkit.org/show_bug.cgi?id=102763

        Reviewed by Adam Barth.

        Currently custom constructors have the following code:

          v8::Handle<v8::Value> V8XXX::constructorCallback(const v8::Arguments& args) {
            INC_STATS("DOM.XXX.Constructor");
            if (!args.IsConstructCall())
              return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
            if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
              return args.Holder();

            /* body of the constructor */;
          }

        To avoid duplicating the same logic in all custom constructors,
        this patch changes the generated code as follows:

          // Generated automatically
          v8::Handle<v8::Value> V8XXX::constructorCallback(const v8::Arguments& args) {
            INC_STATS("DOM.XXX.Constructor");
            ${maybeObserveFeature}  // Newly supported for custom constructors.
            if (!args.IsConstructCall())
              return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
            if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
              return args.Holder();

            V8XXX::constructorCallbackCustom(args);
          }

          // Written manually
          v8::Handle<v8::Value> V8XXX::constructorCallback(const v8::Arguments& args) {
            /* body of the constructor */;
          }

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (HasCustomConstructor):
        (GenerateCustomConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructorCallback):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCallbackCustom):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallbackCustom):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallbackCustom):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCallbackCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallbackCustom):
        * bindings/v8/custom/V8IntentConstructor.cpp:
        (WebCore::V8Intent::constructorCallbackCustom):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::V8MessageChannel::constructorCallbackCustom):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallbackCustom):
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        (WebCore::V8WebKitPoint::constructorCallbackCustom):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallbackCustom):

2012-11-20  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        REGRESSION(r135263): Fix a wrong argument for udat_close
        https://bugs.webkit.org/show_bug.cgi?id=102856

        Reviewed by Kent Tamura.

        Fixed a bug that passed wrong pointer to udat_close.

        No new tests. No changes in behavior.

        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::initializeDateTimeFormat): Close correct object.

2012-11-20  Kentaro Hara  <haraken@chromium.org>

        Remove $outputDir and $outputHeadersDir from global variables of code generators
        https://bugs.webkit.org/show_bug.cgi?id=102492

        Reviewed by Adam Barth.

        $outputDir and $outputHeadersDir are used in WriteData() only.
        We don't need to use global variables for them.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        (FileNamePrefix):
        * bindings/scripts/CodeGeneratorCPP.pm:
        (new):
        (GenerateInterface):
        (WriteData):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (new):
        (WriteData):
        (GenerateInterface):
        * bindings/scripts/CodeGeneratorJS.pm:
        (new):
        (GenerateInterface):
        (WriteData):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (new):
        (GenerateInterface):
        (WriteData):
        * bindings/scripts/CodeGeneratorV8.pm:
        (new):
        (GenerateInterface):
        (WriteData):

2012-11-20  Adam Barth  <abarth@webkit.org>

        7% regression in dromaeo_domcorequery/dom_query_getElementsByTagName__not_in_document
        https://bugs.webkit.org/show_bug.cgi?id=102852

        Reviewed by Kentaro Hara.

        In http://trac.webkit.org/changeset/135208/, we lost the early-exit
        check for whether isolatedWorldsExist() in this code path. This
        regression points to benchmarks that we can further improve by
        continuing to merge the general ScriptWrappable code path with the Node
        code path.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):

2012-11-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Change a return type of V8Parameter::prepare() from bool to void
        https://bugs.webkit.org/show_bug.cgi?id=102805

        Reviewed by Adam Barth.

        This is an incremental step for V8Parameter refactoring.

        V8Parameter::prepare() is always called just after V8Parameter's
        constructor. So I want to move the logic of V8Parameter::prepare()
        to V8Parameter's constructor. In preparation for that (i.e. because
        a constructor cannot return any value), this patch changes the return
        type of V8Parameter::prepare() from bool to void.

        Tests: fast/workers/worker-constructor.html
               storage/websql/sql-error-codes.html
               inspector/console/alert-toString-exception.html
               http/tests/websocket/tests/hybi/send-throw.html
               etc

        * bindings/v8/V8BindingMacros.h:
        * bindings/v8/V8StringResource.h:
        (V8Parameter):
        (WebCore::V8Parameter::prepareBase): This patch removes a TryCatch block.
        This change is safe because (1) all V8Parameter::prepareBase() in the code base
        is called inside STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(), and because
        (2) STRING_TO_V8PARAMETER_EXCEPTION_BLOCK() has a TryCatch block.
        (Note: In a follow-up patch I'm planning to refactor the macros.)
        (WebCore::::prepare): I will remove this method shortly.

2012-11-20  Adam Klein  <adamk@chromium.org>

        [JSC] MutationObserver wrapper should not be collected while still observing
        https://bugs.webkit.org/show_bug.cgi?id=102744

        Reviewed by Adam Barth.

        This is the JSC side of the change landed for V8 in r135228.
        It ensures MutationObserver wrapper objects are kept alive as long as
        any observed nodes.

        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverOwner::isReachableFromOpaqueRoots): Keep MutationObserver wrappers alive
        if any of their observed nodes' roots is an opaque root.
        * dom/MutationObserver.idl: Add JSCustomIsReachable

2012-11-20  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Move control of transaction completion to front end
        https://bugs.webkit.org/show_bug.cgi?id=100903

        Reviewed by Tony Chang.

        "When a transaction can no longer become active, the implementation must attempt to
        commit it" - that is, all requests have dispatched success/error events and no further
        requests have been made. Previously, this was done by the back end waiting for events
        from the front end, but the front end can more efficiently make the decision.

        There should be no detectable behavior change.

        Tests: storage/indexeddb/transaction-*.html

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::setActive):
        (WebCore::IDBTransaction::registerRequest):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::hasPendingTasks): Added.
        (WebCore::IDBTransactionBackendImpl::didCompleteTaskEvents):
        (WebCore::IDBTransactionBackendImpl::run):
        (WebCore::IDBTransactionBackendImpl::taskEventTimerFired):

2012-11-20  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::constructorCallback):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructorCallback):

2012-11-20  Alpha Lam  <hclam@chromium.org>

        Unreviewed. Chromium build fix.

        Removed unnecessary mutex unlock that triggered crash on Linux debug build.

        Chromium Linux Debug layout tests should be green:
        platform/chromium/virtual/deferred/fast/images/image-in-map.html

        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::onLockPixels):

2012-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Fix another typo. I need to checking that type() != NodeListCollectionType,
        not that type() >= FirstNodeCollectionType.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeListCacheBase::invalidateIdNameCacheMaps):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeListCacheBase::invalidateCache):

2012-11-20  Michael Pruett  <michael@68k.org>

        [V8] Pass ScriptState::current() to functions marked with CallWith=ScriptState
        https://bugs.webkit.org/show_bug.cgi?id=102739

        Reviewed by Kentaro Hara.

        Previously EmptyScriptState rather than ScriptState::current()
        was passed to functions marked with [CallWith=ScriptState].
        Since the EmptyScriptState has a null v8::Context, any functions
        which depended upon a valid v8::Context would fail.

        No new tests. Covered by existing tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateCallWith):
        (GenerateFunctionCallString):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptState::clearException): Added.

2012-11-20  Brent Fulgham  <bfulgham@webkit.org>

        [Qt] Build fix after r135217.
        https://bugs.webkit.org/show_bug.cgi?id=102787

        * platform/win/WindowsExtras.h: Switch to direct include of
          <ObjBase.h>, as is done in other <shlwapi.h> includes.

2012-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Fix typos. Apparently XCode failed to text-replace earlier when it was busy making a snapshot :(

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeListCacheBase::invalidateIdNameCacheMaps):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeListCacheBase::invalidateCache):
        (DynamicNodeListCacheBase):

2012-11-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Introduce GenerateConstructorHeader() to CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=102806

        Reviewed by Adam Barth.

        This is an incremental step for introducing constructorCallbackCustom().
        (See bug 102763.) This patch adds GenerateConstructorHeader()
        that generates a common code for constructors.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOverloadedConstructorCallback):
        (GenerateSingleConstructorCallback):
        (GenerateEventConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateConstructorHeader):

2012-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLCollection's cache should not be invalidated when id or name attributes are changed
        https://bugs.webkit.org/show_bug.cgi?id=102843

        Reviewed by Eric Seidel.

        When an id or name attribute changes, only invaliate id and name cache maps when the collection
        doesn't depend on id and name attributes (e.g. document.images).

        Unfortunately, I could not create a reliable test for this performance problem.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeListCacheBase::invalidateIdNameCacheMaps):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeListCacheBase::invalidateCache):
        (DynamicNodeListCacheBase):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::clearHTMLCollectionCaches):
        * html/HTMLCollection.cpp:
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):

2012-11-20  Adam Klein  <adamk@chromium.org>

        [v8] Avoid unnecessary call to ToObject() in Callback constructors
        https://bugs.webkit.org/show_bug.cgi?id=102831

        Reviewed by Adam Barth.

        The code already asserted that the argument was an object, so calling
        ToObject() is unnecessary: a simple Cast() suffices.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackHeader):
        * bindings/scripts/test/V8/V8TestCallback.h:
        (WebCore::V8TestCallback::create):

2012-11-20  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Build fix after r135316

        * platform/network/curl/AuthenticationChallenge.h: Update stub
          implementations to match Apple Windows port.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Add
          missing identifier argument.
        (WebCore::AuthenticationChallenge::setAuthenticationClient): Supply
          missing set method.

2012-11-20  Tony Chang  <tony@chromium.org>

        When calling DocumentStyleSheetCollection::addUserSheet, pass in a user sheet
        https://bugs.webkit.org/show_bug.cgi?id=102835

        Reviewed by Ojan Vafai.

        After r135082, Chromium browser_tests were triggering the ASSERT in
        StyleResolver::collectRulesFromUserStyleSheets. Add an ASSERT that will
        trigger earlier and make it clear in the Chromium code that we're always
        inserting user level styles.

        No new tests, no behavior change except no longer triggering the StyleResolver ASSERT
        in Chromium browser_tests.

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::addUserSheet):

2012-11-20  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions] Support outside-shape value on shape-inside
        https://bugs.webkit.org/show_bug.cgi?id=101108

        Reviewed by Dirk Schulze.

        Shape-inside can potentially be: 'auto' | 'outside-shape' | <shape> | <url>.
        Webkit currently supports the value 'auto' (null) and <shape> (a BasicShape*).
        This patch adds support for the value 'outside-shape.' It adds the ExclusionShapeValue
        class, which may be any of the three values: 'auto', 'outside-shape', or <shape>.
        Bug 102738 tracks adding <url> support.

        Modifying existing tests:
        LayoutTests/fast/exclusions/parsing-wrap-shape-inside.html
        LayoutTests/fast/exclusions/parsing-wrap-shape-outside.html

        * GNUmakefile.list.am: Adding ExclusionShapeValue.h to the build files.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        (WebCore):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Modifying code to use
        ExclusionShapeValue* rather than the previous BasicShape* values.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Handle the outside-shape value.
        * css/CSSValueKeywords.in: Adding outside-shape value.
        * css/StyleBuilder.cpp:
        (WebCore):
        (WebCore::ApplyPropertyExclusionShape::setValue): Modify code to use
        ExclusionShapeValue* rather than BasicShape*.
        (WebCore::ApplyPropertyExclusionShape::applyValue): Ditto.
        (WebCore::ApplyPropertyExclusionShape::createHandler): Ditto.
        * page/animation/CSSPropertyAnimation.cpp: Ditto.
        (WebCore::blendFunc): Ditto.
        (WebCore::PropertyWrapperExclusionShape::PropertyWrapperExclusionShape): Ditto.
        (WebCore::CSSPropertyAnimation::ensurePropertyMap): Ditto.
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::isExclusionShapeInsideInfoEnabledForRenderBlock):
        Ditto.
        (WebCore::ExclusionShapeInsideInfo::computeShapeSize): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateExclusionShapeInsideInfoAfterStyleChange): Ditto.
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/style/ExclusionShapeValue.h: Added.
        (WebCore):
        (ExclusionShapeValue): New type to represent the possible values of shape-inside
        and shape-outside. Only shape-inside can have a value of 'outside-shape.'
        (WebCore::ExclusionShapeValue::~ExclusionShapeValue):
        (WebCore::ExclusionShapeValue::type): Returns the value type.
        (WebCore::ExclusionShapeValue::shape): Returns <shape> value's BasicShape*.
        (WebCore::ExclusionShapeValue::operator==):
        (WebCore::ExclusionShapeInfo::createShapeValue):
        (WebCore::ExclusionShapeInfo::createOutsideValue):
        (WebCore::ExclusionShapeValue::ExclusionShapeValue):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.h:
        (StyleRareNonInheritedData):

2012-11-20  Alpha Lam  <hclam@chromium.org>

        [chromium] Make lazy image decoding thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=102721

        Reviewed by Stephen White.

        Added mutex to LazyDecodingPixelRef such that there is no parallel
        onLockPixels() running on multiple threads.

        Added mutex to ImageFrameGenerator to protect the use of raw image
        data.

        The result is that we can decode on threads other than the main
        thread while data is being supplied on the main thread.

        New unit test:
        DeferredImageDecoderTest.decodeOnOtherThread

        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::setData):
        (WebCore::ImageFrameGenerator::decodeAndScale):
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (ImageFrameGenerator):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::onLockPixels):
        (WebCore::LazyDecodingPixelRef::onUnlockPixels):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (LazyDecodingPixelRef):

2012-11-20  Brent Fulgham  <bfulgham@webkit.org>

        [Qt] Build fix after r135217.
        https://bugs.webkit.org/show_bug.cgi?id=102787

        * platform/win/WindowsExtras.h: Add #undef of NOSHLWAPI to
        allow include of <ObjBase.h> needed by Qt build.

2012-11-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135295.
        http://trac.webkit.org/changeset/135295
        https://bugs.webkit.org/show_bug.cgi?id=102834

        This patch causes assertion to some layout tests on chromium
        (Requested by jianli on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoadRequest.cpp: Removed.
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (FrameLoadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        * loader/FrameLoader.h:
        (FrameLoader):
        * page/DragController.cpp:
        (WebCore::DragController::performDrag):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):

2012-11-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135293.
        http://trac.webkit.org/changeset/135293
        https://bugs.webkit.org/show_bug.cgi?id=102832

        This patch causes crash to some layout tests on chromium
        (Requested by jianli on #webkit).

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.cpp:
        * bindings/v8/DOMWrapperWorld.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::currentWorldContext):
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * bindings/v8/V8Binding.h:
        (WebCore::worldForEnteredContextIfIsolated):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::destroyIsolatedShell):
        (WebCore):
        (WebCore::isolatedContextWeakCallback):
        (WebCore::V8DOMWindowShell::disposeContext):
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8DOMWindowShell.h:
        (WebCore::V8DOMWindowShell::isolated):
        (V8DOMWindowShell):
        * bindings/v8/V8PerContextData.h:
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2012-11-20  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Remove legacy enum-based constants from IDL
        https://bugs.webkit.org/show_bug.cgi?id=85315

        Reviewed by Adam Barth.

        These were only present in an earlier working draft of the spec and have
        been removed for 8 months. See
        http://lists.w3.org/Archives/Public/public-webapps/2012JanMar/0957.html

        Tests - legacy-constants.html

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::stringToDirection):
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::stringToMode):
        * Modules/indexeddb/IDBTransaction.idl:

2012-11-20  Elliott Sprehn  <esprehn@chromium.org>

        Store MutationObserver callback in a hidden property for V8
        https://bugs.webkit.org/show_bug.cgi?id=102555

        Reviewed by Adam Barth.

        To prevent circular reference leaks we should store the MutationObserver
        callback in a hidden property on the wrapper of the observer.

        This is done by extending the code generator to support a new owner
        argument to ::create() that lets you set the owner of the callback where
        the hidden property should be stored.

        Test: ManualTests/leak-cycle-observer-wrapper.html

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        * bindings/scripts/test/V8/V8TestCallback.cpp: rebaselined.
        * bindings/scripts/test/V8/V8TestCallback.h: rebaselined.
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallback):

2012-11-20  Abhishek Arya  <inferno@chromium.org>

        Crash in FrameLoader::stopLoading.
        https://bugs.webkit.org/show_bug.cgi?id=99504

        Reviewed by Nate Chapin.

        Frame can be blown away in unload event handler. Need
        to protect it with a RefPtr.

        Test: fast/frames/frame-unload-crash2.html

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

2012-11-20  Dirk Schulze  <krit@webkit.org>

        Remove unnecessary FilterOperations header from RenderBoxModelObject
        https://bugs.webkit.org/show_bug.cgi?id=102821

        Reviewed by Ojan Vafai.

        No new tests, simple refactoring.

        * rendering/RenderBoxModelObject.cpp:

2012-11-20  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor::decodedSnippetForJavaScript stopping when comma encountered.
        https://bugs.webkit.org/show_bug.cgi?id=102587

        Reviewed by Adam Barth.

        Rather than returning an empty fragment, continue processing the body
        of a script tag when the decoded fragment reduces to nothing.

        Test: http/tests/security/xssAuditor/script-tag-with-actual-comma.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodedSnippetForJavaScript):

2012-11-20  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        There's a FIXME that we have too many FrameLoader::load*() functions. This patch consolidates 3 into 1.
        There are still a few more load functions that will be consolidated later. Using FrameLoadRequest as
        the interface into FrameLoader will also provide a place to pass in the initiator. Finally, this matches
        the refactoring done with CachedResourceRequest and CachedResourceLoader.

        No new tests. No change in functionality.

        * WebCore.exp.in:
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::setLockHistory): These are former arguments to load().
        (WebCore::FrameLoadRequest::lockHistory): Ditto.
        (FrameLoadRequest):
        (WebCore::FrameLoadRequest::setShouldCheckNewWindowPolicy): Ditto.
        (WebCore::FrameLoadRequest::shouldCheckNewWindowPolicy): Ditto.
        (WebCore::FrameLoadRequest::substituteData): Ditto.
        (WebCore::FrameLoadRequest::setSubstituteData): Ditto.
        (WebCore::FrameLoadRequest::hasSubstituteData): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load): No change in behavior, just merged it all into one function.
        * loader/FrameLoader.h:
        (FrameLoader):
        * page/DragController.cpp:
        (WebCore::DragController::performDrag):

2012-11-20  Dan Carney  <dcarney@google.com>

        Remove V8DOMWindowShell::getEntered
        https://bugs.webkit.org/show_bug.cgi?id=96637

        Reviewed by Adam Barth.

        V8DOMWindowShell::getEntered was refactored so that the window shell
        no longer has to be kept alive by a v8 context. Instead, only
        the DOMWrapperWorld will be kept alive.

        No new tests. No change in functionality.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::isolatedWorldWeakCallback):
        (WebCore):
        (WebCore::DOMWrapperWorld::makeContextWeak):
        (WebCore::DOMWrapperWorld::setIsolatedWorldField):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::isolated):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::currentWorldContext):
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        * bindings/v8/V8Binding.h:
        (WebCore::worldForEnteredContextIfIsolated):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::destroyIsolatedShell):
        (WebCore::V8DOMWindowShell::disposeContext):
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        * bindings/v8/V8PerContextData.h:
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):

2012-11-20  Mike West  <mkwst@chromium.org>

        Remove '#include "ScriptCallStackFactory.h"' include when unnecessary.
        https://bugs.webkit.org/show_bug.cgi?id=102812

        Reviewed by Jochen Eisinger.

        "ScriptCallStackFactory.h" is included in a few files where it doesn't
        seem to be required. Since I'm in the process of centralizing stack
        trace generation anyway, I'll just clean this up as a drive-by.

        * bindings/js/JSConsoleCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * loader/FrameLoader.cpp:
            Removed "ScriptCallStackFactory.h".
        * bindings/js/ScheduledAction.cpp:
            This also included (but didn't use) "ScriptCallStack.h". I've
            removed it as well.

2012-11-20  Elliott Sprehn  <esprehn@chromium.org>

        Merge checks for creating renderers into shouldCreateRenderer
        https://bugs.webkit.org/show_bug.cgi?id=102768

        Reviewed by Ojan Vafai.

        Merge the checks for if renderers should be created into shouldCreateRenderer
        so simplify the code and ensure correctness if doing
        NodeRenderingContext(node).shouldCreateRenderer() in other places in webkit.

        No new tests, just refactoring.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::shouldCreateRenderer):
        (WebCore::NodeRendererFactory::createRendererIfNeeded):

2012-11-19  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: simplify? damaged region computation in the editor
        https://bugs.webkit.org/show_bug.cgi?id=102688

        Reviewed by Vsevolod Vlasov.

        This change simplifies the damaged region computation. Drive-by make _getSelection work properly.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor):
        (WebInspector.DefaultTextEditor.prototype._handleCut):
        (WebInspector.TextEditorChunkedPanel.prototype._findFirstVisibleLineNumber.compareLineRowOffsetTops):
        (WebInspector.TextEditorChunkedPanel.prototype._findFirstVisibleLineNumber):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey.get var):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey):
        (WebInspector.TextEditorMainPanel.prototype._paintLineChunks):
        (WebInspector.TextEditorMainPanel.prototype._getSelection):
        (WebInspector.TextEditorMainPanel.prototype._restoreSelection):
        (WebInspector.TextEditorMainPanel.prototype._selectionToPosition):
        (WebInspector.TextEditorMainPanel.prototype._positionToSelection):
        (WebInspector.TextEditorMainPanel.prototype._handleMutations):
        (WebInspector.TextEditorMainPanel.prototype._collectDirtyLines):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._guessEditRangeBasedOnSelection):
        (WebInspector.TextEditorMainPanel.prototype._assertDOMMatchesTextModel):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDOM):
        (WebInspector.TextEditorMainChunk):
        (WebInspector.TextEditorMainChunk.prototype.addDecoration):
        (WebInspector.TextEditorMainChunk.prototype.get endLine):
        (WebInspector.TextEditorMainChunk.prototype.lineRowContainingLine):
        (WebInspector.TextEditorMainChunk.prototype.expandedLineRow):

2012-11-19  Erik Arvidsson  <arv@chromium.org>

        Remove historical enums from ExceptionCode.h
        https://bugs.webkit.org/show_bug.cgi?id=102095

        Reviewed by Ojan Vafai.

        Remove unused enums from ExceptionCode.

        No new tests. No tests affected.

        * Modules/intents/NavigatorIntents.cpp:
        (WebCore::NavigatorIntents::webkitStartActivity): The error type for this is unspecified.
        * dom/DOMCoreException.cpp:
        * dom/ExceptionCode.h:

2012-11-20  Keishi Hattori  <keishi@webkit.org>

        Week picker width is too small
        https://bugs.webkit.org/show_bug.cgi?id=102766

        Reviewed by Kent Tamura.

        The width of week picker was too small because we were forgetting about
        the week number column when calculating the desired width.

        No new tests. Covered by week-picker-appearance*.html.

        * Resources/pagepopups/calendarPicker.css:
        (.week-mode .week-column): Needs to be table-cell.
        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker.prototype.fixWindowSize):

2012-11-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] no volume slider in HTML5 media element controls
        https://bugs.webkit.org/show_bug.cgi?id=97192

        Reviewed by Philippe Normand.

        r115829 was causing this regression so it was partially
        reverted. The revert causes some small regressions, in the tests
        but it is better to have the volume slider shown.

        * css/mediaControlsGtk.css:
        (audio::-webkit-media-controls-panel)
        (video::-webkit-media-controls-panel): Partially reverted
        r115829.

2012-11-19  Antti Koivisto  <antti@apple.com>

        Collect user style sheets in DocumentStyleSheetCollection
        https://bugs.webkit.org/show_bug.cgi?id=102683

        Reviewed by Andreas Kling.

        Move the user stylesheet collection logic from StyleResolver to DocumentStyleSheetCollection.
        
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::collectRulesFromUserStyleSheets):
        (WebCore::collectCSSOMWrappers):
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::~DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::pageUserStyleSheet):
        (WebCore::DocumentStyleSheetCollection::clearPageUserStyleSheet):
        (WebCore::DocumentStyleSheetCollection::updatePageUserStyleSheet):
        (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange):
        (WebCore::collectActiveStyleSheetsFromSeamlessParents):
        (WebCore::DocumentStyleSheetCollection::updateStyleResolver):
        
            Factor the StyleResolver updating code to function.

        (WebCore):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        
            Collect the user style sheets. Some renaming and other minor refactoring.

        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage):
        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::activeUserStyleSheets):
        
            Add activeUserStyleSheets vector that contains all user stylesheets from different sources,
            similar to activeAuthorStyleSheets.

        (DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::documentUserStyleSheets):

2012-11-20  Elliott Sprehn  <esprehn@chromium.org>

        Remove unneeded optimization in Element::isInTopLayer
        https://bugs.webkit.org/show_bug.cgi?id=102772

        Reviewed by Andreas Kling.

        There's no reason to worry about calling elementRareData() multiple
        times in this non performance sensitive code path as it's only used
        in HTMLDialogElement's showModal and close methods.

        No new tests, just simplification.

        * dom/Element.cpp:
        (WebCore::Element::setIsInTopLayer):

2012-11-20  Elliott Sprehn  <esprehn@chromium.org>

        Simplify Element::isSpellCheckingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=102779

        Reviewed by Andreas Kling.

        isSpellCheckingEnabled contains logic that duplicates parentOrHostElement
        and can be simplified by just calling that.

        No new tests, just simplification.

        * dom/Element.cpp:
        (WebCore::Element::isSpellCheckingEnabled):

2012-11-20  Kihong Kwon  <kihong.kwon@samsung.com>

        Apply DeviceController as parent class of DeviceMotionController.
        https://bugs.webkit.org/show_bug.cgi?id=102578

        Reviewed by Hajime Morita.

        DeviceController needs to be applied as parent class of DeviceMotionController
        because DeviceController which is extracted as parent class of
        DeviceMotionController and DeviceOrientationController is already added.
        Therefore duplicated implementation can be removed.

        Covered by existing tests.

        * dom/DeviceMotionClient.h:
        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::DeviceMotionController):
        (WebCore::DeviceMotionController::didChangeDeviceMotion):
        (WebCore::DeviceMotionController::deviceMotionClient):
        (WebCore::DeviceMotionController::hasLastData):
        (WebCore::DeviceMotionController::getLastEvent):
        (WebCore::DeviceMotionController::from):
        (WebCore):
        * dom/DeviceMotionController.h:
        (WebCore):
        (WebCore::DeviceMotionController::~DeviceMotionController):
        (DeviceMotionController):
        * dom/Document.cpp:
        Remove all implementations which are related DeviceOrientationEvnet and DeviceMotionEvent.
        Because DeviceController checks suspend and stop status of active dom object before dispatchEvent.
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        * loader/EmptyClients.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):

2012-11-20  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove V8ParameterBase
        https://bugs.webkit.org/show_bug.cgi?id=102774

        Reviewed by Adam Barth.

        V8ParameterBase is a redundant indirection.
        We can flatten methods of V8ParameterBase to V8Parameter.

        No tests. No change in behavior.

        * bindings/v8/V8StringResource.h:
        (WebCore::V8Parameter::V8Parameter):
        (V8Parameter):
        (WebCore::V8Parameter::toString):
        (WebCore::::prepare):

2012-11-20  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Use localized date-time format in datetime input
        https://bugs.webkit.org/show_bug.cgi?id=102769

        Reviewed by Kent Tamura.

        Move the implementation of Locale::dateTimeFormatWithSeconds and Locale::dateTimeFormatWithoutSeconds
        to its subclasses and use platform-specific methods to get date-time pattern.
        Because Windows does not provide an API to get date-time pattern. We use fixed "{date} {time}"
        pattern for Windows.

        Test: fast/forms/datetime/datetime-appearance-l10n.html

        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::initializeDateTimeFormat): Retrieve datetime formats too.
        (WebCore::LocaleICU::dateTimeFormatWithSeconds): Added.
        (WebCore):
        (WebCore::LocaleICU::dateTimeFormatWithoutSeconds): Added.
        * platform/text/LocaleICU.h:
        (LocaleICU): Add m_dateTimeFormatWithSeconds and m_dateTimeFormatWithoutSeconds.
        * platform/text/LocaleNone.cpp:
        (LocaleNone):
        (WebCore::LocaleNone::dateTimeFormatWithSeconds): Added. Always returns "dd/MM/yyyyy HH:mm:ss".
        (WebCore):
        (WebCore::LocaleNone::dateTimeFormatWithoutSeconds): Added. Always returns "dd/MM/yyyyy HH:mm".
        * platform/text/PlatformLocale.cpp:
        (WebCore): Remove dateTimeFormatWithSeconds() and dateTimeFormatWithoutSeconds() as these are now pure virtual.
        * platform/text/PlatformLocale.h:
        (Locale): Make dateTimeFormatWithSeconds() and dateTimeFormatWithoutSeconds() pure virtual.
        * platform/text/mac/LocaleMac.h:
        (LocaleMac): Add m_dateTimeFormatWithSeconds and m_dateTimeFormatWithoutSeconds.
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::dateTimeFormatterWithSeconds): Added.
        (WebCore):
        (WebCore::LocaleMac::dateTimeFormatterWithoutSeconds): Added.
        (WebCore::LocaleMac::dateTimeFormatWithSeconds): Added.
        (WebCore::LocaleMac::dateTimeFormatWithoutSeconds): Added.
        * platform/text/win/LocaleWin.cpp:
        (WebCore::LocaleWin::dateTimeFormatWithSeconds): Copied from original Locale::dateTimeFormatWithSeconds().
        (WebCore):
        (WebCore::LocaleWin::dateTimeFormatWithoutSeconds): Copied from original Locale::dateTimeFormatWithoutSeconds().
        * platform/text/win/LocaleWin.h:
        (LocaleWin): Add m_dateTimeFormatWithSeconds and m_dateTimeFormatWithoutSeconds.

2012-11-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135257.
        http://trac.webkit.org/changeset/135257
        https://bugs.webkit.org/show_bug.cgi?id=102777

        Broke Chromium Debug compilation (Requested by yurys on
        #webkit).

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::getNode):

2012-11-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Revert r133149: breaks revision reverting
        https://bugs.webkit.org/show_bug.cgi?id=102672

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype._onFormattedChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._onWorkingCopyCommitted):
        (WebInspector.JavaScriptSourceFrame.prototype._innerSetContent):

2012-11-19  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Win] Unreviewed speculative buildfix after r135217.

        * platform/win/WindowsExtras.h:

2012-11-19  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium Win compilation after r135255.
        https://bugs.webkit.org/show_bug.cgi?id=97803

        * WebCore.gypi: removed reference to platform/wince/DragDataWince.cpp which
        was deleted in the aforementioned change.

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        [V8] Merge getCachedWrapper(Node*) into DOMDataStore
        https://bugs.webkit.org/show_bug.cgi?id=102158

         Reviewed by Adam Barth.

        A follow-up patch for r135230. This patch adds a correct ASSERTION.

        No tests. No change in behavior.

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::getNode):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        [JSC] Replace $implClassName with $interfaceName in CodeGeneratorJS.pm
        https://bugs.webkit.org/show_bug.cgi?id=102757

        Reviewed by Adam Barth.

        In CodeGeneratorJS.pm $implClassName and $interfaceName are
        equivalent. We're using them interchangeably. We should replace
        $implClassName with $interfaceName.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddClassForwardIfNeeded):
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeader):
        (GenerateOverloadedFunction):
        (GenerateImplementation):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):
        (NativeToJSValue):

2012-11-19  Patrick Gansterer  <paroga@webkit.org>

        Port DragDataWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=97803

        Reviewed by Brent Fulgham.

        Add two simple #if OS(WINCE) to DragDataWin.cpp, so it can be used by the WinCE port too.

        * PlatformWinCE.cmake:
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::numberOfFiles):
        (WebCore::DragData::asFilenames):
        * platform/wince/DragDataWinCE.cpp: Removed.

2012-11-19  Pan Deng  <pan.deng@intel.com>

        [Web Inspector] This patch makes script line number search-able in Timeline panel.
        https://bugs.webkit.org/show_bug.cgi?id=101910.

        Reviewed by Pavel Feldman.

        Script line number is visible in Timeline panel, however, not search-able. This patch makes it search-able.

        No new tests. 

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelineRecordListRow.testContentMatching):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record.prototype._generatePopupContentWithImagePreview):
        (WebInspector.TimelinePresentationModel.Record.prototype._refreshDetails):
        (WebInspector.TimelinePresentationModel.Record.prototype.detailsNode):
        (WebInspector.TimelinePresentationModel.Record.prototype._createSpanWithText):
        (WebInspector.TimelinePresentationModel.Record.prototype._getRecordDetails):

2012-11-19  Elliott Sprehn  <esprehn@chromium.org>

        Remove unneeded null check in NodeRendererFactory::createRendererIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=102765

        Reviewed by Ojan Vafai.

        If parentRenderer() was null then we return early from
        createRendererIfNeeded() because shouldCreateRenderer() will return false
        so there's no reason to check for it again.

        Additionally if either parentRenderer() or style() is null then
        implementations of rendererIsNeeded() will crash, so add asserts to
        make this assumption more clear.

        No new tests, just simplification.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRendererFactory::createRendererIfNeeded):

2012-11-19  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Remove WebCore::isInsertionPoint(Node*)
        https://bugs.webkit.org/show_bug.cgi?id=102756

        Reviewed by Hajime Morita.

        Now that WebCore::isInsertionPoint(Node* node) does nothing special. We can remove this.

        No new tests, simple refactoring.

        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents):
        * dom/ContainerNode.cpp:
        (WebCore::childAttachedAllowedWhenAttachingChildren):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::invalidate):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::isActive):
        * html/shadow/InsertionPoint.h:
        (WebCore::toInsertionPoint):
        (WebCore::isActiveInsertionPoint):
        (WebCore::isLowerEncapsulationBoundary):
        (WebCore::parentNodeForDistribution):
        * testing/Internals.cpp:
        (WebCore::Internals::isValidContentSelect):

2012-11-19  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Remove shadowPseudoId() and use setPseudo() in <progress> ElementShadow.
        https://bugs.webkit.org/show_bug.cgi?id=101703

        Reviewed by Hajime Morita.

        We're migrating shadowPseudoId() to pseudo(). We remove shadowPseudoId() from HTMLKeygenElement and use
        setPseudo()/pseudo() instead.

        No new tests, simple refactoring.

        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressInnerElement::ProgressInnerElement):
        * html/shadow/ProgressShadowElement.h:
        (ProgressInnerElement):
        (WebCore::ProgressBarElement::ProgressBarElement):
        (ProgressBarElement):
        (WebCore::ProgressValueElement::ProgressValueElement):

2012-11-19  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium Debug compilation after r135230.
        https://bugs.webkit.org/show_bug.cgi?id=102158

        Removed ASSERT that used instance field in a static method.

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::getWrapperFromObject):

2012-11-19  Chris Guan  <chris.guan@torchmobile.com.cn>

        [Blackberry] When a frame is being detached, cancel all its network jobs.
        https://bugs.webkit.org/show_bug.cgi?id=102758

        Reviewed by George Staikos.

        I use FrameDestructionObserver to refactor Networkjob code.
        NetworkJob is inheriting from FrameDestructionObserver to be
        aware of frame's destroyed. When a frame is being detached,
        the willDetachPage() can be called in which we can cancel 
        the job. This patch reverted the fix for RIM PR134207 as well.

        Manually test is on 
        "http://www.reuters.com/article/2012/01/27/us-greece-idUSTRE80P0DE20120127"
        which triggers a ping loader.

        No behavior changed, no new layout tests.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::NetworkJob):
        (WebCore::NetworkJob::initialize):
        (WebCore::NetworkJob::handleNotifyHeaderReceived):
        (WebCore::NetworkJob::startNewJobWithRequest):
        (WebCore::NetworkJob::frameDestroyed):
        (WebCore):
        (WebCore::NetworkJob::willDetachPage):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):
        * platform/network/blackberry/NetworkManager.h:
        (NetworkManager):
        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2012-11-19  Matt Falkenhagen  <falken@chromium.org>

        Implement the new stacking layer needed by the Fullscreen API and the new <dialog> element
        https://bugs.webkit.org/show_bug.cgi?id=84796

        Reviewed by Julien Chaffraix.

        This adds the top layer element stack to Document. The Fullscreen
        specification mandates that we track the ordering of the DOM nodes in
        the top layer, not the renderers. That makes it hard to implement on
        the rendering side only.

        Elements in the top layer get a layer. Layers in the top layer are
        added to the root layer's child list after normal layers and in the
        order of the top layer stack. This way, the top layer appears above
        all other stacking contexts and in the desired order.

        In addition, top layer renderers are added as children of RenderView
        in top layer order. This is to satisfy requirements such as the
        containing block of an element in the top layer is the initial
        containing block. It also allows RenderLayer to know the proper
        stacking order of the layers without going directly from the top layer
        elements to their layers.

        So far, only modal dialog elements can be added to the top layer.
        The plan is to make the Fullscreen API also use the top layer.

        Tests: fast/dom/HTMLDialogElement/top-layer-containing-block.html
               fast/dom/HTMLDialogElement/top-layer-display-none.html
               fast/dom/HTMLDialogElement/top-layer-nesting.html
               fast/dom/HTMLDialogElement/top-layer-stacking-dynamic.html
               fast/dom/HTMLDialogElement/top-layer-stacking.html

        * WebCore.exp.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): Elements in the top layer have a stacking context.
        * dom/Document.cpp:
        (WebCore):
        (WebCore::Document::addToTopLayer):
        (WebCore::Document::removeFromTopLayer):
        * dom/Document.h:
        (Document):
        (WebCore::Document::topLayerElements): Add the top layer element stack to Document.
        * dom/Element.cpp:
        (WebCore::Element::removedFrom):
        (WebCore):
        (WebCore::Element::isInTopLayer):
        (WebCore::Element::setIsInTopLayer):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::detach): Add an exception to the assert since top layer elements and their descendants are moved from their
        regular position in the render tree.
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):
        (WebCore::NodeRareData::isInTopLayer):
        (WebCore::NodeRareData::setIsInTopLayer):
        * dom/NodeRenderingContext.cpp:
        (WebCore):
        (WebCore::adjustInsertionPointForTopLayerElement):
        (WebCore::NodeRendererFactory::createRendererIfNeeded): Add renderers for top layer elements as children of RenderView, and
        in top layer stacking order.
        * html/HTMLDialogElement.cpp:
        (WebCore::HTMLDialogElement::close):
        (WebCore::HTMLDialogElement::showModal):
        * rendering/RenderLayer.cpp:
        (WebCore):
        (WebCore::RenderLayer::isInTopLayer):
        (WebCore::RenderLayer::isInTopLayerSubtree):
        (WebCore::RenderLayer::rebuildZOrderLists): Add the top layer stack after normal layer collection.
        (WebCore::RenderLayer::collectLayers): Avoid adding layers for top layer elements during normal layer collection.
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        In CodeGeneratorObj.pm we should rename $dataNode to $interface.
        https://bugs.webkit.org/show_bug.cgi?id=102749

        Reviewed by Adam Barth.

        $dataNode is misnamed. It should be renamed to $interface.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateInterface):
        (GetParentImplClassName):
        (GetParentAndProtocols):
        (GenerateHeader):
        (GenerateImplementation):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        In CodeGeneratorV8.pm, we should rename $dataNode to $interface
        https://bugs.webkit.org/show_bug.cgi?id=102747

        Reviewed by Adam Barth.

        $dataNode is misnamed. It should be $interface.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateInterface):
        (NeedsCustomOpaqueRootForGC):
        (GetGenerateIsReachable):
        (GetCustomIsReachable):
        (GenerateOpaqueRootForGC):
        (GenerateHeader):
        (GetInternalFields):
        (GenerateHeaderCustomInternalFieldIndices):
        (GenerateHeaderNamedAndIndexedPropertyAccessors):
        (GenerateHeaderCustomCall):
        (IsConstructable):
        (GenerateConstructorGetter):
        (GenerateNormalAttrGetter):
        (GenerateReplaceableAttrSetter):
        (GenerateNormalAttrSetter):
        (GenerateOverloadedFunctionCallback):
        (GenerateFunctionCallback):
        (GenerateArgumentsCountCheck):
        (GenerateOverloadedConstructorCallback):
        (GenerateSingleConstructorCallback):
        (GenerateConstructorCallback):
        (GenerateEventConstructorCallback):
        (GenerateTypedArrayConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateBatchedAttributeData):
        (IsStandardFunction):
        (GenerateNonStandardFunction):
        (GenerateImplementationIndexer):
        (GenerateImplementationNamedPropertyGetter):
        (GenerateImplementationCustomCall):
        (GenerateImplementationMasqueradesAsUndefined):
        (GenerateImplementation):
        (GenerateHeaderContentHeader):
        (GenerateImplementationContentHeader):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        (BaseInterfaceName):
        (GenerateToV8Converters):
        (GetNativeTypeForConversions):
        (GetTypeNameOfExternalTypedArray):
        (WriteData):

2012-11-19  Keishi Hattori  <keishi@webkit.org>

        Move in animation should be disabled until the calendar picker is loaded.
        https://bugs.webkit.org/show_bug.cgi?id=102661

        Reviewed by Kent Tamura.

        On weeks where the first day is in the previous month (e.x. 2013-W01)
        the move in animation happens when you open the calendar picker. This
        patch disables the move in animation until the calendar picker is fully
        loaded.

        No new tests.

        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker):
        (CalendarPicker.prototype._handleWindowResize):
        (DaysTable.prototype._startMoveInAnimation):

2012-11-19  Elliott Sprehn  <esprehn@chromium.org>

        Clean up loop in NodeRenderingContext::nextRenderer and previousRenderer
        https://bugs.webkit.org/show_bug.cgi?id=102743

        Reviewed by Hajime Morita.

        Clean up while (true) loops in NodeRenderingContext reducing the
        amount of code and the need for ASSERT_NOT_REACHED.

        No new tests, just simplifcation.

        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::nextRenderer):
        (WebCore::NodeRenderingContext::previousRenderer):

2012-11-19  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] attribute pseudo should return empty string instead of null when nothing is specified.
        https://bugs.webkit.org/show_bug.cgi?id=102753

        Reviewed by Hajime Morita.

        The ShadowDOM spec is changed so that attribute 'pseudo' returns empty string instead of null when
        no value is set.

        Test: fast/dom/shadow/pseudo-attribute.html

        * dom/Element.idl:

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        In CodeGeneratorGObject.pm we should rename $dataNode to $interface
        https://bugs.webkit.org/show_bug.cgi?id=102751

        Reviewed by Adam Barth.

        $dataNode is misnamed. It should be $interface.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetParentClassName):
        (GetParentGObjType):
        (GenerateProperties):
        (GenerateFunctions):
        (GenerateCFile):
        (GenerateEventTargetIface):
        (Generate):
        (WriteData):
        (GenerateInterface):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        In CodeGenerator.pm we should rename $dataNode to $interface
        https://bugs.webkit.org/show_bug.cgi?id=102754

        Reviewed by Adam Barth.

        $dataNode is misnamed. It should be $interface.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (ForAllParents):
        (AddMethodsConstantsAndAttributesFromParentInterfaces):
        (FindSuperMethod):
        (IsConstructorTemplate):
        (LinkOverloadedFunctions):
        (GenerateCompileTimeCheckForEnumsIfNeeded):
        (GetVisibleInterfaceName):
        (IsSubType):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        In CodeGeneratorCPP.pm we should rename $dataNode to $interface
        https://bugs.webkit.org/show_bug.cgi?id=102752

        Reviewed by Adam Barth.

        $dataNode is misnamed. It should be $interface.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateInterface):
        (GetParentImplClassName):
        (GetParent):
        (GenerateHeader):
        (GenerateImplementation):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        In CodeGeneratorJS.pm we should rename $dataNode to $interface
        https://bugs.webkit.org/show_bug.cgi?id=102748

        Reviewed by Adam Barth.

        $dataNode is misnamed. It should be $interface.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateInterface):
        (GetParentClassName):
        (GetGenerateIsReachable):
        (GetCustomIsReachable):
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):
        (GenerateHeaderContentHeader):
        (GenerateImplementationContentHeader):
        (ShouldGenerateToJSDeclaration):
        (ShouldGenerateToJSImplementation):
        (GenerateHeader):
        (GenerateAttributesHashTable):
        (GenerateOverloadedFunction):
        (GenerateImplementation):
        (GenerateArgumentsCountCheck):
        (GenerateParametersCheck):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        (WriteData):
        (GenerateConstructorDeclaration):
        (GenerateConstructorDefinition):
        (IsConstructable):

2012-11-19  Adam Barth  <abarth@webkit.org>

        [V8] Merge getCachedWrapper(Node*) into DOMDataStore
        https://bugs.webkit.org/show_bug.cgi?id=102158

        Reviewed by Eric Seidel.

        This patch is an incremental step towards fully merging the Node code
        path with the general code path. After this patch, at least Nodes flow
        through the same class.

        * Modules/indexeddb/IDBTransactionCoordinator.h:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateToV8Converters):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::getNode):
        (DOMDataStore):
        (WebCore::DOMDataStore::getWrapperFromObject):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore):
        * bindings/v8/DOMWrapperWorld.h:
        (WebCore):
        (DOMWrapperWorld):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        In the IDL parser, we should rename $dataNode to $interface
        https://bugs.webkit.org/show_bug.cgi?id=102746

        Reviewed by Adam Barth.

        $dataNode is misnamed. It should be $interface.

        No tests. No change in behavior.

        * bindings/scripts/IDLParser.pm:
        (parseInterface):
        (parseException):
        (parseAttributeOrOperationRest):
        (parseOperationOrIterator):
        (parseSpecialOperation):
        (parseInterfaceOld):
        (parseExceptionOld):
        (parseAttributeOrOperationOrIteratorOld):
        (parseAttributeOrOperationRestOld):
        (applyMemberList):
        (applyExtendedAttributeList):
        * bindings/scripts/generate-bindings.pl:
        * bindings/scripts/preprocess-idls.pl:
        (checkIDLAttributes):

2012-11-19  Adam Klein  <adamk@chromium.org>

        MutationObserver wrapper should not be collected while still observing
        https://bugs.webkit.org/show_bug.cgi?id=102328

        Reviewed by Adam Barth.

        Use the new opaqueRootForGC helper in V8GCController to put each
        MutationObserver wrapper in the same object group as the nodes it's
        observing.

        Only includes V8 impl for now, JSC impl coming soon.

        Tests: fast/mutation/observer-wrapper-dropoff-transient.html
               fast/mutation/observer-wrapper-dropoff.html

        * bindings/v8/V8GCController.cpp: Add custom code for MutationObserver
        with a FIXME to move this out once we update the opaque roots API.
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::getObservedNodes): Plumbing to expose the observed nodes
        to the GC controller.
        (WebCore):
        * dom/MutationObserver.h:
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet): More plumbing.
        (WebCore):
        * dom/MutationObserverRegistration.h:
        (MutationObserverRegistration):

2012-11-19  Tony Chang  <tony@chromium.org>

        Move more non-settings out of InternalSettings
        https://bugs.webkit.org/show_bug.cgi?id=102711

        Reviewed by Adam Barth.

        Remove userPreferredLanguages, setUserPreferredLanguages and allowRoundingHacks
        from internal.settings since they are already exposed by window.internals (in
        fact, no one calls the internal.settings version).

        Move setUsesOverlayScrollbars from internals.settings to internals because it is
        a global (static) setting and not tied to the lifetime of the Settings object.

        No new tests, there should be no behavior change since this is a refactor.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::reset): Remove custom reset code.
        (WebCore::InternalSettings::setUsesOverlayScrollbars): Add exception code handling to make it more consistent with other settings setters.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl: Remove unnecessary methods.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Reset userPreferredLanguages, allowRoundingHacks and overlay scrollbars.
        (WebCore::Internals::userPreferredLanguages): Don't go through InternalSettings.
        (WebCore::Internals::setUserPreferredLanguages): Don't go through InternalSettings.
        (WebCore::Internals::setUsesOverlayScrollbars): Moved from InternalsSettings.
        (WebCore::Internals::allowRoundingHacks): Don't go through InternalSettings.

2012-11-19  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Complex series of opens/deleteDatabase fails an ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=101810

        Reviewed by Tony Chang.

        Tests - storage/indexeddb/deletedatabase-delayed-by-versionchange.html

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        The condition tested by this assert is a valid state.

2012-11-19  Peter Wang  <peter.wang@torchmobile.com.cn>

        Web Inspector: [JSC] worker debugger shouldn't stop for "willExecuteProgram" instruction
        https://bugs.webkit.org/show_bug.cgi?id=102637

        Reviewed by Timothy Hatcher.

        Override the interface "willExecuteProgram" to let WorkerScriptDebugServer to avoid to stop for it.

        No new DRT test case. Sorry, so far it seems impossible to write a case to controle the popupped
        worker inspector window.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::createCallFrame):
        (WebCore::ScriptDebugServer::callEvent):
        (WebCore::ScriptDebugServer::willExecuteProgram):
        * bindings/js/ScriptDebugServer.h:
        (ScriptDebugServer):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::willExecuteProgram):
        (WebCore):
        * bindings/js/WorkerScriptDebugServer.h:
        (WorkerScriptDebugServer):

2012-11-19  Pratik Solanki  <psolanki@apple.com>

        For single element arrays use the pointer into the CFDataRef instead of copying data
        https://bugs.webkit.org/show_bug.cgi?id=102306

        Reviewed by Brent Fulgham.

        Address review comments for slightly nicer code.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::data):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::singleDataArrayBuffer):

2012-11-19  Chris Rogers  <crogers@google.com>

        Remove empirical bass-boost for HRTF spatialization
        https://bugs.webkit.org/show_bug.cgi?id=102745

        Reviewed by Kenneth Russell.

        Some empirically-based post-processing is being removed so that we'll
        now process with the exact HRTF impulse response measurements.
        Listening tests have determined that this post-processing is not necessary.

        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::HRTFKernel):
        * platform/audio/HRTFKernel.h:
        (WebCore::HRTFKernel::create):
        (HRTFKernel):

2012-11-19  Adam Barth  <abarth@webkit.org>

        DISALLOW_COPY_AND_ASSIGN is not a WebKit macro
        https://bugs.webkit.org/show_bug.cgi?id=102755

        Reviewed by Sam Weinig.

        WTF_MAKE_NONCOPYABLE is the idiom we use in WebKit.  I don't understand
        how this compiles.

        * Modules/indexeddb/IDBBackingStore.h:
        (RecordIdentifier):

2012-11-19  Chris Rogers  <crogers@google.com>

        Implement .detune attribute for BiquadFilterNode
        https://bugs.webkit.org/show_bug.cgi?id=102737

        Reviewed by Kenneth Russell.

        Similar to OscillatorNode, BiquadFilterNode must have a .detune attribute

        Tests changed: webaudio/biquad-lowpass.html

        * Modules/webaudio/BiquadDSPKernel.cpp:
        (WebCore::BiquadDSPKernel::updateCoefficientsIfNecessary):
        * Modules/webaudio/BiquadFilterNode.h:
        (WebCore::BiquadFilterNode::detune):
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::BiquadProcessor):
        (WebCore::BiquadProcessor::checkForDirtyCoefficients):
        * Modules/webaudio/BiquadProcessor.h:
        (WebCore::BiquadProcessor::parameter4):
        (BiquadProcessor):

2012-11-19  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Add WebCore::getRegistryValue()
        https://bugs.webkit.org/show_bug.cgi?id=97828

        Reviewed by Brent Fulgham.

        The new function adds an abstraction to SHGetValue(), which isn't available on WinCE.
        Changing the existing files allows us to share more code between WinCE and WinNT in a next step.

        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::mimeTypeForExtension):
        (WebCore):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        * platform/win/WindowsExtras.h:
        (WebCore::getRegistryValue):
        (WebCore):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginPathsFromRegistry):
        (WebCore::addWindowsMediaPlayerPluginDirectory):
        (WebCore::addQuickTimePluginDirectory):
        (WebCore::addAdobeAcrobatPluginDirectory):
        (WebCore::addJavaPluginDirectory):

2012-11-19  Alpha Lam  <hclam@chromium.org>

        Not reviewed. Build fix for Chromium.

        Added SkTypes.h includes for Windows.

        * platform/graphics/chromium/ImageDecodingStore.h:
        * platform/graphics/chromium/ImageFrameGenerator.h:
        * platform/graphics/chromium/LazyDecodingPixelRef.h:

2012-11-19  Adam Barth  <abarth@webkit.org>

        [V8] Simplify V8DOMWindowShell::getEntered
        https://bugs.webkit.org/show_bug.cgi?id=102156

        Reviewed by Eric Seidel.

        This patch is an incremental step towards merging
        V8DOMWrapper::getCachedWrapper(Node*) with the general case for looking
        up DOM wrappers. In order to merge with the general case, we need to
        get down to calling v8::Context::GetCurrent once, which means we need
        to factor the call to v8::Context::GetEntered out of V8DOMWindowShell.

        As a side-benefit to this change, we can remove some redundant checks
        for isolatedWorldsExist and v8::Context::InContext from callers of
        V8DOMWindowShell::getEntered, including in getCachedWrapper.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::shouldBypassMainWorldContentSecurityPolicy):
        (WebCore::ScriptController::currentWorldContext):
        * bindings/v8/V8DOMWindowShell.h:
        (WebCore::V8DOMWindowShell::isolated):
        (WebCore::V8DOMWindowShell::perContextData):
        (WebCore::V8DOMWindowShell::world):
        (V8DOMWindowShell):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):
        * bindings/v8/WorldContextHandle.cpp:
        (WebCore::WorldContextHandle::WorldContextHandle):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::dispatchWrapCustom):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::dispatchWrapCustom):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::V8SVGDocument::dispatchWrapCustom):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        Rename idlDocument::classes to idlDocument::interfaces in the IDL parser
        https://bugs.webkit.org/show_bug.cgi?id=102671

        Reviewed by Adam Barth.

        Most part of code generators use 'interface'. The spec uses 'interface'.
        Thus, the IDL parser should use 'interface' instead of 'class'.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        (AddMethodsConstantsAndAttributesFromParentInterfaces):
        (ParseInterface):
        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateFunctionCallback):
        * bindings/scripts/IDLParser.pm:
        (Parse):
        (parseModule):
        * bindings/scripts/generate-bindings.pl:

2012-11-19  Eric Carlson  <eric.carlson@apple.com>

        HTMLMediaElement::configureTextTracks should configure all text tracks
        https://bugs.webkit.org/show_bug.cgi?id=102561

        Reviewed by Philippe Normand.

        No new tests, track-mode-not-changed-by-new-track.html was updated to test the changes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackModeChanged): HTMLTrackElement -> TextTrack.
        (WebCore::HTMLMediaElement::willRemoveTrack): Ditto.
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Ditto.
        (WebCore::HTMLMediaElement::configureTextTracks): Ditto.
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured): Ditto.
        * html/HTMLMediaElement.h:

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement): Move hasBeenConfigured down to TextTrack.
        (WebCore::HTMLTrackElement::parseAttribute): isDefault is stored on TextTrack.
        (WebCore::HTMLTrackElement::ensureTrack): LoadableTextTrack constructor doesn't take 
            "default" argument.
        * html/HTMLTrackElement.h:

        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack): Initialize m_isDefault to false.
        * html/track/LoadableTextTrack.h: 
        (WebCore::TextTrack::isDefault): Override base class implementation, because a track element
            can be flagged as default.
        (WebCore::TextTrack::setIsDefault): Ditto.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Initialize m_hasBeenConfigured.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::hasBeenConfigured): New, moved from HTMLTrackElement so other code doesn't
            need know what type of track it is calling.
        (WebCore::TextTrack::setHasBeenConfigured): Ditto.
        (WebCore::TextTrack::isDefault): Base, do nothing, implementation because only LoadableTextTrack
            can be "default".
        (WebCore::TextTrack::setIsDefault): Ditto.

2012-11-19  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: refactor syncCanvas to handle the lifecycle clearly.
        https://bugs.webkit.org/show_bug.cgi?id=102664

        Reviewed by Noam Rosenthal.

        As refactoring Coordinated Graphics in WebKit2, code related to
        TextureMapper is changed.

        No new tests. Refactoring only.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::platformLayerSize):
            We need to know the size of a texture mapper platform layer.
        (WebCore):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
          Because CoordinatedGraphicsLayer handles the canvas GraphicsSurface
          lifecycle, TextureMapperSurfaceBackingStore does not need to know
          GraphicsSurfaceToken.
        (WebCore::TextureMapperSurfaceBackingStore::setGraphicsSurface):
        (WebCore::TextureMapperSurfaceBackingStore::swapBuffersIfNeeded):
        (WebCore::TextureMapperSurfaceBackingStore::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (TextureMapperSurfaceBackingStore):
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (WebCore::TextureMapperPlatformLayer::platformLayerSize):

2012-11-19  Alpha Lam  <hclam@chromium.org>

        [chromium] Lazy image decoding without cache
        https://bugs.webkit.org/show_bug.cgi?id=102021

        Reviewed by Stephen White.

        Goal of this change is to make image decoding in ImageFrameGenerator
        completely lazy without caching. Image decoding logic is then removed
        from ImageDecodingStore.

        These methods are removed.
        - ImageDecodingStore::lockPixels
        - ImageDecodingStore::unlockPixels

        Instead image decoding and scaling is done in
        ImageFrameGenerator::decodeAndScale().

        Unit tests are updated:
        DeferredImageDecoderTest::drawIntoSkPicture
        DeferredImageDecoderTest::drawScaledIntoSkPicture

        Also covered by layout tests:
        platform/chromium/virtual/deferred

        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::createLazyDecodingBitmap):
        * platform/graphics/chromium/ImageDecodingStore.h:
        (ImageDecodingStore):
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::~ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::setData):
        (WebCore::ImageFrameGenerator::decodeAndScale):
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (WebCore::ImageFrameGenerator::create):
        (ImageFrameGenerator):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp:
        (WebCore::LazyDecodingPixelRef::onLockPixels):
        (WebCore::LazyDecodingPixelRef::onUnlockPixels):
        * platform/graphics/chromium/LazyDecodingPixelRef.h:
        (LazyDecodingPixelRef):

2012-11-19  Abhishek Arya  <inferno@chromium.org>

        Crash in ApplyStyleCommand::cleanupUnstyledAppleStyleSpans.
        https://bugs.webkit.org/show_bug.cgi?id=100150

        Reviewed by Ryosuke Niwa.

        RefPtr startDummySpanAncestor and endDummySpanAncestor since
        they can go away inside fixRangeAndApplyInlineStyle call.

        Test: editing/style/apply-style-crash.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):

2012-11-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135172.
        http://trac.webkit.org/changeset/135172
        https://bugs.webkit.org/show_bug.cgi?id=102710

        Broke some WebKit2 api tests :( (Requested by japhet on
        #webkit).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::clearMainResourceLoader):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::documentURL):
        (WebCore::DocumentLoader::isLoadingMainResource):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        (DocumentLoader):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        * loader/FrameLoaderStateMachine.cpp:
        (WebCore::FrameLoaderStateMachine::FrameLoaderStateMachine):
        * loader/FrameLoaderStateMachine.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::shouldLoadAsEmptyDocument):
        (WebCore):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::handleEmptyLoad):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):

2012-11-19  Tony Chang  <tony@chromium.org>

        Remove 'is' prefix from WebSettings::isWebSecurityEnabled and WebSettings::isSpatialNavigationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=102548

        Reviewed by Adam Barth.

        This allows us to use Settings.in to generate the code for this.

        I didn't rename any of the WebKit API methods with similar names because that would
        probably break consumers.  It turns out that the getter is only called from
        Source/WebKit/efl (most of the time, WebPreferences just sets values on Settings).

        No new tests, just a refactor.

        * WebCore.exp.in: Remove symbols that are now inlined.
        * WebCore.order: Remove symbols that are now inlined.
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Rename.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Remove code since it will be generated.
        * page/Settings.h:
        (Settings): Remove code since it will be generated.
        * page/Settings.in: Add entries to be generated.
        * page/SpatialNavigation.cpp:
        (WebCore::isSpatialNavigationEnabled): Fix caller.

2012-11-19  Yael Aharon  <yael.aharon@intel.com>

        [EFL][TexMap] Complie error when considering warnings as errors
        https://bugs.webkit.org/show_bug.cgi?id=102705

        Reviewed by Kenneth Rohde Christiansen.

        Change GaussianKernelHalfWidth to unsigned.

        No new tests.

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

2012-11-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134830.
        http://trac.webkit.org/changeset/134830
        https://bugs.webkit.org/show_bug.cgi?id=102701

        ActiveDOMObject is not applicable to MutationObservers due to
        being tied to a Document (Requested by aklein on #webkit).

        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverConstructor::constructJSMutationObserver):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallback):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::create):
        (WebCore::MutationObserver::MutationObserver):
        (WebCore::MutationObserver::observationStarted):
        (WebCore::MutationObserver::observationEnded):
        * dom/MutationObserver.h:
        (WebCore):
        * dom/MutationObserver.idl:

2012-11-19  Brady Eidson  <beidson@apple.com>

        NetworkProcess Authentication.
        https://bugs.webkit.org/show_bug.cgi?id=102592

        Reviewed by Alexey Proskuryakov.

        Change an ASSERT that assumes there should be a resource handle which is not true with the NetworkProcess.

        Also export some more stuff.

        No new tests (Platform support, no effect in tested configs).

        * WebCore.exp.in:

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge): Only ASSERT that the handle has a challenge if
          there is a handle.

2012-11-19  Alec Flett  <alecflett@chromium.org>

        IndexedDB: simplify RecordIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=102018

        Reviewed by Tony Chang.

        Make IDBBackingStore's RecordIdentifier be a simple
        class, existing only as an inline or stack-based instance.
        This makes much of the copy semantics more explicit, and
        removes refcounting from an object that only ever had a refcount
        of 1 or 2.

        No new tests, just a refactor.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::putRecord):
        (WebCore::IDBBackingStore::deleteRecord):
        (WebCore::IDBBackingStore::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBBackingStore::deleteIndexDataForRecord):
        (WebCore::ObjectStoreKeyCursorImpl::loadCurrentRow):
        (ObjectStoreCursorImpl):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):
        (WebCore::IndexKeyCursorImpl::recordIdentifier):
        (WebCore::IndexCursorImpl::recordIdentifier):
        * Modules/indexeddb/IDBBackingStore.h:
        (WebCore::IDBBackingStore::RecordIdentifier::RecordIdentifier):
        (WebCore::IDBBackingStore::RecordIdentifier::isValid):
        (WebCore::IDBBackingStore::RecordIdentifier::reset):
        (RecordIdentifier):
        (IDBBackingStore):
        (WebCore::IDBBackingStore::Cursor::recordIdentifier):
        (WebCore::IDBBackingStore::Cursor::Cursor):
        (Cursor):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):

2012-11-19  Alexander Shalamov  <alexander.shalamov@intel.com>

        Improve ContentTypeParser, so that it could be used to validate mime type according to RFC
        https://bugs.webkit.org/show_bug.cgi?id=100927

        Reviewed by Alexey Proskuryakov.

        This patch adds ParsedContentType class that represents contents of parsed
        content type string. isValidContentType function could be used to check if
        format of the content type string is acorrding to RFC 2616 section 4.2.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/MIMEHeader.cpp:
        (WebCore::MIMEHeader::parseHeader):
        * platform/network/ParsedContentType.cpp: Renamed from Source/WebCore/platform/network/ContentTypeParser.cpp.
        (WebCore):
        (EmptyParsedContentType):
        (WebCore::EmptyParsedContentType::setContentType):
        (WebCore::EmptyParsedContentType::setContentTypeParameter):
        (WebCore::skipSpaces):
        (WebCore::isTokenCharacter):
        (WebCore::parseToken):
        (WebCore::parseQuotedString):
        (WebCore::substringForRange):
        (WebCore::parseContentType):
        (WebCore::isValidContentType):
        (WebCore::ParsedContentType::ParsedContentType):
        (WebCore::ParsedContentType::charset):
        (WebCore::ParsedContentType::parameterValueForName):
        (WebCore::ParsedContentType::parameterCount):
        (WebCore::ParsedContentType::setContentType):
        (WebCore::ParsedContentType::setContentTypeParameter):
        * platform/network/ParsedContentType.h: Renamed from Source/WebCore/platform/network/ContentTypeParser.h.
        (WebCore):
        (ParsedContentType):
        (WebCore::ParsedContentType::mimeType):

2012-11-19  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: InvalidNodeTypeError
        https://bugs.webkit.org/show_bug.cgi?id=102519

        Reviewed by Kentaro Hara.

        Patch 24 of 25 to update DOMException name to match the spec and Firefox.

        No code uses DOMException InvalidNodeTypeError. We do use INVALID_NODE_TYPE_ERR for RangeException. See bug 102515.

        * dom/DOMCoreException.cpp:

2012-11-19  Shinya Kawanaka  <shinyak@chromium.org>

        Changing id, className, or attribute should invalidate distribution
        https://bugs.webkit.org/show_bug.cgi?id=100738

        Reviewed by Dimitri Glazkov.

        When id, className, or attribute is changed, we might have to invalidate distribution.
        However, we don't want to do useless invalidation. So we consult with the RuleFeatureSet of ElementShadow
        to invalidate distribution only if necessary.

        For the code that className is changed, we can share a lot of code between invalidating distribution and
        invalidating style. So we made checkNeedsStyleInvalidationForClassChange a template method, and share it.

        Since attributeChanged() is a hot method, we don't want to make it slow. So we made one function to determine
        whether we have to invalidate distribution, and make it called only if necessary. Also, we've optimized
        shadowOfParentForDistribution() by making isInsertionPoint() de-virtualed. We consuded NodeFlags (IsInsertionPointFlag)
        for this purpose.

        We've measured how this patch makes changing attribute slow. I've measured each code 3 times.
        DOM/ModifyAttribute.html is a micro benchmark which changes attribute a lot of times. The result of this benchmark
        will be the most affected by this patch. However, it's only 2% performance regression.

        DOM/ModifyAttribute.html
        Before this patch:
                median  stdev    min    max    [ms]
          1st    494.0   3.36  490.0  502.0
          2nd    503.5   3.44  497.0  512.0
          3rd    494.0   3.48  488.0  499.0

        After this patch:
                median  stdev  min      max    [ms]
          1st    504.0   2.00  501.0  509.0
          2nd    505.5   3.08  500.0  513.0
          3rd    507.0   2.32  502.0  510.0

        Tests: fast/dom/shadow/distribution-attribute-modified.html
               fast/dom/shadow/distribution-className-modified.html
               fast/dom/shadow/distribution-id-modified.html
               fast/dom/shadow/reprojection-attribute-modified.html
               fast/dom/shadow/reprojection-className-modified.html
               fast/dom/shadow/reprojection-id-modified.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::HasSelectorForClassStyleFunctor::HasSelectorForClassStyleFunctor):
        (HasSelectorForClassStyleFunctor):
        (WebCore::HasSelectorForClassStyleFunctor::operator()): Returns true if StyleResolver::hasSelectorForClass returns true.
        (WebCore):
        (WebCore::HasSelectorForClassDistributionFunctor::HasSelectorForClassDistributionFunctor):
        (HasSelectorForClassDistributionFunctor):
        (WebCore::HasSelectorForClassDistributionFunctor::operator()): Returns true if ElementShadow::hasSelectForClass returns true.
        (WebCore::checkFunctorForClassChange):
        (WebCore::checkNeedsStyleInvalidationForClassChange):
        (WebCore::checkNeedsDistributionInvalidationForClassChange): Extracted the implementation to checkFunctorForClassChange.
        (WebCore::Element::shouldInvalidateDistributionWhenAttributeChanged):
        * dom/Element.h:
        (Element):
        * dom/Node.h:
        (WebCore::Node::isInsertionPoint):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        (WebCore::isInsertionPoint):
        (WebCore::shadowOfParentForDistribution):
        (WebCore::resolveReprojection):

2012-11-19  Nate Chapin  <japhet@chromium.org>

        Move empty loading to DocumentLoader, simplify FrameLoader::init()
        https://bugs.webkit.org/show_bug.cgi?id=101512

        Reviewed by Adam Barth.

        No new tests, though several outputs changed because we no longer send resource
            load callbacks for empty loads.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::clearMainResourceLoader):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::isLoadingMainResource):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        (WebCore):
        (WebCore::DocumentLoader::startLoadingMainResource): Handle empty main resource
             loads directly here.
        * loader/DocumentLoader.h:
        (DocumentLoader):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Initialize some variables whose values
            were previously being reset in init(). Given that the FrameLoader is in
            an inconsistent state before init() is called anyway, there doesn't seem
            to be a disadvantage to just initializing them to their post-init() values.
        (WebCore::FrameLoader::init): Just call startLoadingMainResource(), instead of
            doing a bunch of direct calls to functions FrameLoader shouldn't know about.
        * loader/FrameLoaderStateMachine.cpp:
        (WebCore::FrameLoaderStateMachine::FrameLoaderStateMachine):
        * loader/FrameLoaderStateMachine.h:
        * loader/MainResourceLoader.cpp: Throughout, remove the concept of an empty load.
        (WebCore::MainResourceLoader::loadNow): This only returned true when an empty
            load got deferred, which won't happen now. Return void and always treat
            as returning false.
        * loader/MainResourceLoader.h:
        (MainResourceLoader):

2012-11-19  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: TimeoutError
        https://bugs.webkit.org/show_bug.cgi?id=102513

        Reviewed by Kentaro Hara.

        Patch 23 of 25 to update DOMException name to match the spec and Firefox.

        No code uses DOMException TimeoutError. We do use TIMEOUT_ERR for XMLHttpRequestException. See bug 102506.

        * dom/DOMCoreException.cpp:

2012-11-19  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: DataCloneError
        https://bugs.webkit.org/show_bug.cgi?id=102521

        Reviewed by Kentaro Hara.

        Patch 25 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-19  Tom Hudson  <tomhudson@chromium.org>

        Improve performance of RenderBoxModelObject::paintTranslucentBorderSides()
        https://bugs.webkit.org/show_bug.cgi?id=98660

        Reviewed by Simon Fraser.

        Accumulate edges[i].shouldRender() in a flag field and pass that to paintBorderSides()
        and paintTranslucentBorderSides() so that we don't do unnecessary work.

        If we can avoid setting up and tearing down an unnecessary transparent layer we save
        30ms on some mobile platforms.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):

2012-11-19  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] remove null exclusion shape check from ExclusionShape::createExclusionShape
        https://bugs.webkit.org/show_bug.cgi?id=100765

        Reviewed by Dirk Schulze.

        ExclusionShape::createExclusionShape now ASSERTs that its basicShape argument
        isn't null, since the caller is expected to ensure as much.  No new tests were
        needed since this is a near-trivial cleanup.

        * rendering/ExclusionShape.cpp:
        (WebCore::ExclusionShape::createExclusionShape): This method no longer defends against a null basicShape argument by returning null.

2012-11-19  Sami Kyostila  <skyostil@chromium.org>

        Use device scale factor instead of physical screen DPI for screen DPI
        https://bugs.webkit.org/show_bug.cgi?id=101769

        Reviewed by Adam Barth.

        Media queries call WebCore::Screen::{horizontal,vertical}DPI() to determine
        the dots per CSS inch[1] value for the "screen" media type. On Chromium these
        functions currently return the physical screen DPI, which is wrong. To fix
        this, we remove both of these functions entirely and make media queries use
        the device scale factor multiplied by 96 on all ports.

        [1] http://www.w3.org/TR/css3-mediaqueries/#resolution0

        * page/Screen.cpp:
        (WebCore::Screen::horizontalDPI):
        (WebCore::Screen::verticalDPI):
        * platform/PlatformScreen.h:
        (WebCore):
        * platform/blackberry/PlatformScreenBlackBerry.cpp:
        * platform/chromium/PlatformScreenChromium.cpp:
        * platform/efl/PlatformScreenEfl.cpp:
        * platform/gtk/PlatformScreenGtk.cpp:
        * platform/mac/PlatformScreenMac.mm:
        * platform/qt/PlatformScreenQt.cpp:
        * platform/win/PlatformScreenWin.cpp:
        * platform/wx/ScreenWx.cpp:

2012-11-19  Julien Chaffraix  <jchaffraix@webkit.org>

        Computed grid items' positions shouldn't be using Length
        https://bugs.webkit.org/show_bug.cgi?id=102537

        Reviewed by Tony Chang.

        This change refactors how we store the grid items' position to use
        a new type GridPosition. Length was a temporary type as it supported
        'auto' | <integer> but it was starting to get more and more confusing
        as we were implementing the layout routines.

        No change in behavior.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added the new file to the build systems.

        * rendering/style/RenderStyle.h:
        Updated after the type change. Also made some getters
        return a const reference instead of forcing a copy.

        * rendering/style/StyleGridItemData.h:
        (StyleGridItemData):
        Ditto, also removed a comment about adding a new type.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridPosition):
        * css/StyleResolver.cpp:
        (WebCore::createGridPosition):
        (WebCore::StyleResolver::applyProperty):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPosition):
        Updated these sites after switching to GridPosition.

        * rendering/RenderGrid.h:
        Changed resolveGridPosition signature: it now takes a GridPosition.

        * rendering/style/GridPosition.h: Added.
        (WebCore::GridPosition::GridPosition):
        Default constructor, creates an 'auto' position.

        (WebCore::GridPosition::isPositive):
        (WebCore::GridPosition::type):
        (WebCore::GridPosition::isAuto):
        (WebCore::GridPosition::setIntegerPosition):
        (WebCore::GridPosition::integerPosition):
        Helper functions.

        (WebCore::GridPosition::operator==):
        Required comparison operator for StyleGridItemData.

2012-11-19  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Apply the resolved viewport rules
        https://bugs.webkit.org/show_bug.cgi?id=95964

        Reviewed by Kenneth Rohde Christiansen.

        This patch implements the CSS Device Adaptation specification. The
        WebKit implementation relies on the already implemented Viewport Meta
        infrastructure to notify the browser of viewport changes.

        The implementation was tests with success on the Qt and EFL ports, but
        basically every port supporting Viewport Meta should be fine.

        The usage of @-webkit-viewport inside media queries (more tests coming
        to map all the corner cases) is currently limited when the media query
        depends on the viewport dimensions itself. Defining the width and height
        based on screen size will fail on ports reporting the screen
        size as the size of the browser window instead of the device screen.

        Tests: css3/device-adapt/opera/cascading-001.xhtml
               css3/device-adapt/opera/cascading-002.xhtml
               css3/device-adapt/opera/cascading-003.xhtml
               css3/device-adapt/opera/cascading-004.xhtml
               css3/device-adapt/opera/constrain-001.xhtml
               css3/device-adapt/opera/constrain-002.xhtml
               css3/device-adapt/opera/constrain-003.xhtml
               css3/device-adapt/opera/constrain-004.xhtml
               css3/device-adapt/opera/constrain-005.xhtml
               css3/device-adapt/opera/constrain-006.xhtml
               css3/device-adapt/opera/constrain-007.xhtml
               css3/device-adapt/opera/constrain-008.xhtml
               css3/device-adapt/opera/constrain-009.xhtml
               css3/device-adapt/opera/constrain-010.xhtml
               css3/device-adapt/opera/constrain-011.xhtml
               css3/device-adapt/opera/constrain-012.xhtml
               css3/device-adapt/opera/constrain-013.xhtml
               css3/device-adapt/opera/constrain-014.xhtml
               css3/device-adapt/opera/constrain-015.xhtml
               css3/device-adapt/opera/constrain-016.xhtml
               css3/device-adapt/opera/constrain-017.xhtml
               css3/device-adapt/opera/constrain-020.xhtml
               css3/device-adapt/opera/syntax-001.xhtml
               css3/device-adapt/opera/syntax-002.xhtml
               css3/device-adapt/opera/syntax-003.xhtml

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRulesFromSheet):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::StyleResolver::~StyleResolver):
        * css/StyleResolver.h:
        (StyleResolver):
        (WebCore::StyleResolver::viewportStyleResolver):
        * css/ViewportStyleResolver.cpp: Added.
        (WebCore):
        (WebCore::ViewportStyleResolver::ViewportStyleResolver):
        (WebCore::ViewportStyleResolver::addViewportRule):
        (WebCore::ViewportStyleResolver::clearDocument):
        (WebCore::ViewportStyleResolver::resolve):
        (WebCore::ViewportStyleResolver::getViewportArgumentValue):
        * css/ViewportStyleResolver.h: Added.
        (WebCore):
        (ViewportStyleResolver):
        (WebCore::ViewportStyleResolver::create):
        * dom/Document.h:
        (WebCore::Document::setViewportArguments):
        * dom/ViewportArguments.cpp:
        (WebCore::compareIgnoringAuto):
        (WebCore):
        (WebCore::ViewportArguments::resolve):
        * dom/ViewportArguments.h:
        (ViewportAttributes):
        (WebCore::ViewportArguments::ViewportArguments):
        (ViewportArguments):
        (WebCore::ViewportArguments::operator==):

2012-11-19  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: SecurityError
        https://bugs.webkit.org/show_bug.cgi?id=102437

        Reviewed by Kentaro Hara.

        Patch 18 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-19  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: URLMismatchError
        https://bugs.webkit.org/show_bug.cgi?id=102511

        Reviewed by Kentaro Hara.

        Patch 21 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:
        (WebCore):

2012-11-19  Kihong Kwon  <kihong.kwon@samsung.com>

        Add PROXIMITY_EVENTS feature
        https://bugs.webkit.org/show_bug.cgi?id=102658

        Reviewed by Kentaro Hara.

        Add PROXIMITY_EVENTS feature to xcode project for WebCorei and GNU make.

        No new tests. Just add a new feature.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.features.am:

2012-11-19  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Dim a component's subitems' color in NMI snapshot
        https://bugs.webkit.org/show_bug.cgi?id=102224

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotNode.prototype._createSizeCell):
        * inspector/front-end/nativeMemoryProfiler.css:
        (.native-snapshot-view .data-grid .dimmed div.size-bar):

2012-11-19  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: NetworkError
        https://bugs.webkit.org/show_bug.cgi?id=102503

        Reviewed by Kentaro Hara.

        Patch 19 of 25 to update DOMException name to match the spec and Firefox.

        No code uses DOMException NetworkError. We do use NETWORK_ERR for XMLHttpRequestException. See bug 102506.

        * dom/DOMCoreException.cpp:

2012-11-19  Ilya Tikhonovsky  <loislo@chromium.org>

        webaudio: clean-up. Replace AudioContext::m_document member with ContextDestructionObserver::scriptExecutionContext().
        https://bugs.webkit.org/show_bug.cgi?id=102649

        Reviewed by Adam Barth.

        AudioContext uses m_document only as a pointer to ScriptExecutionContext.
        It could be safely replaced with ContextDestructionObserver::m_scriptExecutionContext.
        The lifetime of m_scriptExecutionContext is slightly different but it could be adjusted by m_isStopScheduled flag.

        No new tests as there is no new functionality.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::stop):
        (WebCore::AudioContext::scriptExecutionContext):
        (WebCore::AudioContext::fireCompletionEvent):
        (WebCore::AudioContext::reportMemoryUsage):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::fireProcessEvent):
        (WebCore::ScriptProcessorNode::scriptExecutionContext):

2012-11-19  Ilya Tikhonovsky  <loislo@chromium.org>

        webaudio: leak: AudioContext objects are leaking. They retain 36mb of shared data.
        https://bugs.webkit.org/show_bug.cgi?id=102356

        Reviewed by Adam Barth.

        A clean-up code was moved from uninitialize to clear method.
        AudioContext marks itself as hasPendingActivity in method constructCommon and unmarks itself in method clear.
        m_isStopScheduled filters out second ActiveDOMObject::stop call.
        markForDeletion appends AudioNode pointer to m_nodesToDelete array if there is no active audio thread.
        adoptRef was added in createOfflineContext method.
        A guard was added into deleteMarkedNodes.

        Test: inspector-protocol/nmi-webaudio-leak-test.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createOfflineContext):
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::constructCommon):
        (WebCore::AudioContext::~AudioContext):
        (WebCore::AudioContext::clear):
        (WebCore::AudioContext::uninitialize):
        (WebCore::AudioContext::stopDispatch):
        (WebCore::AudioContext::stop):
        (WebCore::AudioContext::markForDeletion):
        (WebCore::AudioContext::scheduleNodeDeletion):
        (WebCore::AudioContext::deleteMarkedNodes):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore::PlatformMemoryInstrumentation::reportMemoryUsage):
        (WebCore):
        * platform/PlatformMemoryInstrumentation.h:
        (PlatformMemoryInstrumentation):
        (WebCore):

2012-11-19  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: QuotaExceededError
        https://bugs.webkit.org/show_bug.cgi?id=102512

        Reviewed by Kentaro Hara.

        Patch 22 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-19  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: AbortError
        https://bugs.webkit.org/show_bug.cgi?id=102508

        Reviewed by Kentaro Hara.

        Patch 20 of 25 to update DOMException name to match the spec and Firefox.

        No code uses DOMException AbortError. We do use ABORT_ERR for XMLHttpRequestException. See bug 102506.

        * dom/DOMCoreException.cpp:

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r135111.
        http://trac.webkit.org/changeset/135111
        https://bugs.webkit.org/show_bug.cgi?id=102356

        The patch caused crashes in several layout tests

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createOfflineContext):
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::constructCommon):
        (WebCore::AudioContext::~AudioContext):
        (WebCore::AudioContext::uninitialize):
        (WebCore::AudioContext::uninitializeDispatch):
        (WebCore::AudioContext::stop):
        (WebCore::AudioContext::markForDeletion):
        (WebCore::AudioContext::scheduleNodeDeletion):
        (WebCore::AudioContext::deleteMarkedNodes):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore):
        * platform/PlatformMemoryInstrumentation.h:

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r135116.
        http://trac.webkit.org/changeset/135116
        https://bugs.webkit.org/show_bug.cgi?id=102649

        Revert this patch to revert r135111, which caused crashes in
        several layout tests

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::stop):
        (WebCore::AudioContext::document):
        (WebCore):
        (WebCore::AudioContext::hasDocument):
        (WebCore::AudioContext::scriptExecutionContext):
        (WebCore::AudioContext::fireCompletionEvent):
        (WebCore::AudioContext::reportMemoryUsage):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::fireProcessEvent):
        (WebCore::ScriptProcessorNode::scriptExecutionContext):

2012-11-19  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Refine JsDoc in DebuggerScriptMapping.js
        https://bugs.webkit.org/show_bug.cgi?id=102673

        Reviewed by Vsevolod Vlasov.

        DebuggerScriptMapping calls public method "addScript" not defined
        in SourceMapping interface.

        To make things clear I've added ScriptSourceMapping interface that
        extends SourceMapping interface by adding "addScript" method.

        * inspector/front-end/SourceMapping.js: Added "ScriptSourceMapping".
        * inspector/front-end/CompilerScriptMapping.js:
        Updated "@implements" to ScriptSourceMapping.
        * inspector/front-end/ResourceScriptMapping.js: Ditto.
        * inspector/front-end/ScriptSnippetModel.js: Ditto.
        * inspector/front-end/DebuggerScriptMapping.js: Updated signatures.
        Removed useless code.

2012-11-19  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, untested build fix.

        * bindings/scripts/IDLParser.pm:
        (parseModule):

2012-11-19  Dongwoo Joshua Im  <dw.im@samsung.com>

        [CSS3] Move CSSPropertyWebkitTextAlignLast into isValidKeywordPropertyAndValue function
        https://bugs.webkit.org/show_bug.cgi?id=102303

        Reviewed by Alexis Menard.

        Move the part which check whether CSSPropertyWebkitTextAlignLast has available value
        into the isValidKeywordPropertyAndValue function, like the same kind of properties.
        This will help speed wise in JS.

        No new functionality, no new tests.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):

2012-11-19  Keishi Hattori  <keishi@webkit.org>

        REGRESSION (r133565): Calendar picker isn't animating when changing month by pressing 't'
        https://bugs.webkit.org/show_bug.cgi?id=102660

        Reviewed by Kent Tamura.

        The calendar picker used to animate when you press 't'.

        No new tests.

        * Resources/pagepopups/calendarPicker.js:
        (DaysTable.prototype.selectRange):

2012-11-19  Kent Tamura  <tkent@chromium.org>

        input.value="" should clear date/time input elements with partial values
        https://bugs.webkit.org/show_bug.cgi?id=102645

        Reviewed by Kentaro Hara.

        Tests: fast/forms/date-multiple-fields/date-multiple-fields-value-set-empty.html
               fast/forms/datetime-multiple-fields/datetime-multiple-fields-value-set-empty.html
               fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-value-set-empty.html
               fast/forms/month-multiple-fields/month-multiple-fields-value-set-empty.html
               fast/forms/time-multiple-fields/time-multiple-fields-value-set-empty.html
               fast/forms/week-multiple-fields/week-multiple-fields-value-set-empty.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::setValue):
        If the new value is an empty string and sub-fields has values, we should
        update the UI value to the empty state.
        * html/DateTimeFieldsState.h:
        (WebCore::DateTimeFieldsState::hasAnyValue):
        Added. It returns true if one or more sub-fields are not empty.

2012-11-19  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] if many canvases are being instrumented show the screenshot of the first one
        https://bugs.webkit.org/show_bug.cgi?id=102522

        Reviewed by Yury Semikhatsky.

        When many canvases are being instrumented we'll want to show replay screenshots for each canvas.
        Meanwhile, show the screenshot of the first one (instead of the last one), as it's likely to be the "main" canvas.
        Drive-by: add more typification for the JS compiler.
        Drive-by: create a new canvas for WebGL replay every time (similar to 2D replay) to avoid problems with resetting the context state.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        Remove IDLStructure.pm
        https://bugs.webkit.org/show_bug.cgi?id=102642

        Reviewed by Adam Barth.

        Previously IDLStructure.pm was full of regular expressions to
        parse IDL files. Now a new IDL parser is implemented, IDLStructure.pm
        just contains several data structures for the IDL parser. We can
        move them to IDLParser.pm and thus remove IDLStructure.pm.

        No tests. No change in generated code.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.vcproj/MigrateScripts:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/IDLParser.pm:
        (Parse):
        (parseInterface):
        (parseException):
        (parseConst):
        (parseAttributeRest):
        (parseOperationRest):
        (parseOptionalOrRequiredArgument):
        (parseExceptionField):
        (parseInterfaceOld):
        (parseExceptionOld):
        (parseAttributeRestOld):
        (applyExtendedAttributeList):
        * bindings/scripts/IDLStructure.pm: Removed.

2012-11-19  Alexei Filippov  <alph@chromium.org>

        Web Inspector: refine time and bytes output formatting
        https://bugs.webkit.org/show_bug.cgi?id=102265

        Reviewed by Yury Semikhatsky.

        Add a space between number and unit, otherwise it's hard to read things like 88B.
        Reduce a number of decimal digits in KB and MB formats. 1023.45KB seems to be too detailed.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable.prototype._createGridNode):
        * inspector/front-end/UIUtils.js:
        (Number.secondsToString):
        (Number.bytesToString):

2012-11-19  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: DomContentLoaded event labeled incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=102383

        Reviewed by Yury Semikhatsky.

        Fixed string presentation of event.

        * inspector/front-end/TimelinePresentationModel.js: Fixed string.

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        Remove IDLStructure.pm
        https://bugs.webkit.org/show_bug.cgi?id=102642

        Reviewed by Adam Barth.

        Previously IDLStructure.pm was full of regular expressions to
        parse IDL files. Now a new IDL parser is implemented, IDLStructure.pm
        just contains several data structures for the IDL parser. We can
        move them to IDLParser.pm and thus remove IDLStructure.pm.

        No tests. No change in generated code.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.vcproj/MigrateScripts:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/IDLParser.pm:
        (Parse):
        (parseInterface):
        (parseException):
        (parseConst):
        (parseAttributeRest):
        (parseOperationRest):
        (parseOptionalOrRequiredArgument):
        (parseExceptionField):
        (parseInterfaceOld):
        (parseExceptionOld):
        (parseAttributeRestOld):
        (applyExtendedAttributeList):
        * bindings/scripts/IDLStructure.pm: Removed.

2012-11-19  Alexei Filippov  <alph@chromium.org>

        Web Inspector: refine time and bytes output formatting
        https://bugs.webkit.org/show_bug.cgi?id=102265

        Reviewed by Yury Semikhatsky.

        Add a space between number and unit, otherwise it's hard to read things like 88B.
        Reduce a number of decimal digits in KB and MB formats. 1023.45KB seems to be too detailed.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable.prototype._createGridNode):
        * inspector/front-end/UIUtils.js:
        (Number.secondsToString):
        (Number.bytesToString):

2012-11-19  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: DomContentLoaded event labeled incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=102383

        Reviewed by Yury Semikhatsky.

        Fixed string presentation of event.

        * inspector/front-end/TimelinePresentationModel.js: Fixed string.

2012-11-19  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r135114.
        http://trac.webkit.org/changeset/135114
        https://bugs.webkit.org/show_bug.cgi?id=102642

        it broke Qt build

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.vcproj/MigrateScripts:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/IDLParser.pm:
        (Parse):
        (parseInterface):
        (parseException):
        (parseConst):
        (parseAttributeRest):
        (parseOperationRest):
        (parseOptionalOrRequiredArgument):
        (parseExceptionField):
        (parseInterfaceOld):
        (parseExceptionOld):
        (parseAttributeRestOld):
        (applyExtendedAttributeList):
        * bindings/scripts/IDLStructure.pm: Added.

2012-11-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed inspector closure compilation fix.

        * inspector/front-end/ObjectPropertiesSection.js:
        * inspector/front-end/externs.js:

2012-11-18  Ilya Tikhonovsky  <loislo@chromium.org>

        webaudio: clean-up. Replace AudioContext::m_document member with ContextDestructionObserver::scriptExecutionContext().
        https://bugs.webkit.org/show_bug.cgi?id=102649

        Reviewed by Adam Barth.

        AudioContext uses m_document only as a pointer to ScriptExecutionContext.
        It could be safely replaced with ContextDestructionObserver::m_scriptExecutionContext.
        The lifetime of m_scriptExecutionContext is slightly different but it could be adjusted by m_isStopScheduled flag.

        No new tests as there is no new functionality.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::stop):
        (WebCore::AudioContext::fireCompletionEvent):
        (WebCore::AudioContext::reportMemoryUsage):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::scriptExecutionContext):
        (AudioContext):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::fireProcessEvent):
        (WebCore::ScriptProcessorNode::scriptExecutionContext):

2012-11-18  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove unused variables from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=102648

        Reviewed by Adam Barth.

        No tests. No change in generated code.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateInterface):
        (GenerateHeader):
        (GetInternalFields):
        (GenerateNormalAttrGetter):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementationCustomCall):
        (GenerateFunctionCallString):
        (CreateCustomSignature):
        (GetContextEnableFunction):

2012-11-18  Kentaro Hara  <haraken@chromium.org>

        Remove IDLStructure.pm
        https://bugs.webkit.org/show_bug.cgi?id=102642

        Reviewed by Adam Barth.

        Previously IDLStructure.pm was full of regular expressions to
        parse IDL files. Now a new IDL parser is implemented, IDLStructure.pm
        just contains several data structures for the IDL parser. We can
        move them to IDLParser.pm and thus remove IDLStructure.pm.

        No tests. No change in generated code.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.vcproj/MigrateScripts:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/IDLParser.pm:
        (Parse):
        (parseInterface):
        (parseException):
        (parseConst):
        (parseAttributeRest):
        (parseOperationRest):
        (parseOptionalOrRequiredArgument):
        (parseExceptionField):
        (parseInterfaceOld):
        (parseExceptionOld):
        (parseAttributeRestOld):
        (applyExtendedAttributeList):
        * bindings/scripts/IDLStructure.pm: Removed.

2012-11-18  Kentaro Hara  <haraken@chromium.org>

        [V8] Make more use of $v8Interface in CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=102639

        Reviewed by Adam Barth.

        We can replace hard-coded "V8${interfaceName}" with $v8Interface.

        No tests. No change in generated code.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateFunctionCallback):
        (GenerateNamedConstructorCallback):
        (GenerateImplementationIndexer):
        (GenerateImplementationNamedPropertyGetter):
        (GenerateImplementation):

2012-11-16  Ilya Tikhonovsky  <loislo@chromium.org>

        webaudio: leak: AudioContext objects are leaking. They retain 36mb of shared data.
        https://bugs.webkit.org/show_bug.cgi?id=102356

        Reviewed by Adam Barth.

        A clean-up code was moved from uninitialize to clear method.
        AudioContext marks itself as hasPendingActivity in method constructCommon and unmarks itself in method clear.
        m_isStopScheduled filters out second ActiveDOMObject::stop call.
        markForDeletion appends AudioNode pointer to m_nodesToDelete array if there is no active audio thread.
        adoptRef was added in createOfflineContext method.

        Test: inspector-protocol/nmi-webaudio-leak-test.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createOfflineContext):
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::constructCommon):
        (WebCore::AudioContext::~AudioContext):
        (WebCore::AudioContext::clear):
        (WebCore::AudioContext::uninitialize):
        (WebCore::AudioContext::stopDispatch):
        (WebCore::AudioContext::stop):
        (WebCore::AudioContext::markForDeletion):
        (WebCore::AudioContext::scheduleNodeDeletion):
        (WebCore::AudioContext::deleteMarkedNodes):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore::PlatformMemoryInstrumentation::reportMemoryUsage):
        (WebCore):
        * platform/PlatformMemoryInstrumentation.h:
        (PlatformMemoryInstrumentation):
        (WebCore):

2012-11-18  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        min/max/step support for calendar picker on datetime/datetime-local
        https://bugs.webkit.org/show_bug.cgi?id=102628

        Reviewed by Kent Tamura.

        Gray out dates with no allowed values on calendar picker for datetime/datetime-local
        when values are limited by min/max/step attributes.

        Test: platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime-with-step.html

        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker.prototype._stepMismatch):
        Returns true iff there are any allowed values in the given day.

2012-11-18  Laszlo Gombos  <l.gombos@samsung.com>

        Remove non-existent directories from the make system
        https://bugs.webkit.org/show_bug.cgi?id=102632

        Reviewed by Adam Barth.

        Remove (non-existent) symbian references from the exclude list in gyp project files.

        No new tests as there is no new functionality.

        * WebCore.gyp/WebCore.gyp:

2012-11-18  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Add a IMLangFontLinkType typedef
        https://bugs.webkit.org/show_bug.cgi?id=102584

        Reviewed by Brent Fulgham.

        Add a central typedef for IMLangFontLink(2) to get rid of a bunch of ifdefs.

        * platform/graphics/FontCache.h:
        (WebCore):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontLinkInterface):
        (WebCore::getCJKCodePageMasks):
        (WebCore::createMLangFont):
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::containsCharacters):
        * platform/graphics/wince/FontCacheWinCE.cpp:
        (WebCore):
        (WebCore::FontCache::getFontLinkInterface):
        (WebCore::getCJKCodePageMasks):
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FontFamilyCodePageInfo::codePages):
        (WebCore::FixedSizeFontData::create):
        * platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp:
        (WebCore::GlyphPage::fill):

2012-11-18  Mike West  <mkwst@chromium.org>

        Web Inspector: Remove unused ConsoleMessage constructor.
        https://bugs.webkit.org/show_bug.cgi?id=102590

        Reviewed by Brent Fulgham.

        We currently have a ConsoleMessage constructor that's unused. Let's
        kill it.

        * inspector/ConsoleMessage.cpp:
        * inspector/ConsoleMessage.h:
        (ConsoleMessage):
            Removing an unused constructor variant.

2012-11-18  Andreas Kling  <akling@apple.com>

        StyledElement: Make handling the "style" attribute a litte faster.
        <http://webkit.org/b/102623>

        Reviewed by Ojan Vafai.

        We know that "style" is never a presentation attribute, so avoid the virtual call to isPresentationAttribute()
        by hoisting the parseAttribute() logic up into attributeChanged().
        Did the same thing with Element::parseAttribute() for consistency.

        Knocks ~0.6% of samples off of the DOM/CreateNodes performance test.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * dom/Element.h:
        (WebCore::Element::parseAttribute):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * dom/StyledElement.h:
        (StyledElement):

2012-11-18  Laszlo Gombos  <l.gombos@samsung.com>

        [CMake] Consolidate common input files
        https://bugs.webkit.org/show_bug.cgi?id=101632

        Reviewed by Rob Buis.

        Consolidate and sort the list of files, move common source files
        into CMakeLists.txt from the port specific files.

        No new tests as there is no new functionality.

        * CMakeLists.txt:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformWinCE.cmake:

2012-11-18  Andreas Kling  <akling@apple.com>

        Tighten small SharedBuffers by reserving the exact amount of space needed.
        <http://webkit.org/b/102625>

        Reviewed by Anders Carlsson.

        When adding the first chunk to a small (<4096 bytes) SharedBuffer, reserve the exact
        amount of space needed instead of leaving it to Vector<char>::append().

        1.86MB progression on Membuster3.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):

2012-11-18  Ryosuke Niwa  <rniwa@webkit.org>

        Make namedItem return a node list only in HTMLFormControlsCollection and HTMLOptionsCollection
        https://bugs.webkit.org/show_bug.cgi?id=101311

        Reviewed by Darin Adler.

        Introduce two new interfaces HTMLFormControlsCollection and HTMLOptionsCollection to be used by form.elements
        and select.options. These two interfaces have the named getter and namedItem that returns a live NodeList when
        there are multiple matches. Introducing these two interfaces allow us to make "regular" HTMLCollection's named
        getter and namedItem return exactly one node or null as specified in HTML5:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#collections-0

        Unfortunately, HTMLOptionsCollection still has a bug that its named getter and namedItem returns
        a static NodeList instead of a live NodeList (DynamicNodeList) at the moment.

        Also got rid of Document::objects since it's not exposed in IDL or called anywhere.

        Test: fast/dom/html-collections-namedItem.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter): Now returns exactly one node or null.
        (WebCore::toJS):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp: Added.
        (WebCore::getNamedItems): Returns RadioNodeList when there are multiple matches.
        (WebCore::JSHTMLFormControlsCollection::canGetItemsForName):
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        (WebCore::JSHTMLFormControlsCollection::namedItem):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::getNamedItems): Returns a static NodeList when there are multiple matches.
        This is a bug. It should be a live NodeList instead.
        (WebCore::JSHTMLOptionsCollection::canGetItemsForName):
        (WebCore::JSHTMLOptionsCollection::nameGetter):
        (WebCore::JSHTMLOptionsCollection::namedItem):
        * bindings/js/CodeGeneratorJS.pm: Include JSNode.js for all HTML*Collection interfaces for simplicity.
        * bindings/js/CodeGeneratorV8.pm: HTMLOptionsCollection now inherits from HTMLCollection. See
        http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#htmloptionscollection
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp: Pass in isolate when we can.
        (WebCore::getNamedItems): Added a comment about how we should be returning
        a HTMLCollection when there are multiple matches.
        (WebCore::getItem):
        (WebCore::V8HTMLAllCollection::namedPropertyGetter):
        (WebCore::V8HTMLAllCollection::namedItemCallback):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp: Now returns exactly one node or null.
        (WebCore::V8HTMLCollection::namedPropertyGetter):
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLFormControlsCollectionCustom.cpp: Added.
        (WebCore::getNamedItems): Returns RadioNodeList when there are multiple matches.
        (WebCore::V8HTMLFormControlsCollection::namedPropertyGetter):
        (WebCore::V8HTMLFormControlsCollection::namedItemCallback):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::getNamedItems): Returns a static NodeList when there are multiple matches.
        This is a bug. It should be a live NodeList instead.
        (WebCore::V8HTMLOptionsCollection::namedPropertyGetter):
        (WebCore::V8HTMLOptionsCollection::namedItemCallback):
        * dom/Document.cpp: Removed Document::objects since it was not used anywhere.
        * dom/Document.h:
        (Document):
        * dom/Element.cpp:
        (WebCore::ElementRareData::ensureCachedHTMLCollection): form.elements should instantiate
        a HTMLFormControlsCollection instead of a HTMLCollection.
        * html/CollectionType.h:
        * html/HTMLCollection.idl: Removed [Custom] since namedItem is a regular function call now.
        * html/HTMLFieldSetElement.cpp:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormCollection.cpp: Removed.
        * html/HTMLFormCollection.h: Removed.
        * html/HTMLFormControlsCollection.cpp: Copied from Source/WebCore/html/HTMLFormCollection.cpp.
        (WebCore::HTMLFormControlsCollection::HTMLFormControlsCollection):
        (WebCore::HTMLFormControlsCollection::create):
        (WebCore::HTMLFormControlsCollection::~HTMLFormControlsCollection):
        (WebCore::HTMLFormControlsCollection::formControlElements):
        (WebCore::HTMLFormControlsCollection::formImageElements):
        (WebCore::HTMLFormControlsCollection::virtualItemAfter):
        (WebCore::HTMLFormControlsCollection::namedItem):
        (WebCore::HTMLFormControlsCollection::updateNameCache):
        * html/HTMLFormControlsCollection.h: Copied from Source/WebCore/html/HTMLFormCollection.h.
        (HTMLFormControlsCollection):
        * html/HTMLFormControlsCollection.idl: Added.
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.h:
        * html/HTMLOptionsCollection.idl:

2012-11-18  Kentaro Hara  <haraken@chromium.org>

        [V8] Rename $className to $v8InterfaceName
        https://bugs.webkit.org/show_bug.cgi?id=102487

        Reviewed by Adam Barth.

        In CodeGeneratorV8.pm, $className is always "V8$interfaceName".
        We should rename $className to $v8InterfaceName. Also we can
        remove GetCallbackClassName().

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GetHeaderClassInclude):
        (GenerateDomainSafeFunctionGetter):
        (GenerateDomainSafeFunctionSetter):
        (GenerateParametersCheck):
        (GenerateImplementation):
        (GenerateHeaderContentHeader):
        (GenerateImplementationContentHeader):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        (GenerateToV8Converters):
        (GetPassRefPtrType):

2012-11-18  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove GetTypeFromSignature() from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=102499

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):
        (GenerateFunctionCallString):
        (GetNativeTypeFromSignature):
        (TranslateParameter):
        (TypeCanFailConversion):
        (JSValueToNative):
        (NativeToJSValue):

2012-11-18  Kentaro Hara  <haraken@chromium.org>

        Remove GenerateModule() from all code generators
        https://bugs.webkit.org/show_bug.cgi?id=102490

        Reviewed by Adam Barth.

        WebKit IDL files no longer support modules. The Web IDL spec
        no longer supports modules. We can remove it from code generators.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:

2012-11-18  Kentaro Hara  <haraken@chromium.org>

        [V8] Get rid of unused functions and inline redundant functions in CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=102497

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateDomainSafeFunctionGetter):
        (GenerateNormalAttrGetter):
        (GenerateFunctionCallString):

2012-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135074.
        http://trac.webkit.org/changeset/135074
        https://bugs.webkit.org/show_bug.cgi?id=102619

        Made most layout tests crash. (Requested by rakuco on
        #webkit).

        * PlatformEfl.cmake:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::createSurface):
        (WebCore::GraphicsContext3DPrivate::setCurrentGLContext):
        (WebCore::GraphicsContext3DPrivate::platformGraphicsContext3D):
        (WebCore::GraphicsContext3DPrivate::makeContextCurrent):
        (WebCore::GraphicsContext3DPrivate::createGraphicsSurfaces):
        (WebCore::GraphicsContext3DPrivate::copyToGraphicsSurface):
        (WebCore::GraphicsContext3DPrivate::graphicsSurfaceToken):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/opengl/GLDefs.h: Removed.
        * platform/graphics/opengl/GLPlatformContext.cpp: Removed.
        * platform/graphics/opengl/GLPlatformContext.h: Removed.
        * platform/graphics/opengl/GLPlatformSurface.cpp: Removed.
        * platform/graphics/opengl/GLPlatformSurface.h: Removed.
        * platform/graphics/surfaces/glx/GLXContext.cpp: Removed.
        * platform/graphics/surfaces/glx/GLXContext.h: Removed.
        * platform/graphics/surfaces/glx/GLXSurface.cpp: Removed.
        * platform/graphics/surfaces/glx/GLXSurface.h: Removed.

2012-11-18  Antti Koivisto  <antti@apple.com>

        REGRESSION(r129644): User StyleSheet not applying
        https://bugs.webkit.org/show_bug.cgi?id=102110

        Reviewed by Andreas Kling.

        Injected stylesheets added as UserStyleAuthorLevel fail to apply. r129644 implicitly assumed that
        such things don't exists but on Chromium addUserStyleSheet() confusingly uses them.
        
        The patch adds injected author stylesheets to DocumentStyleSheetCollection::activeStyleSheets().
        It also generally cleans up the code around injected and user stylesheets.

        Tests: userscripts/user-script-and-stylesheet.html
               userscripts/user-stylesheet-invalidate.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::collectRulesFromUserStyleSheets):
        (WebCore::collectCSSOMWrappers):
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/Document.cpp:
        (WebCore::Document::setCompatibilityMode):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::~DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::injectedUserStyleSheets):
        (WebCore):
        (WebCore::DocumentStyleSheetCollection::injectedAuthorStyleSheets):
        (WebCore::DocumentStyleSheetCollection::updateInjectedStyleSheetCache):
        (WebCore::DocumentStyleSheetCollection::invalidateInjectedStyleSheetCache):
        (WebCore::DocumentStyleSheetCollection::addUserSheet):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage):
        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::documentUserStyleSheets):
        (DocumentStyleSheetCollection):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        (WebCore::PageGroup::invalidatedInjectedStyleSheetCacheInAllFrames):
        * page/PageGroup.h:
        (PageGroup):

2012-11-18  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Update run-bindings-tests baselines after
        http://trac.webkit.org/changeset/135063

        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        (JSTestActiveDOMObjectOwner):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        (JSTestCustomNamedGetterOwner):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (JSTestEventConstructorOwner):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (JSTestEventTargetOwner):
        * bindings/scripts/test/JS/JSTestException.h:
        (JSTestExceptionOwner):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (JSTestInterfaceOwner):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (JSTestMediaQueryListListenerOwner):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (JSTestNamedConstructorOwner):
        * bindings/scripts/test/JS/JSTestObj.h:
        (JSTestObjOwner):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        (JSTestOverloadedConstructorsOwner):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (JSTestSerializedScriptValueInterfaceOwner):

2012-11-18  Simon Fraser  <simon.fraser@apple.com>

        Make convertToLayerCoords iterative, rather than recursive
        https://bugs.webkit.org/show_bug.cgi?id=102618

        Reviewed by Antti Koivisto.

        RenderLayer::convertToLayerCoords() is a hot function on profiles.
        Change it to be iterative, rather than recursive, so that the
        bulk of the function can be inlined.
        
        Was tested with assertions against the old code during development.

        * rendering/RenderLayer.cpp:
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::convertToLayerCoords):

2012-11-18  Andreas Kling  <akling@apple.com>

        Inline the StyledElement constructor.
        <http://webkit.org/b/102615>

        Reviewed by Antti Koivisto.

        StyledElement sits between Element and HTMLElement in the inheritance chain, and both of those are inline. 
        Knocks ~0.4% of samples off of the DOM/CreateNodes performance test.

        * dom/StyledElement.cpp:
        * dom/StyledElement.h:
        (WebCore::StyledElement::StyledElement):

2012-11-18  Andreas Kling  <akling@apple.com>

        HTMLMediaElement: Skip unnecessary attribute lookup in parsing of "src" attribute.
        <http://webkit.org/b/102614>

        Reviewed by Anders Carlsson.

        When parsing the "src" attribute, we don't need to look it up with fastHasAttribute()
        to know if it's present. If it's not present, 'value' argument will be null.

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

2012-11-18  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] Refactor GraphicsContext3DEFL.
        https://bugs.webkit.org/show_bug.cgi?id=101291.

        Reviewed by Kenneth Rohde Christiansen.

        GraphicsContext3DEfl creates GraphicsContext3DPrivate, which acts as its platform Layer.
        GraphicsContext3DPrivate needs to handle the following cases:
        1) To provide an off-screen buffer for accelerated composition.
        2) Render to a current context.
        3) To render directly to host window. (currently not supported.)

        Before this patch Evas was used to provide us an off-screen context and buffer. GLX was used in
        the other supported case. Evas acts as a glue layer to provide us with appropriate
        GL bindings (OpenGL functions), GL context and drawable (surface/offscreenbuffer).
        However, primitive rendering is handled by TextureMapper and OpenGLShims is used to load the needed GL functions.

        It would be for our advantage to be able to take in to use any optimisations/extensions
        provided by underlying drivers, specific to a platform (e.g. GLX_MESA_copy_sub_buffer etc.).
        This patch introduces an abstraction layer to make it easy to add support for any GL backend (GLX, EGL etc.)
        and do any platform specific optimizations as needed without complicating GraphicsContext3DPrivate class.
        Two new classes are added with this implementation, GLPlatformContext and GLPlatformSurface.
        GraphicsContext3DPrivate would create and own a GLPlatformContext and GLPlatformSurface.

        GLPlatformContext encapsulates an OpenGL context hiding any platform specific management.
        It uses GL extension ARB_robustness (when available) to detect driver resets.
        It defines a simple interface for things that need to be handled by the context. Support
        for multi-threaded usage and shared context-group would be added later.

        GLPlatformSurface encapsulates an OpenGL drawable hiding any platform specific management.
        It defines a simple interface for things that need to be handled by the surface.
        It creates an off-screen rendering area. Any GLPlatformContext (compatible with the surface)
        can be used to render into this off-screen area.

        This patch also adds GLX implementation. To keep the patch to minimum EGL support would be added in another changeset.

        * PlatformEfl.cmake:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (GraphicsContext3DPrivate::releaseResources):
        (GraphicsContext3DPrivate::setContextLostCallback):
        (GraphicsContext3DPrivate::platformGraphicsContext3D):
        (GraphicsContext3DPrivate::makeContextCurrent):
        (GraphicsContext3DPrivate::createGraphicsSurfaces):
        (GraphicsContext3DPrivate::copyToGraphicsSurface):
        (GraphicsContext3DPrivate::graphicsSurfaceToken):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/opengl/GLDefs.h: Added.
        (WebCore):
        * platform/graphics/opengl/GLPlatformContext.cpp: Added.
        (WebCore):
        (WebCore::GLPlatformContext::createContext):
        (WebCore::GLPlatformContext::createOffScreenContext):
        (WebCore::GLPlatformContext::createCurrentContextWrapper):
        (WebCore::GLPlatformContext::GLPlatformContext):
        (WebCore::GLPlatformContext::~GLPlatformContext):
        (WebCore::GLPlatformContext::makeCurrent):
        (WebCore::GLPlatformContext::isValid):
        (WebCore::GLPlatformContext::releaseCurrent):
        (WebCore::GLPlatformContext::handle):
        (WebCore::GLPlatformContext::isCurrentContext):
        (WebCore::GLPlatformContext::initialize):
        (WebCore::GLPlatformContext::getCurrent):
        (WebCore::GLPlatformContext::platformMakeCurrent):
        (WebCore::GLPlatformContext::platformReleaseCurrent):
        (WebCore::GLPlatformContext::destroy):
        * platform/graphics/opengl/GLPlatformContext.h: Added.
        (WebCore):
        (GLPlatformContext):
        * platform/graphics/opengl/GLPlatformSurface.cpp: Added.
        (WebCore):
        (WebCore::GLPlatformSurface::createOffscreenSurface):
        (WebCore::GLPlatformSurface::createTransportSurface):
        (WebCore::GLPlatformSurface::GLPlatformSurface):
        (WebCore::GLPlatformSurface::~GLPlatformSurface):
        (WebCore::GLPlatformSurface::handle):
        (WebCore::GLPlatformSurface::geometry):
        (WebCore::GLPlatformSurface::sharedDisplay):
        (WebCore::GLPlatformSurface::configuration):
        (WebCore::GLPlatformSurface::swapBuffers):
        (WebCore::GLPlatformSurface::copyTexture):
        (WebCore::GLPlatformSurface::updateContents):
        (WebCore::GLPlatformSurface::setGeometry):
        (WebCore::GLPlatformSurface::destroy):
        * platform/graphics/opengl/GLPlatformSurface.h: Added.
        (WebCore):
        (GLPlatformSurface):
            GLXOffScreenContext creates an off-screen context. This is used when
            renderstyle is RenderOffscreen.
            It uses GL extension GLX_ARB_create_context (when available)
            to create a context else falls back to use glXCreateNewContext.
        * platform/graphics/surfaces/glx/GLXContext.cpp: Added.
        (WebCore):
        (WebCore::initializeARBExtensions):
        (WebCore::GLXOffScreenContext::GLXOffScreenContext):
        (WebCore::GLXOffScreenContext::initialize):
        (WebCore::GLXOffScreenContext::~GLXOffScreenContext):
        (WebCore::GLXOffScreenContext::isCurrentContext):
        (WebCore::GLXOffScreenContext::platformMakeCurrent):
        (WebCore::GLXOffScreenContext::platformReleaseCurrent):
        (WebCore::GLXOffScreenContext::freeResources):
        (WebCore::GLXOffScreenContext::destroy):
            GLXCurrentContextWrapper acts as a wrapper for current context.
            This is used when renderstyle is RenderToCurrentGLContext.
        * platform/graphics/surfaces/glx/GLXContext.h: Added.
        (WebCore):
        (GLXCurrentContextWrapper):
        (WebCore::GLXCurrentContextWrapper::GLXCurrentContextWrapper):
        (WebCore::GLXCurrentContextWrapper::~GLXCurrentContextWrapper):
        (GLXOffScreenContext):
        * platform/graphics/surfaces/glx/GLXSurface.cpp: Added.
        (WebCore):
        (WebCore::GLXSurface::GLXSurface):
        (WebCore::GLXSurface::~GLXSurface):
        (WebCore::GLXSurface::visualInfo):
        (WebCore::GLXSurface::xWindow):
        (WebCore::GLXSurface::pBufferConfiguration):
        (WebCore::GLXSurface::transportSurfaceConfiguration):
        (WebCore::GLXSurface::isXRenderExtensionSupported):
            GLXTransportSurface creates Window and uses it as an off-screen surface.
            Any GLContext that was created with respect to configuration can be used
            to render into this.
            This is used when contents of the buffer are to be provided to UI Process
            for display.
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXTransportSurface::~GLXTransportSurface):
        (WebCore::GLXTransportSurface::configuration):
        (WebCore::GLXTransportSurface::swapBuffers):
        (WebCore::GLXTransportSurface::setGeometry):
        (WebCore::GLXTransportSurface::initialize):
        (WebCore::GLXTransportSurface::destroy):
        (WebCore::GLXTransportSurface::freeResources):
           GLXPBuffer, Creates a GL surface (PBuffer) used for offscreen rendering.
           Any GLContext that was created with respect to configuration can be used
           to render into this.
        (WebCore::GLXPBuffer::GLXPBuffer):
        (WebCore::GLXPBuffer::~GLXPBuffer):
        (WebCore::GLXPBuffer::initialize):
        (WebCore::GLXPBuffer::configuration):
        (WebCore::GLXPBuffer::destroy):
        (WebCore::GLXPBuffer::freeResources):
        * platform/graphics/surfaces/glx/GLXSurface.h: Added.
        (WebCore):
            Creates X resources which are shared between surface and context.
        (SharedX11Resources):
        (WebCore::SharedX11Resources::create):
        (WebCore::SharedX11Resources::deref):
        (WebCore::SharedX11Resources::getXWindow):
        (WebCore::SharedX11Resources::display):
        (WebCore::SharedX11Resources::visualInfo):
        (WebCore::SharedX11Resources::createConfig):
        (WebCore::SharedX11Resources::pBufferContextConfig):
        (WebCore::SharedX11Resources::surfaceContextConfig):
        (WebCore::SharedX11Resources::isXRenderExtensionSupported):
        (WebCore::SharedX11Resources::SharedX11Resources):
        (WebCore::SharedX11Resources::~SharedX11Resources):
        (GLXSurface):
        (GLXTransportSurface):
        (GLXPBuffer):

2012-11-18  Andreas Kling  <akling@apple.com>

        Element::parseAttribute() should take name & value as separate arguments.
        <http://webkit.org/b/102608>

        Reviewed by Antti Koivisto.

        Update the signature of parseAttribute() to take a QualifiedName/AtomicString combo instead
        of an Attribute. This lets us pass avoid refcount churn in Element::attributeChanged() since
        creating a temporary Attribute is no longer necessary.

        This was surprisingly hot (~1%) on the DOM/CreateNodes performance test.

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptEventListener.h:
        (WebCore):
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/ScriptEventListener.h:
        (WebCore):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::parseAttribute):
        * dom/Element.h:
        (Element):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseAttribute):
        * dom/StyledElement.h:
        (StyledElement):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/HTMLAnchorElement.h:
        (HTMLAnchorElement):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::parseAttribute):
        * html/HTMLAppletElement.h:
        (HTMLAppletElement):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::parseAttribute):
        * html/HTMLAreaElement.h:
        (HTMLAreaElement):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::parseAttribute):
        * html/HTMLBaseElement.h:
        (HTMLBaseElement):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/HTMLBodyElement.h:
        (HTMLBodyElement):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseAttribute):
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::parseAttribute):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::parseAttribute):
        * html/HTMLDetailsElement.h:
        (HTMLDetailsElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):
        (WebCore::HTMLElement::dirAttributeChanged):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLEmbedElement.h:
        (HTMLEmbedElement):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseAttribute):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseAttribute):
        * html/HTMLFormElement.h:
        (HTMLFormElement):
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::parseAttribute):
        * html/HTMLFrameElement.h:
        (HTMLFrameElement):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):
        * html/HTMLFrameElementBase.h:
        (HTMLFrameElementBase):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseAttribute):
        * html/HTMLFrameSetElement.h:
        (HTMLFrameSetElement):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLIFrameElement.h:
        (HTMLIFrameElement):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLImageElement.h:
        (HTMLImageElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::parseMaxLengthAttribute):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::parseAttribute):
        * html/HTMLKeygenElement.h:
        (HTMLKeygenElement):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseAttribute):
        * html/HTMLLIElement.h:
        (HTMLLIElement):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        * html/HTMLLinkElement.h:
        (HTMLLinkElement):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseAttribute):
        * html/HTMLMapElement.h:
        (HTMLMapElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::parseAttribute):
        * html/HTMLMetaElement.h:
        (HTMLMetaElement):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::parseAttribute):
        * html/HTMLMeterElement.h:
        (HTMLMeterElement):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::parseAttribute):
        * html/HTMLOListElement.h:
        (HTMLOListElement):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLObjectElement.h:
        (HTMLObjectElement):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::parseAttribute):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):
        * html/HTMLOptionElement.h:
        (HTMLOptionElement):
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::parseAttribute):
        * html/HTMLOutputElement.h:
        (HTMLOutputElement):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::parseAttribute):
        * html/HTMLProgressElement.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseAttribute):
        * html/HTMLScriptElement.h:
        (HTMLScriptElement):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        (WebCore::HTMLSelectElement::parseMultipleAttribute):
        * html/HTMLSelectElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):
        * html/HTMLStyleElement.h:
        (HTMLStyleElement):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::parseAttribute):
        * html/HTMLTableCellElement.h:
        (HTMLTableCellElement):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseAttribute):
        * html/HTMLTableColElement.h:
        (HTMLTableColElement):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseAttribute):
        * html/HTMLTableElement.h:
        (HTMLTableElement):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseAttribute):
        * html/HTMLTextAreaElement.h:
        (HTMLTextAreaElement):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::parseAttribute):
        * html/HTMLTextFormControlElement.h:
        (HTMLTextFormControlElement):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::parseAttribute):
        * html/HTMLTrackElement.h:
        (HTMLTrackElement):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/HTMLVideoElement.h:
        (HTMLVideoElement):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseAttribute):
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::parseAttribute):
        * mathml/MathMLElement.h:
        (MathMLElement):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseAttribute):
        * svg/SVGAElement.h:
        (SVGAElement):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseAttribute):
        * svg/SVGAnimateMotionElement.h:
        (SVGAnimateMotionElement):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::parseAttribute):
        * svg/SVGAnimateTransformElement.h:
        (SVGAnimateTransformElement):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseAttribute):
        * svg/SVGAnimationElement.h:
        (SVGAnimationElement):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::parseAttribute):
        * svg/SVGCircleElement.h:
        (SVGCircleElement):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::parseAttribute):
        * svg/SVGClipPathElement.h:
        (SVGClipPathElement):
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::parseAttribute):
        * svg/SVGComponentTransferFunctionElement.h:
        (SVGComponentTransferFunctionElement):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::parseAttribute):
        * svg/SVGCursorElement.h:
        (SVGCursorElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::reportAttributeParsingError):
        (WebCore::SVGElement::parseAttribute):
        * svg/SVGElement.h:
        (SVGElement):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::parseAttribute):
        * svg/SVGEllipseElement.h:
        (SVGEllipseElement):
        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::parseAttribute):
        * svg/SVGExternalResourcesRequired.h:
        (SVGExternalResourcesRequired):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::parseAttribute):
        * svg/SVGFEBlendElement.h:
        (SVGFEBlendElement):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::parseAttribute):
        * svg/SVGFEColorMatrixElement.h:
        (SVGFEColorMatrixElement):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::parseAttribute):
        * svg/SVGFEComponentTransferElement.h:
        (SVGFEComponentTransferElement):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::parseAttribute):
        * svg/SVGFECompositeElement.h:
        (SVGFECompositeElement):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        * svg/SVGFEConvolveMatrixElement.h:
        (SVGFEConvolveMatrixElement):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::parseAttribute):
        * svg/SVGFEDiffuseLightingElement.h:
        (SVGFEDiffuseLightingElement):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::parseAttribute):
        * svg/SVGFEDisplacementMapElement.h:
        (SVGFEDisplacementMapElement):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::parseAttribute):
        * svg/SVGFEDropShadowElement.h:
        (SVGFEDropShadowElement):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::parseAttribute):
        * svg/SVGFEGaussianBlurElement.h:
        (SVGFEGaussianBlurElement):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseAttribute):
        * svg/SVGFEImageElement.h:
        (SVGFEImageElement):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::parseAttribute):
        * svg/SVGFELightElement.h:
        (SVGFELightElement):
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::parseAttribute):
        * svg/SVGFEMergeNodeElement.h:
        (SVGFEMergeNodeElement):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::parseAttribute):
        * svg/SVGFEMorphologyElement.h:
        (SVGFEMorphologyElement):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::parseAttribute):
        * svg/SVGFEOffsetElement.h:
        (SVGFEOffsetElement):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::parseAttribute):
        * svg/SVGFESpecularLightingElement.h:
        (SVGFESpecularLightingElement):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::parseAttribute):
        * svg/SVGFETileElement.h:
        (SVGFETileElement):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseAttribute):
        * svg/SVGFETurbulenceElement.h:
        (SVGFETurbulenceElement):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::parseAttribute):
        * svg/SVGFilterElement.h:
        (SVGFilterElement):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (SVGFilterPrimitiveStandardAttributes):
        * svg/SVGFitToViewBox.h:
        (WebCore::SVGFitToViewBox::parseAttribute):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::parseAttribute):
        * svg/SVGFontFaceElement.h:
        (SVGFontFaceElement):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::parseAttribute):
        * svg/SVGFontFaceUriElement.h:
        (SVGFontFaceUriElement):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::parseAttribute):
        * svg/SVGForeignObjectElement.h:
        (SVGForeignObjectElement):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::parseAttribute):
        * svg/SVGGElement.h:
        (SVGGElement):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::parseAttribute):
        * svg/SVGGlyphElement.h:
        (SVGGlyphElement):
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::parseAttribute):
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::parseAttribute):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGImageElement.h:
        (SVGImageElement):
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::parseAttribute):
        * svg/SVGLangSpace.h:
        (SVGLangSpace):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::parseAttribute):
        * svg/SVGLineElement.h:
        (SVGLineElement):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::parseAttribute):
        * svg/SVGLinearGradientElement.h:
        (SVGLinearGradientElement):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::parseAttribute):
        * svg/SVGMPathElement.h:
        (SVGMPathElement):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseAttribute):
        * svg/SVGMarkerElement.h:
        (SVGMarkerElement):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::parseAttribute):
        * svg/SVGMaskElement.h:
        (SVGMaskElement):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseAttribute):
        * svg/SVGPathElement.h:
        (SVGPathElement):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseAttribute):
        * svg/SVGPatternElement.h:
        (SVGPatternElement):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseAttribute):
        * svg/SVGPolyElement.h:
        (SVGPolyElement):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::parseAttribute):
        * svg/SVGRadialGradientElement.h:
        (SVGRadialGradientElement):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseAttribute):
        * svg/SVGRectElement.h:
        (SVGRectElement):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseAttribute):
        * svg/SVGSVGElement.h:
        (SVGSVGElement):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseAttribute):
        * svg/SVGScriptElement.h:
        (SVGScriptElement):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::parseAttribute):
        * svg/SVGStopElement.h:
        (SVGStopElement):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::parseAttribute):
        * svg/SVGStyleElement.h:
        (SVGStyleElement):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::parseAttribute):
        * svg/SVGStyledElement.h:
        (SVGStyledElement):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::parseAttribute):
        * svg/SVGStyledTransformableElement.h:
        (SVGStyledTransformableElement):
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::parseAttribute):
        * svg/SVGSymbolElement.h:
        (SVGSymbolElement):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::parseAttribute):
        * svg/SVGTRefElement.h:
        (SVGTRefElement):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::parseAttribute):
        * svg/SVGTests.h:
        (SVGTests):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseAttribute):
        * svg/SVGTextContentElement.h:
        (SVGTextContentElement):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::parseAttribute):
        * svg/SVGTextElement.h:
        (SVGTextElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::parseAttribute):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::parseAttribute):
        * svg/SVGTextPositioningElement.h:
        (SVGTextPositioningElement):
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::parseAttribute):
        * svg/SVGURIReference.h:
        (SVGURIReference):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::parseAttribute):
        * svg/SVGUseElement.h:
        (SVGUseElement):
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::parseAttribute):
        * svg/SVGViewElement.h:
        (SVGViewElement):
        * svg/SVGZoomAndPan.h:
        (WebCore::SVGZoomAndPan::parseAttribute):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseAttribute):
        * svg/animation/SVGSMILElement.h:
        (SVGSMILElement):

2012-11-18  Andreas Kling  <akling@apple.com>

        StyleResolver: No need to compare "cellpadding" attributes when evaluating style sharing candidates.
        <http://webkit.org/b/102596>

        Reviewed by Antti Koivisto.

        Differences in the cellpadding attribute is caught by comparing additionalPresentationAttributeStyle()
        later on in canShareStyleWithElement() and we shouldn't waste time on comparing them.

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

2012-11-17  Jon Lee  <jonlee@apple.com>

        Simulated mouse events should return an accurate offset
        https://bugs.webkit.org/show_bug.cgi?id=102606
        <rdar://problem/12725627>

        Reviewed by Brady Eidson.

        A check to see if the event is simulated prior to calculating the offset has existed for a
        long time (since at least r14916). Back then the check was needed because the offset was
        incrementally adjusted when the target was assigned (through
        MouseRelatedEvent::receivedTarget()).

        Since r82225, we started calculating the offset only when needed, and calculating the offset
        from scratch rather than incrementally adjusting it. Since we recalculate from scratch,
        the isSimulated check is irrelevant, and we should remove it.

        Tests are not possible because all uses of simulated mouse events provide no underlying
        event, so the offset is never recalculated.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition): Remove the m_isSimulated check.

2012-11-17  Simon Fraser  <simon.fraser@apple.com>

        Don't say there are dirty overlay scrollbars when they are clipped out
        https://bugs.webkit.org/show_bug.cgi?id=102609

        Reviewed by Brady Eidson.

        Painting overlay scrollbars involves a second painting pass over the entire
        RenderLayer subtree for a compositing layer, which can be very expensive.
        
        Avoid this when possible by detecting when overflow controls are not in
        the damage rect.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rectForHorizontalScrollbar): Compute a local rect
        for the horizontal scrollbar.
        (WebCore::RenderLayer::rectForVerticalScrollbar): Compute a local rect
        for the vertical scrollbar.
        (WebCore::RenderLayer::positionOverflowControls): Use rectForHorizontalScrollbar()
        and rectForVerticalScrollbar().
        (WebCore::RenderLayer::overflowControlsIntersectRect): Return true if any
        of the present overflow controls intersect the given local rect.
        (WebCore::RenderLayer::paintOverflowControls): Bail if the damage rect
        doesn't intersect any of the overflow controls.
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-11-17  Adam Barth  <abarth@webkit.org>

        REGRESSION (r133633): ASSERTION FAILED: m_wrapper || !m_jsFunction
        https://bugs.webkit.org/show_bug.cgi?id=101428

        Reviewed by Geoffrey Garen.

        JSNodeOwner has some smarts that wrappers of subclasses of Node need to
        call during garbage collection. This patch teaches subclasses of Node
        to have their JSMumbleOwner objects inherit from JSNodeOwner.

        The immediate benefit of this patch is that we correctly avoid
        collecting wrappers for HTMLAudioElements when they are reachable from
        the DOM.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):

2012-11-17  Elliott Sprehn  <esprehn@chromium.org>

        Expose JSObject::removeDirect and PrivateName to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=102546

        Reviewed by Geoffrey Garen.

        Add forwarding header for PrivateName, so JSDependentRetained works.

        No new tests, just adding headers.

        * ForwardingHeaders/runtime/PrivateName.h: Added.

2012-11-17  Simon Fraser  <simon.fraser@apple.com>

        Reduce the crazy number of parameters to RenderLayer clip-rect functions
        https://bugs.webkit.org/show_bug.cgi?id=102604

        Reviewed by Dan Bernstein.

        Many of the RenderLayer member functions related to clip rect computation
        took a long list of similar parameters. Gather these into a struct, ClipRectsContext,
        that we pass to these functions
        
        No functional changes.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::backgroundClipRect):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::childrenClipRect):
        (WebCore::RenderLayer::selfClipRect):
        (WebCore::RenderLayer::localClipRect):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::ClipRectsContext::ClipRectsContext):
        (ClipRectsContext):
        (RenderLayer):
        (WebCore::RenderLayer::clipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):

2012-11-17  Simon Fraser  <simon.fraser@apple.com>

        Simplify bounds computation for the RenderView's layer
        https://bugs.webkit.org/show_bug.cgi?id=102597

        Reviewed by Anders Carlsson.

        Computing the bounds of the main layer (that of the RenderView) used to do
        a full RenderLayer walk, taking the union of the bounds of all the sublayers,
        which is very expensive on large pages.
        
        For the RenderView we can avoid that entirely and just use the RenderView's
        document rect. Since page scaling happens as a transform on this layer,
        we want the unscaled document rect.

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

2012-11-17  Eric Seidel  <eric@webkit.org>

        Add ScriptWrappable to more WebCore classes which are commonly JS-wrapped
        https://bugs.webkit.org/show_bug.cgi?id=102601

        Reviewed by Adam Barth.

        From my investigations all of these classes exist only to be exposed
        to the web (via JavaScript) and are not used internally by WebCore.
        I beleive all of them always have wrappers.
        These were found using this code:
        https://bugs.webkit.org/show_bug.cgi?id=102539#c2

        Geolocation -- navigator.geolocation
        WebKitCSSMatrix -- represent matrixes in JS through various APIs
        DOMStringMap, NamedNodeMap, NodeIterator, TreeWalker -- exclusively for the DOM API
        Blob, FileList - used by the File, Clipboard and XHR, also exclusively as API
        ValidityState -- formControl.validity
        CanvasRenderingContext -- canvas.getContext()
        DOMApplicationCache -- window.appcache
        Screen -- window.screen
        DOMMimeTypeArray -- navigator.mimetypes
        DOMPlugin -- navigator.plugins[0]
        DOMPluginArray -- navigator.plugins

        * Modules/geolocation/Geolocation.h:
        * css/WebKitCSSMatrix.h:
        * dom/DOMStringMap.h:
        * dom/NamedNodeMap.h:
        * dom/NodeIterator.h:
        * dom/TreeWalker.h:
        * fileapi/Blob.h:
        * fileapi/FileList.h: (had to un-indent to make check-webkit-style happy)
        (FileList):
        (WebCore::FileList::create):
        (WebCore::FileList::length):
        (WebCore::FileList::isEmpty):
        (WebCore::FileList::clear):
        (WebCore::FileList::append):
        * html/ValidityState.h:
        * html/canvas/CanvasRenderingContext.h:
        * loader/appcache/DOMApplicationCache.h:
        * page/Screen.h:
        * platform/graphics/wince/MediaPlayerProxy.cpp:
        (WebCore::WebMediaPlayerProxy::initEngine): This code was wrong, fixed to use internal APIs.
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMPlugin.h:
        * plugins/DOMPluginArray.h:

2012-11-17  Alexandru Chiculita  <achicu@adobe.com>

        [Texmap][CSS Shaders] Reuse the precompiled shader for custom filters in TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=101801

        Reviewed by Noam Rosenthal.

        Added a HashMap in TextureMapperGL to store the precompiled versions of the shaders.
        Also added a new API on TextureMapper that receives a notification when the shader
        is no longer needed.

        No new tests, the code is tested by existing tests.

        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::setProgram):
        (CustomFilterOperation): Made the constructor protected, so that we can overwrite the class in WK2.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::validatedProgramInfo):
        (WebCore):
        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        (CustomFilterValidatedProgram):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore):
        (TextureMapper):
        (WebCore::TextureMapper::removeCachedCustomFilterProgram):
        Function to be called by the platform code, when the shader is no longer
        needed. This implementation is empty and overridden in TextureMapperGL.
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::removeCachedCustomFilterProgram):
        Removes the compiled shader from the cache. This is called from WK2 when the compiled shader
        is no longer needed.
        (WebCore):
        (WebCore::TextureMapperGL::drawUsingCustomFilter): The first time it uses a new
        shader it will cache the compiled version until removeCachedCustomFilterProgram is called.
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore):
        (TextureMapperGL):

2012-11-17  Brady Eidson  <beidson@apple.com>

        Add an integer identifier field to AuthenticationChallengeBase.
        https://bugs.webkit.org/show_bug.cgi?id=102593

        Reviewed by Darin Adler.

        This is to support linking two different challenges that might not compare as equal but that 
        represent the same logical authentication challenge.

        One example is in an IPC environment where the platform challenge can only exist in one process.

        No new tests (Platform support, no effect in tested configs).

        * WebCore.exp.in:

        * platform/network/AuthenticationChallengeBase.cpp:
        (WebCore::AuthenticationChallengeBase::AuthenticationChallengeBase):
        * platform/network/AuthenticationChallengeBase.h:
        (WebCore::AuthenticationChallengeBase::identifier):

        * platform/network/cf/AuthenticationChallenge.h:
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::generateUniqueIdentifier):
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Generate a new unique identifier whenever
          constructing a challenge from an NSURLAuthenticationChallenge.

        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::generateUniqueIdentifier):
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Generate a new unique identifier whenever
          constructing a challenge from a CFURLAuthChallengeRef.

        Implement the new constructor form for ports relevant to WebKit2:
        * platform/network/qt/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/soup/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/win/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):

2012-11-17  Simon Fraser  <simon.fraser@apple.com>

        Dump the tile cache extent in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=102600

        Reviewed by Anders Carlsson.

        When dumping tiled layer stats in layout tests, also dump the extent
        of the tile grid. This will allow us to detect issues related
        to zooming, which is not possible with the existing tile coverage rect,
        which is dumped in layer (not tile) coordinates.

        * platform/graphics/TiledBacking.h: Added tileGridExtent().
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties): Dump the tile grid extent.
        * platform/graphics/ca/mac/TileCache.h: tileCoverageRect() should be OVERRIDE.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::getTileIndexRangeForRect):
        (WebCore::TileCache::tileGridExtent): Return a rect with the size of
        the grid as top,left width,height.

2012-11-17  Andreas Kling  <akling@apple.com>

        Avoid full style recalc when 'style' attribute changes.
        <http://webkit.org/b/78718>

        Reviewed by Anders Carlsson.

        Use setNeedsStyleRecalc(InlineStyleChange) when the 'style' attribute changes
        to reduce the amount of work done in recalcStyle().

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):

2012-11-17  Li Yin  <li.yin@intel.com>

        Remove coneGain and distanceGain attributes from PannerNode.idl
        https://bugs.webkit.org/show_bug.cgi?id=102343

        Reviewed by Chris Rogers.

        Removing .coneGain and .distanceGain as publicly accessible values,
        since normally they only need to be calculated internally.

        No changes to tests, since these attributes were not tested and are being removed.

        * Modules/webaudio/PannerNode.idl:

2012-11-17  Balazs Kelemen  <kbalazs@webkit.org>

        [Coordinated Graphics] Resumed animations leave an obsolate GraphicsLayerAnimation behind
        https://bugs.webkit.org/show_bug.cgi?id=102530

        Reviewed by Noam Rosenthal.

        GraphicsLayer::addAnimation is called no only when a new animation is created
        but also when resuming a paused animation. If this is a resumed animation we
        should remove the obsolate GraphicsLayerAnimation object.

        Tested by animations tests.

        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore::GraphicsLayerAnimations::add):

2012-11-17  Martin Robinson  <mrobinson@igalia.com>

        [Soup] CredentialStorage should only be used for HTTP-family requests
        https://bugs.webkit.org/show_bug.cgi?id=102582

        Reviewed by Gustavo Noronha Silva.

        Do not use CredentialStorage when handling non-HTTP family requests. CredentialStorage
        only expects to handle requests in the HTTP family.

        No new tests. This is covered by existing tests.

        * platform/network/ResourceHandle.h:
        (ResourceHandle): Add a shouldUseCredentialStorage helper to ResourceHandle. This
        helper returns false when firstRequest() is a non-HTTP family request.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::applyAuthenticationToRequest): Use the new helper.
        (WebCore::createSoupRequestAndMessageForHandle): Ditto.
        (WebCore::ResourceHandle::start): Ditto.
        (WebCore::ResourceHandle::shouldUseCredentialStorage): Ditto.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto.
        (WebCore::ResourceHandle::receivedCredential): Ditto.

2012-11-16  Patrick Gansterer  <paroga@webkit.org>

        Build fix for !USE(ACCELERATED_COMPOSITING) after r135029.

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

2012-11-16  Benjamin Poulain  <bpoulain@apple.com>

        Improve the performance of rect transform
        https://bugs.webkit.org/show_bug.cgi?id=101828

        Reviewed by Simon Fraser.

        Mapping a rect and a quad by a transform is a common operation because
        we use it to recompute the repaint rect, overflow rect, etc.

        The way it was done, is by transforming through mapRect()->mapQuad()->4 times mapPoint().
        Each of those functions tests isIdentityOrTranslation() which has to read the whole matrix
        and perform many comparison.
        Because of that, the simple mapping of a rect was loading and checking the matrix 5 times
        too many.

        This patch just cut the intermediary calls.

        On ARM, putting the operation together also has the advantage of loading the matrix
        only once in registers and reusing it for every point.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::mapPoint):
        (WebCore::TransformationMatrix::mapRect):
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore):
        (WebCore::TransformationMatrix::mapPointImpl): New convenience function to perform the
        point project without doing isIdentityOrTranslation().

2012-11-16  Simon Fraser  <simon.fraser@apple.com>

        Avoid calling the virtual isBlockFlow() in RenderBox::computeRectForRepaint()
        https://bugs.webkit.org/show_bug.cgi?id=102581

        Reviewed by Dan Bernstein.

        isBlockFlow() is a virtual function call, and shows up in profiles of
        Facebook pages as called from RenderBox::computeRectForRepaint().
        
        It's faster to do the hasColumns() bit-check first. Also replace
        a call to layer() with the hasLayer() bit-check.        

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

2012-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134817.
        http://trac.webkit.org/changeset/134817
        https://bugs.webkit.org/show_bug.cgi?id=102576

        Broke iframes and causing tons of crashes on ClusterFuzz
        (Requested by inferno-sec on #webkit).

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChildren):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildFrameDisconnector::collectDescendant):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::ChildFrameDisconnector):
        (WebCore::ChildFrameDisconnector::~ChildFrameDisconnector):
        (ChildFrameDisconnector):
        (WebCore::ChildFrameDisconnector::collectDescendant):
        (WebCore::ChildFrameDisconnector::disconnect):
        * dom/Node.cpp:
        * dom/Node.h:
        (Node):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (NodeRareData):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::setContentFrame):
        (WebCore::HTMLFrameOwnerElement::disconnectContentFrame):

2012-11-16  Simon Fraser  <simon.fraser@apple.com>

        Fix overlay scrollbar painting in compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=102442

        Reviewed by Beth Dakin.

        There were two issues with overlay scrollbar painting in
        compositing layers.
        
        First, we'd only ever call setContainsDirtyOverlayScrollbars()
        on the RenderView's layer, even when encountering an overlay scrollbar
        in some descendant compositing layer. This meant that we'd never
        run the paintOverlayScrollbars() code for those child compositing
        layers, so sometimes scrollbars were missing there.
        
        Even after fixing that, we would fail to render scrollbars that
        were not in the composited RenderLayer itself. This happened because
        we called into RenderLayer::paintOverlayScrollbars(), which called
        paintLayer() with flags that only said to paint the overlay scrollbars
        but not any descendants, so this paint path would not walk child
        RenderLayers.
        
        Also remove the containsScrollableAreaWithOverlayScrollbars() flag on
        ScrollView which is no longer used.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView): Remove containsScrollableAreaWithOverlayScrollbars().
        (WebCore::ScrollView::paint): Remove setting of m_containsScrollableAreaWithOverlayScrollbars.
        * platform/ScrollView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls): Call setContainsDirtyOverlayScrollbars()
        on the compositing ancestor or the root.
        Remove call to setContainsScrollableAreaWithOverlayScrollbars().
        (WebCore::RenderLayer::paintOverlayScrollbars): When painting overlay
        scrollbars, no need to say we have transparency, and no need to use 
        temporary clip rects.
        (WebCore::RenderLayer::paintLayer): The PaintLayerPaintingOverlayScrollbars
        check here was only needed because the compositing entrypoint to painting
        overlay scrollbars went via paintLayer(), which isn't normally used as
        a composited painting entry point. Now that we no longer call that, we
        don't need this special check.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer): Jump into overlay scrollbar
        painting via paintLayerContents(), not paintOverlayScrollbars(), since
        the latter does not traverse sublayers.

2012-11-16  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Assert hit when getting non-existent object store in version change transaction
        https://bugs.webkit.org/show_bug.cgi?id=102547

        Reviewed by Tony Chang.

        Code did not account for the not-found case in "versionchange" transactions, where all
        object stores are implicitly in scope.

        Test: storage/indexeddb/object-lookups-in-versionchange.html

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):

2012-11-12  Simon Fraser  <simon.fraser@apple.com>

        Eliminate ancestor tree walk computing outlineBoundsForRepaint() when updating layer positions
        https://bugs.webkit.org/show_bug.cgi?id=101874

        Reviewed by Dave Hyatt.

        RenderLayer::updateLayerPositions() and updateLayerPositionsAfterScroll() spend a
        lot of time in computeRepaintRects(), which does two ancestor tree walks, once
        for clippedOverflowRectForRepaint(), and one for outlineBoundsForRepaint().

        Eliminate the ancestor tree walk in outlineBoundsForRepaint() by maintaining
        a RenderGeometryMap as we traverse the layer tree, and then using it to map
        the outline bounds to the repaint container. Replace the hokey cached offsetFromRoot
        now that the RenderGeometryMap can do a better job.
        
        The clipped overflow rect cannot be mapped simply, so cannot yet make use of
        the geometry map.
        
        Modify the RenderGeometryMap to support mapping to some repaintContainer ancestor.
        Add a RenderObject walk that is necessary to detect flipped writing mode blocks.
        
        Pass the RenderGeometryMap as an optional parameter to outlineBoundsForRepaint.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Make a RenderGeometryMap and pass it down
        to updateLayerPositions(). For partial layouts, we have to push layers
        between the root and the enclosing layer of the layout subtree.
        The geometry map used for repainting does not use SnapOffsetForTransforms,
        so initialize it explicitly with just the UseTransforms flag.
        (WebCore::FrameView::repaintFixedElementsAfterScrolling): Make a RenderGeometryMap
        to pass along to updateLayerPositionsAfterScroll().
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::outlineBoundsForRepaint): Replace the optional cachedOffsetToRepaintContainer
        parameter with an optional RenderGeometryMap, and it use to map the compute rect to
        repaintContainer coordinates.
        * rendering/RenderBox.h:
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::RenderGeometryMap): This now has to store the mapping
        flags to use, so that its behavior can match that of mapLocalToContainer(). The
        pertinent flag is the confusingly named SnapOffsetForTransforms.
        (WebCore::RenderGeometryMap::absolutePoint): Call the new mapToContainer() with
        a null container.
        (WebCore::RenderGeometryMap::absoluteRect): Ditto.
        (WebCore::RenderGeometryMap::mapToContainer): Map to the supplied container,
        asserting that we found it. Add point- and rect-based mapping methods
        akin to the old absoluteRect/absolutePoint.
        (WebCore::canMapViaLayer): We need to test for isRenderFlowThread() here too.
        (WebCore::RenderGeometryMap::pushMappingsToAncestor): When mapping via
        layers, ensure that the RenderView is pushed as the first step.
        * rendering/RenderGeometryMap.h:
        (RenderGeometryMap):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterLayout): New wrapper for updateLayerPositions()
        that makes the geometry map.
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll): New wrapper for updateLayerPositionsAfterScroll
        that makes the geometry map.
        (WebCore::RenderLayer::updateLayerPositions): Now takes an optional RenderGeometryMap.
        Remove the old offsetFromRoot code. Push and pop layers to/from the geometry map. Use
        the geometry map to get the offsetFromRoot as needed by overflow controls. Pass
        it to computeRepaintRects().
        (WebCore::RenderLayer::computeRepaintRects): Pass the geometry map to outlineBoundsForRepaint().
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll): Push and pop to/from the
        geometry map, and pass it to computeRepaintRects().
        (WebCore::RenderLayer::removeOnlyThisLayer): Remove the offsetFromRootBeforeMove
        computation; this could use a geometry map in future if it is shown to be a bottleneck.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::canUseConvertToLayerCoords): It was thought that the isComposited()
        was there because the older cached offsetFromRoot logic was sensitive to compositing,
        but convertToLayerCoords() is not affected by compositing so this check is not needed,
        and actually harmful.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::OverlapMap::OverlapMap): The geometry map
        used for overlap testing should not use SnapOffsetForTransforms, so initialize
        it explicitly with just the UseTransforms flag.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::outlineBoundsForRepaint):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::outlineBoundsForRepaint):
        * rendering/svg/RenderSVGModelObject.h:
        (RenderSVGModelObject):

2012-11-16  Alec Flett  <alecflett@chromium.org>

        Add tests for explicit serialization values
        https://bugs.webkit.org/show_bug.cgi?id=96818

        Reviewed by Adam Barth.

        Expose direct access to the serialization/deserialization mechanisms
        of SerializedScriptValue to DumpRenderTree.

        * testing/Internals.cpp:
        (WebCore::Internals::serializeObject):
        (WebCore):
        (WebCore::Internals::deserializeBuffer):
        * testing/Internals.h:
        (WebCore):
        * testing/Internals.idl:

2012-11-16  Andreas Kling  <akling@apple.com>

        Exploit shared attribute data to avoid parsing identical "style" attributes.
        <http://webkit.org/b/101163>

        Reviewed by Antti Koivisto.

        Track the "inline style dirty" state on ElementAttributeData instead of in a Node flag.
        This allows us to avoid duplicate work for ElementAttributeData that are shared between multiple elements,
        since the state is no longer per-Element.

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

            Disable the matched properties cache for styles with non-standard writing-mode.
            This is necessary because some CSS properties have different meaning depending on context -
            properties handled by CSSProperty::resolveDirectionAwareProperty().

            Now that multiple elements may have identical inlineStyle() pointers, this is necessary to
            avoid mapping StylePropertySets with direction-aware properties to RenderStyles with differing
            writing-modes in the matched properties cache.

        * dom/Node.h:
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::ElementAttributeData):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::ElementAttributeData):
        (ElementAttributeData):
        * dom/Element.h:
        (WebCore::Element::updateInvalidAttributes):
        * dom/Element.cpp:
        (WebCore::Element::getAttribute):
        (WebCore::Element::removeAttribute):
        * dom/StyledElement.h:
        (WebCore::StyledElement::invalidateStyleAttribute):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):

            Move "style attribute dirty" flag to ElementAttributeData.

        (WebCore::Element::cloneAttributesFromElement):

            Remove ugly optimization to avoid reparsing inline style when cloning elements. This now happens
            automagically since cloning nodes just refs the original attribute data.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::setInlineStyleFromString):
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::inlineStyleChanged):

            Avoid reparsing the inline style if the element's attribute data is immutable and already has
            a parsed inlineStyle(). Split the set-inline-style-from-string code out of styleAttributeChanged()
            to make the code more understandable.

2012-11-16  Simon Fraser  <simon.fraser@apple.com>

        Don't update layer positions on scrolling if we're in the middle of layout
        https://bugs.webkit.org/show_bug.cgi?id=102556

        Reviewed by Dan Bernstein.

        RenderLayer::scrollTo() can be called in the middle of layout. When
        that happens we should not waste time updating layer positions,
        compositing layers, or widget positions, because we'll do those at the
        end of layout anyway.
        
        This prevents us from having inconsistent RenderLayer state, which
        hinders future optimizations in this area.

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

2012-11-16  Tony Chang  <tony@chromium.org>

        Remove ENABLE_CSS_HIERARCHIES since it's no longer in use
        https://bugs.webkit.org/show_bug.cgi?id=102554

        Reviewed by Andreas Kling.

        As mentioned in https://bugs.webkit.org/show_bug.cgi?id=79939#c41 ,
        we're going to revist this feature once additional vendor support is
        achieved.

        No new tests, just removing an unused define.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.features.am:

2012-11-16  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Remove cookie-related functions from PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=99340

        Reviewed by Adam Barth.

        Move cookie-related functions out of PlatformSupport and implement
        new PlatformCookieJar interface via NetworkContext.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * loader/CookieJar.cpp:
        * loader/chromium/CookieJarChromium.cpp: Removed.
        * platform/chromium/PlatformSupport.h:
        (WebCore):
        (PlatformSupport):
        * platform/network/NetworkingContext.h:
        (WebKit):
        (NetworkingContext):
        * platform/network/chromium/CookieJarChromium.cpp: Copied from Source/WebCore/loader/chromium/CookieJarChromium.cpp.
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):

2012-11-16  Pablo Flouret  <pablof@motorola.com>

        [JSC] Don't sanitize window.onerror information on crossorigin-enabled scripts
        https://bugs.webkit.org/show_bug.cgi?id=70574

        Reviewed by Geoffrey Garen.

        For scripts that use CORS (via the crossorigin attribute in this case),
        don't sanitize the information passed to the window's onerror handler (i.e.
        message, url, and line number). Useful for scripts hosted on CDNs.

        Tests: http/tests/security/script-crossorigin-onerror-information.html
               http/tests/security/script-no-crossorigin-onerror-should-be-sanitized.html

        * WebCore.exp.in:
        * WebCore.order:

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSDOMBinding.h:
        (WebCore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::cachedScript):
        (ScriptSourceCode):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
            Keep a reference to the cached script in the ScriptSourceCode, so
            that it can be passed around and be available when reporting the
            exception.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::sanitizeScriptError):
        (WebCore::ScriptExecutionContext::reportException):
        (WebCore::ScriptExecutionContext::dispatchErrorEvent):
        * dom/ScriptExecutionContext.h:
        (WebCore):
        (ScriptExecutionContext):
            Check if the script passes the access control checks, and if so,
            don't sanitize the error information.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::PreloadTask::processAttributes):
        (WebCore::PreloadTask::preload):
        (PreloadTask):
        (WebCore::PreloadTask::crossOriginModeAllowsCookies):
            When preloading script elements, check for the crossorigin attribute
            and adjust the request's allowCookies value accordingly. Otherwise
            when the script is loaded from the cache later on, the cross origin mode
            (anonymous/use-credentials) will be effectively ignored.

2012-11-16  Jon Lee  <jonlee@apple.com>

        Change visual look of placeholder
        https://bugs.webkit.org/show_bug.cgi?id=102149
        <rdar://problem/12695566>

        Reviewed by Darin Adler.

        Move the button to the lower-right corner. Move the theming into
        RenderSnapshottedPlugin for now. Eventually we will want to migrate to using the
        shadow DOM instead, and the metrics of the button are needed for click passthrough.

        * Resources/startButton.png: Added.
        * Resources/startButton@2x.png: Added.
        * Resources/startButtonPressed.png: Added.
        * Resources/startButtonPressed@2x.png: Added.
        * WebCore.xcodeproj/project.pbxproj: Add button images.

        Maintain variables to track whether the mouse is over the button, and the rect
        for the button. If the user clicks in the rect, we render a pressed button.
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore): Add named constant for bottom and right padding of the button.
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        (WebCore::RenderSnapshottedPlugIn::paintReplaced):
        (WebCore::startButtonImage): Returns button image.
        (WebCore::startButtonPressedImage): Returns pressed button image.
        (WebCore::RenderSnapshottedPlugIn::paintButton): Draw the button image in the
        lower right hand corner, but only if we are active or hovered.
        (WebCore::RenderSnapshottedPlugIn::repaintButton): Stubbed to call repaint().
        (WebCore::RenderSnapshottedPlugIn::handleEvent): Repaint the button if we are
        hovering over the plugin rect. With a mouse down event, calculate whether the
        mouse position is within the button rect.
        (WebCore::RenderSnapshottedPlugIn::layout): Cache the rect representing the button
        contents.
        * rendering/RenderSnapshottedPlugIn.h:

        Remove theming function for now.
        * rendering/RenderTheme.h:
        (RenderTheme):
        * rendering/RenderThemeMacShared.h:
        * rendering/RenderThemeMacShared.mm:

2012-11-16  Eric Seidel  <eric@webkit.org>

        Deploy ScriptWrappable to more always-wrapped objects
        https://bugs.webkit.org/show_bug.cgi?id=102539

        Reviewed by Adam Barth.

        Add the ScriptWrappable baseclass to:
        CSSStyleDeclaration (anttik tells me these should only be used from JS, even though some old Editing code used to use them)
        ClientRect (element.getBoundingClientRects)
        Event (Not all events end up wrapped, but any which live past dispatch do)
        NodeList (this covers Static and Dynamic node list types, like document.all)
        HTMLCollection (separate from NodeList, for things like table.rows)
        Storage (for window.storage, always wrapped)
        XMLHttpRequest (always wrapped, created from JS)

        This should be a small memory savings as the inline pointer is only 4-8 bytes
        instead of the hashmap entry which would be 8-16.  This may also show up
        on benchmarks which repeatedly access these objects (like window.storage).

        These were found by adding a couple lines of logging-code to
        WebCore::createWrapper when we were in the main world, but took the
        HashMap (instead of inline) storage path. I used sort and uniq -c
        to find the most-frequently wrapped objects (while surfing
        a few common sites) and came up with this list.  There are still a few
        more complicated objects (like CSSStyleDeclaration) which may benifit
        from inline-wrapper-access and will be covered in a later patch.

        * css/CSSStyleDeclaration.h:
        * dom/ClientRect.h:
        * dom/Event.h:
        * dom/NodeList.h:
        * html/HTMLCollection.h:
        * storage/Storage.h:
        * xml/XMLHttpRequest.h:

2012-11-16  Jon Lee  <jonlee@apple.com>

        Simulated events instances do not all have the same underlying event
        https://bugs.webkit.org/show_bug.cgi?id=102468
        <rdar://problem/12716331>

        Reviewed by Alexey Proskuryakov.

        The PassRefPtr with the underlying event is included as an argument for the mouse
        down, up, and click events. But the PassRefPtr loses its underlying pointer after
        the first simulated mouse down event because it gets assigned to that event's
        private m_underlyingEvent variable. We therefore send NULL to the other events.

        The fix is for this and related functions to pass the raw pointer.

        A layout test is not possible to put together because the call sites that use simulated
        events with an underlying event do not send mouse events, and those that send mouse
        events have a NULL underlying event.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick): Require passing in the raw pointer.
        * dom/EventDispatcher.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchSimulatedClick): Ditto.
        * dom/Node.h:

2012-11-16  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r134936.

        * platform/network/win/CookieJarWin.cpp:
        (WebCore::cookieRequestHeaderFieldValue):

2012-11-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134986.
        http://trac.webkit.org/changeset/134986
        https://bugs.webkit.org/show_bug.cgi?id=102110

        Triggered ASSERT in fast/frames/seamless/seamless-inherited-
        origin.html.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::addAuthorRulesAndCollectUserRulesFromSheets):
        (WebCore::collectCSSOMWrappers):
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/Document.cpp:
        (WebCore::Document::setCompatibilityMode):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::~DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::pageGroupUserSheets):
        (WebCore):
        (WebCore::DocumentStyleSheetCollection::clearPageGroupUserSheets):
        (WebCore::DocumentStyleSheetCollection::updatePageGroupUserSheets):
        (WebCore::DocumentStyleSheetCollection::addUserSheet):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage):
        * dom/DocumentStyleSheetCollection.h:
        (DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::documentUserSheets):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        (WebCore::PageGroup::resetUserStyleCacheInAllFrames):
        * page/PageGroup.h:
        (PageGroup):

2012-11-16  Michael Pruett  <michael@68k.org>

        IndexedDB: Propagate DOMRequestState to IndexedDB binding utility functions
        https://bugs.webkit.org/show_bug.cgi?id=102430

        Reviewed by Adam Barth.

        DOMRequestState is currently propagated to some but not all of
        the IndexedDB binding utility functions. In order to implement
        these functions for JSC, this state must be propagated to all
        of the utility functions.

        Tests: storage/indexeddb/*

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::setValueReady):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::generateIndexKeysForValue):
        (WebCore::IDBObjectStore::put):
        (WebCore):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::requestState):
        (IDBRequest):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::serializeIDBValue):
        (WebCore::injectIDBKeyIntoScriptValue):
        * bindings/v8/IDBBindingUtilities.h:
        (WebCore):

2012-11-16  Byungwoo Lee  <bw80.lee@samsung.com>

        Rebaselined run-bindings-tests.
        https://bugs.webkit.org/show_bug.cgi?id=102523

        Reviewed by Dimitri Glazkov.

        Expected results need to be updated after r134931

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrGetter):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackAttributeAttrSetter):
        (WebCore::TestObjV8Internal::withScriptArgumentsAndCallStackCallback):

2012-11-16  Pratik Solanki  <psolanki@apple.com>

        For single element arrays use the pointer into the CFDataRef instead of copying data
        https://bugs.webkit.org/show_bug.cgi?id=102306
        <rdar://problem/12267471>

        Reviewed by Alexey Proskuryakov.

        We generally copy the data received from CFNetwork into our own buffers. But if the
        CFArrayRef has exactly one CFDataRef inside it, then we can just hold on to the CFDataRef
        and access its memory directly and avoid making a copy.

        This also moves the creation of PurgeableBuffer from CachedResource to SharedBuffer.
        SharedBuffer::createPurgeableBuffer() will avoid creating PurgeableBuffer when the
        SharedBuffer is backed by a NSData/CFDataRef and when we want to optimize and directly use
        the memory in the data array.

        No new tests because no change in functionality.

        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::createPurgeableBuffer): Added.
        * loader/ResourceBuffer.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::makePurgeable):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::createPurgeableBuffer): Added.
        (WebCore::SharedBuffer::data):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::platformData): Use reinterpret_cast instead of C-style cast.
        (WebCore::SharedBuffer::maybeTransferPlatformData): Use reinterpret_cast instead of C-style cast.
        (WebCore::SharedBuffer::singleDataArrayBuffer): Added.

2012-11-16  Antti Koivisto  <antti@apple.com>

        REGRESSION(r129644): User StyleSheet not applying
        https://bugs.webkit.org/show_bug.cgi?id=102110

        Reviewed by Andreas Kling.

        Injected stylesheets added as UserStyleAuthorLevel fail to apply. r129644 implicitly assumed that
        such things don't exists but on Chromium addUserStyleSheet() confusingly uses them.
        
        The patch adds injected author stylesheets to DocumentStyleSheetCollection::activeStyleSheets().
        It also generally cleans up the code around injected and user stylesheets.

        Tests: userscripts/user-script-and-stylesheet.html
               userscripts/user-stylesheet-invalidate.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::collectRulesFromUserStyleSheets):
        (WebCore::collectCSSOMWrappers):
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/Document.cpp:
        (WebCore::Document::setCompatibilityMode):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::~DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::injectedUserStyleSheets):
        (WebCore):
        (WebCore::DocumentStyleSheetCollection::injectedAuthorStyleSheets):
        (WebCore::DocumentStyleSheetCollection::updateInjectedStyleSheetCache):
        (WebCore::DocumentStyleSheetCollection::invalidateInjectedStyleSheetCache):
        (WebCore::DocumentStyleSheetCollection::addUserSheet):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage):
        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::documentUserStyleSheets):
        (DocumentStyleSheetCollection):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        (WebCore::PageGroup::invalidatedInjectedStyleSheetCacheInAllFrames):
        * page/PageGroup.h:
        (PageGroup):

2012-11-16  Andreas Kling  <akling@apple.com>

        StyleResolver: Only input elements need equal "readonly" attribute for style sharing.
        <http://webkit.org/b/102536>

        Reviewed by Antti Koivisto.

        Move the comparison of the "readonly" attribute into canShareStyleWithControl() since it's only
        relevant for sharing style between <input> elements.

        Also skip attribute comparisons for form control elements that share the same ElementAttributeData.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithControl):
        (WebCore::haveIdenticalStyleAffectingAttributes):

2012-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134867.
        http://trac.webkit.org/changeset/134867
        https://bugs.webkit.org/show_bug.cgi?id=102544

        Broke security fuzzier test (heap-buffer-overflow) (Requested
        by bfulgham on #webkit).

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::process):

2012-11-16  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update RTCPeerConnection states to match the latest editors draft
        https://bugs.webkit.org/show_bug.cgi?id=102382

        Reviewed by Adam Barth.

        Updating readyState & iceState, and adding iceGatheringState.
        Also safeguarding the event timer callback.

        Patch covered by existing tests.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::localDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::remoteDescription):
        (WebCore::RTCPeerConnection::updateIce):
        (WebCore::RTCPeerConnection::addIceCandidate):
        (WebCore::RTCPeerConnection::readyState):
        (WebCore::RTCPeerConnection::iceGatheringState):
        (WebCore):
        (WebCore::RTCPeerConnection::iceState):
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::didChangeIceGatheringState):
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::changeReadyState):
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.h:
        (RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.idl:
        * dom/EventNames.h:
        (WebCore):
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        (RTCPeerConnectionHandlerClient):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::didChangeICEGatheringState):
        (WebCore):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (RTCPeerConnectionHandlerChromium):

2012-11-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134973.
        http://trac.webkit.org/changeset/134973
        https://bugs.webkit.org/show_bug.cgi?id=99340

        Broke compile on at least Mac and Linux.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * loader/CookieJar.cpp:
        * loader/chromium/CookieJarChromium.cpp: Renamed from Source/WebKit/chromium/src/FrameNetworkingContextImpl.cpp.
        (WebCore):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        * platform/chromium/PlatformSupport.h:
        (WebCore):
        (PlatformSupport):
        * platform/network/NetworkingContext.h:
        * platform/network/chromium/CookieJarChromium.cpp: Removed.

2012-11-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Move GtkAuthenticationDialog to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=101843

        Reviewed by Gustavo Noronha Silva.

        Make GtkAuthenticationDialog more general, so that it can be subclassed in 
        WebKit2. We cannot use the WebCore authentication-related classes directly there.

        No new tests. This patch does not change behavior.

        * platform/gtk/GtkAuthenticationDialog.cpp:
        (WebCore::GtkAuthenticationDialog::GtkAuthenticationDialog): Remove an unused include and reorder
        some field initializers.
        (WebCore::GtkAuthenticationDialog::authenticate): Now handle both the okay and cancel case here. This
        makes it simpler to subclass.
        (WebCore::GtkAuthenticationDialog::authenticationDialogResponseCallback): Handle fetching the username
        and password here, so that it can be shared with subclasses.
        * platform/gtk/GtkAuthenticationDialog.h: Make some methods virtual and protected so they can be
        subclasses.

2012-11-16  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Remove cookie-related functions from PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=99340

        Reviewed by Adam Barth.

        Move cookie-related functions out of PlatformSupport and implement
        new PlatformCookieJar interface via NetworkContext.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * loader/CookieJar.cpp:
        * loader/chromium/CookieJarChromium.cpp: Removed.
        * platform/chromium/PlatformSupport.h:
        (WebCore):
        (PlatformSupport):
        * platform/network/NetworkingContext.h:
        (WebKit):
        (NetworkingContext):
        * platform/network/chromium/CookieJarChromium.cpp: Copied from Source/WebCore/loader/chromium/CookieJarChromium.cpp.
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):

2012-11-16  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix assertion bug of build fix r134961
        https://bugs.webkit.org/show_bug.cgi?id=102533

        Reviewed by Martin Robinson.

        Assertion condition should be '!d->m_currentWebChallenge.isNull()'

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

2012-11-16  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Add missing WebRTCPeerConnectionHandlerClient::didAddRemoteDataChannel
        https://bugs.webkit.org/show_bug.cgi?id=102386

        Reviewed by Adam Barth.

        Existing tests expanded to cover patch.

        * platform/mediastream/RTCDataChannelDescriptor.cpp:
        (WebCore::RTCDataChannelDescriptor::RTCDataChannelDescriptor):
        (WebCore::RTCDataChannelDescriptor::readyStateChanged):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::didAddRemoteDataChannel):
        (WebCore):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (WebKit):
        (RTCPeerConnectionHandlerChromium):

2012-11-16  Scott Violet  <sky@chromium.org>

        [chromium] Copy linux theme related files to default
        https://bugs.webkit.org/show_bug.cgi?id=102403

        Reviewed by Tony Chang

        Transitional patch that copies linux WebThemeEngine to default directory.

        No new tests, refactoring only.

        * WebCore.gyp/WebCore.gyp: Update compile rules when use_default_render_theme is set.
        * WebCore.gypi: Adds new files.
        * platform/chromium/PlatformSupport.h:
        * platform/chromium/PlatformThemeChromiumDefault.cpp: Copied from Source/WebCore/platform/chromium/PlatformThemeChromiumLinux.cpp.
        * platform/chromium/PlatformThemeChromiumDefault.h: Copied from Source/WebCore/platform/chromium/PlatformThemeChromiumLinux.h.
        * platform/chromium/ScrollbarThemeChromiumDefault.cpp: Copied from Source/WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp.
        * platform/chromium/ScrollbarThemeChromiumDefault.h: Copied from Source/WebCore/platform/chromium/ScrollbarThemeChromiumLinux.h.
        * rendering/RenderThemeChromiumDefault.cpp: Copied from Source/WebCore/rendering/RenderThemeChromiumLinux.cpp.
        * rendering/RenderThemeChromiumDefault.h: Copied from Source/WebCore/rendering/RenderThemeChromiumLinux.h.

2012-11-16  Alec Flett  <alecflett@chromium.org>

        IndexedDB: add missing 'explicit' and fix backing store release
        https://bugs.webkit.org/show_bug.cgi?id=102450

        Reviewed by Tony Chang.

        A inconsequential regression was introduced in http://trac.webkit.org/changeset/134129
        which resulted in objects sticking around a bit longer than
        expected. This makes sure the LevelDBTransaction is released
        at the moment of commit/rollback rather than when IDBTransactionBackendImpl
        is destroyed.

        No new tests, this is just internal state that will affect
        some future refactoring.

        * Modules/indexeddb/IDBBackingStore.h:
        (Cursor):
        (Transaction):
        (WebCore::IDBBackingStore::Transaction::reset):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):

2012-11-16  Dimitri Glazkov  <dglazkov@chromium.org>

        [Chromium] One last tweak to WebCore.gypi to make Win build not sad.

        * WebCore.gypi: Removed one last mention of accessibility/gtk file.

2012-11-16  Robert Flack  <flackr@chromium.org>

        Handle gesture events on scrollbars.
        https://bugs.webkit.org/show_bug.cgi?id=101516

        Reviewed by Antonio Gomes.

        Adds a gesture event handler to scrollbars and sends gestures beginning
        over a scrollbar to this handler to allow touch scrolling scrollbars.

        Test: fast/events/touch/gesture/gesture-scrollbar.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::isScrollbarHandlingGestures):
        (WebCore):
        * page/EventHandler.h:
        (EventHandler):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore):
        (WebCore::Scrollbar::gestureEvent):
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseUp):
        (WebCore::Scrollbar::mouseDown):
        * platform/Scrollbar.h:
        (WebCore):
        (Scrollbar):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::hitTest):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::hitTest):
        * platform/ScrollbarThemeComposite.h:
        (ScrollbarThemeComposite):
        * platform/qt/ScrollbarThemeQStyle.cpp:
        (WebCore::ScrollbarThemeQStyle::hitTest):
        * platform/qt/ScrollbarThemeQStyle.h:
        (ScrollbarThemeQStyle):

2012-11-16  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium-Android] Stack overflow in MediaControlsChromiumAndroid.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102444

        Reviewed by Adam Barth.

        No new tests. Have been covered by many existing layout tests.

        * html/shadow/MediaControlsChromiumAndroid.cpp:
        (WebCore::MediaControls::create): Calls createControls instead of itself.

2012-11-16  Andreas Kling  <akling@apple.com>

        StyleResolver: Optimize sharing candidate evaluation for elements with shared attribute data.
        <http://webkit.org/b/102507>

        Reviewed by Antti Koivisto.

        When evaluating two elements as potential style sharing candidate, we have a whole bunch of code
        comparing the various attributes that would prevent sharing.

        If the two elements both share the same ElementAttributeData, we can skip all those checks
        since they are guaranteed to have equal attributes.

        Cuts the time spent in canShareStyleWithElement() by 25% on the HTML5 spec at <http://whatwg.org/c>.

        * css/StyleResolver.cpp:
        (WebCore::haveIdenticalStyleAffectingAttributes):
        (WebCore::StyleResolver::canShareStyleWithElement):

2012-11-16  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][GTK] Build fix after r134955
        https://bugs.webkit.org/show_bug.cgi?id=102527

        Reviewed by Martin Robinson.

        Fix the EFL,GTK debug bulid fails after r134955.

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

2012-11-15  Alexey Proskuryakov  <ap@apple.com>

        Private Browsing is a per-page setting that sets a global value
        https://bugs.webkit.org/show_bug.cgi?id=67870

        Reviewed by Sam Weinig.

        Make ResourceHandle{Mac,CFNet} use context to access storage session.

        * WebCore.exp.in: We track less session state in WebCore now, so we need fewer
        exports.

        * loader/FrameNetworkingContext.h: Added an OVERRIDE.

        * page/Settings.cpp: (WebCore::Settings::setPrivateBrowsingEnabled): WebCore
        no longer keeps track of a globally enabled private CFNetwork storage session.

        * platform/CookiesStrategy.h: Added defaultCookieStorage(). Some cookie jar methods
        don't have a NetworkingContext pointer, and have to use whatever a client expects
        them to do. Perhaps we should move those methods away from WebCore eventually.

        * platform/network/NetworkingContext.h: Added storageSession().

        * platform/network/ResourceHandle.h: Removed sttaic methods for dealing with global
        sessions.

        * platform/network/ResourceHandleInternal.h: Added m_storageSession. We need to
        remember it post-creation to do things in willSendRequest. Alternatively, we could
        keep a reference to NetworkingContext itself.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::setCookiesFromDOM): currentCFHTTPCookieStorage now needs a context,
        there is no globally current one any more. Also, we don't really expect cookie
        stirage to be 0 when not using NSURLConnection.
        (WebCore::cookiesForDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::cookiesEnabled): Ditto.
        (WebCore::getRawCookies): Ditto.
        (WebCore::deleteCookie): Ditto.
        (WebCore::getHostnamesWithCookies): Ditto.
        (WebCore::deleteCookiesForHostname): Ditto.
        (WebCore::deleteAllCookies): Ditto.
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::currentCFHTTPCookieStorage): Use a context.
        (WebCore::defaultCFHTTPCookieStorage): Except for Windows-only override session,
        this is implemented in a strategy.
        (WebCore::overridenCookieStorage): Exposed the override for WebKit use on Windows.

        * platform/network/cf/CookieStorageCFNet.h: Ditto.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest): Use storage session from the context, not global one.
        (WebCore::makeFinalRequest): Merged this into the only remaining caller. This
        function didn't really make any sense on its own.
        (WebCore::shouldRelaxThirdPartyCookiePolicy): Factored out of createCFURLConnection
        to match Mac.
        (WebCore::ResourceHandle::createCFURLConnection): While merging makeFinalRequest()
        in, removed some seemingly nonsensical code that was getting and immediately re-applying
        cookie storage accept policy.
        (WebCore::ResourceHandle::start): Store context->storageSession() for use in willSendRequest.
        (WebCore::ResourceHandle::willSendRequest): Apply the stored session, not global one.
        (WebCore::ResourceHandle::storageSession): An accessor for static methods that cannot
        access "d".
        (WebCore::ResourceHandle::loadResourceSynchronously): Store context->storageSession() for use in willSendRequest.
        (WebCore::ResourceHandle::willLoadFromCache): Don't call makeFinalRequest here.
        It didn't match Mac, and nothing in makeFinalRequest should have affected the result.

        * platform/network/cf/ResourceRequestCFNet.cpp: (WebCore::ResourceRequest::doUpdatePlatformRequest):
        This function used to apply current storage session to every request for no apparent
        reason.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForDOM): Changed to pass context to currentCFHTTPCookieStorage.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::setCookiesFromDOM): Ditto.
        (WebCore::cookiesEnabled): Ditto.
        (WebCore::getRawCookies): Ditto.
        (WebCore::deleteCookie): Ditto.
        (WebCore::getHostnamesWithCookies): Ditto.
        (WebCore::deleteCookiesForHostname): Ditto.
        (WebCore::deleteAllCookies): Ditto.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::shouldRelaxThirdPartyCookiePolicy): There was no need to special case
        null currentCFHTTPCookieStorage, WKSI handles that internally. Added a context
        argument, so that the function can access current session.
        (WebCore::ResourceHandle::createNSURLConnection): Updated for other code changes.
        (WebCore::ResourceHandle::start): Store context->storageSession() for use in willSendRequest.
        (WebCore::ResourceHandle::willLoadFromCache): Style fix.
        (WebCore::ResourceHandle::loadResourceSynchronously): Store context->storageSession()
        for use in willSendRequest. 
        (WebCore::ResourceHandle::willSendRequest): Use stored session, not global one.

2012-11-16  Dimitri Glazkov  <dglazkov@chromium.org>

        [Chromium] Land a proper fix for r134939.

        * WebCore.gyp/WebCore.gyp: Added exclusion for "atk".
        * WebCore.gypi: Put the accessibility/atk directory back into WebCore.gypi.

2012-11-16  Dimitri Glazkov  <dglazkov@chromium.org>

        [Chromium] Just yank the whole accessibility/atk dir out of WebCore.gypi.

2012-11-16  Dimitri Glazkov  <dglazkov@chromium.org>

        [Chromium] Updated WebCore.gypi after r134939.

        * WebCore.gypi: Renamed acessibility/gtk to accessibility/atk.

2012-11-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Move CredentialBackingStore usage from GtkAuthenticationDialog to ResourceHandleSoup
        https://bugs.webkit.org/show_bug.cgi?id=101840

        Reviewed by Gustavo Noronha Silva.

        Make ResourceHandleSoup aware of per-session CredentialStorage and persistent CredentialStorage.
        Persistent credential storage interaction is moved from GtkAuthenticationDialog, so that it can
        be used whether or not GtkAuthenticationDialog is used or not. We try to properly handle redirects
        in the manner that the CFNet backend does.

        No new tests. There are tests for this behavior, but they cannot be activated until we finish
        plumbing this through to the API layer. Once that patch lands, the tests will be turned on.

        * platform/gtk/GtkAuthenticationDialog.cpp: No longer store credentials into the persistent
        storage manually, instead rely on ResourceHandleSoup. Also, we no longer get proposed credentials
        from the persistent storage here as well. They are pre-loaded by the ResourceHanndle.
        * platform/gtk/GtkAuthenticationDialog.h: Remove callbacks and members associated with saving
        credentials to the persistent credential store.
        * platform/network/ResourceHandle.h:
        (ResourceHandle): Add a method which is used to continue asynchronously after looking for
        proposed credentials in the persistent credential store.
        * platform/network/ResourceHandleInternal.h: Add a member which tracks persistent credentials to be added once we know
        an authentication succeeded.
        * platform/network/gtk/CredentialBackingStore.cpp:
        (CredentialForChallengeAsyncReadyCallbackData): Added this data structure used for asynchronous access
        of stored credentials.
        (WebCore::credentialForChallengeAsyncReadyCallback): Ditto for this callback.
        (WebCore::CredentialBackingStore::credentialForChallenge): Make this method asynchronous.
        * platform/network/gtk/CredentialBackingStore.h:
        (CredentialBackingStore): Update method signatures for for making credentialForChallenge asynchronous.
        * platform/network/soup/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::setProposedCredential): Added a setter so that ResourceHandleSoup
        can set proposed credentials from the persistent credential store.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback): For GTK+ save any pending credential in the persistent credential storage
        if the authentication succeeded.
        (WebCore::applyAuthenticationToRequest): Added this method which generically embeds stored credentials
        in the request URI. This is the method that Soup uses to override any soup-stored session credential.
        (WebCore::restartedCallback): Strip credentials for requests that span a security origin. Handle
        authenticating requests from the session store.
        (WebCore::createSoupRequestAndMessageForHandle): Make the local request reference mutable.
        (WebCore::ResourceHandle::start): Remove some code which is now part of applyAuthenticationToRequest.
        Call applyAuthenticationToRequest and clear the user and password members like the CFNet backend does.
        (WebCore::getCredentialFromPersistentStoreCallback): Added this callback for getting persistently stored credentials.
        (WebCore::ResourceHandle::continueDidReceiveAuthenticationChallenge): Split out didReceiveAuthenticationChallenge
        into this asynchronous bit.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): For GTK+ continue handling this situation after
        first looking in the persistent credential store.
        (WebCore::ResourceHandle::receivedCredential): Store session credentials in the session storage, which is
        at the moment a redundant version of the Soup session storage and also prepare any persistent credentials
        for storage later (see gotHeadersCallback).

2012-11-16  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: TypeMismatchError
        https://bugs.webkit.org/show_bug.cgi?id=102418

        Reviewed by Kentaro Hara.

        Patch 17 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:
        (WebCore):
        * dom/ExceptionCode.h:

2012-11-16  Balazs Kelemen  <kbalazs@webkit.org>

        Coordinated Graphics: support the "freeze animations" API
        https://bugs.webkit.org/show_bug.cgi?id=100703

        Reviewed by Noam Rosenthal.

        Typo fix after previous patch.

        No new tests, it's just a typo that only takes effect in the browser.

        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore::GraphicsLayerAnimation::GraphicsLayerAnimation):
        Initialize members.

2012-11-16  Dan Carney  <dcarney@google.com>

        add 7 bit strings capabilities to the v8 binding layer
        https://bugs.webkit.org/show_bug.cgi?id=91850

        Reviewed by Adam Barth.

        This change enables the v8 binding layer to make use of webkit's
        8 bit string capabilities. Using 8 bit strings leads to certain
        benchmark performance improvemnts as can be seen in
        https://bug-91850-attachments.webkit.org/attachment.cgi?id=163334.

        No new tests.  Test coverage already extensive.

        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::visitExternalStrings):
        * bindings/v8/V8StringResource.cpp:
        (StringTraits):
        (WebCore::false):
        (WebCore):
        (WebCore::true):
        (WebCore::v8StringToWebCoreString):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::makeExternalString):
        (WebCore::WebCoreStringResourceBase::toWebCoreStringResourceBase):
        (WebCore):
        (WebCore::WebCoreStringResourceBase::visitStrings):
        * bindings/v8/V8ValueCache.h:
        (WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::~WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::atomicString):
        (WebCore::WebCoreStringResourceBase::memoryConsumption):
        (WebCoreStringResource16):
        (WebCore::WebCoreStringResource16::WebCoreStringResource16):
        (WebCore):
        (WebCoreStringResource8):
        (WebCore::WebCoreStringResource8::WebCoreStringResource8):

2012-11-16  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: InvalidAccessError
        https://bugs.webkit.org/show_bug.cgi?id=102400

        Reviewed by Kentaro Hara.

        Patch 15 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-16  Alexandru Chiculita  <achicu@adobe.com>

        [Texmap][CSS Shaders] Make the CustomFilterValidatedProgram maintain the platform compiled program
        https://bugs.webkit.org/show_bug.cgi?id=102414

        Reviewed by Noam Rosenthal.

        Added WebCore classes needed for the WebKit2 implementation of Texture Mapper to keep a reference to the 
        platform compiled custom filter. It is just used to maintain the life-time of the objects. WebKit2 injects a
        client in TextureMapperPlatformCompiledProgram and receives a callback when the custom filter program is not
        used to render any layer on the page. 

        Note that CustomFilterValidatedProgram are reused across multiple elements of the same page. Also, the instances
        are reused across frames, so animations should reuse the same pre-validated program. In this case, the mechanism is
        extended and reused in the platform compositor.
        
        No new tests, existing tests for CSS Custom Filters already cover this path.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.pri:
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore):
        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        (WebCore):
        (CustomFilterValidatedProgram):
        * platform/graphics/filters/texmap/CustomFilterValidatedProgramTextureMapper.cpp: Added.
        (WebCore):
        (WebCore::CustomFilterValidatedProgram::platformCompiledProgram): Platform implementation for creating and deleting the reference.
        (WebCore::CustomFilterValidatedProgram::platformInit):
        (WebCore::CustomFilterValidatedProgram::platformDestroy):
        * platform/graphics/filters/texmap/TextureMapperPlatformCompiledProgram.h: Added.
        (WebCore):
        (TextureMapperPlatformCompiledProgramClient):
        (WebCore::TextureMapperPlatformCompiledProgramClient::ref):
        (WebCore::TextureMapperPlatformCompiledProgramClient::deref):
        (TextureMapperPlatformCompiledProgram):
        Stores a link to a TextureMapperPlatformCompiledProgramClient. It's main purpose is to call unref on the client when
        the shader is not needed anymore. WebKit2 can use that to delete the corresponding shader from the compositor side.
        (WebCore::TextureMapperPlatformCompiledProgram::create):
        (WebCore::TextureMapperPlatformCompiledProgram::setClient): Used by WebKit2 to inject the platform client.
        (WebCore::TextureMapperPlatformCompiledProgram::client):
        (WebCore::TextureMapperPlatformCompiledProgram::TextureMapperPlatformCompiledProgram):

2012-11-16  Andreas Kling  <akling@apple.com>

        Short-circuit Element::hasEquivalentAttributes() if elements share attribute data.
        <http://webkit.org/b/102498>

        Reviewed by Antti Koivisto.

        Add a fast path to hasEquivalentAttributes() that checks if both elements are using
        the same ElementAttributeData.

        * dom/Element.cpp:
        (WebCore::Element::hasEquivalentAttributes):

2012-11-16  Zeno Albisser  <zeno@webkit.org>

        [Qt] Adding a null pointer check for currentContext to GraphicsContext3DQt.
        https://bugs.webkit.org/show_bug.cgi?id=102360

        QOpenGLContext::currentContext() will return null, in case there is
        no current context. Therefore currentContext must be null-checked
        before it can be reused.
        Making a context current on a null-surface on the other hand is
        perfectly possible.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::blitMultisampleFramebufferAndRestoreContext):

2012-11-16  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Workaround to show shortcuts for panels that hasn't been loaded.
        https://bugs.webkit.org/show_bug.cgi?id=102488

        Reviewed by Vsevolod Vlasov.

        Panels are lazily loaded / instantiated.
        Panel constructors register keyboard shortcuts.

        When user open shortcuts screen all panel should be loaded.
        Otherwise some shortcuts will be missing.

        * inspector/front-end/ShortcutsScreen.js: Added callback invokation.
        * inspector/front-end/inspector.js:
        Provided callback that loads all panels.

2012-11-16  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove IsSubType() from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=102348

        Reviewed by Adam Barth.

        CodeGenerator.pm has IsStrictSubType(). CodeGeneratorV8.pm should use it.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (IsSubType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GetInternalFields):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateFunctionCallback):
        (GenerateImplementationIndexer):
        (GenerateToV8Converters):

2012-11-16  Mario Sanchez Prada  <mario@webkit.org>

        [EFL] Share WebKit-Gtk's Accessibility implementation with others WebKit ports.
        https://bugs.webkit.org/show_bug.cgi?id=99578

        Reviewed by Martin Robinson.

        Renamed WebCore/accessibility/gtk to WebCore/accessibility/atk.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * accessibility/atk/AXObjectCacheAtk.cpp: Renamed from
        Source/WebCore/accessibility/gtk/AXObjectCacheAtk.cpp.
        * accessibility/atk/AccessibilityObjectAtk.cpp: Renamed from
        Source/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp.
        * accessibility/atk/WebKitAccessibleHyperlink.cpp: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleHyperlink.cpp.
        * accessibility/atk/WebKitAccessibleHyperlink.h: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleHyperlink.h.
        * accessibility/atk/WebKitAccessibleInterfaceAction.cpp: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceAction.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceAction.h: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceAction.h.
        * accessibility/atk/WebKitAccessibleInterfaceComponent.cpp:
        Renamed from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceComponent.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceComponent.h: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceComponent.h.
        * accessibility/atk/WebKitAccessibleInterfaceDocument.cpp: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceDocument.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceDocument.h: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceDocument.h.
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.cpp:
        Renamed from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceEditableText.h:
        Renamed from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.h.
        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.cpp:
        Renamed from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceHyperlinkImpl.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.h:
        Renamed from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceHyperlinkImpl.h.
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        Renamed from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceHypertext.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.h: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceHypertext.h.
        * accessibility/atk/WebKitAccessibleInterfaceImage.cpp: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceImage.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceImage.h: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceImage.h.
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        Renamed from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceSelection.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceSelection.h: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceSelection.h.
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceTable.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceTable.h: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceTable.h.
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceText.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceText.h: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceText.h.
        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp: Renamed
        from Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceValue.cpp.
        * accessibility/atk/WebKitAccessibleInterfaceValue.h: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceValue.h.
        * accessibility/atk/WebKitAccessibleUtil.cpp: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.cpp.
        * accessibility/atk/WebKitAccessibleUtil.h: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.h.
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp.
        * accessibility/atk/WebKitAccessibleWrapperAtk.h: Renamed from
        Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.h.

2012-11-16  Shinya Kawanaka  <shinyak@chromium.org>

        Changing pseudoClass (:indeterminate) should cause distribution
        https://bugs.webkit.org/show_bug.cgi?id=101903

        Reviewed by Dimitri Glazkov.

        <progress> and <input type="checkbox"> have 'indeterminate' state. When their state is changed, we have to
        invalidate distribution if necessary. To check it, we collect a feature that :invalidate is used in select attributes.

        For <input>, we also have to see 'type' is changed. According to the spec, :indeterminate should match only
        progress element or <input type="checkbox">. So changing 'type' might also change :indeterminate state.

        Tests: fast/dom/shadow/pseudoclass-update-indeterminate-input.html
               fast/dom/shadow/pseudoclass-update-indeterminate-progress.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::setIndeterminate):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::didElementStateChange):

2012-11-16  Alexis Menard  <alexis@webkit.org>

        Factorize the creation of primitive values with a pair into a function.
        https://bugs.webkit.org/show_bug.cgi?id=102485

        Reviewed by Antti Koivisto.

        The pattern is already existing in various call sites inside CSSParser
        and more will be added in the future (see bug 102104).

        No new tests : It's a refactoring only, the tests should cover it.

        * css/CSSParser.cpp:
        (WebCore):
        (WebCore::createPrimitiveValuePair):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseBorderImageRepeat):
        (WebCore::CSSParser::parseBorderRadius):
        (WebCore::CSSParser::parseCounter):

2012-11-16  Mark Pilgrim  <pilgrim@chromium.org>

        Expand PlatformCookieJar interface to allow for other ports
        https://bugs.webkit.org/show_bug.cgi?id=102456

        Reviewed by Adam Barth.

        Add firstParty and cookieURL arguments to several functions to
        prepare for integrating Chromium port into new PlatformCookieJar
        interface.

        * loader/CookieJar.cpp:
        (WebCore::cookiesEnabled):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):
        * platform/network/PlatformCookieJar.h:
        (WebCore):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        * platform/network/qt/CookieJarQt.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):

2012-11-16  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderGrid should have a function to resolve grid position
        https://bugs.webkit.org/show_bug.cgi?id=102441

        Reviewed by Ojan Vafai.

        The code was doing this conversion implicitly inside RenderGrid::findChildLogicalPosition.
        Also note that we also provided a fallback by returning LayoutPoint() (ie the (0, 0) position
        on the grid) if we couldn't handle the value. The explicit conversion is needed in order to
        support render areas and add a proper grid model to RenderGrid.

        No expected change in behavior.

        * rendering/RenderGrid.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPosition):
        Added this new function to handle the conversion. We re-use Length but should never see
        a lot of the <length> values so I added some ASSERTs to enforce and catch that.

        (WebCore::RenderGrid::findChildLogicalPosition):
        Simplified the function now that it just use resolveGridPosition.

2012-11-16  Ulan Degenbaev  <ulan@chromium.org>

        [V8] Increment the amount of externally allocated memory for the receiving V8 isolate when transferring ArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=94463

        Reviewed by Kentaro Hara.

        Call AdjustAmountOfExternalAllocatedMemory when V8ArrayBuffer is deserialized and transferred.

        Test: ManualTests/typed-array-memory.html

        * bindings/v8/SerializedScriptValue.cpp:

2012-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134694.
        http://trac.webkit.org/changeset/134694
        https://bugs.webkit.org/show_bug.cgi?id=102481

        it made API test crash on EFL port (Requested by gyuyoung on
        #webkit).

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::fillColorsFromEdjeClass):
        (WebCore::RenderThemeEfl::setColorFromThemeClass):
        (WebCore::RenderThemeEfl::loadTheme):
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        * platform/efl/RenderThemeEfl.h:
        (RenderThemeEfl):

2012-11-16  Mike West  <mkwst@chromium.org>

        Web Inspector: Move call stack generation out of bindings.
        https://bugs.webkit.org/show_bug.cgi?id=101331

        Reviewed by Yury Semikhatsky.

        Currently, we generate stack traces for console messages at each call
        site. Bug 100650 has the end goal of moving all stack trace generation
        inside of the Inspector in order to ensure that we never send a console
        message without a stack trace if it's possible to generate one. This
        also ensures that we never generate unused call stacks.

        This patch is the first step in that direction, moving stack trace
        generation out of the Console bindings, and into either Console or
        InspectorConsoleAgent.

        No visible change in behavior should result; this refactoring should
        continue to pass all existing inspector tests.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profile):
        (WebCore::JSConsole::profileEnd):
            Adjust custom JSC Console bindings to drop call stack generation.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateCallWith):
            Drop call stack generation from JSC and V8 bindings.
        * bindings/scripts/CodeGeneratorGObject.pm:
            Skip timeEnd explicitly in these bindings; it used to include
            ScriptArguments, which autoskipped it. Now it doesn't, so it needs
            to be called out on its own.
        * bindings/v8/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStackForConsole):
        (WebCore::createScriptCallStack):
        (WebCore):
        * bindings/v8/ScriptCallStackFactory.h:
        (WebCore):
            Add 'createScriptCallStack(ScriptState*, size_t)' to V8's
            ScriptCallStackFactory in order to match JCS' implementation.
            It simply delegates to 'createScriptCallStackForConsole', which
            now also accepts a 'maxStackSize' parameter.
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallback):
        (WebCore::V8Console::assertCallback):
        (WebCore::V8Console::profileCallback):
        (WebCore::V8Console::profileEndCallback):
            Adjust custom V8 bindings to drop call stack generation.
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
            With the eventual goal of getting rid of the call stack parameter
            entirely, this patch drops it from one version of
            'addMessageToConsole' (replacing it with ScriptState*), and creates
            a new version that only accepts a call stack. We should be able to
            migrate most (all?) external call sites over to the arguments
            version in future patches.
        (WebCore):
        (WebCore::InspectorConsoleAgent::count):
            Count takes 'ScriptState*' instead of a call stack, and generates
            the stack as needed.
        * inspector/InspectorConsoleAgent.h:
        (InspectorConsoleAgent):
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore):
        (WebCore::InspectorInstrumentation::consoleCount):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
            Changes the InspectorInstrumentation pipeline to match the
            InspectorConsoleAgent changes.
        * page/Console.cpp:
        (WebCore::Console::addMessage):
            We now (always) generate one frame of a stack trace in order to
            populate line numbers and caller URLs. If we need to print the whole
            trace here, we generate a full stack.
        (WebCore::Console::debug):
        (WebCore::Console::error):
        (WebCore::Console::info):
        (WebCore::Console::log):
        (WebCore::Console::warn):
        (WebCore::Console::dir):
        (WebCore::Console::dirxml):
        (WebCore::Console::clear):
        (WebCore::Console::trace):
        (WebCore::Console::assertCondition):
        (WebCore::Console::count):
        (WebCore::Console::markTimeline):
        (WebCore::Console::timeEnd):
        (WebCore::Console::timeStamp):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
            s/ScriptCallStack/ScriptState*/g. Also, printing the stack trace
            has been moved out of 'trace' and into 'addMessage'.
        * page/Console.h:
        (Console):
        * page/Console.idl:
            Drop the call stack, add the script state.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addMessageToWorkerConsole):
            Use the new, explicitly call stacked addMessageToConsole. We'll kill
            this in a future patch.

2012-11-16  Marja Hölttä  <marja@chromium.org>

        Add initiator to CachedResourceRequest.
        https://bugs.webkit.org/show_bug.cgi?id=101935

        Reviewed by Adam Barth.

        Motivation: Chromium needs to know which elements request a
        resource (such as an image or a script) (bug 92761). In addition,
        for exposing resource timing information (bug 84883) we need to
        store the initiator, and this is the first step towards it.

        No new tests: No visible change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedImage):
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cachedImageSet):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImageValue.h:
        (WebCore):
        (CSSImageValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * css/WebKitCSSSVGDocumentValue.cpp:
        (WebCore::WebKitCSSSVGDocumentValue::load):
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::cachedShader):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::PreloadTask::preload):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        (WebCore):
        (WebCore::CachedResourceLoader::preload):
        * loader/cache/CachedResourceLoader.h:
        (WebCore):
        (CachedResourceLoader):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        (WebCore):
        (WebCore::CachedResourceRequest::~CachedResourceRequest):
        (WebCore::CachedResourceRequest::setInitiator):
        (WebCore::CachedResourceRequest::initiatorName):
        (WebCore::CachedResourceRequest::initiatorDocument):
        (WebCore::CachedResourceRequest::initiatorElement):
        * loader/cache/CachedResourceRequest.h:
        (WebCore):
        (WebCore::CachedResourceRequest::setOptions):
        (WebCore::CachedResourceRequest::defer):
        (WebCore::CachedResourceRequest::setDefer):
        (CachedResourceRequest):
        * loader/cache/CachedResourceRequestInitiators.cpp: Copied from Source/WebCore/loader/cache/CachedResourceRequest.cpp.
        (WebCore):
        (WebCore::CachedResourceRequestInitiators::CachedResourceRequestInitiators):
        * loader/cache/CachedResourceRequestInitiators.h: Copied from Source/WebCore/loader/cache/CachedResourceRequest.cpp.
        (WebCore):
        (CachedResourceRequestInitiators):
        (WebCore::cachedResourceRequestInitiators):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        * platform/ThreadGlobalData.h:
        (WebCore):
        (WebCore::ThreadGlobalData::cachedResourceRequestInitiators):
        (ThreadGlobalData):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2012-11-16  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: don't show an Error when evaluating a watch expression results in an exception
        https://bugs.webkit.org/show_bug.cgi?id=102470

        Reviewed by Vsevolod Vlasov.

        Dim watch expression and show "<not available>" as its value in cases when it evaluates
        into an exception.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionTreeElement.prototype.update):
        * inspector/front-end/inspector.css:

2012-11-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Rollout 134404 134548 134552 Temporarily rolling out to ease merging.
        https://bugs.webkit.org/show_bug.cgi?id=102476

        Unreviewed rolling out.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/AdvancedSearchController.js:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerShortcuts):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._registerShortcuts):
        * inspector/front-end/ElementsPanelDescriptor.js:
        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.install):
        * inspector/front-end/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut._keyName):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.registerShortcut):
        (WebInspector.Panel.prototype.unregisterShortcut):
        (WebInspector.PanelDescriptor.prototype.panel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._createDebugToolbar):
        (WebInspector.ScriptsPanel.prototype._createButtonAndRegisterShortcuts):
        * inspector/front-end/ScriptsPanelDescriptor.js:
        * inspector/front-end/ShortcutsScreen.js:
        (WebInspector.ShortcutsScreen):
        (WebInspector.ShortcutsSection):
        (WebInspector.ShortcutsSection.prototype._renderKey):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._registerShortcuts):
        * inspector/front-end/TimelinePanelDescriptor.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._panelDescriptors):
        (WebInspector._registerShortcuts):

2012-11-16  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Memory Timeline Crash
        https://bugs.webkit.org/show_bug.cgi?id=102390

        Reviewed by Vsevolod Vlasov.

        Crash seems to be caused by IPC overflow.
        Messages "ParsedScriptSource" are routed to
        ResourceScriptMapping.prototype.addScript that process them in time
        linear to number of already registered non-anonymous non-inline scripts.

        Fixed this with replacing repreated filtering with "on-line" bucketing.

        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping):
        Removed duplicating initialization code.
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        Added script bucketing by sourceURL/isInline parameters.
        (WebInspector.ResourceScriptMapping.prototype._scriptsForSourceURL):
        Avoid filterfig.
        (WebInspector.ResourceScriptMapping.prototype._createUISourceCode):
        Added outgoing muatable array safeguard.
        (WebInspector.ResourceScriptMapping.prototype._reset):
        Added type information and added two new maps.

2012-11-16  Helder Correia  <helder.correia@nokia.com>

        [CoordGfx] Follow coding style on explicit constructors
        https://bugs.webkit.org/show_bug.cgi?id=102451

        Reviewed by Noam Rosenthal.

        Use the explicit keyword on single argument constructors.

        No new tests needed.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (TextureMapper):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (WebCore::TextureMapperTile::TextureMapperTile):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::SharedGLData::SharedGLData):
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        * platform/graphics/texmap/TextureMapperGL.h:
        (BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderManager):

2012-11-16  Kihong Kwon  <kihong.kwon@samsung.com>

        Add DeviceController base-class to remove duplication of DeviceXXXControler
        https://bugs.webkit.org/show_bug.cgi?id=96894

        Reviewed by Hajime Morita.

        Add DeviceController which is extracted from DeviceOrientationController to remove duplication.
        And soon-to-be-added DeviceMotionController and ProximityController.

        Covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientationClient.h:
        * dom/DeviceOrientationController.cpp:
        Remove member functions to move to DeviceController.
        - addListener(), removeListener(), removeAllListeners(), isActive()
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        (WebCore::DeviceOrientationController::client):
        (WebCore::DeviceOrientationController::hasLastData):
        (WebCore::DeviceOrientationController::getLastEvent):
        (WebCore::DeviceOrientationController::from):
        (WebCore):
        * dom/DeviceOrientationController.h:
        (WebCore):
        (WebCore::DeviceOrientationController::~DeviceOrientationController):
        (DeviceOrientationController):
        * dom/Document.cpp:
        Remove suspendEventsForAllListeners() and resumeEventsForAllListeners() function calls.
        These calls can be made by checking activeDOMObjectsAreSuspended() and activeDOMObjectsAreStopped() before dispatchEvent.
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        * loader/EmptyClients.h:
        (EmptyDeviceClient):
        (WebCore::EmptyDeviceClient::startUpdating):
        (WebCore::EmptyDeviceClient::stopUpdating):
        (WebCore):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DeviceClient.h: Added.
        (WebCore):
        (DeviceClient):
        (WebCore::DeviceClient::~DeviceClient):
        * page/DeviceController.cpp: Added.
        DeviceController has extracted functions from DeviceOrientationController and DeviceMotionController.
        - addDeviceEventListener(), removeDeviceEventlistener(), removeAllDeviceEventListeners(), dispatchDeviceEvent()
        All kind of device event controller which has DeviceClient can be inherited from DeviceController.
        (WebCore):
        (WebCore::DeviceController::DeviceController):
        (WebCore::DeviceController::addDeviceEventListener):
        (WebCore::DeviceController::removeDeviceEventListener):
        (WebCore::DeviceController::removeAllDeviceEventListeners):
        (WebCore::DeviceController::dispatchDeviceEvent):
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h: Added.
        (WebCore):
        (DeviceController):
        (WebCore::DeviceController::~DeviceController):
        (WebCore::DeviceController::isActive):
        (WebCore::DeviceController::client):
        (WebCore::DeviceController::hasLastData):
        (WebCore::DeviceController::getLastEvent):

2012-11-16  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Overrides] Device metrics get reset on navigation, yet remain in the Overrides view
        https://bugs.webkit.org/show_bug.cgi?id=102467

        Reviewed by Pavel Feldman.

        Restore the device metrics overrides from the inspector cookie in InspectorPageAgent::restore().
        Drive-by: move the script execution and FPS counter display state restoration from enable() into restore(),
        so that they will get restored only upon page navigation, not upon any agent enablement.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::restore): Restore device metrics overrides, script execution and FPS counter display state.
        (WebCore::InspectorPageAgent::enable): Don't restore script execution and FPS counter display state on any enablement.

2012-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134908.
        http://trac.webkit.org/changeset/134908
        https://bugs.webkit.org/show_bug.cgi?id=102473

        Broke the Apple Windows Debug build. (Requested by dydx on
        #webkit).

        * WebCore.exp.in:
        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        * dom/ViewportArguments.h:
        (WebCore):

2012-11-16  Peter Rybin  <prybin@chromium.org>

        Web Inspector: show internal properties in inspector frontend
        https://bugs.webkit.org/show_bug.cgi?id=100021

        Reviewed by Yury Semikhatsky.

        New field 'internalProperties' is parsed and passed via all callbacks to Object Properties section.

        Test: inspector/debugger/properties-special.html

        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update.callback):
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (.callback):
        (WebInspector.ObjectPropertyTreeElement.populate):
        (.processProperties):
        (WebInspector.ArrayGroupingTreeElement._populateAsFragment):
        (WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.set else):

2012-11-06  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: metrics, geolocation, orientation overrides do not belong to the settings panel
        https://bugs.webkit.org/show_bug.cgi?id=93691

        Reviewed by Vsevolod Vlasov.

        - The Overrides tab contents have been moved from the Settings dialog into a brand new Overrides drawer view,
        both receiving a new, more light-weight design.
        - The Cog button now brings up a popup menu with the "Overrides" and "Settings" items.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu.prototype.showSoftMenu): Display the ContextMenu as a soft menu.
        * inspector/front-end/OverridesView.js: Copied from Source/WebCore/inspector/front-end/SettingsScreen.js.
        (WebInspector.OverridesView.appendBlockTo):
        (WebInspector.OverridesView):
        (WebInspector.OverridesView.showInDrawer):
        (WebInspector.OverridesView.prototype.get listener):
        (WebInspector.OverridesView.prototype._createUserAgentSelectRowElement.get const):
        (WebInspector.OverridesView.prototype._createUserAgentSelectRowElement.textDoubleClicked):
        (WebInspector.OverridesView.prototype._createUserAgentSelectRowElement.textChanged):
        (WebInspector.OverridesView.prototype._createUserAgentSelectRowElement.set checkboxClicked):
        (WebInspector.OverridesView.prototype._createUserAgentSelectRowElement):
        (WebInspector.OverridesView.prototype._createInput):
        (WebInspector.OverridesView.prototype._onMetricsCheckboxClicked):
        (WebInspector.OverridesView.prototype._applyDeviceMetricsUserInput):
        (WebInspector.OverridesView.prototype.):
        (WebInspector.OverridesView.prototype.set if):
        (WebInspector.OverridesView.prototype._createDeviceMetricsElement.swapDimensionsClicked):
        (WebInspector.OverridesView.prototype._createDeviceMetricsElement):
        (WebInspector.OverridesView.prototype._onGeolocationOverrideCheckboxClicked):
        (WebInspector.OverridesView.prototype._applyGeolocationUserInput):
        (WebInspector.OverridesView.prototype._setGeolocationPosition):
        (WebInspector.OverridesView.prototype._createGeolocationOverrideElement):
        (WebInspector.OverridesView.prototype._onDeviceOrientationOverrideCheckboxClicked):
        (WebInspector.OverridesView.prototype._applyDeviceOrientationUserInput):
        (WebInspector.OverridesView.prototype._setDeviceOrientation):
        (WebInspector.OverridesView.prototype._createDeviceOrientationOverrideElement):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): Fix the "DOM Breakpoints" pane move upon the panel creation.
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.SettingsTab):
        (WebInspector.SettingsTab.prototype._appendSection):
        (WebInspector.GenericSettingsTab):
        (WebInspector.ExperimentsSettingsTab):
        (WebInspector.SettingsController): Implement the popup menu upon the button click.
        (WebInspector.SettingsController.prototype.showOverrides):
        (WebInspector.SettingsController.prototype.showSettings):
        (WebInspector.SettingsController.prototype.appendApplicableItems):
        (WebInspector.SettingsController.prototype._buttonPressed):
        (WebInspector.SettingsController.prototype._onHideSettingsScreen):
        (WebInspector.SettingsController.prototype.showSettingsScreen):
        * inspector/front-end/ShortcutsScreen.js: Add "Shortcuts" header.
        (WebInspector.ShortcutsScreen.prototype.createShortcutsTabView):
        * inspector/front-end/SoftContextMenu.js: Enable in all cases, implement the alignToCurrentTarget mode in show().
        (WebInspector.SoftContextMenu.prototype.show):
        * inspector/front-end/TabbedPane.js: Implement vertical tab layout (skipping the tab width computations).
        (WebInspector.TabbedPane.prototype.set verticalTabLayout):
        (WebInspector.TabbedPane.prototype._updateWidths):
        (WebInspector.TabbedPaneTab.prototype.setWidth):
        (WebInspector.TabbedPaneTab.prototype._createTabElement):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/helpScreen.css: Update styles for the new Settings and Overrides look-and-feel.
        * inspector/front-end/inspector.css: Drive-by fix small artifacts in the soft menu and drawer view statusbar item label.
        (.soft-context-menu-item):
        (.drawer-header):
        * inspector/front-end/inspector.html:

2012-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134865.
        http://trac.webkit.org/changeset/134865
        https://bugs.webkit.org/show_bug.cgi?id=102466

        Broke the Apple Windows Debug build. (Requested by dydx on
        #webkit).

        * WebCore.exp.in:
        * bindings/js/SerializedScriptValue.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        (WebCore):
        * testing/Internals.idl:

2012-11-16  Takashi Sakamoto  <tasak@google.com>

        ASSERT_NOT_REACHED() when building a CSSOM wrapper for StyleRuleHost
        https://bugs.webkit.org/show_bug.cgi?id=102116

        Reviewed by Alexander Pavlov.

        Provide a CSSUnknownRule instance as a CSSOM wrapper for StyleRuleHost
        rules. Since there is no CSSOM wrapper for @host @-rules and
        ASSERT_NOT_REACHED is used when a CSSOM wrapper is requested,
        this crash occurs.

        Tests: fast/css/at-host-cssom-crash.html
               inspector/styles/styles-include-host-rules-crash.html

        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        Return a CSSUnknownRule instance for StyleRuleHost rules instead of
        calling ASSERT_NOT_REACHED().

2012-11-16  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Avoid copying of ViewportArguments in computeViewportAttributes function
        https://bugs.webkit.org/show_bug.cgi?id=102354

        Reviewed by Kenneth Rohde Christiansen.

        Since r134749 we do not need copying of ViewportArguments parameter in
        computeViewportAttributes() as it is not modified any more.

        Tested by existing tests fast/viewport.

        * WebCore.exp.in: Updated exported symbols for MAC.
        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        * dom/ViewportArguments.h:
        (WebCore):

2012-11-15  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: add code for reporting stack traces of unknown instrumented objects
        https://bugs.webkit.org/show_bug.cgi?id=102384

        Reviewed by Pavel Feldman.

        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::MemoryInstrumentationClientImpl::checkCountedObject): return false
        if the check fails.
        * inspector/MemoryInstrumentationImpl.h:
        (MemoryInstrumentationClientImpl):

2012-11-15  Jer Noble  <jer.noble@apple.com>

        Crash at WebCore::PluginData::pluginFileForMimeType const + 38
        https://bugs.webkit.org/show_bug.cgi?id=102454

        Reviewed by Dan Bernstein.

        NULL-check the return value of Page::pluginData().

        * loader/SubframeLoader.cpp:
        (WebCore::logPluginRequest):

2012-11-15  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Unreviewed build fix attempt on win

        Include OpenTypeVerticalData.h

        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore):

2012-11-15  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r134881.
        http://trac.webkit.org/changeset/134881
        https://bugs.webkit.org/show_bug.cgi?id=102348

        http/tests/appcache tests on JSC platforms are broken

        * bindings/scripts/CodeGenerator.pm:
        (IsStrictSubtype):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GetInternalFields):
        (IsSubType):
        (IsNodeSubType):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateFunctionCallback):
        (GenerateImplementationIndexer):
        (GenerateToV8Converters):

2012-11-15  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        [TexMap][Cairo][Qt] Refactor BitmapTextureGL::updateContents().
        https://bugs.webkit.org/show_bug.cgi?id=102420

        Reviewed by Gyuyoung Kim.

        Moved out texture upload without swizzle to the separate method and changed
        drawRepaintCounter to use no-swizzle method. This also fixes blue background
        of repaint counters in Qt Minibrowser.
        Added condition for sub-image buffer creation to not create it if full image is
        uploaded. This should give noticeable improvement for platforms that do not
        support sub-image upload to texture.

        Covered by existing tests.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawRepaintCounter):
        (WebCore::BitmapTextureGL::updateContentsNoSwizzle):
        (WebCore):
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/texmap/TextureMapperGL.h:
        (BitmapTextureGL):

2012-11-15  Kent Tamura  <tkent@chromium.org>

        A Spin button should release mouse event capturing when a modal dialog opens
        https://bugs.webkit.org/show_bug.cgi?id=98007

        Reviewed by Hajime Morita.

        Description of bug:
        If the mouse left button is pressed on a spin button in
        input[type=number] and a 'change' event handler opens a modal dialog
        such as alert(), a repeating timer doesn't stop and mouse event
        capturing isn't released even though the mouse pointer isn't on the spin
        button.
        A user will see repeating alert dialogs for a document like <input
        type=number value=1 onchange="if (this.value==1) {alert(...);
        this.value=1;}"> by clicking the up button.

        How to solve:
        We should notify modal dialog or popup open to a spin button.
        This patch introduce PopupOpeningObserver. Chrome notifies it when
        any dialogs / popups is opening. SpinButtonElement implements
        PopupOpeningObserver and registers/unregisters itself to/from
        Chrome.

        No new tests. This is a behavior change, but it's very hard to make an
        automated test for timer-related behavior.

        * page/PopupOpeningObserver.h: Added.
        * GNUmakefile.list.am: Add PopupOpeningObserver.h
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * page/Chrome.cpp:
        (WebCore::Chrome::runJavaScriptAlert): Calls notifyPopupOpeningObservers.
        (WebCore::Chrome::runJavaScriptConfirm): Ditto.
        (WebCore::Chrome::runJavaScriptPrompt): Ditto.
        (WebCore::Chrome::createColorChooser): Ditto.
        (WebCore::Chrome::openDateTimeChooser):
        Added. Calls notifyPopupOpeningObservers before calling
        ChromeClient::openDateTimeChooser.
        (WebCore::Chrome::runOpenPanel): Calls notifyPopupOpeningObservers.
        (WebCore::Chrome::createPopupMenu): Ditto.
        (WebCore::Chrome::createSearchPopupMenu): Ditto.
        (WebCore::Chrome::registerPopupOpeningObserver): Added.
        (WebCore::Chrome::unregisterPopupOpeningObserver): Added.
        (WebCore::Chrome::notifyPopupOpeningObservers): Added.
        * page/Chrome.h: Added new members and required class/struct declarations.

        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent):
        Use Chrome::openDateTimeChooser instead of ChromeClient::openDateTimeChooser.
        * html/shadow/PickerIndicatorElement.cpp:
        (WebCore::PickerIndicatorElement::openPopup): Ditto.

        * html/shadow/SpinButtonElement.h:
        (SpinButtonElement): Declare willOpenPopup.
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
        Change the order of timer start and changing the value so that we
        can cancel the timer correctly.
        Calls Chrome::registerPopupOpeningObserver on starting mouse capturing.
        (WebCore::SpinButtonElement::willOpenPopup):
        Release mouse event capturing before opening a modal dialog.
        (WebCore::SpinButtonElement::releaseCapture):
        Calls Chrome::unregisterPopupOpeningObserver.


2012-11-15  Shinya Kawanaka  <shinyak@chromium.org>

        Chaging pseudoClass (:enabled) should cause distribution
        https://bugs.webkit.org/show_bug.cgi?id=101900

        Reviewed by Dimitri Glazkov.

        When element's 'enabled' state is changed, we have to invalidate distribution.

        According to the spec, :enabled matches anchor/area/link element having href attribute,
        and several form control elements which is not disabled. However, currently :enalbed does not match
        anchor/area/link yet. See https://bugs.webkit.org/show_bug.cgi?id=102349

        Tests: fast/dom/shadow/pseudoclass-update-enabled-anchor.html
               fast/dom/shadow/pseudoclass-update-enabled-area.html
               fast/dom/shadow/pseudoclass-update-enabled-button.html
               fast/dom/shadow/pseudoclass-update-enabled-fieldset.html
               fast/dom/shadow/pseudoclass-update-enabled-input.html
               fast/dom/shadow/pseudoclass-update-enabled-optgroup.html
               fast/dom/shadow/pseudoclass-update-enabled-option.html
               fast/dom/shadow/pseudoclass-update-enabled-select.html
               fast/dom/shadow/pseudoclass-update-enabled-textarea.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabledAttributeChanged):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::parseAttribute):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):

2012-11-15  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: ValidationError
        https://bugs.webkit.org/show_bug.cgi?id=102416

        Reviewed by Kentaro Hara.

        Patch 16 of 25 to update DOMException name to match the spec and Firefox.

        VALIDATION_ERR is historical and not used in any spec or our code.

        * dom/DOMCoreException.cpp:
        * dom/ExceptionCode.h:

2012-11-15  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove IsSubType() from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=102348

        Reviewed by Adam Barth.

        CodeGenerator.pm has IsStrictSubType(). CodeGeneratorV8.pm should use it.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (IsSubType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GetInternalFields):
        (GenerateNormalAttrGetter):
        (GenerateNormalAttrSetter):
        (GenerateFunctionCallback):
        (GenerateImplementationIndexer):
        (GenerateToV8Converters):

2012-11-15  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: NamespaceError
        https://bugs.webkit.org/show_bug.cgi?id=102395

        Reviewed by Kentaro Hara.

        Patch 14 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-15  Tien-Ren Chen  <trchen@chromium.org>

        Add Settings to disable custom scrollbars on main frame
        https://bugs.webkit.org/show_bug.cgi?id=102323

        Reviewed by Adam Barth.

        Custom scrollbars on main frame don't really work well on touch devices.
        Add a setting to inhibit their creation.

        No new tests. No change in default layout behavior.

        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        * page/Settings.in:

2012-11-15  Rick Byers  <rbyers@chromium.org>

        custom CSS cursors ignore hotspot values embedded in CUR files
        https://bugs.webkit.org/show_bug.cgi?id=100059

        Reviewed by Kenneth Russell.

        Add reading the hotspot values to the ICOImageDecoder (for CUR files only),
        and plumb it through so that the existing calls to ImageSource::getHotSpot
        actually return the hot spot value when there is one.

        Tests: fast/events/mouse-cursor.html, fast/events/mouse-cursor-multiframecur.html

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::getHotSpot):
        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::hotSpot):
        (WebCore::DeferredImageDecoder::hotSpotAtIndex):
        * platform/graphics/chromium/DeferredImageDecoder.h:
        (DeferredImageDecoder):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::hotSpot):
        (WebCore::ImageDecoder::hotSpotAtIndex):
        (ImageDecoder):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::hotSpot):
        (WebCore::ICOImageDecoder::hotSpotAtIndex):
        (WebCore::ICOImageDecoder::processDirectory):
        (WebCore::ICOImageDecoder::readDirectoryEntry):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        (ICOImageDecoder):
        (IconDirectoryEntry):

2012-11-15  Kenichi Ishibashi  <bashi@chromium.org>

        Make OpenTypeVerticalData be ref-counted
        https://bugs.webkit.org/show_bug.cgi?id=101971

        Reviewed by Tony Chang.

        FontCache::purgeInactiveFontData() uses mark & sweep algorithm to remove unused
        OpenTypeVerticalData objects. It marks only OpenTypeVerticalData which can be reached
        via SimpleFontData in gFontDataCache. However, OpenTypeVerticalData can be referred by
        SimpleFontData which resides in CSSFontFaceSource::m_fontDataTable so the algorithm can
        delete active OpenTypeVerticalData. To avoid deleting active OpenTypeVerticalData, make
        it be ref-counted.

        No new tests. No changes in behavior. Checked manually that the use-after-free was fixed.

        * platform/graphics/FontCache.cpp:
        (WebCore): Use RefPtr instead of OwnPtr for FontVerticalDataCache.
        (WebCore::FontCache::getVerticalData): Return PassRefPtr<OpenTypeVerticalData>.
        (WebCore::FontCache::purgeInactiveFontData): Follow the change of OwnPtr -> RefPtr.
        * platform/graphics/FontCache.h:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        Use RefPtr instead of raw const pointer for OpenTypeVerticalData.
        (WebCore::SimpleFontData::verticalData):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::verticalData): Return PassRefPtr<OpenTypeVerticalData>.
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (FontPlatformData):
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:
        (WebCore::FontPlatformData::verticalData): Ditto.
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h:
        (WebCore):
        (FontPlatformData):
        * platform/graphics/opentype/OpenTypeVerticalData.h:
        (WebCore::OpenTypeVerticalData::create): Added.
        (OpenTypeVerticalData):

2012-11-15  Xingnan Wang  <xingnan.wang@intel.com>

        Optimize the multiply-add in Biquad.cpp::process
        https://bugs.webkit.org/show_bug.cgi?id=75528

        Reviewed by Brent Fulgham.

        Pipeline the multiply-add with SSE2 intrinsics.
        Get ~45% performance improvement for the function.

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::process):

2012-11-15  Alec Flett  <alecflett@chromium.org>

        Add tests for explicit serialization values
        https://bugs.webkit.org/show_bug.cgi?id=96818

        Reviewed by Adam Barth.

        Expose direct access to the serialization/deserialization mechanisms
        of SerializedScriptValue to DumpRenderTree.

        * testing/Internals.cpp:
        (WebCore::Internals::serializeObject):
        (WebCore):
        (WebCore::Internals::deserializeBuffer):
        * testing/Internals.h:
        (WebCore):
        * testing/Internals.idl:

2012-11-15  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Split WebCore/platform into a separate library
        https://bugs.webkit.org/show_bug.cgi?id=94435

        Reviewed by Martin Robinson.

        More people have been reporting problems when linking WebCore because
        the command line limit is being exceeded. Splitting WebCore a bit more
        is in order.

        * GNUmakefile.am: add new libWebCorePlatform convenience library.
        * GNUmakefile.list.am: move list of platform/* files to its own variable.

2012-11-15  Luke Macpherson   <macpherson@chromium.org>

        Remove unused macro HANDLE_INHERIT_AND_INITIAL_WITH_VALUE in StyleResolver.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102036

        Reviewed by Darin Adler.

        Remove HANDLE_INHERIT_AND_INITIAL_WITH_VALUE macro, as it is not used anywhere.

        No tests added because code is unused, and compile is enough to verify that conculsively.

        * css/StyleResolver.cpp:

2012-11-15  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: SyntaxError
        https://bugs.webkit.org/show_bug.cgi?id=102279

        Reviewed by Kentaro Hara.

        Patch 12 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-15  Takashi Sakamoto  <tasak@google.com>

        [Win] key event's location does not work on Windows platform.
        https://bugs.webkit.org/show_bug.cgi?id=89742

        Reviewed by Brent Fulgham.

        As WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, and WM_SYSKEYUP doesn't
        directly provide a virtual keycode which distinguish between left-hand
        and right-hand keys. To obtain a virtual keycode, we have to look at
        lparam, i.e. scancode and extended key bit. So if the given virtual
        keycode is control, shift, or menu, use MapVirtualKey with scancode and
        extended key bit and recreate a virtual keycode which distinguishes
        between left-hand and right-hand.

        No new tests, because left-hand keys, right-hand keys layout tests
        have been already added.

        * platform/win/KeyEventWin.cpp:
        (WebCore::windowsKeycodeWithLocation):
        Use wparam and lparam to recreate a virtual keycode which distinguishes
        between left-hand and right-hand if the given wparam (=virtual keycode)
        is control, shift, or menu.
        (WebCore):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        Use the newly added function to obtain windows virtual keycode.

2012-11-15  Joe Mason  <jmason@rim.com>

        [BlackBerry] Don't assert when notifyAuthReceived is called with a different auth type
        https://bugs.webkit.org/show_bug.cgi?id=102436

        Reviewed by Rob Buis.

        The server type could change if we contact a site taking HTTP auth, through an HTTP proxy
        taking auth of its own. First we get a 407 from the proxy, and then when get past the
        proxy, we get a 401 from the end site - so notifyAuthReceived gets called again with auth
        type Proxy instead of HTTP.

        The correct thing to do when that happens is skip the "update the auth type in the
        credentials" step, since these are actually new credentials and not just credentials being
        reused for a different auth type on the same server.

        PR 241637

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyAuthReceived):

2012-11-15  Stephen Chenney  <schenney@chromium.org>

        mpath elements do not clear resource lists before destruction
        https://bugs.webkit.org/show_bug.cgi?id=101505

        Reviewed by Abhishek Arya.

        The destructor for SVGMPathElement should clear its resources before
        deletion, so as not to leave hanging pointers in resource lists.

        Test: svg/animations/mpath-remove-from-dependents-on-delete-crash.html

        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::~SVGMPathElement): Add destructor that calls clearResourceReferences.
        (WebCore):
        * svg/SVGMPathElement.h:
        (SVGMPathElement): Add destructor.

2012-11-15  Kentaro Hara  <haraken@chromium.org>

        Remove CodeGenerator::StripModule
        https://bugs.webkit.org/show_bug.cgi?id=102338

        Reviewed by Adam Barth.

        Now WebKit IDL files have no modules. (The Web IDL spec has no modules.)
        We can remove CodeGenerator::StripModule.
        This might break some internal builds if the internal builds are still
        using modules. Ping haraken@ you observe it.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (ForAllParents):
        (AttributeNameForGetterAndSetter):
        (IsStrictSubtype):
        * bindings/scripts/CodeGeneratorCPP.pm:
        (GetClassName):
        (GetImplClassName):
        (GetParentImplClassName):
        (GetParent):
        (ConversionNeeded):
        (GetCPPTypeGetter):
        (AddForwardDeclarationsForType):
        (AddIncludesForType):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetParentClassName):
        (GetParentGObjType):
        (GetClassName):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetParentClassName):
        (AddIncludesForTypeInImpl):
        (AddIncludesForTypeInHeader):
        (GenerateParametersCheckExpression):
        (GenerateImplementation):
        (GenerateParametersCheck):
        (GetNativeTypeFromSignature):
        (JSValueToNative):
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetClassName):
        (GetImplClassName):
        (GetParentImplClassName):
        (GetParentAndProtocols):
        (GetPropertyAttributes):
        (ConversionNeeded):
        (GetObjCTypeGetter):
        (AddForwardDeclarationsForType):
        (AddIncludesForType):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (AddIncludesForType):
        (GenerateHeader):
        (IsSubType):
        (GenerateSingleBatchedAttribute):
        (GenerateImplementation):
        (BaseInterfaceName):
        (GetTypeFromSignature):
        (IsWrapperType):

2012-11-15  Luke Macpherson   <macpherson@chromium.org>

        Make assumptions about m_parentStyle consistent within StyleResolver::applyProperty()
        https://bugs.webkit.org/show_bug.cgi?id=101696

        Reviewed by Tony Chang.

        Most of the code in StyleResolver::applyProperty assumes that isInherit implies that m_parentStyle is available.
        This patch ASSERTs that this assumption is correct, and removes the few existing checks to maintain consistency.

        No new tests / covered by all existing CSS tests.

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

2012-11-15  Kentaro Hara  <haraken@chromium.org>

        [V8] Remove redundant $interfaceName from function parameters
        https://bugs.webkit.org/show_bug.cgi?id=102334

        Reviewed by Adam Barth.

        'sub func { my $dataNode = shift; my $interfaceName = shift; }'
        is redundant. We can get $interfaceName by $dataNode->name.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOpaqueRootForGC):
        (GenerateHeader):
        (GenerateConstructorGetter):
        (GenerateNormalAttrGetter):
        (GenerateReplaceableAttrSetter):
        (GenerateNormalAttrSetter):
        (GenerateOverloadedFunctionCallback):
        (GenerateFunctionCallback):
        (GenerateOverloadedConstructorCallback):
        (GenerateSingleConstructorCallback):
        (GenerateConstructorCallback):
        (GenerateEventConstructorCallback):
        (GenerateTypedArrayConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateBatchedAttributeData):
        (GenerateImplementation):
        (GenerateToV8Converters):
        (GetNativeTypeForConversions):

2012-11-15  Simon Fraser  <simon.fraser@apple.com>

        Ensure that scrollbar layers show debug borders
        https://bugs.webkit.org/show_bug.cgi?id=102429

        Reviewed by Anders Carlsson.

        After r133517, scrollbar layers no longer showed debug borders, which
        was very confusing. Fix this by explicitly calling setShowDebugBorder()
        on the scrollbar-related layers owned by RenderLayerCompositor
        and RenderLayerBacking.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDebugIndicators):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2012-11-15  Andreas Kling  <akling@apple.com>

        ASSERTION FAILED: fastAttributeLookupAllowed(name) for 7 layout tests
        <http://webkit.org/b/102423>

        Reviewed by Anders Carlsson.

        Use Element::getAttributeItem() to find out if the element has a given attribute
        instead of fastHasAttribute() since that causes assertions for the "style" attribute.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):

2012-11-15  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: DOMStringSizeError
        https://bugs.webkit.org/show_bug.cgi?id=102089

        Reviewed by Ojan Vafai.

        Patch 2 of 25 to update DOMException name to match the spec and Firefox.

        DOMSTRING_SIZE_ERR is historical and not used in any spec or in our code.

        * dom/DOMCoreException.cpp:
        * dom/ExceptionCode.h:

2012-11-15  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Indexing tests are flaky-crashing
        https://bugs.webkit.org/show_bug.cgi?id=102283

        Reviewed by Tony Chang.

        Processing the final task can cause IDBTransactionBackendImpl references to be released
        by all holders. Prior to looping over the tasks (or, in an even earlier implementation,
        swapping queues) control would fall off the end of the function. The loop termination
        check introduced in http://wkrev.com/134529 requires that |this| be kept alive until
        the method completes.

        Test: storage/indexeddb/transaction-crash-in-tasks.html

        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort): Rename self => protect.
        (WebCore::IDBTransactionBackendImpl::commit): Rename self => protect.
        (WebCore::IDBTransactionBackendImpl::taskTimerFired): New self-ref.

2012-11-15  Elliott Sprehn  <esprehn@chromium.org>

        MutationObserver wrapper should not be collected while still observing
        https://bugs.webkit.org/show_bug.cgi?id=102328

        Reviewed by Adam Barth.

        Make MutationObserver an ActiveDOMObject so that the wrapper is not
        collected while it is still observing the DOM. This is needed because
        the wrapper is passed into the callback and expandos on the wrapper
        should be preserved.

        Test: fast/mutation/observer-wrapper-dropoff.html

        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverConstructor::constructJSMutationObserver):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallback):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::create):
        (WebCore::MutationObserver::MutationObserver):
        (WebCore::MutationObserver::observationStarted):
        (WebCore::MutationObserver::observationEnded):
        * dom/MutationObserver.h:
        (WebCore):
        * dom/MutationObserver.idl:

2012-11-15  Tony Chang  <tony@chromium.org>

        Generate Settings from a .in file
        https://bugs.webkit.org/show_bug.cgi?id=100393

        Reviewed by Adam Barth.

        Generate most settings from an .in file to reduce human mistakes and
        to make it easier to add/remove new settings.

        I only moved settings that are easy to move at this point.  There are many more that
        have some minor naming inconsistencies that we can also move to Settings.in, but I'll
        do that in a follow up patch.

        This doesn't generate SettingInternals.* yet-- we can do that in a follow up patch.

        No new tests, this is a refactor.

        * CMakeLists.txt:
        * DerivedSources.make: Run make_settings.pl.
        * DerivedSources.pri: Run make_settings.pl.
        * GNUmakefile.am: Run make_settings.pl.
        * GNUmakefile.list.am:
        * WebCore.exp.in: Remove functions that are now inline in the header.
        * WebCore.gyp/WebCore.gyp: Run action_makenames.py, which will run make_settings.pl.
        * WebCore.gyp/scripts/action_makenames.py:
        (main): Allow make_settings.pl.
        * WebCore.order: Remove functions that are now inline in the header.
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer): Fix a typo in "magnification".
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Replace generated settings with SETTINGS_INITIALIZER_LIST.
        * page/Settings.h:
        (Settings): Replace generated settings with SETTINGS_GETTERS_AND_SETTERS and SETTINGS_MEMBER_VARIABLES.
        * page/Settings.in: Added.
        * page/make_settings.pl: Added.
        (defaultItemFactory):
        (generateCode):
        (generateHeader): Use a similar model as make_names.pl.
        (printConditionalMacros):
        (printGettersAndSetters):
        (printMemberVariables):
        (printGetterAndSetter):
        (printInitializerList):
        (printInitializer):

2012-11-15  Alpha Lam  <hclam@chromium.org>

        [chromium] Refactoring to move logic of creating lazy decoded SkBitmap into DeferredImageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=102019

        Reviewed by Stephen White.

        Goal of this change is to keep ImageDecodingStore clean and only do
        image caching. Logic of creating lazily decoded SkBitmaps is moved into
        DeferredImageDecoder.

        In particular these two methods are moved:
        - ImageDecodingStore::createLazyDecodedSkBitmap
        - ImageDecodingStore::resizeLazyDecodedSkBitmap

        No new tests. There is no new code (really). It is just moved from
        ImageDecodingStore to DeferredImageDecoder.

        No change in behavior. Code is tested with:
        Unit tests: webkit_unit_tests
        Layout test: platform/chromium/virtual/deferred

        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::isLazyDecoded):
        (WebCore):
        (WebCore::DeferredImageDecoder::resizeLazyDecodedSkBitmap):
        (WebCore::DeferredImageDecoder::frameBufferAtIndex):
        (WebCore::DeferredImageDecoder::setData):
        (WebCore::DeferredImageDecoder::createLazyDecodedSkBitmap):
        * platform/graphics/chromium/DeferredImageDecoder.h:
        (WebCore):
        (DeferredImageDecoder):
        * platform/graphics/chromium/ImageDecodingStore.cpp:
        * platform/graphics/chromium/ImageDecodingStore.h:
        (ImageDecodingStore):
        * platform/graphics/chromium/ImageFrameGenerator.cpp:
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        * platform/graphics/chromium/ImageFrameGenerator.h:
        (WebCore::ImageFrameGenerator::create):
        (ImageFrameGenerator):
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::resizedBitmap):

2012-11-15  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix for Windows after r134767.

        Update vsprops and vcproj files to reflect changes to file locations in r134767.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:

2012-11-15  Elliott Sprehn  <esprehn@chromium.org>

        Track subframe count to avoid traversing the tree when there's no subframes
        https://bugs.webkit.org/show_bug.cgi?id=101821

        Reviewed by Ojan Vafai.

        Bug 101619 showed a 9-14% improvement from not walking the children during
        removeChild looking for frames when there's known to be no frames. The fix
        in that bug only avoids this walk when the whole document has no frames, this
        patch extends it to skip traversing subtrees that have no iframes by hooking
        the frame assignment to walk up the tree and keep track of the count of frames
        in the subtree on contentFrame assignment and then decrement it on disconnect.

        No new tests, this is just a perf refactor.

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChildren):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildFrameDisconnector::collectFrameOwners):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::ChildFrameDisconnector):
        (ChildFrameDisconnector):
        (WebCore::ChildFrameDisconnector::collectFrameOwners):
          Renamed from collectDescendant() to better reflect what it really does.
        (WebCore::ChildFrameDisconnector::disconnectCollectedFrameOwners):
          Renamed from disconnect() to better reflect what it really does.
        (WebCore::ChildFrameDisconnector::disconnect):
          New method that does the collection of frame owners on either the root
          or only it's descendants.
        * dom/Node.cpp:
        (WebCore::Node::connectedSubframeCount):
        (WebCore::Node::incrementConnectedSubframeCount):
        (WebCore::Node::decrementConnectedSubframeCount):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::connectedSubframeCount):
        (WebCore::NodeRareData::incrementConnectedSubframeCount):
        (WebCore::NodeRareData::decrementConnectedSubframeCount):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::setContentFrame):
        (WebCore::HTMLFrameOwnerElement::disconnectContentFrame):

2012-11-15  Alpha Lam  <hclam@chromium.org>

        [chromium] WebGL texImage2D fails with deferred image decoding
        https://bugs.webkit.org/show_bug.cgi?id=102310

        Reviewed by Kenneth Russell.

        Skia's implementation of GraphicsContext3D::getImageData() uses ImageSource
        to decode an image. When deferred image decoding is enabled this class
        generates an ImageFrame marked as incomplete, which WebGL rejects. This results
        in failing of texImage2D.

        This change uses ImageDecoder directly instead of ImageSource. This skips
        the code path of deferred image decoding. This behavior is correct because
        GraphicsContext3D wants to decode the image differently with alpha not
        premultiplied and color profile applied optionally.

        Added a test to prove this change fixed the bug.

        Test: fast/images/webgl-teximage2d.html

        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2012-11-15  Jer Noble  <jer.noble@apple.com>

        Further unreviewed build fix. Add explicit static_casts to avoid implicit precision warnings.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource):

2012-11-15  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix. Avoid implicit precision and unused parameter warnings.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::responseReceived):
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource):

2012-11-15  Adam Barth  <abarth@webkit.org>

        [V8] We shouldn't call deprecated V8 APIs
        https://bugs.webkit.org/show_bug.cgi?id=102407

        Reviewed by Eric Seidel.

        This patch was written by Sven Panne on the V8 team. He would prefer
        that we not call deprecated V8 APIs. This patch updates these call
        sites to more modern idioms.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorGetter):
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::TestObjConstructorGetter):
        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setContextDebugId):
        (WebCore::ScriptController::contextDebugId):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::objectByHeapObjectId):
            - This code doesn't seem to do anything anymore.
        * bindings/v8/V8DOMConfiguration.h:
        (WebCore::V8DOMConfiguration::configureAttribute):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::setInjectedScriptContextDebugId):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::maybeDOMWrapper):
        (WebCore::V8DOMWrapper::isWrapperOfType):
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::doFindWrapper):
        (WebCore::V8EventListenerList::findOrCreateWrapper):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initializeIfNeeded):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore::WrapperTypeInfo::unwrap):

2012-11-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134800 and r134805.
        http://trac.webkit.org/changeset/134800
        http://trac.webkit.org/changeset/134805
        https://bugs.webkit.org/show_bug.cgi?id=102417

        This patch broke chromium port (Requested by jianli on
        #webkit).

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::localDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::remoteDescription):
        (WebCore::RTCPeerConnection::updateIce):
        (WebCore::RTCPeerConnection::addIceCandidate):
        (WebCore::RTCPeerConnection::readyState):
        (WebCore::RTCPeerConnection::iceState):
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::changeReadyState):
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.h:
        (RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.idl:
        * dom/EventNames.h:
        (WebCore):
        * platform/mediastream/RTCDataChannelDescriptor.cpp:
        (WebCore::RTCDataChannelDescriptor::RTCDataChannelDescriptor):
        (WebCore::RTCDataChannelDescriptor::readyStateChanged):
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        (RTCPeerConnectionHandlerClient):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (RTCPeerConnectionHandlerChromium):

2012-11-15  Elliott Sprehn  <esprehn@chromium.org>

        Remove Node::aboutToUnload and be more explicit about what it was for
        https://bugs.webkit.org/show_bug.cgi?id=102357

        Reviewed by Ryosuke Niwa.

        Node::aboutToUnload was confusingly named because it was only called on
        the focused node, and it really only existed to support notifying the
        embedder that inputs should stop being editable on unload. Instead add
        a new method to HTMLInputElement that ends editing and call that
        explicitly in the FrameLoader so it's clear what this is about.

        No new tests, this is just a refactoring.

        * dom/Node.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::endEditing):
            New method that handles finishing editing.
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleBlurEvent):
            Use the new method to reduce code duplication.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
            Be explicit about what this check was for.

2012-11-15  Tommy Widenflycht  <tommyw@google.com>

        [chromium] MediaStream API: Add missing WebRTCPeerConnectionHandlerClient::didAddRemoteDataChannel
        https://bugs.webkit.org/show_bug.cgi?id=102386

        Reviewed by Adam Barth.

        Existing tests expanded to cover patch.

        * platform/mediastream/RTCDataChannelDescriptor.cpp:
        (WebCore::RTCDataChannelDescriptor::RTCDataChannelDescriptor):
        (WebCore::RTCDataChannelDescriptor::readyStateChanged):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::didAddRemoteDataChannel):
        (WebCore):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (WebKit):
        (RTCPeerConnectionHandlerChromium):

2012-11-15  Rick Byers  <rbyers@chromium.org>

        No tests for changing mouse cursors
        https://bugs.webkit.org/show_bug.cgi?id=100550

        Reviewed by Brent Fulgham.

        Add infrastructure to keep track of the last set mouse cursor,
        and then to query it from DumpRenderTree.  Also adds ASSERTs to help ensure
        we can reliably detect when an uninitialized Cursor object is used (such as
        the one that can be returned from OptionalCursor in the NoCursorChange scenario).

        Test: fast/events/mouse-cursor.html

        * WebCore.exp.in: Add Cursor copy ctor export
        * page/EventHandler.cpp:
        (WebCore::OptionalCursor::cursor):
        (WebCore::EventHandler::handleMouseMoveEvent): Keep track of last set mouse cursor
        * page/EventHandler.h:
        (WebCore::EventHandler::currentMouseCursor): New getter for last set mouse cursor
        * platform/Cursor.h:
        (WebCore::Cursor::Cursor): Mark uninitialized cursor types as invalid.
        (WebCore::Cursor::type): Assert cursor type is valid.
        * testing/Internals.cpp:
        (WebCore::cursorTypeToString): Helper to convert cursor type to enum
        (WebCore):
        (WebCore::Internals::getCurrentCursorInfo): New function to return a string describing the last set mouse cursor
        * testing/Internals.h: Declare getCurrentCursorInfo
        * testing/Internals.idl: Declare getCurrentCursorInfo

2012-11-13  Jer Noble  <jer.noble@apple.com>

        Support loading of blob URLs in AVFoundation.
        https://bugs.webkit.org/show_bug.cgi?id=102182

        Reviewed by Eric Carlson.

        Add support for BLOB (and other non-natively supported schemed) URLs through the AVAssetResourceLoader API.

        Test: media/video-src-blob.html

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource): Only go down the encrypted
            media path if the key scheme is skp://.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::didCancelLoadingRequest): Added.  Cancel resource loading if
            the media engine requests it.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::addKey): Use the new, non-deprecated API.
        
        Use the dispatch_main_queue() as the AVAssetResourceLoadDelegate queue now that <rdar://problem/12362461> is fixed.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreAVFLoaderDelegate resourceLoader:didCancelLoadingRequest:]):

        Add a new helper class to manage loading the CachedRawResource and feed the incoming
        data to the AVAssetResourceLoader.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h: Added.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm: Added.
        (WebCore::WebCoreAVFResourceLoader::create): Simple factory.
        (WebCore::WebCoreAVFResourceLoader::WebCoreAVFResourceLoader): Simple constructor.
        (WebCore::WebCoreAVFResourceLoader::~WebCoreAVFResourceLoader): Simple destructor.
        (WebCore::WebCoreAVFResourceLoader::startLoading): Tell the cachedResourceLoader to schedule loading.
        (WebCore::WebCoreAVFResourceLoader::stopLoading): Remove this as a client of the resource.
        (WebCore::WebCoreAVFResourceLoader::responseReceived): Fill in the contentInformation field of the 
            AVAssetResourceLoadingRequest.
        (WebCore::WebCoreAVFResourceLoader::dataReceived): Call fulfillRequestWithResource.
        (WebCore::WebCoreAVFResourceLoader::notifyFinished): Tell the AVAssetResourceLoadingRequest that loading
            has completed.
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource): Fill in (if possible) the dataRequest
            field of the AVAssetResourceLoadingRequest.

        Add a MediaPlayerClient method allowing MediaPlayerPrivate subclasses to access the HTMLMediaElement's
        document's cachedResourceLoader.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCachedResourceLoader):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::cachedResourceLoader):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerCachedResourceLoader):

        Add a convenience method to convert from MIME type -> UTI.
        * platform/network/mac/UTIUtilities.h:
        * platform/network/mac/UTIUtilities.mm:
        (WebCore::UTIFromMIMEType):

        Add new files to project.
        * WebCore.xcodeproj/project.pbxproj:

2012-11-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Remove initiallyFitToViewport attribute
        https://bugs.webkit.org/show_bug.cgi?id=102392

        Reviewed by Noam Rosenthal.

        Remove the initiallyFitToViewport which shouldn't have been
        added in the first place. We now reset userScalable to auto (-1)
        in case it was not explicitly set by the web author.

        Same behavior, covered by existing tests.

        * dom/ViewportArguments.cpp:
        (WebCore::ViewportArguments::resolve):
        * dom/ViewportArguments.h:
        (ViewportAttributes):

2012-11-15  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update RTCPeerConnection states to match the latest editors draft
        https://bugs.webkit.org/show_bug.cgi?id=102382

        Reviewed by Adam Barth.

        Updating readyState & iceState, and adding iceGatheringState.
        Also safeguarding the event timer callback.

        Patch covered by existing tests.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::localDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::remoteDescription):
        (WebCore::RTCPeerConnection::updateIce):
        (WebCore::RTCPeerConnection::addIceCandidate):
        (WebCore::RTCPeerConnection::readyState):
        (WebCore::RTCPeerConnection::iceGatheringState):
        (WebCore):
        (WebCore::RTCPeerConnection::iceState):
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::didChangeIceGatheringState):
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::changeReadyState):
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.h:
        (RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.idl:
        * dom/EventNames.h:
        (WebCore):
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        (RTCPeerConnectionHandlerClient):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::didChangeICEGatheringState):
        (WebCore):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (RTCPeerConnectionHandlerChromium):

2012-11-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134649 and r134665.
        http://trac.webkit.org/changeset/134649
        http://trac.webkit.org/changeset/134665
        https://bugs.webkit.org/show_bug.cgi?id=102413

        Broke a ton of downstream chromium tests (Requested by japhet
        on #webkit).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::clearMainResourceLoader):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::documentURL):
        (WebCore::DocumentLoader::isLoadingMainResource):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        (DocumentLoader):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        * loader/FrameLoaderStateMachine.cpp:
        (WebCore::FrameLoaderStateMachine::FrameLoaderStateMachine):
        * loader/FrameLoaderStateMachine.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::shouldLoadAsEmptyDocument):
        (WebCore):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::handleEmptyLoad):
        (WebCore::MainResourceLoader::loadNow):
        (WebCore::MainResourceLoader::load):
        * loader/MainResourceLoader.h:
        (MainResourceLoader):

2012-11-15  Kentaro Hara  <haraken@chromium.org>

        Correct syntax of old-style IDL files
        https://bugs.webkit.org/show_bug.cgi?id=102335

        Reviewed by Adam Barth.

        Recently tasak@ corrected an IDL syntax of almost all IDL files.
        We should correct the rest of them.

        No tests. No change in behavior.

        * html/canvas/OESElementIndexUint.idl:
        * page/PerformanceMark.idl:
        * page/PerformanceMeasure.idl:

2012-11-15  Elliott Sprehn  <esprehn@chromium.org>

        Remove isHTMLInputElement since it's unused and toInputElement exists 
        https://bugs.webkit.org/show_bug.cgi?id=102358

        Reviewed by Ojan Vafai.

        Remove isHTMLInputElement as no one uses it. Everyone just uses
        Node::toInputElement and checks for a 0 return value instead.

        toInputElement is also more reliable as there's no requirement that
        subclasses of HTMLInputElement have the tag name of inputTag so using
        this method in a check could potentially miss future subclasses with
        different tag names, though none exist right now.

        No new tests, this just deletes dead code.

        * html/HTMLInputElement.h:

2012-11-15  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: NotSupportedError
        https://bugs.webkit.org/show_bug.cgi?id=102139

        Reviewed by Ojan Vafai.

        Patch 9 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-15  Elliott Sprehn  <esprehn@chromium.org>

        Remove isHTMLInputElement since it's unused and toInputElement exists 
        https://bugs.webkit.org/show_bug.cgi?id=102358

        Reviewed by Ojan Vafai.

        Remove isHTMLInputElement as no one uses it. Everyone just uses
        Node::toInputElement and checks for a 0 return value instead.

        toInputElement is also more reliable as there's no requirement that
        subclasses of HTMLInputElement have the tag name of inputTag so using
        this method in a check could potentially miss future subclasses with
        different tag names, though none exist right now.

        No new tests, this just deletes dead code.

        * html/HTMLInputElement.h:

2012-11-15  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: NoModificationAllowedError
        https://bugs.webkit.org/show_bug.cgi?id=102134

        Reviewed by Ojan Vafai.

        Patch 7 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-15  Miguel Garcia  <miguelg@chromium.org>

        Remove unnecesary dependencies INPUT_TYPE_COLOR
        https://bugs.webkit.org/show_bug.cgi?id=102379

        Reviewed by Darin Adler.

        Platforms should be able to enable INPUT_TYPE_COLOR without enabling
        CALENDAR_PICKER and DATALIST_ELEMENT. Before this patch however there would be
        compile errors in such configuration.

        No new tests since this is not adding any extra functionality.

        * WebCore.gyp/WebCore.gyp:
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::shouldShowSuggestions):
        * make-file-arrays.py:
        (main):

2012-11-15  Eric Carlson  <eric.carlson@apple.com>

        Update computed line position algorithm
        https://bugs.webkit.org/show_bug.cgi?id=93779

        Reviewed by Philippe Normand.

        Compute the position of a text track relative to rendered tracks. This is needed to position
        cues correctly when there is more than one text track.

        Test: media/track/track-cue-container-rendering-position.html

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::invalidateTrackIndex): Invalidate both cached track indices.
        (WebCore::TextTrack::trackIndexRelativeToRenderedTracks): Return the index of the track relative
            to other rendered tracks.
        * html/track/TextTrack.h:

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::calculateComputedLinePosition): Use trackIndexRelativeToRenderedTracks()
            instead of trackIndex() so cues are positioned correctly.

        * html/track/TextTrackList.cpp:
        (TextTrackList::getTrackIndex): Change return type from unsigned to int.
        (TextTrackList::getTrackIndexRelativeToRenderedTracks): New.
        * html/track/TextTrackList.h:

2012-11-15  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Bump Harfbuzz to allow fixing bug 101009 on EFL
        https://bugs.webkit.org/show_bug.cgi?id=101323

        Reviewed by Martin Robinson.

        Removing ifdef since we bumped Harfbuzz dependency. This is the
        real fix replacing the previous workaround of having a Chromium
        specific ifdef here, since Chromium uses a newer HarfBuzz version
        already.

        No new tests, covered by css3/flexbox/inline-flex-crash.html
        which will not crash anymore even with the ifdef removed.

        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):

2012-11-15  Andreas Kling  <kling@webkit.org>

        REGRESSION(r134408): Heap-use-after-free in WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement().
        <http://webkit.org/b/102304>

        Reviewed by Anders Carlsson.

        Test: fast/dom/cloneNode-below-body-attribute-merging.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):

            Use Element::fastHasAttribute() to determine if a given attribute is already present on the element
            we're merging attributes into.

        * dom/ElementAttributeData.h:
        (ElementAttributeData):

            Remove a now-unnecessary friend declaration.

2012-11-15  Elliott Sprehn  <esprehn@chromium.org>

        Prevent creation of detached frames in ShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=102333

        Reviewed by Dimitri Glazkov.

        Similar to Bug 94717 you can create a loaded iframe in a detached
        subtree using ShadowRoot. To fix this we just need to make
        SubframeLoadingDisabler traverse through shadow boundaries.

        Test: fast/frames/detached-shadow-frame.html

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

2012-11-15  Shinya Kawanaka  <shinyak@chromium.org>

        Changing pseudoClass (:visited) should cause distribution.
        https://bugs.webkit.org/show_bug.cgi?id=101700

        Reviewed by Dimitri Glazkov.

        When href attribute of an anchor or area element is changed, we have to invalidate distribution.

        Since we would like to check a few pseudoClasses at once, we make the argument of
        SelectRuleFeatureSet::hasSelectorFor int.

        Tests: fast/dom/shadow/pseudoclass-update-visited-anchor.html
               fast/dom/shadow/pseudoclass-update-visited-area.html

        * dom/ElementShadow.cpp:
        (WebCore::invalidateParentDistributionIfNecessary):
        * dom/ElementShadow.h:
        (WebCore):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/shadow/SelectRuleFeatureSet.h:
        (WebCore::SelectRuleFeatureSet::hasSelectorFor):

2012-11-15  Balazs Kelemen  <kbalazs@webkit.org>

        Coordinated Graphics: support the "freeze animations" API
        https://bugs.webkit.org/show_bug.cgi?id=100703

        Reviewed by Noam Rosenthal.

        Make animations resumable in Coordinated Graphics.
        Pausing was already implemented.

        Tested with animations and transitions tests. No tests to be
        unskipped because these tests has been working without this API
        as well (although this is the preferred way).

        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore::GraphicsLayerAnimation::apply):
        (WebCore::GraphicsLayerAnimation::computeTotalRunningTime):
        Do not consider the time while we was suspended as part of
        the total running time.
        (WebCore):
        (WebCore::GraphicsLayerAnimation::resume):
        (WebCore::GraphicsLayerAnimations::suspend):
        (WebCore::GraphicsLayerAnimations::resume):
        * platform/graphics/GraphicsLayerAnimation.h:
        (GraphicsLayerAnimation):
        (GraphicsLayerAnimations):

2012-11-15  Gabor Rapcsanyi  <rgabor@webkit.org>

        Relocate the ARM NEON SVG filter optimizations
        https://bugs.webkit.org/show_bug.cgi?id=102214

        Reviewed by Zoltan Herczeg.

        Relocate the ARM filter optimizations into platform/graphics/cpu/arm
        to keep them together with the others.
        From now all graphics optimization for ARM NEON should go here.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h: Renamed from Source/WebCore/platform/graphics/filters/arm/FEBlendNEON.h.
        (WebCore):
        (FEBlendUtilitiesNEON):
        (WebCore::FEBlendUtilitiesNEON::div255):
        (WebCore::FEBlendUtilitiesNEON::normal):
        (WebCore::FEBlendUtilitiesNEON::multiply):
        (WebCore::FEBlendUtilitiesNEON::screen):
        (WebCore::FEBlendUtilitiesNEON::darken):
        (WebCore::FEBlendUtilitiesNEON::lighten):
        (WebCore::FEBlend::platformApplyNEON):
        * platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON.h: Renamed from Source/WebCore/platform/graphics/filters/arm/FECompositeArithmeticNEON.h.
        (WebCore):
        (WebCore::FEComposite::computeArithmeticPixelsNeon):
        (WebCore::FEComposite::platformArithmeticNeon):
        * platform/graphics/cpu/arm/filters/FEGaussianBlurNEON.h: Renamed from Source/WebCore/platform/graphics/filters/arm/FEGaussianBlurNEON.h.
        (WebCore):
        (WebCore::boxBlurNEON):
        * platform/graphics/cpu/arm/filters/FELightingNEON.cpp: Renamed from Source/WebCore/platform/graphics/filters/arm/FELightingNEON.cpp.
        (WebCore):
        (WebCore::feLightingConstantsForNeon):
        (WebCore::FELighting::platformApplyNeonWorker):
        (WebCore::FELighting::getPowerCoefficients):
        * platform/graphics/cpu/arm/filters/FELightingNEON.h: Renamed from Source/WebCore/platform/graphics/filters/arm/FELightingNEON.h.
        (WebCore):
        (FELightingFloatArgumentsForNeon):
        (FELightingPaintingDataForNeon):
        (WebCore::FELighting::platformApplyNeon):
        * platform/graphics/cpu/arm/filters/NEONHelpers.h: Renamed from Source/WebCore/platform/graphics/filters/arm/NEONHelpers.h.
        (WebCore):
        (WebCore::loadRGBA8AsFloat):
        (WebCore::storeFloatAsRGBA8):

2012-11-15  Mike West  <mkwst@chromium.org>

        We should trigger a console warning when we encounter invalid sandbox flags.
        https://bugs.webkit.org/show_bug.cgi?id=101956

        Reviewed by Adam Barth.

        A developer who writes '<iframe sandbox="allowScripts">' probably has
        something in mind other than what the browser interprets. In these
        situations, we should log a console warning that notes 'allowScripts'
        is an invalid sandbox flag ('allow-scripts' is probably what she
        meant).

        This patch does the simplest thing possible: it throws a warning that
        lists the invalid flags encountered for sandbox attributes on iframes,
        and for sandbox Content Security Policy directives.

        Tests: http/tests/security/contentSecurityPolicy/sandbox-invalid-header.html
               http/tests/security/sandboxed-iframe-invalid.html

        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::parseSandboxPolicy):
        * dom/SecurityContext.h:
        (SecurityContext):
            Accept a new out parameter, invalidTokensErrorMessage. If invalid
            tokens are encountered, build an error message string, and pass it
            back to the caller through this parameter.
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::applySandboxPolicy):
            When applying a sandbox policy, pass a string into
            SecurityContext::parseSandboxPolicy to grab any errors that might
            be encountered, and log a warning in that event.
        (WebCore::ContentSecurityPolicy::reportInvalidSandboxFlags):
        (WebCore):
        * page/ContentSecurityPolicy.h:
            Adding a new method to report invalid sandbox flags.

2012-11-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rename member vars in ViewportArgument to match css-device-adapt
        https://bugs.webkit.org/show_bug.cgi?id=102355

        Reviewed by Gyuyoung Kim.

        No behavior change, thus no new tests.

        * dom/ViewportArguments.cpp:
        (WebCore::ViewportArguments::resolve):
        (WebCore::setViewportFeature):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::ViewportArguments):
        (ViewportArguments):
        (WebCore::ViewportArguments::operator==):

2012-11-15  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [WebGL] cloneNode for images with revoked Blob URIs fails
        https://bugs.webkit.org/show_bug.cgi?id=102366

        Reviewed by Vsevolod Vlasov.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-11-15  Mark Rowe  <mrowe@apple.com>

        Build fix.

        Disable deprecation warnings in a few places that need it.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::drawRepaintCounter):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances):
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2012-11-15  Kent Tamura  <tkent@chromium.org>

        Support stand-alone month names in calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=102196

        Reviewed by Kentaro Hara.

        We have showed non stand-alone month names in any locales. However
        we should show stand-alone month names in some locales such as
        Russian.

        This patch introduce PagePopupController::formatMonth. It is
        exposed to page-popups, and format year-month pairs in the same
        way as input[type=month].

        No new tests. Affects platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru.html.

        * Resources/pagepopups/calendarPicker.js:
        (Month.prototype.toLocaleString):
        Calls pagePopupController.formatMonth except Japanese locale.
        (handleArgumentsTimeout):
        Remove unnecessary default monthLabels.
        * page/PagePopupController.cpp:
        (WebCore::PagePopupController::formatMonth): Added.
        * page/PagePopupController.h:
        (PagePopupController): Declare formatMonth.
        * page/PagePopupController.idl: Add formatMonth.

2012-11-15  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Fix new JS compiler warnings.
        https://bugs.webkit.org/show_bug.cgi?id=102341

        Reviewed by Yury Semikhatsky.

        New version of compiler finds new inconsistencies.

        * inspector/front-end/DOMAgent.js: Replaced 2 simiar cases with loop.
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        Declared instance property on WebInspector.
        * inspector/front-end/Script.js: Normalized parameter notation.

2012-11-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed build fix.

        * dom/ViewportArguments.cpp:
        (WebCore::convertToUserSpace): Add static

2012-11-14  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Refactor ViewportArguments to only use CSS units
        https://bugs.webkit.org/show_bug.cgi?id=102287

        Reviewed by Noam Rosenthal.

        Refactor the ViewportArgument code to use a member method for
        resolving the viewport. This new method only uses arguments in
        CSS units.

        This is preparation for adding the CSS Device Adaptation support.

        Tested by existing tests fast/viewport.

        * dom/ViewportArguments.cpp:
        (WebCore::clampLengthValue):
        (WebCore::clampScaleValue): New utility functions.
        (WebCore::ViewportArguments::resolve):
        (WebCore::convertToUserSpace): Added until everyone provides arguments
        only in CSS units and not device ones.
        (WebCore::computeViewportAttributes):
        (WebCore::computeMinimumScaleFactorForContentContained):
        (WebCore):
        (WebCore::restrictMinimumScaleFactorToViewportSize):
        * dom/ViewportArguments.h:
        (ViewportArguments):

2012-11-14  Shinya Kawanaka  <shinyak@chromium.org> 

        Changing pseudoClass (:disabled) should cause distribution.
        https://bugs.webkit.org/show_bug.cgi?id=101901

        Reviewed by Hajime Morita.

        We have to invalidate distribution when pseudo-class (:disabled) is changed.

        According to the HTML5 spec, :disabled will match button, input, select, textarea, optgroup,
        option, command, li, and fieldset. However, command is not implemented yet, we skip li and command. li might
        have 'disabled' state, but we need a command element to make it 'disabled' state.

        Tests: fast/dom/shadow/pseudoclass-update-disabled-button.html
               fast/dom/shadow/pseudoclass-update-disabled-fieldset.html
               fast/dom/shadow/pseudoclass-update-disabled-input.html
               fast/dom/shadow/pseudoclass-update-disabled-optgroup.html
               fast/dom/shadow/pseudoclass-update-disabled-option.html
               fast/dom/shadow/pseudoclass-update-disabled-select.html
               fast/dom/shadow/pseudoclass-update-disabled-textarea.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabledAttributeChanged):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::parseAttribute):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):

2012-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134691, r134703, r134715, r134716,
        and r134733.
        http://trac.webkit.org/changeset/134691
        http://trac.webkit.org/changeset/134703
        http://trac.webkit.org/changeset/134715
        http://trac.webkit.org/changeset/134716
        http://trac.webkit.org/changeset/134733
        https://bugs.webkit.org/show_bug.cgi?id=102342

        "Broke the Apple Windows Debug and GTK builds." (Requested by
        dydx on #webkit).

        * WebCore.exp.in:
        * bindings/js/SerializedScriptValue.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        (WebCore):
        * testing/Internals.idl:

2012-11-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: fixing inspector tests under Qt.

        * inspector/front-end/TestController.js:
        * inspector/front-end/utilities.js:
        (.):

2012-11-14  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8Fast):

2012-11-14  Simon Fraser  <simon.fraser@apple.com>

        Don't use temporary clip rects when hit testing
        https://bugs.webkit.org/show_bug.cgi?id=102329

        Reviewed by Beth Dakin.

        We now cache clip rects separately for painting, hit testing etc. Hit testing
        clip rects are always shrunk to exclude scrollbars (so that hit testing on
        the scrollbars works), so we no longer every need to use temporary clip rects
        during hit testing.

        Added an assertion that the scrollbar relevancy when we computed the clip rects
        is the same as that when using them.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateClipRects):
        * rendering/RenderLayer.h:
        (WebCore::ClipRectsCache::ClipRectsCache):
        (ClipRectsCache):

2012-11-14  Dirk Schulze  <krit@webkit.org>

        Support animation of basic shape 'polygon'
        https://bugs.webkit.org/show_bug.cgi?id=102080

        Reviewed by Daniel Bates.

        The basic shapes 'circle', 'rectangle' and 'ellipse' are animatable with the committed
        patch http://trac.webkit.org/changeset/134352.
        This is a follow-up patch to make 'polygon' animatable as well, as long as the number
        of vertices between start and end polygon is the same.

        Added polygon animation test to existing test:
            fast/exclusions/shape-inside/shape-inside-animation.html
            css3/masking/clip-path-animation.html

        * page/animation/CSSPropertyAnimation.cpp: Forgot to add copyright with last commits.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Polygons are allowed now.
        (WebCore::BasicShapePolygon::blend): Interpolate polygon shapes.

2012-11-14  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Fix code generator warnings.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback):
        (GenerateImplementation):

2012-11-14  Shinya Kawanaka  <shinyak@chromium.org>

        Changing pseudoClass (:checked) should cause distribution.
        https://bugs.webkit.org/show_bug.cgi?id=101902

        Reviewed by Dimitri Glazkov.

        When the 'checked' state is changed, we have to invalidate distribution.

        According to the HTML5 spec, :checked should match a checked input[type="checkbox"],
        a checked input[type="radio"], a selected option, and commands. However, we don't have a command element yet.

        Tests: fast/dom/shadow/pseudoclass-update-checked-input.html
               fast/dom/shadow/pseudoclass-update-checked-option.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setSelectedState):

2012-11-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Kill $implClassName from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=102312

        Reviewed by Adam Barth.

        $implClassName and $interfaceName are the same.
        Sometimes we are passing both $implClassName and $interfaceName to
        subroutines. We can kill $implClassName.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateOpaqueRootForGC):
        (GenerateHeader):
        (GenerateDomainSafeFunctionGetter):
        (GenerateDomainSafeFunctionSetter):
        (GenerateConstructorGetter):
        (GenerateNormalAttrGetter):
        (GenerateReplaceableAttrSetter):
        (GenerateNormalAttrSetter):
        (GenerateEventListenerCallback):
        (GenerateOverloadedFunctionCallback):
        (GenerateFunctionCallback):
        (GenerateParametersCheck):
        (GenerateOverloadedConstructorCallback):
        (GenerateSingleConstructorCallback):
        (GenerateConstructorCallback):
        (GenerateEventConstructorCallback):
        (GenerateTypedArrayConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation):
        (GenerateFunctionCallString):

2012-11-14  Adam Barth  <abarth@webkit.org>

        [V8] We can shave one instruction off toV8Fast
        https://bugs.webkit.org/show_bug.cgi?id=102297

        Reviewed by Kentaro Hara.

        There's no reason to store info.Holder in a local variable. Calling
        Holder() is essentially free because it's inlined to an offset read.

        I doubt this patch moves the performance needle in any measurable way,
        but it makes the code slightly prettier.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8Fast):

2012-11-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Get rid of a redundant branch in JSValueToNative()
        https://bugs.webkit.org/show_bug.cgi?id=102311

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (JSValueToNative):
        (NativeToJSValue):

2012-11-14  Shinya Kawanaka  <shinyak@chromium.org>

        Changing pseudoClass (:link) should cause distribution
        https://bugs.webkit.org/show_bug.cgi?id=101698

        Reviewed by Hajime Morita.

        CSSSelector :link matches anchor element with href attribute. When href attribute of an anchor element is changed,
        we have to invalidate distribution.

        According to the HTML spec, :link matches a link element having href attribute, currently we have not implemented it yet.

        Tests: fast/dom/shadow/pseudoclass-update-link-anchor.html
               fast/dom/shadow/pseudoclass-update-link-area.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):

2012-11-14  Kentaro Hara  <haraken@chromium.org>

        Remove unused functions from CodeGenerator.pm
        https://bugs.webkit.org/show_bug.cgi?id=102316

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/scripts/CodeGenerator.pm:
        (GenerateCompileTimeCheckForEnumsIfNeeded):

2012-11-14  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        RIM PR 225755
        Internally Reviewed by Eli Fidler.
        Update checkbox, radio and menulist button style. Adjust border width
        and line height.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::adjustMenuListButtonStyle):
        * platform/blackberry/RenderThemeBlackBerry.h:
        (RenderThemeBlackBerry):

2012-11-14  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: InvalidModificationError
        https://bugs.webkit.org/show_bug.cgi?id=102281

        Reviewed by Kentaro Hara.

        Patch 13 of 25 to update DOMException name to match the spec and Firefox.

        DOMExcecption INVALID_MODIFICATION_ERR is not used in our code.

        * dom/DOMCoreException.cpp:

2012-11-14  Adam Barth  <abarth@webkit.org>

        document variable in Document::axObjectCache is actually the topDocument
        https://bugs.webkit.org/show_bug.cgi?id=101966

        Reviewed by Chris Fleizach.

        Name change requested by Darin Adler.

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

2012-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        [CF]: XMLHttpRequest "timeout" events firing as "error" events
        https://bugs.webkit.org/show_bug.cgi?id=102271

        Reviewed by David Kilzer.

        Initialize the tiemout flag if the error results from a timeout
        in the USE(CFNETWORK) cases.

        No new tests. This is covered by http/tests/xmlhttprequest/timeout
        tests on ports that USE(CFNETWORK).

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::ResourceError):

2012-11-14  Nico Weber  <thakis@chromium.org>

        [chromium/mac] Fix drawing of buttons, checkboxes, radio boxes, and steppers when the page is scaled
        https://bugs.webkit.org/show_bug.cgi?id=102282

        Reviewed by James Robinson.

        Chromium uses skia, and skia state is synced with CG context state at
        LocalCurrentGraphicsContext construction time. So delay that
        construction after context transforms have happened.
        (This regressed in http://trac.webkit.org/changeset/125830)

        Covered by the new pixel test fast/forms/zoomed-controls.html. I
        couldn't find an existing test for this.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintButton):

2012-11-14  Mark Lam  <mark.lam@apple.com>

        Change JSEventListener::m_jsFunction to be a weak ref.
        https://bugs.webkit.org/show_bug.cgi?id=101989.

        Reviewed by Geoffrey Garen.

        No new tests.

        * ForwardingHeaders/heap/SlotVisitor.h: Added.
        * bindings/js/JSDOMBinding.h: Added #include <heap/SlotVisitor.h>
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::visitJSFunction):
        (WebCore::JSEventListener::operator==):
         - Removed the m_wrapper checks in operator==() because they are not
           needed. There is no longer any threat of m_jsFunction pointing to
           recycled memory. The use of weak refs will ensure that m_jsFunction
           is either still holding on to its old memory exclusively, or is 0'ed
           out when the GC collects it.
        * bindings/js/JSEventListener.h:
        (JSEventListener):
        (WebCore::JSEventListener::jsFunction):

2012-11-14  Dan Carney  <dcarney@google.com>

        [V8] Rename dispatchWrap
        https://bugs.webkit.org/show_bug.cgi?id=102240

        Reviewed by Adam Barth.

        Mostly a rename:
        dispatchWrap->wrap
        wrapSlow->createWrapper
        dispatchWrapCustom->wrap

        No new tests. No change in functionality.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (GenerateImplementation):
        (GenerateToV8Converters):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::wrap):
        (WebCore::V8Float64Array::createWrapper):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        (WebCore):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::createWrapper):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::createWrapper):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::createWrapper):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::createWrapper):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::createWrapper):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::createWrapper):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::createWrapper):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::createWrapper):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        (WebCore::toV8Fast):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::createWrapper):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::createWrapper):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (V8TestOverloadedConstructors):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::createWrapper):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):
        (WebCore::wrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8CanvasRenderingContextCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore):
        (WebCore::wrap):
        * bindings/v8/custom/V8EntryCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8EntrySyncCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore):
        (WebCore::wrap):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8ImageDataCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8PerformanceEntryCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8SVGElementCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8SVGPathSegCustom.cpp:
        (WebCore::wrap):
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::wrap):
        * dom/make_names.pl:
        (printWrapperFunctions):
        (printWrapperFactoryCppFile):

2012-11-14  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Refactor theme to choose whether to support foreground color of selection
        https://bugs.webkit.org/show_bug.cgi?id=102037

        Reviewed by Gyuyoung Kim.

        RenderThemeEfl can change foreground color of selection using theme file.
        But it can not disable supports of foreground color to keep the text color
        which is selected.

        This patch refactors color classes of theme file from active/inactive classes
        to foreground/background classes so that RenderThemeEfl checks whether
        theme file supports foreground color class.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::fillColorsFromEdjeClass):
        (WebCore::RenderThemeEfl::setColorFromThemeClass):
        (WebCore::RenderThemeEfl::loadTheme):
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::supportsSelectionForegroundColors):
        (WebCore):
        * platform/efl/RenderThemeEfl.h:
        (RenderThemeEfl):

2012-11-14  Tony Chang  <tony@chromium.org>

        Convert m_selectorVector back to a stack allocated m_reusableSelectorVector
        https://bugs.webkit.org/show_bug.cgi?id=102295

        Reviewed by Andreas Kling.

        Revert r125252 because we're not going to go forward with implementing CSS hierarchies at this time.

        No new tests because there should be no change in behavior.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore):
        (WebCore::filterProperties):
        (WebCore::CSSParser::createStylePropertySet):
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::rollbackLastProperties):
        (WebCore::CSSParser::clearProperties):
        (WebCore::CSSParser::parse4Values):
        (WebCore::CSSParser::parseFlowThread):
        (WebCore::CSSParser::addTextDecorationProperty):
        (WebCore::CSSParser::createFloatingSelectorVector):
        (WebCore::CSSParser::sinkFloatingSelectorVector):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::setReusableRegionSelectorVector):
        (WebCore::CSSParser::startDeclarationsForMarginBox):
        (WebCore::CSSParser::endDeclarationsForMarginBox):
        (WebCore::CSSParser::deleteFontFaceOnlyValues):
        * css/CSSParser.h:
        (WebCore::CSSParser::hasProperties):
        (WebCore::CSSParser::reusableSelectorVector):
        (CSSParser):
        (WebCore::CSSParser::reusableRegionSelectorVector):
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::adoptSelectorVector):
        * css/CSSParserValues.h:
        (CSSParserSelector):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::adoptSelectorVector):
        * css/CSSSelectorList.h:
        (CSSSelectorList):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleRegion::StyleRuleRegion):
        * css/StyleRule.h:
        (WebCore::StyleRule::parserAdoptSelectorVector):
        (WebCore::StyleRulePage::parserAdoptSelectorVector):
        (WebCore::StyleRuleRegion::create):
        (StyleRuleRegion):

2012-11-14  Alec Flett  <alecflett@chromium.org>

        Add tests for explicit serialization values
        https://bugs.webkit.org/show_bug.cgi?id=96818

        Reviewed by Adam Barth.

        Expose direct access to the serialization/deserialization mechanisms
        of SerializedScriptValue to DumpRenderTree.

        * testing/Internals.cpp:
        (WebCore::Internals::serializeObject):
        (WebCore):
        (WebCore::Internals::deserializeBuffer):
        * testing/Internals.h:
        (WebCore):
        * testing/Internals.idl:

2012-11-14  Michael Pruett  <michael@68k.org>

        IndexedDB: Add clear() method to JSC ScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=102288

        Reviewed by Kentaro Hara.

        IndexedDB uses the ScriptValue::clear() method, which existed
        previously only in the V8 implementation of ScriptValue. This
        change is necessary to implement IndexedDB for JSC.

        Tests: storage/indexeddb/*

        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::clear):
        (ScriptValue):

2012-11-14  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Indexing tests are flaky-crashing
        https://bugs.webkit.org/show_bug.cgi?id=102283

        Reviewed by Tony Chang.

        Don't commit the transaction if there are outstanding pre-emptive events
        from indexing operations.

        Speculative fix for the flakiness.

        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::taskEventTimerFired):

2012-11-14  Tony Chang  <tony@chromium.org>

        Crash in flexbox when removing absolutely positioned children
        https://bugs.webkit.org/show_bug.cgi?id=100465

        Reviewed by Ojan Vafai.

        We use m_numberOfChildrenOnFirstLine when computing baseline alignment.
        This value gets set during flexbox layout. When we remove an absolutely
        positioned child, we don't relayout and this value would get stale.

        Change m_numberOfChildrenOnFirstLine to m_numberOfInFlowChildrenOnFirstLine
        so the value doesn't get stale when we remove absolutely positioned children.
        Also change the loop in firstLineBoxBaseline to bail if we run off the end of
        the iterator.

        Test: css3/flexbox/crash-removing-out-of-flow-child.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::RenderFlexibleBox::firstLineBoxBaseline):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        * rendering/RenderFlexibleBox.h:

2012-11-14  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove magic numbers in record comparator, handle missing case
        https://bugs.webkit.org/show_bug.cgi?id=102255

        Reviewed by Tony Chang.

        For some ranges of metadata entries, a simple type byte comparison is sufficient
        for the backing store comparator. In two places those ranges used magic numbers,
        one of which was incorrect - which could lead to failed reads/writes.

        Test: webkit_unit_tests --gtest_filter='IDBLevelDBCodingTest.ComparisonTest'

        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (IDBLevelDBCoding):
        (WebCore::IDBLevelDBCoding::compare):
        * Modules/indexeddb/IDBLevelDBCoding.h:

2012-11-14  Dirk Schulze  <krit@webkit.org>

        Cleanup BasicShape blending check
        https://bugs.webkit.org/show_bug.cgi?id=102289

        Reviewed by Daniel Bates.

        CSSPropertyAnimation had the same code for varifying that two BasicShape objects can be blended 
        twice. Refactor the code and add a canBlend method in BasicShape that combines both checks. This
        is a preparation for follow-up patches.

        Pure refactoring without behavior change, no new tests.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Call new canBlend method for blending verification.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Check if two BasicShape objects can be blended.
        (WebCore):
        * rendering/style/BasicShapes.h:

2012-11-14  Dirk Schulze  <krit@webkit.org>

        [CSS Exclusions] Basic shapes on 'shape-inside' should be animatable
        https://bugs.webkit.org/show_bug.cgi?id=102123

        Reviewed by Antti Koivisto.

        The '-webkit-shape-inside' propery takes a BasicShape as input like
        '-webkit-clip-path'. Follow up on http://trac.webkit.org/changeset/134352 and
        make '-webkit-shape-inside' animatable as well.

        Test: fast/exclusions/shape-inside/shape-inside-animation.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Blend fuction for exclusion shapes. The property takes another
            input then '-webkit-clip-path'.
        (WebCore):
        (PropertyWrapperBasicShape): Add wrapper for BasicShape object. Can be reused by
            '-webkit-shape-ourside' as well.
        (WebCore::PropertyWrapperBasicShape::PropertyWrapperBasicShape):
        (WebCore::CSSPropertyAnimation::ensurePropertyMap):

2012-11-14  Helder Correia  <helder.correia@nokia.com>

        [TexMap][Cairo] Accelerated compositing debug visuals
        https://bugs.webkit.org/show_bug.cgi?id=101883

        Reviewed by Kenneth Rohde Christiansen.

        No new tests, just introducing a debug feature.

        Add a Cairo implementation to complement the patch from bug 90116
        (http://trac.webkit.org/changeset/122275).

        For this feature to be enabled, the environment variable
        WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS must be set to 1. Once enabled,
        both repaint counters and tile borders will be painted.

        A Cairo-specific drawRepaintCounter() implementation was added to
        TextureMapperGL. A cairo_surface_t is used as scratch buffer to paint
        the counters. It is then uploaded to a BitmapTexture acquired
        from the pool and finally draw by TextureMapper. The actual compositing
        happens inside LayerBackingStore::paintToTextureMapper(). Each
        LayerBackingStoreTile has a repaint counter which gets incremented in
        LayerBackingStore::updateTile().

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawRepaintCounter):

2012-11-14  Michael Pruett  <michael@68k.org>

        IndexedDB: Add JSNoStaticTables to IndexedDB interfaces
        https://bugs.webkit.org/show_bug.cgi?id=102268

        Reviewed by Geoffrey Garen.

        Add JSNoStaticTables attribute to IndexedDB interface
        definitions. This attribute must be specified in interfaces
        which can be accessed from workers.

        Tests: storage/indexeddb/*

        * Modules/indexeddb/IDBAny.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorWithValue.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBDatabaseException.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKey.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBOpenDBRequest.idl:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBUpgradeNeededEvent.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * Modules/indexeddb/IDBVersionChangeRequest.idl:
        * dom/DOMStringList.idl:

2012-11-14  Michael Pruett  <michael@68k.org>

        IndexedDB: Replace int64 with int64_t
        https://bugs.webkit.org/show_bug.cgi?id=102270

        Reviewed by Tony Chang.

        Cleaning up coding inconsistencies, no change in behavior.

        Tests: storage/indexeddb/*

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::deleteObjectStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):

2012-11-14  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        [EFL][WK2] White flicker when scrolling big pages with dark background on slower hardware.
        https://bugs.webkit.org/show_bug.cgi?id=102000

        Reviewed by Noam Rosenthal.

        Add helper functions to clear viewport before painting. Those functions
        used by EFL Webkit2 port to set view background to match page background
        in order to reduce visibility of flicker during scrolling/scaling/repainting
        where page tiles are not ready.

        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::TextureMapperImageBuffer::drawSolidColor):
        (WebCore):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:

2012-11-14  Mark Lam  <mark.lam@apple.com>

        Fixed regressions due to adding JSEventListener::m_wrapper null checks.
        https://bugs.webkit.org/show_bug.cgi?id=102183.

        Reviewed by Geoffrey Garen.

        Fixed JSEventListener::operator==() to work within the contract that
        when m_wrapper is 0, m_jsFunction is also expected to be 0. Also fixed
        some typos in comments.

        No new tests.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::visitJSFunction):
        (WebCore::JSEventListener::operator==):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2012-11-14  Nate Chapin  <japhet@chromium.org>

        Fix chromium asserts from r134649.

        Rubber-stamped by Adam Barth.

        MainResourceLoader was calling releaseResources() twice when cancelled
        within MainResourceLoader::load(), so check reachedTerminalState() before
        calling releaseResources() there.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::load):

2012-11-14  Andreas Kling  <kling@webkit.org>

        Only resolve presentation attribute style once per shared ElementAttributeData.
        <http://webkit.org/b/100990>

        Reviewed by Antti Koivisto.

        Track the "presentation attribute style dirty" state on ElementAttributeData instead of in a Node flag.
        This allows us to avoid duplicate work for ElementAttributeData that are shared between multiple elements,
        since the state is no longer per-Element.

        I've left the presentation attribute cache in there for now, since it still covers the case where
        two elements have the same presentation attributes but different non-presentation attributes.
        It's likely that we're not gaining much from it anymore, but that's a topic for another patch.

        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::presentationAttributeStyle):
        (WebCore::ElementAttributeData::ElementAttributeData):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::ElementAttributeData):
        (ElementAttributeData):
        * dom/Node.h:

            Move presentation attribute style dirty flag from Node to ElementAttributeData.

        * dom/ElementAttributeData.cpp:
        (SameSizeAsElementAttributeData):

            Add a compile-time object size assertion for ElementAttributeData.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):

            Don't mark the presentation attribute style dirty if the element is using an immutable (implies
            shared) ElementAttributeData and another element has already generated the StylePropertySet.
            The element itself is still marked for style recalc like before, this just avoids the process
            of converting the attributes to CSS properties.

2012-11-14  Scott Violet  <sky@chromium.org>

        [Chromium] Refactor theme font lookup into a factory
        https://bugs.webkit.org/show_bug.cgi?id=101949

        Reviewed by Tony Chang.

        This will ultimately allow us to use what is currently in RenderThemeChromiumLinux on windows.

        No new tests. Refactoring only.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * rendering/RenderThemeChromiumFontProvider.cpp: Added.
        (WebCore):
        (WebCore::RenderThemeChromiumFontProvider::defaultGUIFont): Moved into RenderThemeFontProvider.
        * rendering/RenderThemeChromiumFontProvider.h: Added.
        (WTF):
        (WebCore):
        (RenderThemeChromiumFontProvider): This is the font related methods.
        * rendering/RenderThemeChromiumFontProviderLinux.cpp: Added.
        (WebCore):
        (WebCore::RenderThemeChromiumFontProvider::setDefaultFontSize): What was in RenderThemeChromiumSkia::setDefaultFontSize.
        (WebCore::RenderThemeChromiumFontProvider::systemFont): What was in RenderThemeChromiumSkia::systemFont.
        * rendering/RenderThemeChromiumFontProviderWin.cpp: Added.
        (WebCore):
        (WebCore::pointsToPixels): Moved from RenderThemeChromiumWin.
        (WebCore::getNonClientMetrics): Moved from RenderThemeChromiumWin.
        (WebCore::systemFontSize): Moved from RenderThemeChromiumWin.
        (WebCore::RenderThemeChromiumFontProvider::systemFont): Moved from RenderThemeChromiumWin.
        (WebCore::RenderThemeChromiumFontProvider::setDefaultFontSize): Moved from RenderThemeChromiumWin.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::RenderThemeChromiumSkia): Moved into RenderThemeFontProvider.
        (WebCore::RenderThemeChromiumSkia::systemFont): Calls to RenderThemeChromiumFontProvider.
        (WebCore::RenderThemeChromiumSkia::setDefaultFontSize): Calls to RenderThemeChromiumFontProvider.
        * rendering/RenderThemeChromiumSkia.h:
        (RenderThemeChromiumSkia): Moves defaultFontSize into RenderThemeChromiumFontProvider.
        * rendering/RenderThemeChromiumWin.cpp: Moves font code into RenderThemeFontProviderWin.
        (WebCore):
        * rendering/RenderThemeChromiumWin.h: Removed overriden methods now handled by RenderThemeChromiumSkia.
        (RenderThemeChromiumWin):

2012-11-14  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: InUseAttributeError
        https://bugs.webkit.org/show_bug.cgi?id=102141

        Reviewed by Ojan Vafai.

        Patch 10 of 25 to update DOMException name to match the spec and Firefox.

        The name for this is not in the spec but the case was selected to match
        Firefox. http://mxr.mozilla.org/mozilla-central/source/dom/base/domerr.msg#18

        INUSE_ATTRIBUTE_ERR is historical and not used in any spec or any of our tests.

        * dom/DOMCoreException.cpp:
        * dom/ExceptionCode.h:

2012-11-14  Lynn Neir  <lynn.neir@skype.net>

        [WinCairo] Incorrect line-height for styled menulist (select tag)
        in windows theme.
        https://bugs.webkit.org/show_bug.cgi?id=79435

        Reviewed by Brent Fulgham

        Applied same fix as in RenderThemeSafari::adjustMenuListButtonStyle
        to Windows theme to fix issue.

        Tests: fast/forms/menulist-restrict-line-height.html
               fast/forms/control-restrict-line-height.html
               fast/forms/basic-selects.html

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle): Set line
        height to the correct initial height.

2012-11-14  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: WrongDocumentError
        https://bugs.webkit.org/show_bug.cgi?id=102096

        Reviewed by Ojan Vafai.

        Patch 4 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-14  Nate Chapin  <japhet@chromium.org>

        Move empty loading to DocumentLoader, simplify FrameLoader::init()
        https://bugs.webkit.org/show_bug.cgi?id=101512

        Reviewed by Adam Barth.

        No new tests, though several outputs changed because we no longer send resource
            load callbacks for empty loads.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource): Handle empty main resource
            loads directly here.
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Initialize some variables whose values
            were previously being reset in init(). Given that the FrameLoader is in
            an inconsistent state before init() is called anyway, there doesn't seem
            to be a disadvantage to just initializing them to their post-init() values.
        (WebCore::FrameLoader::init): Just call startLoadingMainResource(), instead of
            doing a bunch of direct calls to functions FrameLoader shouldn't know about.
        * loader/FrameLoaderStateMachine.cpp:
        * loader/FrameLoaderStateMachine.h:
        * loader/MainResourceLoader.cpp: Throughout, remove the concept of an empty load.
        (WebCore::MainResourceLoader::loadNow): This only returned true when an empty
            load got deferred, which won't happen now. Return void and always treat
            as returning false.
        * loader/MainResourceLoader.h:

2012-11-14  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: InvalidStateError
        https://bugs.webkit.org/show_bug.cgi?id=102241

        Reviewed by Ojan Vafai.

        Patch 11 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-14  Joshua Bell  <jsbell@chromium.org>

        Rename NATIVE_TYPE_ERR to TypeError
        https://bugs.webkit.org/show_bug.cgi?id=102114

        Reviewed by Kentaro Hara.

        Defines names (mostly) matching WebIDL exception types for use by dom (etc) code.
        V8 binding code had colliding enum members, which required prefixing.

        No new tests - just internal renames.

        * Modules/indexeddb/IDBCursor.cpp: s/NATIVE_TYPE_ERR/TypeError/g
        (WebCore::IDBCursor::advance):
        (WebCore::IDBCursor::stringToDirection):
        (WebCore::IDBCursor::directionToString):
        * Modules/indexeddb/IDBDatabase.cpp: Ditto.
        (WebCore::IDBDatabase::setVersion):
        * Modules/indexeddb/IDBFactory.cpp: Ditto.
        (WebCore::IDBFactory::open):
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBObjectStore.cpp: Ditto.
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBTransaction.cpp: Ditto.
        (WebCore::IDBTransaction::stringToMode):
        (WebCore::IDBTransaction::modeToString):
        * bindings/js/JSDOMBinding.cpp: Ditto.
        (WebCore::setDOMException):
        * bindings/v8/DateExtension.cpp: Prefix ErrorType enum/members w/ V8/v8.
        (WebCore::DateExtension::OnSleepDetected):
        * bindings/v8/NPV8Object.cpp: Ditto.
        (_NPN_SetException):
        * bindings/v8/V8Binding.cpp: Ditto.
        (WebCore::throwError):
        (WebCore::handleMaxRecursionDepthExceeded):
        * bindings/v8/V8Binding.h: Ditto.
        (WebCore):
        * bindings/v8/V8NPObject.cpp: Ditto.
        (WebCore::npObjectInvokeImpl):
        (WebCore::npObjectGetProperty):
        (WebCore::npObjectSetProperty):
        (WebCore::npObjectPropertyEnumerator):
        * bindings/v8/V8ThrowException.cpp: Rename ALL the errors!
        (WebCore::V8ThrowException::setDOMException):
        (WebCore::V8ThrowException::throwError):
        (WebCore::V8ThrowException::throwTypeError):
        (WebCore::V8ThrowException::throwNotEnoughArgumentsError):
        * bindings/v8/V8ThrowException.h:
        (V8ThrowException):
        * bindings/v8/WorkerContextExecutionProxy.cpp: Prefixing (continued)
        (WebCore::WorkerContextExecutionProxy::evaluate):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp: Ditto.
        (WebCore::V8ArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h: Ditto.
        (WebCore::constructWebGLArrayWithArrayBufferArgument):
        (WebCore::constructWebGLArray):
        (WebCore::setWebGLArrayHelper):
        * bindings/v8/custom/V8AudioContextCustom.cpp: Ditto.
        (WebCore::V8AudioContext::constructorCallback):
        * bindings/v8/custom/V8BlobCustom.cpp: Ditto.
        (WebCore::V8Blob::constructorCallback):
        * bindings/v8/custom/V8ClipboardCustom.cpp: Ditto.
        (WebCore::V8Clipboard::clearDataCallback):
        (WebCore::V8Clipboard::setDragImageCallback):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp: Ditto.
        (WebCore::V8DOMFormData::appendCallback):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp: Ditto.
        (WebCore::V8SQLResultSetRowList::itemCallback):
        * dom/ExceptionCode.h: Add WebIDL exception types.

2012-11-14  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Style BB10 time input field font.
        https://bugs.webkit.org/show_bug.cgi?id=102260.

        Reviewed by Rob Buis.

        RIM PR 243355
        Adjust time input field font using BB10 system default font.

        * css/themeBlackBerry.css:
        (input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="month"]):

2012-11-14  Li Yin  <li.yin@intel.com>

        createDelay should raise exception when the maxDelayTime parameter is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=102173

        Reviewed by Chris Rogers.

        Spec: https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html
        The specified value must be greater than zero and less than three minutes or a
        NOT_SUPPORTED_ERR exception will be thrown.

        Tests: webaudio/delaynode-maxdelaylimit.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createDelay):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/AudioContext.idl: Add raising exception for createDelay.
        * Modules/webaudio/DelayNode.cpp:
        (WebCore):
        (WebCore::DelayNode::DelayNode):
        * Modules/webaudio/DelayNode.h:
        (WebCore::DelayNode::create):
        (DelayNode):

2012-11-14  Simon Fraser  <simon.fraser@apple.com>

        Don't pass a paintingRoot when painting from RenderLayerBacking
        https://bugs.webkit.org/show_bug.cgi?id=102256

        Reviewed by David Hyatt.

        The 'paintingRoot' parameter to the RenderLayer paint functions
        is used when painting just a subtree (e.g. when painting dragged
        selections). There is no need to pass it when a RenderLayerBacking
        paints its contents or overlay scrollbars.
        
        Passing it requires an expensive isDescendant() check, so passing
        null is more efficient.
        
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::LayerPaintingInfo::LayerPaintingInfo):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

2012-11-14  Alec Flett  <alecflett@chromium.org>

        Add DOMRequestState to maintain world/ScriptExecutionContext state
        https://bugs.webkit.org/show_bug.cgi?id=102102

        Reviewed by Adam Barth.

        Introduce DOMRequestState, and convert IndexedDB over.

        No new tests, this is an abstraction layer for existing code.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):
        * WebCore.gypi:
        * bindings/v8/DOMRequestState.h: Added.
        (WebCore):
        (DOMRequestState):
        (WebCore::DOMRequestState::DOMRequestState):
        (Scope):
        (WebCore::DOMRequestState::Scope::Scope):
        (WebCore::DOMRequestState::scope):

2012-11-14  Justin Novosad  <junov@google.com>

        Boxes with rounded corners and thin borders are too slow to draw
        https://bugs.webkit.org/show_bug.cgi?id=101974

        Reviewed by Simon Fraser.

        With the current implementation RenderBox::
        determineBackgroundBleedAvoidance() uses the slow path
        BackgroundBleedUseTransparencyLayer for some very common use cases,
        notably for drawing rectangles with rounded corners that have thin
        borders. This is because the BackgroundBleedShrinkBackground
        strategy requires a border at least two pixels wide on all sides. This
        patch introduce drawing strategy BackgroundBleedBackgroundOverBorder.
        This approach consists in drawing the border first, with an inset inner
        edge (for anti-aliased compositing to work well).  This approach only
        works with opaque solid edges and opaque single-layer backgrounds.
        By using this approach rather than BackgroundBleedUseTransparencyLayer,
        we save two clipPath, one save and one saveLayer on the
        GraphicsContext. This patch gets good coverage from existing layout
        tests. One additional test was added to exercise mitring, thick edges
        and anti-aliasing edge cases under the new painting algorithm.

        Test: fast/borders/border-radius-wide-border-05.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::determineBackgroundBleedAvoidance):
        Added selection criteria for BackgroundOverBorder
        (WebCore::RenderBox::paintBoxDecorations):
        Added a preliminary paintBorder pass for BackgroundOverBorder
        (WebCore::RenderBox::paintBackground):
        Insetting the background to to innerBorder when bleedAvoidance is
        BackgroundOverBorder.  This why BackgroundOverBorder only works for
        Opaque solid edges.
        (WebCore):
        (WebCore::RenderBox::backgroundIsSingleOpaqueLayer):
        Utility method use by determineBackgroundBleedAvoidance to test the
        background's eligibility for BackgroundOverBorder bleed avoidance
        strategy.  The reason the background must be a single layer is to avoid
        color bleeding from layer compositing along anti-aliased edges
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect):
        (WebCore::RenderBoxModelObject::borderInnerRectAdjustedForBleedAvoidance):
        Added support for BackgroundOverBorder by applying a one pixel inset.
        (WebCore::RenderBoxModelObject::backgroundRoundedRectAdjustedForBleedAvoidance):
        Set the background rect to the inner border for BackgroundOverBorder
        (WebCore):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Added support for BackgroundOverBorder by using 
        backgroundRoundedRectAdjustedForBleedAvoidance
        (WebCore::RenderBoxModelObject::paintBorderSides):
        Added support for BackgroundOverBorder by applying per-side inset
        adjustments.
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        Added support for BackgroundOverBorder by using an adjusted inner
        border, but not if sides are painted individually.
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):

2012-11-14  Hideki Yoshida  <yoshida-hxa@necst.nec.co.jp>

        [WinCairo] Fix cairo_t* memory leak in GraphicsContext::platformInit
        https://bugs.webkit.org/show_bug.cgi?id=76219

        Reviewed by Brent Fulgham.

        This patch is to fix a memory leak problem which occurs
        in every rendering process on Wincairo port.
        By applying this patch, the memory allocated in cairo 
        library will be released by calling cairo_destroy.

        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::platformInit):

2012-11-14  Sami Kyostila  <skyostil@chromium.org>

        Optimize painting of composited scrolling layers
        https://bugs.webkit.org/show_bug.cgi?id=96087

        Reviewed by Simon Fraser.

        Don't completely repaint accelerated scrolling layers when the scroll offset
        changes.

        Test: compositing/overflow/scrolling-without-painting.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setOffsetFromRenderer):
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2012-11-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: keep track of mutation observers and disconnect them upon upload
        https://bugs.webkit.org/show_bug.cgi?id=102239

        Reviewed by Vsevolod Vlasov.

        Otherwise we hit memory leaks.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.wasShown):
        (WebInspector.DefaultTextEditor.prototype.willHide):
        (WebInspector.TextEditorMainPanel.prototype._wasShown):
        (WebInspector.TextEditorMainPanel.prototype._willHide):
        (WebInspector.TextEditorMainPanel.prototype._attachMutationObserver):
        (WebInspector.TextEditorMainPanel.prototype._detachMutationObserver):
        * inspector/front-end/utilities.js:

2012-11-14  Sergio Villar Senin  <svillar@igalia.com>

        [Qt] Use a node image if there is no drag image set for Drag&Drop
        https://bugs.webkit.org/show_bug.cgi?id=102124

        Reviewed by Simon Hausmann.

        Use the nodeImage provided by the frame if there is no dragImage in
        the clipboard for the current drag&drop operation.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::createDragImage):

2012-11-14  Max Vujovic  <mvujovic@adobe.com>

        Call to enclosingFilterLayer() in RenderObject::containerForRepaint() is expensive
        https://bugs.webkit.org/show_bug.cgi?id=101846

        Reviewed by Simon Fraser.

        If software-rendered CSS Filters have not been used in the document, avoid doing the second
        tree walk in RenderObject::containerForRepaint, which determines the RenderObject's
        enclosing filter layer.

        No new tests. We now avoid a filters related code path for a performance improvement when
        we're not using filters.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/FrameView.h:
        (FrameView):
        (WebCore::FrameView::setHasSoftwareFilters):
        (WebCore::FrameView::hasSoftwareFilters):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffectRenderer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):

2012-11-14  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: NotFoundError
        https://bugs.webkit.org/show_bug.cgi?id=102137

        Reviewed by Ojan Vafai.

        Patch 8 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-14  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Updating BB Cookie database to use WAL
        https://bugs.webkit.org/show_bug.cgi?id=102237

        Reviewed by Rob Buis.

        The cookie database is accessed by one process only and should be updated to
        use the WAL journal mode for better I/O performance.

        PR 236553

        cookieCollection.db-wal is created after the conversion to WAL.
        Tested cookie persistence by logging on to random sites and restarting the browser and
        check if it automatically logs in.
        Also tested using Opera's cookie persistence test.

        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
        (WebCore::CookieDatabaseBackingStore::invokeOpen):

2012-11-14  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: IndexSizeError
        https://bugs.webkit.org/show_bug.cgi?id=102087

        Reviewed by Ojan Vafai.

        This is the first in a series of updates to DOMException name to match
        the spec and Firefox.

        Patch 1 of 25

        Updated existing tests.

        * dom/DOMCoreException.cpp:
        (WebCore):

2012-11-14  Gabor Rapcsanyi  <rgabor@webkit.org>

        Fix [-Wmissing-braces] warnings in graphics/cpu/arm/GraphicsContext3DNEON.h
        https://bugs.webkit.org/show_bug.cgi?id=102205

        Reviewed by Csaba Osztrogonác.

        Fixing some warnings in GraphicsContext3DNEON.h which have been caused by missing braces.

        * platform/graphics/cpu/arm/GraphicsContext3DNEON.h:
        (WebCore::ARM::unpackOneRowOfRGBA4444ToRGBA8NEON):
        (WebCore::ARM::unpackOneRowOfRGBA5551ToRGBA8NEON):
        (WebCore::ARM::unpackOneRowOfRGB565ToRGBA8NEON):

2012-11-14  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: NoDataAllowedError
        https://bugs.webkit.org/show_bug.cgi?id=102132

        Reviewed by Darin Adler.

        Patch 6 of 25 to update DOMException name to match the spec and Firefox.

        NO_DATA_ALLOWED_ERR is historical and not used in any spec or in our code.

        * dom/DOMCoreException.cpp:
        (WebCore):
        * dom/ExceptionCode.h:

2012-11-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: "Reveal in Element Panel" doesn't work if Elements panel hasn't been opened
        https://bugs.webkit.org/show_bug.cgi?id=102219

        Reviewed by Alexander Pavlov.

        Force elements module load upon context menu invocation.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired.focusElement):
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):

2012-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134523.
        http://trac.webkit.org/changeset/134523
        https://bugs.webkit.org/show_bug.cgi?id=102218

        brake chrome windows build, as it references a non existing
        header js/DOMRequestState.h (Requested by jochen__ on
        #webkit).

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::setValueReady):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::stop):
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):
        * WebCore.gypi:
        * bindings/v8/DOMRequestState.h: Removed.
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValue):
        (WebCore::idbKeyToScriptValue):
        * bindings/v8/IDBBindingUtilities.h:
        (WebCore):

2012-11-14  Anton Obzhirov  <a.obzhirov@samsung.com>

        Add platform implementation of remote web inspector server for GTK port.
        https://bugs.webkit.org/show_bug.cgi?id=88094 

        Reviewed by Gustavo Noronha Silva.

        Extra SocketStreamHandle constructor is added to accept existing GSocketConnection.
        Needed to pass remote inspector server socket connection. The change is tested with 
        inspector server API tests.

        * platform/network/soup/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::create):
        (SocketStreamHandle):
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore):
        (WebCore::SocketStreamHandle::connected):
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::platformClose):

2012-11-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: context menu on ObjectPropertyTreeElement's values is masked by the section.
        https://bugs.webkit.org/show_bug.cgi?id=102212

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.enableContextMenu):

2012-11-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI add instrumentation for WebAudo related stuff.
        They use about 16Mb for shared data on pages with webaudio.
        As example Angry Birds app.
        https://bugs.webkit.org/show_bug.cgi?id=101729

        Reviewed by Yury Semikhatsky.

        Plain vanilla instrumentation for audio and webaudio classes.
        AudioContext is a kind of ActiveDOMObject. I found that these objects
        are accessible through ScriptExecutuionContext and ScriptExecutionContext
        is an ancestor of Document. Document class was instrumented earler.
        I instrumented ActiveDOMObject, ScriptExecutionContext and other ancestors
        and now AudioContext and other ActiveDOMObjects are reacheable from Document.

        Test: inspector-protocol/nmi-webaudio.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::reportMemoryUsage):
        (WebCore):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::reportMemoryUsage):
        (WebCore):
        * Modules/webaudio/AudioNode.h:
        (AudioNode):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::reportMemoryUsage):
        (WebCore):
        * dom/ActiveDOMObject.h:
        (ActiveDOMObject):
        * dom/Document.cpp:
        (WebCore::Document::reportMemoryUsage):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportMemoryUsage):
        (WebCore):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::reportMemoryUsage):
        (WebCore):
        * dom/SecurityContext.h:
        (SecurityContext):
        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryTypes):
        * platform/audio/AudioArray.h:
        (AudioArray):
        (WebCore::AudioArray::reportMemoryUsage):
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::reportMemoryUsage):
        (WebCore):
        * platform/audio/FFTFrame.h:
        (FFTFrame):
        * platform/audio/HRTFDatabase.cpp:
        (WebCore::HRTFDatabase::reportMemoryUsage):
        (WebCore):
        * platform/audio/HRTFDatabase.h:
        (HRTFDatabase):
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::reportMemoryUsage):
        (WebCore):
        * platform/audio/HRTFDatabaseLoader.h:
        (HRTFDatabaseLoader):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::reportMemoryUsage):
        (WebCore):
        * platform/audio/HRTFElevation.h:
        (HRTFElevation):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::reportMemoryUsage):
        (WebCore):
        * platform/audio/HRTFKernel.h:
        (HRTFKernel):

2012-11-14  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Settings screen: close button overlays view title on mac.
        https://bugs.webkit.org/show_bug.cgi?id=102198

        Reviewed by Pavel Feldman.

        Added margin-left for mac. Adjusted title height and vertical positioning.

        * inspector/front-end/helpScreen.css:
        (.help-window-caption): Adjusted title height.
        (.help-window-title): Adjusted title vertical positioning. 
        (body.platform-mac .help-window-main .help-window-title): Fixed margin.

2012-11-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: use last selection as complementary signal when applying DOM changes to the text model.
        https://bugs.webkit.org/show_bug.cgi?id=101905

        Reviewed by Vsevolod Vlasov.

        Currently we use heuristics for detecting damaged model range upon DOM mutation.
        This change adds signals from the last selection and keyboard events in order to
        further improve the heuristics quality.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor):
        (WebInspector.DefaultTextEditor.EditInfo):
        (WebInspector.DefaultTextEditor.prototype._handleTextInput):
        (WebInspector.DefaultTextEditor.prototype._handleKeyDown):
        (WebInspector.DefaultTextEditor.prototype.lastSelection):
        (WebInspector.DefaultTextEditor.prototype.wasShown):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._guessEditRangeBasedOnSelection):
        (WebInspector.TextEditorMainPanel.prototype._guessEditRangeBasedOnDiff):
        (WebInspector.TextEditorMainPanel.prototype._closingBlockOffset):
        (WebInspector.TextEditorMainPanel.prototype._handleSelectionChange):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextRange.prototype.compareTo):
        (WebInspector.TextRange.prototype.shift):
        (WebInspector.TextEditorModel.endsWithBracketRegex.):

2012-11-14  Dan Carney  <dcarney@google.com>

        [V8] use toV8Fast in all relevant Node getters
        https://bugs.webkit.org/show_bug.cgi?id=100851

        Reviewed by Kentaro Hara.

        The toV8Fast function for Node objects is now called in all getters
        instead of toV8.

        No new tests. Test coverage extensive.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (IsDOMNodeType):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::toV8Fast):

2012-11-14  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Clean up use of adjustWindowRect
        https://bugs.webkit.org/show_bug.cgi?id=102072

        Reviewed by Gyuyoung Kim.

        Tested by fast/dom/Window/open-window-min-size.html

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

            Validate the window size here so that it is not just done for
            .open, but also for .showModalDialog. This is compatible with
            other browsers such as IE and Firefox (though IE > 6, enforces
            a minimum width of 250 instead of 100 as Firefox and us.)

        * page/DOMWindow.cpp:
        (WebCore):
        (WebCore::DOMWindow::adjustWindowRect):

            Make it a static method which only takes page. It was never
            called from anywhere without a valid page, so the page check
            has been turned into an assert, and two of the arguments have
            been removed as they can be accessed via the page.

        (WebCore::DOMWindow::moveBy):
        (WebCore::DOMWindow::moveTo):
        (WebCore::DOMWindow::resizeBy):
        (WebCore::DOMWindow::resizeTo):

            Update use of adjustWindowRect.

        (WebCore::DOMWindow::open):

            Avoid modifying the WindowFeatures as the WebCore::createWindow
            validates and adjusts the arguments.

        * page/DOMWindow.h:
        (DOMWindow):

2012-11-14  Takashi Sakamoto  <tasak@google.com>

        Crash when replacing parts of text inputs with content: url(...)
        https://bugs.webkit.org/show_bug.cgi?id=101133

        Reviewed by Kent Tamura.

        Disable directly setting content of elements in an input element's
        shadow dom tree, because the setting breaks input element's behavior.

        Tests: fast/forms/number/number-content-url-crash.html
               fast/forms/search/search-content-url-crash.html

        * css/html.css:
        (input::-webkit-textfield-decoration-container):
        Use important to disable overriding an input element's content
        property.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::attach):
        Added ASSERTION. No content should be applied to
        input::-webkit-textfield-decoration-container.

2012-11-14  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests results.

        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::constructor1Callback):
        (WebCore::V8TestOverloadedConstructors::constructor2Callback):
        (WebCore::V8TestOverloadedConstructors::constructor3Callback):
        (WebCore::V8TestOverloadedConstructors::constructor4Callback):
        (WebCore::V8TestOverloadedConstructors::wrapSlow):

2012-11-14  Anton Muhin  <antonm@chromium.org>

        Provide return types for custom WebGLRenderingContext methods
        https://bugs.webkit.org/show_bug.cgi?id=100777

        Reviewed by Kenneth Russell.

        No new tests as doesn't change generated code.

        * html/canvas/WebGLRenderingContext.idl:

2012-11-14  Kent Tamura  <tkent@chromium.org>

        Support for localization tests of calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=102181

        Reviewed by Kentaro Hara.

        Introduce DateTimeChooserParameters::locale to inform locale to
        DateTimeChooser implementations. However we pass defaultLanguage
        unless tests calls internals.settings.
        setLangAttributeAwareFormControlUIEnabled(true) explicitly.

        Test: platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        Set DateTimeChooserParameters::locale up.
        * platform/DateTimeChooser.h:
        (DateTimeChooserParameters): Add 'locale' member.

2012-11-14  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: highlight is not updating as one edits CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=102191

        Reviewed by Alexander Pavlov.

        We should update highlight upon layout / style recalculation.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didRecalculateStyleImpl):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::didPaint):
        (WebCore::InspectorPageAgent::didLayout):
        (WebCore::InspectorPageAgent::didScroll):
        (WebCore):
        (WebCore::InspectorPageAgent::didRecalculateStyle):
        * inspector/InspectorPageAgent.h:

2012-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134566.
        http://trac.webkit.org/changeset/134566
        https://bugs.webkit.org/show_bug.cgi?id=102197

        "it broke Chromium Android Release build" (Requested by
        haraken on #webkit).

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        * platform/DateTimeChooser.h:
        (DateTimeChooserParameters):

2012-11-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: No content available for requests made from flash
        https://bugs.webkit.org/show_bug.cgi?id=101560

        Reviewed by Pavel Feldman.

        Network request data is now saved to inspector cache in following cases:
         - Error status code;
         - No cached resource available;
         - Cached resource has ShouldNotBufferData option set.
        Drive-by: refactored didReceiveResponse logic to be clearer.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveData):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::shouldBufferData):

2012-11-14  Shinya Kawanaka  <shinyak@chromium.org>

        Changing pseudoClass (:target) should cause distribution
        https://bugs.webkit.org/show_bug.cgi?id=101699

        Reviewed by Hajime Morita.

        When cssTarget element is changed, we might have to invalidate distribution. We check its necessity
        by consulting with SelectRuleFeatureSet.

        We also implement invalidateParentDistributionIfNecessary for all collected features in this patch.

        Test: fast/dom/shadow/pseudoclass-update-target.html

        * dom/Document.cpp:
        (WebCore::Document::setCSSTarget):
        * dom/ElementShadow.cpp:
        (WebCore::invalidateParentDistributionIfNecessary):
        (WebCore):
        * dom/ElementShadow.h:
        (WebCore):
        * html/shadow/SelectRuleFeatureSet.h:
        (WebCore::SelectRuleFeatureSet::hasSelectorFor):
        (SelectRuleFeatureSet):

2012-11-14  Kentaro Hara  <haraken@chromium.org>

        [V8] DOM wrapper objects should be collected in minor GC cycles
        https://bugs.webkit.org/show_bug.cgi?id=98725

        Reviewed by Adam Barth.

        Previously minor GC cycles cannot collect DOM Nodes. All DOM Nodes
        have to survive two minor GC cycles, be promoted to the old space
        and wait for a heavy major GC cycle.

        This patch enables V8 to collect DOM Nodes in minor GC cycles.
        For real world applications, I confirmed that minor GC cycles
        reclaims a substantial amount of memory (24 MB for Facebook,
        235 MB for Google Calendar) with acceptable overhead (~10 ms
        per minor GC cycle). No performance regression in Dromaeo
        DOM tests.

        A design document: https://docs.google.com/a/google.com/document/d/16DeHrzkm3cO9XCPT1aK3Y5qgUxXB3RFmueqQWYmN2rI/edit
        Performance results: https://docs.google.com/a/google.com/document/d/1h0-EsHu7T0sSMuZm5eE0r1e8sCAzY3weLvsDUpOSngE/edit
        A slide: https://docs.google.com/a/google.com/presentation/d/1uifwVYGNYTZDoGLyCb7sXa7g49mWNMW2gaWvMN5NLk8/edit#slide=id.p

        * bindings/v8/IntrusiveDOMWrapperMap.h:
        (WebCore::IntrusiveDOMWrapperMap::set):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::initializeV8IfNeeded):
        * bindings/v8/V8GCController.cpp:
        (WebCore):
        (WebCore::gcTree):
        (WebCore::V8GCController::newWrapperBorn):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::majorGCPrologue):
        (WebCore::V8GCController::gcEpilogue):
        (WebCore::V8GCController::minorGCEpilogue):
        (WebCore::V8GCController::majorGCEpilogue):
        * bindings/v8/V8GCController.h:
        (WebCore):
        (V8GCController):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initIsolate):
        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/Node.h:
        (WebCore::Node::inEden):
        (WebCore::Node::setEden):
        (Node):

2012-11-14  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace setDOMWrapper() + setJSWrapperForDOMObject() with createDOMWrapper()
        https://bugs.webkit.org/show_bug.cgi?id=101917

        Reviewed by Adam Barth.

        setJSWrapperForDOMObject() is always coupled with setDOMWrapper().
        We can replace setDOMWrapper() + setJSWrapperForDOMObject() with
        createDOMWrapper(). (c.f. CREATE_DOM_WRAPPER() in JSC)

        No tests. No change in behavior.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorCallback):
        (GenerateEventConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateToV8Converters):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::createDOMWrapper):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initializeIfNeeded):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::wrapArrayBufferView):
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCallback):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallback):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8IntentConstructor.cpp:
        (WebCore::V8Intent::constructorCallback):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::V8MessageChannel::constructorCallback):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallback):
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        (WebCore::V8WebKitPoint::constructorCallback):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):

2012-11-14  Kent Tamura  <tkent@chromium.org>

        Support for localization tests of calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=102181

        Reviewed by Kentaro Hara.

        Introduce DateTimeChooserParameters::locale to inform locale to
        DateTimeChooser implementations. However we pass defaultLanguage
        unless tests calls internals.settings.
        setLangAttributeAwareFormControlUIEnabled(true) explicitly.

        Test: platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        Set DateTimeChooserParameters::locale up.
        * platform/DateTimeChooser.h:
        (DateTimeChooserParameters): Add 'locale' member.

2012-11-14  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Show total memory in the NMI snapshot header
        https://bugs.webkit.org/show_bug.cgi?id=101922

        Reviewed by Pavel Feldman.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked.didReceiveMemorySnapshot):
        (WebInspector.NativeMemoryProfileType.prototype.buttonClicked):

2012-11-14  Jan Keromnes  <janx@linux.com>

        Web Inspector: CodeMirrorTextEditor fails to scroll breakpoint into view after the first time
        https://bugs.webkit.org/show_bug.cgi?id=102142

        Reviewed by Pavel Feldman.

        Calling revealLine in highlightLine like in DefaultTextEditor does the trick.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor.prototype.highlightLine):

2012-11-13  Kent Tamura  <tkent@chromium.org>

        Use menulist-button instead of menulist for date/time input types
        https://bugs.webkit.org/show_bug.cgi?id=101886

        Reviewed by Hajime Morita.

        Both of Chromium-Android and iOS use -webkit-appearance:menulist-button,
        not menulist. We had better apply common one by default.

        No new tests. Covered by fast/forms/*/*-appearance-*.html.

        * css/html.css:
        (input[type="date"]): Switch menulist-button from menulist.
        (input[type="datetime"]): Ditto.
        (input[type="datetime-local"]): Ditto.
        (input[type="month"]): Ditto.
        (input[type="time"]): Ditto.
        (input[type="week"]): Ditto.
        (input::-webkit-date-and-time-value):
        Add top, right, bottom margins. The right margin is important when
        dir=rtl is specified.
        whitespace:pre is needed to align baseline in a case of empty values.
        * css/themeChromiumAndroid.css:
        Remove redundant style declaration.
        * css/themeWin.css:
        Remove padding adjustment for date/time input types. It is for
        textfields.

2012-11-13  Vincent Scheib  <scheib@chromium.org>

        Remove RuntimeEnabledFeatures::isPointerLockEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=102107

        Reviewed by Adam Barth.

        The runtime flag is always true now that the feature is enabled by default in Chromium.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/MouseEvent.idl:

2012-11-13  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: JsDoc-annotate KeyboardShortcuts
        https://bugs.webkit.org/show_bug.cgi?id=101301

        Reviewed by Pavel Feldman.

        JsDoc-annotate KeyboardShortcuts to improve readability.

        * inspector/front-end/AdvancedSearchController.js: Fix parameter type.
        * inspector/front-end/KeyboardShortcut.js: Add annotations.
        * inspector/front-end/Panel.js: Make event parameter typed.
        * inspector/front-end/inspector.js: Ditto.

2012-11-13  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Extract common interface for StatusBarButton and StatusBarCombo
        https://bugs.webkit.org/show_bug.cgi?id=101907

        Reviewed by Pavel Feldman.

        Status bar control element should have common interface for
        easier management.
        In this patch getter/setter for StatusBarButton "disabled" are replaced
        with regular functions "enabled"/"setEnabled"; added "setEnabled"
        to StatusBarCombo; added new base class StatusBarItem with
        method "setEnabled" and member "element".

        * inspector/front-end/CPUProfileView.js: Adopted refactoring.
        * inspector/front-end/DockController.js: Ditto.
        * inspector/front-end/ScriptsPanel.js: Ditto.
        * inspector/front-end/TimelinePanel.js: Ditto.
        * inspector/front-end/inspector.js: Ditto.
        * inspector/front-end/StatusBarButton.js:
        (WebInspector.StatusBarItem): Added.
        (WebInspector.StatusBarButton): Replaced getter/setter with
        regular functions.
        (WebInspector.StatusBarComboBox.prototype.setEnabled): Added.

2012-11-13  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Console: update tab/shift-tab shortcut description.
        https://bugs.webkit.org/show_bug.cgi?id=102175

        Reviewed by Pavel Feldman.

        For "Tab / Shift-Tab" it said "Next/previous suggestion".
        Actually, shift-tab to do nothing, and tab auto-completes common prefix.

        * English.lproj/localizedStrings.js: Replaced string.
        * inspector/front-end/ConsoleView.js: Updated shortcut registration.

2012-11-13  Dana Jansens  <danakj@chromium.org>

        [chromium] Pass showDebugBorders directly to WebLayerTreeSettings, don't use the GraphicsLayer border width setting.
        https://bugs.webkit.org/show_bug.cgi?id=102130

        Reviewed by James Robinson.

        The current method of setting debug borders on GraphicsLayers requires
        every GraphicsLayerClient to set the value on the layer(s) it
        represents. This skips the NonCompositedContentHost as well as any
        other clients other than RenderLayerBacking - including layers from the
        inspector.

        Instead, pass the debug border setting directly to the
        WebLayerTreeSettings where the compositor can use the flag to enable
        borders on all layers globally.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::updateMasksToBounds):
        (WebCore::GraphicsLayerChromium::updateLayerIsDrawable):
        (WebCore::GraphicsLayerChromium::setupContentsLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (GraphicsLayerChromium):

2012-11-13  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Enable calendar picker for input types datetime/datetime-local
        https://bugs.webkit.org/show_bug.cgi?id=101889

        Reviewed by Kent Tamura.

        This adds calendar picker to <input type=datetime> and <input type=datetime-local>.
        When a user choose a date from calendar picker, year/month/day fields of the input
        element are updated and hour/minute/second fields are unchanged.

        Tests: platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime-local.html
               platform/chromium/fast/forms/calendar-picker/calendar-picker-datetime.html

        * Resources/pagepopups/calendarPicker.js: Day.parse accepts datetime string (just drops time part).
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::pickerIndicatorChooseValue):
        If the given value is not valid for the element, try to parse it as a date string.
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::formatDateTimeFieldsState): DateTimeFieldsState::month() returns 1-12, not 0-11.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::formatDateTimeFieldsState): Ditto.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::setOnlyYearMonthDay): Added.
        (WebCore):
        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement):
        * rendering/RenderThemeChromiumCommon.cpp:
        (WebCore::RenderThemeChromiumCommon::supportsCalendarPicker): Return true for datetime and datetimelocal too.

2012-11-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134524.
        http://trac.webkit.org/changeset/134524
        https://bugs.webkit.org/show_bug.cgi?id=102177

        "Chromiium build broken" (Requested by haraken on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * rendering/RenderThemeChromiumFontProvider.cpp: Removed.
        * rendering/RenderThemeChromiumFontProvider.h: Removed.
        * rendering/RenderThemeChromiumFontProviderLinux.cpp: Removed.
        * rendering/RenderThemeChromiumFontProviderWin.cpp: Removed.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::defaultGUIFont):
        (WebCore::RenderThemeChromiumSkia::systemFont):
        (WebCore::RenderThemeChromiumSkia::setDefaultFontSize):
        * rendering/RenderThemeChromiumSkia.h:
        (RenderThemeChromiumSkia):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):
        (WebCore::getNonClientMetrics):
        (WebCore::systemFontSize):
        (WebCore::pointsToPixels):
        (WebCore::RenderThemeChromiumWin::systemFont):
        (WebCore::RenderThemeChromiumWin::setDefaultFontSize):
        * rendering/RenderThemeChromiumWin.h:
        (RenderThemeChromiumWin):

2012-11-13  KyungTae Kim  <ktf.kim@samsung.com>

        Fix compile warning [-Wsign-compare]
        https://bugs.webkit.org/show_bug.cgi?id=101458

        Reviewed by Alexey Proskuryakov.

        Currently, lossy check has been done by comparing file size(posix signed integral value) with conversioned(standard c++ unsigned integral value).
        However, it leads -Wsign-compare compile warning.
        Therefore, this patch assigns the file size to the biggest possible unsigned variable, then does the lossy check.

        * platform/posix/SharedBufferPOSIX.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2012-11-13  Keishi Hattori  <keishi@webkit.org>

        Enable datalist UI for input types week and month
        https://bugs.webkit.org/show_bug.cgi?id=102041

        Reviewed by Kent Tamura.

        Enabling datalist UI for input types week and month.

        No new tests. Tests will be added later in Bug 102039 and Bug 102040.

        * rendering/RenderThemeChromiumCommon.cpp:
        (WebCore::RenderThemeChromiumCommon::supportsDataListUI): Add month and week to the list.

2012-11-13  Eberhard Graether  <egraether@google.com>

        checkbox to toggle FPS counter in the inspector's settings
        https://bugs.webkit.org/show_bug.cgi?id=99660

        Reviewed by Pavel Feldman.

        Added a checkbox to the inspector's settings to toggle a FPS counter. The checkbox appears when InspectorClient::canShowFPSCounter() returns true.

        No new tests.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::canShowFPSCounter):
        (WebCore::InspectorClient::setShowFPSCounter):
        (InspectorClient):
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::canShowFPSCounter):
        (WebCore):
        (WebCore::InspectorPageAgent::setShowFPSCounter):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):
        (WebInspector.GenericSettingsTab.prototype.get _showFPSCounterChanged):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2012-11-13  Shinya Kawanaka  <shinyak@chromium.org>

        Collect necessary features for SelectRuleFeatureSet
        https://bugs.webkit.org/show_bug.cgi?id=102160

        Reviewed by Dimitri Glazkov.

        When pseudo class is changed, we might have to invalidate distribution. To determine whether we should invalidate
        distribution, we would like to collect RuleFeature from select attributes.

        According to ShadowDOM spec, we have to collect the following pseudo classes: checked, enabled, disabled,
        indeterminate, link, target, and visited. We collect them in this patch.

        Test: fast/dom/shadow/shadow-select-attribute-featureset.html

        * html/shadow/SelectRuleFeatureSet.cpp:
        (WebCore::SelectRuleFeatureSet::SelectRuleFeatureSet): Uses int as bitset so that we can use bit operator.
        (WebCore::SelectRuleFeatureSet::add):
        (WebCore::SelectRuleFeatureSet::clear):
        (WebCore::SelectRuleFeatureSet::collectFeaturesFromSelector): Collects necessary features from CSSSelector.
        * html/shadow/SelectRuleFeatureSet.h:
        (WebCore::SelectRuleFeatureSet::hasSelectorForChecked):
        (WebCore::SelectRuleFeatureSet::hasSelectorForEnabled):
        (WebCore::SelectRuleFeatureSet::hasSelectorForDisabled):
        (WebCore::SelectRuleFeatureSet::hasSelectorForIndeterminate):
        (WebCore::SelectRuleFeatureSet::hasSelectorForLink):
        (WebCore::SelectRuleFeatureSet::hasSelectorForTarget):
        (WebCore::SelectRuleFeatureSet::hasSelectorForVisited):
        (SelectRuleFeatureSet):
        (WebCore::SelectRuleFeatureSet::setSelectRuleFeature):
        (WebCore::SelectRuleFeatureSet::hasSelectorFor):
        * testing/Internals.cpp:
        (WebCore::Internals::hasSelectorForPseudoClassInShadow):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-11-13  Andreas Kling  <kling@webkit.org>

        Move inline style logic from ElementAttributeData to StyledElement.
        <http://webkit.org/b/102120>

        Reviewed by Antti Koivisto.

        Move all the logic dealing with element inline style from ElementAttributeData to StyledElement.
        No difference in behavior, just making ElementAttributeData dumber.

        * css/StylePropertySet.cpp:
        * css/StylePropertySet.h:
        (WebCore::StylePropertySet::hasCSSOMWrapper):
        (WebCore::StylePropertySet::cssStyleDeclaration):

            Added as complements to ensureCSSStyleDeclaration() for the case where we don't want
            to instantiate a CSSOM wrapper unnecessarily.

        * dom/StyledElement.h:
        (WebCore::StyledElement::inlineStyle):
        * dom/ElementAttributeData.cpp:
        (WebCore::ImmutableElementAttributeData::ImmutableElementAttributeData):
        (WebCore::MutableElementAttributeData::MutableElementAttributeData):
        (WebCore::ElementAttributeData::reportMemoryUsage):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::inlineStyle):
        (ElementAttributeData):

            Renamed m_inlineStyleDecl to m_inlineStyle. Finally.

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

            Detach the CSSOM wrapper from the inline style if there is one.

        (WebCore::StyledElement::ensureMutableInlineStyle):
        (WebCore::StyledElement::style):

            Renamed ensureInlineStyle() to ensureMutableInlineStyle() since that's what it
            actually does. Update call sites accordingly.

        (WebCore::StyledElement::inlineStyleCSSOMWrapper):

            Added helper to get the CSSOM wrapper for the element's inline style if there is one.

        (WebCore::StyledElement::styleAttributeChanged):

            Do the work to parse/update/replace the inline style attribute here instead of
            in an ElementAttributeData method.

        (WebCore::StyledElement::setInlineStyleProperty):
        (WebCore::StyledElement::removeInlineStyleProperty):
        (WebCore::StyledElement::removeAllInlineStyleProperties):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::currentColor):

            s/ensureInlineStyle/ensureMutableInlineStyle/

2012-11-13  Li Yin  <li.yin@intel.com>

        fast/forms/file/input-file-write-files.html should cover correct setting value
        https://bugs.webkit.org/show_bug.cgi?id=100085

        Reviewed by Kentaro Hara.

        Fix the GObject and Objective C bindings comparibility issue. Preserving existing
        behavior for those may be important in idl.

        No new tests, because fast/forms/file/input-file-value.html has covered it.

        * html/HTMLInputElement.idl:

2012-11-13  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL] Fix build warning in NetworkStateNotifierEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102061

        Reviewed by Gyuyoung Kim.

        The second argument for NLMSG_OK needs to be unsigned to avoid the -Wsign-compare warning.

        * platform/network/efl/NetworkStateNotifierEfl.cpp:
        (WebCore::readSocketCallback):

2012-11-13  Sami Kyostila  <skyostil@chromium.org>

        Don't mark scrolling contents as dirty if RenderLayerBacking is going away
        https://bugs.webkit.org/show_bug.cgi?id=101947

        Reviewed by Simon Fraser.

        When a scrolling contents graphics layer is created or destroyed, the
        associated graphics layer is marked as needing display because some of
        the painted content may have migrated between the primary graphics layer
        and the scrolling layer.

        This causes a problem when the RenderLayerBacking is being destroyed,
        because setNeedsDisplay() needs to check from the compositor whether to
        track repaints or not. If the RenderLayerBacking is being destroyed, the
        value returned by compositor() is garbage and this causes a crash.

        This patch fixes the problem by making RenderLayer::compositor() return a null
        pointer when the renderer no longer has a view.

        Covered by existing layout tests in compositing/overflow/.

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

2012-11-13  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: InvalidCharacterError
        https://bugs.webkit.org/show_bug.cgi?id=102128

        Reviewed by Darin Adler.

        Patch 5 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-13  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Run multiple tasks per transaction tick
        https://bugs.webkit.org/show_bug.cgi?id=97738

        Reviewed by Tony Chang.

        Process multiple tasks from the pending queue(s) when the timer fires. The
        task may initiate new tasks that change which queue is active (e.g. indexing
        operations) so the loop must re-check each tick which queue to use.

        In DumpRenderTree, time to make 20k puts/20k gets dropped from 3.2s to 2.0s (-37%);
        in Chromium's content_shell, the time dropped from 8.1s to 4.6s (-42%).

        No new tests - just perf improvements, covered by (nearly) all existing IDB tests.

        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort): Use takeFirst() to clean up code.
        (WebCore::IDBTransactionBackendImpl::taskTimerFired): Process as many tasks as are available.

2012-11-13  Elliott Sprehn  <esprehn@chromium.org>

        Disable frame loading instead of throwing exceptions on subtree modifications in ChildFrameDisconnector
        https://bugs.webkit.org/show_bug.cgi?id=102012

        Reviewed by Ojan Vafai.

        Previously if you modified the subtree that was being removed from a
        removeChild from inside an unload handler on an <iframe> inside the
        subtree you'd get an exception which is wrong. Instead we just need to
        disable all frame loading there.

        This works because either the subtree will be removed and the frame never
        loading doesn't matter, or some section of the subtree that contains the
        frame will be moved to another part of the document which will cause the
        frame to load when it's inserted there.

        I also added a check for <object> elements. It doesn't seem this is actually
        reachable in the existing code, but I'm not entirely sure since the frame
        loading and object/plugin handling is very confusing.

        A better fix could be to repeatedly walk the subtree until all frames
        were disconnected or some iteration limit was hit and then force all leftover
        subframes to disconnect without firing unload handlers but this is such an
        edge case I don't think the complexity is necessary.

        Test: fast/frames/modifications-in-subtree-unload.html

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::ChildFrameDisconnector):
        (WebCore::ChildFrameDisconnector::~ChildFrameDisconnector):
        (ChildFrameDisconnector):
        (WebCore::ChildFrameDisconnector::disconnect):
        * dom/Node.cpp:
        (WebCore::checkAcceptChild): Removed exception.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::didNotifySubtreeInsertions): Check canLoadFrame().
        * html/HTMLFrameOwnerElement.h:
        (SubframeLoadingDisabler):
        (WebCore::SubframeLoadingDisabler::SubframeLoadingDisabler):
        (WebCore::SubframeLoadingDisabler::~SubframeLoadingDisabler):
        (WebCore::SubframeLoadingDisabler::canLoadFrame):
          Returns true if frames can be loaded in the subtree.
        (WebCore::SubframeLoadingDisabler::disabledSubtreeRoots):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
          Check canLoadFrame(). I think this case is impossible, but it's better
          to be safe than sorry later.

2012-11-13  Joshua Bell  <jsbell@chromium.org>

        [V8] Add missing ENABLE(SVG) test in header
        https://bugs.webkit.org/show_bug.cgi?id=102143

        Reviewed by Kentaro Hara.

        Need to wrap the #include of a header that's only conditionally generated.

        Fixes build error if compiling e.g. w/ GYP_DEFINES="enable_svg=0"

        * bindings/v8/custom/V8ElementCustom.cpp:

2012-11-13  Jon Lee  <jonlee@apple.com>

        Automatically run small plugins
        https://bugs.webkit.org/show_bug.cgi?id=102148
        <rdar://problem/12695560>

        Reviewed by Darin Adler.

        * rendering/RenderEmbeddedObject.h: Promote layout() to protected.
        * rendering/RenderSnapshottedPlugIn.cpp: Add constants for threshold size for plugins that will auto-start.
        (WebCore::RenderSnapshottedPlugIn::layout): After layout, obtain the width and height of the element.
        If either dimension is 0, or the overall size of the plugin is smaller that the threshold size, move the
        display state to Playing. Assuming we will always layout before first paint, changing the state here
        should be safe.
        * rendering/RenderSnapshottedPlugIn.h:

2012-11-13  Kenneth Russell  <kbr@google.com>

        Notify embedder of lost contexts and allow overriding of WebGL support
        https://bugs.webkit.org/show_bug.cgi?id=101826

        Reviewed by Adam Barth.

        Add hooks notifying the embedder when OpenGL contexts are lost and
        allowing overriding of WebGL support on a per-frame basis.

        No tests yet; don't know how to test this solely within WebKit.
        Currently developing tests in the Chromium port exercising the
        notifications end-to-end. Once those are in place, I'm prepared to
        investigate adding tests for all ports.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::create):
          Check whether embedder vetoes creation of new WebGL contexts.
        (WebCore::WebGLRenderingContext::loseContextImpl):
          Notify embedder that context was lost.
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
          Check whether embedder vetoes restoration of existing WebGL contexts.
        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):
        (WebCore::FrameLoaderClient::allowWebGL):
        (WebCore::FrameLoaderClient::didLoseWebGLContext):
          Hooks notifying embedder of lost contexts and asking permission to run WebGL.

2012-11-13  Scott Violet  <sky@chromium.org>

        [Chromium] Refactor theme font lookup into a factory
        https://bugs.webkit.org/show_bug.cgi?id=101949

        Reviewed by Tony Chang.

        This will ultimately allow us to use what is currently in RenderThemeChromiumLinux on windows.

        No new tests. Refactoring only.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * rendering/RenderThemeChromiumFontProvider.cpp: Added.
        (WebCore):
        (WebCore::RenderThemeChromiumFontProvider::defaultGUIFont): Moved into RenderThemeFontProvider.
        * rendering/RenderThemeChromiumFontProvider.h: Added.
        (WTF):
        (WebCore):
        (RenderThemeChromiumFontProvider): This is the font related methods.
        * rendering/RenderThemeChromiumFontProviderLinux.cpp: Added.
        (WebCore):
        (WebCore::RenderThemeChromiumFontProvider::setDefaultFontSize): What was in RenderThemeChromiumSkia::setDefaultFontSize.
        (WebCore::RenderThemeChromiumFontProvider::systemFont): What was in RenderThemeChromiumSkia::systemFont.
        * rendering/RenderThemeChromiumFontProviderWin.cpp: Added.
        (WebCore):
        (WebCore::pointsToPixels): Moved from RenderThemeChromiumWin.
        (WebCore::getNonClientMetrics): Moved from RenderThemeChromiumWin.
        (WebCore::systemFontSize): Moved from RenderThemeChromiumWin.
        (WebCore::RenderThemeChromiumFontProvider::systemFont): Moved from RenderThemeChromiumWin.
        (WebCore::RenderThemeChromiumFontProvider::setDefaultFontSize): Moved from RenderThemeChromiumWin.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::RenderThemeChromiumSkia): Moved into RenderThemeFontProvider.
        (WebCore::RenderThemeChromiumSkia::systemFont): Calls to RenderThemeChromiumFontProvider.
        (WebCore::RenderThemeChromiumSkia::setDefaultFontSize): Calls to RenderThemeChromiumFontProvider.
        * rendering/RenderThemeChromiumSkia.h:
        (RenderThemeChromiumSkia): Moves defaultFontSize into RenderThemeChromiumFontProvider.
        * rendering/RenderThemeChromiumWin.cpp: Moves font code into RenderThemeFontProviderWin.
        (WebCore):
        * rendering/RenderThemeChromiumWin.h: Removed overriden methods now handled by RenderThemeChromiumSkia.
        (RenderThemeChromiumWin):

2012-11-13  Alec Flett  <alecflett@chromium.org>

        Add DOMRequestState to maintain world/ScriptExecutionContext state
        https://bugs.webkit.org/show_bug.cgi?id=102102

        Reviewed by Adam Barth.

        Introduce DOMRequestState, and convert IndexedDB over.

        No new tests, this is an abstraction layer for existing code.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):
        * WebCore.gypi:
        * bindings/v8/DOMRequestState.h: Added.
        (WebCore):
        (DOMRequestState):
        (WebCore::DOMRequestState::DOMRequestState):
        (Scope):
        (WebCore::DOMRequestState::Scope::Scope):
        (WebCore::DOMRequestState::scope):

2012-11-13  Robert Sesek  <rsesek@chromium.org>

        Sever Chromium's dependence on WebKitSystemInterface media control drawing functions in RenderThemeMac
        https://bugs.webkit.org/show_bug.cgi?id=101634

        Reviewed by Adam Barth.

        This splits out the common methods between RenderThemeMac and RenderThemeChromiumMac
        into RenderThemeMacShared.

        No new tests, just refactoring.

        * WebCore.gyp/WebCore.gyp: Remove RenderThemeMac.mm from platform/ sources list, since it's part of rendering/
        * WebCore.gypi: Add RenderThemeMacShared.{h,mm}
        * WebCore.xcodeproj/project.pbxproj: Add RenderThemeMacShared.{h,mm}
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingLeft):
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingRight):
        (WebCore::RenderThemeChromiumMac::extraDefaultStyleSheet):
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        * rendering/RenderThemeMac.mm:
        (WebCore):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeMac::create):
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::~RenderThemeMac):
        (WebCore::RenderThemeMac::documentViewFor):
        (WebCore::mediaControllerTheme):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaRewindButton):
        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton):
        (WebCore::RenderThemeMac::paintMediaFullScreenVolumeSliderTrack):
        (WebCore::RenderThemeMac::paintMediaFullScreenVolumeSliderThumb):
        (WebCore::RenderThemeMac::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeMac::extraFullScreenStyleSheet):
        * rendering/RenderThemeMacShared.h: Copied from Source/WebCore/rendering/RenderThemeMac.h.
        (WebCore):
        (RenderThemeMacShared):
        (WebCore::RenderThemeMacShared::supportsControlTints):
        (WebCore::RenderThemeMacShared::scrollbarControlSizeForPart):
        (WebCore::RenderThemeMacShared::supportsSelectionForegroundColors):
        (WebCore::RenderThemeMacShared::supportsClosedCaptioning):
        (WebCore::RenderThemeMacShared::updateActiveState):
        * rendering/RenderThemeMacShared.mm: Copied from Source/WebCore/rendering/RenderThemeMac.mm.
        (-[WebCoreRenderThemeNotificationObserver initWithTheme:WebCore::]):
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]):
        (-[WebCoreTextFieldCell _coreUIDrawOptionsWithFrame:inView:includeFocus:]):
        (WebCore):
        (WebCore::RenderThemeMacShared::RenderThemeMacShared):
        (WebCore::RenderThemeMacShared::~RenderThemeMacShared):
        (WebCore::RenderThemeMacShared::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeMacShared::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeMacShared::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeMacShared::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeMacShared::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeMacShared::platformFocusRingColor):
        (WebCore::RenderThemeMacShared::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::toFontWeight):
        (WebCore::RenderThemeMacShared::systemFont):
        (WebCore::convertNSColorToColor):
        (WebCore::menuBackgroundColor):
        (WebCore::RenderThemeMacShared::platformColorsDidChange):
        (WebCore::RenderThemeMacShared::systemColor):
        (WebCore::RenderThemeMacShared::usesTestModeFocusRingColor):
        (WebCore::RenderThemeMacShared::isControlStyled):
        (WebCore::RenderThemeMacShared::adjustRepaintRect):
        (WebCore::RenderThemeMacShared::inflateRect):
        (WebCore::RenderThemeMacShared::convertToPaintingRect):
        (WebCore::RenderThemeMacShared::updateCheckedState):
        (WebCore::RenderThemeMacShared::updateEnabledState):
        (WebCore::RenderThemeMacShared::updateFocusedState):
        (WebCore::RenderThemeMacShared::updatePressedState):
        (WebCore::RenderThemeMacShared::controlSupportsTints):
        (WebCore::RenderThemeMacShared::controlSizeForFont):
        (WebCore::RenderThemeMacShared::setControlSize):
        (WebCore::RenderThemeMacShared::sizeForFont):
        (WebCore::RenderThemeMacShared::sizeForSystemFont):
        (WebCore::RenderThemeMacShared::setSizeFromFont):
        (WebCore::RenderThemeMacShared::setFontFromControlSize):
        (WebCore::RenderThemeMacShared::controlSizeForSystemFont):
        (WebCore::RenderThemeMacShared::paintTextField):
        (WebCore::RenderThemeMacShared::adjustTextFieldStyle):
        (WebCore::RenderThemeMacShared::paintCapsLockIndicator):
        (WebCore::RenderThemeMacShared::paintTextArea):
        (WebCore::RenderThemeMacShared::adjustTextAreaStyle):
        (WebCore::RenderThemeMacShared::popupButtonMargins):
        (WebCore::RenderThemeMacShared::popupButtonSizes):
        (WebCore::RenderThemeMacShared::popupButtonPadding):
        (WebCore::RenderThemeMacShared::paintMenuList):
        (WebCore::RenderThemeMacShared::meterSizeForBounds):
        (WebCore::RenderThemeMacShared::paintMeter):
        (WebCore::RenderThemeMacShared::supportsMeter):
        (WebCore::RenderThemeMacShared::levelIndicatorStyleFor):
        (WebCore::RenderThemeMacShared::levelIndicatorFor):
        (WebCore::RenderThemeMacShared::progressBarSizes):
        (WebCore::RenderThemeMacShared::progressBarMargins):
        (WebCore::RenderThemeMacShared::minimumProgressBarHeight):
        (WebCore::RenderThemeMacShared::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeMacShared::animationDurationForProgressBar):
        (WebCore::RenderThemeMacShared::adjustProgressBarStyle):
        (WebCore::RenderThemeMacShared::paintProgressBar):
        (WebCore::TopGradientInterpolate):
        (WebCore::BottomGradientInterpolate):
        (WebCore::MainGradientInterpolate):
        (WebCore::TrackGradientInterpolate):
        (WebCore::RenderThemeMacShared::paintMenuListButtonGradients):
        (WebCore::RenderThemeMacShared::paintMenuListButton):
        (WebCore::menuListButtonSizes):
        (WebCore::RenderThemeMacShared::adjustMenuListStyle):
        (WebCore::RenderThemeMacShared::popupInternalPaddingLeft):
        (WebCore::RenderThemeMacShared::popupInternalPaddingRight):
        (WebCore::RenderThemeMacShared::popupInternalPaddingTop):
        (WebCore::RenderThemeMacShared::popupInternalPaddingBottom):
        (WebCore::RenderThemeMacShared::adjustMenuListButtonStyle):
        (WebCore::RenderThemeMacShared::setPopupButtonCellState):
        (WebCore::RenderThemeMacShared::menuListSizes):
        (WebCore::RenderThemeMacShared::minimumMenuListSize):
        (WebCore::RenderThemeMacShared::adjustSliderTrackStyle):
        (WebCore::RenderThemeMacShared::paintSliderTrack):
        (WebCore::RenderThemeMacShared::adjustSliderThumbStyle):
        (WebCore::RenderThemeMacShared::paintSliderThumb):
        (WebCore::RenderThemeMacShared::paintSearchField):
        (WebCore::RenderThemeMacShared::setSearchCellState):
        (WebCore::RenderThemeMacShared::searchFieldSizes):
        (WebCore::RenderThemeMacShared::setSearchFieldSize):
        (WebCore::RenderThemeMacShared::adjustSearchFieldStyle):
        (WebCore::RenderThemeMacShared::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMacShared::cancelButtonSizes):
        (WebCore::RenderThemeMacShared::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMacShared::resultsButtonSizes):
        (WebCore::RenderThemeMacShared::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeMacShared::paintSearchFieldDecoration):
        (WebCore::RenderThemeMacShared::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeMacShared::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMacShared::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeMacShared::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMacShared::sliderTickSize):
        (WebCore::RenderThemeMacShared::sliderTickOffsetFromTrackCenter):
        (WebCore::RenderThemeMacShared::adjustSliderThumbSize):
        (WebCore::RenderThemeMacShared::shouldShowPlaceholderWhenFocused):
        (WebCore::RenderThemeMacShared::popupButton):
        (WebCore::RenderThemeMacShared::search):
        (WebCore::RenderThemeMacShared::searchMenuTemplate):
        (WebCore::RenderThemeMacShared::sliderThumbHorizontal):
        (WebCore::RenderThemeMacShared::sliderThumbVertical):
        (WebCore::RenderThemeMacShared::textField):
        (WebCore::RenderThemeMacShared::fileListNameForWidth):
        (WebCore::RenderThemeMacShared::paintPlugInSnapshotOverlay):

2012-11-13  Tab Atkins  <tabatkins@google.com>

        CSS @charset parsing is too loose, doesn't match other browsers
        https://bugs.webkit.org/show_bug.cgi?id=101527

        Reviewed by Alexey Proskuryakov.

        Per <https://www.w3.org/Bugs/Public/show_bug.cgi?id=19882#attach_1244>,
        IE and FF have changed to be strict about @charset parsing,
        as the CSS 2.1 spec requires.
        Since @charset use is very uncommon anyway,
        we should match the new behavior and the spec for platform consistency.

        Test: fast/encoding/css-charset-evil/css-charset-evil.html

        * loader/TextResourceDecoder.cpp:
        (WebCore::bytesEqual):
        (WebCore::TextResourceDecoder::checkForCSSCharset):

2012-11-13  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] send() and close() should not throw an exception for an unpaired surrogate but use the replacement character
        https://bugs.webkit.org/show_bug.cgi?id=101569

        Reviewed by Alexey Proskuryakov.

        Replace unpaired surrogates with replacing character (U+FFFD) when
        encoding text messages and close reasons. This change is aimed at
        following the changes on the WebSocket API specification.

        Test: http/tests/websocket/tests/hybi/close-reason-too-long.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::close):
        Use String::StrictConversionReplacingUnpairedSurrogatesWithFFFD mode to encode
        text message. Remove invalid utf-8 check.
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):
        Use String::StrictConversionReplacingUnpairedSurrogatesWithFFFD mode to encode
        close reason. Remove invalid utf-8 check.

2012-11-13  Christophe Dumez  <christophe.dumez@intel.com>

        Make HTMLLegendElement.form behave according to specification
        https://bugs.webkit.org/show_bug.cgi?id=101044

        Reviewed by Kent Tamura.

        According to the HTML5 specification (http://dev.w3.org/html5/spec/single-page.html#dom-legend-form),
        The form IDL attribute's behavior depends on whether the legend element is in a fieldset element or
        not. If the legend has a fieldset element as its parent, then the form IDL attribute must return the
        same value as the form IDL attribute on that fieldset element. Otherwise, it must return null.

        This patch makes WebKit behaves according to specification (and Firefox). Previously, legend.form was
        not returning null if the element was not inside a fieldset. Also, legend.form did not necessarily
        return the same value as the parent fieldset's form attribute.

        Test: fast/forms/legend/legend-form.html

        * html/HTMLLegendElement.cpp:
        (WebCore):
        (WebCore::HTMLLegendElement::virtualForm):
        * html/HTMLLegendElement.h:
        (HTMLLegendElement):

2012-11-13  Mark Lam  <mark.lam@apple.com>

        Make an assertion in JSEventListener::jsFunction() more useful.
        https://bugs.webkit.org/show_bug.cgi?id=101985.

        Reviewed by Geoffrey Garen.

        The assertion was weakened in r134495. This strengthens it again.

        No new tests.

        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2012-11-13  Dean Jackson  <dino@apple.com>

        Support list of tracks in caption media controls
        https://bugs.webkit.org/show_bug.cgi?id=101669

        Reviewed by Eric Carlson.

        Attempt four of commit. The first two times caused build failures on Chromium. The third time
        crashed the Windows test bot. It's also been rebased since r134488.

        Add some new elements to the media control shadow DOM that display the list of available
        tracks on an audio/video element. The UI is hidden by default everywhere but on Mac,
        where it is given a very basic design. At the moment only the list of available tracks
        are displayed; The followup bug will make the UI active: https://bugs.webkit.org/show_bug.cgi?id=101670

        No new tests - this doesn't expose any testable surface.

        * css/mediaControls.css: Added default rules that hide the new elements.
        * css/mediaControlsQuickTime.css: Specific rules that give a basic rendering of the new track list.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlElement::isShowing): Tests for the visibility of a control.
        (WebCore::MediaControlClosedCaptionsContainerElement::MediaControlClosedCaptionsContainerElement):
        (WebCore::MediaControlClosedCaptionsContainerElement::create):
        (WebCore::MediaControlClosedCaptionsContainerElement::shadowPseudoId):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create): Now takes a reference to the media controls as a parameter.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId):
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement): New element for holding a list of tracks to display.
        * html/shadow/MediaControlElements.h:
        (MediaControlElement):
        (MediaControlToggleClosedCaptionsButtonElement):
        (MediaControlClosedCaptionsContainerElement):
        (MediaControlClosedCaptionsTrackListElement): Examines the media element to build a shadow DOM that lists all the tracks available.
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::MediaControlsApple):
        (WebCore::MediaControlsApple::create): New track container and list elements created.
        (WebCore::MediaControlsApple::setMediaController): Hook up the new elements to the controller..
        (WebCore::MediaControlsApple::hide):
        (WebCore::MediaControlsApple::makeTransparent):
        (WebCore::MediaControlsApple::reset):
        (WebCore::MediaControlsApple::reportedError):
        (WebCore::MediaControlsApple::toggleClosedCaptionTrackList): Shows or hides the popup with the list of tracks.
        (WebCore):
        * html/shadow/MediaControlsApple.h:
        (MediaControlsApple):
        * html/shadow/MediaControlsChromium.cpp:
        (WebCore::MediaControlsChromium::initializeControls): Pass in the controls as a parameter.
        * html/shadow/MediaControls.h:
        (MediaControls):
        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale): New function to return a human-readable name for a locale, given the identifier input.
        * platform/Language.h:
        (WebCore):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): New enum values into switch.
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart): New enum values into switch.

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134377.
        http://trac.webkit.org/changeset/134377
        https://bugs.webkit.org/show_bug.cgi?id=101133

        Caused a mysterious Android Clang build failure, needs
        investigation before landing again.

        * css/html.css:
        (input::-webkit-textfield-decoration-container):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::attach):

2012-11-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134482.
        http://trac.webkit.org/changeset/134482
        https://bugs.webkit.org/show_bug.cgi?id=102140

        The patch causes fast/regions/moved-content-node-crash.html to
        crash in Debug mode due to ASSERTION. (Requested by abucur on
        #webkit).

        * rendering/InlineFlowBox.cpp:
        (SameSizeAsInlineFlowBox):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (InlineFlowBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineWidthForPaginatedLineChanged):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::linkToEndLineIfNeeded):
        (WebCore::RenderBlock::determineStartPosition):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        * rendering/RootInlineBox.h:
        (WebCore):
        (WebCore::RootInlineBox::paginationStrut):
        (WebCore::RootInlineBox::setPaginationStrut):
        (WebCore::RootInlineBox::isFirstAfterPageBreak):
        (WebCore::RootInlineBox::setIsFirstAfterPageBreak):
        (WebCore::RootInlineBox::paginatedLineWidth):
        (WebCore::RootInlineBox::setPaginatedLineWidth):
        (RootInlineBox):

2012-11-13  Xianzhu Wang  <wangxianzhu@chromium.org>

        Missing NodeRenderStyle.h include in WebCore/html/TextFieldInputType.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102108

        Reviewed by Adam Barth.

        No new tests. Fix clang build break.

        * html/TextFieldInputType.cpp: Added #include "NodeRenderStyle.h"

2012-11-13  Chris Fleizach  <cfleizach@apple.com>

        AX: MathML types need to be semantically identified in AX tree
        https://bugs.webkit.org/show_bug.cgi?id=101263

        Reviewed by Beth Dakin.

        Semantically identify various MathML elements within the AX tree. This will allow
        screen readers to identify math types so that equations can be output more accurately.

        Test: platform/mac/accessibility/mathml-elements.html

        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        (WebCore::AccessibilityObject::isMathElement):
        (WebCore::AccessibilityObject::isMathFraction):
        (WebCore::AccessibilityObject::isMathFenced):
        (WebCore::AccessibilityObject::isMathSubscriptSuperscript):
        (WebCore::AccessibilityObject::isMathRow):
        (WebCore::AccessibilityObject::isMathUnderOver):
        (WebCore::AccessibilityObject::isMathRoot):
        (WebCore::AccessibilityObject::isMathSquareRoot):
        (WebCore::AccessibilityObject::isMathText):
        (WebCore::AccessibilityObject::isMathNumber):
        (WebCore::AccessibilityObject::isMathOperator):
        (WebCore::AccessibilityObject::isMathFenceOperator):
        (WebCore::AccessibilityObject::isMathSeparatorOperator):
        (WebCore::AccessibilityObject::isMathIdentifier):
        (WebCore::AccessibilityObject::isMathTable):
        (WebCore::AccessibilityObject::isMathTableRow):
        (WebCore::AccessibilityObject::isMathTableCell):
        (WebCore::AccessibilityObject::mathRadicandObject):
        (WebCore::AccessibilityObject::mathRootIndexObject):
        (WebCore::AccessibilityObject::mathUnderObject):
        (WebCore::AccessibilityObject::mathOverObject):
        (WebCore::AccessibilityObject::mathNumeratorObject):
        (WebCore::AccessibilityObject::mathDenominatorObject):
        (WebCore::AccessibilityObject::mathBaseObject):
        (WebCore::AccessibilityObject::mathSubscriptObject):
        (WebCore::AccessibilityObject::mathSuperscriptObject):
        (WebCore::AccessibilityObject::mathFencedOpenString):
        (WebCore::AccessibilityObject::mathFencedCloseString):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::startOfContinuations):
            Handle a case where a MathML render element is created with the node of their parent (which could lead to an assert).
        (WebCore::AccessibilityRenderObject::textUnderElement):
            Handle the cases for RenderMathMLOperators which use the node of their parent, which confuses the normal textUnderElement() routine.
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
            Handle ignored cases for math elements
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::isMathElement):
        (WebCore::AccessibilityRenderObject::isMathFraction):
        (WebCore::AccessibilityRenderObject::isMathFenced):
        (WebCore::AccessibilityRenderObject::isMathSubscriptSuperscript):
        (WebCore::AccessibilityRenderObject::isMathRow):
        (WebCore::AccessibilityRenderObject::isMathUnderOver):
        (WebCore::AccessibilityRenderObject::isMathSquareRoot):
        (WebCore::AccessibilityRenderObject::isMathRoot):
        (WebCore::AccessibilityRenderObject::isMathOperator):
        (WebCore::AccessibilityRenderObject::isMathFenceOperator):
        (WebCore::AccessibilityRenderObject::isMathSeparatorOperator):
        (WebCore::AccessibilityRenderObject::isMathText):
        (WebCore::AccessibilityRenderObject::isMathNumber):
        (WebCore::AccessibilityRenderObject::isMathIdentifier):
        (WebCore::AccessibilityRenderObject::isMathTable):
        (WebCore::AccessibilityRenderObject::isMathTableRow):
        (WebCore::AccessibilityRenderObject::isMathTableCell):
        (WebCore::AccessibilityRenderObject::isIgnoredElementWithinMathTree):
            Make sure anonymouse blocks are ignored within math tree; make sure non-element type objects are ignored (like <mstyle>).
        (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):
        (WebCore::AccessibilityRenderObject::mathFencedOpenString):
        (WebCore::AccessibilityRenderObject::mathFencedCloseString):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLBlock::isRenderMathMLFenced):
        (WebCore::RenderMathMLBlock::isRenderMathMLFraction):
        (WebCore::RenderMathMLBlock::isRenderMathMLRoot):
        (WebCore::RenderMathMLBlock::isRenderMathMLSquareRoot):
        (WebCore::RenderMathMLBlock::isRenderMathMLSubSup):
        (WebCore::RenderMathMLBlock::isRenderMathMLUnderOver):
        (WebCore::RenderMathMLBlock::setIgnoreInAccessibilityTree):
        (WebCore::RenderMathMLBlock::ignoreInAccessibilityTree):
            Add ability to identify anonymous render blocks as items that AX should ignore.
        (RenderMathMLBlock):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::createMathMLOperator):
            Identify which kind of math operator is being created on the fly (Fence or Separator)
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:
        (WebCore::RenderMathMLFenced::isRenderMathMLFenced):
        (RenderMathMLFenced):
        * rendering/mathml/RenderMathMLFraction.h:
        (WebCore::RenderMathMLFraction::isRenderMathMLFraction):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::createGlyph):
             Mark anonymous render blocks as AX ignored.
        * rendering/mathml/RenderMathMLOperator.h:
        (WebCore::RenderMathMLOperator::setOperatorType):
        (WebCore::RenderMathMLOperator::operatorType):
        (RenderMathMLOperator):
        * rendering/mathml/RenderMathMLRoot.h:
        (WebCore::RenderMathMLRoot::isRenderMathMLRoot):
        * rendering/mathml/RenderMathMLSquareRoot.h:
        (WebCore::RenderMathMLSquareRoot::isRenderMathMLSquareRoot):
        * rendering/mathml/RenderMathMLSubSup.h:
        (WebCore::RenderMathMLSubSup::isRenderMathMLSubSup):
        * rendering/mathml/RenderMathMLUnderOver.h:
        (WebCore::RenderMathMLUnderOver::isRenderMathMLUnderOver):
        
2012-11-13  Mark Lam  <mark.lam@apple.com>

        JSEventListener should not access m_jsFunction when its wrapper is gone.
        https://bugs.webkit.org/show_bug.cgi?id=101985.

        Reviewed by Geoffrey Garen.

        Added a few null checks for m_wrapper before we do anything with m_jsFunction.

        No new tests.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::initializeJSFunction):
        - Removed a now invalid assertion. m_wrapper is expected to have a
          valid non-zero value when jsFunction is valid. However, in the case
          of JSLazyEventListener (which extends JSEventListener), m_wrapper is
          initially 0 when m_jsFunction has not been realized yet. When
          JSLazyEventListener::initializeJSFunction() realizes m_jsFunction,
          it will set m_wrapper to an appropriate wrapper object.

          For this reason, JSEventListener::jsFunction() cannot do the null
          check on m_wrapper until after the call to initializeJSFunction.

          This, in turns, means that in the case of the non-lazy
          JSEventListener, initializeJSFunction() will also be called, and
          if the GC has collected the m_wrapper but the JSEventListener has
          not been removed yet, it is possible to see a null m_wrapper while
          m_jsFunction contains a non-zero stale value.

          Hence, this assertion of (m_wrapper || !m_jsFunction) in
          JSEventListener::initializeJSFunction() is not always true and
          should be removed.

        (WebCore::JSEventListener::visitJSFunction):
        (WebCore::JSEventListener::operator==):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2012-11-13  Adam Barth  <abarth@webkit.org>

        [V8] instantiateV8Object should encapulate the tricky creationContext logic
        https://bugs.webkit.org/show_bug.cgi?id=102117

        Reviewed by Eric Seidel.

        The logic around creationContext is tricky. Rather than putting the
        logic in the code generator, we can centralize the logic in
        instantiateV8Object.

        This patch shouldn't have any behavior change.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateToV8Converters):
        * bindings/v8/V8DOMWrapper.cpp:
        (V8WrapperInstantiationScope):
        (WebCore::V8WrapperInstantiationScope::V8WrapperInstantiationScope):
        (WebCore::V8WrapperInstantiationScope::~V8WrapperInstantiationScope):
        (WebCore::V8WrapperInstantiationScope::context):
        (WebCore):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):

2012-11-13  Silvia Pfeiffer  <silviapf@chromium.org>

        Clean up the inheritance tree under the MediaControls Class.
        https://bugs.webkit.org/show_bug.cgi?id=88871

        Reviewed by Eric Carlson.

        This patch removes code duplication between the Chromium and Safari
        media controls shadow DOMs.
        This is achieved by pulling common functions that are identical (or
        almost identical) between the different platforms into the base class.
        The derived classes are renamed based on their platform:
        - MediaControlRootElement                to MediaControlsApple.
        - MediaControlRootElementChromium        to MediaControlsChromium.
        - MediaControlRootElementChromiumAndroid to MediaControlsChromiumAndroid.
        MediaControls is now no longer an abstract base class, but its "create"
        function is only implemented in the port-specific header file, so it's
        on purpose incomplete in the MediaControls.cpp file.

        No new tests because this is refactoring work only.

        * CMakeLists.txt:
          Rename MediaControlRootElement.cpp to MediaControlsApple.cpp .
        * GNUmakefile.list.am:
          Rename MediaControlRootElement.[cpp,h] to MediaControlsApple.[cpp,h] .
        * Target.pri:
          Rename MediaControlRootElement.cpp to MediaControlsApple.cpp .
        * WebCore.gypi:
          Rename MediaControlRootElement[Chromium[Android]].[cpp,h] to MediaControls[Apple,Chromium[Android]].[cpp,h] .
        * WebCore.order:
          Rename MediaControlRootElement symbols to MediaControlsApple symbols.
        * WebCore.vcproj/WebCore.vcproj:
          Rename MediaControlRootElement.[cpp,h] to MediaControlsApple.[cpp,h] .
        * WebCore.xcodeproj/project.pbxproj:
          Rename MediaControlRootElement.[cpp,h] to MediaControlsApple.[cpp,h] .
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
          Remove dependency on MediaControlRootElement.h (base class MediaControls.h is still there).
          Rename updateTimeDisplay() to updateCurrentTimeDisplay().
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::MediaControls):
          Added initialization for media elements that all platform controls share.
        (WebCore):
          Removed include files that are already included in header file.
        (WebCore::MediaControls::setMediaController):
          Added controller assignment for media elements that all platform controls share.
        (WebCore::MediaControls::reset):
          Added resets for media elements that all platform controls share.
        (WebCore::MediaControls::reportedError):
          Added error handling for media elements that all platform controls share.
        (WebCore::MediaControls::loadedMetadata):
          Added default action for loadedMetadata event.
        (WebCore::MediaControls::show):
        (WebCore::MediaControls::hide):
        (WebCore::MediaControls::makeOpaque):
        (WebCore::MediaControls::makeTransparent):
        (WebCore::MediaControls::shouldHideControls):
        (WebCore::MediaControls::bufferingProgressed):
        (WebCore::MediaControls::playbackStarted):
        (WebCore::MediaControls::playbackProgressed):
        (WebCore::MediaControls::playbackStopped):
        (WebCore::MediaControls::updateCurrentTimeDisplay):
        (WebCore::MediaControls::showVolumeSlider):
        (WebCore::MediaControls::changedMute):
        (WebCore::MediaControls::changedVolume):
        (WebCore::MediaControls::changedClosedCaptionsVisibility):
        (WebCore::MediaControls::enteredFullscreen):
        (WebCore::MediaControls::exitedFullscreen):
        (WebCore::MediaControls::defaultEventHandler):
        (WebCore::MediaControls::hideFullscreenControlsTimerFired):
        (WebCore::MediaControls::startHideFullscreenControlsTimer):
        (WebCore::MediaControls::stopHideFullscreenControlsTimer):
        (WebCore::MediaControls::shadowPseudoId):
        (WebCore::MediaControls::containsRelatedTarget):
        (WebCore::MediaControls::createTextTrackDisplay):
        (WebCore::MediaControls::showTextTrackDisplay):
        (WebCore::MediaControls::hideTextTrackDisplay):
        (WebCore::MediaControls::updateTextTrackDisplay):
          Added default actions for all these media controls member functions.
        * html/shadow/MediaControls.h:
        (WebCore):
          Added include files and forward class declarations that all media controls share.
        (MediaControls):
          Make all pure virtual functions that have default implementations just virtual.
        (WebCore::MediaControls::updateStatusDisplay):
          Add an empty virtual updateStatusDisplay function which is used by media elements.
        * html/shadow/MediaControlsApple.cpp: Renamed from Source/WebCore/html/shadow/MediaControlRootElement.cpp.
          Reduced Apple-specific media control functions by relying on default implementations in the base class.
        * html/shadow/MediaControlsApple.h: Renamed from Source/WebCore/html/shadow/MediaControlRootElement.h.
          Reduced Apple-specific media control elements by relying on some elements in the base class.
        * html/shadow/MediaControlsChromium.cpp: Renamed from Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp.
          Reduced Chromium-specific media control functions by relying on default implementations in the base class.
        * html/shadow/MediaControlsChromium.h: Renamed from Source/WebCore/html/shadow/MediaControlRootElementChromium.h.
          Reduced Chromium-specific media control functions by relying on default implementations in the base class.
        * html/shadow/MediaControlsChromiumAndroid.cpp: Renamed from Source/WebCore/html/shadow/MediaControlRootElementChromiumAndroid.cpp.
          Renamed class name and base class name.
        * html/shadow/MediaControlsChromiumAndroid.h: Renamed from Source/WebCore/html/shadow/MediaControlRootElementChromiumAndroid.h.
          Renamed class name and base class name.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::timeWithoutMouseMovementBeforeHidingControls):
          Moved timeWithoutMouseMovementBeforeHidingControls variable from all classes to a theme-specific function.

2012-11-13  Benjamin Poulain  <benjamin@webkit.org>

        CSSParser::setStyleSheet() should be inline
        https://bugs.webkit.org/show_bug.cgi?id=101829

        Reviewed by Andreas Kling.

        * css/CSSParser.cpp:
        * css/CSSParser.h:
        (WebCore::CSSParser::setStyleSheet):
        CSSParser::setStyleSheet() just assign a pointer, it does not even
        change a ref-count. The function should probably be in the header.

2012-11-13  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Add Region info for RootLineBoxes and pack the pagination data
        https://bugs.webkit.org/show_bug.cgi?id=101332

        Reviewed by David Hyatt.

        Currently the pagination information for lines is spread between the RootInlineBox and InlineFlowBox classes, consuming memory even though
        the boxes were not the result of an pagination layout. To overcome this, a new struct (LineFragmentationData) is created that wraps all the data,
        including a new member, the containing Region for the line.
        The containing Region is used to detect if a line changed the Region where it resides. This will be helpful especially when implementing region
        styling for layout properties (e.g. the font-size property https://bugs.webkit.org/show_bug.cgi?id=95559 ).
        A line can change the region when it is shifted inside the containing block or if the entire block moves. This means it's better to delegate
        the task of updating the containing Region to the block.

        Tests: No new tests because there is no functional change.

        * rendering/InlineFlowBox.cpp:
        (SameSizeAsInlineFlowBox):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (InlineFlowBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineWidthForPaginatedLineChanged):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlock::linkToEndLineIfNeeded):
        (WebCore::RenderBlock::determineStartPosition):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::setContainingRegion):
        (WebCore):
        * rendering/RootInlineBox.h:
        (WebCore):
        (WebCore::RootInlineBox::paginationStrut):
        (WebCore::RootInlineBox::setPaginationStrut):
        (WebCore::RootInlineBox::isFirstAfterPageBreak):
        (WebCore::RootInlineBox::setIsFirstAfterPageBreak):
        (WebCore::RootInlineBox::paginatedLineWidth):
        (WebCore::RootInlineBox::setPaginatedLineWidth):
        (RootInlineBox):
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::ensureLineFragmentationData):
        (LineFragmentationData):
        (WebCore::RootInlineBox::LineFragmentationData::LineFragmentationData):

2012-11-13  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] QNX build fails due to signature change in gl2.h header (glShaderSource)
        https://bugs.webkit.org/show_bug.cgi?id=98038

        Reviewed by Simon Hausmann.

        Cast the function to the expected type, just like it is done on non-Qt/OpenGL2 ES platforms.

        * platform/graphics/OpenGLShims.cpp:
        (WebCore):

2012-11-13  Chris Fleizach  <cfleizach@apple.com>

        WebKit exposes ARIA rowheader role as AXUnknown when not contained in table/grid
        https://bugs.webkit.org/show_bug.cgi?id=101616

        Reviewed by Beth Dakin.

        If the rowheader role is exposed because the element is not within a table, the mac platform
        should map that to a generic group.

        Test: platform/mac/accessibility/rowheader-outside-table-role.html

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (createAccessibilityRoleMap):

2012-11-13  Stephen White  <senorblanco@chromium.org>

        [Chromium] Fix SkImageFilter DAG path to pass all css3/filters tests
        https://bugs.webkit.org/show_bug.cgi?id=101952

        Reviewed by James Robinson.

        With these changes, all of the css3/filters tests pass when the
        if-test in GraphicsLayerChromium::setFilters() is forced true (for
        now, it remains true only if there's a reference filter in the chain).

        Covered by the css3/filters tests (when the switch is thrown in
        GraphicsLayerChromium::setFilters()).

        * WebCore.gypi:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        Drop to software rendering if there's a custom filter in the chain.
        This is the same as the WebFilterOperations path is doing.
        * platform/graphics/filters/skia/DropShadowImageFilter.cpp: Added.
        * platform/graphics/filters/skia/DropShadowImageFilter.h: Added.
        New implementation of drop-shadow filter; equivalent to
        the path in cc/render_surface_filters.cc.
        * platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp:
        Fix the sepia and grayscale filters (value was inverted).

2012-11-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134442.
        http://trac.webkit.org/changeset/134442
        https://bugs.webkit.org/show_bug.cgi?id=102111

        Does not compile on apple-mac (Requested by abarth on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedImage):
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cachedImageSet):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImageValue.h:
        (WebCore):
        (CSSImageValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * css/WebKitCSSSVGDocumentValue.cpp:
        (WebCore::WebKitCSSSVGDocumentValue::load):
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::cachedShader):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::PreloadTask::preload):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        (WebCore):
        (WebCore::CachedResourceLoader::preload):
        * loader/cache/CachedResourceLoader.h:
        (WebCore):
        (CachedResourceLoader):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        * loader/cache/CachedResourceRequest.h:
        (CachedResourceRequest):
        (WebCore::CachedResourceRequest::defer):
        (WebCore::CachedResourceRequest::setDefer):
        * loader/cache/CachedResourceRequestInitiators.cpp: Removed.
        * loader/cache/CachedResourceRequestInitiators.h: Removed.
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        * platform/ThreadGlobalData.h:
        (ThreadGlobalData):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2012-11-13  Chris Fleizach  <cfleizach@apple.com>

        AX: file upload input text value is not exposed through accessibility
        https://bugs.webkit.org/show_bug.cgi?id=100583

        Reviewed by Beth Dakin.

        This is a hard problem to solve on the Mac because there are three pieces of information
             1) The type of button 2) The text on the button 3) The text for the value.
        I think the best compromise is to label this as a file upload button type in the role description, 
        and then expose the file path text as the AXTitle. 
        This will give the more relevant information and should be clear what is happening.

        Test: platform/mac/accessibility/file-upload-button-subrole.html

        * English.lproj/Localizable.strings:
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityTitle]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXFileUploadButtonText):
        * platform/LocalizedStrings.h:

2012-11-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133944.
        http://trac.webkit.org/changeset/133944
        https://bugs.webkit.org/show_bug.cgi?id=102118

        Only JS bindings support NATIVE_TYPE_ERR (Requested by arv on
        #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallback):
        (GenerateParametersCheck):
        (GenerateSingleConstructorCallback):
        (GenerateNamedConstructorCallback):
        (TypeCanFailConversion):
        * dom/Element.cpp:
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeNode):
        * dom/Element.idl:

2012-11-13  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Update run-bindings-tests results.

        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::dispatchWrapCustom):
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::V8Float64Array::toNative):
        (V8Float64Array):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::toNative):
        (V8TestActiveDOMObject):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::toNative):
        (V8TestCustomNamedGetter):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::toNative):
        (V8TestEventConstructor):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::toNative):
        (V8TestEventTarget):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::wrapSlow):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::toNative):
        (V8TestException):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::toNative):
        (V8TestInterface):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::toNative):
        (V8TestMediaQueryListListener):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::toNative):
        (V8TestNamedConstructor):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::wrapSlow):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::V8TestNode::toNative):
        (V8TestNode):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        (WebCore::toV8Fast):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::V8TestObj::toNative):
        (V8TestObj):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::wrapSlow):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h:
        (WebCore::V8TestOverloadedConstructors::toNative):
        (V8TestOverloadedConstructors):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::toNative):
        (V8TestSerializedScriptValueInterface):
        (WebCore):
        (WebCore::dispatchWrap):
        (WebCore::toV8Object):
        (WebCore::toV8):

2012-11-13  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Speculative build fix for Qt.

        * dom/make_names.pl:
        (printWrapperFactoryCppFile):

2012-11-13  Sami Kyostila  <skyostil@chromium.org>

        Allow painting outside overflow clip in accelerated scrolling layers
        https://bugs.webkit.org/show_bug.cgi?id=100524

        Reviewed by Simon Fraser.

        In preparation for avoiding repaints when scrolling child layers, make it
        possible to paint outside the overflow clip.

        Test: compositing/overflow/updating-scrolling-content.html

        * rendering/LayoutState.h:
        (LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::applyCachedClipAndScrollOffsetForRepaint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::repaintBlockSelectionGaps):

2012-11-13  Patrick Gansterer  <paroga@webkit.org>

        Port SimpleFontDataWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=97889

        Reviewed by Brent Fulgham.

        Add #if !OS(WINCE) around some parts of the code, so it can be used by the WinCE port too in a next step.
        Also cleaned up the include headers.

        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::boundsForGDIGlyph):
        (WebCore):
        (WebCore::SimpleFontData::widthForGDIGlyph):

2012-11-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: [Chromium] move spectrum.css into the standalone css files group.

        Not reviewed: moved css file in gypi.

        * WebCore.gypi:

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134434.
        http://trac.webkit.org/changeset/134434
        https://bugs.webkit.org/show_bug.cgi?id=102072

        The test that was added asserts in loader.

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * page/DOMWindow.cpp:
        (WebCore):
        (WebCore::DOMWindow::adjustWindowRect):
        (WebCore::DOMWindow::moveBy):
        (WebCore::DOMWindow::moveTo):
        (WebCore::DOMWindow::resizeBy):
        (WebCore::DOMWindow::resizeTo):
        (WebCore::DOMWindow::open):
        (WebCore::DOMWindow::showModalDialog):
        * page/DOMWindow.h:
        (DOMWindow):

2012-11-13  Dan Carney  <dcarney@google.com>

        [V8] More efficient wrapper dispatch
        https://bugs.webkit.org/show_bug.cgi?id=102082

        Reviewed by Adam Barth.

        Dispatching a call to V8Whatever::wrap involved a chain
        of calls, each of which checked its wrapper cache.
        This refactor gives calls only 2 choices of functions to call:
        toV8 and toV8Object instead of wrap. wrap has been renamed to
        dispatchWrap and no longer contains cache checks.
        Additionally, classes which require a custom toV8 function
        have had all wrapping and caching calls removed, as they could
        not have been accessed.

        No new tests. Sufficiently covered.

        * Modules/indexeddb/IDBAny.idl:
        * Modules/indexeddb/IDBKey.idl:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (GenerateImplementation):
        (GenerateToV8Converters):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::dispatchWrapCustom):
        * bindings/v8/custom/V8CSSRuleCustom.cpp:
        (WebCore::V8CSSRule::dispatchWrapCustom):
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::V8CSSValue::dispatchWrapCustom):
        * bindings/v8/custom/V8CanvasRenderingContextCustom.cpp:
        (WebCore::V8CanvasRenderingContext::dispatchWrapCustom):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore):
        (WebCore::V8DataView::dispatchWrapCustom):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::dispatchWrapCustom):
        * bindings/v8/custom/V8ElementCustom.cpp: Copied from Source/WebCore/bindings/v8/custom/V8PerformanceEntryCustom.cpp.
        (WebCore):
        (WebCore::V8Element::dispatchWrapCustom):
        * bindings/v8/custom/V8EntryCustom.cpp:
        (WebCore::V8Entry::dispatchWrapCustom):
        * bindings/v8/custom/V8EntrySyncCustom.cpp:
        (WebCore::V8EntrySync::dispatchWrapCustom):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore):
        (WebCore::V8Event::dispatchWrapCustom):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::V8HTMLCollection::dispatchWrapCustom):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::dispatchWrapCustom):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore::V8HTMLElement::dispatchWrapCustom):
        * bindings/v8/custom/V8ImageDataCustom.cpp:
        (WebCore::V8ImageData::dispatchWrapCustom):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::V8Node::dispatchWrapCustom):
        * bindings/v8/custom/V8PerformanceEntryCustom.cpp:
        (WebCore::V8PerformanceEntry::dispatchWrapCustom):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::V8SVGDocument::dispatchWrapCustom):
        * bindings/v8/custom/V8SVGElementCustom.cpp:
        (WebCore::V8SVGElement::dispatchWrapCustom):
        * bindings/v8/custom/V8SVGPathSegCustom.cpp:
        (WebCore::V8SVGPathSeg::dispatchWrapCustom):
        * bindings/v8/custom/V8StyleSheetCustom.cpp:
        (WebCore::V8StyleSheet::dispatchWrapCustom):
        * dom/Element.idl:
        * dom/make_names.pl:
        (printWrapperFunctions):
        (printWrapperFactoryCppFile):
        (printWrapperFactoryHeaderFile):
        * html/MicroDataItemValue.idl:
        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134367.
        http://trac.webkit.org/changeset/134367
        https://bugs.webkit.org/show_bug.cgi?id=100738

        Speculative rollout, could have cause Dromaeo setAttribute
        perf regression.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::checkNeedsStyleInvalidationForClassChange):
        (WebCore::Element::classAttributeChanged):

2012-11-13  Marja Hölttä  <marja@chromium.org>

        Add initiator to CachedResourceRequest.
        https://bugs.webkit.org/show_bug.cgi?id=101935

        Reviewed by Adam Barth.

        Motivation: Chromium needs to know which elements request a
        resource (such as an image or a script) (bug 92761). In addition,
        for exposing resource timing information (bug 84883) we need to
        store the initiator, and this is the first step towards it.

        No new tests: No visible change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCrossfadeValue.cpp:
        (WebCore::cachedImageForCSSValue):
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedImage):
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cachedImageSet):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImageValue.h:
        (WebCore):
        (CSSImageValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * css/WebKitCSSSVGDocumentValue.cpp:
        (WebCore::WebKitCSSSVGDocumentValue::load):
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::cachedShader):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/CSSPreloadScanner.h:
        (CSSPreloadScanner):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::PreloadTask::preload):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        (WebCore):
        (WebCore::CachedResourceLoader::preload):
        * loader/cache/CachedResourceLoader.h:
        (WebCore):
        (CachedResourceLoader):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        (WebCore):
        (WebCore::CachedResourceRequest::~CachedResourceRequest):
        (WebCore::CachedResourceRequest::setInitiator):
        (WebCore::CachedResourceRequest::initiatorName):
        (WebCore::CachedResourceRequest::initiatorDocument):
        (WebCore::CachedResourceRequest::initiatorElement):
        * loader/cache/CachedResourceRequest.h:
        (WebCore):
        (WebCore::CachedResourceRequest::setOptions):
        (WebCore::CachedResourceRequest::defer):
        (WebCore::CachedResourceRequest::setDefer):
        (CachedResourceRequest):
        * loader/cache/CachedResourceRequestInitiators.cpp: Copied from Source/WebCore/loader/cache/CachedResourceRequest.cpp.
        (WebCore):
        (WebCore::CachedResourceRequestInitiators::CachedResourceRequestInitiators):
        * loader/cache/CachedResourceRequestInitiators.h: Copied from Source/WebCore/loader/cache/CachedResourceRequest.cpp.
        (WebCore):
        (CachedResourceRequestInitiators):
        (WebCore::cachedResourceRequestInitiators):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        * platform/ThreadGlobalData.h:
        (WebCore):
        (WebCore::ThreadGlobalData::cachedResourceRequestInitiators):
        (ThreadGlobalData):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2012-11-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134345.
        http://trac.webkit.org/changeset/134345
        https://bugs.webkit.org/show_bug.cgi?id=102106

        Incomplete support for NATIVE_TYPE_ERR in objc and other
        bindings (Requested by jsbell on #webkit).

        * Modules/mediastream/MediaConstraintsImpl.cpp:
        (WebCore::MediaConstraintsImpl::create):
        * Modules/mediastream/MediaStreamTrackList.cpp:
        (WebCore::MediaStreamTrackList::add):
        (WebCore::MediaStreamTrackList::remove):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::setBinaryType):
        * Modules/mediastream/RTCIceCandidate.cpp:
        (WebCore::RTCIceCandidate::create):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::parseConfiguration):
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::addIceCandidate):
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::removeStream):
        * Modules/mediastream/RTCSessionDescription.cpp:
        (WebCore::RTCSessionDescription::create):
        (WebCore::RTCSessionDescription::setType):
        * bindings/js/CallbackFunction.cpp:
        (WebCore::checkFunctionOnlyCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::add):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::selectIndexSetter):
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverConstructor::constructJSMutationObserver):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSQLTransactionSyncCustom.cpp:
        (WebCore::JSSQLTransactionSync::executeSql):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateFunctionCallString):
        * bindings/v8/V8Callback.h:
        (WebCore::createFunctionOnlyCallback):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::addCallback):
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        (WebCore::V8MutationObserver::constructorCallback):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * dom/DOMCoreException.idl:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::insertAdjacentElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitAddKey):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::putImageData):
        (WebCore::CanvasRenderingContext2D::webkitPutImageDataHD):
        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::extend):
        * svg/properties/SVGTransformListPropertyTearOff.h:
        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):

2012-11-13  Erik Arvidsson  <arv@chromium.org>

        Update DOMException name: HierarchyRequestError
        https://bugs.webkit.org/show_bug.cgi?id=102092

        Reviewed by Ojan Vafai.

        Patch 3 of 25 to update DOMException name to match the spec and Firefox.

        Updated existing tests.

        * dom/DOMCoreException.cpp:

2012-11-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Clean up use of adjustWindowRect
        https://bugs.webkit.org/show_bug.cgi?id=102072

        Reviewed by Alexis Menard.

        Tested by fast/dom/Window/open-window-min-size.html

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

            Validate the window size here so that it is not just done for
            .open, but also for .showModalDialog. This is compatible with
            other browsers such as IE and Firefox (though IE > 6, enforces
            a minimum width of 250 instead of 100 as Firefox and us.)

        * page/DOMWindow.cpp:
        (WebCore):
        (WebCore::DOMWindow::adjustWindowRect):

            Make it a static method which only takes page. It was never
            called from anywhere without a valid page, so the page check
            has been turned into an assert, and two of the arguments have
            been removed as they can be accessed via the page.

        (WebCore::DOMWindow::moveBy):
        (WebCore::DOMWindow::moveTo):
        (WebCore::DOMWindow::resizeBy):
        (WebCore::DOMWindow::resizeTo):

            Update use of adjustWindowRect.

        (WebCore::DOMWindow::open):

            Avoid modifying the WindowFeatures as the WebCore::createWindow
            validates and adjusts the arguments.

        * page/DOMWindow.h:
        (DOMWindow):

2012-11-13  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] Update wrap-margin/padding to shape-margin/padding
        https://bugs.webkit.org/show_bug.cgi?id=97736

        Reviewed by Andreas Kling.

        Rename properties to match updated spec.

        Tests: fast/exclusions/shape-margin-parsing.html
               fast/exclusions/shape-padding-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitWrapShorthand):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        (StyleRareNonInheritedData):

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134418.
        http://trac.webkit.org/changeset/134418
        https://bugs.webkit.org/show_bug.cgi?id=101903

        The newly added test is crashing on cr-win.

        * dom/ElementShadow.cpp:
        * dom/ElementShadow.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::setIndeterminate):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::didElementStateChange):
        * html/shadow/SelectRuleFeatureSet.cpp:
        (WebCore::SelectRuleFeatureSet::add):
        (WebCore::SelectRuleFeatureSet::clear):
        (WebCore::SelectRuleFeatureSet::collectFeaturesFromSelector):
        * html/shadow/SelectRuleFeatureSet.h:
        (SelectRuleFeatureSet):

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134391.
        http://trac.webkit.org/changeset/134391
        https://bugs.webkit.org/show_bug.cgi?id=99660

        Speculative rollout, trying to fix browser_tests failure.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2012-11-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134205.
        http://trac.webkit.org/changeset/134205
        https://bugs.webkit.org/show_bug.cgi?id=102093

        Broke webkit-flow-inlines-dynamic.html on several ports
        (Requested by mihnea on #webkit).

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::isValidRegionStyleProperty):
        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        (WebCore):
        (InlineBox):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        (WebCore::RenderRegion::computeChildrenStyleInRegion):
        (WebCore::RenderRegion::setObjectStyleInRegion):
        (WebCore::RenderRegion::clearObjectStyleInRegion):
        * rendering/RenderRegion.h:
        (RenderRegion):
        (ObjectRegionStyleInfo):

2012-11-13  Andreas Kling  <kling@webkit.org>

        Remove the non-const overload of ElementAttributeData::inlineStyle().

        Rubber-stamped by Anders Koivisto.

        No call sites actually needed a mutable StylePropertySet* from inlineStyle() anyway.

        * dom/ElementAttributeData.h:

2012-11-13  Keishi Hattori  <keishi@webkit.org>

        [Chromium] Enable input type month/week
        https://bugs.webkit.org/show_bug.cgi?id=102042

        Reviewed by Kent Tamura.

        Enable input type month/week for Chromium.

        No new tests. Tests will be added later in Bug 102045 and Bug 102046.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):

2012-11-13  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Remove shadowPseudoId() and use setPseudo() in <meter> ElementShadow.
        https://bugs.webkit.org/show_bug.cgi?id=101906

        Reviewed by Dimitri Glazkov.

        We're migrating shadowPseudoId() to pseudo(). We remove shadowPseudoId() from HTMLKeygenElement and use
        setPseudo()/pseudo() instead.

        No new tests, covered by existing tests.

        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::didElementStateChange): Since shadowPseudoId() was returning pseudo id without setting
        it anywhere, we have to set it into pseudo attribute here.
        (WebCore::HTMLMeterElement::createShadowSubtree): ditto.
        * html/shadow/MeterShadowElement.cpp:
        (WebCore::MeterInnerElement::MeterInnerElement):
        (WebCore::MeterValueElement::valuePseudoId):
        * html/shadow/MeterShadowElement.h:
        (MeterInnerElement):
        (WebCore::MeterBarElement::MeterBarElement):
        (MeterBarElement):
        (WebCore::MeterValueElement::MeterValueElement):
        (WebCore::MeterValueElement::updatePseudo):
        (MeterValueElement):

2012-11-13  Shinya Kawanaka  <shinyak@chromium.org>

        Changing pseudoClass (:indeterminate) should cause distribution
        https://bugs.webkit.org/show_bug.cgi?id=101903

        Reviewed by Dimitri Glazkov.

        <progress> and <input type="checkbox"> have 'indeterminate' state. When their state is changed, we have to
        invalidate distribution if necessary. To check it, we collect a feature that :invalidate is used in select attributes.

        For <input>, we also have to see 'type' is changed. According to the spec, :indeterminate should match only
        progress element or <input type="checkbox">. So changing 'type' might also change :indeterminate state.

        Tests: fast/dom/shadow/pseudoclass-update-indeterminate-input.html
               fast/dom/shadow/pseudoclass-update-indeterminate-progress.html

        * dom/ElementShadow.cpp:
        (WebCore::invalidateParentDistributionIfNecessary): Since we will add a lot of pseudoClass check later, we would like to
        have this kind of helper method. We will add various pseudoClass check (see Bug 101697), we reuse CSSSelector::PseudoType
        here.
        (WebCore):
        * dom/ElementShadow.h:
        (WebCore):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType): Invalidate parent distribution anyway, since it changes various internal states.
        (WebCore::HTMLInputElement::setIndeterminate): Invalidate parent distribution if necessary.
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::didElementStateChange):
        * html/shadow/SelectRuleFeatureSet.cpp:
        (WebCore::SelectRuleFeatureSet::SelectRuleFeatureSet): Adds m_usesIndeterminate feature.
        (WebCore::SelectRuleFeatureSet::add):
        (WebCore::SelectRuleFeatureSet::clear):
        (WebCore::SelectRuleFeatureSet::collectFeaturesFromSelector):
        * html/shadow/SelectRuleFeatureSet.h:
        (WebCore::SelectRuleFeatureSet::hasSelectorForIndeterminate):
        (SelectRuleFeatureSet):

2012-11-13  Andreas Kling  <kling@webkit.org>

        Exploit ElementAttributeData sharing in Node.cloneNode.
        <http://webkit.org/b/101374>

        Reviewed by Anders Carlsson.

        Instead of blindly creating a new ElementAttributeData for Node.cloneNode, let's be clever!
        If the source data is immutable, simply ref it from the new node at virtually no cost.

        If the source data is mutable, convert it to immutable data so it can be shared between both nodes.
        Since the typical use-case for Node.cloneNode is to create-once/clone-many, this saves both time
        and memory in the long run.

        ~8% speed-up on PerformanceTests/DOM/CloneNodes on my MBP.

        * dom/Element.cpp:
        (WebCore::Element::cloneAttributesFromElement):

            Move attribute data cloning logic from ElementAttributeData to Element.

        * dom/ElementAttributeData.cpp:
        (WebCore::ImmutableElementAttributeData::~ImmutableElementAttributeData):
        (WebCore::ImmutableElementAttributeData::ImmutableElementAttributeData):
        (WebCore::ElementAttributeData::ElementAttributeData):
        (WebCore::MutableElementAttributeData::MutableElementAttributeData):
        (WebCore::ElementAttributeData::makeMutableCopy):
        (WebCore::ElementAttributeData::makeImmutableCopy):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):
        (ImmutableElementAttributeData):
        (MutableElementAttributeData):

            Add facilities for converting a mutable ElementAttributeData to an immutable one.
            Share some code in the common base class constructor.

2012-11-13  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Build fix of V8 bindings.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::maybeDOMWrapper):

2012-11-13  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] UI: make the Grid save scrolling position, show wait spinner icon
        https://bugs.webkit.org/show_bug.cgi?id=102071

        Reviewed by Pavel Feldman.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype.dispose):
        (WebInspector.CanvasProfileView.prototype.elementsToRestoreScrollPositionsFor):
        (WebInspector.CanvasProfileView.prototype._enableWaitIcon):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog.didReplayTraceLog):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog):
        (WebInspector.CanvasProfileView.prototype._didReceiveTraceLog):
        (WebInspector.CanvasProfileView.prototype._createCallNode):
        * inspector/front-end/canvasProfiler.css:
        (#canvas-replay-image.wait):

2012-11-13  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Settings screen: some panel shortcuts are missing
        https://bugs.webkit.org/show_bug.cgi?id=101026

        Reviewed by Pavel Feldman.

        Panels, that have not been loaded by the time shortcuts view was
        initialized, had no chance to register shortcuts.

        Solution: move shortcut registration (for shortcuts screen) to panel
        descriptors.

        More changes: add JsDoc annotations to ShortcutScreen and change "key"
        parameter type for raw string to key descriptor object.

        * WebCore.gypi: Added TimelinePanelDescriptor.js file.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * inspector/compile-front-end.py: Ditto.
        * inspector/front-end/WebKit.qrc: Ditto.
        * inspector/front-end/inspector.html: Ditto.
        * inspector/front-end/AdvancedSearchController.js: Add JsDoc annotation.
        * inspector/front-end/GoToLineDialog.js: Ditto.
        * inspector/front-end/CallStackSidebarPane.js: Removed shortcut-screen
        shortcuts registration.
        * inspector/front-end/ElementsPanel.js: Ditto.
        * inspector/front-end/ScriptsPanel.js: Ditto.
        * inspector/front-end/StylesSidebarPane.js: Ditto.
        * inspector/front-end/TimelinePanel.js: Ditto.
        * inspector/front-end/ConsoleView.js: Changes order of lines to increase
        readability.
        * inspector/front-end/ElementsPanelDescriptor.js: Add shortcut-screen
        shortcuts registration and key descriptor constants.
        * inspector/front-end/ScriptsPanelDescriptor.js: Ditto.
        * inspector/front-end/TimelinePanelDescriptor.js: Ditto.
        * inspector/front-end/Panel.js: Removed unused "uregisterShortcut"; made
        "registerShortcuts" method accept array of key descriptors.
        (WebInspector.PanelDescriptor.prototype.registerShortcuts): Added.
        * inspector/front-end/ShortcutsScreen.js: Added JsDoc; changed parameter
        type from string to key descriptor.
        * inspector/front-end/inspector.js: Register shortcuts using
        panel descriptors.
        (WebInspector._panelDescriptors): Removed duplicate line.

2012-11-13  Gabor Rapcsanyi  <rgabor@webkit.org>

        Optimize RGB565 and RGBA5551 packing/unpacking functions with NEON intrinsics
        https://bugs.webkit.org/show_bug.cgi?id=102060

        Reviewed by Zoltan Herczeg.

        Adding more NEONized packing functions to GraphicsContext3DNEON.h.
        These functions are three times faster with this intrinsics optimizations.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore):
        * platform/graphics/cpu/arm/GraphicsContext3DNEON.h:
        (WebCore::ARM::unpackOneRowOfRGBA5551ToRGBA8NEON):
        (ARM):
        (WebCore::ARM::packOneRowOfRGBA8ToUnsignedShort5551NEON):
        (WebCore::ARM::unpackOneRowOfRGB565ToRGBA8NEON):
        (WebCore::ARM::packOneRowOfRGBA8ToUnsignedShort565NEON):

2012-11-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Enable Mutation observer
        https://bugs.webkit.org/show_bug.cgi?id=102066

        Reviewed by Pavel Feldman.

        * DerivedSources.pri: Add missing IDL files.

2012-11-13  Kentaro Hara  <haraken@chromium.org>

        [V8] Make isValidDOMObject() static
        https://bugs.webkit.org/show_bug.cgi?id=101914

        Reviewed by Adam Barth.

        isValidDOMObject() is used by DOMWrapper.cpp only.

        No tests. No change in behavior.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::isValidDOMObject):
        (WebCore):
        (WebCore::V8DOMWrapper::maybeDOMWrapper):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):

2012-11-13  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect computed height for content with region-break-before
        https://bugs.webkit.org/show_bug.cgi?id=101862

        Reviewed by Julien Chaffraix.

        When processing the region breaks for auto-height regions, we skipped the case
        when the region-break-before occurred in the first region in the chain which was
        an auto-height region. Because of that, the region computed height was not 0
        as it was supposed to be, but rather LayoutUnit::max() / 2.

        Test: fast/regions/autoheight-breakbefore-wrongheight.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        Make sure we process also the case when the region-break occurs at offset 0 in the flow thread
        and the first region in chain is an auto-height region.
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::updateLogicalHeight):
        Add an assert to make sure that the computed height for auto-height regions is always less than LayoutUnit::max() / 2.

2012-11-13  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: remove reportMemoryUsage method from ImageObserver
        https://bugs.webkit.org/show_bug.cgi?id=102058

        Reviewed by Pavel Feldman.

        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage): drive-by fix, no need to report
        each element of the vector as generic vector instrumentation will take care of it.
        * platform/graphics/Image.cpp: the client is reported as weak pointer to make sure
        we don't count its by the pointer to the base class which may differ from the actual
        object address.
        (WebCore::Image::reportMemoryUsage):
        * platform/graphics/ImageObserver.h: removed reportMemoryUsage method from the interface.
        (ImageObserver):

2012-11-13  Eberhard Graether  <egraether@google.com>

        checkbox to toggle FPS counter in the inspector's settings
        https://bugs.webkit.org/show_bug.cgi?id=99660

        Reviewed by Pavel Feldman.

        Added a checkbox to the inspector's settings to toggle a FPS counter. The checkbox appears when InspectorClient::canShowFPSCounter() returns true.

        No new tests.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::canShowFPSCounter):
        (WebCore::InspectorClient::setShowFPSCounter):
        (InspectorClient):
        * inspector/InspectorPageAgent.cpp:
        (PageAgentState):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::canShowFPSCounter):
        (WebCore):
        (WebCore::InspectorPageAgent::setShowFPSCounter):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):
        (WebInspector.GenericSettingsTab.prototype.get _showFPSCounterChanged):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2012-11-12  Kent Tamura  <tkent@chromium.org>

        Unable to set valid time value to input[type=time] with user interaction in some cases
        https://bugs.webkit.org/show_bug.cgi?id=102048

        Reviewed by Kentaro Hara.

        The implementations of shouldMillisecondFieldReadOnly,
        shouldMinuteFieldReadOnly, and shouldSecondFieldReadOnly were
        incorrect. We need to check if a part of the minimum value matches to
        the corresponding part of the current value.

        Also, we had better check hour field editability.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-readonly-subfield.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldHaveSecondField):
        Fix a problem that hh:mm:00.sss didn't create a seconds field.
        * html/shadow/DateTimeEditElement.cpp:
        (DateTimeEditBuilder): Add shouldHourFieldReadOnly declaration.
        (WebCore::DateTimeEditBuilder::visitField):
        Add shouldHourFieldReadOnly check to Hour11/Hour12/Hour23/Hour24/Period fields.
        (WebCore::DateTimeEditBuilder::shouldHourFieldReadOnly):
        Added. An hour field should be read-only if the step value is a multiple
        of a day and the hour part of the minimum value matches to the hour part
        of the value.
        (WebCore::DateTimeEditBuilder::shouldMillisecondFieldReadOnly):
        A millisecond field should be read-only if the step value is a multiple
        of one second and the millisecond part of the minimum value matches to
        the millisecond part of the value.
        (WebCore::DateTimeEditBuilder::shouldMinuteFieldReadOnly):
        A minute field should be read-only if the step value is a multiple of
        one hour and the minute part of the minimum value matches to the minute
        part of the value.
        (WebCore::DateTimeEditBuilder::shouldSecondFieldReadOnly):
        A second field should be read-only if the step value is a multiple of
        one minute and the second part of the minimum value matches to the second
        part of the value.
        * platform/Decimal.cpp:
        (WebCore::Decimal::remainder):
        Fix a bug in case that the fractional part of quotient is >= 0.5. Also
        make this matches to C99, C++11, ECMAScript behavior.

2012-11-13  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: MemoryBlock name should not include full path to the block
        https://bugs.webkit.org/show_bug.cgi?id=102055

        Reviewed by Pavel Feldman.

        * inspector/InspectorMemoryAgent.cpp: pass only last path component as MemoryBlock name
        intead of fully qualified name.

2012-11-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: get rid of enter/exitTextChangeMode in the editor
        https://bugs.webkit.org/show_bug.cgi?id=101845

        Reviewed by Vsevolod Vlasov.

        They seem to do nothing.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype._textChanged):
        (WebInspector.DefaultTextEditor.prototype.editRange):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey.get var):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.endsWithBracketRegex.):

2012-11-13  Tommy Widenflycht  <tommyw@google.com>

        Remove the custom WebSocket::send for both V8 and JSC
        https://bugs.webkit.org/show_bug.cgi?id=101936

        Reviewed by Kentaro Hara.

        This patch removes the custom WebSocket::send since it isn't needed anymore.

        Patch covered by existing tests.

        * Modules/websockets/WebSocket.idl:
        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/js/JSWebSocketCustom.cpp:
        * bindings/v8/custom/V8WebSocketCustom.cpp: Removed.

2012-11-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: move indentation logic into TextEditorModel
        https://bugs.webkit.org/show_bug.cgi?id=101842

        Reviewed by Vsevolod Vlasov.

        I'd like to move as much headless logic into the TextEditorModel as possible.
        Drive by: removed some dead code, converted getter into function and moved undo
        mark state into the model as well.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.editRange):
        (WebInspector.DefaultTextEditor.prototype._syncDecorationsForLine):
        (WebInspector.TextEditorChunkedPanel.prototype._splitChunkOnALine):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey.get var):
        (WebInspector.TextEditorMainPanel.prototype.handleEnterKey):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        (WebInspector.TextEditorMainChunk):
        (WebInspector.TextEditorMainChunk.prototype.isDecorated):
        (WebInspector.TextEditorMainChunk.prototype.set expanded):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.endsWithBracketRegex.):

2012-11-13  Hayato Ito  <hayato@chromium.org>

        Unreviewed attempt to fix the chromium mac-build after r134348.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2012-11-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: migrate text editor to mutation observers
        https://bugs.webkit.org/show_bug.cgi?id=101841

        Reviewed by Vsevolod Vlasov.

        Otherwise, we miss notifications on the removed lines.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype.wasShown):
        (WebInspector.DefaultTextEditor.prototype.willHide):
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._wasShown):
        (WebInspector.TextEditorMainPanel.prototype._willHide):
        (WebInspector.TextEditorMainPanel.prototype.markAndRevealRange):
        (WebInspector.TextEditorMainPanel.prototype.beginDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype.endDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLineChunks):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._insertSpanBefore):
        (WebInspector.TextEditorMainPanel.prototype._handleMutations.else.get if):
        (WebInspector.TextEditorMainPanel.prototype._handleMutations):
        (WebInspector.TextEditorMainPanel.prototype._collectDirtyLines):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        * inspector/front-end/externs.js:
        (WebKitMutation):
        (WebKitMutationObserver.prototype.observe):
        (WebKitMutationObserver.prototype.disconnect):
        * inspector/front-end/textEditor.css:
        (.debug-fadeout):
        (@-webkit-keyframes debug-fadeout):
        (to):

2012-11-13  Gabor Rapcsanyi  <rgabor@webkit.org>

        Optimize RGBA4444ToRGBA8 packing/unpacking functions with NEON intrinsics in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=101473

        Reviewed by Zoltan Herczeg.

        With NEON intrinsics the packing/unpacking functions can be optimized well.
        This particular function is about 3 times faster with ARM NEON. On top level tests
        the speed up was 1.18x.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore):
        * platform/graphics/cpu/arm/GraphicsContext3DNEON.h: Added.
        (WebCore):
        (ARM):
        (WebCore::ARM::unpackOneRowOfRGBA4444ToRGBA8NEON):
        (WebCore::ARM::packOneRowOfRGBA8ToUnsignedShort4444NEON):

2012-11-13  Takashi Sakamoto  <tasak@google.com>

        Crash when replacing parts of text inputs with content: url(...)
        https://bugs.webkit.org/show_bug.cgi?id=101133

        Reviewed by Kent Tamura.

        Disable directly setting content of elements in an input element's
        shadow dom tree, because the setting breaks input element's behavior.

        Tests: fast/forms/number/number-content-url-crash.html
               fast/forms/search/search-content-url-crash.html

        * css/html.css:
        (input::-webkit-textfield-decoration-container):
        Use important to disable overriding an input element's content
        property.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::attach):
        Added ASSERTION. No content should be applied to
        input::-webkit-textfield-decoration-container.

2012-11-12  Huang Dongsung  <luxtella@company100.net>

        [Qt] REGRESSION(134142): overscaled tiles in pixel test results and MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=101918

        Reviewed by Noam Rosenthal.

        Remove TiledBackingStore::rect(), because it is not used anymore.

        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-11-12  Adam Barth  <abarth@webkit.org>

        [V8] We should be able to recover the V8DOMWindowShell more quickly
        https://bugs.webkit.org/show_bug.cgi?id=102020

        Reviewed by Kentaro Hara.

        For isolated worlds, we used to store the V8DOMWindowShell as an
        internal field of the inner DOM window. This patch moves the pointer to
        an internal field of the v8::Context, which saves us the work of
        looking up the inner DOM window.

        Unfortunately, we cannot store the V8DOMWindowShell in V8PerContextData
        because the V8DOMWindowShell outlives the V8PerContextData. (We destroy
        the V8PerContextData when we detach the V8DOMWindowShell from the
        frame.)

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetInternalFields):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8DOMWindowShell.h:
        (WebCore::V8DOMWindowShell::getEntered):
        * bindings/v8/V8PerContextData.h:

2012-11-12  Kentaro Hara  <haraken@chromium.org>

        [V8] Add ASSERT() to guarantee that we don't store NULL pointers to V8 internal fields
        https://bugs.webkit.org/show_bug.cgi?id=101054

        Reviewed by Adam Barth.

        I'm investigating a Chromium crash bug:
        http://code.google.com/p/chromium/issues/detail?id=155942

        I've not yet identified the root cause (because I can't reproduce
        the crash), but it looks like we are storing NULL pointers to
        V8 internal fields. Just in case, we can add an ASSERT() to
        guarantee that NULL pointers are never stored. (Also I'm hoping
        that this ASSERT() will give me more debug information.)

        No tests. No change in behavior.

        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::setDOMWrapper):

2012-11-12  Shinya Kawanaka  <shinyak@chromium.org>

        Changing id, className, or attribute should invalidate distribution
        https://bugs.webkit.org/show_bug.cgi?id=100738

        Reviewed by Dimitri Glazkov.

        When id, className, or attribute is changed, we might have to invalidate distribution.
        However, we don't want to do useless invalidation. So we consult with the RuleFeatureSet of ElementShadow,
        and invalidate distribution only if necessary.

        When className is changed, we can share a lot of code between invalidating distribution and invalidating style.
        So we made checkNeedsStyleInvalidationForClassChange a template method, and share it.

        Also we've measured how this patch makes changing attribute slow. By converting checkNeedsStyleInvalidationForClassChange
        to template, actually this improves the performance of changing attribute code. I've measured each code 3 times.

        DOM/ModifyAttribute.html
        Before this patch:
                median  stdev  min      max    [ms]
          1st   115.62   0.67  114.75   117.00
          2nd   115.08   1.13  113.25   117.58
          3rd   114.75   1.16  113.42   117.83

        After this patch:
                median  stdev  min      max    [ms]
          1st   102.55   0.95  101.25   104.50
          2nd   103.10   0.86  102.20   100.95
          3rd   103.30   1.05  102.10   106.65

        Tests: fast/dom/shadow/distribution-attribute-modified.html
               fast/dom/shadow/distribution-className-modified.html
               fast/dom/shadow/distribution-id-modified.html
               fast/dom/shadow/reprojection-attribute-modified.html
               fast/dom/shadow/reprojection-className-modified.html
               fast/dom/shadow/reprojection-id-modified.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::HasSelectorForClassStyleFunctor::HasSelectorForClassStyleFunctor):
        (HasSelectorForClassStyleFunctor):
        (WebCore::HasSelectorForClassStyleFunctor::operator()): Returns true if StyleResolver::hasSelectorForClass returns true.
        (WebCore):
        (WebCore::HasSelectorForClassDistributionFunctor::HasSelectorForClassDistributionFunctor):
        (HasSelectorForClassDistributionFunctor):
        (WebCore::HasSelectorForClassDistributionFunctor::operator()): Returns true if ElementShadow::hasSelectorForClass returns true.
        (WebCore::checkFunctorForClassChange):
        (WebCore::checkNeedsStyleInvalidationForClassChange): Extacted the implementation to checkFunctorForClassChange.
        (WebCore::checkNeedsDistributionInvalidationForClassChange):
        (WebCore::Element::classAttributeChanged):

2012-11-12  Joe Mason  <jmason@rim.com>

        [BlackBerry] NetworkJob should not check if data is received with HEAD
        https://bugs.webkit.org/show_bug.cgi?id=102034

        Reviewed by George Staikos.

        Internal PR: 241391

        Make HEAD requests call didFinish instead of didFail on a 404 response, even though they
        have no data.

        Tests: ManualTests/blackberry/head-xhr-nonexistant-file.html

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::NetworkJob):
        (WebCore::NetworkJob::initialize):
        (WebCore::NetworkJob::shouldNotifyClientFailed):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):

2012-11-12  Adam Barth  <abarth@webkit.org>

        [V8] V8DOMWrapper::instantiateV8Object shouldn't use deprecatedDocument
        https://bugs.webkit.org/show_bug.cgi?id=102015

        Reviewed by Kentaro Hara.

        Previously, Nodes had a special path through
        V8DOMWrapper::instantiateV8Object using deprecatedDocument so that we
        could find the V8PerContextData quickly. Now that we can get the
        V8PerContextData from the v8::Context quickly, we can move Nodes to the
        general case. The net consequence is that creation of all DOM objects
        should be as fast as Nodes are.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateToV8Converters):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp:
        (WebCore::V8TestOverloadedConstructors::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8Binding.h:
        (WebCore):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):

2012-11-12  KyungTae Kim  <ktf.kim@samsung.com>

        Some CSS properties are not handled on StyleResolver::applyProperty
        https://bugs.webkit.org/show_bug.cgi?id=102027

        Reviewed by Gyuyoung Kim.

        The CSSPropertyMaxZoom, CSSPropertyMinZoom, CSSPropertyOrientation and CSSPropertyUserZoom
        need to be handled on StyleResolver::applyProperty.

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

2012-11-12  Simon Fraser  <simon.fraser@apple.com>

        Avoid calling calculateLayerBounds() and convertToLayerCoords() more than once per layer paint
        https://bugs.webkit.org/show_bug.cgi?id=102031

        Reviewed by Beth Dakin.

        RenderLayer::paintLayerContents() and callees could end up calling convertToLayerCoords()
        and calculateLayerBounds() multiple times for painting a single layer.
        
        Keep track of whether we've computed the root-relative bounds and do it on demand.
        Compute the offset relative to rootLayer once, and pass it around as an optional parameter
        to functions that need it.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::boundingBox):
        (WebCore::RenderLayer::calculateLayerBounds):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):

2012-11-12  Simon Fraser  <simon.fraser@apple.com>

        Change calculateLayerBounds() from a static function to a member function
        https://bugs.webkit.org/show_bug.cgi?id=102022

        Reviewed by Beth Dakin.

        calculateLayerBounds() has grown into a substantial function after
        starting live as a little utility function, so make it a member function
        of RenderLayer, and adjust callers accordingly.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::calculateLayerBounds):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):

2012-11-12  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Add an option to switch display of "Other" memory on/off in NMI
        https://bugs.webkit.org/show_bug.cgi?id=101601

        Reviewed by Yury Semikhatsky.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NativeMemorySnapshotView.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):

2012-11-10  Dirk Schulze  <krit@webkit.org>

        BasicShapes 'circle', 'rectangle', 'ellipse' should be animatable with themselves
        https://bugs.webkit.org/show_bug.cgi?id=101854

        Reviewed by Andreas Kling.

        The basic shapes BasicShapeCircle, BasicShapeEllipse and BasicShapeRectangle should
        blend with themselves. This patch introduces simple interpolation of BasicShapes for
        the -webkit-clip-path property.

        Test: css3/masking/clip-path-animation.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Added a new function that blends between two BasicShape objects.
            It skips blending on <clipPath> references, polygons and if the shapes are not of
            the same type.
        (WebCore):
        (PropertyWrapperClipPath): Added new wrapper for ClipPathShapes.
        (WebCore::PropertyWrapperClipPath::PropertyWrapperClipPath): Ditto.
        (WebCore::CSSPropertyAnimation::ensurePropertyMap): Add -webkit-clip-path to animatable
            properties.
        * rendering/style/BasicShapes.cpp:
            The blending is done by each shape itself. This is similar to FilterOperations or
            TransformOperations.
        (WebCore::BasicShapeRectangle::blend):
        (WebCore):
        (WebCore::BasicShapeCircle::blend):
        (WebCore::BasicShapeEllipse::blend):
        (WebCore::BasicShapePolygon::blend):
        * rendering/style/BasicShapes.h:
            Added new blending functions to header.
        (BasicShape):
        (BasicShapeRectangle):
        (BasicShapeCircle):
        (BasicShapeEllipse):
        (BasicShapePolygon):

2012-11-12  Adam Barth  <abarth@webkit.org>

        [V8] We should be able to get V8PerContextData from a v8::Context more quickly
        https://bugs.webkit.org/show_bug.cgi?id=102008

        Reviewed by Ojan Vafai.

        This patch uses the new v8::Context::GetAlignedPointerFromEmbedderData
        API to get the V8PerContextData associated with a v8::Context much more
        quickly. We no longer need to use a hidden property on the inner global
        object. This patch will enable future optimizations.

        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextData::dispose):
        (WebCore::V8PerContextData::init):
        * bindings/v8/V8PerContextData.h:
        (WebCore::V8PerContextData::from):

2012-11-12  Elliott Sprehn  <esprehn@chromium.org>

        Make Frames and HTMLFrameOwnerElement less friendly
        https://bugs.webkit.org/show_bug.cgi?id=102003

        Reviewed by Ojan Vafai.

        Frame used to assign HTMLFrameOwnerElement's m_contentFrame directly
        this patch makes it go through a method to allow future hooks when frames
        are associated with owners.

        No new tests, this is just a refactor.

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::setContentFrame):
        * html/HTMLFrameOwnerElement.h:
        (HTMLFrameOwnerElement):
        (WebCore::HTMLFrameOwnerElement::clearContentFrame):
        * page/Frame.cpp:
        (WebCore::Frame::Frame): Use new methods.

2012-11-12  Beth Dakin  <bdakin@apple.com>

        Zoomed-in scrolling is very slow when deviceScaleFactor > 1
        https://bugs.webkit.org/show_bug.cgi?id=101787

        Reviewed by Simon Fraser.

        This patch adds a new member to the GraphicsContextState that tracks 
        whether or not fonts should be subpixel-quantized. We want to default 
        to sibpixel-quantizing, but we'll turn it off if we're scrolling 
        content that cannot be scrolled on the scrolling thread.

        State has a new bool shouldSubpixelQuantizeFonts. It defaults to true 
        since normally we do want to quantize.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShouldSubpixelQuantizeFonts):
        (WebCore::GraphicsContext::shouldSubpixelQuantizeFonts):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (GraphicsContextState):
        (GraphicsContext):

        wkSetCGFontRenderingMode now takes a BOOL parameter which indicates 
        whether or not it should try to subpixel-quantize the fonts.
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

        Disable subpixel-quantization for overflow areas, subframes, and 
        content that is scrolling on the main thread.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):

2012-11-12  Timothy Hatcher  <timothy@apple.com>

        Expose InspectorFrontendClientLocal::setAttachedWindow as public.

        This allows external actions to update the docked state in the frontend.

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

        Reviewed by Anders Carlsson.

        * inspector/InspectorFrontendClientLocal.h:
        Moved InspectorFrontendClientLocal::setAttachedWindow to public section.

2012-11-12  Erik Arvidsson  <arv@chromium.org>

        Replace DOMException TYPE_MISMATCH_ERR with TypeError
        https://bugs.webkit.org/show_bug.cgi?id=101604

        Reviewed by Adam Barth.

        DOMException.TYPE_MISMATCH_ERR is deprecated in favor of using TypeError.

        We have historically used TYPE_MISMATCH_ERR as a blanket DOMException code when
        the spec mandates TypeError being thrown.

        Updated existing tests.

        * Modules/mediastream/MediaConstraintsImpl.cpp:
        * Modules/mediastream/MediaStreamTrackList.cpp:
        * Modules/mediastream/PeerConnection00.cpp:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/mediastream/RTCIceCandidate.cpp:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCSessionDescription.cpp:
        * Modules/mediastream/SessionDescription.cpp:
        * bindings/js/CallbackFunction.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        * bindings/js/JSMutationObserverCustom.cpp:
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * bindings/js/JSSQLTransactionSyncCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Callback.h:
        * bindings/v8/V8Collection.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8MutationObserverCustom.cpp:
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        * dom/DOMCoreException.idl:
        * html/HTMLElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/HTMLOptionsCollection.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * page/Crypto.cpp:
        * page/DOMSelection.cpp:
        * svg/properties/SVGTransformListPropertyTearOff.h:

2012-11-12  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Use sequence<> instead of DOMString[] in IDL
        https://bugs.webkit.org/show_bug.cgi?id=100539

        Reviewed by Adam Barth.

        In the binding layer, DOMString[] is implemented as an alias for DOMStringList.
        WebIDL usage is tending towards sequence<DOMString> anyway for inputs, so switch
        to that. Note webkit.org/b/100537 which requires sequence<String> instead.

        Covered by storage/indexeddb/transaction-basics.html and objectstore-basics.html

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction): DOMStringList -> Vector<String>
        * Modules/indexeddb/IDBDatabase.h:
        (WebCore::IDBDatabase::transaction):
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabase.idl: DOMString[] -> sequence<String>
        * Modules/indexeddb/IDBObjectStore.cpp: Move trivial impls to header.
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBObjectStore.idl: DOMString[] -> sequence<String>

2012-11-12  Anders Carlsson  <andersca@apple.com>

        Remove Leopard only gradient code
        https://bugs.webkit.org/show_bug.cgi?id=102033

        Reviewed by Dan Bernstein.

        USE_CG_SHADING was only ever true on Leopard, so we can remove it now.

        * platform/graphics/Gradient.h:
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::platformGradient):
        (WebCore::Gradient::paint):

2012-11-12  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        RIM PR 237003
        Internally Reviewed by Eli Fidler.
        Since we nolonger use small font for form controls, adjust paddingDivisor
        ratio to decrease the padding value.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):

2012-11-12  Simon Fraser  <simon.fraser@apple.com>

        Fix filter dirty rect regression from r134311
        https://bugs.webkit.org/show_bug.cgi?id=102002

        Reviewed by Beth Dakin.

        When rendering with filters, the code can inflate the root-relative
        paintDirtyRect in RenderLayer::paintLayerContents(), and my cleanup
        broke this behavior.
    
        Fix by making a local copy of LayerPaintingInfo, updating its paintDirtyRect,
        and using it for the rest of the function.

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

2012-11-12  Kentaro Hara  <haraken@chromium.org>

        [V8] V8Event::valueAccessorGetter() in custom binding is not used
        https://bugs.webkit.org/show_bug.cgi?id=101893

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/custom/V8EventCustom.cpp:

2012-11-12  Roger Fong  <roger_fong@apple.com>

        Web Inspector: Fix docking behaviour on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=101978

        Reviewed by Brian Weinstein.

        There are a number of problems with docking behaviour on Windows.
        For starters, it does not ever constrain the inspector's size properly while docked.
        It also does not properly set the whether or not the inspector can be docked/undocked.
        This patch fixes both issues.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        Switch order of calling bringToFront and setDockingUnavailable.

2012-11-12  Adam Barth  <abarth@webkit.org>

        [V8] Update callers to use the aligned pointer API rather than the deprecated unaligned pointer API
        https://bugs.webkit.org/show_bug.cgi?id=101519

        Reviewed by Ojan Vafai.

        There should be no change in behavior.  The new API is slightly faster
        than the old API (and apparently works correctly internally in V8).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::V8Float64Array::toNative):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::toNative):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::toNative):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::toNative):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::toNative):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::toNative):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::toNative):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::toNative):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::toNative):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::V8TestNode::toNative):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::V8TestObj::toNative):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::toNative):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::v8ObjectToNPObject):
        (WebCore::npCreateV8ScriptObject):
        * bindings/v8/V8Collection.h:
        (WebCore::toNativeCollection):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::setIsolatedWorldField):
        (WebCore::V8DOMWindowShell::enteredIsolatedWorldContext):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::isWrapperOfType):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::setDOMWrapper):
        (WebCore::V8DOMWrapper::clearDOMWrapper):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore::toNative):
        (WebCore::toWrapperTypeInfo):

2012-11-12  Andreas Kling  <kling@webkit.org>

        Rename AttributeStyle => PresentationAttributeStyle across WebCore.
        <http://webkit.org/b/101975>

        Rubber-stamped by Antti Koivisto.

        The completely separate concepts of "attribute style" and "style attribute" were a bit too
        easy to confuse in variable and method names. Reconfigure our terminology to call it
        "presentation attribute style" instead of "attribute style".

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sweepMatchedPropertiesCache):
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::canShareStyleWithElement):
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/ElementAttributeData.cpp:
        (WebCore::MutableElementAttributeData::MutableElementAttributeData):
        (WebCore::ElementAttributeData::reportMemoryUsage):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::presentationAttributeStyle):
        (WebCore::ElementAttributeData::setPresentationAttributeStyle):
        (ElementAttributeData):
        * dom/Node.h:
        (WebCore::Node::attributeStyleDirty):
        (WebCore::Node::setPresentationAttributeStyleDirty):
        (WebCore::Node::clearPresentationAttributeStyleDirty):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        (WebCore::StyledElement::addPropertyToPresentationAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::additionalPresentationAttributeStyle):
        (StyledElement):
        (WebCore::StyledElement::collectStyleForPresentationAttribute):
        (WebCore::StyledElement::presentationAttributeStyle):
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::collectStyleForPresentationAttribute):
        * html/HTMLBRElement.h:
        (HTMLBRElement):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::collectStyleForPresentationAttribute):
        * html/HTMLBodyElement.h:
        (HTMLBodyElement):
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::collectStyleForPresentationAttribute):
        * html/HTMLDivElement.h:
        (HTMLDivElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::applyBorderAttributeToStyle):
        (WebCore::HTMLElement::mapLanguageAttributeToLocale):
        (WebCore::HTMLElement::collectStyleForPresentationAttribute):
        (WebCore::HTMLElement::applyAlignmentAttributeToStyle):
        (WebCore::HTMLElement::addHTMLLengthToStyle):
        * html/HTMLElement.h:
        (HTMLElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::collectStyleForPresentationAttribute):
        * html/HTMLEmbedElement.h:
        (HTMLEmbedElement):
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::collectStyleForPresentationAttribute):
        * html/HTMLFontElement.h:
        (HTMLFontElement):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::collectStyleForPresentationAttribute):
        * html/HTMLFrameSetElement.h:
        (HTMLFrameSetElement):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForPresentationAttribute):
        * html/HTMLHRElement.h:
        (HTMLHRElement):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::collectStyleForPresentationAttribute):
        * html/HTMLIFrameElement.h:
        (HTMLIFrameElement):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::collectStyleForPresentationAttribute):
        * html/HTMLImageElement.h:
        (HTMLImageElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::collectStyleForPresentationAttribute):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::collectStyleForPresentationAttribute):
        * html/HTMLLIElement.h:
        (HTMLLIElement):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::collectStyleForPresentationAttribute):
        * html/HTMLMarqueeElement.h:
        (HTMLMarqueeElement):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::collectStyleForPresentationAttribute):
        * html/HTMLOListElement.h:
        (HTMLOListElement):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::collectStyleForPresentationAttribute):
        * html/HTMLObjectElement.h:
        (HTMLObjectElement):
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::collectStyleForPresentationAttribute):
        * html/HTMLParagraphElement.h:
        (HTMLParagraphElement):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::collectStyleForPresentationAttribute):
        * html/HTMLPlugInElement.h:
        (HTMLPlugInElement):
        * html/HTMLPreElement.cpp:
        (WebCore::HTMLPreElement::collectStyleForPresentationAttribute):
        * html/HTMLPreElement.h:
        (HTMLPreElement):
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::collectStyleForPresentationAttribute):
        * html/HTMLTableCaptionElement.h:
        (HTMLTableCaptionElement):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::collectStyleForPresentationAttribute):
        (WebCore::HTMLTableCellElement::additionalPresentationAttributeStyle):
        * html/HTMLTableCellElement.h:
        (HTMLTableCellElement):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::collectStyleForPresentationAttribute):
        (WebCore::HTMLTableColElement::additionalPresentationAttributeStyle):
        * html/HTMLTableColElement.h:
        (HTMLTableColElement):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectStyleForPresentationAttribute):
        (WebCore::HTMLTableElement::additionalPresentationAttributeStyle):
        * html/HTMLTableElement.h:
        (HTMLTableElement):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::collectStyleForPresentationAttribute):
        * html/HTMLTablePartElement.h:
        (HTMLTablePartElement):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalPresentationAttributeStyle):
        * html/HTMLTableSectionElement.h:
        (HTMLTableSectionElement):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::collectStyleForPresentationAttribute):
        * html/HTMLTextAreaElement.h:
        (HTMLTextAreaElement):
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::collectStyleForPresentationAttribute):
        * html/HTMLUListElement.h:
        (HTMLUListElement):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::collectStyleForPresentationAttribute):
        * html/HTMLVideoElement.h:
        (HTMLVideoElement):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::collectStyleForPresentationAttribute):
        * mathml/MathMLElement.h:
        (MathMLElement):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::collectStyleForPresentationAttribute):
        * svg/SVGImageElement.h:
        (SVGImageElement):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::collectStyleForPresentationAttribute):
        * svg/SVGStyledElement.h:
        (SVGStyledElement):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::collectStyleForPresentationAttribute):
        * svg/SVGTextContentElement.h:
        (SVGTextContentElement):

2012-11-12  Adam Barth  <abarth@webkit.org>

        [V8] Many things crash when switching to V8's new aligned pointer API
        https://bugs.webkit.org/show_bug.cgi?id=101994

        Reviewed by Eric Seidel.

        When using the aligned pointer API, we need to make sure to initialize
        every internal field that we later read because the new API has better
        error checks than the old API. This patch explicitly initializes the
        enteredIsolatedWorldIndex internal field to zero for main worlds,
        fixing the LayoutTest crashes from our previous attempt to move the
        aligned pointer API.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):

2012-11-12  Simon Fraser  <simon.fraser@apple.com>

        Reduce the crazy number of parameters to RenderLayer painting member functions
        https://bugs.webkit.org/show_bug.cgi?id=101895

        Reviewed by Beth Dakin.

        The various RenderLayer::paintLayer* functions took a lot of arguments, most
        of which were passed down directly to descendants.
        
        Gather these arguments into a LayerPaintingInfo struct.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint): Create a LayerPaintingInfo struct to pass
        to descendant paint calls.
        (WebCore::RenderLayer::paintOverlayScrollbars): Ditto.
        (WebCore::RenderLayer::paintLayer): When painting transformed layers, we
        make a new LayerPaintingInfo because the root layer is shifted.
        (WebCore::RenderLayer::paintLayerContentsAndReflection):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::paintPaginatedChildLayer):
        (WebCore::RenderLayer::paintChildLayerIntoColumns): Create a new LayerPaintingInfo
        struct for column painting.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::LayerPaintingInfo::LayerPaintingInfo):
        (LayerPaintingInfo):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer): Build a LayerPaintingInfo
        to enter layer painting.
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint): Ditto.

2012-11-12  Brady Eidson  <beidson@apple.com>

        NetworkProcess: Use an accurate shouldContentSniff value when creating ResourceHandles
        https://bugs.webkit.org/show_bug.cgi?id=101872

        Reviewed by Alexey Proskuryakov.

        Expose shouldSniffContent to pass it along to the NetworkProcess.

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::shouldSniffContent):

2012-11-12  Christophe Dumez  <christophe.dumez@intel.com>

        Fix memory leak in createSurfaceForBackingStore()
        https://bugs.webkit.org/show_bug.cgi?id=101941

        Reviewed by Kenneth Rohde Christiansen.

        Fix memory leak in createSurfaceForBackingStore(),
        the RefPtr<cairo_surface_t> should be released
        when returned since we pass ownership to the
        caller.

        No new tests, no behavior change for layout tests.

        * platform/graphics/efl/CairoUtilitiesEfl.cpp:
        (WebCore::createSurfaceForBackingStore):

2012-11-12  Joe Mason  <jmason@rim.com>

        [BlackBerry] Update to new proxyInfo API
        https://bugs.webkit.org/show_bug.cgi?id=101945

        Reviewed by George Staikos.

        Internal PR: 234680
        Reviewed internally by: Leo Yang

        The proxyAddress, proxyUsername and proxyPassword methods in BlackBerry::Platform::Settings
        have been replaced with a single, more efficient proxyInfo method.

        No new tests because this is an API update with no behaviour change.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):
        (WebCore::NetworkJob::storeCredentials):

2012-11-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126157.
        http://trac.webkit.org/changeset/126157
        https://bugs.webkit.org/show_bug.cgi?id=101954

        This patch caused (untestable) regression of the volume
        property on Mac, Win, and Blackberry ports. (Requested by
        jernoble on #webkit).

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::MediaPlayer::setVolume):
        (WebCore::MediaPlayer::setMuted):
        (WebCore::MediaPlayer::setPreservesPitch):
        (WebCore::MediaPlayer::setSize):
        (WebCore::MediaPlayer::setVisible):
        (WebCore::MediaPlayer::setPreload):

2012-11-12  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Specified width CSS tables should not include border and padding as part of that width.
        https://bugs.webkit.org/show_bug.cgi?id=77028

        Reviewed by Julien Chaffraix.

        CSS table width should not include border and padding even though HTML
        tables size as though their width includes border/padding.

        This is applicable for all CSS tables with specified widths.

        The change would also make our rendering of CSS tables with specified
        width similar to that of Opera, IE and FF.

        Test: fast/table/css-table-width-with-border-padding.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        Added check for all (positive) specified widths for CSS tables to
        consider border and padding outside of the specified width.

2012-11-12  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Move resolving blob references to FormData.
        https://bugs.webkit.org/show_bug.cgi?id=101754

        Reviewed by Simon Hausmann.

        Resolving Blob-references to a set of just File and Data is done similar by several platforms.
        This patch adds a generic implementation in FormData and uses that from CFNetwork, Qt and
        BlackBerry network implementation.

        * platform/network/FormData.cpp:
        (WebCore::appendBlobResolved):
        (WebCore::FormData::resolveBlobReferences):
        * platform/network/FormData.h:
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::prepareFormElements):

2012-11-12  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurfaceGLX does not handle transparency correctly.
        https://bugs.webkit.org/show_bug.cgi?id=101943

        GraphicsSurfacGLX must consistently use RGBA texture format.
        glXCreateWindow must be called after creating the XWindow
        that serves as a temporary offscreen texture storage, in order
        to allow for transparency.
        When creating the offscreen XWindow we must make sure,
        that we use a framebuffer configuration that supports
        an alpha mask.

        Reviewed by Noam Rosenthal.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):

2012-11-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134225.
        http://trac.webkit.org/changeset/134225
        https://bugs.webkit.org/show_bug.cgi?id=101948

        Appears to have broken the EFL and GTK builds (Requested by
        abarth on #webkit).

        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore):
        (WebCore::JSHTMLElement::itemValue):
        (WebCore::JSHTMLElement::setItemValue):
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        (WebCore):
        (WebCore::V8HTMLElement::itemValueAccessorGetter):
        (WebCore::V8HTMLElement::itemValueAccessorSetter):
        * html/HTMLElement.idl:

2012-11-12  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        hitTestResultAtPoint does two hit-tests if called on non main frame
        https://bugs.webkit.org/show_bug.cgi?id=101915

        Reviewed by Antonio Gomes.

        Always redirect hitTestResultAtPoint to the main-frame. This used to being
        done on every result that hit anything, which caused running the expensive 
        hit-tests multiple times in almost all cases.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):

2012-11-12  Kentaro Hara  <haraken@chromium.org>

        [V8][JSC] ScriptProfileNode::callUID needs not to be [Custom]
        https://bugs.webkit.org/show_bug.cgi?id=101892

        Reviewed by Adam Barth.

        We can remove [Custom] from callUID in ScriptProfileNode.idl.

        No tests. No change in behavior.

        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSScriptProfileNodeCustom.cpp: Removed.
        * bindings/v8/custom/V8ScriptProfileNodeCustom.cpp:
        * inspector/ScriptProfileNode.idl:

2012-11-12  Kentaro Hara  <haraken@chromium.org>

        [V8] Performance::memory getter needs not to be [Custom]
        https://bugs.webkit.org/show_bug.cgi?id=101890

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/custom/V8PerformanceCustom.cpp: Removed.
        * page/Performance.idl:

2012-11-12  Kentaro Hara  <haraken@chromium.org>

        [V8][JSC] HTMLOptionsCollection::length needs not to be [Custom]
        https://bugs.webkit.org/show_bug.cgi?id=101888

        Reviewed by Adam Barth.

        We can remove [Custom] from getter. It is possible to remove [Custom]
        from setter, but it changes the current behavior.
        (I think the current implementation of the setter is wrong.
        I'll fix it in another patch.)

        No tests. No change in behavior.

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * html/HTMLOptionsCollection.idl:

2012-11-12  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Black screen when applications use software backend.
        https://bugs.webkit.org/show_bug.cgi?id=101659

        Reviewed by Kenneth Rohde Christiansen.

        Add a utility method to create a cairo_surface_t from a given Evas_Object_Image.

        No new tests. Will be covered when running existing tests without enabling openGL.

        * platform/graphics/efl/CairoUtilitiesEfl.cpp:
        (WebCore::createSurfaceForImage):
        (WebCore):
        * platform/graphics/efl/CairoUtilitiesEfl.h:
        (WebCore):

2012-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Remove editing from IDL_PATH since it doesn't
        contain idl files anymore.
        * GNUmakefile.list.am: Add missing header files.

2012-11-12  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Make sure that MediaConstraints only has optional and mandatory at the top level
        https://bugs.webkit.org/show_bug.cgi?id=101733

        Reviewed by Jochen Eisinger.

        This patch adds better verification to MediaConstraintsImpl.

        Existing tests expanded to cover this change.

        * Modules/mediastream/MediaConstraintsImpl.cpp:
        (WebCore::MediaConstraintsImpl::initialize):

2012-11-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134223.
        http://trac.webkit.org/changeset/134223
        https://bugs.webkit.org/show_bug.cgi?id=101939

        Breaks inspector tests (Requested by pfeldman on #webkit).

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.markAndRevealRange):
        (WebInspector.TextEditorMainPanel.prototype.beginDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype.endDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLineChunks):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._insertSpanBefore):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        * inspector/front-end/externs.js:
        * inspector/front-end/textEditor.css:

2012-11-12  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Support ResourceRequest's setTimeoutInterval
        https://bugs.webkit.org/show_bug.cgi?id=101731

        Reviewed by Simon Hausmann.

        Establish a timeout and return the correct error when it is triggered.

        Tested by existing http/tests/xmlhttprequest/timeout tests.

        * platform/network/ResourceRequestBase.cpp:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::timeout):
        (WebCore::QNetworkReplyHandler::timerEvent):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        (QNetworkReplyHandler):

2012-11-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134224.
        http://trac.webkit.org/changeset/134224
        https://bugs.webkit.org/show_bug.cgi?id=101937

        asserting on bawts (Requested by kling on #webkit).

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::setColor):
        (WebCore::RenderStyle::setVisitedLinkColor):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleBackgroundData.cpp:
        (WebCore::StyleBackgroundData::StyleBackgroundData):
        * rendering/style/StyleBackgroundData.h:
        (WebCore::StyleBackgroundData::color):
        (StyleBackgroundData):
        * rendering/style/StyleInheritedData.cpp:
        (WebCore::StyleInheritedData::StyleInheritedData):
        * rendering/style/StyleInheritedData.h:
        (StyleInheritedData):
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        * rendering/style/StyleMultiColData.h:
        (StyleMultiColData):
        * rendering/style/StyleRareInheritedData.cpp:
        (SameSizeAsStyleRareInheritedData):
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        (WebCore):
        (StyleRareInheritedData):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        (StyleRareNonInheritedData):

2012-11-12  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        RIM PR 236993
        Internally Reviewed by Jeff Rogers.
        Use slide and paint method on slider range and media controls.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):
        (WebCore::drawThreeSliceHorizontal):
        (WebCore::drawThreeSliceVertical):
        (WebCore::RenderThemeBlackBerry::paintSliderTrackRect):
        (WebCore::RenderThemeBlackBerry::paintMediaSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintMediaSliderThumb):
        (WebCore::RenderThemeBlackBerry::paintMediaVolumeSliderTrack):
        * platform/blackberry/RenderThemeBlackBerry.h:
        (RenderThemeBlackBerry):

2012-11-12  Kent Tamura  <tkent@chromium.org>

        Refactoring: set read-only values on layout in DateTimeEditElement
        https://bugs.webkit.org/show_bug.cgi?id=101916

        Reviewed by Kentaro Hara.

        We have always updated read-only values when we set an empty value or
        DateTimeFieldsState. It has wasted CPU time because such read-only
        values are never updated after layout() essentially. So, we set
        read-only values in DateTimeEditBuilder used by layout(), and remove
        dateForReadOnlyField arguments of setEmptyValue and
        setValueAsDateTimeFieldsState.

        No new tests. This should not make behavior changes.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState):
        We removed dateForReadOnlyField argument because read-only values are
        already set in DateTimeFieldElement::layout().
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField):
        Set a value to a read-only minute/second/millisecond field while
        building UI elements.
        Also, changed variable types for millisecond and second fields to
        RefPtr<DateTimeNumericFieldElement> because we'd like to call
        setValueAsDate, which is private in DateTimeMillisecondFieldElement and
        DateTimeSecondFieldElement
        (WebCore::DateTimeEditElement::setValueAsDateTimeFieldsState):
        We removed dateForReadOnlyField argument because read-only values are
        already set in DateTimeFieldElement::layout().
        (WebCore::DateTimeEditElement::setEmptyValue): Ditto.
        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement):
        Removed dateForReadOnlyField argument for setValueAsDateTimeFieldsState.

        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::defaultKeyboardEventHandler):
        We removed dateForReadOnlyField argument because read-only values are
        already set in DateTimeFieldElement::layout().
        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement): Ditto.

        * html/shadow/DateTimeFieldElements.cpp: Ditto.
        * html/shadow/DateTimeFieldElements.h: Ditto.
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::setEmptyValue):
        It should do nothing if it is read-only because a read-only value was
        already set just after construction.
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement):
        Removed dateForReadOnlyField argument of setEmptyValue.
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::setEmptyValue): Ditto.
        * html/shadow/DateTimeSymbolicFieldElement.h:
        (DateTimeSymbolicFieldElement): Ditto.

2012-11-12  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        RIM PR 236993
        Internally Reviewed by Jeff Rogers.
        Enable GL slider.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::drawThreeSlice):
        (WebCore):
        (WebCore::RenderThemeBlackBerry::paintSliderTrackRect):
        (WebCore::RenderThemeBlackBerry::paintSliderThumb):

2012-11-12  Kentaro Hara  <haraken@chromium.org>

        [V8][JSC] HTMLElement::itemValue() needs not to be custom
        https://bugs.webkit.org/show_bug.cgi?id=101882

        Reviewed by Adam Barth.

        We can remove a [Custom] IDL attribute.

        No tests. No change in behavior.

        * bindings/js/JSHTMLElementCustom.cpp:
        * bindings/v8/custom/V8HTMLElementCustom.cpp:
        * html/HTMLElement.idl:

2012-11-12  Andreas Kling  <kling@webkit.org>

        RenderStyle: Pack Color members tighter in substructures.
        <http://webkit.org/b/101860>

        Reviewed by Antti Koivisto.

        For RenderStyle substructures (StyleInheritedData, et al.), unfold all WebCore::Color
        members into RGBA32/bool variables OR just an RGBA32 if the color can never be invalid.

        Memory saved per instance:

            - StyleMultiColData:          4 bytes
            - StyleBackgroundData:        8 bytes
            - StyleInheritedData:         8 bytes
            - StyleRareInheritedData:    24 bytes
            - StyleRareNonInheritedData: 24 bytes

        323kB progression on Membuster3.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::setColor):
        (WebCore::RenderStyle::setVisitedLinkColor):
        (WebCore::RenderStyle::setVisitedLinkColumnRuleColor):
        (WebCore::RenderStyle::setBackgroundColor):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleBackgroundData.cpp:
        (WebCore::StyleBackgroundData::StyleBackgroundData):
        * rendering/style/StyleBackgroundData.h:
        (WebCore::StyleBackgroundData::color):
        (StyleBackgroundData):
        * rendering/style/StyleInheritedData.cpp:
        (WebCore::StyleInheritedData::StyleInheritedData):
        * rendering/style/StyleInheritedData.h:
        (StyleInheritedData):
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::setVisitedLinkColumnRuleColor):
        * rendering/style/StyleMultiColData.h:
        (StyleMultiColData):
        (WebCore::StyleMultiColData::visitedLinkColumnRuleColor):
        * rendering/style/StyleRareInheritedData.cpp:
        (SameSizeAsStyleRareInheritedData):
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        (WebCore::StyleRareInheritedData::setTextStrokeColor):
        (WebCore::StyleRareInheritedData::setTextFillColor):
        (WebCore::StyleRareInheritedData::setTextEmphasisColor):
        (WebCore::StyleRareInheritedData::setVisitedLinkTextStrokeColor):
        (WebCore::StyleRareInheritedData::setVisitedLinkTextFillColor):
        (WebCore::StyleRareInheritedData::setVisitedLinkTextEmphasisColor):
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::textStrokeColor):
        (WebCore::StyleRareInheritedData::textFillColor):
        (WebCore::StyleRareInheritedData::textEmphasisColor):
        (WebCore::StyleRareInheritedData::visitedLinkTextStrokeColor):
        (WebCore::StyleRareInheritedData::visitedLinkTextFillColor):
        (WebCore::StyleRareInheritedData::visitedLinkTextEmphasisColor):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::setVisitedLinkBorderLeftColor):
        (WebCore::StyleRareNonInheritedData::setVisitedLinkBorderRightColor):
        (WebCore::StyleRareNonInheritedData::setVisitedLinkBorderTopColor):
        (WebCore::StyleRareNonInheritedData::setVisitedLinkBorderBottomColor):
        (WebCore::StyleRareNonInheritedData::setVisitedLinkOutlineColor):
        (WebCore::StyleRareNonInheritedData::setVisitedLinkBackgroundColor):
        * rendering/style/StyleRareNonInheritedData.h:
        (WebCore::StyleRareNonInheritedData::visitedLinkBackgroundColor):
        (WebCore::StyleRareNonInheritedData::visitedLinkOutlineColor):
        (WebCore::StyleRareNonInheritedData::visitedLinkBorderLeftColor):
        (WebCore::StyleRareNonInheritedData::visitedLinkBorderRightColor):
        (WebCore::StyleRareNonInheritedData::visitedLinkBorderTopColor):
        (WebCore::StyleRareNonInheritedData::visitedLinkBorderBottomColor):
        (StyleRareNonInheritedData):

2012-11-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: migrate text editor to mutation observers
        https://bugs.webkit.org/show_bug.cgi?id=101841

        Reviewed by Vsevolod Vlasov.

        Otherwise, we miss notifications on the removed lines.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.beginDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype.endDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._handleMutations):
        (WebInspector.TextEditorMainPanel.prototype._handleMutation):
        * inspector/front-end/externs.js:
        (WebKitMutation):
        (WebKitMutationObserver.prototype.observe):
        (WebKitMutationObserver.prototype.disconnect):

2012-11-12  Allan Sandfeld Jensen  <sandfeld@kde.org>

        [Qt] Flash-plugin starts with wrong width
        https://bugs.webkit.org/show_bug.cgi?id=101836

        Reviewed by Simon Hausmann.

        Defer the setWindow call, so that the one time it is called it will have its final size.

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

2012-11-12  Tommy Widenflycht  <tommyw@google.com>

        Remove the V8 custom code for WebSockets constructor
        https://bugs.webkit.org/show_bug.cgi?id=100801

        Reviewed by Kentaro Hara.

        This patch does the following:

        1) Modifies the V8 code generator to support overloaded constructors,
           the JS generator is fixed to work as before. Proper support for JS will come later.

        2) Modifies WebSocket.h/.cpp for the new constructors.

        Tested by running WebSockets layout tests.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::create):
        (WebCore):
        * Modules/websockets/WebSocket.h:
        (WebSocket):
        * Modules/websockets/WebSocket.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateOverloadedConstructorCallback):
        (GenerateSingleConstructorCallback):
        (GenerateConstructorCallback):
        (GenerateImplementation):
        * bindings/scripts/IDLParser.pm:
        (copyAttributes):
        (parseExtendedAttributeList):
        (parseExtendedAttributes):
        (applyExtendedAttributeList):
        * bindings/scripts/IDLStructure.pm:
        * bindings/scripts/test/CPP/WebDOMTestOverloadedConstructors.cpp: Added.
        (WebDOMTestOverloadedConstructors::WebDOMTestOverloadedConstructorsPrivate::WebDOMTestOverloadedConstructorsPrivate):
        (WebDOMTestOverloadedConstructors::WebDOMTestOverloadedConstructorsPrivate):
        (WebDOMTestOverloadedConstructors::WebDOMTestOverloadedConstructors):
        (WebDOMTestOverloadedConstructors::operator=):
        (WebDOMTestOverloadedConstructors::impl):
        (WebDOMTestOverloadedConstructors::~WebDOMTestOverloadedConstructors):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestOverloadedConstructors.h: Added.
        (WebCore):
        (WebDOMTestOverloadedConstructors):
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.cpp: Added.
        (WebKit):
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestOverloadedConstructors):
        (webkit_dom_test_overloaded_constructors_finalize):
        (webkit_dom_test_overloaded_constructors_set_property):
        (webkit_dom_test_overloaded_constructors_get_property):
        (webkit_dom_test_overloaded_constructors_constructed):
        (webkit_dom_test_overloaded_constructors_class_init):
        (webkit_dom_test_overloaded_constructors_init):
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructors.h: Added.
        (_WebKitDOMTestOverloadedConstructors):
        (_WebKitDOMTestOverloadedConstructorsClass):
        * bindings/scripts/test/GObject/WebKitDOMTestOverloadedConstructorsPrivate.h: Added.
        (WebKit):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: Added.
        (WebCore):
        (WebCore::JSTestOverloadedConstructorsConstructor::JSTestOverloadedConstructorsConstructor):
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        (WebCore::JSTestOverloadedConstructorsConstructor::getOwnPropertySlot):
        (WebCore::JSTestOverloadedConstructorsConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors):
        (WebCore::JSTestOverloadedConstructorsConstructor::getConstructData):
        (WebCore::JSTestOverloadedConstructorsPrototype::self):
        (WebCore::JSTestOverloadedConstructors::JSTestOverloadedConstructors):
        (WebCore::JSTestOverloadedConstructors::finishCreation):
        (WebCore::JSTestOverloadedConstructors::createPrototype):
        (WebCore::JSTestOverloadedConstructors::destroy):
        (WebCore::JSTestOverloadedConstructors::~JSTestOverloadedConstructors):
        (WebCore::JSTestOverloadedConstructors::getOwnPropertySlot):
        (WebCore::JSTestOverloadedConstructors::getOwnPropertyDescriptor):
        (WebCore::jsTestOverloadedConstructorsConstructor):
        (WebCore::JSTestOverloadedConstructors::getConstructor):
        (WebCore::isObservable):
        (WebCore::JSTestOverloadedConstructorsOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestOverloadedConstructorsOwner::finalize):
        (WebCore::toJS):
        (WebCore::toTestOverloadedConstructors):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h: Added.
        (WebCore):
        (JSTestOverloadedConstructors):
        (WebCore::JSTestOverloadedConstructors::create):
        (WebCore::JSTestOverloadedConstructors::createStructure):
        (WebCore::JSTestOverloadedConstructors::impl):
        (WebCore::JSTestOverloadedConstructors::releaseImpl):
        (WebCore::JSTestOverloadedConstructors::releaseImplIfNotNull):
        (JSTestOverloadedConstructorsOwner):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (JSTestOverloadedConstructorsPrototype):
        (WebCore::JSTestOverloadedConstructorsPrototype::create):
        (WebCore::JSTestOverloadedConstructorsPrototype::createStructure):
        (WebCore::JSTestOverloadedConstructorsPrototype::JSTestOverloadedConstructorsPrototype):
        (JSTestOverloadedConstructorsConstructor):
        (WebCore::JSTestOverloadedConstructorsConstructor::create):
        (WebCore::JSTestOverloadedConstructorsConstructor::createStructure):
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.h: Added.
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.mm: Added.
        (-[DOMTestOverloadedConstructors dealloc]):
        (-[DOMTestOverloadedConstructors finalize]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructorsInternal.h: Added.
        (WebCore):
        * bindings/scripts/test/TestOverloadedConstructors.idl: Copied from Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl.
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.cpp: Added.
        (WebCore):
        (TestOverloadedConstructorsV8Internal):
        (WebCore::TestOverloadedConstructorsV8Internal::V8_USE):
        (WebCore::V8TestOverloadedConstructors::constructor1Callback):
        (WebCore::V8TestOverloadedConstructors::constructor2Callback):
        (WebCore::V8TestOverloadedConstructors::constructor3Callback):
        (WebCore::V8TestOverloadedConstructors::constructor4Callback):
        (WebCore::V8TestOverloadedConstructors::constructorCallback):
        (WebCore::ConfigureV8TestOverloadedConstructorsTemplate):
        (WebCore::V8TestOverloadedConstructors::GetRawTemplate):
        (WebCore::V8TestOverloadedConstructors::GetTemplate):
        (WebCore::V8TestOverloadedConstructors::HasInstance):
        (WebCore::V8TestOverloadedConstructors::wrapSlow):
        (WebCore::V8TestOverloadedConstructors::derefObject):
        * bindings/scripts/test/V8/V8TestOverloadedConstructors.h: Added.
        (WebCore):
        (V8TestOverloadedConstructors):
        (WebCore::V8TestOverloadedConstructors::toNative):
        (WebCore::V8TestOverloadedConstructors::installPerContextProperties):
        (WebCore::V8TestOverloadedConstructors::installPerContextPrototypeProperties):
        (WebCore::V8TestOverloadedConstructors::wrap):
        (WebCore::toV8):
        * bindings/v8/custom/V8WebSocketCustom.cpp:

2012-11-12  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Create SelectRuleFeatureSet for collecting RuleFeatureSet for select attribute
        https://bugs.webkit.org/show_bug.cgi?id=101891

        Reviewed by Hajime Morita.

        We would like to have another class for RuleFeatureSet to collect 'select' attribute features,
        since it will have more features than the original RuleFeatureSet has.

        Also, some methods of ElementShadow are removed and we provide a method to get SelectRuleFeatureSet itself.

        No new tests, no change in behavior.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ElementShadow.h:
        (ElementShadow):
        (WebCore::ElementShadow::selectRuleFeatureSet):
        (WebCore):
        * html/shadow/SelectRuleFeatureSet.cpp: Added.
        (WebCore):
        (WebCore::SelectRuleFeatureSet::SelectRuleFeatureSet):
        (WebCore::SelectRuleFeatureSet::add):
        (WebCore::SelectRuleFeatureSet::clear):
        (WebCore::SelectRuleFeatureSet::collectFeaturesFromSelector):
        * html/shadow/SelectRuleFeatureSet.h: Added.
        (WebCore):
        (SelectRuleFeatureSet):
        (WebCore::SelectRuleFeatureSet::hasSelectorForId):
        (WebCore::SelectRuleFeatureSet::hasSelectorForClass):
        (WebCore::SelectRuleFeatureSet::hasSelectorForAttribute):
        * testing/Internals.cpp:
        (WebCore::Internals::hasSelectorForIdInShadow):
        (WebCore::Internals::hasSelectorForClassInShadow):
        (WebCore::Internals::hasSelectorForAttributeInShadow):

2012-11-13  Keishi Hattori  <keishi@webkit.org>

        Build fix for Chromium Android (caused by r134216)

        Unreviewed.

        No new tests.

        * platform/text/PlatformLocale.cpp:
        (WebCore::Locale::formatDateTime):

2012-11-12  Keishi Hattori  <keishi@webkit.org>

        Add support for week/month to Locale::formatDateTime()
        https://bugs.webkit.org/show_bug.cgi?id=101878

        Reviewed by Kent Tamura.

        Adding support for week/month to Locale::formatDateTime() in preparation for datalist support for <input type=week/month>.

        Added Chromium tests LocaleMacTest.formatWeek and LocaleMacTest.formatMonth.

        * platform/text/PlatformLocale.cpp:
        (WebCore::DateTimeStringBuilder::visitField):
        (WebCore::Locale::formatDateTime): Support week and month types.

2012-11-12  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Can not load MHTML documents
        https://bugs.webkit.org/show_bug.cgi?id=101765

        Reviewed by Simon Hausmann.

        Recognize common MHTML extensions so that we can recognize MHTML tests on the file-system.

        Tested by existing mhtml/ tests.

        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore):

2012-11-12  Andreas Kling  <akling@apple.com>

        Tighten vector in ResourceRequestBase::setResponseContentDispositionEncodingFallbackArray().
        <http://webkit.org/b/101850>

        Reviewed by Antti Koivisto.

        Reserve the exact amount of space needed for m_responseContentDispositionEncodingFallbackArray.
        222kB progression on Membuster3.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setResponseContentDispositionEncodingFallbackArray):

2012-11-12  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Schedule the RTCDataChannel events to be triggered at idle state
        https://bugs.webkit.org/show_bug.cgi?id=101751

        Reviewed by Adam Barth.

        This patch queues the events until the JS interpreter is in an idle state.

        Existing tests cover this patch.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::readyStateChanged):
        (WebCore::RTCDataChannel::dataArrived):
        (WebCore::RTCDataChannel::error):
        (WebCore::RTCDataChannel::scheduleDispatchEvent):
        (WebCore):
        (WebCore::RTCDataChannel::scheduledEventTimerFired):
        * Modules/mediastream/RTCDataChannel.h:
        (RTCDataChannel):
        * platform/chromium/support/WebRTCDataChannel.cpp:
        (WebKit::WebRTCDataChannel::setBufferedAmount):
        (WebKit::WebRTCDataChannel::readyStateChanged):
        (WebKit::WebRTCDataChannel::dataArrived):
        (WebKit::WebRTCDataChannel::error):

2012-11-12  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Remove HTMLInputElement dependency from PickerIndicatorElement
        https://bugs.webkit.org/show_bug.cgi?id=101913

        Reviewed by Kent Tamura.

        Introduced PickerIndicatorOwner interface that replaces the role of hostInput() in
        PickerIndicatorElement. It makes easier to add interactions between picker indicator
        and its owner without having to add functions to HTMLInputElement.

        No new tests. This is just a refactor.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isPickerIndicatorOwnerDisabledOrReadOnly): Added.
        (WebCore):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::pickerIndicatorChooseValue): Added.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::setupDateTimeChooserParameters): Added.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree):
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (WebCore):
        (BaseMultipleFieldsDateAndTimeInputType): Implements PickerIndicatorOwner.
        * html/shadow/PickerIndicatorElement.cpp: Replaced all the use of hostInput() by using PickerIndicatorOwner.
        (WebCore::PickerIndicatorElement::PickerIndicatorElement):
        (WebCore::PickerIndicatorElement::create):
        (WebCore::PickerIndicatorElement::defaultEventHandler):
        (WebCore::PickerIndicatorElement::willRespondToMouseClickEvents):
        (WebCore::PickerIndicatorElement::didChooseValue):
        (WebCore::PickerIndicatorElement::openPopup):
        * html/shadow/PickerIndicatorElement.h:
        (PickerIndicatorElement): Added a PickerIndicatorOwner member.
        (PickerIndicatorOwner): An interface class for communicating picker indicator and its owner.
        (WebCore::PickerIndicatorElement::PickerIndicatorOwner::~PickerIndicatorOwner):
        (WebCore::PickerIndicatorElement::removePickerIndicatorOwner):

2012-11-12  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Add support for text-shadow in region styling
        https://bugs.webkit.org/show_bug.cgi?id=94472

        Reviewed by David Hyatt.

        Original patch by Andrei Onea.
        Add support for text-shadow in region styling (@-webkit-region rule).
        In addition to the previously supported region styling properties (background-color and color),
        text-shadow requires the computation of an element style in region at layout time.

        This patch adds a new method on RenderRegion - ensureRegionStyleForObject - that
        can be used to retrieve the object style in region (if already cached) or to compute it
        on the spot. When computing the object style in region, we need to compute the style in region
        also for the object ancestor, up to the content nodes.

        This patch also refactors the way styles in region are computed and stored, because
        we can compute the style in region not only at paint time, but also at layout time.

        Test: fast/regions/region-style-text-shadow.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::isValidRegionStyleProperty):
        Allow text-shadow to be used in region styling.
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::styleInRegion):
        Retrieve the region style for an InlineBox's renderer, given its RenderRegion.
        Compute the style in region if not computed yet.
        (WebCore::InlineBox::regionDuringLayout):
        Retrieve the region in which an InlineBox is being flowed.
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp: Take region styling into account.
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::canCacheObjectStyleInRegion):
        Test if we can cache the computed style in region.
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        (WebCore::RenderRegion::setChildrenStyleInRegion):
        (WebCore::setObjectHasBoxDecorationsFlag):
        (WebCore::RenderRegion::setObjectStyleInRegion):
        (WebCore::RenderRegion::clearObjectStyleInRegion):
        (WebCore::RenderRegion::ensureRegionStyleForObject):
        * rendering/RenderRegion.h:

2012-11-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134154.
        http://trac.webkit.org/changeset/134154
        https://bugs.webkit.org/show_bug.cgi?id=101919

        Causes plenty of crashes on GTK and Apple Win builders
        (Requested by zdobersek on #webkit).

        * css/mediaControls.css:
        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId):
        * html/shadow/MediaControlElements.h:
        (MediaControlElement):
        (MediaControlToggleClosedCaptionsButtonElement):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControlRootElement::create):
        (WebCore::MediaControlRootElement::setMediaController):
        (WebCore::MediaControlRootElement::hide):
        (WebCore::MediaControlRootElement::makeTransparent):
        (WebCore::MediaControlRootElement::reset):
        (WebCore::MediaControlRootElement::reportedError):
        * html/shadow/MediaControlRootElement.h:
        (WebCore):
        (MediaControlRootElement):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::initializeControls):
        * html/shadow/MediaControls.h:
        (MediaControls):
        * platform/Language.cpp:
        (WebCore):
        * platform/Language.h:
        (WebCore):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):

2012-11-12  Mike West  <mkwst@chromium.org>

        'for (x in y)' requires 'var' declaration in ConsoleMessage.js
        https://bugs.webkit.org/show_bug.cgi?id=101908

        Reviewed by Pavel Feldman.

        r134166 should have included a 'var' declaration in its 'for (x in y)'
        loop. This patch adds the missing 'var' in order to prevent leakage into
        the global context.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.append):
        (WebInspector.ConsoleMessageImpl.prototype._formatWithSubstitutionString):

2012-11-12  Zeno Albisser  <zeno@webkit.org>

        [Qt] MiniBrowser should not strongly depend on QtTestSupport.
        https://bugs.webkit.org/show_bug.cgi?id=101775

        Introducing HAVE(QTTESTSUPPORT) to allow building
        MiniBrowser without QtTestSupport.
        This is necessary when using a production build.

        Reviewed by Tor Arne Vestbø.

        * Target.pri:
        * platform/qt/QtTestSupport.h:

2012-11-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: wasShown is called twice when show() is called from within wasShown
        https://bugs.webkit.org/show_bug.cgi?id=101858

        Reviewed by Vsevolod Vlasov.

        When we attach views lazily from within wasShown, the views were getting wasShown notification twice.
        We now mute one of them.

        * inspector/front-end/View.js:
        (WebInspector.View):
        (WebInspector.View.prototype._inNotification):
        (WebInspector.View.prototype._parentIsShowing):
        (WebInspector.View.prototype._callOnVisibleChildren):
        (WebInspector.View.prototype._processWasShown):
        (WebInspector.View.prototype._processWillHide):
        (WebInspector.View.prototype._processOnResize):
        (WebInspector.View.prototype._notify):
        (WebInspector.View.prototype.show):

2012-11-12  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r134191. Turns out that FrameView::performPostLayoutTasks calls FrameSelection::updateAppearance
        in the middle of a layout. So we can't have assertions in recomputeCaretRect and updateAppearance.

        Furthermore, we can't update layout in updateAppearance. So do that in its call sites.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::setCaretVisibility):

2012-11-12  Shinya Kawanaka  <shinyak@chromium.org>

        Don't update style when attaching in HTMLMeterElement
        https://bugs.webkit.org/show_bug.cgi?id=101714

        Reviewed by Hajime Morita.

        HTMLMeterElement was updating style when it's being attached. However, updating style when attaching
        can cause style-update prevention. The similar thing has already happened in Bug 100507.

        Since we have already set the default value in creating ShadowDOM subtree, we don't need to update style actually.

        Test: fast/dom/HTMLMeterElement/meter-bar-set-value.html

        * html/HTMLMeterElement.cpp:
        * html/HTMLMeterElement.h:
        (HTMLMeterElement): Removed attach(). We don't need it.

2012-11-09  Ryosuke Niwa  <rniwa@webkit.org>

        Multiple Layout Tests (e.g. fast/repaint/japanese-rl-selection-clear.html) is failing after r133840.
        https://bugs.webkit.org/show_bug.cgi?id=101547

        Reviewed by Simon Fraser.

        I overlooked the fact when the selection is null, we still have to invalidate the caret rect that
        previously existed. Revert the optimization added in r133840 to skip caret invalidation when new
        selection is null, and add a special method to be called by FrameLoader prior to destruction instead.
        This will let us avoid doing an extra layout upon destruction and not regress repaint tests.

        Covered by existing tests.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection): Added DoNotUpdateAppearance option.
        (WebCore::FrameSelection::prepareForDestruction): Added.
        (WebCore::FrameSelection::updateAppearance): Reverted the flawed optimization added in r133840.
        Also, don't update style before updating selection unless text caret is disabled since we always
        update the layout (including style) when text caret is enabled.
        * editing/FrameSelection.h:
        (FrameSelection):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear): Call prepareForDestruction instead of clear to avoid a layout.

2012-11-11  Dongwoo Joshua Im  <dw.im@samsung.com>

        [CSS3] Parsing the property, text-align-last.
        https://bugs.webkit.org/show_bug.cgi?id=99439

        Reviewed by Julien Chaffraix.

        This patch implements the parsing side of the "text-align-last" property specified
        in CSS3 working draft, with "-webkit-" prefix, under ENABLE_CSS3_TEXT flag.
        Specification link : http://www.w3.org/TR/css3-text/#text-align-last

        Tests: fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last-inherited.html
               fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Get the value of the text-align-last property.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Parse the value, and check whether it is a proper value which text-align-last can have.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ETextAlignLast):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in: Add '-webkit-text-align-last' property.
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StylePropertySet.cpp:
        (WebCore):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData): Add m_textAlignLast.

2012-11-11  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Remove shadowPseudoId() and use setPseudo() in HTMLKeygenElement
        https://bugs.webkit.org/show_bug.cgi?id=101881

        Reviewed by Kent Tamura.

        We're migrating shadowPseudoId() to pseudo(). We remove shadowPseudoId() from HTMLKeygenElement and use
        setPseudo()/pseudo() instead.

        No new tests, simple refacotring.

        * html/HTMLKeygenElement.cpp:
        (WebCore::KeygenSelectElement::KeygenSelectElement):
        (KeygenSelectElement):

2012-11-11  Adam Barth  <abarth@webkit.org>

        Many DOMWindowProperties would benefit from being ScriptWrappable
        https://bugs.webkit.org/show_bug.cgi?id=101887

        Reviewed by Kentaro Hara.

        These object are only ever created at the behest of script, which means
        making them ScriptWrappable is a win.

        * page/BarInfo.h:
        * page/Console.h:
        * page/Crypto.h:
        * page/History.h:
        * page/Location.h:
        * page/Navigator.h:
        * page/Performance.h:

2012-11-11  Kentaro Hara  <haraken@chromium.org>

        [V8] HTMLDocument::all() needs not to be custom
        https://bugs.webkit.org/show_bug.cgi?id=101875

        Reviewed by Adam Barth.

        We can easily remove the custom getter from V8 because the
        custom setter sets .all by ForceSet(). On the other hand,
        it is non-trivial to remove the custom getter from JSC
        because the custom setter sets .all by putDirect()
        and the custom getter wants to get it by getDirect().

        No tests. No change in behavior.

        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * html/HTMLDocument.idl:

2012-11-11  Kentaro Hara  <haraken@chromium.org>

        [V8] V8Console::memoryAttrGetter() needs not to be custom
        https://bugs.webkit.org/show_bug.cgi?id=101873

        Reviewed by Adam Barth.

        No tests. No change in behavior.

        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore):
        * page/Console.idl:

2012-11-11  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] ElementShadow should have RuleFeatureSet for select attribute selectors.
        https://bugs.webkit.org/show_bug.cgi?id=101180

        Reviewed by Dimitri Glazkov.

        This is a preparation patch for Bug 100451.

        We preserve RuleFeatureSet collected from select attributes in ShadowDOM.
        When an element attribute is changed, we might have to invalidate content distribution,
        however it's high cost operation. So we would like to check RuleFeatureSet used in
        select attributes to determine we really need to invalidate distribution.

        Like StyleResolver, ElementShadow has several rule features. When nested ShadowDOM is used,
        first we collect features in nested ShadowDOM, and merge it to the parent ShadowDOM.
        For the performance reason, we have a flag to check whether we need to collect features again.

        Test: fast/dom/shadow/shadow-select-attribute-featureset.html

        * WebCore.exp.in:
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::ElementShadow):
        (WebCore::ElementShadow::setShouldCollectSelectFeatureSet): Enable a flag to collect feature set of descendant
        nodes (and their ShadowDOM).
        (WebCore):
        (WebCore::ElementShadow::ensureSelectFeatureSetCollected):
        (WebCore::ElementShadow::collectSelectFeatureSetFrom): Collect RuleFeatureSet from all descendant Nodes and their
        ShadowDOM. We need to collect id, class, and attribute names.
        * dom/ElementShadow.h:
        (WebCore::ElementShadow::shouldCollectSelectFeatureSet):
        (ElementShadow):
        (WebCore::ElementShadow::hasSelectorForId):
        (WebCore):
        (WebCore::ElementShadow::hasSelectorForClass):
        (WebCore::ElementShadow::hasSelectorForAttribute):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::parseAttribute): When select attribute is changed, enable a flag to recollect features.
        (WebCore::HTMLContentElement::insertedInto): We have to recollect features when HTMLContentElement is moved.
        (WebCore::HTMLContentElement::removedFrom): ditto.
        * html/shadow/HTMLContentElement.h:
        (WebCore::toHTMLContentElement):
        (WebCore):
        * testing/Internals.cpp:
        (WebCore::Internals::hasSelectorForIdInShadow):
        (WebCore):
        (WebCore::Internals::hasSelectorForClassInShadow):
        (WebCore::Internals::hasSelectorForAttributeInShadow):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

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

        Unreviewed, rolling out r134144.
        http://trac.webkit.org/changeset/134144
        https://bugs.webkit.org/show_bug.cgi?id=101876

        seems to break win 7 chromium browser test (Requested by
        hayato on #webkit).

        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:
        (EventHandler):
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2012-11-11  Kent Tamura  <tkent@chromium.org>

        Internals: MockPagePopup should not update DOM structure during detach()
        https://bugs.webkit.org/show_bug.cgi?id=101710

        Reviewed by Hajime Morita.

        PickerIndicatorElement::detach calls
        MockPagePopupDriver::closePagePopup, MockPagePopup::~MockPagePopup,
        which remove the mock iframe from the tree. But updating the tree during
        detach() is dangerous.

        MockPagePopupDriver::closePagePopup calls MockpagePopup::closeLater, it
        requests to call 'close' asynchronously, and 'close' removes the mock
        iframe. We need to change MockPagePopup so that it is ref-couted and has
        a timer.

        No new tests. This is a change for the test harness.

        * testing/MockPagePopupDriver.cpp:
        (MockPagePopup): Make this ref-counted, add closeLater, add close, and
        add m_closeTimer.
        (WebCore::MockPagePopup::MockPagePopup): Initialize the timer.
        (WebCore::MockPagePopup::create): PassOwnPtr -> PassRefPtr
        (WebCore::MockPagePopup::closeLater):
        - Add one reference to avoid destruction by m_mockPagePopup.clear() in
          closePagePopup.
        - Notify didClosePopup here because the client expects didClosePopup is
          called synchronously.
        - Invoke the timer to call 'close'
        (WebCore::MockPagePopup::close):
        Just remove one reference. This means calling the desructor.
        (WebCore::MockPagePopup::~MockPagePopup):
        Move didClosePopup call to caloseLater.
        (WebCore::MockPagePopupDriver::closePagePopup):
        Request to close PagePopup.
        Clear PagePopupClient in m_pagePopupController because this object is
        necessary until MockPagePopup is closed, but it should not have a
        reference to the PagePopupClient.
        * testing/MockPagePopupDriver.h:
        (MockPagePopupDriver): Make MockPagePopup ref-counted.

2012-11-11  Adam Barth  <abarth@webkit.org>

        axObjectCache code is more complicated than necessary
        https://bugs.webkit.org/show_bug.cgi?id=101820

        Reviewed by Darin Adler.

        This code should use OwnPtr rather than manually calling new/delete.
        Also, instead of using a "double check" pattern, we can just access the
        private fields on the top document directly.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::clearAXObjectCache):
        (WebCore::Document::axObjectCacheExists):
        (WebCore):
        (WebCore::Document::axObjectCache):
        * dom/Document.h:
        (Document):

2012-11-10  Simon Fraser  <simon.fraser@apple.com>

        Save one call to containerForRepaint() when updating layer positions
        https://bugs.webkit.org/show_bug.cgi?id=101856

        Reviewed by Dan Bernstein.

         RenderLayer::updateLayerPositions() has already computed the repaint container,
         but calls computeRepaintRects() which computes it again. Computing the repaint
         container involves a walk back up the layer tree, so calling it during a tree
         traversal is costly.
         
         Fix by passing the repaint container down into computeRepaintRects().

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::computeRepaintRects):
        (WebCore::RenderLayer::computeRepaintRectsIncludingDescendants):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        (WebCore::RenderLayer::setHasVisibleContent):
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-11-11  Kenichi Ishibashi  <bashi@chromium.org>

        WTFString::utf8() should have a mode of conversion to use replacement character
        https://bugs.webkit.org/show_bug.cgi?id=101678

        Reviewed by Alexey Proskuryakov.

        Follow the change on String::utf8()

        No new tests. No changes in behavior.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::close): Pass String::StrictConversion instead of true to String::utf8().
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send): Ditto.
        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseFragments): Ditto.
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::notifyChallengeResult): Ditto.
        * platform/network/blackberry/rss/RSSFilterStream.cpp:
        (WebCore::RSSFilterStream::convertContentToHtml): Ditto.
        * platform/network/blackberry/rss/RSSGenerator.cpp:
        (WebCore::RSSGenerator::generateHtml): Ditto.

2012-11-10  Simon Fraser  <simon.fraser@apple.com>

        Coalesce main thread scroll position updates
        https://bugs.webkit.org/show_bug.cgi?id=101855

        Reviewed by Anders Carlsson.

        When using threaded scrolling, the dispatched updateMainFrameScrollPosition() calls 
        from ScrollingTree would pile up on the main thread, and we'd handle several per
        runloop cycle when scrolling fast. This causes extra work especially on pages
        with position:fixed elements which must update RenderLayers on scrolling.
        
        Fix by using a zero-delay timer in ScrollingCoordinator to coalesce these
        scrolling updates to one per runloop.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator): Initialized data members
        for the scheduled scroll position update.
        (WebCore::ScrollingCoordinator::scheduleUpdateMainFrameScrollPosition): If 
        the timer is active and the parameters match, just update the target scroll
        position and return. If the params don't match, dispatch the scheduled update,
        and then the new one. Otherwise, prime the timer.
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionTimerFired): Call
        the existing updateMainFrameScrollPosition() with the saved values.
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateMainFrameScrollPosition): Call scheduleUpdateMainFrameScrollPosition()
        rather than updateMainFrameScrollPosition().
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::syncChildPositions): Fixed a bug that caused fixed
        position elements to jiggle with the patch; we should be calling syncPosition() (which just
        sets the position data, without touching CA layers).

2012-11-10  Simon Fraser  <simon.fraser@apple.com>

        Remove ScrollingCoordinatorMac::updateMainFrameScrollPositionAndScrollLayerPosition()
        https://bugs.webkit.org/show_bug.cgi?id=101514

        Reviewed by Tim Horton.

        ScrollingCoordinatorMac::updateMainFrameScrollPositionAndScrollLayerPosition() is very similar to
        ScrollingCoordinator::updateMainFrameScrollPosition(). In order to eliminate updateMainFrameScrollPositionAndScrollLayerPosition(),
        we just need to plumb through a flag that says that updateMainFrameScrollPosition() should
        set the layer position (rather than just doing a 'sync').

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateMainFrameScrollPosition):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):

2012-11-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134069.
        http://trac.webkit.org/changeset/134069
        https://bugs.webkit.org/show_bug.cgi?id=101852

        "It is a wrong way to fix the problem. See discussions in bug
        96614" (Requested by 1JTAAPQFJ on #webkit).

        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::getWithUndefinedOrNullCheck):

2012-11-10  Mike West  <mkwst@chromium.org>

        Web Inspector: Multiple '%c' formatting options should all have effect.
        https://bugs.webkit.org/show_bug.cgi?id=101495

        Reviewed by Pavel Feldman.

        This patch supports multiple '%c' formatting blocks in console messages.
        'console.log("%cblue! %cgreen!", "color: blue;", "color: green;")' will
        do exactly what you expect: "blue!" will be blue, and "green!" will be
        green.

        The implementation moves the styles off the message's parent 'span', and
        onto new 'span' elements that wrap the various textual bits of the
        message.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.):
        (WebInspector.ConsoleMessageImpl.prototype.append):
        (WebInspector.ConsoleMessageImpl.prototype._formatWithSubstitutionString):

2012-11-10  Mike West  <mkwst@chromium.org>

        Including <CoreText/CoreText.h> breaks the chromium/mac build.
        https://bugs.webkit.org/show_bug.cgi?id=101851

        Reviewed by Dan Bernstein.

        r134146 introduced inclusion of 'CoreText/CoreText.h' in
        SimpleFontDataCoreText.cpp, which broke the chromium/mac build. Grepping
        around, it looks like this needs to be modified to include
        'ApplicationServices/ApplicationServices.h'.

        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
            Drop 'CoreText.h' in favor of 'ApplicationServices.h'.
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
            Drop the platform-specific '#if' logic; just include 'ApplicationServices.h'.

2012-11-10  Andreas Kling  <kling@webkit.org>

        Don't detach from shared ElementAttributeData when overwriting attribute with identical value.
        <http://webkit.org/b/101849>

        Reviewed by Anders Carlsson.

        Defer the mutableAttributeData() call in Element::setAttributeInternal() until the last
        possible moment, to avoid unnecessarily detaching and cloning from attribute data.

        120 kB progression on Membuster3.

        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::addAttributeInternal):

2012-11-10  Simon Fraser  <simon.fraser@apple.com>

        Some minor optimizations in RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=101847

        Reviewed by Anders Carlsson.

        Some minor performance improvements in RenderLayer code.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition): isRenderInline() is a virtual call,
        so prefix it with an isInline() check which tests a bit on RenderObject.
        (WebCore::RenderLayer::localBoundingBox): Ditto.
        (WebCore::RenderLayer::calculateLayerBounds): Pull layer->renderer()
        into a local variable.

2012-11-10  Anders Carlsson  <andersca@apple.com>

        Document::m_fullScreenElementStack should be a Vector
        https://bugs.webkit.org/show_bug.cgi?id=101844

        Reviewed by Andreas Kling.

        m_fullScreenElementStack is currently a Deque where elements are being prepended
        and removed from the beginning in LIFO order, so it can be replaced with a Vector.

        * dom/Document.cpp:
        (WebCore::Document::requestFullScreenForElement):
        (WebCore::Document::webkitCancelFullScreen):
        (WebCore::Document::popFullscreenElementStack):
        (WebCore::Document::pushFullscreenElementStack):
        * dom/Document.h:
        (WebCore::Document::webkitFullscreenElement):
        (Document):

2012-11-10  Adam Barth  <abarth@webkit.org>

        [V8] Clean up header includes and ifdefs in V8GCController
        https://bugs.webkit.org/show_bug.cgi?id=101691

        Reviewed by Kentaro Hara.

        This file doesn't need to include all these headers anymore.

        * bindings/v8/V8GCController.cpp:
        (WebCore::workingSetEstimateMBMutex):
        (WebCore::V8GCController::majorGCEpilogue):
        (WebCore::V8GCController::checkMemoryUsage):

2012-11-10  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Guard WebCore PageVisibility Symbol Export
        https://bugs.webkit.org/show_bug.cgi?id=101817

        Reviewed by Andreas Kling.

        Guard the export with the same ENABLE guards around its definition
        and implementation.

        * WebCore.exp.in:

2012-11-10  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [css] text-decoration:none no longer valid
        https://bugs.webkit.org/show_bug.cgi?id=101529

        Reviewed by Ojan Vafai.

        This patch fixes an issue where the 'none' value was parsed as explicitly
        'initial' value. However true in a sense that the initial value for the
        'text-decoration' property is 'none', the value itself could not be parsed as
        'initial'.

        The getComputedStyle layout tests for 'text-decoration' and
        '-webkit-text-decoration-line' CSS properties are updated with the correct
        results.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTextDecoration): When parsed, 'none' value
        gets its own identifier value instead of explicit initial.

2012-11-09  Dean Jackson  <dino@apple.com>

        Support list of tracks in caption media controls
        https://bugs.webkit.org/show_bug.cgi?id=101669

        Reviewed by Eric Carlson.

        Attempt three of commit. The first two times caused build failures on Chromium.

        Add some new elements to the media control shadow DOM that display the list of available
        tracks on an audio/video element. The UI is hidden by default everywhere but on Mac,
        where it is given a very basic design. At the moment only the list of available tracks
        are displayed; The followup bug will make the UI active: https://bugs.webkit.org/show_bug.cgi?id=101670

        No new tests - this doesn't expose any testable surface.

        * css/mediaControls.css: Added default rules that hide the new elements.
        * css/mediaControlsQuickTime.css: Specific rules that give a basic rendering of the new track list.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlElement::isShowing): Tests for the visibility of a control.
        (WebCore::MediaControlClosedCaptionsContainerElement::MediaControlClosedCaptionsContainerElement):
        (WebCore::MediaControlClosedCaptionsContainerElement::create):
        (WebCore::MediaControlClosedCaptionsContainerElement::shadowPseudoId):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create): Now takes a reference to the media controls as a parameter.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId):
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement): New element for holding a list of tracks to display.
        * html/shadow/MediaControlElements.h:
        (MediaControlElement):
        (MediaControlToggleClosedCaptionsButtonElement):
        (MediaControlClosedCaptionsContainerElement):
        (MediaControlClosedCaptionsTrackListElement): Examines the media element to build a shadow DOM that lists all the tracks available.
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControlRootElement::create): New track container and list elements created.
        (WebCore::MediaControlRootElement::setMediaController): Hook up the new elements to the controller..
        (WebCore::MediaControlRootElement::hide):
        (WebCore::MediaControlRootElement::makeTransparent):
        (WebCore::MediaControlRootElement::reset):
        (WebCore::MediaControlRootElement::reportedError):
        (WebCore::MediaControlRootElement::toggleClosedCaptionTrackList): Shows or hides the popup with the list of tracks.
        (WebCore):
        * html/shadow/MediaControlRootElement.h:
        (WebCore):
        (MediaControlRootElement):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::initializeControls): Pass in the controls as a parameter.
        * html/shadow/MediaControls.h:
        (MediaControls):
        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale): New function to return a human-readable name for a locale, given the identifier input.
        * platform/Language.h:
        (WebCore):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): New enum values into switch.
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart): New enum values into switch.

2012-11-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134152.
        http://trac.webkit.org/changeset/134152
        https://bugs.webkit.org/show_bug.cgi?id=101831

        broke chromium again (Requested by dino_ on #webkit).

        * css/mediaControls.css:
        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId):
        * html/shadow/MediaControlElements.h:
        (MediaControlElement):
        (MediaControlToggleClosedCaptionsButtonElement):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControlRootElement::create):
        (WebCore::MediaControlRootElement::setMediaController):
        (WebCore::MediaControlRootElement::hide):
        (WebCore::MediaControlRootElement::makeTransparent):
        (WebCore::MediaControlRootElement::reset):
        (WebCore::MediaControlRootElement::reportedError):
        * html/shadow/MediaControlRootElement.h:
        (WebCore):
        (MediaControlRootElement):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::initializeControls):
        * html/shadow/MediaControls.h:
        (MediaControls):
        * platform/Language.cpp:
        (WebCore):
        * platform/Language.h:
        (WebCore):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):

2012-11-09  Dean Jackson  <dino@apple.com>

        Support list of tracks in caption media controls
        https://bugs.webkit.org/show_bug.cgi?id=101669

        Reviewed by Eric Carlson.

        Attempt two of commit. The first time caused a build failure on Chromium.

        Add some new elements to the media control shadow DOM that display the list of available
        tracks on an audio/video element. The UI is hidden by default everywhere but on Mac,
        where it is given a very basic design. At the moment only the list of available tracks
        are displayed; The followup bug will make the UI active: https://bugs.webkit.org/show_bug.cgi?id=101670

        No new tests - this doesn't expose any testable surface.

        * css/mediaControls.css: Added default rules that hide the new elements.
        * css/mediaControlsQuickTime.css: Specific rules that give a basic rendering of the new track list.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlElement::isShowing): Tests for the visibility of a control.
        (WebCore::MediaControlClosedCaptionsContainerElement::MediaControlClosedCaptionsContainerElement):
        (WebCore::MediaControlClosedCaptionsContainerElement::create):
        (WebCore::MediaControlClosedCaptionsContainerElement::shadowPseudoId):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create): Now takes a reference to the media controls as a parameter.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId):
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement): New element for holding a list of tracks to display.
        * html/shadow/MediaControlElements.h:
        (MediaControlElement):
        (MediaControlToggleClosedCaptionsButtonElement):
        (MediaControlClosedCaptionsContainerElement):
        (MediaControlClosedCaptionsTrackListElement): Examines the media element to build a shadow DOM that lists all the tracks available.
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControlRootElement::create): New track container and list elements created.
        (WebCore::MediaControlRootElement::setMediaController): Hook up the new elements to the controller..
        (WebCore::MediaControlRootElement::hide):
        (WebCore::MediaControlRootElement::makeTransparent):
        (WebCore::MediaControlRootElement::reset):
        (WebCore::MediaControlRootElement::reportedError):
        (WebCore::MediaControlRootElement::toggleClosedCaptionTrackList): Shows or hides the popup with the list of tracks.
        (WebCore):
        * html/shadow/MediaControlRootElement.h:
        (WebCore):
        (MediaControlRootElement):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::initializeControls): Pass in the controls as a parameter.
        * html/shadow/MediaControls.h:
        (MediaControls):
        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale): New function to return a human-readable name for a locale, given the identifier input.
        * platform/Language.h:
        (WebCore):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): New enum values into switch.
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart): New enum values into switch.

2012-11-09  Ojan Vafai  <ojan@chromium.org>

        Should only fire a single set of mouse events and update hover state once when scrolling is done
        https://bugs.webkit.org/show_bug.cgi?id=99940

        Reviewed by Levi Weintraub.

        -Use a DeferrableOneShotTimer instead of a Timer. By resetting when the
        timer is fired, we ensure the actual goal of not firing fake mouse events
        until the scroll is completed. This is the core part of this change.
        -Change our mouse event throttling to keep a running average of how long
        mouse events take and adjust throttling appropriately.
        Test: fast/scrolling/fake-mouse-event-throttling.html
        -Maintain a minimum throttle of 100ms.

        * page/EventHandler.cpp:
        (WebCore):
        (WebCore::RunningAverageDurationTracker::RunningAverageDurationTracker):
        (WebCore::RunningAverageDurationTracker::~RunningAverageDurationTracker):
        Keep track of a running average instead of max. This lets us adjust throttling
        dynamically without punishing a page for having a single mouse event handler
        that takes disproportionately long.
        (RunningAverageDurationTracker):
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        * page/EventHandler.h:
        (EventHandler):
        * platform/Timer.h:
        (WebCore::DeferrableOneShotTimer::setDelay):
        (WebCore::DeferrableOneShotTimer::delay):
        Add a way of adjusting the timer delay.

2012-11-09  Rick Byers  <rbyers@chromium.org>

        Move chromium to USE(LAZY_NATIVE_CURSOR)
        https://bugs.webkit.org/show_bug.cgi?id=101501

        Reviewed by Adam Barth.

        This simplifies cursor handling in chromium and unifies it with other
        ports for easier code sharing and testing by moving to the
        USE_LAZY_CURSOR model and eliminating PlatformCursor entirely.

        PlatformCursor adds no value in chromium since the sandboxing model
        requires the cursor information be marshalled to the browser process
        before being turned into a real OS cursor.

        Test: fast/events/mouse-cursor.html

        * WebCore.gypi:
        * platform/Cursor.h:
        (WebCore):
        * platform/chromium/CursorChromium.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/chromium/PlatformCursor.h: Removed.

2012-11-09  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Allow ports to decide whether an image should be directly composited
        https://bugs.webkit.org/show_bug.cgi?id=101827

        Reviewed by Simon Fraser.

        Tested by compositing/tiling/huge-layer-img.html.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::shouldDirectlyCompositeImage):
            Allow the GraphicsLayer implementation to decide if the image can be composited.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):
            Take onto account the new shouldDirectlyCompositeImage check.

2012-11-09  Dan Bernstein  <mitz@apple.com>

        SimpleFontData::getCFStringAttributes sets some attributes to their default values, but shouldn’t
        https://bugs.webkit.org/show_bug.cgi?id=101799

        Reviewed by Alexey Proskuryakov.

        In some configurations, setting kCTLigatureAttributeName to its default value of 1 yields
        different behavior from not setting it at all. We can get the correct behavior and greatly
        simplify the code by not setting attributes to their default values.

        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        Removed redundant #import directives and changed the remaining ones to #include.
        (WebCore::SimpleFontData::getCFStringAttributes): Changed to use a mutable dictionary and
        only add attributes that have non-default values.

2012-11-09  Rick Byers  <rbyers@chromium.org>

        No tests for changing mouse cursors
        https://bugs.webkit.org/show_bug.cgi?id=100550

        Reviewed by Adam Barth.

        Add infrastructure to keep track of the last set mouse cursor,
        and then to query it from DumpRenderTree.

        Test: fast/events/mouse-cursor.html

        * WebCore.exp.in: Add Cursor copy ctor export
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent): Keep track of last set mouse cursor
        * page/EventHandler.h:
        (WebCore::EventHandler::currentMouseCursor): New getter for last set mouse cursor
        * testing/Internals.cpp:
        (WebCore::cursorTypeToString): Helper to convert cursor type to enum
        (WebCore):
        (WebCore::Internals::getCurrentCursorInfo): New function to return a string describing the last set mouse cursor
        * testing/Internals.h: Declare getCurrentCursorInfo
        * testing/Internals.idl: Declare getCurrentCursorInfo

2012-11-09  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Amend CoordinatedBackingStore::paintToTextureMapper to fit its own semantic.
        https://bugs.webkit.org/show_bug.cgi?id=101701

        Reviewed by Noam Rosenthal.

        Add TiledBackingStore::rect() because CoordinatedTile needs to know
        m_rect of TiledBackingStore.

        * platform/graphics/TiledBackingStore.h:
        (WebCore::TiledBackingStore::rect):

2012-11-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134139.
        http://trac.webkit.org/changeset/134139
        https://bugs.webkit.org/show_bug.cgi?id=101823

        breaks chromium (android) build (Requested by thorton on
        #webkit).

        * css/mediaControls.css:
        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId):
        * html/shadow/MediaControlElements.h:
        (MediaControlElement):
        (MediaControlToggleClosedCaptionsButtonElement):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControlRootElement::create):
        (WebCore::MediaControlRootElement::setMediaController):
        (WebCore::MediaControlRootElement::hide):
        (WebCore::MediaControlRootElement::makeTransparent):
        (WebCore::MediaControlRootElement::reset):
        (WebCore::MediaControlRootElement::reportedError):
        * html/shadow/MediaControlRootElement.h:
        (WebCore):
        (MediaControlRootElement):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::initializeControls):
        * html/shadow/MediaControls.h:
        (MediaControls):
        * platform/Language.cpp:
        (WebCore):
        * platform/Language.h:
        (WebCore):

2012-11-09  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Initialize m_compositedNativeImagePtr in GraphicsLayerTextureMapper.
        https://bugs.webkit.org/show_bug.cgi?id=101675

        Reviewed by Noam Rosenthal.

        Fix a potential bug in GraphicsLayerTextureMapper. If the member's uninitialized
        value equals image->nativeImageForCurrentFrame() by change, we can encounter
        undefined behavior.

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

2012-11-09  Dean Jackson  <dino@apple.com>

        Support list of tracks in caption media controls
        https://bugs.webkit.org/show_bug.cgi?id=101669

        Reviewed by Eric Carlson.

        Add some new elements to the media control shadow DOM that display the list of available
        tracks on an audio/video element. The UI is hidden by default everywhere but on Mac,
        where it is given a very basic design. At the moment only the list of available tracks
        are displayed; The followup bug will make the UI active: https://bugs.webkit.org/show_bug.cgi?id=101670

        No new tests - this doesn't expose any testable surface.

        * css/mediaControls.css: Added default rules that hide the new elements.
        * css/mediaControlsQuickTime.css: Specific rules that give a basic rendering of the new track list.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlElement::isShowing): Tests for the visibility of a control.
        (WebCore::MediaControlClosedCaptionsContainerElement::MediaControlClosedCaptionsContainerElement):
        (WebCore::MediaControlClosedCaptionsContainerElement::create):
        (WebCore::MediaControlClosedCaptionsContainerElement::shadowPseudoId):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create): Now takes a reference to the media controls as a parameter.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId):
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement): New element for holding a list of tracks to display.
        * html/shadow/MediaControlElements.h:
        (MediaControlElement):
        (MediaControlToggleClosedCaptionsButtonElement):
        (MediaControlClosedCaptionsContainerElement):
        (MediaControlClosedCaptionsTrackListElement): Examines the media element to build a shadow DOM that lists all the tracks available.
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControlRootElement::create): New track container and list elements created.
        (WebCore::MediaControlRootElement::setMediaController): Hook up the new elements to the controller..
        (WebCore::MediaControlRootElement::hide):
        (WebCore::MediaControlRootElement::makeTransparent):
        (WebCore::MediaControlRootElement::reset):
        (WebCore::MediaControlRootElement::reportedError):
        (WebCore::MediaControlRootElement::toggleClosedCaptionTrackList): Shows or hides the popup with the list of tracks.
        (WebCore):
        * html/shadow/MediaControlRootElement.h:
        (WebCore):
        (MediaControlRootElement):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::initializeControls): Pass in the controls as a parameter.
        * html/shadow/MediaControls.h:
        (MediaControls):
        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale): New function to return a human-readable name for a locale, given the identifier input.
        * platform/Language.h:
        (WebCore):

2012-11-09  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Should pass fast/images/paletted-png-with-color-profile.html
        https://bugs.webkit.org/show_bug.cgi?id=101551

        Reviewed by Adam Barth.

        Support decoding color PALETTE images that have an ICC color profile.

        Covered by fast/images/png-suite/test.html and many other fast/image tests.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable): Move the color profile code after the
        transparency (tRNS) reader. Allow color PNG images: RGB, RGBA, PALLETE to be color
        corrected. Use the transparency count from the tRNS reader to detect the expansion
        of RGB and PALLETE image pixels to RGBA.

2012-11-09  Tien-Ren Chen  <trchen@chromium.org>

        Correct hit-test point scaling for document.elementFromPoint
        https://bugs.webkit.org/show_bug.cgi?id=101798

        Reviewed by Adam Barth.

        The hit-test point come from user JavaScript is in the document coordinate.
        Convert to the frame coordinate with correct scale factor for hit test.

        Test: fast/dom/elementFromPoint-scaled-scrolled.html

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

2012-11-09  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Combine IDBBackingStore and IDBLevelDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=101415

        Reviewed by Tony Chang.

        Combine abstract interface IDBBackingStore with its only
        implementation, IDBLevelDBBackingStore, to reduce code
        complexity. The legacy structure existed to support a SQLLite
        IDBBackingStore, but it is no longer worth the complexity to
        support this abstraction.

        Changes include:
        1) Merging IDBLevelDBBackingStore into IDBBackingStore.

        2) Merge together IDBBackingStore's inner classes: Cursor,
        Transaction, and ObjectStoreRecordIdentfier with their respective
        subclasses in IDBLevelDBBackingStore.

        3) Simplifying the inner Transaction class to not be refcounted or
        virtualized, to allow it to be a simple concrete member of its
        owner, IDBTransactionBackendImpl.

        No new tests as this is purely a refactor.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::recordInternalError):
        (WebCore::setUpMetadata):
        (WebCore::IDBBackingStore::IDBBackingStore):
        (WebCore):
        (WebCore::IDBBackingStore::~IDBBackingStore):
        (WebCore::IDBBackingStore::open):
        (WebCore::IDBBackingStore::getDatabaseNames):
        (WebCore::IDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::createIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::updateIDBDatabaseIntVersion):
        (WebCore::IDBBackingStore::updateIDBDatabaseMetaData):
        (WebCore::deleteRange):
        (WebCore::IDBBackingStore::deleteDatabase):
        (WebCore::IDBBackingStore::getObjectStores):
        (WebCore::setMaxObjectStoreId):
        (WebCore::IDBBackingStore::createObjectStore):
        (WebCore::IDBBackingStore::deleteObjectStore):
        (WebCore::IDBBackingStore::getRecord):
        (WebCore::IDBBackingStore::putRecord):
        (WebCore::IDBBackingStore::clearObjectStore):
        (WebCore::IDBBackingStore::deleteRecord):
        (WebCore::IDBBackingStore::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBBackingStore::getIndexes):
        (WebCore::setMaxIndexId):
        (WebCore::IDBBackingStore::createIndex):
        (WebCore::IDBBackingStore::deleteIndex):
        (WebCore::IDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBBackingStore::findKeyInIndex):
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStore::keyExistsInIndex):
        (WebCore::IDBBackingStore::Cursor::Cursor):
        (WebCore::IDBBackingStore::Cursor::firstSeek):
        (WebCore::IDBBackingStore::Cursor::advance):
        (WebCore::IDBBackingStore::Cursor::continueFunction):
        (WebCore::IDBBackingStore::Cursor::haveEnteredRange):
        (WebCore::IDBBackingStore::Cursor::isPastBounds):
        (WebCore::ObjectStoreKeyCursorImpl::create):
        (ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreKeyCursorImpl::value):
        (WebCore::ObjectStoreKeyCursorImpl::ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreKeyCursorImpl::loadCurrentRow):
        (WebCore::ObjectStoreCursorImpl::create):
        (ObjectStoreCursorImpl):
        (WebCore::ObjectStoreCursorImpl::value):
        (WebCore::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):
        (WebCore::IndexKeyCursorImpl::create):
        (IndexKeyCursorImpl):
        (WebCore::IndexKeyCursorImpl::value):
        (WebCore::IndexKeyCursorImpl::primaryKey):
        (WebCore::IndexKeyCursorImpl::recordIdentifier):
        (WebCore::IndexKeyCursorImpl::IndexKeyCursorImpl):
        (WebCore::IndexKeyCursorImpl::loadCurrentRow):
        (WebCore::IndexCursorImpl::create):
        (IndexCursorImpl):
        (WebCore::IndexCursorImpl::value):
        (WebCore::IndexCursorImpl::primaryKey):
        (WebCore::IndexCursorImpl::recordIdentifier):
        (WebCore::IndexCursorImpl::IndexCursorImpl):
        (WebCore::IndexCursorImpl::loadCurrentRow):
        (WebCore::objectStoreCursorOptions):
        (WebCore::indexCursorOptions):
        (WebCore::IDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBBackingStore::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBBackingStore::openIndexCursor):
        (WebCore::IDBBackingStore::Transaction::Transaction):
        (WebCore::IDBBackingStore::Transaction::begin):
        (WebCore::IDBBackingStore::Transaction::commit):
        (WebCore::IDBBackingStore::Transaction::rollback):
        * Modules/indexeddb/IDBBackingStore.h:
        (WebCore):
        (IDBBackingStore):
        (RecordIdentifier):
        (WebCore::IDBBackingStore::RecordIdentifier::create):
        (WebCore::IDBBackingStore::RecordIdentifier::~RecordIdentifier):
        (WebCore::IDBBackingStore::RecordIdentifier::isValid):
        (WebCore::IDBBackingStore::RecordIdentifier::primaryKey):
        (WebCore::IDBBackingStore::RecordIdentifier::setPrimaryKey):
        (WebCore::IDBBackingStore::RecordIdentifier::version):
        (WebCore::IDBBackingStore::RecordIdentifier::setVersion):
        (WebCore::IDBBackingStore::RecordIdentifier::RecordIdentifier):
        (Transaction):
        (WebCore::IDBBackingStore::Transaction::levelDBTransactionFrom):
        (CursorOptions):
        (Cursor):
        (WebCore::IDBBackingStore::Cursor::Cursor):
        (WebCore::IDBBackingStore::Cursor::key):
        (WebCore::IDBBackingStore::Cursor::primaryKey):
        (WebCore::IDBBackingStore::Cursor::~Cursor):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::openBackingStore):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::countInternal):
        * Modules/indexeddb/IDBLevelDBBackingStore.h: Removed.
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::backingStoreTransaction):
        * WebCore.xcodeproj/project.pbxproj:

2012-11-09  Tien-Ren Chen  <trchen@chromium.org>

        Correct scroll adjustment for touchEvent.clientX/clientY
        https://bugs.webkit.org/show_bug.cgi?id=101800

        Reviewed by Adam Barth.

        FrameView::scrollX/scrollY returns scroll offset in (scaled) frame coordinate.
        Convert to document coordinate before passing to JavaScript.

        Test: fast/events/touch/touch-scaled-scrolled.html

        * dom/Touch.cpp:
        (WebCore::contentsX):
        (WebCore::contentsY):

2012-11-09  Alexandru Chiculita  <achicu@adobe.com>

        [Texmap][CSS Shaders] Enable CSS Shaders in TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=98990

        Reviewed by Noam Rosenthal.

        Added code that draws the Custom Filter in the TextureMapperGL. Also added 
        required code to make a depth buffer for a BitmapTextureGL.

        Note that the code is not optimized yet, so it will always recompile the shader.

        Test: css3/filters/custom/composited/custom-filter-blend-modes.html

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::getPassesRequiredForFilter):
        (WebCore):
        (WebCore::TextureMapperGL::drawUsingCustomFilter):
        (WebCore::BitmapTextureGL::applyFilters):
        (WebCore::BitmapTextureGL::initializeDepthBuffer):
        (WebCore::BitmapTextureGL::~BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperGL.h:
        (BitmapTextureGL):

2012-11-09  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        CustomEvent: Allow taking in a serialized value during initialization.
        https://bugs.webkit.org/show_bug.cgi?id=101348

        Reviewed by Adam Barth.

        If a CustomEvent is initialized using a serialized value, then for each access
        to |detail|, the value is deserialized first. This way, each world gets a different
        deserialization.

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        * bindings/v8/custom/V8CustomEventCustom.cpp: Copied from Source/WebCore/bindings/v8/V8HiddenPropertyName.h.
        (WebCore):
        (WebCore::V8CustomEvent::detailAccessorGetter):
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::initCustomEvent):
        (WebCore):
        * dom/CustomEvent.h:
        (CustomEvent):
        (WebCore::CustomEvent::serializedScriptValue):
        * dom/CustomEvent.idl:

2012-11-09  Brady Eidson  <beidson@apple.com>

        Implement WebResourceBuffer::isEmpty()
        https://bugs.webkit.org/show_bug.cgi?id=101805

        Reviewed by Alexey Proskuryakov.

        This is required to make the existing subresource loading in NetworkProcess work correctly,
        as there's an isEmpty() check in the WebProcess that decides whether or not to actually deliver 
        the data to the ResourceLoader.

        No new tests (No change in behavior in any configuration we test.)

        * loader/ResourceBuffer.h: Make isEmpty() virtual.

2012-11-09  Michael Saboff  <msaboff@apple.com>

        HTML Attributes names and values should be created as 8 bit string where possible
        https://bugs.webkit.org/show_bug.cgi?id=101781

        Reviewed by Filip Pizlo.

        Given that almost all attribute names and values are lower case ASCII, we should try to
        create 8 bit strings to process them.  Creating an AtomicString already tries to make
        an 8 bit string, so that didn't need to change.

        No new tests, functionality covered by existing tests.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::processTagToken):
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::processMeta):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::PreloadTask::processAttributes):

2012-11-09  Dana Jansens  <danakj@chromium.org>

        [chromium] Define WEBKIT_IMPLEMENTATION everywhere inside WebCore
        https://bugs.webkit.org/show_bug.cgi?id=101795

        Reviewed by James Robinson.

        * WebCore.gyp/WebCore.gyp:

2012-11-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134101.
        http://trac.webkit.org/changeset/134101
        https://bugs.webkit.org/show_bug.cgi?id=101790

        IDBDatabaseBackendTest.BackingStoreRetention failing
        (Requested by jsbell|gardener on #webkit).

        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::~IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::open):
        (WebCore::IDBLevelDBBackingStore::getDatabaseNames):
        (WebCore::IDBLevelDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::createIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::updateIDBDatabaseIntVersion):
        (WebCore::IDBLevelDBBackingStore::updateIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::deleteDatabase):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore):
        (WebCore::IDBLevelDBBackingStore::getRecord):
        (WebCore):
        (WebCore::IDBLevelDBBackingStore::putRecord):
        (WebCore::IDBLevelDBBackingStore::clearObjectStore):
        (WebCore::IDBLevelDBBackingStore::createInvalidRecordIdentifier):
        (WebCore::IDBLevelDBBackingStore::deleteRecord):
        (WebCore::IDBLevelDBBackingStore::getKeyGeneratorCurrentNumber):
        (WebCore::IDBLevelDBBackingStore::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBLevelDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::deleteIndex):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBLevelDBBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBLevelDBBackingStore::findKeyInIndex):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):
        (WebCore::IDBLevelDBBackingStore::createTransaction):
        (WebCore::IDBLevelDBBackingStore::Transaction::create):
        (WebCore::IDBLevelDBBackingStore::Transaction::Transaction):
        (WebCore::IDBLevelDBBackingStore::Transaction::begin):
        (WebCore::IDBLevelDBBackingStore::Transaction::commit):
        (WebCore::IDBLevelDBBackingStore::Transaction::rollback):
        (WebCore::IDBLevelDBBackingStore::backingStoreExists):
        * Modules/indexeddb/IDBBackingStore.h:
        (WebCore):
        (WebCore::IDBBackingStore::~IDBBackingStore):
        (IDBBackingStore):
        (RecordIdentifier):
        (WebCore::IDBBackingStore::Cursor::~Cursor):
        (WebCore::IDBBackingStore::Transaction::~Transaction):
        (Transaction):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::openBackingStore):
        * Modules/indexeddb/IDBLevelDBBackingStore.h: Copied from Source/WebCore/Modules/indexeddb/IDBBackingStore.h.
        (WebCore):
        (IDBLevelDBBackingStore):
        (Transaction):
        (WebCore::IDBLevelDBBackingStore::Transaction::levelDBTransactionFrom):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::backingStoreTransaction):
        * WebCore.xcodeproj/project.pbxproj:

2012-11-09  Erik Arvidsson  <arv@chromium.org>

        REGRESSION (r125239): classList contains() doesn't work after element was moved from strict mode document to quirks mode document
        https://bugs.webkit.org/show_bug.cgi?id=101627

        Reviewed by Alexey Proskuryakov.

        We used to only create m_classNamesForQuirksMode in the constructor or when the class attribute
        was changed. If an element is moved from a standards document to a quirks mode document the
        m_classNamesForQuirksMode would not be up to date which lead to wrong results.

        Now we alway check if m_classNamesForQuirksMode is up to date (in quirks mode only).

        Test: fast/dom/Element/class-list-move-between-document-with-different-quirks-mode.html

        * html/ClassList.cpp:
        (WebCore::ClassList::classNames): Create the m_classNamesForQuirksMode lazily as needed so that
                                          it is up to date.
        * html/ClassList.h:

2012-11-09  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Combine IDBBackingStore and IDBLevelDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=101415

        Reviewed by Tony Chang.

        Combine abstract interface IDBBackingStore with its only
        implementation, IDBLevelDBBackingStore, to reduce code
        complexity. The legacy structure existed to support a SQLLite
        IDBBackingStore, but it is no longer worth the complexity to
        support this abstraction.

        Changes include:
        1) Merging IDBLevelDBBackingStore into IDBBackingStore.

        2) Merge together IDBBackingStore's inner classes: Cursor,
        Transaction, and ObjectStoreRecordIdentfier with their respective
        subclasses in IDBLevelDBBackingStore.

        3) Simplifying the inner Transaction class to not be refcounted or
        virtualized, to allow it to be a simple concrete member of its
        owner, IDBTransactionBackendImpl.

        No new tests as this is purely a refactor.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::recordInternalError):
        (WebCore::setUpMetadata):
        (WebCore::IDBBackingStore::IDBBackingStore):
        (WebCore):
        (WebCore::IDBBackingStore::~IDBBackingStore):
        (WebCore::IDBBackingStore::open):
        (WebCore::IDBBackingStore::getDatabaseNames):
        (WebCore::IDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::createIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::updateIDBDatabaseIntVersion):
        (WebCore::IDBBackingStore::updateIDBDatabaseMetaData):
        (WebCore::deleteRange):
        (WebCore::IDBBackingStore::deleteDatabase):
        (WebCore::IDBBackingStore::getObjectStores):
        (WebCore::setMaxObjectStoreId):
        (WebCore::IDBBackingStore::createObjectStore):
        (WebCore::IDBBackingStore::deleteObjectStore):
        (WebCore::IDBBackingStore::getRecord):
        (WebCore::IDBBackingStore::putRecord):
        (WebCore::IDBBackingStore::clearObjectStore):
        (WebCore::IDBBackingStore::deleteRecord):
        (WebCore::IDBBackingStore::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBBackingStore::getIndexes):
        (WebCore::setMaxIndexId):
        (WebCore::IDBBackingStore::createIndex):
        (WebCore::IDBBackingStore::deleteIndex):
        (WebCore::IDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBBackingStore::findKeyInIndex):
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStore::keyExistsInIndex):
        (WebCore::IDBBackingStore::Cursor::Cursor):
        (WebCore::IDBBackingStore::Cursor::firstSeek):
        (WebCore::IDBBackingStore::Cursor::advance):
        (WebCore::IDBBackingStore::Cursor::continueFunction):
        (WebCore::IDBBackingStore::Cursor::haveEnteredRange):
        (WebCore::IDBBackingStore::Cursor::isPastBounds):
        (WebCore::ObjectStoreKeyCursorImpl::create):
        (ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreKeyCursorImpl::value):
        (WebCore::ObjectStoreKeyCursorImpl::ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreKeyCursorImpl::loadCurrentRow):
        (WebCore::ObjectStoreCursorImpl::create):
        (ObjectStoreCursorImpl):
        (WebCore::ObjectStoreCursorImpl::value):
        (WebCore::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):
        (WebCore::IndexKeyCursorImpl::create):
        (IndexKeyCursorImpl):
        (WebCore::IndexKeyCursorImpl::value):
        (WebCore::IndexKeyCursorImpl::primaryKey):
        (WebCore::IndexKeyCursorImpl::recordIdentifier):
        (WebCore::IndexKeyCursorImpl::IndexKeyCursorImpl):
        (WebCore::IndexKeyCursorImpl::loadCurrentRow):
        (WebCore::IndexCursorImpl::create):
        (IndexCursorImpl):
        (WebCore::IndexCursorImpl::value):
        (WebCore::IndexCursorImpl::primaryKey):
        (WebCore::IndexCursorImpl::recordIdentifier):
        (WebCore::IndexCursorImpl::IndexCursorImpl):
        (WebCore::IndexCursorImpl::loadCurrentRow):
        (WebCore::objectStoreCursorOptions):
        (WebCore::indexCursorOptions):
        (WebCore::IDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBBackingStore::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBBackingStore::openIndexCursor):
        (WebCore::IDBBackingStore::Transaction::Transaction):
        (WebCore::IDBBackingStore::Transaction::begin):
        (WebCore::IDBBackingStore::Transaction::commit):
        (WebCore::IDBBackingStore::Transaction::rollback):
        * Modules/indexeddb/IDBBackingStore.h:
        (WebCore):
        (IDBBackingStore):
        (RecordIdentifier):
        (WebCore::IDBBackingStore::RecordIdentifier::create):
        (WebCore::IDBBackingStore::RecordIdentifier::~RecordIdentifier):
        (WebCore::IDBBackingStore::RecordIdentifier::isValid):
        (WebCore::IDBBackingStore::RecordIdentifier::primaryKey):
        (WebCore::IDBBackingStore::RecordIdentifier::setPrimaryKey):
        (WebCore::IDBBackingStore::RecordIdentifier::version):
        (WebCore::IDBBackingStore::RecordIdentifier::setVersion):
        (WebCore::IDBBackingStore::RecordIdentifier::RecordIdentifier):
        (Transaction):
        (WebCore::IDBBackingStore::Transaction::levelDBTransactionFrom):
        (CursorOptions):
        (Cursor):
        (WebCore::IDBBackingStore::Cursor::Cursor):
        (WebCore::IDBBackingStore::Cursor::key):
        (WebCore::IDBBackingStore::Cursor::primaryKey):
        (WebCore::IDBBackingStore::Cursor::~Cursor):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::openBackingStore):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::countInternal):
        * Modules/indexeddb/IDBLevelDBBackingStore.h: Removed.
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::backingStoreTransaction):
        * WebCore.xcodeproj/project.pbxproj:

2012-10-28  Timothy Hatcher  <timothy@apple.com>

        Make -webkit-canvas in CSS use the full backing store instead
        of always 1x when rendering.

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

        Reviewed by Dean Jackson.

        Test: fast/canvas/canvas-as-image-hidpi.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::makePresentationCopy): Pass Unscaled to copyImage.
        (WebCore::HTMLCanvasElement::copiedImage): Ditto.
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyImage): Added Scale parameter and use copyNativeImage for Unscaled.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::copyImage): Added unnamed ScaleBehavior parameter.
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::copyImage): Ditto.
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::copyImage): Ditto.
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::copyImage): Ditto.
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::copyImage): Ditto.

2012-10-28  Timothy Hatcher  <timothy@apple.com>

        Reset the canvas backing store pixel ratio when the buffer resizes.

        The backing store was not being recreated using the current page pixel ratio
        when a resize occurred.

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

        Reviewed by Darin Adler.

        Test: fast/canvas/canvas-resize-reset-pixelRatio.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement): Use targetDeviceScaleFactor.
        (WebCore::HTMLCanvasElement::reset): Do a clear only if the pixel ratios also
        match. Store the new pixel ratio in m_deviceScaleFactor.
        (WebCore::HTMLCanvasElement::targetDeviceScaleFactor): Added.
        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::setSize): Return early only if the sizes and
        pixel ratios match.

2012-11-08  Ryosuke Niwa  <rniwa@webkit.org>

        RemoveFormat command doesn't remove background color
        https://bugs.webkit.org/show_bug.cgi?id=101682

        Reviewed by Tony Chang.

        Fixed the bug by removing all non-transparent background-color properties.

        Test: editing/execCommand/remove-format-background-color.html

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

2012-11-09  Alec Flett  <alecflett@chromium.org>

        IndexedDB: switch frontend to use int64_t-based references
        https://bugs.webkit.org/show_bug.cgi?id=100426

        Reviewed by Tony Chang.

        Remove String-based objectStore/index references, obsoleted by
        https://bugs.webkit.org/show_bug.cgi?id=100425.

        No new tests as this is the second half of a refactor.

        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore::IDBObjectStoreMetadata::findIndex):
        (IDBObjectStoreMetadata):
        (WebCore::IDBObjectStoreMetadata::containsIndex):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):
        (WebCore):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        * inspector/Inspector-1.0.json:
        * inspector/Inspector.json:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorIndexedDBAgent.h:
        (InspectorIndexedDBAgent):

2012-11-09  Mario Sanchez Prada  <mario@webkit.org>

        [GTK] Isolate the GTK/Gail/Pango specific code in accessibility/gtk
        https://bugs.webkit.org/show_bug.cgi?id=101727

        Reviewed by Chris Fleizach.

        Added conditional compilation checks for GTK+ specific
        accessibility code, to pave the way for sharing this
        implementation with other ports (e.g WebKitEFL).

        * accessibility/gtk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextGetTextAfterOffset): Added conditional
        compilation checks, only implementing it in GTK so far.
        (webkitAccessibleTextGetTextAtOffset): Ditto.
        (webkitAccessibleTextGetTextBeforeOffset): Ditto.
        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
        (atkParentOfRootObject): Added conditional compilation checks,
        only implementing in GTK the part of getting the accessible object
        for the root object.
        (webkitAccessibleGetParent): Updated comments.
        (webkitAccessibleGetNChildren): Ditto.
        (webkitAccessibleRefChild): Ditto.
        (webkitAccessibleGetIndexInParent): Ditto.
        (webkitAccessibleGetAttributes): Only set the 'toolkit' attribute
        for GTK. Other ports might be interested in this too.
        (setAtkStateSetFromCoreObject): Updated comments.

2012-11-09  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Don't trigger any object deletion during RTCPeerConnection::stop
        https://bugs.webkit.org/show_bug.cgi?id=101586

        Reviewed by Adam Barth.

        Stop calling stop on the RTCPeerConnectionHandler, and don't delete it, when
        ActiveDOMObject::stop is called on RTCPeerConnection. Due to the async nature of the new
        API some WebCore objects might be cleaned away which is not allowed at this stage.

        This behaviour is not possible to test unfortunately in webkit.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::stop):

2012-11-09  Joshua Bell  <jsbell@chromium.org>

        [Chromium] Unreviewed gardening. Fix chromium-win builds following r134082

        * WebCore.gypi:

2012-11-09  Dan Carney  <dcarney@google.com>

        [V8] Remove ScriptController::windowShell()
        https://bugs.webkit.org/show_bug.cgi?id=100235

        Reviewed by Adam Barth.

        Refactored windowShell(DOMWrapperWorld*) and
        existingWindowShell(DOMWrapperWorld*) to be like JSC.

        No new tests. No change in functionality.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateToV8Converters):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::isolatedWorldMap):
        (WebCore::DOMWrapperWorld::getAllWorlds):
        (WebCore):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        * bindings/v8/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::clearForOutOfMemory):
        (WebCore):
        (WebCore::ScriptController::clearForClose):
        (WebCore::ScriptController::updateSecurityOrigin):
        (WebCore::ScriptController::initializeMainWorld): Returns true if the main world was initialized.
        (WebCore::existingWindowShellWorkaroundWorld):
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::currentWorldContext):
        (WebCore::ScriptController::mainWorldContext):
        (WebCore::ScriptController::haveInterpreter):
        (WebCore::ScriptController::enableEval):
        (WebCore::ScriptController::disableEval):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::setContextDebugId):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        (WebCore::ScriptController::getAllWorlds):
        * bindings/v8/V8Binding.cpp:
        (WebCore::perContextDataForCurrentWorld):
        (WebCore::handleOutOfMemory):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        (WebCore::V8DOMWindowShell::updateDocument):
        (WebCore::V8DOMWindowShell::namedItemAdded):
        (WebCore::V8DOMWindowShell::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.h:
        (WebCore::V8DOMWindowShell::isContextInitialized):
        (WebCore::V8DOMWindowShell::isGlobalInitialized):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::toV8):

2012-11-09  Adam Barth  <abarth@webkit.org>

        [V8] Remove a level of indirection in DOMDataStore
        https://bugs.webkit.org/show_bug.cgi?id=101690

        Reviewed by Kentaro Hara.

        There is no longer any reason for the DOMDataStore to hold the wrapper
        map via a pointer. It can just hold the wrapper map directly, saving a
        level of indirection. I doubt this has any measurable performance gain.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStore::reportMemoryUsage):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::get):
        (WebCore::DOMDataStore::set):
        (DOMDataStore):

2012-11-09  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Region styling properties are not filtered correctly
        https://bugs.webkit.org/show_bug.cgi?id=101768

        Reviewed by Andreas Kling.

        Region styling allows only a handful of css properties. There is a mechanism in place,
        in StyleResolver::isValidRegionStyleProperty that filters the supported region style properties.
        In order to be effective, this mechanism relies on RuleData::m_isInRegionRule being set correctly.
        This patch makes sure that the flag RuleData::m_isInRegionRule is set properly in RuleData constructor.

        Test: fast/regions/region-style-not-supported-properties.html

        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):

2012-11-09  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Deleting all files relating to the deprecated PeerConnection00
        https://bugs.webkit.org/show_bug.cgi?id=101730

        Reviewed by Adam Barth.

        Since RTCPeerConenction has superseeded PeerConnection00 this patch removes all
        files relating to the old API.

        No testing needed, the remaining tests makes sure that nothing else breaks.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/DOMWindowMediaStream.idl:
        * Modules/mediastream/IceCallback.h: Removed.
        * Modules/mediastream/IceCallback.idl: Removed.
        * Modules/mediastream/IceCandidate.cpp: Removed.
        * Modules/mediastream/IceCandidate.h: Removed.
        * Modules/mediastream/IceCandidate.idl: Removed.
        * Modules/mediastream/PeerConnection00.cpp: Removed.
        * Modules/mediastream/PeerConnection00.h: Removed.
        * Modules/mediastream/PeerConnection00.idl: Removed.
        * Modules/mediastream/SessionDescription.cpp: Removed.
        * Modules/mediastream/SessionDescription.h: Removed.
        * Modules/mediastream/SessionDescription.idl: Removed.
        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):
        * dom/EventTargetFactory.in:
        * platform/chromium/support/WebICECandidateDescriptor.cpp: Removed.
        * platform/chromium/support/WebICEOptions.cpp: Removed.
        * platform/chromium/support/WebMediaHints.cpp: Removed.
        * platform/mediastream/IceCandidateDescriptor.cpp: Removed.
        * platform/mediastream/IceCandidateDescriptor.h: Removed.
        * platform/mediastream/IceOptions.cpp: Removed.
        * platform/mediastream/IceOptions.h: Removed.
        * platform/mediastream/MediaHints.cpp: Removed.
        * platform/mediastream/MediaHints.h: Removed.
        * platform/mediastream/MediaStreamCenter.h:
        (WebCore):
        (MediaStreamCenter):
        * platform/mediastream/PeerConnection00Handler.cpp: Removed.
        * platform/mediastream/PeerConnection00Handler.h: Removed.
        * platform/mediastream/PeerConnection00HandlerClient.h: Removed.
        * platform/mediastream/SessionDescriptionDescriptor.cpp: Removed.
        * platform/mediastream/SessionDescriptionDescriptor.h: Removed.
        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp:
        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h:
        (WebCore):
        (MediaStreamCenterBlackBerry):
        * platform/mediastream/chromium/MediaStreamCenterChromium.cpp:
        * platform/mediastream/chromium/MediaStreamCenterChromium.h:
        (WebCore):
        (MediaStreamCenterChromium):
        * platform/mediastream/chromium/PeerConnection00Handler.cpp: Removed.
        * platform/mediastream/chromium/PeerConnection00HandlerInternal.cpp: Removed.
        * platform/mediastream/chromium/PeerConnection00HandlerInternal.h: Removed.
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
        (WebCore):
        (MediaStreamCenterGStreamer):

2012-11-09  Jer Noble  <jer.noble@apple.com>

        Plugin diagnostic logging should send plugin file basename instead of MIME type.
        https://bugs.webkit.org/show_bug.cgi?id=101679

        Reviewed by Eric Carlson.

        Log the basename of the plugin file rather than the mime type so as to more
        accurately log which plugin was used to handle the request.

        * loader/SubframeLoader.cpp:
        (WebCore::logPluginRequest): Log the plugin 'file' field, if present.
        * plugins/PluginData.cpp:
        (WebCore::PluginData::pluginInfoForMimeType): Factored out from pluginNameForMimeType.
        (WebCore::PluginData::pluginNameForMimeType): Use pluginInfoForMimeType to retrieve name field.
        (WebCore::PluginData::pluginFileForMimeType): Use pluginInfoForMimeType to retrieve file field.
        * plugins/PluginData.h:

2012-11-09  Alexey Proskuryakov  <ap@apple.com>

        CookieJar uses Document class, which is a layering violation
        https://bugs.webkit.org/show_bug.cgi?id=101621

        Reviewed by Brady Eidson.

        Split CookieJar in two parts, one that takes a Document, and another that is a pure
        platform one, using NetworkingContext to access the correct platform storage.

        * GNUmakefile.list.am:
        * PlatformBlackBerry.cmake:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Updated.

        * loader/CookieJar.cpp: Added.
        (WebCore::networkingContext):
        (WebCore::cookies):
        (WebCore::setCookies):
        (WebCore::cookiesEnabled):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        * loader/CookieJar.h: Copied from Source/WebCore/platform/CookieJar.h.
        This is an adaptor for pure platform implementations. Clients continue to use the
        old interface unchanged.

        * platform/blackberry/CookieJarBlackBerry.cpp: Removed.
        * loader/blackberry/CookieJarBlackBerry.cpp: Copied from Source/WebCore/platform/blackberry/CookieJarBlackBerry.cpp.
        * platform/network/chromium/CookieJarChromium.cpp: Removed.
        * loader/chromium/CookieJarChromium.cpp: Copied from Source/WebCore/platform/network/chromium/CookieJarChromium.cpp.
        These platforms do not have a pure platform implementation yet, so they just keep
        to use original implementations. Since the code is not in platform/ any more, the
        violation is resolved for Chromium and Blackberry, too.

        * platform/CookieJar.h: Removed.
        * platform/network/PlatformCookieJar.h: Copied from Source/WebCore/platform/CookieJar.h.
        The platform interface is now more uniform - all functions take a NetworkingContext
        instead of hardcoding which cookie storage to use in some cases.
        Renamed functions that are only useful for document.cookie implementation to look
        less generic.

        * platform/mac/CookieJar.mm: Removed.
        * platform/network/mac/CookieJarMac.mm: Copied from Source/WebCore/platform/mac/CookieJar.mm.
        (WebCore::cookiesForDOM): This now takes a context instead of Document, and also
        takes a firstParty URL (unused on Mac, but used on some other platforms).
        (WebCore::cookieRequestHeaderFieldValue): Get cookie storage from context (and
        use shared one if context is null).
        (WebCore::setCookiesFromDOM): Ditto.
        (WebCore::cookiesEnabled): Ditto.
        (WebCore::getRawCookies): Ditto.
        (WebCore::deleteCookie): Ditto.
        (WebCore::getHostnamesWithCookies): Ditto. This used to only support default storage,
        but its cleaner to have a uniform interface.
        (WebCore::deleteCookiesForHostname): Ditto.
        (WebCore::deleteAllCookies): Ditto.

        * platform/network/cf/CookieJarCFNet.cpp:
        Same changes as on Mac.

        * platform/network/curl/CookieJarCurl.cpp:
        Updated for new interface. Implementation is largely a dummy one.

        * platform/qt/CookieJarQt.h: Removed.
        * platform/network/qt/CookieJarQt.h: Copied from Source/WebCore/platform/qt/CookieJarQt.h.
        Moved to a common location, most cookie files were in network/ already.

        * platform/qt/CookieJarQt.cpp: Removed.
        * platform/network/qt/CookieJarQt.cpp: Copied from Source/WebCore/platform/qt/CookieJarQt.cpp.
        (WebCore::setCookiesFromDOM): Use context's or shared cooke jar as appropriate.
        (WebCore::cookiesForDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::cookiesEnabled): Ditto.
        (WebCore::getRawCookies): Ditto.
        (WebCore::deleteCookie): Ditto.
        (WebCore::getHostnamesWithCookies): Back-end implementation can only handle shared
        jar here, assert that argument does not request another one.
        (WebCore::deleteCookiesForHostname): Ditto.
        (WebCore::deleteAllCookies): Ditto.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieJarForContext):
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForContext):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        Updated for new function signatures, and use the same cross-platform logic for
        choosing a cookie jar.

        * platform/network/soup/CookieJarSoup.h: Don't include unnecessary CooieJar.h.
        
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        Updated for new function signatures.

2012-11-09  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [css] Text decoration's "blink" not valid when CSS3_TEXT is enabled
        https://bugs.webkit.org/show_bug.cgi?id=101750

        Reviewed by Ojan Vafai.

        This patch fixes an issue regarding "blink" value, which is valid for CSS 2.1
        "text-decoration" property, but recently have its parser function modified by
        the addition of CSS3 "-webkit-text-decoration-line" property.

        The 'fast/css/getComputedStyle/getComputedStyle-text-decoration.html'
        layout test is updated with all possible value combinations.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTextDecoration): Added 'blink' value to list
        if accepted.

2012-11-09  Xan Lopez  <xlopez@igalia.com>

        [GTK] Do not use 'ls' to list IDL files in EXTRA_DIST
        https://bugs.webkit.org/show_bug.cgi?id=101581

        Reviewed by Martin Robinson.

        Use normal GNU Make wildcards instead of 'ls' to list files in
        EXTRA_DIST, it's safer and more straightforward.

        * GNUmakefile.am: ditto.

2012-11-09  Charles Wei  <charles.wei@torchmobile.com.cn>

        Need to clear exception in JSDictionary that might have been caused by previous operation.
        https://bugs.webkit.org/show_bug.cgi?id=96614

        Reviewed by George Staikos.

        IndexedDB IDBDatabase::createObjectStore supports both String type of KeyPath and
        String Array type of KeyPath. It will first try to get the keyPath as a String Array,
        if fails, it will try to get KeyPath as a String, from the Dictionary. The first get
        will leave the internal ExecState of Dictionary in exception state. We need to clear
        the exception state before the 2nd query, otherwise the second query will also fail.

        No new tests. The existing test case LayoutTests/storage/indexeddb/tutorial.html should
        now work with this patch.
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::getWithUndefinedOrNullCheck):

2012-11-09  Keishi Hattori  <keishi@webkit.org>

        Month/week picker should submit month/week string
        https://bugs.webkit.org/show_bug.cgi?id=101744

        Reviewed by Kent Tamura.

        Month/week picker should submit month/week string and not yyyy-mm-dd.

        No new tests. Test will be added in Bug 101555 and Bug 101556.

        * Resources/pagepopups/calendarPicker.js:
        (DaysTable.prototype._handleDayClick):

2012-11-07  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: wrong output for empty object {}
        https://bugs.webkit.org/show_bug.cgi?id=101356

        Reviewed by Vsevolod Vlasov.

        Changed preview formatting to iterate over enumerable properties only + visit the prototypes.

        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._appendObjectPreview):

2012-11-09  Keishi Hattori  <keishi@webkit.org>

        Fix annotations in page popup files
        https://bugs.webkit.org/show_bug.cgi?id=101736

        Reviewed by Kent Tamura.

        Add @constructor where needed. Replacing /* with /** for annotations.

        No new tests. No behavior change.

        * Resources/pagepopups/calendarPicker.js:
        * Resources/pagepopups/pickerCommon.js:
        * Resources/pagepopups/suggestionPicker.js:

2012-11-09  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove a backing store of GraphicsLayer when the layer is far from the viewport.
        https://bugs.webkit.org/show_bug.cgi?id=101656

        Reviewed by Kenneth Rohde Christiansen.

        TiledBackingStore computes cover and keep rects to create, keep or remove tiles
        smartly, but currently TiledBackingStore expects a contents rect is big enough
        to cover the visibleRect. However, when CoordinatedGraphicsLayer uses TBS, it
        is usually wrong expectation.

        We must compute cover and keep rects using the visibleRect, instead of
        the rect intersecting the visibleRect with m_rect, because TBS can be
        used as a backing store of GraphicsLayer and the visible rect usually
        does not intersect with m_rect.
        In the below case, the intersecting rect is an empty.

         +---------------+
         |               |
         |   m_rect      |
         |       +-------|-----------------------+
         |       | HERE  |  cover or keep        |
         +---------------+      rect             |
                 |         +---------+           |
                 |         | visible |           |
                 |         |  rect   |           |
                 |         +---------+           |
                 |                               |
                 |                               |
                 +-------------------------------+

        We must create or keep the tiles in the HERE region. Currently in the
        case, we do not create or keep tiles on the HERE region. Moreover, in
        the case, we early return, which means we don't remove any tiles. It
        causes to waste heap and video memory.

        This patch changes TiledBackingStore to manage tiles smartly for
        Coordinated Graphics.

        Changing cache policy is not testable in layout tests.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::visibleRect):
        (WebCore::TiledBackingStore::visibleAreaIsCovered):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::adjustForContentsRect):
        (WebCore::TiledBackingStore::removeAllNonVisibleTiles):
        * platform/graphics/TiledBackingStore.h:
        (TiledBackingStore):

2012-11-09  Keishi Hattori  <keishi@webkit.org>

        Fix undefined variable in Week constructor for calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=101734

        Reviewed by Kent Tamura.

        Closer compiler found an undefined variable in the Week constructor.

        No new tests. This code isn't used.

        * Resources/pagepopups/calendarPicker.js:
        (Week): Used wrong variable name.

2012-11-09  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: render canvas log as a grid.
        https://bugs.webkit.org/show_bug.cgi?id=101732

        Reviewed by Vsevolod Vlasov.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype._onSelectTraceLog):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog.didReplayTraceLog):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog):
        (WebInspector.CanvasProfileHeader.prototype.traceLogId):
        (WebInspector.CanvasLogGrid):
        (WebInspector.CanvasLogGrid.prototype._didReceiveTraceLog):
        (WebInspector.CanvasLogGrid.prototype._createCallNode):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGridNode.prototype.createCell):
        * inspector/front-end/canvasProfiler.css:
        (#canvas-replay-image-container):

2012-11-09  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Regression(r107593) Crash in ContextMenuController::addInspectElementItem()
        https://bugs.webkit.org/show_bug.cgi?id=101595

        Reviewed by Simon Hausmann.

        If the contextMenu is a null pointer treat it as empty, appendItem will later
        create it if necessary.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::addInspectElementItem):

2012-11-09  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add support for custom cursors
        https://bugs.webkit.org/show_bug.cgi?id=101723

        Reviewed by Kenneth Rohde Christiansen.

        Add getEvasObject() virtual method to Image class and
        provide implementation for BitmapImage.

        No new tests, no behavior change.

        * platform/efl/CursorEfl.cpp:
        (WebCore::cursorString):
        * platform/graphics/BitmapImage.h:
        (BitmapImage):
        * platform/graphics/Image.h:
        (Image):
        (WebCore::Image::getEvasObject):
        * platform/graphics/efl/ImageEfl.cpp:
        (WebCore::BitmapImage::getEvasObject):
        (WebCore):

2012-11-09  Adam Barth  <abarth@webkit.org>

        IndexedDB should use mostly ScriptWrappable DOM objects
        https://bugs.webkit.org/show_bug.cgi?id=101694

        Reviewed by Kentaro Hara.

        These object always have JavaScript wrappers, so we should store the
        wrappers inline to use less memory and be faster.

        * Modules/indexeddb/IDBAny.h:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBKeyRange.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:

2012-11-09  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Add meaningful error message when request content was evicted from inspector cache.
        https://bugs.webkit.org/show_bug.cgi?id=101578

        Reviewed by Yury Semikhatsky.

        Added specific error message when request content was evicted from inspector cache.
        Replaced purge with evict in fields/methods names.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::getResponseBody):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::ResourceData):
        (WebCore::NetworkResourcesData::ResourceData::evictContent):
        (WebCore::NetworkResourcesData::setResourceContent):
        (WebCore::NetworkResourcesData::maybeAddResourceData):
        (WebCore::NetworkResourcesData::maybeDecodeDataToContent):
        (WebCore::NetworkResourcesData::ensureNoDataForRequestId):
        (WebCore::NetworkResourcesData::ensureFreeSpace):
        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::isContentEvicted):
        (ResourceData):

2012-11-09  Kent Tamura  <tkent@chromium.org>

        Don't use RenderTextControlSingleLine for date/time input types without the multiple-fields UI
        https://bugs.webkit.org/show_bug.cgi?id=101722

        Reviewed by Hajime Morita.

        Because the date/time input types are not textfields, we should not use
        RenderTextControlSingleLine, and don't need to create shadow trees for
        RenderTextControlSingleLine.

        No new tests. Covered by fast/forms/*/*-appearance-*.html.

        * css/html.css:
        (input[type="date"]):
        It has menulist appeanrace by default, and should be a flexible box to
        center the inner text. 10em width is almost same as the default width of
        text fields.
        (input[type="datetime"]): Ditto.
        (input[type="datetime-local"]): Ditto.
        (input[type="month"]): Ditto.
        (input[type="time"]): Ditto.
        (input[type="week"]): Ditto.
        (input::-webkit-date-and-time-value):
        Added. A style for the inner text block.
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::createRenderer):
        Don't create RenderTextControlSingleLine.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateInnerTextValue):
        Skip TextFieldInputType::updateInnerTextValue.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::forwardEvent):
        Skip TextFieldInputType::forwardEvent.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::createShadowSubtree):
        Just add one element to the shadow root.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateAppearance):
        Sets a localized value to the inner text block.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::setValue):
        Calls updateAppearance if the value is updated.
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        (BaseChooserOnlyDateAndTimeInputType): Declare updateAppearance,
        createRenderer, updateInnerTextValue, forwardEvent, createShadowSubtree,
        and setValue.
        * html/BaseDateAndTimeInputType.h:
        (WebCore): Add a FIXME comment.
        (BaseDateAndTimeInputType):
        Make visibleValue protected. It is used by BaseChooserOnlyDateAndTimeInputType.
        * html/TextFieldInputType.h:
        (TextFieldInputType):
        Make setValue protected. It is used by BaseChooserOnlyDateAndTimeInputType.

2012-11-09  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Clarify meaning of different urls in protocol.
        https://bugs.webkit.org/show_bug.cgi?id=101582

        Reviewed by Yury Semikhatsky.

        * inspector/Inspector.json:

2012-11-09  Keishi Hattori  <keishi@webkit.org>

        Month picker should select the current month when navigating while keeping selection position.
        https://bugs.webkit.org/show_bug.cgi?id=101724

        Reviewed by Kent Tamura.

        Month picker needs to behave differently because selection won't be in the same position when changing current month.

        No new tests. Test will be added in Bug 101556.

        * Resources/pagepopups/calendarPicker.js:
        (DaysTable.prototype.navigateToMonth): Date/Week picker should keep selection position for first selected date node.
        (DaysTable.prototype._startMoveInAnimation): Moving shared code to separate function.
        (MonthPickerDaysTable.prototype.navigateToMonth): Month picker should just select the month.

2012-11-09  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Fix heap snapshots counted several times by NMI
        https://bugs.webkit.org/show_bug.cgi?id=101085

        The fix moves snapshots size counting to V8PerIsolateData class. As long
        as it has one instance per isolate its reportMemoryUsage should be
        called once per isolate.

        Reviewed by Yury Semikhatsky.

        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::reportMemoryUsage):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::reportMemoryUsage):

2012-11-08  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: split SplitView into SplitView and SidebarView
        https://bugs.webkit.org/show_bug.cgi?id=101612

        Reviewed by Vsevolod Vlasov.

        Currently, SplitView is rather a sidebar view. I'm extracting the reusable split component from it.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        * inspector/front-end/CSSNamedFlowCollectionsView.js:
        (WebInspector.CSSNamedFlowCollectionsView):
        (WebInspector.CSSNamedFlowCollectionsView.prototype.wasShown):
        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/FileSystemView.js:
        (WebInspector.FileSystemView):
        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.CounterUI):
        (WebInspector.MemoryStatistics.prototype.setTopPosition):
        (WebInspector.MemoryStatistics.prototype.setSidebarWidth):
        (WebInspector.MemoryStatistics.prototype.visible):
        (WebInspector.MemoryStatistics.prototype.show):
        (WebInspector.MemoryStatistics.prototype.hide):
        * inspector/front-end/NavigatorOverlayController.js:
        (WebInspector.NavigatorOverlayController.prototype.set _pinNavigator):
        (WebInspector.NavigatorOverlayController.prototype.set showNavigatorOverlay):
        (WebInspector.NavigatorOverlayController.prototype.hideNavigatorOverlay):
        (WebInspector.NavigatorOverlayController.prototype._innerHideNavigatorOverlay):
        * inspector/front-end/NetworkPanel.js:
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.createSidebarView):
        (WebInspector.Panel.prototype.createSidebarViewWithTree):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/ResourcesPanel.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/SidebarView.js: Added.
        (WebInspector.SidebarView):
        (WebInspector.SidebarView.prototype._hasLeftSidebar):
        (WebInspector.SidebarView.prototype.get mainElement):
        (WebInspector.SidebarView.prototype.get sidebarElement):
        (WebInspector.SidebarView.prototype._innerSetSidebarPosition):
        (WebInspector.SidebarView.prototype.setMinimalSidebarWidth):
        (WebInspector.SidebarView.prototype.setMinimalMainWidthPercent):
        (WebInspector.SidebarView.prototype.setSidebarWidth):
        (WebInspector.SidebarView.prototype.sidebarWidth):
        (WebInspector.SidebarView.prototype.onResize):
        (WebInspector.SidebarView.prototype.applyConstraints):
        (WebInspector.SidebarView.prototype.hideMainElement):
        (WebInspector.SidebarView.prototype.showMainElement):
        (WebInspector.SidebarView.prototype.hideSidebarElement):
        (WebInspector.SidebarView.prototype.showSidebarElement):
        (WebInspector.SidebarView.prototype.elementsToRestoreScrollPositionsFor):
        * inspector/front-end/SplitView.js:
        (WebInspector.SplitView):
        (WebInspector.SplitView.prototype.firstElement):
        (WebInspector.SplitView.prototype.secondElement):
        (WebInspector.SplitView.prototype.setChangeFirstOnResize):
        (WebInspector.SplitView.prototype.resizerElement):
        (WebInspector.SplitView.prototype.showOnlyFirst):
        (WebInspector.SplitView.prototype.showOnlySecond):
        (WebInspector.SplitView.prototype._showOnly):
        (WebInspector.SplitView.prototype._removeAllLayoutProperties):
        (WebInspector.SplitView.prototype.showBoth):
        (WebInspector.SplitView.prototype.setResizable):
        (WebInspector.SplitView.prototype.setSplitOffset):
        (WebInspector.SplitView.prototype.splitOffset):
        (WebInspector.SplitView.prototype._innerSetSplitOffset):
        (WebInspector.SplitView.prototype._startResizerDragging):
        * inspector/front-end/TimelinePanel.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/splitView.css:

2012-11-09  Andrey Lushnikov  <lushnikov@google.com>

        Web Inspector: Ctrl+A in the network panel should select resource content, not the entire panel
        https://bugs.webkit.org/show_bug.cgi?id=101591

        Reviewed by Vsevolod Vlasov.

        Intercept Ctrl+A event in DefaultTextEditor to select resource content

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype._registerShortcuts): Added Ctrl+A
        (WebInspector.DefaultTextEditor.prototype._handleKeyDown): Intercept Ctrl+A even for readonly fields
        (WebInspector.TextEditorMainPanel.prototype.handleSelectAll):
        * inspector/front-end/KeyboardShortcut.js: Added SelectAll constant for Ctrl+A combination

2012-11-09  Dan Carney  <dcarney@google.com>

        [V8] Main world should have one DOMDataStore
        https://bugs.webkit.org/show_bug.cgi?id=101470

        Reviewed by Kentaro Hara.

        The main world DOMWrapperWorld held onto a DOMDataStore that should
        never be used, as there is a static one optimized for speed in
        DOMDataStore.

        No new tests. No change in functionality.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::isolatedWorldDomDataStore):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):

2012-11-09  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Navigating around NMI snapshot grid with keys breaks the grid
        https://bugs.webkit.org/show_bug.cgi?id=101611

        Reviewed by Yury Semikhatsky.

        Keys navigation cause populate message sent to the node. The node should
        not react on populate messages but the first one.

        * inspector/front-end/NativeMemorySnapshotView.js:

2012-11-08  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: "Send Request" events are shown out of order.
        https://bugs.webkit.org/show_bug.cgi?id=101544

        Reviewed by Yury Semikhatsky.

        Solution: replace obsolete out-of-order record pushing with frontend
        record reparenting.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willSendResourceRequest): Replaced
        direct record pushing with standard appendRecord invokation.
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype._findParentRecord):
        Made "Send Request" records top-level if gluing is on.

2012-11-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134010.
        http://trac.webkit.org/changeset/134010
        https://bugs.webkit.org/show_bug.cgi?id=101716

        Broke the chromium windows build. (Requested by noel_ on
        #webkit).

        * Modules/indexeddb/IDBAny.cpp:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::getObjectStoreId):
        (WebCore):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (WebCore):
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore::IDBObjectStoreMetadata::containsIndex):
        (WebCore::IDBDatabaseMetadata::findObjectStore):
        (IDBDatabaseMetadata):
        (WebCore::IDBDatabaseMetadata::containsObjectStore):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):
        (WebCore):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putWithIndexKeys):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReady):
        (WebCore::IDBObjectStoreBackendImpl::index):
        (WebCore::IDBObjectStoreBackendImpl::getIndexId):
        (WebCore::IDBObjectStoreBackendImpl::getIndexIds):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        (WebCore):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::objectStore):
        (WebCore):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

2012-11-08  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Add a method to the TextCheckerEnchant class to check whether any dictionary is loaded
        https://bugs.webkit.org/show_bug.cgi?id=101570

        Reviewed by Gustavo Noronha Silva.

        Expose a new method to check whether a vector of loaded languages is empty.
        WK2-EFL needs it to set the default language (if the client didn't set any) when
        spelling setting is being enabled. This change makes it more convenient to check
        whether the dictionaries vector is empty.

        No new tests, no behavior change.

        * platform/text/enchant/TextCheckerEnchant.cpp:
        (TextCheckerEnchant::checkSpellingOfString):
        (TextCheckerEnchant::getGuessesForWord):
        (TextCheckerEnchant::loadedSpellCheckingLanguages):
        A newly exposed method is used internally too.

        * platform/text/enchant/TextCheckerEnchant.h:
        (WebCore::TextCheckerEnchant::hasDictionary):
        Add an inline hasDictionary() method.

2012-11-08  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Remove shadowPseudoId() and use pseudo() instead in TextTrackCue
        https://bugs.webkit.org/show_bug.cgi?id=101702

        Reviewed by Hajime Morita.

        We're migrating shadowPseudoId() to pseudo(). We remove shadowPseudoId() from TextTrackCue and use
        setPseudo()/pseudo() instead.

        No new tests, simple refactoring.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::TextTrackCueBox):
        * html/track/TextTrackCue.h:
        (TextTrackCueBox):

2012-11-08  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        table not aligned in center column and seems shrunk because of float:right (table-layout: fixed and width: 100%)
        https://bugs.webkit.org/show_bug.cgi?id=18153

        Reviewed by Beth Dakin.

        Preferred logical width is computed incorrectly for fixed layout tables
        with 100% percent width, in standards mode.

        According to our fixed table layout algorithm (CSS2 specification - 17.5.2.1)
        the ultimate width of the table is the greater of the value of the
        'width' property for the table elements and the sum of the column
        widths.

        For our specific scenario we have a fixed layout table with 100% width
        consisting of columns with fixed widths, the sum of which is less than
        the specified width of the table (i.e. 100% of the containing block).
        Even then the applied width is the cummulative of the width of the
        columns.

        This happens because of the quirks mode check added in
        FixedTableLayout::computePreferredLogicalWidths(), which prohibits the
        setting of maxWidth to our fixed layout table with percent width, and
        which perhaps is not required anymore.

        Test: fast/table/fixed-table-layout/table-with-percent-width.html

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::computePreferredLogicalWidths):
        Removed the quirks mode check.

2012-11-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134004.
        http://trac.webkit.org/changeset/134004
        https://bugs.webkit.org/show_bug.cgi?id=101713

        multiple crashes (Requested by hayato on #webkit).

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMediaSliderThumbSize):
        (WebCore::RenderThemeMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeMac::paintMediaMuteButton):
        (WebCore::RenderThemeMac::paintMediaPlayButton):
        (WebCore::RenderThemeMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaSliderThumb):
        (WebCore::RenderThemeMac::paintMediaRewindButton):
        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton):
        (WebCore::RenderThemeMac::paintMediaToggleClosedCaptionsButton):
        (WebCore::RenderThemeMac::paintMediaControlsBackground):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
        (WebCore::RenderThemeMac::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeMac::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeMac::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeMac::paintMediaFullScreenVolumeSliderTrack):
        (WebCore::RenderThemeMac::paintMediaFullScreenVolumeSliderThumb):

2012-11-08  Jan Keromnes  <janx@linux.com>

        Web Inspector: stop using cursorCoords in CodeMirrorTextEditor
        https://bugs.webkit.org/show_bug.cgi?id=101607

        Reviewed by Vsevolod Vlasov.

        API changes completing migration to v3.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        (WebInspector.CodeMirrorTextEditor.prototype.revealLine):
        (WebInspector.CodeMirrorTextEditor.prototype.selection):

2012-11-08  Alexei Filippov  <alph@chromium.org>

        Web Inspector: make "Other" bar color darker in NMI snapshot.
        https://bugs.webkit.org/show_bug.cgi?id=101602

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.MemoryBlockViewProperties._initialize):

2012-11-08  Alec Flett  <alecflett@chromium.org>

        IndexedDB: switch frontend to use int64_t-based references
        https://bugs.webkit.org/show_bug.cgi?id=100426

        Reviewed by Tony Chang.

        Remove String-based objectStore/index references, obsoleted by
        https://bugs.webkit.org/show_bug.cgi?id=100425.

        No new tests as this is the second half of a refactor.

        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore::IDBObjectStoreMetadata::findIndex):
        (IDBObjectStoreMetadata):
        (WebCore::IDBObjectStoreMetadata::containsIndex):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):
        (WebCore):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        * inspector/Inspector-1.0.json:
        * inspector/Inspector.json:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorIndexedDBAgent.h:
        (InspectorIndexedDBAgent):

2012-11-08  Shinya Kawanaka  <shinyak@chromium.org>

        [Refactoring] Expose collectFeaturesFromSelector from RuleSet.cpp
        https://bugs.webkit.org/show_bug.cgi?id=101692

        Reviewed by Dimitri Glazkov.

        We expose collectFeaturesFromSelector in RuleSet.cpp to use it for collecting ShadowDOM select attribute features.

        No new tests, simple refactoring.

        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::collectFeaturesFromSelector): Moved from RuleSet.cpp.
        (WebCore):
        * css/RuleFeature.h:
        (WebCore):
        (RuleFeatureSet):
        * css/RuleSet.cpp:
        (WebCore::collectFeaturesFromRuleData):

2012-11-08  Robert Sesek  <rsesek@chromium.org>

        Guard calls to WebKitSystemInterface media control drawing functions in RenderThemeMac with PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=101634

        Reviewed by Adam Barth.

        No new tests, just disabling unused code in Chromium port.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMediaSliderThumbSize):
        (WebCore::RenderThemeMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeMac::paintMediaMuteButton):
        (WebCore::RenderThemeMac::paintMediaPlayButton):
        (WebCore::RenderThemeMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaSliderThumb):
        (WebCore::RenderThemeMac::paintMediaRewindButton):
        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton):
        (WebCore::RenderThemeMac::paintMediaToggleClosedCaptionsButton):
        (WebCore::RenderThemeMac::paintMediaControlsBackground):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
        (WebCore::RenderThemeMac::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeMac::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeMac::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeMac::paintMediaFullScreenVolumeSliderTrack):
        (WebCore::RenderThemeMac::paintMediaFullScreenVolumeSliderThumb):

2012-11-08  Keishi Hattori  <keishi@webkit.org>

        Enable calendar picker for input types week/month
        https://bugs.webkit.org/show_bug.cgi?id=101553

        Reviewed by Kent Tamura.

        Enabling calendar picker for <input type=week/month>

        No new tests. Tests will be added later in Bug 101556 and Bug 101555.

        * rendering/RenderThemeChromiumCommon.cpp:
        (WebCore::RenderThemeChromiumCommon::supportsCalendarPicker):

2012-11-08  Robin Cao  <robin.cao@torchmobile.com.cn>

        [BlackBerry] Change the default return value of MediaPlayerPrivate::hasSingleSecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=101681

        Reviewed by George Staikos.

        Since the platform player in BlackBerry disallows resources that come from different origins,
        so it's safe to directly returns true here.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):

2012-11-08  Mark Lam  <mark.lam@apple.com>

        Renamed ...InlineMethods.h files to ...Inlines.h.
        https://bugs.webkit.org/show_bug.cgi?id=101145.

        Reviewed by Geoffrey Garen.

        This is only a refactoring effort to rename the files. There are no
        functionality changes.

        No new tests.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLEntityParser.cpp:
        * html/parser/HTMLTokenizer.cpp:
        * html/track/WebVTTTokenizer.cpp:
        * xml/parser/CharacterReferenceParserInlineMethods.h: Removed.
        * xml/parser/CharacterReferenceParserInlines.h: Copied from Source/WebCore/xml/parser/CharacterReferenceParserInlineMethods.h.
        * xml/parser/MarkupTokenizerInlineMethods.h: Removed.
        * xml/parser/MarkupTokenizerInlines.h: Copied from Source/WebCore/xml/parser/MarkupTokenizerInlineMethods.h.
        * xml/parser/XMLCharacterReferenceParser.cpp:
        * xml/parser/XMLTokenizer.cpp:

2012-11-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133984.
        http://trac.webkit.org/changeset/133984
        https://bugs.webkit.org/show_bug.cgi?id=101684

        windows build error. (Requested by hayato on #webkit).

        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::getObjectStoreId):
        (WebCore):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore::IDBObjectStoreMetadata::containsIndex):
        (WebCore::IDBDatabaseMetadata::findObjectStore):
        (IDBDatabaseMetadata):
        (WebCore::IDBDatabaseMetadata::containsObjectStore):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):
        (WebCore):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putWithIndexKeys):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReady):
        (WebCore::IDBObjectStoreBackendImpl::index):
        (WebCore::IDBObjectStoreBackendImpl::getIndexId):
        (WebCore::IDBObjectStoreBackendImpl::getIndexIds):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::objectStore):
        (WebCore):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

2012-11-08  Shinya Kawanaka  <shinyak@chromium.org>

        HTMLContentElement should preserve parsed CSSSelectorList
        https://bugs.webkit.org/show_bug.cgi?id=101543

        Reviewed by Dimitri Glazkov.

        We would like to preserve CSSSelectorList for select attribute of HTMLContentElement.

        Before, we parsed and validated select attribute every time distribution happens. If we preserve the parsed
        CSSSelectorList, we can reduce distribution time.

        This is also a prepration patch for Bug 101180. It also needs the parsed CSSSelectorList. We don't want to
        parse and validate it again.

        No new tests, covered by exising tests.

        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorQuery::ContentSelectorQuery): We don't parse select attribute here anymore.
        if it's already parsed.
        (WebCore::ContentSelectorQuery::matches):
        * html/shadow/ContentSelectorQuery.h:
        (ContentSelectorQuery):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::HTMLContentElement):
        (WebCore::HTMLContentElement::isSelectValid):
        (WebCore::HTMLContentElement::ensureSelectParsed): If we don't have parsed the current select attribute,
        we parse and validate it.
        (WebCore::HTMLContentElement::parseAttribute): When select attribute is changed, we have to have a flag enabled
        to parse select attrite again.
        (WebCore::validateSubSelector): Moved from ContentSelectorQuery.
        (WebCore):
        (WebCore::validateSelector): Moved from ContentSelectorQuery.
        (WebCore::HTMLContentElement::validateSelect):
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        (WebCore::HTMLContentElement::setSelect):
        (WebCore):
        (WebCore::HTMLContentElement::selectorList):
        * html/shadow/HTMLShadowElement.cpp:
        (WebCore::HTMLShadowElement::emptySelectorList):
        (WebCore):
        * html/shadow/HTMLShadowElement.h:
        (HTMLShadowElement):
        (WebCore::HTMLShadowElement::selectorList):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):

2012-11-08  Alec Flett  <alecflett@chromium.org>

        IndexedDB: switch frontend to use int64_t-based references
        https://bugs.webkit.org/show_bug.cgi?id=100426

        Reviewed by Tony Chang.

        Remove String-based objectStore/index references, obsoleted by
        https://bugs.webkit.org/show_bug.cgi?id=100425.

        No new tests as this is the second half of a refactor.

        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore::IDBObjectStoreMetadata::findIndex):
        (IDBObjectStoreMetadata):
        (WebCore::IDBObjectStoreMetadata::containsIndex):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put):
        (WebCore):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        * inspector/Inspector-1.0.json:
        * inspector/Inspector.json:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorIndexedDBAgent.h:
        (InspectorIndexedDBAgent):

2012-11-08  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Arabic digits should appear left-to-right
        https://bugs.webkit.org/show_bug.cgi?id=101440

        Reviewed by Tony Chang.

        Call hb_buffer_set_direction() to set direction when drawing glyphs or
        direction should be overridden. Leave direction setting to HarfBuzz when
        WebKit is calculating widths because the direction is LTR by default while
        calculating widths.  Set script before shaping so that HarfBuzz can estimate
        appropriate direction.

        Test: fast/text/international/arabic-digits.html

        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::HarfBuzzRun):
        Add m_script. This holds the script of the run.
        (WebCore::HarfBuzzShaper::shape):
        Tell shapeHarfBuzzRuns() to set direction when drawing glyphs or
        direction should be overridden.
        (WebCore::HarfBuzzShaper::collectHarfBuzzRuns):
        Set script of HarfBuzzRuns.
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):
        Add an argument that indicates it should set direction.
        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.h:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::create):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::rtl):
        (WebCore::HarfBuzzShaper::HarfBuzzRun::script):
        (HarfBuzzRun):
        (HarfBuzzShaper):

2012-11-08  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Remove contentsLayer() in GraphicsLayerTextureMapper.
        https://bugs.webkit.org/show_bug.cgi?id=101658

        Reviewed by Noam Rosenthal.

        GraphicsLayerTextureMapper::contentsLayer() is duplicated to
        GraphicsLayer::platformLayer(), so we remove it.

        No new tests, this is just a refactor.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore::GraphicsLayerTextureMapper::platformLayer):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::flushCompositingStateSelf):

2012-11-08  Benjamin Poulain  <benjamin@webkit.org>

        Improve the use of AtomicString with literals
        https://bugs.webkit.org/show_bug.cgi?id=101298

        Reviewed by Darin Adler.

        Fix a bunch of cases of AtomicString with literals:
        -Do not create temporary AtomicString to perform a comparison, that is very wasteful.
        -Use the ConstructFromLiteral constructor whenever it makes sense.
        -Make "x-frame-options" static instead of creating it for each response.
        -Use ASCIILiteral() instead of AtomicString() in EventHandler, the function takes a String,
         not an AtomicString.

        * Modules/battery/BatteryController.cpp:
        (WebCore::BatteryController::supplementName):
        * Modules/battery/NavigatorBattery.cpp:
        (WebCore::NavigatorBattery::from):
        * Modules/filesystem/chromium/DraggedIsolatedFileSystem.cpp:
        (WebCore::DraggedIsolatedFileSystem::supplementName):
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::from):
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::supplementName):
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::from):
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::from):
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::directionNext):
        (WebCore::IDBCursor::directionNextUnique):
        (WebCore::IDBCursor::directionPrev):
        (WebCore::IDBCursor::directionPrevUnique):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::readyState):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::modeReadOnly):
        (WebCore::IDBTransaction::modeReadWrite):
        (WebCore::IDBTransaction::modeVersionChange):
        (WebCore::IDBTransaction::modeReadOnlyLegacy):
        (WebCore::IDBTransaction::modeReadWriteLegacy):
        * Modules/indexeddb/PageGroupIndexedDatabase.cpp:
        (WebCore::PageGroupIndexedDatabase::from):
        * Modules/intents/DOMWindowIntents.cpp:
        (WebCore::DOMWindowIntents::from):
        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::UserMediaController::supplementName):
        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::NavigatorContentUtils::supplementName):
        * Modules/networkinfo/NavigatorNetworkInfoConnection.cpp:
        (WebCore::NavigatorNetworkInfoConnection::from):
        * Modules/networkinfo/NetworkInfoController.cpp:
        (WebCore::NetworkInfoController::supplementName):
        * Modules/notifications/DOMWindowNotifications.cpp:
        (WebCore::DOMWindowNotifications::from):
        * Modules/notifications/NotificationController.cpp:
        (WebCore::NotificationController::supplementName):
        * Modules/quota/DOMWindowQuota.cpp:
        (WebCore::DOMWindowQuota::from):
        * Modules/speech/SpeechRecognitionController.cpp:
        (WebCore::SpeechRecognitionController::supplementName):
        * Modules/vibration/Vibration.cpp:
        (WebCore::Vibration::supplementName):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::invalidStatus):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaLiveRegionStatus):
        (WebCore::AccessibilityRenderObject::ariaLiveRegionRelevant):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::namedSecurityCheck):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::namedPropertyGetter):
        * dom/ContextFeatures.cpp:
        (WebCore::ContextFeatures::supplementName):
        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::supplementName):
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::supplementName):
        * dom/Element.cpp:
        (WebCore::Element::webkitRegionOverset):
        * dom/MutationRecord.cpp:
        * html/FileInputType.cpp:
        (WebCore::UploadButtonElement::shadowPseudoId):
        * html/FormController.cpp:
        (WebCore::SavedFormState::getReferencedFilePaths):
        (WebCore::FormKeyGenerator::formKey):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::formControlType):
        * html/HTMLDetailsElement.cpp:
        (WebCore::summaryQuerySelector):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::formControlType):
        * html/HTMLKeygenElement.cpp:
        (WebCore::KeygenSelectElement::shadowPseudoId):
        (WebCore::HTMLKeygenElement::formControlType):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::formControlType):
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::formControlType):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::formControlType):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::formControlType):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::directionString):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::DateTimeEditElement):
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeAMPMFieldElement::create):
        (WebCore::DateTimeDayFieldElement::create):
        (WebCore::DateTimeHourFieldElement::create):
        (WebCore::DateTimeMillisecondFieldElement::create):
        (WebCore::DateTimeMinuteFieldElement::create):
        (WebCore::DateTimeMonthFieldElement::create):
        (WebCore::DateTimeSecondFieldElement::create):
        (WebCore::DateTimeSymbolicMonthFieldElement::create):
        (WebCore::DateTimeWeekFieldElement::create):
        (WebCore::DateTimeYearFieldElement::create):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::shadowPseudoId):
        * html/shadow/ImageInnerElement.cpp:
        (WebCore::ImageInnerElement::shadowPseudoId):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::shadowPseudoId):
        (WebCore::MediaControlTimelineContainerElement::shadowPseudoId):
        (WebCore::MediaControlVolumeSliderContainerElement::shadowPseudoId):
        (WebCore::MediaControlStatusDisplayElement::shadowPseudoId):
        (WebCore::MediaControlPanelMuteButtonElement::shadowPseudoId):
        (WebCore::MediaControlVolumeSliderMuteButtonElement::shadowPseudoId):
        (WebCore::MediaControlPlayButtonElement::shadowPseudoId):
        (WebCore::MediaControlOverlayPlayButtonElement::shadowPseudoId):
        (WebCore::MediaControlSeekForwardButtonElement::shadowPseudoId):
        (WebCore::MediaControlSeekBackButtonElement::shadowPseudoId):
        (WebCore::MediaControlRewindButtonElement::shadowPseudoId):
        (WebCore::MediaControlReturnToRealtimeButtonElement::shadowPseudoId):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId):
        (WebCore::MediaControlTimelineElement::shadowPseudoId):
        (WebCore::MediaControlVolumeSliderElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenVolumeSliderElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenButtonElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::shadowPseudoId):
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::shadowPseudoId):
        (WebCore::MediaControlTimeRemainingDisplayElement::shadowPseudoId):
        (WebCore::MediaControlCurrentTimeDisplayElement::shadowPseudoId):
        (WebCore::MediaControlTextTrackContainerElement::shadowPseudoId):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::shadowPseudoId):
        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlPanelEnclosureElement::shadowPseudoId):
        (WebCore::MediaControlRootElementChromium::shadowPseudoId):
        * html/shadow/MediaControlRootElementChromiumAndroid.cpp:
        (WebCore::MediaControlOverlayEnclosureElement::shadowPseudoId):
        * html/shadow/MeterShadowElement.cpp:
        (WebCore::MeterInnerElement::shadowPseudoId):
        (WebCore::MeterBarElement::shadowPseudoId):
        (WebCore::MeterValueElement::shadowPseudoId):
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressInnerElement::shadowPseudoId):
        (WebCore::ProgressBarElement::shadowPseudoId):
        (WebCore::ProgressValueElement::shadowPseudoId):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::sliderThumbShadowPseudoId):
        (WebCore::mediaSliderThumbShadowPseudoId):
        (WebCore::SliderContainerElement::shadowPseudoId):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::shadowPseudoId):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::shadowPseudoId):
        (WebCore::SearchFieldCancelButtonElement::shadowPseudoId):
        (WebCore::InputFieldSpeechButtonElement::shadowPseudoId):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::textTrackCueBoxShadowPseudoId):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * loader/PrerendererClient.cpp:
        (WebCore::PrerendererClient::supplementName):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::updateResponseAfterRevalidation):
        * page/DOMWindowPagePopup.cpp:
        (WebCore::DOMWindowPagePopup::supplementName):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handlePasteGlobalSelection):
        (WebCore::focusDirectionForKey):
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::supplementName):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        * platform/graphics/FontCache.cpp:
        (WebCore::alternateFamilyName):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::applicationOctetStream):
        (WebCore::textPlain):
        (WebCore::codecs):
        * platform/graphics/chromium/FontCacheAndroid.cpp:
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::effectName):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::effectName):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/skia/FontCacheSkia.cpp:
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/wx/FontCacheWx.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::hasCacheValidatorFields):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        (WebCore::ResourceResponseBase::isAttachment):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::getAvgCharWidth):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::getAvgCharWidth):
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        * svg/SVGAnimateColorElement.cpp:
        (WebCore::attributeValueIsCurrentColor):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::rotateMode):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setCalcMode):
        (WebCore::SVGAnimationElement::setAttributeType):
        (WebCore::SVGAnimationElement::isAdditive):
        (WebCore::SVGAnimationElement::isAccumulated):
        (WebCore::inheritsFromProperty):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::kernelUnitLengthXIdentifier):
        (WebCore::SVGFEConvolveMatrixElement::kernelUnitLengthYIdentifier):
        (WebCore::SVGFEConvolveMatrixElement::orderXIdentifier):
        (WebCore::SVGFEConvolveMatrixElement::orderYIdentifier):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthXIdentifier):
        (WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthYIdentifier):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::stdDeviationXIdentifier):
        (WebCore::SVGFEDropShadowElement::stdDeviationYIdentifier):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::stdDeviationXIdentifier):
        (WebCore::SVGFEGaussianBlurElement::stdDeviationYIdentifier):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::radiusXIdentifier):
        (WebCore::SVGFEMorphologyElement::radiusYIdentifier):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::kernelUnitLengthXIdentifier):
        (WebCore::SVGFESpecularLightingElement::kernelUnitLengthYIdentifier):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::baseFrequencyXIdentifier):
        (WebCore::SVGFETurbulenceElement::baseFrequencyYIdentifier):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::filterResXIdentifier):
        (WebCore::SVGFilterElement::filterResYIdentifier):
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::xmlspace):
        (WebCore::SVGLangSpace::addSupportedAttributes):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::orientTypeIdentifier):
        (WebCore::SVGMarkerElement::orientAngleIdentifier):
        (WebCore::SVGMarkerElement::synchronizeOrientType):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::contentScriptType):
        (WebCore::SVGSVGElement::contentStyleType):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::type):
        (WebCore::SVGStyleElement::media):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::collectStyleForAttribute):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::viewBoxIdentifier):
        (WebCore::SVGViewSpec::preserveAspectRatioIdentifier):
        (WebCore::SVGViewSpec::transformIdentifier):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseClockValue):
        (WebCore::SVGSMILElement::restart):
        (WebCore::SVGSMILElement::fill):
        (WebCore::SVGSMILElement::repeatCount):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::from):
        * xml/parser/XMLTreeBuilder.cpp:
        (WebCore::XMLTreeBuilder::processDOCTYPE):
        (WebCore::XMLTreeBuilder::processXMLEntity):

2012-11-08  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=101644
        Fixed header on Facebook news feed becomes detached from top of 
        viewport after rubber band scrolling
        -and corresponding-
        <rdar://problem/12651944>

        Reviewed by Simon Fraser.

        There is code to handle this for non-threaded scrolling on FrameView. 
        This patch moves most of that code into a convenience function on 
        ScrollingCoordinator.

        Have FrameView::scrollOffsetForFixedPosition() call 
        WebCore::scrollOffsetForFixedPosition() with all the right 
        parameters.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollOffsetForFixedPosition):

        Here's where all the math happens.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::fixedPositionScrollOffset):
        (WebCore::scrollOffsetForFixedPosition):

        The viewportRect in these three places needs to have the 
        adjusted-for-fixed offset.
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):

2012-11-08  Alpha Lam  <hclam@chromium.org>

        [chromium] Deferred image decoding fails with image orientation
        https://bugs.webkit.org/show_bug.cgi?id=101648

        Reviewed by Stephen White.

        When an image is deferred save the orientation state. Once this state
        is cached it can be used to reply future queries since this state is
        static.

        No new tests but platform/chromium/virtual/deferred/fast/images/image-orientation.html is passing now.

        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::DeferredImageDecoder):
        (WebCore::DeferredImageDecoder::frameBufferAtIndex):
        (WebCore::DeferredImageDecoder::orientation):
        * platform/graphics/chromium/DeferredImageDecoder.h:
        (DeferredImageDecoder):

2012-11-08  Andreas Kling  <kling@webkit.org>

        DocumentLoader: Shrink-to-fit the ResourceResponse vector after loading completes.
        <http://webkit.org/b/101657>

        Reviewed by Anders Carlsson.

        Shrink DocumentLoader::m_responses to exact size when we stop adding responses to it,
        as we know it won't grow after that.

        520kB progression on Membuster3.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopRecordingResponses):

2012-11-08  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Polygon with horizontal bottom edges returns incorrect segments
        https://bugs.webkit.org/show_bug.cgi?id=100874

        Reviewed by Dirk Schulze.

        Revised the way that computeXIntersections() handles intersections with horizotal polygon edges.
        Deciding if a vertex intersection corresponds to a polygon "edge crossing", i.e. a change from inside
        to outside or outside to inside, now depends on which side of the horizontal line the function's
        y parameter corresponds to. If the y corresponds to the top of the line, then isaMinY the parameter
        is true, and an intersection with a horizontal edge is only considered to be an edge crossing if
        if the inside of the polygon is just below the horizontal edge.  When isMinY is false then the inside
        of the polygon must be just above the horizontal edge.

        Tests: fast/exclusions/shape-inside/shape-inside-rectilinear-polygon-003.html
               fast/exclusions/shape-inside/shape-inside-rectilinear-polygon-004.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::getVertexIntersectionVertices): Corrected two cases where the next/previous vertex was determined incorrectly.
        (WebCore::ExclusionPolygon::computeXIntersections): Added a bool isMinY parameter which specifies if the y parameter corresponds to the top or bottom a horizontal line.
        (WebCore::ExclusionPolygon::getExcludedIntervals): Added the new computeXIntersections() parameter.
        (WebCore::ExclusionPolygon::getIncludedIntervals): Ditto.
        * rendering/ExclusionPolygon.h:
        (WebCore::ExclusionPolygonEdge::previousEdge): Corrected the previousEdge() function.

2012-11-08  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Disable cookies on file://
        https://bugs.webkit.org/show_bug.cgi?id=101646

        Reviewed by Rob Buis.

        Disabling cookies on file and local in the browser app.

        PR 239779

        Tested by trying to set and retrieve cookies on WI while browsing
        files on the file scheme.

        * platform/blackberry/CookieManager.cpp:
        (WebCore):
        (WebCore::shouldIgnoreScheme):
        (WebCore::CookieManager::getRawCookies):
        (WebCore::CookieManager::checkAndTreatCookie):

2012-11-08  Joshua Bell  <jsbell@chromium.org>

        Expose snapshots in platform/leveldb wrapper API
        https://bugs.webkit.org/show_bug.cgi?id=100786

        Reviewed by Tony Chang.

        Expose leveldb "snapshots" in the LevelDB API. A snapshot lets you observe the database
        as it was when the snapshot was taken. This can be used to implement parallel transactions,
        e.g. where a read transaction won't see updates made by a later write transaction.

        Tests: webkit_unit_tests --gtest_filter='LevelDBDatabaseTest.Transaction*'

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBSnapshot::LevelDBSnapshot): New (but for now internal-only) wrapper type.
        (WebCore):
        (WebCore::LevelDBSnapshot::~LevelDBSnapshot): Release the leveldb::Snapshot.
        (WebCore::LevelDBDatabase::get): Optional snapshot argument, for use by transactions.
        (WebCore::LevelDBDatabase::createIterator): Ditto.
        * platform/leveldb/LevelDBDatabase.h:
        (leveldb):
        (WebCore):
        (LevelDBSnapshot):
        (LevelDBDatabase):
        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::LevelDBTransaction): Initialize a snapshot.
        (WebCore::LevelDBTransaction::get):
        (WebCore::LevelDBTransaction::TransactionIterator::TransactionIterator):
        * platform/leveldb/LevelDBTransaction.h:
        (LevelDBTransaction):

2012-11-08  Brady Eidson  <beidson@apple.com>

        Have NetworkProcess do the actual loading of subresources.
        https://bugs.webkit.org/show_bug.cgi?id=101640

        Reviewed by Alexey Proskuryakov.

        No new tests (No change in behavior in any configuration we test.)

        * WebCore.exp.in:
        * loader/ResourceBuffer.h: Virtualize a few methods for ports to override.

2012-11-08  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove an invisible TiledBackingStore of CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=101424

        Reviewed by Noam Rosenthal.

        This patch adds ASSERT to TextureMapperLayer while fixing this bug in
        WebKit2.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):

2012-11-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133945.
        http://trac.webkit.org/changeset/133945
        https://bugs.webkit.org/show_bug.cgi?id=101645

        Numerous layout and unit test failures (Requested by
        jsbell|gardener on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::V8Float64Array::toNative):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::toNative):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::toNative):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::toNative):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::toNative):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::toNative):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::toNative):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::toNative):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::toNative):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::V8TestNode::toNative):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::V8TestObj::toNative):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::toNative):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::v8ObjectToNPObject):
        (WebCore::npCreateV8ScriptObject):
        * bindings/v8/V8Collection.h:
        (WebCore::toNativeCollection):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::setIsolatedWorldField):
        (WebCore::V8DOMWindowShell::enteredIsolatedWorldContext):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::isWrapperOfType):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::setDOMWrapper):
        (WebCore::V8DOMWrapper::clearDOMWrapper):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore::toNative):
        (WebCore::toWrapperTypeInfo):

2012-11-01  Filip Pizlo  <fpizlo@apple.com>

        JSC should infer when indexed storage contains only integers or doubles
        https://bugs.webkit.org/show_bug.cgi?id=98606

        Reviewed by Oliver Hunt.

        Just refactoring WebCore to pass 0 for the ArrayAllocationProfile*.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::webkitLineDash):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsArray):
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsArray):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::getJSListenerFunctions):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::ports):
        * bindings/js/JSMutationCallbackCustom.cpp:
        (WebCore::JSMutationCallback::handleEvent):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        (WebCore::JSWebGLRenderingContext::getSupportedExtensions):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::deserialize):

2012-11-08  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 date input form.
        https://bugs.webkit.org/show_bug.cgi?id=101075

        Reviewed by Rob Buis.

        RIM PR 234531
        Internally Reviewed by Mike Fenton.
        Change date input appearance to button and hide caret when click on them.

        * css/themeBlackBerry.css:
        (input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="month"]):

2012-11-08  Adam Barth  <abarth@webkit.org>

        [V8] Update callers to use the aligned pointer API rather than the deprecated unaligned pointer API
        https://bugs.webkit.org/show_bug.cgi?id=101519

        Reviewed by Ojan Vafai.

        There should be no change in behavior.  The new API is slightly faster
        than the old API (and apparently works correctly internally in V8).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::V8Float64Array::toNative):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::toNative):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::toNative):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::toNative):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::toNative):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::toNative):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::toNative):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::toNative):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::toNative):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::V8TestNode::toNative):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::V8TestObj::toNative):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::toNative):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::v8ObjectToNPObject):
        (WebCore::npCreateV8ScriptObject):
        * bindings/v8/V8Collection.h:
        (WebCore::toNativeCollection):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::setIsolatedWorldField):
        (WebCore::V8DOMWindowShell::enteredIsolatedWorldContext):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::isWrapperOfType):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::setDOMWrapper):
        (WebCore::V8DOMWrapper::clearDOMWrapper):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore::toNative):
        (WebCore::toWrapperTypeInfo):

2012-11-08  Erik Arvidsson  <arv@chromium.org>

        setAttributeNode and friends should not have optional argument
        https://bugs.webkit.org/show_bug.cgi?id=101631

        Reviewed by Ojan Vafai.

        http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-887236154

        Fix getAttributeNode, getAttributeNodeNS and removeAttributeNode to make the Attr
        argument mandatory.

        These used to throw DOMExceptions when an invalid type was passed instead of
        TypeError which is also a spec violation.

        Updated existing tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        * dom/Element.cpp:
        * dom/Element.idl:

2012-11-08  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove unused error handling clauses when writing to transaction
        https://bugs.webkit.org/show_bug.cgi?id=100700

        Reviewed by Tony Chang.

        Transactions are written into in-memory data structures. This can only fail if allocation
        fails, so "success" results are always returned. Change the return types to void, and delete
        all of the unreachable error handling code.

        No new tests - just refactoring/dead code removal.

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::putBool): Only write to transactions.
        (WebCore):
        (WebCore::putInt): Ditto.
        (WebCore::putVarInt): Ditto.
        (WebCore::putString): Ditto.
        (WebCore::putIDBKeyPath): Ditto.
        (WebCore::IDBLevelDBBackingStore::updateIDBDatabaseIntVersion):
        (WebCore::IDBLevelDBBackingStore::updateIDBDatabaseMetaData):
        (WebCore::deleteRange): Writes only to transaction, so can't fail.
        (WebCore::setMaxObjectStoreId):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::getNewVersionNumber):
        (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::setMaxIndexId):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::set): Return type is void.
        (WebCore::LevelDBTransaction::put): Ditto.
        (WebCore::LevelDBTransaction::remove): Ditto.
        * platform/leveldb/LevelDBTransaction.h:
        (LevelDBTransaction):

2012-11-08  Ryosuke Niwa  <rniwa@webkit.org>

        On Chromium, click-after-nested-block.html, focus_editable_html.html, and autoscroll.html
        hit assertion added in r133840
        https://bugs.webkit.org/show_bug.cgi?id=101576

        Reviewed by Abhishek Arya.

        Update layout before invalidating caret rect as needed.
        Existing tests cover this.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setCaretVisibility): Merged clearCaretRectIfNeeded.
        * editing/FrameSelection.h:

2012-11-08  Elliott Sprehn  <esprehn@chromium.org>

        Skip frame owner disconnect when there's no frames
        https://bugs.webkit.org/show_bug.cgi?id=101619

        Reviewed by Ojan Vafai.

        Even when there's no subframes in the document we traverse down every
        subtree on Node removal looking for frames to disconnect. This patch
        checks document()->frame()->tree()->firstChild() to skip this traversal
        if there's no subframes.

        No new tests, this just short circuits code for speed.

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildFrameDisconnector::ChildFrameDisconnector):

2012-11-08  Erik Arvidsson  <arv@chromium.org>

        Wrong error type is thrown for type errors in callbacks
        https://bugs.webkit.org/show_bug.cgi?id=101502

        Reviewed by Adam Barth.

        We should be throwing a TypeError and not a DOMException with code TYPE_MISMATCH_ERR.

        http://www.w3.org/TR/WebIDL/#es-callback-function

        Updated existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/V8/V8TestObj.cpp:

2012-11-08  Andreas Kling  <kling@webkit.org>

        4.68MB below RenderStyle::filter() on Membuster3.
        <http://webkit.org/b/101624>
        <rdar://problem/12663822>

        Reviewed by Darin Adler.

        Rename the non-const RenderStyle::filter() to mutableFilter() since using it causes us to detach
        from the rare non-inherited data (copy-on-write.)
        Most call sites were calling filter() on a RenderStyle* which was causing the bloat.

        4.68MB progression on Membuster3.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::loadPendingShaders):
        * rendering/style/RenderStyle.h:

2012-11-08  Alexey Proskuryakov  <ap@apple.com>

        Create loader/blackberry directory, because svn-apply cannot apply a patch that
        creates a directory and moves a file into it.

        * loader/blackberry: Added.

2012-11-08  Geoffrey Garen  <ggaren@apple.com>

        Mac build fix: Mark WidthCache.h 'private' so WebKit can use it.

        Not reviewed.

        * WebCore.xcodeproj/project.pbxproj:

2012-11-05  Geoffrey Garen  <ggaren@apple.com>

        Optimized kerning and ligatures using caching
        https://bugs.webkit.org/show_bug.cgi?id=101269

        Reviewed by Dan Bernstein.

        Consider three kinds of text layout, and the value of caching for each:

            (1) 1 layout of 100% unique words: small negative value.

            (2) 1 layout of English prose: medium positive value.

            (3) Many layouts of anything: extra-extra-large positive value.

        Since we can't distinguish betwen these workflows a priori, we use statistical
        sampling. To minimize cost in (1) and maximize benefit in (2) and (3), we treat
        each cache access as a statistical sample, and use the cache in proportion to
        the observed probability of duplicate text measurement.

        Benchmark results:
            plt3: 1% faster
            chapter-reflow-once-random: No change [*]
            chapter-reflow-once: 23% faster
            chapter-reflow-twice: 52% faster
            chapter-reflow-thrice: 68% faster
            chapter-reflow: 263% faster
            line-layout: 270% faster

            [*] This is a stress test designed to make everything go wrong for
            caching. It does not represent real world content.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/WidthCache.h: Added.

        (WidthCache): Added a class that caches common word widths. This cache
        could cache more things or more cases in future -- but for now it seems
        to cover the common cases.

        (SmallStringKey): Early profiling showed that allocating an AtomicString
        or String measurably added to the cost of the cache, so I added a custom
        string key that can be stored directly inside the table by value --
        empirically answering an age-old question with which Apple WebKit engineers
        seem to be obsessed.

        (WebCore::WidthCache::SmallStringKey::capacity):
        (WebCore::WidthCache::SmallStringKey::SmallStringKey):
        (WebCore::WidthCache::SmallStringKey::characters):
        (WebCore::WidthCache::SmallStringKey::length):
        (WebCore::WidthCache::SmallStringKey::hash):
        (WebCore::WidthCache::SmallStringKey::isHashTableDeletedValue):
        (WebCore::WidthCache::SmallStringKey::isHashTableEmptyValue):
        (WebCore::WidthCache::SmallStringKeyHash::hash):
        (WebCore::WidthCache::SmallStringKeyHash::equal):
        (SmallStringKeyHash):
        (SmallStringKeyHashTraits):
        (WebCore::WidthCache::SmallStringKeyHashTraits::isEmptyValue): Ditto.

        (WebCore::WidthCache::WidthCache):
        (WebCore::WidthCache::add): Separate out the "don't use the cache" case
        so the compiler can inline it separate, hopefully further reducing cases
        of (1).

        (WebCore::WidthCache::addSlowCase): There's a little subtlety to the
        sampling policy here. Lots of different approaches are possible, and I
        just picked a simple one that seemed to work based on benchmarking. I'll
        point out some interesting sublteties I'm aware of here:

            (*) Since we start at the min sampling rate, a font used for 20 words
            or fewer never allocates a cache. Anecdotally, some fonts seem to
            be used this way.

            (*) When the sampling rate is x / y, sampling all x words in a row
            seems smart because some words may occur more commonly in relation to
            each other (such as 'each' and 'other'), and repeat workloads will
            lay out the same words in order. Intuitively, these are both reasons
            this policy may ramp up more effectively under load.

            (*) I opted for linear back-off instead of, say, exponential back-off
            because we're not trying to back off to infinity -- just to our min
            sampling rate. Since we don't expect the cache to hit for every word,
            my guess is that exponential back-off would be too aggressive.

            (*) Our "eviction" policy has an IQ of 1. I expect this is sufficient
            because it would be surprising to see a million unique words all used
            in the same document. (I would not like to play a Letterpress game
            against such a document.)

        (WebCore::WidthCache::clear): Needed because a font can change, in which
        case we need to ditch its cache.

        (WebCore::operator==): Needed for hashing.

2012-11-08  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: show statistics over selected frame range in Timeline's Frame mode
        https://bugs.webkit.org/show_bug.cgi?id=101593

        Reviewed by Pavel Feldman.

        - change status bar records counter wording to "N of M frames|records shown" depending on mode;
        - append average frame length and & stddev in frame mode;
        - expand the above to a popover that includes frame count, range duration and min/avg/max/stddev on frame length;
        - show frame bars & dividers iff selection range includes < 30 frames (drive-by)

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelineFrameController.js:
        (WebInspector.FrameStatistics):
        * inspector/front-end/TimelineModel.js:
        (WebInspector.TimelineModel.aggregateTimeByCategory):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusBarItems.getAnchor):
        (WebInspector.TimelinePanel.prototype._createStatusBarItems):
        (WebInspector.TimelinePanel.prototype._updateRecordsCounter):
        (WebInspector.TimelinePanel.prototype._updateFrameStatistics):
        (WebInspector.TimelinePanel.prototype._showFrameStatistics):
        (WebInspector.TimelinePanel.prototype._updateFrameBars):
        (WebInspector.TimelinePanel.prototype._overviewModeChanged.set if):
        (WebInspector.TimelinePanel.prototype._overviewModeChanged):
        (WebInspector.TimelinePanel.prototype._refresh):
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.):
        (WebInspector.TimelinePresentationModel.prototype.compareEndTime):
        (WebInspector.TimelinePresentationModel.prototype.filteredFrames):
        (WebInspector.TimelinePresentationModel.generatePopupContentForFrameStatistics):
        * inspector/front-end/timelinePanel.css:
        (.timeline-records-stats, .storage-application-cache-status, .storage-application-cache-connectivity):
        (.timeline-records-stats):
        (.timeline-frames-stats):

2012-11-08  Jakob Petsovits  <jpetsovits@rim.com>

        [BlackBerry] Rework the API to use document coordinates
        https://bugs.webkit.org/show_bug.cgi?id=101608
        RIM PR 173292

        Reviewed by Adam Treat.

        Provide a better API for WebPage to relay.
        See Source/WebKit/blackberry/ChangeLog for details.

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::getWindowScreenRect):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (Platform):
        (BlackBerry):
        (MediaPlayerPrivate):

2012-11-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133892.
        http://trac.webkit.org/changeset/133892
        https://bugs.webkit.org/show_bug.cgi?id=101617

        Compile failures on mac, android, linux (Requested by
        jsbell|gardener on #webkit).

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::domDataStore):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):

2012-11-08  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] UI iterations: image on the top, auto replay
        https://bugs.webkit.org/show_bug.cgi?id=101584

        Reviewed by Pavel Feldman.

        * inspector/front-end/CanvasProfileView.js:
        (WebInspector.CanvasProfileView):
        (WebInspector.CanvasProfileView.prototype._showTraceLog):
        (WebInspector.CanvasProfileView.prototype._onTraceLogItemClick):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog.didReplayTraceLog):
        (WebInspector.CanvasProfileView.prototype._replayTraceLog):
        * inspector/front-end/canvasProfiler.css:
        (.canvas-trace-log):
        (#canvas-replay-image-container):
        (#canvas-replay-image):

2012-11-08  Wei Fanzhe  <whyer1@gmail.com>

        While absolute positioning is put before the first flexitem, flexitems will move to a new line.
        https://bugs.webkit.org/show_bug.cgi?id=101294

        Reviewed by Ojan Vafai.

        This issue has to do with RenderFlexibleBox::computeNextFlexLine. When determing line breaks, the algorithm sees if 1) the total width exceeds lineBreakLength and 2) whether orderedChildren is non-empty.  But then, if the total width exceeds lineBreakLength and there's only absolutely positioned elemments in orderedChildren then the conditions are met and the algorithm mistakenly breaks the line. The solution is to see if orderedChildren collects at least a flex item. If it does, break the line.  

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeNextFlexLine):

2012-11-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r133429.
        http://trac.webkit.org/changeset/133429
        https://bugs.webkit.org/show_bug.cgi?id=101173

        Speculative roll out, investigating perf regression.

        * dom/ContextFeatures.cpp:
        * dom/ContextFeatures.h:
        * dom/Position.cpp:
        (WebCore::Position::Position):
        (WebCore::Position::findParent):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getSelection):
        * html/HTMLTagNames.in:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::contentTagName):
        * page/DOMWindow.idl:

2012-11-07  Emil A Eklund  <eae@chromium.org>

        Fix enclosingLayoutRect calls in InlineFlowBox.h
        https://bugs.webkit.org/show_bug.cgi?id=101497

        Reviewed by Levi Weintraub.

        InlineFlowBox.h used to include LayoutTypesInlineMethods.h which
        overrid enclosingLayoutRect to call closingIntRect. When we
        removed the LayoutTypes abstraction we switched these to
        enclosingIntRect to preserve the behavior.
        This patch changes these back to enclosingLayoutRect which is
        the desired behavior.

        Covered by existing tests.

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::visualOverflowRect):

2012-11-08  Philip Rogers  <pdr@google.com>

        Remove unnecessary save/restore in SVGTextRunRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=101546

        Reviewed by Andreas Kling.

        This patch removes an unnecessary context save/restore SVGTextRunRenderingContext by
        refactoring the code to save off the stroke thickness.

        No new tests as this is heavily covered by existing tests.

        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::drawSVGGlyphs):

2012-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Clean up includes in GObject DOM bindings code
        https://bugs.webkit.org/show_bug.cgi?id=101077

        Reviewed by Kentaro Hara.

        Remove some headers included multiple times for the same file and
        fix consistency in the includes style.

        * bindings/gobject/DOMObjectCache.cpp:
        * bindings/gobject/GObjectEventListener.cpp:
        * bindings/gobject/GObjectEventListener.h:
        * bindings/gobject/WebKitDOMBinding.cpp:
        * bindings/gobject/WebKitDOMBinding.h:
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        * bindings/gobject/WebKitDOMEventTarget.h:
        * bindings/gobject/WebKitDOMEventTargetPrivate.h:
        (WebKit):
        * bindings/gobject/WebKitDOMObject.cpp:
        * bindings/gobject/WebKitDOMObject.h:
        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp:
        * bindings/gobject/WebKitHTMLElementWrapperFactory.h:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateHeader):
        (GenerateFunction):
        (Generate):
        (WriteData):
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:
        * bindings/scripts/test/GObject/WebKitDOMFloat64Array.h:
        * bindings/scripts/test/GObject/WebKitDOMFloat64ArrayPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObjectPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetterPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructorPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTargetPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestExceptionPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterfacePrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListenerPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNamedConstructorPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
        * bindings/scripts/test/GObject/WebKitDOMTestNodePrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObjPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterfacePrivate.h:

2012-11-08  Dan Carney  <dcarney@google.com>

        [V8] Main world should have one DOMDataStore
        https://bugs.webkit.org/show_bug.cgi?id=101470

        Reviewed by Kentaro Hara.

        The main world DOMWrapperWorld held onto a DOMDataStore that should
        never be used, as there is a static one optimized for speed in
        DOMDataStore.

        No new tests. No change in functionality.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::isolatedWorldDomDataStore):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):

2012-11-08  Laszlo Gombos  <l.gombos@samsung.com>

        [EFL] Remove non-variable options from the build system
        https://bugs.webkit.org/show_bug.cgi?id=101506

        Reviewed by Kenneth Rohde Christiansen.

        Remove WTF_USE_ICU_UNICODE, WTF_USE_CAIRO and WTF_USE_FREETYPE cmake variables
        as these are always set to const 1 and not really configurable.

        Remove duplicate platform/graphics/cairo include path from
        PlatformEfl.cmake.

        No new tests as there is no new functionality.

        * PlatformEfl.cmake:

2012-11-08  KyungTae Kim  <ktf.kim@samsung.com>

        Unused parameters on GraphicsLayerUpdater.cpp
        https://bugs.webkit.org/show_bug.cgi?id=101577

        Reviewed by Kentaro Hara.

        The parameter 'displayID' is not used when !USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR)
        Use UNUSED_PARAM macro for removing -Wunused-parameter warnings

        * platform/graphics/GraphicsLayerUpdater.cpp:
        (WebCore::GraphicsLayerUpdater::GraphicsLayerUpdater):
        (WebCore::GraphicsLayerUpdater::screenDidChange):

2012-11-08  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Add option to disable rulers (Elements panel)
        https://bugs.webkit.org/show_bug.cgi?id=101554

        Reviewed by Pavel Feldman.

        A new setting, showMetricsRulers, has been introduced (off by default, so users need to opt in to see the rulers).
        The setting value is passed into InspectorDOMAgent, down to the InspectorOverlayPage, which affects the drawGrid() and
        drawRulers() calls. As a side effect, the issue when the rulers were painted for elements having no renderers has been fixed.

        No new tests, a UI change.

        * English.lproj/localizedStrings.js: Add "Show rulers" string.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightConfigFromInspectorObject): Copy over the showRulers value.
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForHighlight): Copy over the showRulers value.
        * inspector/InspectorOverlay.h:
        (HighlightConfig): Add |bool showRulers|.
        (WebCore::Highlight::Highlight): Initialize fields.
        (Highlight): Add |bool showRulers|.
        (WebCore::Highlight::setDataFromConfig):
        * inspector/InspectorOverlayPage.html:
        * inspector/front-end/DOMAgent.js: Make use of WebInspector.settings.showMetricsRulers when building the highlight DTO.
        * inspector/front-end/Settings.js: Add showMetricsRulers.
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab): Add "Show rulers" checkbox in the Elements panel section.

2012-11-08  Alexander Shalamov  <alexander.shalamov@intel.com>

        Warn in the inspector console when using dpi and dpcm units outside of media="print"
        https://bugs.webkit.org/show_bug.cgi?id=100865

        Reviewed by Kenneth Rohde Christiansen.

        Added function that prints warning to inspector console whenever dpi or dpcm CSS units
        are used for screen media.

        Test: fast/media/mq-resolution-dpi-dpcm-warning.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::setMediaQueries):
        * css/MediaList.cpp:
        (WebCore):
        (WebCore::addResolutionWarningMessageToConsole):
        (WebCore::reportMediaQueryWarningIfNeeded):
        * css/MediaList.h:
        (WebCore):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::matchMedia):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parserAppendRule):

2012-11-08  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Console: "time" and "timeEnd" should have same number of required arguments
        https://bugs.webkit.org/show_bug.cgi?id=101451

        Reviewed by Yury Semikhatsky.

        Solution: make console.time "title" parameter mandatory.

        * page/Console.idl: Changed parameter specification.

2012-11-08  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed fixed inspector frontend compilation

        * inspector/front-end/DataGrid.js:

2012-11-08  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurfaceGLX needs to query the drawable for YInversion.
        https://bugs.webkit.org/show_bug.cgi?id=101472

        After r133049 the WebGL content is now displayed upside down
        for the Qt port. We cannot just apply a generic rule, that
        the content needs to be flipped upside down.
        Instead we have to query GLX to tell us, if the drawable's
        framebuffer is y-inverted.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::textureIsYInverted):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):

2012-11-08  Mike West  <mkwst@chromium.org>

        Warn when parsing an invalid X-Frame-Options header.
        https://bugs.webkit.org/show_bug.cgi?id=101447

        Reviewed by Adam Barth.

        An 'X-Frame-Options' header that contains an invalid option (that is,
        neither 'DENY' nor 'SAMEORIGIN') is ignored. This patch adds a console
        warning to notify developers that they've made a mistake.

        Test: http/tests/security/XFrameOptions/x-frame-options-invalid.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
            Move the request identifier generation out of the failure block in
            order to pass it into 'shouldInterruptLoadForXFrameOptions'. This
            ensures that the console message is properly tied to a request.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        * loader/FrameLoader.h:
        (FrameLoader):
            'shouldInterruptLoadForXFrameOptions' now accepts a request
            identifier as a parameter, and generates a console message if the
            load is blocked.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
            Pass the request identifier into 'shouldInterruptLoadForXFrameOptions'.

2012-11-08  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: Improve time/timeEnd appearance.
        https://bugs.webkit.org/show_bug.cgi?id=100936

        Reviewed by Yury Semikhatsky.

        Changes:
        - time/timeEnd records should be top level records only in "glue" mode
        - time/timeEnd records should display "message" in record list / popover
        - glued records add aggregated statistics to root record
        - glued records do not reduce their origin self time

        Test: inspector/timeline/timeline-time.html

        * English.lproj/localizedStrings.js: Added "Message" string.
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.Record): Added "origin" field.

2012-11-08  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: move front-end methods called from native part to InspectorFrontendAPI
        https://bugs.webkit.org/show_bug.cgi?id=101463

        Reviewed by Vsevolod Vlasov.

        Moved Web Inspector methods called from native code to InspectorFrontendAPI.

        * inspector/InspectorClient.cpp:
        (WebCore::InspectorClient::doDispatchMessageOnFrontendPage):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::create):
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::FrontendMenuProvider::FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::contextMenuItemSelected):
        (WebCore::FrontendMenuProvider::contextMenuCleared):
        (FrontendMenuProvider):
        (WebCore::InspectorFrontendHost::showContextMenu):
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.loadCompleted):
        (InspectorFrontendAPI.contextMenuItemSelected):
        (InspectorFrontendAPI.contextMenuCleared):
        (InspectorFrontendAPI.dispatchMessageAsync):
        (InspectorFrontendAPI.dispatchMessage):
        * inspector/front-end/inspector.js:

2012-11-08  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        User can change a disabled select (drop down box)
        https://bugs.webkit.org/show_bug.cgi?id=100932

        Reviewed by Kent Tamura.

        <select> should not handle events if it's disabled.

        Test: fast/forms/select/select-disabled.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::defaultEventHandler):

2012-11-08  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Rename methods and remove dead code from IDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=101488

        Reviewed by Ojan Vafai.

        In preparation for merging IDBBackingStore and IDBLevelDBBackingStore:

        1) rename ObjectStoreRecordIdentifier to RecordIdentifier
        2) remove IDBBackingStore::forEachRecord and friends
        3) remove IDBBackingStore::Cursor::close, since it was an empty method.

        No new tests as this is purely code cleanup.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::getRecord):
        (WebCore):
        (WebCore::IDBLevelDBBackingStore::putRecord):
        (WebCore::IDBLevelDBBackingStore::createInvalidRecordIdentifier):
        (WebCore::IDBLevelDBBackingStore::deleteRecord):
        (WebCore::IDBLevelDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBLevelDBBackingStore::deleteIndexDataForRecord):
        * Modules/indexeddb/IDBBackingStore.h:
        (WebCore::IDBBackingStore::RecordIdentifier::~RecordIdentifier):
        (IDBBackingStore):
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::close):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::countInternal):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::getKeyInternal):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::countInternal):

2012-11-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: console error after inspecting IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=101481

        Reviewed by Pavel Feldman.

        Added objectId nullity check to RemoteOBject::release.
        Drive-by added release for entry key and primaryKey.

        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDataView.prototype.clear):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.release):

2012-11-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Migrate inspector IndexedDB support to frontend API.
        https://bugs.webkit.org/show_bug.cgi?id=101457

        Reviewed by Pavel Feldman.

        Migrated IndexedDB support to web facing IndexedDB API.

        * inspector/Inspector.json:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        (WebCore::assertIDBFactory):
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel.prototype.innerCallback):
        (WebInspector.IndexedDBModel.prototype._requestData):
        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDataView.prototype._updateData.callback):
        (WebInspector.IDBDataView.prototype._updateData):
        (WebInspector.IDBDataGridNode):
        (WebInspector.IDBDataGridNode.prototype.createCell):

2012-08-20  Taiju Tsuiki  <tzik@chromium.org>

        Web Inspector: Drop dimmed crumb handling
        https://bugs.webkit.org/show_bug.cgi?id=94457

        Reviewed by Vsevolod Vlasov.

        No new tests. Existing inspector test should work.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        (WebInspector.ElementsPanel.prototype.updateBreadcrumbSizes):
        * inspector/front-end/breadcrumbList.css:

2012-11-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Infinite loop in DataGrid::autoSizeColumn
        https://bugs.webkit.org/show_bug.cgi?id=101363

        Reviewed by Pavel Feldman.

        Test: inspector/datagrid-autosize.html

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._autoSizeWidths):
        (WebInspector.DataGrid.prototype.autoSizeColumns):

2012-11-07  Keishi Hattori  <keishi@webkit.org>

        Implement week picking to calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=101449

        Reviewed by Kent Tamura.

        This adds week picker mode to CalendarPicker.

        No new tests. Tests will be added later when this feature is enabled in DRT.

        * Resources/pagepopups/calendarPicker.css:
        (.month-mode .day):
        (.week-mode .available.day-selected.monday): Rounded corners around week selection.
        (.week-mode .available.day-selected.sunday): Ditto.
        (.week-mode .unavailable.day-selected):
        (.week-mode .unavailable.day-selected.monday):
        (.week-mode .unavailable.day-selected.sunday):
        (.week-mode .week-column.unavailable.day-selected):
        (.week-column): Hide week column unless in week mode.
        (.week-mode .week-column):
        * Resources/pagepopups/calendarPicker.js:
        (parseDateString): Support week string.
        (Week):
        (Week.parse): Parses "yyyy-Www" string.
        (Week.createFromDate): Creates Week containing datetime.
        (Week.createFromToday): Creates Week containing today.
        (Week.weekOneStartDateForYear): Returns the start date for the first week of year.
        (Week.numberOfWeeksInYear): Returns the number of weeks in year.
        (Week._numberOfWeeksSinceDate): Returns number of weeks since a date.
        (Week.prototype.equals): Returns true if the Weeks are the same.
        (Week.prototype.previous): Returns the previous Week.
        (Week.prototype.next): Returns the next Week.
        (Week.prototype.startDate): Returns start datetime of Week.
        (Week.prototype.endDate): Returns end datetime of Week.
        (Week.prototype.valueOf): Returns the milliseconds since epoch.
        (Week.prototype.toString): Returns ISO week string.
        (CalendarPicker): Add week picker mode.
        (CalendarPicker.prototype.showMonth): Use NavigationBehaviour instead of bools.
        (YearMonthController.prototype.attachTo): Fix bug.
        (YearMonthController.prototype.moveRelatively): Use new showMonth.
        (DaysTable.prototype.attachTo): Add week number column.
        (DaysTable.prototype._renderMonth): Render week numbers.
        (DaysTable.prototype.navigateToMonth): Render week numbers.
        (DaysTable.prototype.selectRange):
        (DaysTable.prototype._selectRangeAtPosition): Week number nodes have an positionX of -1.
        (DaysTable.prototype._maybeSetPreviousMonth):
        (DaysTable.prototype._maybeSetNextMonth):
        (MonthPickerDaysTable.prototype.selectRange):
        (MonthPickerDaysTable.prototype.selectRangeAndShowEntireRange):
        (MonthPickerDaysTable.prototype._handleKey):
        (WeekPickerDaysTable): Added.
        (WeekPickerDaysTable.prototype._markRangeAsSelected): Marks week as selected.
        (WeekPickerDaysTable.prototype.selectRange): Selects week.
        (WeekPickerDaysTable.prototype.selectRangeAndShowEntireRange): Selects week and navigate to show entire selection.
        (WeekPickerDaysTable.prototype._rangeForNode): Returns Week for node.
        (WeekPickerDaysTable.prototype._handleKey):

2012-11-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133841.
        http://trac.webkit.org/changeset/133841
        https://bugs.webkit.org/show_bug.cgi?id=101542

        Reverted patches were innocent (Requested by shinyak on
        #webkit).

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::shadowPseudoId):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.cpp:
        (WebCore::ElementRareData::reportMemoryUsage):
        * dom/ElementRareData.h:
        (ElementRareData):
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::updatePlaceholderText):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitLiteral):
        (WebCore::DateTimeEditElement::DateTimeEditElement):
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::initialize):
        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement):
        * html/shadow/PickerIndicatorElement.cpp:
        (WebCore::PickerIndicatorElement::PickerIndicatorElement):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::TextTrackCueBox):
        (WebCore::TextTrackCue::updateDisplayTree):
        * testing/Internals.cpp:
        (WebCore::Internals::setShadowPseudoId):

2012-11-07  Simon Fraser  <simon.fraser@apple.com>

        Fix EFL build, which has accelerated compositing disabled, by making
        repaintViewRectangle() const.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        * rendering/RenderView.h:
        (RenderView):

2012-11-07  Simon Fraser  <simon.fraser@apple.com>

        constify ALL the repaint containers
        https://bugs.webkit.org/show_bug.cgi?id=101541

        Reviewed by Beth Dakin.

        Make all the RenderLayerModelObject* repaintContainer arguments const, since
        these member functions should have no need to mutate this object.

        * WebCore.exp.in:
        * rendering/RenderBR.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::rectWithOutlineForRepaint):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::outlineBoundsForRepaint):
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::repaintRectangleInRegions): Need to use a const_iterator.
        * rendering/RenderFlowThread.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        (WebCore::RenderInline::rectWithOutlineForRepaint):
        (WebCore::RenderInline::computeRectForRepaint):
        (WebCore::RenderInline::mapLocalToContainer):
        * rendering/RenderInline.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::selectionRectForRepaint):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::rectWithOutlineForRepaint):
        (WebCore::RenderObject::clippedOverflowRectForRepaint):
        (WebCore::RenderObject::computeRectForRepaint):
        (WebCore::RenderObject::computeFloatRectForRepaint):
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::localToContainerQuad):
        (WebCore::RenderObject::localToContainerPoint):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::selectionRectForRepaint):
        (WebCore::RenderObject::outlineBoundsForRepaint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRectForRepaint):
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderReplaced.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::computeRectForRepaint):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::clippedOverflowRectForRepaint):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::clippedOverflowRectForRepaint):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::clippedOverflowRectForRepaint):
        (WebCore::RenderText::selectionRectForRepaint):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer):
        (WebCore::RenderView::computeRectForRepaint):
        * rendering/RenderView.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGForeignObject::computeFloatRectForRepaint):
        (WebCore::RenderSVGForeignObject::mapLocalToContainer):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGInline::computeFloatRectForRepaint):
        (WebCore::RenderSVGInline::mapLocalToContainer):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGModelObject::computeFloatRectForRepaint):
        (WebCore::RenderSVGModelObject::mapLocalToContainer):
        (WebCore::RenderSVGModelObject::outlineBoundsForRepaint):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGRoot::computeFloatRectForRepaint):
        (WebCore::RenderSVGRoot::mapLocalToContainer):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGText::computeRectForRepaint):
        (WebCore::RenderSVGText::computeFloatRectForRepaint):
        (WebCore::RenderSVGText::mapLocalToContainer):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::clippedOverflowRectForRepaint):
        (WebCore::SVGRenderSupport::computeFloatRectForRepaint):
        (WebCore::SVGRenderSupport::mapLocalToContainer):
        * rendering/svg/SVGRenderSupport.h:
        (SVGRenderSupport):

2012-11-07  Kent Tamura  <tkent@chromium.org>

        [Chromium-win] Refactor date/time format conversion code in LocaleWin
        https://bugs.webkit.org/show_bug.cgi?id=101329

        Reviewed by Kentaro Hara.

        convertWindowsDateFormatToLDML and convertWindowsTimeFormatToLDML did
        similar jobs with different code. We can merge them into one function.

        As for the date format conversion, we have tokenized a format string and
        stored token objects into a vector. We skip token object generation and
        generate a LDML-compliant pattern string during parsing.

        No new tests. This should make no behavior changes and
        WebKit/chromium/tests/LocaleWinTest.cpp has test cases.

        * platform/text/win/LocaleWin.cpp:
        (WebCore): Remove DateFormatToken, isFooSymbol, ensureShortDateTokens,
        convertWindowsDateFormatToLDML, mapCharacterToDateTimeFieldType, and
        convertWindowsTimeFormatToLDML.
        (WebCore::commitLiteralToken): Store the result to the specified StringBuilder.
        (WebCore::convertWindowsDateTimeFormat):
        Renamed from parseDateFormat, and supports time format symbols.
        (WebCore::LocaleWin::dateFormat): Use convertWindowsDateTimeFormat.
        (WebCore::LocaleWin::monthFormat): Ditto.
        (WebCore::LocaleWin::timeFormat): Ditto.
        (WebCore::LocaleWin::shortTimeFormat): Ditto.
        * platform/text/win/LocaleWin.h:
        (LocaleWin): Remove ensureShortDateTokens and m_shortDateTokens.

2012-11-07  Shinya Kawanaka  <shinyak@chromium.org>

        Unreviewed, rolling out r133428 and r133749
        https://bugs.webkit.org/show_bug.cgi?id=101533

        These patches might cause memory regression.

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::shadowPseudoId):
        (WebCore):
        (WebCore::Element::setShadowPseudoId):
        * dom/Element.h:
        (Element):
        * dom/ElementRareData.cpp:
        (WebCore::ElementRareData::reportMemoryUsage):
        * dom/ElementRareData.h:
        (ElementRareData):
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::updatePlaceholderText):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitLiteral):
        (WebCore::DateTimeEditElement::DateTimeEditElement):
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::initialize):
        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement):
        * html/shadow/PickerIndicatorElement.cpp:
        (WebCore::PickerIndicatorElement::PickerIndicatorElement):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::TextTrackCueBox):
        (WebCore::TextTrackCue::updateDisplayTree):
        * testing/Internals.cpp:
        (WebCore::Internals::setShadowPseudoId):

2012-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::RenderLayer::normalFlowList
        https://bugs.webkit.org/show_bug.cgi?id=101528

        Reviewed by Simon Fraser.

        Make sure the layout is up to date before re-computing the caret rect.
        Avoid doing the layout when the selection is cleared since we can always stop
        the blink timer in that case.

        Unfortunately, we haven't found any reproduction of this crash yet.

        * editing/FrameSelection.cpp:
        (WebCore::isNonOrphanedCaret):
        (WebCore::FrameSelection::localCaretRect):
        (WebCore::FrameSelection::updateAppearance):

2012-11-07  Adam Barth  <abarth@webkit.org>

        [V8] IntrusiveDOMWrapperMap should be usable for more than just Nodes
        https://bugs.webkit.org/show_bug.cgi?id=101110

        Reviewed by Kentaro Hara.

        Hopefully the memory issues with this patch have been resolved by
        fixing bug 101525. This patch re-lands this patch again, hopefully for
        the last time.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::weakCallback):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::wrapperIsStoredInObject):
        (WebCore::DOMDataStore::getWrapperFromObject):
        (WebCore::DOMDataStore::setWrapperInObject):

2012-11-07  KyungTae Kim  <ktf.kim@samsung.com>

        Seam occurred between pieces of ShadowBlur on floating point zoom
        https://bugs.webkit.org/show_bug.cgi?id=101435

        Reviewed by Simon Fraser.

        When paint Shadow that doesn't have blurred edge on floating point zoom,
        pixel seam (pixel cracks) occurred between pieces of the ShadowBlur because of unaligned clip rect.
        So, enlarge the clipping area 1 pixel so that the fill does not bleed (due to antialiasing)
        even if the unaligned clip rect occurred.


        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::calculateLayerBoundingRect):

2012-11-07  Tim Horton  <timothy_horton@apple.com>

        Repaint issues with -webkit-svg-shadow used on a container
        https://bugs.webkit.org/show_bug.cgi?id=65643
        <rdar://problem/7600532>

        Reviewed by Simon Fraser.

        SVG renderer repaint rects are currently expanded only by the shadow of
        the renderer itself; however, the area they need to repaint can be larger
        than that, if their parents also have shadows. We need to take into account
        parent's shadows (respecting transforms, as well).

        clippedOverflowRectForRepaint already recurses upwards through the render tree,
        and ends up with a rect in layout coordinates, so we manually apply the shadow
        at each step (repaintRectInLocalCoordinatesExcludingSVGShadow was added to allow
        us to get the raw repaint rect without the shadow baked-in).

        repaintRectInLocalCoordinates now includes shadows from all parents.

        Also, RenderSVGRoot was clipping repaint rects to the viewport before applying
        shadows, so offscreen elements with on-screen shadows (applied by the root) would not paint the shadows.
        We can just swap the order of these things to correct this.

        Tests: svg/css/parent-shadow-offscreen.svg, svg/css/root-shadow-offscreen.svg, svg/repaint/repaint-webkit-svg-shadow.svg

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild): Mark the child being added as having an SVG shadow if it is being added as a child of an element that does.
        (WebCore::RenderObject::styleDidChange): Mark the child being added as having an SVG shadow if its new style has a shadow.
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout): Cache the repaint rect before intersecting it with the shadow.
        * rendering/svg/RenderSVGImage.h:
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinatesExcludingSVGShadow): Return the cached repaint rect for the renderer without the shadow included.
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::RenderSVGModelObject): Renderers do not have a shadow by default.
        * rendering/svg/RenderSVGModelObject.h:
        (WebCore::RenderSVGModelObject::repaintRectInLocalCoordinatesExcludingSVGShadow): Return the cached repaint rect for the renderer without the shadow included.
        (WebCore::RenderSVGModelObject::hasSVGShadow): Return whether or not the renderer has a shadow.
        (WebCore::RenderSVGModelObject::setHasSVGShadow): Set whether or not the renderer has a shadow.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::computeFloatRectForRepaint): Apply the shadow before clipping to the viewport, so we draw shadows for elements outside the viewport.
        (WebCore::RenderSVGRoot::updateCachedBoundaries): Cache the repaint rect before intersecting it with the shadow.
        * rendering/svg/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::hasSVGShadow): Return whether or not the renderer has a shadow.
        (WebCore::RenderSVGRoot::setHasSVGShadow): Set whether or not the renderer has a shadow.
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinatesExcludingSVGShadow): Return the cached repaint rect for the renderer without the shadow included.
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::updateRepaintBoundingBox): Cache the repaint rect before intersecting it with the shadow.
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::repaintRectInLocalCoordinatesExcludingSVGShadow): Return the cached repaint rect for the renderer without the shadow included.
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::repaintRectForRendererInLocalCoordinatesExcludingSVGShadow): Return the cached repaint rect for the renderer without the shadow included.
        (WebCore::SVGRenderSupport::clippedOverflowRectForRepaint): Apply shadows as we walk through our parents, instead of only applying the renderer's own shadow.
        (WebCore::SVGRenderSupport::rendererHasSVGShadow): Return whether or not the renderer has a shadow.
        (WebCore::SVGRenderSupport::setRendererHasSVGShadow): Set whether or not the renderer has a shadow.
        (WebCore::SVGRenderSupport::intersectRepaintRectWithShadows): Walk through the element's parents, adding shadows to the repaint rect as we go, eventually
        transforming the repaint rect back into local coordinates.
        (WebCore::SVGRenderSupport::intersectRepaintRectWithResources): Don't add shadows by default, just other resources, so that we can cache repaint rects with and without shadows.
        * rendering/svg/SVGRenderSupport.h:

2012-11-07  Anders Carlsson  <andersca@apple.com>

        Add RemoteGraphicsLayer class
        https://bugs.webkit.org/show_bug.cgi?id=101535

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export GraphicsLayer symbols required by WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        Make GraphicsLayerFactory.h a private header.

2012-11-07  Adam Barth  <abarth@webkit.org>

        [V8] Don't leak <img> elements in content scripts
        https://bugs.webkit.org/show_bug.cgi?id=101525

        Reviewed by Ojan Vafai.

        I found the leak that was causing a problem for bug 101110. We weren't
        filling in the derefObjectFunction for HTMLImageElements (and
        potentially some other types of elements). That manifests today as a
        memory leak in content scripts (which use the derefObjectFunction for
        nodes) and caused a memory leak after bug 101110 because we started
        using the derefObjectFunction in the main world as well.

        This patch adds ASSERTs so that we won't make this mistake in the future.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateNamedConstructorCallback):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::weakCallback):
        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperMap::defaultWeakCallback):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):

2012-11-07  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Prepare for IDBBackingStore merge by renaming IDBLevelDBBackingStore.cpp
        https://bugs.webkit.org/show_bug.cgi?id=101486

        Reviewed by Ojan Vafai.

        Rename IDBLevelDBBackingStore.cpp to IDBBackingStore.cpp in
        preparation for merging these classes. This will make the merge
        diffs sane. See https://bugs.webkit.org/show_bug.cgi?id=101415
        for the final goal.

        No new tests, this is is just a rename and minor style fix.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBBackingStore.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp.
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:

2012-11-07  Adam Barth  <abarth@webkit.org>

        [V8] Prepare DOMDataStore to be able to store ScriptWrappable wrappers inline
        https://bugs.webkit.org/show_bug.cgi?id=101523

        Unreviewed. Technically this patch hasn't been reviewed, but it is part
        of a patch that was reviewed by Kentaro Hara.

        Sadly, my patch for bug 101110 triggered the regression again. This
        patch is a smaller incremental step towards the patch in bug 101110. It
        doesn't make that much sense on its own, but it will help me isolate
        the source of the regression.

        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::get):
        (DOMDataStore):
        (WebCore::DOMDataStore::set):
        (WebCore::DOMDataStore::wrapperIsStoredInObject):
        (WebCore::DOMDataStore::getWrapperFromObject):
        (WebCore::DOMDataStore::setWrapperInObject):

2012-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        SimplifyMarkupCommand takes a disproportionally long time to run when there are many nodes to remove
        https://bugs.webkit.org/show_bug.cgi?id=101144

        Reviewed by Enrica Casucci.

        The bug was caused by attach() happening between each node removal. Since the command was trying
        to remove millions of node in some cases, attach()ing render objects for each node being reinserted
        imposed a huge runtime cost.

        Fixed the bug by using lazy attach when removing nodes and avoiding calls to isContentEditable.
        Also remove all ancestors at once when they are direct child/parent of each other so that we don't
        remove an ancestor and then insert its child back only to remove it again in the next iteration.

        No new tests since it doesn't change the asymptotic performance, and adding a new performance test for
        this specific case is not the worth the increase in the bot cycle time. I'll note that the email
        attached in the original radar bug (<rdar://problem/12179712>) took 100 seconds to open now only takes
        7 seconds to open on my MacPro.

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply): Takes a flag indicating whether we should assume nodes are editable
        without calling isContentEditable or not.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Update the style as later code requires render
        object.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeBefore): Passes a flag to the command.
        (WebCore::CompositeEditCommand::removeNode): Ditto.
        (WebCore::CompositeEditCommand::removeNodePreservingChildren): Ditto.
        * editing/CompositeEditCommand.h:
        (CompositeEditCommand):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode): Takes a flag indicating whether we should assume nodes are
        editable without calling isContentEditable or not.
        * editing/DeleteSelectionCommand.h:
        (DeleteSelectionCommand):
        * editing/EditCommand.h:
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply): Update the layout when password echo is enabled since
        we need to have render objects for echoing.
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand): Ditto.
        (WebCore::InsertNodeBeforeCommand::doApply): Ditto; also always use lazy attach.
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.h:
        (WebCore::InsertNodeBeforeCommand::create):
        (InsertNodeBeforeCommand):
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::RemoveNodeCommand): Ditto about the flag.
        (WebCore::RemoveNodeCommand::doApply):
        * editing/RemoveNodeCommand.h:
        (WebCore::RemoveNodeCommand::create):
        (RemoveNodeCommand):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::RemoveNodePreservingChildrenCommand): Ditto.
        (WebCore::RemoveNodePreservingChildrenCommand::doApply):
        * editing/RemoveNodePreservingChildrenCommand.h:
        (WebCore::RemoveNodePreservingChildrenCommand::create):
        (RemoveNodePreservingChildrenCommand):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        (WebCore::SimplifyMarkupCommand::pruneSubsequentAncestorsToRemove): Added to optimize removals of multiple
        ancestors.
        * editing/SimplifyMarkupCommand.h:
        (SimplifyMarkupCommand):

2012-11-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133810.
        http://trac.webkit.org/changeset/133810
        https://bugs.webkit.org/show_bug.cgi?id=101520

        This patch made ws_single_peak_r regress by 15% (Requested by
        abarth on #webkit).

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::weakCallback):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::get):
        (WebCore::DOMDataStore::set):
        (DOMDataStore):

2012-11-07  Elliott Sprehn  <esprehn@chromium.org>

        Clean up confused use of Document::renderer and renderView
        https://bugs.webkit.org/show_bug.cgi?id=101484

        Reviewed by Ojan Vafai.

        Document::renderer and Document::renderView are the same thing, but it seems
        people don't always realize it and check if document()->renderer() is a RenderView.

        This patch cleans up usage of document()->renderer() and document()->renderView() and
        simplifies the code that was written without realizing they were the same thing.

        No new tests, this is just a refactor.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint): Lots of simplification.
        * dom/Element.cpp:
        (WebCore::Element::screenRect):
        (WebCore::Element::unregisterNamedFlowContentNode): Remove unneeded conditional.
        * editing/FrameSelection.cpp: Remove verbose casts.
        (WebCore::clearRenderViewSelection):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::CaretBase::invalidateCaretRect):
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        * page/Frame.cpp:
        (WebCore::Frame::contentRenderer): Vastly simplified.
        * page/PrintContext.cpp: Remove verbose casts.
        (WebCore::PrintContext::computePageRects):
        (WebCore::PrintContext::computePageRectsWithPageSizeInternal):
        * page/wince/FrameWinCE.cpp:
        (WebCore::computePageRectsForFrame): Remove unreachable code.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::maximalOutlineSize): Remove verbose cast.

2012-11-07  Adam Barth  <abarth@webkit.org>

        [V8] IntrusiveDOMWrapperMap should be usable for more than just Nodes
        https://bugs.webkit.org/show_bug.cgi?id=101110

        Reviewed by Kentaro Hara.

        This patch generalizes our support for storing wrappers in DOM objects
        to be usable for more than just nodes. After this patch, any object
        with a ScriptWrappable base class will have its wrapper stored inline
        in the object in the main world.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::weakCallback):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::get):
        (WebCore::DOMDataStore::set):

2012-11-07  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        RIM PR 236997
        Internally Reviewed by Jakob Petsovits.

        Set font family to fix DRT test fast/forms/input-type-text-min-width.html

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::defaultGUIFont):
        (WebCore):
        (WebCore::RenderThemeBlackBerry::systemFont):

2012-11-07  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=101303
        Fixed position elements that are out of view still end up forcing 
        non-threaded scrolling
        -and corresponding-
        <rdar://problem/12642222>

        Reviewed by Simon Fraser.

        Re-name hasNonLayerFixedObjects() to 
        hasVisibleSlowRepaintFixedObjects() and make it virtual. 
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintFixedObjects):
        (WebCore::ScrollingCoordinator::mainThreadScrollingReasons):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):

        Override hasVisibleSlowRepaintFixedObjects() to always return false. 
        We don't want to bother with the extra computation in the 
        ScrollingCoordinator implementation, though other ports might still 
        want it.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (WebCore::ScrollingCoordinatorMac::hasVisibleSlowRepaintFixedObjects):
        (ScrollingCoordinatorMac):

        Make this function const so that we can call it from 
        requiresCompositingForPosition().
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):

        Actually be thorough here and check if the fixed object has any 
        descendants that are visible in the view. If it does, then we do 
        want to composite the fixed object.
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderLayerCompositor.h:

2012-11-07  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Style fix following r133262.

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

2012-11-07  Adam Barth  <abarth@webkit.org>

        [V8] DOMWrapperMap doesn't need to use virtual functions
        https://bugs.webkit.org/show_bug.cgi?id=101494

        Reviewed by Kentaro Hara.

        DOMWrapperMap has only one subclass. There's no reason to use virtual functions.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperMap::DOMWrapperMap):
        (WebCore::DOMWrapperMap::get):
        (WebCore::DOMWrapperMap::set):
        (WebCore::DOMWrapperMap::clear):
        (WebCore::DOMWrapperMap::reportMemoryUsage):
        (WebCore::DOMWrapperMap::remove):
        (WebCore::DOMWrapperMap::defaultWeakCallback):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::staticNPObjectMap):

2012-11-07  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Remove the dependency on CustomFilterValidatedProgram from CustomFilterRenderer
        https://bugs.webkit.org/show_bug.cgi?id=101071

        Reviewed by Dean Jackson.

        I've removed the need to get a CustomFilterValidatedProgram from FilterEffectRenderer. It was only
        used to delay the compilation of the shader until it was really needed. Instead, the FilterEffectRenderer
        will directly get the compiled shader in the constructor. The callers that still want to avoid 
        compiling the shader until it is really needed can use the setCompiledProgram to inject the shader
        at a later time, before painting.

        No new tests, the change is covered by the css3/filters/custom/ tests.

        * platform/graphics/filters/CustomFilterConstants.h:
        * platform/graphics/filters/CustomFilterProgramInfo.h:
        * platform/graphics/filters/CustomFilterRenderer.cpp:
        (WebCore::CustomFilterRenderer::create):
        (WebCore::CustomFilterRenderer::CustomFilterRenderer):
        (WebCore::CustomFilterRenderer::premultipliedAlpha):
        (WebCore::CustomFilterRenderer::setCompiledProgram):
        (WebCore):
        (WebCore::CustomFilterRenderer::prepareForDrawing):
        (WebCore::CustomFilterRenderer::bindProgramAndBuffers):
        * platform/graphics/filters/CustomFilterRenderer.h:
        (WebCore):
        (CustomFilterRenderer):
        (WebCore::CustomFilterRenderer::compiledProgram):
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::FECustomFilter):
        (WebCore::FECustomFilter::prepareForDrawing):
        * platform/graphics/filters/FECustomFilter.h:
        (FECustomFilter):

2012-11-07  Adam Barth  <abarth@webkit.org>

        [V8] IntrusiveDOMWrapperMap is no longer needed and can be deleted
        https://bugs.webkit.org/show_bug.cgi?id=101493

        Reviewed by Kentaro Hara.

        This patch is another incremental step towards landing the patch in bug
        101110. In this patch, we delete IntrusiveDOMWrapperMap, which is no
        longer needed.

        * WebCore.gypi:
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStore::reportMemoryUsage):
        (WebCore::DOMDataStore::weakCallback):
        (WebCore):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::get):
        (WebCore::DOMDataStore::set):
        (DOMDataStore):
        * bindings/v8/IntrusiveDOMWrapperMap.h: Removed.
        * bindings/v8/V8GCController.cpp:

2012-11-07  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [AC] glXChooseFBConfig() and glXGetVisualFromFBConfig() return values are leaking in GraphicsSurface
        https://bugs.webkit.org/show_bug.cgi?id=101475

        Reviewed by Kenneth Rohde Christiansen.

        Free the memory returned by glXChooseFBConfig and glXGetVisualFromFBConfig
        using XFree to avoid memory leaks.

        No tests. No change in behavior.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):

2012-11-07  Fady Samuel  <fsamuel@chromium.org>

        Autoresize should work even if turned on while the page is loading.
        https://bugs.webkit.org/show_bug.cgi?id=101380

        Reviewed by David Levin.

        Autoresize does not work in cases where it is turned on while loading.
        This patch addresses this by allowing autoSize to complete if it's turned on
        while loading and doing a final pass after loading.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted):
        Adjust to call renamed function.
        * page/FrameView.cpp:
        (WebCore::FrameView::handleLoadCompleted):
        Rename function to encompass its expanded responsibilities (which include doing the final auto size after the load is completed).
        (WebCore::FrameView::autoSizeIfEnabled):
        Allow the size to shrink if autosize is adjusted while the page is loading.
        * page/FrameView.h:
        (FrameView):
        Renamed 'checkFlushDeferredRepaintsAfterLoadComplete' to 'handleLoadComplete'

2012-11-07  Philip Rogers  <pdr@google.com>

        Skip SVG repaint tracking when parent container transforms
        https://bugs.webkit.org/show_bug.cgi?id=101177

        Reviewed by Eric Seidel.

        This patch skips child repaint rect checks when a parent container is transformed, leading
        to a 75% increase on the RoboHornet SVG benchmark:
            http://www.robohornet.org/#et=svg  (average of 2 runs)
            Before patch: 161.6ms
            After patch: 38.5ms

        SVG transforms are relative to the local container which makes calculating an absolute
        repaint rect expensive because it requires multiplying the local repaint rect by each
        parent container's local transform. See SVGRenderSupport::computeFloatRectForRepaint
        as an example of this calculation.

        This patch takes advantage of SVG's container rules: when a parent container's transform
        changes, all children must be repainted (there is no absolute positioning in SVG).
        SVGRenderSupport::checkForSVGRepaintDuringLayout has been added which checks for whether
        the parent transform changed before doing child repaint checks. A similar optimization is
        used in HTML (see RenderObject::checkForRepaintDuringLayout) where no repaint checking
        is done when the view is fully repainted.

        This code is tested in existing tests.

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::layout):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::layout):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::checkForSVGRepaintDuringLayout):
        (WebCore):
        * rendering/svg/SVGRenderSupport.h:
        (SVGRenderSupport):

2012-11-07  Chris Fleizach  <cfleizach@apple.com>

        AX: Textfields don't get focus when navigated to from 'show all tabs' button
        https://bugs.webkit.org/show_bug.cgi?id=101369

        Reviewed by Darin Adler.

        When focus leaves a webpage, the webpage does not normally clear its focused node. When focus
        returns (through tab, or mouse click), then focus will be cleared and restored.

        However, when focus is returned through accessibility means, focus is not cleared first, which
        means subsequent focus actions do nothing.

        This fix will check if the focused node is the same as the node being focused, and if so, clear the focus first.

        Making a layout test for this is not possible because it requires setting focus to something in the chrome, and then
        moving focus back to the webpage.
      
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setFocused):

2012-11-07  Adam Barth  <abarth@webkit.org>

        [V8] We should hide the DOMWrapperMaps inside DOMDataStore
        https://bugs.webkit.org/show_bug.cgi?id=101430

        Reviewed by Kentaro Hara.

        This is yet another incremental step towards landing the patch in bug
        101110. In this patch, we hide the existence of DOMWrapperMaps inside
        DOMDataStore. In the process, we can remove V8DOMMap.cpp.

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::set):
        * bindings/v8/DOMWrapperWorld.h:
        * bindings/v8/ScriptProfiler.cpp:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::neuterBinding):
        * bindings/v8/V8DOMMap.cpp: Removed.
        * bindings/v8/V8DOMMap.h: Removed.
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):
        (WebCore::V8DOMWrapper::setWrapperClass):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerScriptController.cpp:

2012-11-07  Varun Jain  <varunjain@chromium.org>

        Add new gesture type, LongTap, which is basically the completion of a GestureLongPress
        https://bugs.webkit.org/show_bug.cgi?id=101385

        Reviewed by Adam Barth.

        Test: Only creating the new enum. No functionality change, hence no tests required.

        * platform/PlatformEvent.h:

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

        Remove LayoutTypes abstraction
        https://bugs.webkit.org/show_bug.cgi?id=93050

        Reviewed by Levi Weintraub.

        Remove LayoutTypes abstraction and rename FractionalLayout* to
        Layout* now that all platforms use the FractionalLayout version
        (albeit with different fractions).

        No new tests, no change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityNodeObject.cpp:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.h:
        * css/LengthFunctions.cpp:
        * css/LengthFunctions.h:
        * dom/Document.h:
        * dom/DocumentMarkerController.h:
        * dom/ElementRareData.h:
        * dom/MouseRelatedEvent.h:
        * dom/Node.h:
        * dom/Touch.h:
        * editing/FrameSelection.cpp:
        * editing/FrameSelection.h:
        * editing/RenderedPosition.h:
        * html/HTMLAreaElement.h:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/TimelineRecordFactory.h:
        * loader/cache/CachedImage.h:
        * page/FocusController.h:
        * page/FrameView.h:
        * page/Page.h:
        * page/SpatialNavigation.cpp:
        * page/SpatialNavigation.h:
        * platform/FractionalLayoutUnit.h: Removed.
        * platform/LayoutUnit.h: Copied from Source/WebCore/platform/FractionalLayoutUnit.h.
        * platform/Length.h:
        * platform/PopupMenuClient.h:
        * platform/animation/AnimationUtilities.h:
        * platform/graphics/FloatPoint.cpp:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.cpp:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.cpp:
        * platform/graphics/FloatSize.h:
        * platform/graphics/FractionalLayoutBoxExtent.cpp: Removed.
        * platform/graphics/FractionalLayoutBoxExtent.h: Removed.
        * platform/graphics/FractionalLayoutPoint.h: Removed.
        * platform/graphics/FractionalLayoutRect.cpp: Removed.
        * platform/graphics/FractionalLayoutRect.h: Removed.
        * platform/graphics/FractionalLayoutSize.h: Removed.
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayerAnimation.cpp:
        * platform/graphics/IntRect.cpp:
        * platform/graphics/IntRect.h:
        * platform/graphics/LayoutBoxExtent.cpp: Copied from Source/WebCore/platform/graphics/FractionalLayoutBoxExtent.cpp.
        * platform/graphics/LayoutBoxExtent.h: Copied from Source/WebCore/platform/graphics/FractionalLayoutBoxExtent.h.
        * platform/graphics/LayoutPoint.h: Copied from Source/WebCore/platform/graphics/FractionalLayoutPoint.h.
        * platform/graphics/LayoutRect.cpp: Copied from Source/WebCore/platform/graphics/FractionalLayoutRect.cpp.
        * platform/graphics/LayoutRect.h: Copied from Source/WebCore/platform/graphics/FractionalLayoutRect.h.
        * platform/graphics/LayoutSize.h: Copied from Source/WebCore/platform/graphics/FractionalLayoutSize.h.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/filters/CustomFilterOperation.h:
        * platform/graphics/filters/CustomFilterParameterList.h:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.h:
        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp:
        * platform/graphics/filters/ValidatedCustomFilterOperation.h:
        * platform/graphics/qt/FractionalLayoutPointQt.cpp: Removed.
        * platform/graphics/qt/FractionalLayoutRectQt.cpp: Removed.
        * platform/graphics/qt/FractionalLayoutSizeQt.cpp: Removed.
        * platform/graphics/qt/LayoutPointQt.cpp: Copied from Source/WebCore/platform/graphics/qt/FractionalLayoutPointQt.cpp.
        * platform/graphics/qt/LayoutRectQt.cpp: Added.
        * platform/graphics/qt/LayoutSizeQt.cpp: Copied from Source/WebCore/platform/graphics/qt/FractionalLayoutSizeQt.cpp.
        * platform/graphics/transforms/TransformOperations.h:
        * platform/graphics/transforms/TransformState.h:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:
        * rendering/AutoTableLayout.h:
        * rendering/ColumnInfo.h:
        * rendering/ExclusionShapeInsideInfo.h:
        * rendering/FilterEffectRenderer.h:
        * rendering/FixedTableLayout.h:
        * rendering/GapRects.h:
        * rendering/HitTestResult.h:
        * rendering/HitTestingTransformState.cpp:
        * rendering/HitTestingTransformState.h:
        * rendering/InlineFlowBox.cpp:
        * rendering/LayoutRepainter.cpp:
        * rendering/LayoutRepainter.h:
        * rendering/LayoutState.h:
        * rendering/LayoutTypes.h:
        * rendering/LayoutTypesInlineMethods.h:
        * rendering/PaintInfo.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        * rendering/RenderFieldset.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlowThread.cpp:
        * rendering/RenderGeometryMap.h:
        * rendering/RenderImageResource.h:
        * rendering/RenderInline.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLineBoxList.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderMarquee.cpp:
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnBlock.cpp:
        * rendering/RenderMultiColumnSet.cpp:
        * rendering/RenderNamedFlowThread.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderTable.cpp:
        * rendering/RenderTable.h:
        * rendering/RenderText.cpp:
        * rendering/RenderThemeChromiumCommon.cpp:
        * rendering/RenderThemeChromiumCommon.h:
        * rendering/RenderTreeAsText.cpp:
        * rendering/RenderTreeAsText.h:
        * rendering/RenderView.h:
        * rendering/style/NinePieceImage.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/ShadowData.cpp:
        * rendering/style/ShadowData.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleImage.h:
        * rendering/svg/SVGRenderSupport.h:

2012-11-07  Alexandru Chiculita  <achicu@adobe.com>

        CoordinatedGraphicsArgumentCoders should use ValidatedCustomFitlerOperation instead
        https://bugs.webkit.org/show_bug.cgi?id=100905

        Reviewed by Noam Rosenthal.

        Added getters for the validated shaders, so that platform code could extract them.

        No new tests, just added two getters.

        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        (WebCore::CustomFilterValidatedProgram::validatedVertexShader):
        (WebCore::CustomFilterValidatedProgram::validatedFragmentShader):
        (CustomFilterValidatedProgram):

2012-11-07  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Assertion failure with open() within upgradeneeded
        https://bugs.webkit.org/show_bug.cgi?id=96947

        Reviewed by Dimitri Glazkov.

        Postpone creation of the "pending second half open" until the version change
        transaction has started.

        Test: storage/indexeddb/unblocked-version-changes.html

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setIntVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseCallbacks.h:

2012-11-07  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Add CustomFilterMeshBoxType to ValidatedCustomFilterOperation
        https://bugs.webkit.org/show_bug.cgi?id=100890

        Reviewed by Dean Jackson.

        Added the CustomFilterMeshBoxType parameter to the ValidatedCustomFilterOperation.

        No new tests, this parameter is not used in the implementation yet.

        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp:
        (WebCore::ValidatedCustomFilterOperation::ValidatedCustomFilterOperation):
        * platform/graphics/filters/ValidatedCustomFilterOperation.h:
        (WebCore::ValidatedCustomFilterOperation::create):
        (WebCore::ValidatedCustomFilterOperation::meshBoxType):
        (WebCore::ValidatedCustomFilterOperation::operator==):
        (ValidatedCustomFilterOperation):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::createCustomFilterEffect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeFilterOperations):

2012-11-07  Sergio Villar Senin  <svillar@igalia.com>

        [Qt] Implement deleteCookie() for persistent storage
        https://bugs.webkit.org/show_bug.cgi?id=101272

        Reviewed by Jocelyn Turcotte.

        Individual cookies were never persistently cleared as the
        deleteCookie() virtual method was not implemented for persistent
        storage. That's why cookies were only deleted for the current
        session.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::SharedCookieJarQt::deleteCookie):
        (WebCore): added deleteCookie() implementation for persistent
        storage.
        * platform/qt/CookieJarQt.h:
        (SharedCookieJarQt):

2012-11-07  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Style should update when 'pseudo' attribute is dynamically updated
        https://bugs.webkit.org/show_bug.cgi?id=100918

        Reviewed by Dimitri Glazkov.

        When 'pseudo' attribute is changed and its element is in ShadowTree, we enable the styleShouldRecalc flag.

        It would be fast if we have a set of pseudo attribute style value in RuleFeatureSet,
        but it might consume a lot of memory.

        Test: fast/dom/shadow/pseudo-attribute-dynamic.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):

2012-11-07  Ulan Degenbaev  <ulan@chromium.org>

        [V8] WebKit sends unnecessary low memory notification when running memory benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=101474

        Reviewed by Kentaro Hara.

        Do not send low memory notification to V8 when most of memory usage
        comes from V8 heap and not DOM objects. In this case V8 can schedule GC
        itself more optimally.

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::checkMemoryUsage):

2012-11-07  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Open link in this window action
        https://bugs.webkit.org/show_bug.cgi?id=101226

        Reviewed by Simon Hausmann.

        Adds the action to the WebCore context-menu controller.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:
        * platform/LocalizedStrings.h:
        * platform/qt/LocalizedStringsQt.cpp:
        (WebCore::contextMenuItemTagOpenLinkInThisWindow):

2012-11-07  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] closure compiler fixes
        https://bugs.webkit.org/show_bug.cgi?id=101459

        Reviewed by Pavel Feldman.

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-11-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133712.
        http://trac.webkit.org/changeset/133712
        https://bugs.webkit.org/show_bug.cgi?id=101461

        Broke fast/forms/time* tests on chromium-win. (Requested by
        mkwst on #webkit).

        * platform/text/win/LocaleWin.cpp:
        (WebCore::DateFormatToken::DateFormatToken):
        (DateFormatToken):
        (WebCore):
        (WebCore::isEraSymbol):
        (WebCore::isYearSymbol):
        (WebCore::isMonthSymbol):
        (WebCore::isDaySymbol):
        (WebCore::commitLiteralToken):
        (WebCore::parseDateFormat):
        (WebCore::LocaleWin::ensureShortDateTokens):
        (WebCore::convertWindowsDateFormatToLDML):
        (WebCore::mapCharacterToDateTimeFieldType):
        (WebCore::convertWindowsTimeFormatToLDML):
        (WebCore::LocaleWin::dateFormat):
        (WebCore::LocaleWin::monthFormat):
        (WebCore::LocaleWin::timeFormat):
        (WebCore::LocaleWin::shortTimeFormat):
        * platform/text/win/LocaleWin.h:
        (LocaleWin):

2012-11-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Editing formatted source should not be allowed.
        https://bugs.webkit.org/show_bug.cgi?id=101355

        Reviewed by Pavel Feldman.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._onFormattedChanged):
        * inspector/front-end/UISourceCodeFrame.js:
        (WebInspector.UISourceCodeFrame.prototype._onFormattedChanged):

2012-11-07  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Use setPseudo() instead of setShadowPseudoId().
        https://bugs.webkit.org/show_bug.cgi?id=101306

        Reviewed by Kent Tamura.

        We would like to remove setShadowPseudoId() and use setPseudo() instead, since ShadowDOM spec now has
        'pseudo' attribute.

        We change all setShadowPseudoId() invocation to setPseudo() invocation. Also, when AtomicString is not
        constructed with AtomicStringFromLiteral, we use it.

        No new tests, refactoring.

        * WebCore.exp.in:
        * dom/Element.cpp:
        * dom/Element.h:
        (Element):
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updatePlaceholderText):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::updatePlaceholderText):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitLiteral):
        (WebCore::DateTimeEditElement::DateTimeEditElement):
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::initialize):
        * html/shadow/DateTimeFieldElement.h:
        (DateTimeFieldElement):
        * html/shadow/PickerIndicatorElement.cpp:
        (WebCore::PickerIndicatorElement::PickerIndicatorElement):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::TextTrackCueBox):
        (WebCore::TextTrackCue::updateDisplayTree):
        * testing/Internals.cpp:
        (WebCore::Internals::setShadowPseudoId):

2012-11-07  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] Save CanvasGradient objects state for a replay
        https://bugs.webkit.org/show_bug.cgi?id=101432

        Reviewed by Pavel Feldman.

        Save CanvasGradient resource state for a subsequent replay. The gradient's state is modified by the gradient.addColorStop() call.

        Test: inspector/profiler/canvas2d/canvas2d-gradient-capturing.html

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-11-07  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Snippets evaluations should not appear in Sources tab of navigator.
        https://bugs.webkit.org/show_bug.cgi?id=101354

        Reviewed by Pavel Feldman.

        * inspector/front-end/DebuggerScriptMapping.js:
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.isSnippet):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._snippetIdForSourceURL):

2012-11-07  Dan Carney  <dcarney@google.com>

        [V8] Cleanup V8DOMWrapper::getCachedWrapper
        https://bugs.webkit.org/show_bug.cgi?id=100853

        Reviewed by Adam Barth.

        Slight cleanup. Removed redundant branch.

        No new tests. No change in functionality.

        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):

2012-11-07  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Unreviewed trivial build fix adapting to QtMultimedia API changes

        The QtMultimedia namespace is now called QMultimedia and
        QtMultimedia::MetaData is now QMediaMetaData.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::supportsType):
        (WebCore::MediaPlayerPrivateQt::totalBytes):

2012-11-07  Christophe Dumez  <christophe.dumez@intel.com>

        Add replaceWithLiteral() method to WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=101257

        Reviewed by Benjamin Poulain.

        Substitute String::replace() calls by String::replaceWithLiteral() where
        adequate, for efficiency.

        No new tests, no behavior change.

        * dom/Node.cpp:
        (WebCore::Node::showNode):
        * editing/EditingStyle.cpp:
        (WebCore::StyleChange::extractTextStyles):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendQuotedURLAttributeValue):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setSearch):
        * loader/FormSubmission.cpp:
        (WebCore::appendMailtoPostFormDataToURL):
        * platform/network/soup/ProxyResolverSoup.cpp:
        (soupProxyResolverWkSetProperty):
        * plugins/PluginView.cpp:
        (WebCore::makeURL):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::showBox):
        * xml/XSLTProcessor.cpp:
        (WebCore::transformTextStringToXHTMLDocumentString):

2012-11-07  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Remove support for "desktop-width" in the viewport meta tag
        https://bugs.webkit.org/show_bug.cgi?id=101217

        Reviewed by Gyuyoung Kim.

        This has been removed from the CSS Device Adaptation spec, and
        should be safe to remove as it is not documented anywhere (neither
        in blog posts).

        The viewport meta should only support the legacy features.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        (WebCore::findSizeValue):
        (WebCore::findScaleValue):
        (WebCore::findUserScalableValue):
        * dom/ViewportArguments.h:

2012-11-07  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Fix execution of exif-orientation-image-document.html on EFL Wk2 bot
        https://bugs.webkit.org/show_bug.cgi?id=101343

        Reviewed by Kenneth Rohde Christiansen.

        Add Cairo to the list of backends that support shouldRespectImageOrientation.

        No new tests, fixes exif-orientation-image-document.html.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):

2012-11-06  Yury Semikhatsky  <yurys@chromium.org>

        Console not displaying all properties of an Object once native Constructor overwritten
        https://bugs.webkit.org/show_bug.cgi?id=101320

        Reviewed by Pavel Feldman.

        Use Object instance from {}.constructor when formatting inspector messages in the
        injected script. Otherwise inspected page may overwrite Object value and break inspector.

        Test: inspector/console/console-Object-overwritten.html

        * inspector/InjectedScriptSource.js:

2012-11-06  Keishi Hattori  <keishi@webkit.org>

        Implement month picking to calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=101333

        Reviewed by Kent Tamura.

        This adds month picker mode to CalendarPicker.

        No new tests. Tests will be added later when this feature is enabled in DRT.

        * Resources/pagepopups/calendarPicker.css:
        (.month-mode .day): Remove rounded corners when in month mode.
        * Resources/pagepopups/calendarPicker.js:
        (Month.createFromToday): Creates month containing today.
        (CalendarPicker): Set this.selectionConstructor to Day or Month depending on the mode. Create DayTables or MonthPickerDaysTable depending on the mode.
        (CalendarPicker.prototype.handleToday):
        (CalendarPicker.prototype._layoutButtons):
        (DaysTable.prototype._renderMonth): Set element.dataset.monthValue for all date nodes.
        (DaysTable.prototype._markRangeAsSelected): Marks all day nodes in range as selected.
        (DaysTable.prototype.selectRange): Selects a day.
        (DaysTable.prototype.selectRangeAndShowEntireRange): Same as selectRange.
        (DaysTable.prototype._selectRangeContainingNode):
        (DaysTable.prototype._rangeForNode): Returns Day for node.
        (DaysTable.prototype.startDate): Start datetime of visible date range. This value is inclusive.
        (DaysTable.prototype.endDate): End datetime of visible date range. This value is exclusive.
        (DaysTable.prototype._handleKey):
        (MonthPickerDaysTable):
        (MonthPickerDaysTable.prototype._markRangeAsSelected): Marks all day nodes in range as selected.
        (MonthPickerDaysTable.prototype.selectRange): Selects month. If month is not visible, navigates to that month.
        (MonthPickerDaysTable.prototype.selectRangeAndShowEntireRange): Selects month. Navigates to the month.
        (MonthPickerDaysTable.prototype._rangeForNode): Returns Month for node.
        (MonthPickerDaysTable.prototype._handleKey): Arrow keys simply move the selection forwards or backwards.

2012-11-06  Dan Beam  <dbeam@chromium.org>

        Enable REQUEST_AUTOCOMPLETE for chromium port
        https://bugs.webkit.org/show_bug.cgi?id=101376

        Reviewed by Adam Barth.

        Added a runtime enabled feature to control whether HTMLFormElement#requestAutocomplete is visible from JavaScript.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (RuntimeEnabledFeatures):

        Added a binding from RuntimeEnabledFeatures that triggers [V8EnabledAtRuntime=requestAutocomplete].

        (WebCore::RuntimeEnabledFeatures::requestAutocompleteEnabled):

        Added a getter to WebCore to ask whether the runtime flag requestAutocomplete is on.

        (WebCore::RuntimeEnabledFeatures::setRequestAutocompleteEnabled):

        Added a setter to WebCore to affect the runtime flag requestAutocomplete.

        * html/HTMLFormElement.idl:

        Wrapped commonly grouped features in an #if defined(ENABLED_REQUEST_AUTOCOMPLETE) block and added [V8EnableAtRuntime]
        so these features can be changed with a command line switch in the chromium port.

2012-11-06  Adam Barth  <abarth@webkit.org>

        [V8] Unify setJSWrapperForDOMObject and setJSWrapperForDOMNode
        https://bugs.webkit.org/show_bug.cgi?id=101422

        Reviewed by Kentaro Hara.

        This patch is another incremental step towards the patch in Bug 10110.
        In this step, we unify setJSWrapperForDOMObject and
        setJSWrapperForDOMNode.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateToV8Converters):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::V8Float64Array::wrap):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::wrap):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::wrap):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::wrap):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::wrap):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::wrap):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::wrap):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::wrap):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::wrap):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::constructorCallback):
        (WebCore::V8TestNode::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyTestObjAttrAttrGetter):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::V8TestObj::wrap):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::wrap):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::get):
        (DOMDataStore):
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperPrivate):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):

2012-11-06  Ken Buchanan  <kenrb@chromium.org>

        Crash due to column span under button element
        https://bugs.webkit.org/show_bug.cgi?id=101402

        Reviewed by Abhishek Arya.

        When there is a column-spanning child of a RenderButton
        splitBlocks() must split the RenderButton as well as its
        only permitted direct child, the anonymous block referenced
        by m_inner. A crash was occurring because splitBlocks()
        calls addChildIgnoringAnonymousColumnBlocks() to add the
        cloned m_inner to the cloned RenderButton, which meant the
        m_inner for the cloned RenderButton was not being set even
        though a child was being added. This violates state
        assumptions in the RenderButton code.

        This patch prevents any descendants of RenderButton from
        spanning columns. Also, it adds a precautionary check in
        RenderButton::removeChild() to mitigate problems if similar
        state problems are found in future.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::containingColumnsBlock):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::removeChild):

2012-11-06  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Pseudo custom-elements should start with 'x-'.
        https://bugs.webkit.org/show_bug.cgi?id=100919

        Reviewed by Dimitri Glazkov.

        Pseuco custom-elements should start with 'x-'. 'Pseudo' starting with '-webkit-' should work
        only in UserAgent ShadowDOM. If it's used in Author ShadowDOM, it should not work.

        Test: fast/dom/shadow/pseudo-attribute-rendering.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector): Added ShadowRoot type check.

2012-11-06  Chris Evans  <cevans@google.com>

        Re-order variables in BidiRun and LayoutState
        https://bugs.webkit.org/show_bug.cgi?id=100173

        Reviewed by Eric Seidel.

        The variable re-ordering and use of bitfields for bools has two benefits:
        1) Size reduction. sizeof(BidiRun) goes down from 48 to 40 bytes on 64-bit. This is achieved by removing a bool member variable from BidiRun and packing it together with other bools in the BidiCharacterRun base class.
        2) Security improvement. We have a lot of use-after-free in the RenderObject hierarchy, and the RenderArena class protects us from a lot of trouble by ensuring that objects of arbitrary type cannot be overlayed on top of freed RenderObjects. This change additionally makes sure that non-virtual RenderArena allocated objects do not have member variables which fully overlap the freed vtable pointer. This leaves re-used vtable pointers always pointing to either a valid vtable or an invalid address due to the freelist high-bit poisoning.

        This change is exclusively about size savings; it is performance neutral as you would expect, including on Parser/html5-full-render.html

        * platform/text/BidiResolver.h:
        (WebCore::BidiCharacterRun::BidiCharacterRun): impact from re-ordering members.
        (BidiCharacterRun): provide an efficiently packed bit of storage for BidiRun subclass to use, and re-order members to place bools adjacent.
        * rendering/BidiRun.h:
        (WebCore::BidiRun::BidiRun): use base class' efficiently packed bit storage for m_hasHyphen.
        (BidiRun): m_hasHyphen is now stored in the base class.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState): impact from re-ordering members.
        (LayoutState): re-order members to place bools adjacently.

2012-11-06  Kent Tamura  <tkent@chromium.org>

        [Chromium-win] Refactor date/time format conversion code in LocaleWin
        https://bugs.webkit.org/show_bug.cgi?id=101329

        Reviewed by Kentaro Hara.

        convertWindowsDateFormatToLDML and convertWindowsTimeFormatToLDML did
        similar jobs with different code. We can merge them into one function.

        As for the date format conversion, we have tokenized a format string and
        stored token objects into a vector. We skip token object generation and
        generate a LDML-compliant pattern string during parsing.

        No new tests. This should make no behavior changes and
        WebKit/chromium/tests/LocaleWinTest.cpp has test cases.

        * platform/text/win/LocaleWin.cpp:
        (WebCore): Remove DateFormatToken, isFooSymbol, ensureShortDateTokens,
        convertWindowsDateFormatToLDML, mapCharacterToDateTimeFieldType, and
        convertWindowsTimeFormatToLDML.
        (WebCore::commitLiteralToken): Store the result to the specified StringBuilder.
        (WebCore::convertWindowsDateTimeFormat):
        Renamed from parseDateFormat, and supports time format symbols.
        (WebCore::LocaleWin::dateFormat): Use convertWindowsDateTimeFormat.
        (WebCore::LocaleWin::monthFormat): Ditto.
        (WebCore::LocaleWin::timeFormat): Ditto.
        (WebCore::LocaleWin::shortTimeFormat): Ditto.
        * platform/text/win/LocaleWin.h:
        (LocaleWin): Remove ensureShortDateTokens and m_shortDateTokens.

2012-11-06  Elliott Sprehn  <esprehn@chromium.org>

        Make Document::renderer faster by using the cached ptr for RenderView
        https://bugs.webkit.org/show_bug.cgi?id=101409

        Reviewed by Eric Seidel.

        In Bug 101277 I made Document::renderView() just return m_renderView instead
        of casting the result of renderer(). While this made renderView() cheaper it
        makes more sense to just make renderer() faster for Document pointers and
        go back to the out of line method in RenderView.h because lots of places in
        the code do document()->renderer().

        No new tests, this is just a refactor.

        * dom/Document.h:
        (WebCore::Document::renderer):
        * rendering/RenderView.h:
        (WebCore::Document::renderView):

2012-11-06  Adam Barth  <abarth@webkit.org>

        [V8] neuterBinding should remember the type of its argument
        https://bugs.webkit.org/show_bug.cgi?id=101413

        Reviewed by Kentaro Hara.

        This is a small part of the patch in
        https://bugs.webkit.org/show_bug.cgi?id=101110 that we can land
        separately to try to tease out what is causing the memory regression.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore):
        (WebCore::neuterBinding):

2012-11-06  Alexey Proskuryakov  <ap@apple.com>

        Clean up which storage cookie jar functions use
        https://bugs.webkit.org/show_bug.cgi?id=101395

        Reviewed by Brady Eidson.

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Updated for two new WKSI functions.

        * platform/CookieJar.h: Added explanatory comments.

        * platform/mac/CookieJar.mm:
        (WebCore::cookies): Removed fallback on NSHTTPCookieStorage, the WKSI function
        already implements it.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::setCookies): Ditto.
        (WebCore::cookiesEnabled): Ditto.
        (WebCore::getRawCookies): Ditto.
        (WebCore::deleteCookie): Ditto.
        (WebCore::getHostnamesWithCookies): This function used to look at NSHTTPCookieStorage
        exclusively. While it makes sense to bypass private storage session, default storage
        session (currently only used for testing on Mac) is never OK to bypass. Changed to
        use a WKSI function that supports both.
        (WebCore::deleteCookiesForHostname): Ditto.
        (WebCore::deleteAllCookies): Ditto.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        Updated to match Foundation, so now these functions bypass private session.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::currentCFHTTPCookieStorage): Updated a comment.
        (WebCore::defaultCFHTTPCookieStorage):  Added a function that returns cookie storage
        for non-private session (or null if that would be an NSHTTPCookieStorage).        
        (WebCore::startObservingCookieChanges): We do not want to observe private cookies
        here, and we certainly don't want a mismatch between start/stop due to private
        browsing mode changes.
        (WebCore::stopObservingCookieChanges): Ditto.

        * platform/network/cf/CookieStorageCFNet.h: Added defaultCFHTTPCookieStorage().

2012-11-06  Huang Dongsung  <luxtella@company100.net>

        Build fix. r133601 broke the Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=101404

        Reviewed by Noam Rosenthal.

        Only static const integral data members can be initialized within a class in the
        Windows, so we initialize static const double date members out of the class.

        * platform/graphics/texmap/TextureMapper.cpp:
        (BitmapTexturePool):
        (WebCore):

2012-11-06  Simon Fraser  <simon.fraser@apple.com>

        -webkit-background-clip:text produces artifacts when applied to the body and the browser is resized
        https://bugs.webkit.org/show_bug.cgi?id=89287

        Reviewed by Beth Dakin.

        If the body had -webkit-background-clip: text, we'd fail to paint
        anything behind it, so would see garbage pixels.
        
        Fix by having RenderView::paintBoxDecorations() check for a background-clip of "text"
        on the renderer that paints the root background.
        
        Added some new pixel tests for combinations of html and body transform
        and backgrounds; earlier versions of the patch broke some of these tests.

        Tests: fast/backgrounds/background-clip-text-on-body.html
               fast/backgrounds/transformed-body-background.html
               fast/backgrounds/transformed-body-html-background.html
               fast/backgrounds/transformed-html-body-background.html

        * rendering/RenderView.cpp:
        (WebCore::rendererObscuresBackground): Broke up the single condition
        into early 'false' returns when possible. We need to also check whether
        the renderer that actually paints the background (which might be the body)
        will fill it; background-clip: text does not.
        (WebCore::RenderView::paintBoxDecorations): Rather than checking firstChild(),
        actually check the root renderer, so that we can reliably get to the renderer
        that mains the root background.

2012-11-06  Stephen White  <senorblanco@chromium.org>

        Implement save and restore for a bunch of InternalSettings state
        https://bugs.webkit.org/show_bug.cgi?id=101394

        Reviewed by Dirk Pranke.

        In http://trac.webkit.org/changeset/133399, I resolved a bunch of 
        flaky tests by saving and restoring the InternalSettings state
        EnableCompositingForFixedPosition.  On a hunch, I git grepped for all
        internal settings state which is being set by layout tests but not
        saved and restored.  It turns out there about 15 calls.

        This patch takes care of five of them, mostly compositing-related.
        The others I was either not sure about, or were already at least
        being reset to known values by the testing harness.

        Hopefully this will alleviate some further test flakiness.

        * testing/InternalSettings.cpp:
        * testing/InternalSettings.h:

2012-11-06  KyungTae Kim  <ktf.kim@samsung.com>

        Fix build warning in RenderLayer.cpp caused by r133628
        https://bugs.webkit.org/show_bug.cgi?id=101401

        Reviewed by Simon Fraser.

        The static function WebCore::frameViewFromLayer is only used when USE(ACCELERATED_COMPOSITING),
        so define it only that case for removing -Wunused-function warning

        * rendering/RenderLayer.cpp:
        (WebCore):

2012-11-06  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Store ExclusionPolygonEdge vertices in clockwise order
        https://bugs.webkit.org/show_bug.cgi?id=100763

        Reviewed by Darin Adler.

        The ExclusionPolygon's internal logic, notably getVertexIntersectionVertices(),
        assumes that ExclusionPolygonEdge vertices are stored in clockwise order.
        If this is not true, then we construct the polygon's edges in reverse.

        To determine if the vertices are in clockwise order, we compare the slope
        of the line between the top,left vertex and its previous vertex, with the
        the slope of the line of vertices before and after the top,left vertex.
        If the slope of the latter is greater, then top,left vertex is located
        to its left, and the vertices are clockwise.

        Test: fast/exclusions/shape-inside/shape-inside-counterclockwise-polygon.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::determinant): Used to decide if the min vertex is on the left side of the line that passes through its adjacent vertices.
        (WebCore::ExclusionPolygon::ExclusionPolygon): If the polygon's vertices are specified in counterclockwise order, construct the edges in reverse.
        (WebCore::appendIntervalX): Made this an inline since it was only defined as a function for the sake of clarity.

2012-11-06  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        RIM PR 238123
        Internal Reviewed by Chris Hutten-Czapski
        BB10 selection theme use slice image function to draw selection button,
        any border-radius setting other than 0 will make the button corner
        clipped. Always set button border-radius: 0 for BB10 theme.

        * css/themeBlackBerry.css:
        (select[size][multiple]):
        (select[size="1"]):

2012-11-06  Elliott Sprehn  <esprehn@chromium.org>

        Remove branch from inside RenderObject::view now that renderer() is more expensive
        https://bugs.webkit.org/show_bug.cgi?id=101277

        Reviewed by Eric Seidel.

        It was observed in Bug 100057 that calling renderer() repeatedly now that it has a branch
        can be a performance regression. Now that we no longer keep a separate pointer for rare data
        in Document, we can use that space for a pointer to the RenderView making RenderObject::view()
        faster and removing the branch.

        This is a 1% improvement on Parser/html5-full-render.html

        This also cleans up the code because it turns out we don't need to have RenderObject::view() in
        RenderView.h because we can just call Document::renderView() and not do toRenderView. This makes
        it easier to find this method as it exists in the right header file now.

        No new tests, this is just a refactor.

        * WebCore.exp.in: Remove export of Document::renderView since it's inline now.
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setRenderer):
        (WebCore):
        * dom/Document.h:
        (WebCore::Document::renderView):
        (Document):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::view):
        * rendering/RenderView.h:
        (WebCore):

2012-11-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133526.
        http://trac.webkit.org/changeset/133526
        https://bugs.webkit.org/show_bug.cgi?id=101388

        May have caused 15% memory regression in Chromium (Requested
        by jsbell|gardener on #webkit).

        * UseV8.cmake:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateToV8Converters):
        (GetDomMapFunction):
        (GetDomMapName):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::V8Float64Array::wrap):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::wrap):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::wrap):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::wrap):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::wrap):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::wrap):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::wrap):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::wrap):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::wrap):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::constructorCallback):
        (WebCore::V8TestNode::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyTestObjAttrAttrGetter):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::V8TestObj::wrap):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::wrap):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStore::current):
        (WebCore::DOMDataStore::reportMemoryUsage):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::domNodeMap):
        (WebCore::DOMDataStore::domObjectMap):
        (DOMDataStore):
        * bindings/v8/DOMWrapperMap.h:
        (WebCore):
        (DOMWrapperMap):
        (WebCore::DOMWrapperMap::~DOMWrapperMap):
        (WebCore::DOMWrapperHashMap::remove):
        * bindings/v8/DOMWrapperWorld.h:
        * bindings/v8/IntrusiveDOMWrapperMap.h: Copied from Source/WebKit/chromium/src/WebScriptController.cpp.
        (WebCore):
        (IntrusiveDOMWrapperMap):
        (WebCore::IntrusiveDOMWrapperMap::weakCallback):
        * bindings/v8/ScriptProfiler.cpp:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::neuterBinding):
        * bindings/v8/V8DOMMap.cpp: Copied from Source/WebKit/chromium/src/WebScriptController.cpp.
        (WebCore):
        (WebCore::getDOMNodeMap):
        (WebCore::getDOMObjectMap):
        * bindings/v8/V8DOMMap.h: Copied from Source/WebKit/chromium/src/WebScriptController.cpp.
        (WebCore):
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::getCachedWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerScriptController.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):

2012-11-06  Alexey Proskuryakov  <ap@apple.com>

        Some cookie code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=101375

        Reviewed by Dan Bernstein.

        * platform/CookieJar.h: Fixed style. Grouped functions by which storage they operate
        on in Mac port, but didn't add explanatory comments yet, because this is different
        in some ports.

        * platform/mac/CookieJar.mm:
        (WebCore): Removed special code for isHTTPOnly, it's present in Foundation in all
        supported OS X versions.
        (WebCore::filterCookies): Use -isHTTPOnly directly.
        (WebCore::cookies): Get rid of a variable for URL, implicit conversion works just as well.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::setCookies): Assert that no more than one cookie was created from one
        Set-Cookie header, document.cookie can only be used to set one cookie at a time.
        (WebCore::getRawCookies): Removed useless local variables.

        * platform/network/CookieStorage.h: Removed an unneeded include, clarified a comment.

        * platform/network/HTTPHeaderMap.h: Added a FIXME.

2012-11-06  John Griggs  <jgriggs@rim.com>

        Implement MediaPlayerPrivate::didLoadingProgress for BlackBerry platform
        https://bugs.webkit.org/show_bug.cgi?id=100378

        Reviewed by Eric Carlson.

        Implement this method for BlackBerry platform.

        New test: LayoutTests/media/progress-events-generated-correctly.html

        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::didLoadingProgress):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (MediaPlayerPrivate):

2012-11-06  Adam Barth  <abarth@webkit.org>

        DOMImplementation should use ScriptWrappable
        https://bugs.webkit.org/show_bug.cgi?id=101279

        Reviewed by Eric Seidel.

        This patch makes DOMImplementation ScriptWrappable. Both the V8 and JSC
        bindings automatically detect the presence of this base class and use
        it to optimize getting and setting JavaScript wrappers.

        This patch is a 23% progression on Bindings/document-implementation for
        the V8 bindings and a 69% progression for the JSC bindings.

        * dom/DOMImplementation.h:

2012-11-06  Benjamin Poulain  <benjamin@webkit.org>

        Speed up TransformationMatrix::multiply() on modern ARM
        https://bugs.webkit.org/show_bug.cgi?id=101084

        Reviewed by Gavin Barraclough.

        The main improvements are:
        -Store the full source matrix in the registers d16 to d31. This way we avoid going
         back and forth to memory to use the operands.
         Since the full matrix is in register, we can also directly modify the memory of m_matrix,
         we no longer need the temporary matrix memcopied at the end.
        -Use of LoadMultiple and StoreMultiple to load-store the matrix parameters.
        -Use Multiply-Accumulate instead of VMUL followed by VADD. This half the number of instruction.
        -On regular ARMv7, using a loop to reuse the same code for each row also improve the performance.

        Depending on the hardware, the new code takes 20% to 42% less time than the basic implementation.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply):
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix):

2012-11-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133529 and r133562.
        http://trac.webkit.org/changeset/133529
        http://trac.webkit.org/changeset/133562
        https://bugs.webkit.org/show_bug.cgi?id=101371

        Caused 15% memory regression on Chromium page cyclers
        (Requested by jsbell|gardener on #webkit).

        * platform/text/LineBreakIteratorPoolICU.h:
        (WebCore::LineBreakIteratorPool::take):
        (WebCore::LineBreakIteratorPool::put):
        (LineBreakIteratorPool):
        * platform/text/TextBreakIterator.cpp:
        (WebCore::acquireLineBreakIterator):
        * platform/text/TextBreakIterator.h:
        (WebCore):
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        (LazyLineBreakIterator):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/gtk/TextBreakIteratorGtk.cpp:
        (WebCore::setUpIterator):
        (WebCore::acquireLineBreakIterator):
        * platform/text/wince/TextBreakIteratorWinCE.cpp:
        (WebCore::acquireLineBreakIterator):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/RenderText.h:
        (WebCore):
        * rendering/break_lines.cpp:
        (WebCore):
        (WebCore::isBreakableSpace):
        (WebCore::needsLineBreakIterator):
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):
        * rendering/break_lines.h:
        (WebCore):
        (WebCore::isBreakable):

2012-11-06  Peter Beverloo  <peter@chromium.org>

        [Chromium] Enable the JavaScript i18n API for Android
        https://bugs.webkit.org/show_bug.cgi?id=101357

        Reviewed by Adam Barth.

        Remove the conditional dependency on the v8-i18n API. The library is now
        always available in a Chromium for Android checkout.

        * WebCore.gyp/WebCore.gyp:

2012-11-06  Adam Barth  <abarth@webkit.org>

        ScriptWrappable should work for more than just Node
        https://bugs.webkit.org/show_bug.cgi?id=101319

        Reviewed by Eric Seidel.

        This patch generalizes the inline cached wrapper code path to work with
        all subclasses of ScriptWrappable, not just Node.

        * bindings/js/JSDOMBinding.h:
        (WebCore::setInlineCachedWrapper):
        (WebCore::getInlineCachedWrapper):
        (WebCore):
        (WebCore::clearInlineCachedWrapper):
        (WebCore::cacheWrapper):
        * bindings/js/JSNodeCustom.h:

2012-11-06  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        Revert webkit/ce306dcc698199a6f7ce679daf0a30c25d3a3d43 slider theme
        change which break media control and vertical slider.

        RIM PR 236993
        Internal Reviewed by Jeff Rogers.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintSliderTrackRect):
        (WebCore::RenderThemeBlackBerry::paintSliderThumb):

2012-11-06  Michael Saboff  <msaboff@apple.com>

        canonicalizedTitle() shouldn't convert 8 bit title strings to 16 bit
        https://bugs.webkit.org/show_bug.cgi?id=101105

        Reviewed by Darin Adler.

        Turned canonicalizedTitle() into a templated function based on character type.
        Changed call in updateTitle() to check the bitness of the title string to call
        the right template flavor of canonicalizedTitle().
        Made supporting changes by adding displayBufferModifiedByEncoding(LChar*, ...)
        and made TextEncoding::displayBuffer() a templated function as well.

        No new tests needed, as functionality is unchanged.

        * dom/Document.cpp:
        (WebCore::canonicalizedTitle):
        (WebCore::Document::updateTitle):
        (WebCore::Document::displayBufferModifiedByEncodingInternal):
        * dom/Document.h:
        (WebCore::Document::displayBufferModifiedByEncoding):
        * platform/text/TextEncoding.h:
        (TextEncoding):
        (WebCore::TextEncoding::displayBuffer):

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

        Fix RenderGeometryMap assertion when layers are scrolled during layout
        https://bugs.webkit.org/show_bug.cgi?id=101292

        Reviewed by Beth Dakin.

        When we set RenderLayer scroll positions as part of layout, we don't want
        to update compositing layers right away. Updating compositing layers
        requires that the entire layer tree has been updated from renderers,
        so that the geometry of all RenderLayers can be trusted. When this state
        was violated, RenderGeometryMap asserts.
        
        Fix by bailing from updateCompositingLayersAfterScroll() if FrameView
        tells us that we're doing layout. A full update of the compositing layers
        will happen later anyway.

        Test: compositing/geometry/geometry-map-scroll-during-layout-assertion.html

        * rendering/RenderLayer.cpp:
        (WebCore::frameViewFromLayer):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):

2012-11-06  Michael Saboff  <msaboff@apple.com>

        quoteCSSString() always creates a 16 bit string
        https://bugs.webkit.org/show_bug.cgi?id=101004

        Reviewed by Darin Adler.

        Added a new templated helper based on character type from the logic of quoteCSSString() to process
        the argument string based on its native bitness.

        Functionality covered by existing tests.

        * css/CSSParser.cpp:
        (WebCore::quoteCSSStringInternal):
        (WebCore::quoteCSSString):

2012-11-06  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fit-to-width broken on pages with viewport meta tag
        https://bugs.webkit.org/show_bug.cgi?id=99715

        Reviewed by Jocelyn Turcotte.

        Add a bool that indicates if the content had an explicit
        initial-scale in the viewport meta tag.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        * dom/ViewportArguments.h:
        (ViewportAttributes):

2012-11-06  Mike West  <mkwst@chromium.org>

        CSP 1.1: Tweak the script interface to match the spec.
        https://bugs.webkit.org/show_bug.cgi?id=101321

        Reviewed by Adam Barth.

       This patch brings WebKit in line with the changes made to the spec in
       https://dvcs.w3.org/hg/content-security-policy/rev/5a29424a37d4.
       Specifically, the following:

       - Renamed 'document.SecurityPolicy' to 'document.securityPolicy'
       - Converted the following to read-only boolean attributes:
         - 'allowsEval'
         - 'allowsInlineScript'
         - 'allowsInlineStyle'
         - 'isActive'

        These changes only have effect for ports with CSP_NEXT enabled.

        Tests: http/tests/security/contentSecurityPolicy/1.1/securitypolicy-allowinlinescript.html
               http/tests/security/contentSecurityPolicy/1.1/securitypolicy-allowinlinestyle.html

        * dom/Document.idl:
        * page/DOMSecurityPolicy.idl:
            Tweaking the IDL files to match the new definition of the
            functionlity in the spec.

2012-11-06  Andrey Lushnikov  <lushnikov@google.com>

        Added console.clear() method

        Web Inspector: add console.clear()
        https://bugs.webkit.org/show_bug.cgi?id=101021

        Reviewed by Vsevolod Vlasov.

        Adds native implementation of console.clear

        Test: inspector/console/console-clear-function.html

        * English.lproj/localizedStrings.js: Adds 'Console was cleared' string
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageTypeValue): Adds ClearMessageType
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage): Display strategy for "clear" message
        * inspector/front-end/ConsoleModel.js:
        * inspector/front-end/inspector.css:
        (.console-info): Adds style for the 'console was cleared' message
        * page/Console.cpp: backend binging for console.clear()
        (WebCore::Console::clear):
        (WebCore):
        * page/Console.h:
        (Console):
        * page/Console.idl: Adds 'clear' message to protocol
        * page/ConsoleTypes.h:

2012-11-06  Aaron Colwell  <acolwell@chromium.org>

        Heap-buffer-overflow in WebCore::TextTrackCueList::add
        https://bugs.webkit.org/show_bug.cgi?id=101018

        Reviewed by Eric Carlson.

        Added an extra check to avoid using a negative array index when a cue
        is added to the beginning of the list.

        Test case added to LayoutTests/media/track/track-add-remove-cue.html.

        * html/track/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::add):

2012-11-06  Aaron Colwell  <acolwell@chromium.org>

        Regression(r132681): Heap-use-after-free in WebCore::RenderTextTrackCue::layout
        https://bugs.webkit.org/show_bug.cgi?id=100981

        Reviewed by Eric Carlson.

        Fixing a TextTrackCue use after free bug. textTrackRemoveCues() needs to be called when
        an HTMLTrackElement is removed from an HTMLMediaElement so that references to
        TextTrackCues are removed from m_cueTree.

        Test: media/track/track-remove-by-setting-innerHTML.html

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

2012-10-23  Stephen White  <senorblanco@chromium.org>

        [skia] Implement reference (url) filters on composited layers.
        https://bugs.webkit.org/show_bug.cgi?id=100142

        Reviewed by James Robinson.

        Covered by css3/filters/effect-reference-hw.html

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        Add new files.
        * WebCore.xcodeproj/project.pbxproj:
        Mark FilterEffect.h as "private".
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setFilters):
        Use the new SkImageFilter builder and setLayer() infrastructure, but
        only if there's a reference filter in the chain.
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::createImageFilter):
        Add createImageFilter() factory function for building SkImageFilters.
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::ReferenceFilterOperation::filterEffect):
        (WebCore::FilterOperation::ReferenceFilterOperation::setFilterEffect):
        Add a FilterEffect member to ReferenceFilterOperation, and accessors
        for it.
        * platform/graphics/filters/skia/FEBlendSkia.cpp:
        (WebCore::FEBlend::createImageFilter):
        Implement SkImageFilter building for FEBlend filter.
        * platform/graphics/filters/skia/FEColorMatrixSkia.cpp:
        (WebCore::createColorFilter):
        (WebCore::FEColorMatrix::platformApplySkia):
        Refactor creation of SkColorFilter from an FEColorMatrix filter.
        (WebCore::FEColorMatrix::createImageFilter):
        Implement SkImageFilter building for FEColorMatrix filter.
        * platform/graphics/filters/skia/FEGaussianBlurSkia.cpp:
        (WebCore::FEGaussianBlur::createImageFilter):
        Implement SkImageFilter building for FEGaussianBlur filter.
        * platform/graphics/filters/skia/FELightingSkia.cpp:
        (WebCore::FELighting::createImageFilter):
        Implement SkImageFilter building for FELighting filters.
        * platform/graphics/filters/skia/FEMorphologySkia.cpp:
        (WebCore::FEMorphology::createImageFilter):
        Implement SkImageFilter building for FEMorphology filter.
        * platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp: Added.
        (WebCore::SkiaImageFilterBuilder::SkiaImageFilterBuilder):
        (WebCore::SkiaImageFilterBuilder::build):
        * platform/graphics/filters/skia/SkiaImageFilterBuilder.h:
        Implement new helper class for building an SkImageFilter DAG from
        a FilterEffect DAG.  Can also build from FilterOperations list.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        When building FilterEffects from a reference filter, also store the
        generated DAG on the ReferenceFilterOperation itself.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):
        Even when in composited mode, if there's a reference filter in the 
        chain, build the FilterEffect DAG from it.

2012-11-06  Max Feil  <mfeil@rim.com>

        [BlackBerry] Automatically go fullscreen on video play
        https://bugs.webkit.org/show_bug.cgi?id=101100

        Reviewed by Eric Carlson.

        There is a requirement to have HTML5 video automatically enter
        fullscreen when a video starts playing (PR131774). This change
        implements this feature, with restrictions. The main restriction
        is adherence to WebKit's philosophy of only entering fullscreen
        due to a user gesture. This is important in order to avoid
        pop-up advertisements and other unwanted fullscreen content.
        One consequence of this is that video elements with the autoplay
        attribute will not automatically enter fullscreen.

        Other caveats:
        - This feature applies only to "small screen" devices where
        automatically going fullscreen makes more sense.
        - Fullscreen will only be entered automatically when the
        video is played from the beginning (current time is zero).
        It is assumed that if the user is resuming play from a paused
        state and is not in fullscreen mode, then they exited fullscreen
        mode intentionally.

        Test: platform/blackberry/media/video-automatic-fullscreen.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerEnterFullscreen):
        (WebCore):
        (WebCore::HTMLMediaElement::mediaPlayerIsFullscreen):
        (WebCore::HTMLMediaElement::mediaPlayerIsFullscreenPermitted):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerEnterFullscreen):
        (WebCore::MediaPlayerClient::mediaPlayerIsFullscreen):
        (WebCore::MediaPlayerClient::mediaPlayerIsFullscreenPermitted):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::waitMetadataTimerFired):
        (WebCore::MediaPlayerPrivate::conditionallyGoFullscreenAfterPlay):
        (WebCore):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (MediaPlayerPrivate):

2012-11-06  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2][EFL][GTK] early return of checkSpellingOfString treats correct words as misspelled
        https://bugs.webkit.org/show_bug.cgi?id=101215

        Reviewed by Gustavo Noronha Silva.

        Save the misspelled location and length of the string to the default values (-1, 0)
        at the beginning of the checkSpellingOfString method.
        It assumes that the words are spelled correctly and early return of method doesn't
        cause assertions in findFirstMisspelling (WebCore/editing/TextCheckingHelper.cpp).

        * platform/text/enchant/TextCheckerEnchant.cpp:
        (TextCheckerEnchant::checkSpellingOfString):

2012-11-06  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Remove unused textures in the texture pool.
        https://bugs.webkit.org/show_bug.cgi?id=100706

        Reviewed by Noam Rosenthal.

        Currently, we do not remove textures in the texture pool of
        TextureMapper. The texture pool is destroyed when TextureMapper is
        destroyed. It means the texture pool consumes texture memory until its
        destruction. This patch removes textures if the textures have been not
        used in 3 seconds as LayerTreeCoordinator manages UpdateAtlases.

        Changing cache policy is not testable in layout tests.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::BitmapTexturePoolEntry::BitmapTexturePoolEntry):
        (WebCore::BitmapTexturePoolEntry::markUsed):
        (WebCore::BitmapTexturePoolEntry::compareTimeLastUsed):
        (BitmapTexturePoolEntry):
        (WebCore):
        (BitmapTexturePool):
        (WebCore::BitmapTexturePool::BitmapTexturePool):
        (WebCore::BitmapTexturePool::scheduleReleaseUnusedTextures):
        (WebCore::BitmapTexturePool::releaseUnusedTexturesTimerFired):
        (WebCore::BitmapTexturePool::acquireTexture):
        (WebCore::TextureMapper::acquireTextureFromPool):
        (WebCore::TextureMapper::TextureMapper):
        (WebCore::TextureMapper::~TextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore):
        (TextureMapper):

2012-11-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI instrument CachedMetadata. It uses ~300k on plus.google.com
        https://bugs.webkit.org/show_bug.cgi?id=101067

        Reviewed by Yury Semikhatsky.

        Plain vanilla instrumentation for CachedMetadata class.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedMetadata.cpp: Added.
        (WebCore):
        (WebCore::CachedMetadata::reportMemoryUsage):
        * loader/CachedMetadata.h:
        (CachedMetadata):

2012-11-06  Alexei Filippov  <alph@chromium.org>

        Web Inspector: report physical memory really committed for JS heap in NMI
        https://bugs.webkit.org/show_bug.cgi?id=101335

        Some OSes (e.g. Linux) perform lazy commits of requested memory.
        Because of that the committed memory may not retain any physical
        memory until the very first access to the committed chunk.
        That led to JS heap reported more physical memory than was currently
        in use.

        Reviewed by Vsevolod Vlasov.

        * bindings/v8/ScriptGCEvent.cpp:
        (WebCore::ScriptGCEvent::getHeapSize):

2012-11-06  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Breakpoint is not removed when it was set in non-formatted mode and then removed while in formatted mode.
        https://bugs.webkit.org/show_bug.cgi?id=100595

        Reviewed by Yury Semikhatsky.

        Breakpoints in storage are now updated/removed by file name saved from primary location when they were created,
        not by the name returned by UISourceCode (as this one could change when UISourceCode is formatted).
        SourceFileId is now used across BreakpointManager to specify file name.
        And breakpointStorageId is now used to specify (fileName, lineNumber) pair.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.sourceFileId):
        (WebInspector.BreakpointManager.prototype._restoreBreakpoints):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeRemoved): Removed redundant check.
        (WebInspector.BreakpointManager.prototype.breakpointLocationsForUISourceCode):
        (WebInspector.BreakpointManager.Breakpoint):
        (WebInspector.BreakpointManager.Breakpoint.prototype._breakpointStorageId):
        (WebInspector.BreakpointManager.Storage.prototype._restoreBreakpoints):
        (set WebInspector.BreakpointManager.Storage.Item):

2012-11-06  Keishi Hattori  <keishi@webkit.org>

        The "Rect" class in WebCore/Resources/pagepopups/pickerCommon.js should be renamed
        https://bugs.webkit.org/show_bug.cgi?id=101304

        Reviewed by Kent Tamura.

        The name Rect conflicts with CSS Rect.

        No new tests. Just renaming.

        * Resources/pagepopups/pickerCommon.js:
        (Rectangle): Renamed from Rect.
        (Rectangle.prototype.toString):
        (Rectangle.intersection):
        (adjustWindowRect):
        (hideWindow):

2012-11-06  Kentaro Hara  <haraken@chromium.org>

        Replace setDOMWrapper(wrapper, 0) with resetDOMWrapper(wrapper)
        https://bugs.webkit.org/show_bug.cgi?id=101190

        Reviewed by Adam Barth.

        To guarantee that we never stores NULL pointers to V8 internal
        fields, we want to insert ASSERT()s to setDOMWrapper().
        This patch replaces setDOMWrapper() that intentionally
        passes NULL pointers with clearDOMWrapper().

        No tests. No change in behavior.

        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::clearDOMWrapper):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::forgetV8ObjectForNPObject):

2012-11-06  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Displayed name/path of urls in network tab of dev tools is inconsistent
        https://bugs.webkit.org/show_bug.cgi?id=101064

        Reviewed by Yury Semikhatsky.

        Extracted some generic methods from ParsedURL displayName getters (about:blank and data url handlers).
        Implemented consistent name() and path() method on NetworkRequest based on ParsedURL.
        NetworkPanel now uses name() and path() methods on NetworkRequest to show requests and search for them.

        Test: http/tests/inspector/network/request-name-path.html

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._matchRequest):
        (WebInspector.NetworkLogView.prototype._highlightMatchedRequests):
        (WebInspector.NetworkLogView.prototype.performFilter):
        (WebInspector.NetworkDataGridNode.prototype._refreshNameCell):
        (WebInspector.NetworkDataGridNode.NameComparator):
        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest.prototype.set url):
        (WebInspector.NetworkRequest.prototype.name):
        (WebInspector.NetworkRequest.prototype.path):
        (WebInspector.NetworkRequest.prototype._parseNameAndPathFromURL):
        * inspector/front-end/ParsedURL.js:
        (WebInspector.ParsedURL):
        (WebInspector.ParsedURL.prototype.get displayName):
        (WebInspector.ParsedURL.prototype.dataURLDisplayName):
        (WebInspector.ParsedURL.prototype.isAboutBlank):
        (WebInspector.ParsedURL.prototype.isDataURL):

2012-11-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: make Spectrum and Popover WebInspector.Views in order to enable reuse
        https://bugs.webkit.org/show_bug.cgi?id=101200

        Reviewed by Yury Semikhatsky.

        - Split Spectrum and SpectrumPopoverHelper (first is a component, second is controller)
        - Made Popover a root view in order to enable lazy style loading for potential subviews (such as Spectrum)
        - Extracted spectrum's css into a separate file

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DOMExtension.js:
        (Element.prototype.positionAt):
        (Size):
        (Element.prototype.measurePreferredSize):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype.willHide):
        (WebInspector.HeapSnapshotView.prototype._helpClicked):
        * inspector/front-end/Popover.js:
        (WebInspector.Popover):
        (WebInspector.Popover.prototype.show):
        (WebInspector.Popover.prototype.showView):
        (WebInspector.Popover.prototype._innerShow):
        (WebInspector.Popover.prototype.hide):
        (WebInspector.Popover.prototype.dispose):
        (WebInspector.Popover.prototype._positionElement):
        * inspector/front-end/Spectrum.js:
        (WebInspector.Spectrum.alphaDrag):
        (WebInspector.Spectrum):
        (WebInspector.Spectrum.prototype.wasShown):
        (WebInspector.SpectrumPopupHelper):
        (WebInspector.SpectrumPopupHelper.prototype.spectrum):
        (WebInspector.SpectrumPopupHelper.prototype.toggle):
        (WebInspector.SpectrumPopupHelper.prototype.show):
        (WebInspector.SpectrumPopupHelper.prototype.reposition):
        (WebInspector.SpectrumPopupHelper.prototype.hide):
        (WebInspector.ColorSwatch):
        (WebInspector.ColorSwatch.prototype.setColorString):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype.willHide):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.):
        * inspector/front-end/View.js:
        (WebInspector.View.prototype.measurePreferredSize):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/elementsPanel.css:
        (.image-preview-container img):
        * inspector/front-end/inspector.css:
        (.swatch):
        (.swatch-inner):
        (.swatch-inner:hover):
        * inspector/front-end/spectrum.css: Added.
        (.spectrum-container):
        (.spectrum-top):
        (.spectrum-color):
        (.spectrum-display-value):
        (.spectrum-hue):
        (.spectrum-fill):
        (.spectrum-range-container):
        (.spectrum-range-container *):
        (.spectrum-range-container label):
        (.spectrum-range-container input):
        (.spectrum-dragger, .spectrum-slider):
        (.spectrum-sat):
        (.spectrum-val):
        (.spectrum-dragger):
        (.spectrum-slider):
        (.spectrum-container .swatch):

2012-11-06  Takashi Sakamoto  <tasak@google.com>

        removeAttribute('style') not working in certain circumstances
        https://bugs.webkit.org/show_bug.cgi?id=99295

        Reviewed by Ryosuke Niwa.

        After web developers did style.XXXX=YYYY for some element, the inline
        style should be always removable by using "removeAttribute('style')".
        Currently it depends on whether web developers invokes
        getAttribute('style'), setAttribute('style), and so on. E.g. once they
        invoke getAttribute('style'), removeAttribute('style') works. This is
        very confusing behavior.
        Looking at Firefox browser, removeAttribute('style') always removes
        all inline styles.

        Test: fast/css/remove-attribute-style.html

        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::clear):
        Added a new method to remove all style properties.
        (WebCore):
        * css/StylePropertySet.h:
        (StylePropertySet):
        * dom/Element.cpp:
        (WebCore::Element::removeAttribute):
        If 'style' is given but the element has no style attribute, the old
        code did nothing. However, if the element is styled element and has any
        inline styles, the inline styles should be removed. So invoke
        StyledElement::removeAllInlineStyleProperties and if any inline styles
        are removed, invoke style recalc, too.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::removeAllInlineStyleProperties):
        Added a new method to remove all inline style propeties. If any inline
        style is removed, invoke inlineStyleChanged() to force style recalc.
        (WebCore):
        * dom/StyledElement.h:
        (StyledElement):

2012-11-06  Alexei Filippov  <alph@chromium.org>

        Web Inspector: dim size bar for expanded item in native memory snapshot grid
        https://bugs.webkit.org/show_bug.cgi?id=101062

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/nativeMemoryProfiler.css:
        (.native-snapshot-view .data-grid .expanded div.size-bar):

2012-11-06  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Using isUnknownPseudoElement() for shadow pseudo id seems confusing
        https://bugs.webkit.org/show_bug.cgi?id=100826

        Reviewed by Hajime Morita.

        We used isUnknownPseudoElement() for these 3 meanings: 1) the element is a custom pseudo-element (starting with 'x-'),
        2) the element is a webkit custom pseudo-element (starting with '-webkit-'), and 3) the element has an unknown type.
        We would like to distinguish them when parsing CSSSelector types. Also, we disable using (3) type for using
        shadowPseudoId.

        In this patch, we allow using WebKitCustomPseudoElement in AuthorShadowRoot, and CustomPseudoElement in
        UAShadowRoot. However, we will disable them later.

        Test: fast/dom/shadow/shadow-pseudo-id.html

        * css/CSSGrammar.y.in: Now we can discard UNKNOWN type. It should not match anything.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::updateSpecifiersWithElementName):
        (WebCore::CSSParser::updateSpecifiers):
        * css/CSSParserValues.h:
        (WebCore::CSSParserSelector::isCustomPseudoElement):
        (CSSParserSelector):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::CSSSelector::parsePseudoType):
        (WebCore::CSSSelector::isCustomPseudoType): Returns true if the type is PseudoUserAgentCustomElement or PseudoWebKitCustomElement.
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (CSSSelector):
        (WebCore::CSSSelector::isCustomPseudoElement):
        (WebCore):
        * css/CSSSelectorList.cpp:
        (WebCore::SelectorHasInvalidSelectorFunctor::operator()): We will reject all selectors which were judged as
        UNKNOWN before. i.e. It contians all three types for now.
        (WebCore::CSSSelectorList::hasInvalidSelector): Renamed.
        * css/CSSSelectorList.h:
        (CSSSelectorList):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        * dom/Element.cpp:
        (WebCore::Element::setShadowPseudoId):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQueryCache::add):

2012-11-06  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] ShadowRoot should know the existence of elements having ElementShadow.
        https://bugs.webkit.org/show_bug.cgi?id=100922

        Reviewed by Hajime Morita.

        We count the elements having ElementShadow in ShadowRoot. This is a prepation patch for to solve Bug 100451.
        We have a count-up and count-down login in ShadowRoot::insertedInto and ShadowRoot::removedFrom.

        For performance reason, we have a flag that an element should be unregistered in ShadowRoot.

        Test: fast/dom/shadow/has-elementshadow.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::insertedInto): Count up the number of elements having ElementShadow. ElementShadow
        is created only when the oldest ShadowRoot is created, we only count up only when this ShadowRoot is oldest.
        (WebCore):
        (WebCore::ShadowRoot::removedFrom): Count down if we used this ShadowRoot for count up.
        * dom/ShadowRoot.h:
        (ShadowRoot):
        (WebCore::ShadowRoot::registerElementShadow):
        (WebCore::ShadowRoot::unregisterElementShadow):
        (WebCore::ShadowRoot::hasElementShadow):
        (WebCore::ShadowRoot::countElementShadow):
        * testing/Internals.cpp:
        (WebCore::Internals::countElementShadow):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-11-06  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: show "debugging session terminated" message when remote debuggign connection is closed unexpectedly.
        https://bugs.webkit.org/show_bug.cgi?id=101030

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/inspector.js:
        (WebInspector.loaded.WebInspector.socket.onclose):
        (WebInspector.loaded):
        (WebInspector.detached):

2012-11-06  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Overrides] Add Chrome for Android and Firefox for Android user agent strings
        https://bugs.webkit.org/show_bug.cgi?id=100666

        Reviewed by Pavel Feldman.

        * inspector/front-end/SettingsScreen.js:
        (WebInspector.UserAgentSettingsTab.prototype._createUserAgentSelectRowElement.get const):

2012-11-02  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: JavaScript web workers debugging crashes
        https://bugs.webkit.org/show_bug.cgi?id=101065

        Reviewed by Alexander Pavlov.

        Clear m_pageInspector when page inspector instance is deleted.
        Disable worker inspection when front-end disconnects.

        Test: inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html

        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::~WorkerFrontendChannel): notify
        WorkerMessagingProxy so that it can clear pointer to the channel.

2012-11-06  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: Console: wrap long URLs
        https://bugs.webkit.org/show_bug.cgi?id=100970

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/inspector.css:
        (.console-message-url):

2012-11-05  Keishi Hattori  <keishi@webkit.org>

        Introduce Day class to calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=101194

        Reviewed by Kent Tamura.

        Introducing Day class so day, week, and month can all be abstracted. To
        solve some of the complexity around which months to show, I made
        CalendarPicker in charge of it. This also made YearMonthController and
        DaysTable independent of each other.

        No new tests. Covered by existing calendar-picker-*.html tests.

        * Resources/pagepopups/calendarPicker.js:
        (createUTCDate): Allow negative month or date.
        (parseDateString): Will return Day or Month depending on string format.
        (Day): Represents a day.
        (Day.parse): Parse yyyy-mm-dd.
        (Day.createFromDate): Creates a Day that contains a datetime.
        (Day.createFromToday): Creates Day for today. A method with the same name will be added to Week and Month in the future.
        (Day.prototype.equals): Returns true if they are the same.
        (Day.prototype.previous): Returns the previous day.
        (Day.prototype.next): Returns the next day.
        (Day.prototype.startDate): Returns the datetime that is the start of this day.
        (Day.prototype.endDate): Returns the datetime that is the start of this day.
        (Day.prototype.valueOf): Returns the milliseconds since epoch.
        (Day.prototype.toString): Returns an ISO date string.
        (Month): Fix bug in calculating month from value.
        (Month.prototype.endDate): Use Day.Maximum.
        (CalendarPicker): Added _currentMonth. yearMonthController and daysTable can be private members now.
        (CalendarPicker.prototype._layout):
        (CalendarPicker.prototype.handleToday): Use Day.createFromToday.
        (CalendarPicker.prototype.shouldShowMonth): Returns true if the month should be shown.
        (CalendarPicker.prototype.showMonth): Shows the given month. If the month is out of the range of months that should be shown, we clamp the month and show that.
        (CalendarPicker.prototype.currentMonth): Returns the current month that is shown.
        (YearMonthController): Removed _currentMonth.
        (YearMonthController.prototype.attachTo):
        (YearMonthController.prototype.setMonth):
        (YearMonthController.prototype._handleYearMonthChange): Use CalendarPicker.showMonth
        (YearMonthController.prototype.moveRelatively):
        (DaysTable):
        (CalendarPicker.prototype._stepMismatch): Made private.
        (CalendarPicker.prototype._outOfRange): Made private.
        (CalendarPicker.prototype.isValidDate): Take Day or Month instead of milliseconds since epoch.
        (DaysTable.prototype._renderMonth):
        (DaysTable.prototype.navigateToMonth): Shows a given month. Can use animation and leave the selection position as is.
        (DaysTable.prototype.selectRange): Select a range.
        (DaysTable.prototype._maybeSetPreviousMonth):
        (DaysTable.prototype._maybeSetNextMonth):
        (DaysTable.prototype._handleKey):
        (CalendarPicker.prototype._handleBodyKeyDown):

2012-11-05  Kenichi Ishibashi  <bashi@chromium.org>

        Unreviewed, Adding #if PLATFORM(CHROMIUM) for the fix of
        https://bugs.webkit.org/show_bug.cgi?id=101009

        This fix requires the most recent version of harfbuzz-ng.
        EFL port uses version 0.9.2, which doesn't have the fix.

        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):

2012-11-05  Glenn Adams  <glenn@skynav.com>

        Ensure acquireLineBreakIterator signature consistency on non-ICU ports.
        https://bugs.webkit.org/show_bug.cgi?id=101281

        Reviewed by Ryosuke Niwa.

        Fix (newly) inconsistent signature for acquireLineBreakIterator for non-ICU ports
        caused by http://trac.webkit.org/changeset/133529.

        See new tests added from https://bugs.webkit.org/show_bug.cgi?id=89235.

        * platform/text/TextBreakIterator.cpp:
        (WebCore::acquireLineBreakIterator):
        * platform/text/gtk/TextBreakIteratorGtk.cpp:
        (WebCore::setUpIterator):
        (WebCore::acquireLineBreakIterator):
        * platform/text/wince/TextBreakIteratorWinCE.cpp:
        (WebCore::acquireLineBreakIterator):

2012-11-05  Hayato Ito  <hayato@chromium.org>

        Use switch/case statements instead of if/elseif in CSSSelector.cpp
        https://bugs.webkit.org/show_bug.cgi?id=100470

        Reviewed by Ryosuke Niwa.

        Minor clean up. We can get compiler warnings if we use switch/case statements here.

        No changes to functionality, so no new tests.

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

2012-11-05  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Unicode combining diacritical aren't always combined on Linux
        https://bugs.webkit.org/show_bug.cgi?id=101009

        Reviewed by Kent Tamura.

        Add a space character to harfbuzzBuffer as pre-context. This will prevent
        harfbuzz from inserting dotted-circle.

        Test: fast/text/international/combining-marks-position.html

        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):

2012-11-05  Shinya Kawanaka  <shinyak@chromium.org>

        LayoutTest fast/dom/shadow/shadowroot-type.html is failing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=101201

        Reviewed by Hajime Morita.

        When we use a bit field for enum, Windows compiler seems returning some wrong value.
        We would like to avoid using a bit field for enum value.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::type):
        (WebCore::ShadowRoot::setType):
        (ShadowRoot):

2012-11-05  Benjamin Poulain  <benjamin@webkit.org>

        TransformOperationInfo's constructor is really slow
        https://bugs.webkit.org/show_bug.cgi?id=101143

        Reviewed by Sam Weinig.

        TransformOperationInfo() was slow for a few reasons:
        -The function used a lot of branches. The basic assumption is that the input
         is incorrect, thus every character is an opportunity to fail.
        -Every branch had to be tested in order. If the name was matching the last if()
         all the previous names had to be tested.
        -Since equalIgnoringCase() was used in every branch, it was forcing the case folding
         every time.
        -When the string is 16bits, the case folding was using ICU, which was incredibly inefficient.

        This can be fixed by either
        1) Compute the lowercase name, then match it to a HashMap.
        2) Write a tree to quickly reduce the number of branch needed.

        The first solution is not viable because 16bits strings case folding
        remains an important bottleneck.

        Instead, the code now splits the names on simple characteristics to
        match any name in a limited number of branches.

        The assumption is the input is correct, so & is used instead of && to
        avoid branches in favor of conditional instructions.

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

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

        RenderGeometryMap asserts when loading http://en.softonic.com/mac
        https://bugs.webkit.org/show_bug.cgi?id=101284
        <rdar://problem/11540560>

        Reviewed by Tim Horton.

        When FrameView::layout() calls document->updateStyleIfNeeded(), we
        can be in a state where FrameView::needsLayout() is false. However,
        this is a bad time to update compositing layers, because we're about
        to do layout, which will require us to update them again soon anyway,
        and some RenderLayers may not have been sized or positioned yet.
        
        Fix by adding a m_doingPreLayoutStyleUpdate member to FrameView,
        and toggling it around this call to updateStyleIfNeeded().
        Read this state in updateCompositingLayersAfterStyleChange(), which is
        now called unconditionally by recalcStyle(), but returns early
        if this flag is set, or layout is pending.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        (FrameView):

2012-11-05  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=101275
        Clean up ScrollingConstraints.h

        Reviewed by Simon Fraser.

        This class cleans up ScrollingConstraints.h by removing the constructors since the 
        compiler will generate those constructors for us anyway. The patch also makes the 
        two override functions private.
        * page/scrolling/ScrollingConstraints.h:
        (ViewportConstraints):
        (FixedPositionViewportConstraints):
        (StickyPositionViewportConstraints):

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

        Make Document::updateStyleIfNeeded() non-virtual
        https://bugs.webkit.org/show_bug.cgi?id=101273

        Reviewed by Eric Seidel.

        Document::updateStyleIfNeeded() has been virtual like forever, but
        no-one ever overrides it, so make it non-virtual.

        * dom/Document.h:
        (Document):

2012-11-05  Philip Rogers  <pdr@google.com>

        Unblock SVG external references
        https://bugs.webkit.org/show_bug.cgi?id=100635

        Reviewed by Adam Barth.

        This patch reverts r132849 and r132869 because the potential XSS issue
        turned out to not be an issue after all.

        Covered by existing tests, many of which are re-whitelisted with this patch.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):

2012-11-05  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=101001
        Pages with position:fixed elements should still be able to scroll on 
        the scrolling thread
        -and corresponding-
        <rdar://problem/10857315>

        Reviewed by Simon Fraser.

        This patch adds two new classes. ScrollingStateFixedNode is a class 
        to represent fixed nodes in the state tree, and 
        ScrollingTreeFixedNode represents fixed node in the scrolling tree 
        over on the scrolling thread.
        * WebCore.xcodeproj/project.pbxproj:

        When we are (non-programatically) scrolling fixed objects on the 
        scrolling thread, we do not want to do any work here. 
        * page/FrameView.cpp:
        (WebCore::FrameView::updateFixedElementsAfterScrolling):

        Whenever we sync the position of the main frame's layer, we have to 
        do the same for scrolling tree children.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):

        New ScrollingNodeType -- FixedNode, yay! And two new functions 
        specific to dealing with FixedNodes.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateViewportConstrainedNode):
        (WebCore::ScrollingCoordinator::syncChildPositions):

        This is the new class that represents fixed nodes in the state tree. 
        All of the changed properties are stored within 
        FixedPositionViewportConstraints.
        * page/scrolling/ScrollingStateFixedNode.cpp: Added.
        (WebCore):
        (WebCore::ScrollingStateFixedNode::create):
        (WebCore::ScrollingStateFixedNode::ScrollingStateFixedNode):
        (WebCore::ScrollingStateFixedNode::~ScrollingStateFixedNode):
        (WebCore::ScrollingStateFixedNode::updateConstraints):
        (WebCore::ScrollingStateFixedNode::dumpProperties):
        * page/scrolling/ScrollingStateFixedNode.h: Added.
        (WebCore):
        (ScrollingStateFixedNode):
        (WebCore::ScrollingStateFixedNode::viewportConstraints):
        (WebCore::toScrollingStateFixedNode):

        Make sure to create the right type of clone for each node.
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::cloneAndReset):

        Now that m_children may be anything other than null, I found this 
        bug. We encounter it when the parameter to removeChild is this and we 
        want to remove all of our children. In that case, this is obviously 
        not found in its own child array.
        (WebCore::ScrollingStateNode::removeChild):

        ScrollingStateNode now caches the GraphicsLayer in addition to the 
        PlatformLayer. This will allow us to sync the GraphicsLayer position 
        at the appropriate times.
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isScrollingStateFixedNode):
        (WebCore::ScrollingStateNode::graphicsLayer):
        (ScrollingStateNode):

        Handle fixed nodes.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):

        New function parentScrollPositionDidChange() is called on children 
        when the parent has scrolled.
        * page/scrolling/ScrollingTreeNode.h:
        (ScrollingTreeNode):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (ScrollingTreeScrollingNode):

        Return true for supportsFixedPositionLayers(). 
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):

        Handle fixed nodes.
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::attachToStateTree):

        Now that m_children can be non-null I caught this pre-existing bug 
        where we would come times remove a node without updating the HashMap. 
        This patch fixes that by consolidating the removal into one function.
        (WebCore::ScrollingCoordinatorMac::removeNode):
        (WebCore::ScrollingCoordinatorMac::detachFromStateTree):
        (WebCore::ScrollingCoordinatorMac::clearStateTree):

        Update the GraphicsLayers to reflect the new position that the 
        Scrolling thread has moved the underlying CALayer to already.
        (WebCore::ScrollingCoordinatorMac::syncChildPositions):

        Pass new constraints over to the appropriate state node.
        (WebCore::ScrollingCoordinatorMac::updateViewportConstrainedNode):

        Cache the GraphicsLayer in addition to the PlatformLayer.
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        (WebCore::ScrollingStateNode::setScrollLayer):

        Here is the new class that represents fixed nodes over on the 
        scrolling thread. 
        * page/scrolling/mac/ScrollingTreeFixedNode.h: Added.
        (WebCore):
        (ScrollingTreeFixedNode):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm: Added.
        (WebCore):
        (WebCore::ScrollingTreeFixedNode::create):
        (WebCore::ScrollingTreeFixedNode::ScrollingTreeFixedNode):
        (WebCore::ScrollingTreeFixedNode::~ScrollingTreeFixedNode):
        (WebCore::ScrollingTreeFixedNode::update):

        This is where the magic happens. re-position the fixed object when 
        its parent has scrolled so that it appears to have not moved at all.
        (WebCore::ScrollingTreeFixedNode::parentScrollPositionDidChange):

        Whenever we change the position of a scrolling layer, tell our 
        children.
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

        Handle fixed nodes.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::attachToScrollingCoordinator):

        detachFromScrollingCoordinator() needs to be public so that it can be 
        called from RenderLayerCompositor for fixed nodes.
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

        RenderLayerCompositor takes control of attaching and detaching fixed 
        nodes to/from the ScrollingCoordinator. 
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::didMoveOnscreen):
        (WebCore::RenderLayerCompositor::willMoveOffscreen):
        (WebCore::RenderLayerCompositor::clearBackingForLayerIncludingDescendants):
        (WebCore::isRootmostFixedOrStickyLayer):
        (WebCore):
        (WebCore::RenderLayerCompositor::updateViewportConstraintStatus):
        (WebCore::RenderLayerCompositor::addViewportConstrainedLayer):
        (WebCore::RenderLayerCompositor::removeViewportConstrainedLayer):
        (WebCore::RenderLayerCompositor::computeViewportConstraints):
        (WebCore::nearestScrollingCoordinatorAncestor):
        (WebCore::RenderLayerCompositor::registerOrUpdateViewportConstrainedLayer):
        (WebCore::RenderLayerCompositor::unregisterViewportConstrainedLayer):
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        (WebCore::RenderLayerCompositor::unregisterAllViewportConstrainedLayers):
        * rendering/RenderLayerCompositor.h:
        (WebCore):
        (RenderLayerCompositor):

2012-11-05  Geoffrey Garen  <ggaren@apple.com>

        Cleaned up the Font class in preparation for optimizing kerning and ligatures
        https://bugs.webkit.org/show_bug.cgi?id=101258

        Reviewed by Dan Bernstein.

        * platform/graphics/Font.h:
        (WebCore::Font::typesettingFeatures):
        (WebCore::Font::computeTypesettingFeatures): Compute and cache our
        typesetting features instead of recomputing each time a client asks
        for them. This makes the class interface easier to use because
        "typesettingFeatures()" can appear in more than one expression without
        undue performance cost. This may also be a small speedup to code that
        calls typesettingFeatures() often for other reasons.

        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::update): Ditto.

        (WebCore::Font::width): Unforked the width() function so all width-related
        interfaces can benefit from optimization without duplicate code.

2012-11-05  Peng Huang  <penghuang@google.com>

        Webkit does not handle some media keys correctly On Linux gtk platform.
        https://bugs.webkit.org/show_bug.cgi?id=101221

        Reviewed by Alexey Proskuryakov.

        Add media keyboard support on Linux gtk platform.

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2012-11-05  Glenn Adams  <glenn@skynav.com>

        Add support to -webkit-line-break property for CSS3 Text line-break property values and semantics.
        https://bugs.webkit.org/show_bug.cgi?id=89235

        Reviewed by Eric Seidel.

        See also wiki documentation at:
        [1] http://trac.webkit.org/wiki/LineBreaking
        [2] http://trac.webkit.org/wiki/LineBreakingCSS3Mapping

        Web exposed changes include:
        (1) The default (initial) value for -webkit-line-break becomes 'auto', instead of 'normal';
        (2) The values 'auto', 'loose', 'normal', and 'strict' are added to -webkit-line-break;
        (3) See [2] above for details regarding interpretation.

        Tests: css3/line-break/line-break-auto-centered.html
               css3/line-break/line-break-auto-half-kana.html
               css3/line-break/line-break-auto-hyphens.html
               css3/line-break/line-break-auto-inseparables.html
               css3/line-break/line-break-auto-iteration-marks.html
               css3/line-break/line-break-auto-postfixes.html
               css3/line-break/line-break-auto-prefixes.html
               css3/line-break/line-break-auto-sound-marks.html
               css3/line-break/line-break-loose-centered.html
               css3/line-break/line-break-loose-half-kana.html
               css3/line-break/line-break-loose-hyphens.html
               css3/line-break/line-break-loose-inseparables.html
               css3/line-break/line-break-loose-iteration-marks.html
               css3/line-break/line-break-loose-postfixes.html
               css3/line-break/line-break-loose-prefixes.html
               css3/line-break/line-break-loose-sound-marks.html
               css3/line-break/line-break-normal-centered.html
               css3/line-break/line-break-normal-half-kana.html
               css3/line-break/line-break-normal-hyphens.html
               css3/line-break/line-break-normal-inseparables.html
               css3/line-break/line-break-normal-iteration-marks.html
               css3/line-break/line-break-normal-postfixes.html
               css3/line-break/line-break-normal-prefixes.html
               css3/line-break/line-break-normal-sound-marks.html
               css3/line-break/line-break-strict-centered.html
               css3/line-break/line-break-strict-half-kana.html
               css3/line-break/line-break-strict-hyphens.html
               css3/line-break/line-break-strict-inseparables.html
               css3/line-break/line-break-strict-iteration-marks.html
               css3/line-break/line-break-strict-postfixes.html
               css3/line-break/line-break-strict-prefixes.html
               css3/line-break/line-break-strict-sound-marks.html

        * platform/text/LineBreakIteratorPoolICU.h:
        (WebCore::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
        Add static function to construct ICU locale argument (also used as pool key) with additional
        break keyword.
        (WebCore::LineBreakIteratorPool::take):
        (WebCore::LineBreakIteratorPool::put):
        (LineBreakIteratorPool):
        Remove direct dependency from ICU library (and types), moving that dependency into
        new {open,close}LineBreakIterator() functions (defined in TextBreakIteratorICU.cpp).
        Update to take line break mode into account.
        Create (and cache) different break iterators depending on line break mode (in addition to locale),
        which entails expanding pool entry key format to optionally append "@break=" +
        "loose"|"normal"|"strict" keyword to locale string.

        * platform/text/TextBreakIterator.h:
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::isLooseCJKMode):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        (LazyLineBreakIterator):
        Define LineBreakIteratorMode enumeration for use in TextBreakIterator et al.
        Add state member to indicate line break mode.

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::acquireLineBreakIterator):
        Use new line break mode when making iterator from pool.
        Handle change of return type of LineBreakIteratorPool::take() to non-ICU type,
        i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
        (WebCore::releaseLineBreakIterator):
        Handle change of parameter type of LineBreakIteratorPool::put() to non-ICU type,
        i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
        (WebCore::isCJKLocale):
        New functions for determining if CJK rules apply.
        (WebCore::openLineBreakIterator):
        New function for abstracting opening of ICU style line break iterator. This is now
        used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.
        This function also takes into account the line break mode.
        (WebCore::closeLineBreakIterator):
        (WebCore::mapLineIteratorModeToRules):
        New function for abstracting closing of ICU style line break iterator. This is now
        used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):
        Pass line break iterator mode flag when reseting LazyLineBreakIterator.
        Add looseMode local variable to prevent need for computing under isBreakable().

        * rendering/RenderText.cpp:
        (WebCore::mapLineBreakToIteratorMode):
        Add implementation for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
        and RenderBlock::LineBreaker::nextLineBreak.
        (WebCore::RenderText::computePreferredLogicalWidths):
        Ensure (lazy line) breakIterator is initialized for line break mode.
        Ensure isBreakable() is passed loose mode flag to match behavior in RenderBlock::LineBreaker::nextLineBreak.

        * rendering/RenderText.h:
        (WebCore):
        Add declaration for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
        and RenderBlock::LineBreaker::nextLineBreak.

        * rendering/break_lines.cpp:
        (WebCore):
        Introduce two (local) enums NBSPBehavior and LooseBehavior for expanding template on nextBreakablePosition
        to include loose mode parameter.
        (WebCore::isBreakableSpace):
        Add externally specified loose mode parameter to prevent need to invoke line break iterator
        accessor method on each invocation. Use new loose mode flavors off NBP functions.
        (WebCore::needsLineBreakIterator):
        Introduce loose mode behavior template parameter to optimize loose mode behavior code path in order
        to prevent regression to non loose mode path.
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):
        Use new template parameter enums described above.
        (WebCore::nextBreakablePositionIgnoringNBSPLoose):
        (WebCore::nextBreakablePositionLoose):
        Introduce two additional 'loose' mode flavors of NBP template expansions.

        * rendering/break_lines.h:
        (WebCore):
        (WebCore::isBreakable):
        Add externally specified loose mode parameter to prevent need to invoke line break iterator
        accessor method on each invocation.

2012-11-05  Adam Barth  <abarth@webkit.org>

        webkitRegionLayoutUpdate is incorrectly named
        https://bugs.webkit.org/show_bug.cgi?id=100335

        Reviewed by Ojan Vafai.

        DOM event names are supposed to be lower case.

        * dom/EventNames.h:
        (WebCore):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::dispatchRegionLayoutUpdateEvent):

2012-11-05  Adam Barth  <abarth@webkit.org>

        [V8] IntrusiveDOMWrapperMap should be usable for more than just Nodes
        https://bugs.webkit.org/show_bug.cgi?id=101110

        Reviewed by Kentaro Hara.

        This patch generalizes our support for storing wrappers in DOM objects
        to be usable for more than just nodes. After this patch, any object
        with a ScriptWrappable base class will have its wrapper stored inline
        in the object in the main world.

        To achieve this goal, this patch hides the details of how we map from
        objects to wrappers inside DOMDataStore and then removes the
        IntrusiveDOMWrapperMap class entirely. This approach lets us remove the
        DOMWrapperMap base class and make all of these functions non-virtual.

        * UseV8.cmake:
        * WebCore.gypi:
            - Remove deleted files.
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):
        (GenerateConstructorCallback):
        (GenerateNamedConstructorCallback):
        (GenerateToV8Converters):
            - Rather than grabbing at the DOMWrapperMap directly, we now ask
              the DOMDataStore to do this work for us.
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::V8Float64Array::wrap):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::wrap):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::wrap):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::wrap):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::wrap):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::wrap):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::wrap):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::wrap):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::wrap):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::constructorCallback):
        (WebCore::V8TestNode::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::readOnlyTestObjAttrAttrGetter):
        * bindings/scripts/test/V8/V8TestObj.h:
        (WebCore::V8TestObj::wrap):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::wrap):
        * bindings/v8/DOMDataStore.cpp:
            - Updated run-bindings-test results.
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
            - Simplify constructor and destructor now that there is only one
              hash map.
        (WebCore::DOMDataStore::current):
            - Now that V8DOMMap.cpp doesn't handle the null isolate case, we
              need to handle it here.
        (WebCore::DOMDataStore::reportMemoryUsage):
            - Simplfied now that there is only one wrapper map.
        (WebCore::DOMDataStore::weakCallback):
            - Moved from IntrusiveDOMWrapperMap.h
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::get):
        (WebCore::DOMDataStore::set):
            - These functions now handle the intrusive case with a branch
              rather than with a virtual function call. In many cases, the
              branch can be optimized away by the compiler when the overloaded
              inline functions are inlined.
        (WebCore::DOMDataStore::wrapperIsStoredInObject):
            - Overloaded functions to determine whether to store the wrapper
              inside the object or in the hashmap.
        (WebCore::DOMDataStore::getWrapperFromObject):
        (WebCore::DOMDataStore::storeWrapperInObject):
            - Overloaded functions to get/set the wrapper from inside the
              object itself.
        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperHashMap::get):
        (WebCore::DOMWrapperHashMap::set):
        (WebCore::DOMWrapperHashMap::clear):
        (WebCore::DOMWrapperHashMap::reportMemoryUsage):
        (WebCore::DOMWrapperHashMap::remove):
            - These functions are no longer virtual.
        * bindings/v8/DOMWrapperWorld.h:
        * bindings/v8/IntrusiveDOMWrapperMap.h: Removed.
        * bindings/v8/ScriptProfiler.cpp:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::neuterBinding):
            - We need to keep the type information slightly longer so that we
              look in the right wrapper map.
        * bindings/v8/V8DOMMap.cpp: Removed.
        * bindings/v8/V8DOMMap.h: Removed.
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):
            - Defer this work to the store.
        (WebCore::V8DOMWrapper::setWrapperClass):
            - An overloaded function to set the right wrapper class.
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
            - This function is now general enough to handle ever kind of object.
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerScriptController.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
            - Call the more general function (instead of the now-deleted specialized function).

2012-11-05  Alexey Proskuryakov  <ap@apple.com>

        Get rid of setCookieStoragePrivateBrowsingEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=101247

        Reviewed by Brady Eidson.

        We were only doing anything here on Mac, and only because we couldn't know if
        sessions were in use. But sessions are always in use, and those obsolete changing
        cookie storage explicitly.

        * platform/network/win/CookieStorageWin.cpp: Removed.
        * PlatformWinCE.cmake:
        * WebCore.gypi:
        No more CookieStorageWin.cpp with an empty implementation.
    
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        We no longer need this WKSI function.

        * page/Settings.cpp: (WebCore::Settings::setPrivateBrowsingEnabled):
        Removed the only call to setCookieStoragePrivateBrowsingEnabled().

        * platform/network/CookieStorage.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        * platform/network/curl/CookieJarCurl.cpp:
        * platform/network/soup/CookieStorageSoup.cpp:
        * platform/qt/TemporaryLinkStubsQt.cpp:
        Removed empty setCookieStoragePrivateBrowsingEnabled implementations.

        * platform/network/mac/CookieStorageMac.mm: This function used to have a FIXME
        that we should observe private storage while in private browsing mode. I don't think
        that it was correct - Safari doesn't display content of private storage, and thus
        doesn't need to know about changes.
        The removal of this function has an effect on WebKit1 clients that enable private
        browsing. We used to globally change cookie storage, even for loads not initiated
        by WebKit. Now we match API description: "If private browsing is enabled, WebKit
        will not store information about sites the user visits."

2012-11-05  Florin Malita  <fmalita@chromium.org>

        Crash when mixing layers, foreignObjects and SVG hidden containers
        https://bugs.webkit.org/show_bug.cgi?id=87297

        Reviewed by Dirk Schulze.

        Foreign objects may introduce content which requires layers, but layer creation is
        suppressed within RenderSVGHiddenContainer subtrees and this yields an inconsistent render
        tree state. This patch prevents foreignObject renderer instantiation under
        RenderSVGHiddenContainers.

        Test: svg/foreignObject/foreign-object-defs-crash.svg

        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::rendererIsNeeded):
        (WebCore):
        * svg/SVGForeignObjectElement.h:
        (SVGForeignObjectElement):

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

        Remove the unused m_fixedPositionedElements from RenderView
        https://bugs.webkit.org/show_bug.cgi?id=101251

        Reviewed by Anders Carlsson.

        m_fixedPositionedElements was completely unused. Remove it
        and the related typedef.

        * rendering/RenderView.h:
        (RenderView):

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

        Fix layer borders to cleaning appear and disappear on switching
        https://bugs.webkit.org/show_bug.cgi?id=101136

        Reviewed by Sam Weinig.

        GraphicsLayers decided whether to show layer borders based
        on a callback through the GraphicsLayerClient. This made it
        hard to manage state, resulting in a failure to cleanly
        hide layers when toggled off via the preference.
        
        Changed the layer border and repaint counter visibility to be bits
        stored on GraphicsLayer just like other properties, with getters
        and setters. RenderLayerBacking now updates these debug
        indicators when we update other compositing layer properties.
        
        In GraphicsLayerCA, avoid calling updateDebugIndicators() explicitly
        in several places by setting the change flag DebugIndicatorsChanged
        for properties whose values affect the appearance of the debug border.

        Removed the GraphicsLayerClient methods showDebugBorders() and
        showRepaintCounter() which are no longer required.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::updateDebugIndicators):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setShowDebugBorder):
        (WebCore::GraphicsLayer::isShowingDebugBorder):
        (WebCore::GraphicsLayer::setShowRepaintCounter):
        (WebCore::GraphicsLayer::isShowingRepaintCounter):
        (WebCore::GraphicsLayer::repaintCount):
        (WebCore::GraphicsLayer::incrementRepaintCount):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setMasksToBounds):
        (WebCore::GraphicsLayerCA::setDrawsContent):
        (WebCore::GraphicsLayerCA::platformCALayerShowRepaintCounter):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateMasksToBounds):
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent):
        (WebCore::GraphicsLayerCA::updateDebugBorder):
        (WebCore::GraphicsLayerCA::setShowDebugBorder):
        (WebCore::GraphicsLayerCA::setShowRepaintCounter):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::setupContentsLayer):
        (WebCore::GraphicsLayerCA::cloneLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::platformCALayerShowDebugBorders):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDebugIndicators):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-11-05  Genevieve Mak  <gmak@rim.com>

        [BLACKBERRY] Update touch code to reflect touch refactor
        https://bugs.webkit.org/show_bug.cgi?id=101227

        Reviewed by Rob Buis.

        PR #2706785
        Reviewed Internally by: Mike Lattanzio

        * platform/blackberry/PlatformTouchEventBlackBerry.cpp:
        (WebCore::touchEventType):
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2012-11-05  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Pass canPaintLCDText to WebContentLayerClient::paintContents
        https://bugs.webkit.org/show_bug.cgi?id=99083

        Reviewed by Stephen White.

        Use LCD text setting passed to WebContentLayerClient::paintContents instead of turning it off for all composited layers.

        No new tests needed. This patch does not change anything functionally.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsOpaque):
        (WebCore::GraphicsLayerChromium::paint):
        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp:
        (WebCore::OpaqueRectTrackingContentLayerDelegate::paintContents):
        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h:
        (OpaqueRectTrackingContentLayerDelegate):

2012-11-05  Stephen White  <senorblanco@chromium.org>

        [chromium] Build fix after http://trac.webkit.org/changeset/133488.
        Removed a deleted file.  Unreviewed.

        * WebCore.gypi:

2012-11-05  Kentaro Hara  <haraken@chromium.org>

        [V8] toV8(impl) should return null if impl is 0
        https://bugs.webkit.org/show_bug.cgi?id=101206

        Reviewed by Adam Barth.

        toV8(impl) should return null if impl is 0. However,
        V8HTMLCollection::toV8() does not have the null check.
        All other toV8()s return null.

        No tests. I think there will be no call path that hits the change.

        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::toV8):

2012-11-05  David Barton  <dbarton@mathscribe.com>

        Implement SimpleFontData::platformBoundsForGlyph on skia
        https://bugs.webkit.org/show_bug.cgi?id=101115

        Reviewed by Eric Seidel.

        The implementation is similar to SimpleFontData::platformWidthForGlyph on skia.

        Tested by: fast/block/lineboxcontain/*glyphs*, mathml/presentation/*

        * platform/graphics/skia/SimpleFontDataSkia.cpp:
        (WebCore::SimpleFontData::platformBoundsForGlyph): Implemented.

2012-11-05  Andreas Kling  <kling@webkit.org>

        Decouple Attr logic from ElementAttributeData.
        <http://webkit.org/b/101126>

        Reviewed by Antti Koivisto.

        Move all logic dealing with Attr DOM nodes from ElementAttributeData to Element.
        This makes more sense since an Attr is tied to a single Element, but an ElementAttributeData
        can be shared by any number of Elements at a given time.

        Also updated naming convention from just "Attr" to "Attr node" in the code I was touching.
        "Attr" is way too generic, and has been historically confused with WebCore::Attribute a lot.

        * dom/Element.h:
        * dom/ElementAttributeData.h:
        * dom/Element.cpp:
        (WebCore::attrNodeListMap):
        (WebCore::attrNodeListForElement):
        (WebCore::ensureAttrNodeListForElement):
        (WebCore::removeAttrNodeListForElement):
        (WebCore::findAttrNodeInList):
        (WebCore::Element::~Element):
        (WebCore::Element::detachAttribute):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::getAttributeNodeNS):
        (WebCore::Element::normalizeAttributes):
        (WebCore::Element::attrIfExists):
        (WebCore::Element::ensureAttr):
        (WebCore::Element::detachAttrNodeFromElementWithValue):
        (WebCore::Element::detachAllAttrNodesFromElement):
        (WebCore::Element::cloneAttributesFromElement):

            Move everything Attr-related into Element.cpp while simplifying some loops and remove
            conditions that are no longer needed as they used to depend on having an attributeData().

        * dom/Node.h:
        (WebCore::Node::hasSyntheticAttrChildNodes):
        (WebCore::Node::setHasSyntheticAttrChildNodes):

            Renamed the hasAttrList() node flag to hasSyntheticAttrChildNodes().

        * dom/Attr.cpp:
        (WebCore::Attr::detachFromElementWithValue):

            Remove awkward indirection and let the call site deal with removing the Attr node from
            the Element's list of Attr nodes.

        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::clearAttributes):

            Remove now-unused Element* argument.

2012-11-05  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Polygon edges should span colinear vertices
        https://bugs.webkit.org/show_bug.cgi?id=99343

        Reviewed by Dirk Schulze.

        ExclusionPolygonEdges now span coincident and collinear vertices. Currently
        pairs of vertices are only considered coincident if their coordinates are exactly
        equal. Similarly, a vertex is only considered collinear with an edge if the area
        of the triangle defined by the three vertices is exactly zero.  In the future it
        may be useful to relax the comparison with zero.

        Tests: fast/exclusions/shape-inside/shape-inside-coincident-vertices.html
               fast/exclusions/shape-inside/shape-inside-collinear-vertices.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::determinant): Used to measure collinearity.
        (WebCore):
        (WebCore::areCollinearPoints): True if three FloatPoint arguments are collinear per the test outlined above.
        (WebCore::areCoincidentPoints): True if the two FloatPoint arguments are equal.
        (WebCore::nextVertexIndex): The next vertex index in clockwise or counterclockwise order.
        (WebCore::ExclusionPolygon::findNextEdgeVertexIndex): Return the index of the next non-coincident, non-collinear vertex.
        (WebCore::ExclusionPolygon::ExclusionPolygon): Skip coincident and collinear vertices when building the list of edges.
        * rendering/ExclusionPolygon.h: Added private findNextEdgeVertexIndex() declaration.

2012-11-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Use POSIX implementation of SharedBuffer::createWithContentsOfFile()
        https://bugs.webkit.org/show_bug.cgi?id=101228

        Reviewed by Kenneth Rohde Christiansen.

        Get rid of EFL-specific implementation of SharedBuffer::createWithContentsOfFile()
        and reuse the POSIX one since it is pretty much the same.

        No new tests, no behavior change.

        * PlatformEfl.cmake:
        * platform/efl/SharedBufferEfl.cpp: Removed.

2012-11-05  Kentaro Hara  <haraken@chromium.org>

        Add a comment about a return value of IDBKey::toV8()
        https://bugs.webkit.org/show_bug.cgi?id=101212

        Reviewed by Adam Barth.

        Although all other toV8(impl) return null when impl is 0,
        IDBKey::toV8(impl) is expected to return undefined when impl is 0.
        This patch adds a comment about it.

        No tests.

        * bindings/js/JSIDBKeyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8IDBKeyCustom.cpp:
        (WebCore::toV8):

2012-11-05  Dominik Röttsches  <dominik.rottsches@intel.com>

        [Cairo] Make Cairo honor image orientation
        https://bugs.webkit.org/show_bug.cgi?id=101207

        Reviewed by Kenneth Rohde Christiansen.

        Implement transformed image drawing in BitmapImageCairo, similar
        as it was done for Skia in bug 100179, r132384.
        The image drawing code needs to transform the graphics context
        depending on exif orientation in order for this to work.

        No new tests, covered by fast/images/exif-* which are passing now.

        * platform/graphics/BitmapImage.h: Enable draw function which respects image orientation for Cairo.
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw): Apply ImageOrientation's transformFromDefault() transformation to context.
        (WebCore):

2012-11-05  Kentaro Hara  <haraken@chromium.org>

        [V8] Dispose() and Clear() should be always coupled for safety
        https://bugs.webkit.org/show_bug.cgi?id=101191

        Reviewed by Adam Barth.

        Clear() is not mandatory. However, to avoid misusing already
        disposed wrappers, Clear() should be always called just
        after Dispose().

        No tests. No change in behavior.

        * bindings/v8/DOMWrapperMap.h:
        (WebCore::DOMWrapperHashMap::defaultWeakCallback):
        * bindings/v8/IntrusiveDOMWrapperMap.h:
        (WebCore::IntrusiveDOMWrapperMap::weakCallback):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::freeV8NPObject):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::~ScheduledAction):
        * bindings/v8/V8NPObject.cpp:
        (WebCore::V8NPTemplateMap::dispose):
        (WebCore::weakNPObjectCallback):
        (WebCore::forgetV8ObjectForNPObject):
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextData::dispose):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::cachedStringCallback):
        (WebCore::IntegerCache::~IntegerCache):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::WeakReferenceCallback):

2012-11-05  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Layout of the first shape-inside line can be incorrect
        https://bugs.webkit.org/show_bug.cgi?id=100996

        Reviewed by Dirk Schulze.

        Made the conversion from floating point top/bottom logical shape bounds coordinates
        LayoutUnits explicit and corrected the case where the top value was truncated.  A
        float logicalTop value is converted to LayoutUnit with fromFloatCeil() to ensure
        that the LayoutUnit value is within the shape.
        
        Test: fast/exclusions/shape-inside/shape-inside-shape-logical-top.html

        * rendering/ExclusionShapeInsideInfo.h:
        (WebCore::ExclusionShapeInsideInfo::shapeLogicalTop): Redefined this method in terms of shapeLogicalBoundsY,Max().
        (WebCore::ExclusionShapeInsideInfo::shapeLogicalBottom):  Ditto.
        (WebCore::ExclusionShapeInsideInfo::lineOverlapsShapeBounds):  Ditto.
        (ExclusionShapeInsideInfo):
        (WebCore::ExclusionShapeInsideInfo::shapeLogicalBoundsY): Explicit conversion from floating point shape coordinates to LayoutUnits.
        (WebCore::ExclusionShapeInsideInfo::shapeLogicalBoundsMaxY): Ditto.

2012-11-05  Antti Koivisto  <antti@apple.com>

        Protect against resource deletion during iteration in MemoryCache::pruneDeadResourcesToSize
        https://bugs.webkit.org/show_bug.cgi?id=101211

        Reviewed by Andreas Kling.
        
        Some crashes have been seen under MemoryCache::pruneDeadResourcesToSize. A possible cause is that
        destroyDecodedData() call ends up evicting the resource pointed by 'previous' pointer during iteration
        and deleting the object. This looks in principle possible via stylesheets and SVG images.
        
        Speculative fix, no repro, no obvious way to construct a test.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneDeadResourcesToSize):
        
            Use CachedResourceHandle to protect the 'previous' pointer during iteration. Check if the
            resource has been kicked out from the cache during destroyDecodedData() and stop iterating
            if has (as it may die when CachedResourceHandle releases it).
            The 'current' pointer is not protected as the resource it points to is allowed to die.
            
2012-11-05  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: Fix jscompiler cast syntax
        https://bugs.webkit.org/show_bug.cgi?id=101066

        Reviewed by Pavel Feldman.

        Casts should be in the form of "/** @type {TypeName} */ (expr)" instead of "/** @type {TypeName} */ expr".

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/front-end/ApplicationCacheModel.js:
        (WebInspector.ApplicationCacheModel.prototype._frameNavigated):
        (WebInspector.ApplicationCacheModel.prototype._frameDetached):
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._onRequestStarted):
        (WebInspector.AuditLauncherView.prototype._onRequestFinished):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._uiSourceCodeAdded):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeFormatted):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeRemoved):
        (WebInspector.BreakpointManager.prototype._breakpointResolved):
        (WebInspector.BreakpointManager.Breakpoint.prototype._locationUpdated):
        (WebInspector.BreakpointManager.Storage):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointAdded):
        * inspector/front-end/CSSNamedFlowCollectionsView.js:
        (WebInspector.CSSNamedFlowCollectionsView.prototype._documentUpdated):
        (WebInspector.CSSNamedFlowCollectionsView.prototype._namedFlowCreated):
        (WebInspector.CSSNamedFlowCollectionsView.prototype._regionLayoutUpdated):
        (WebInspector.CSSNamedFlowCollectionsView.prototype._selectedNodeChanged):
        * inspector/front-end/CSSSelectorProfileView.js:
        (WebInspector.CSSProfileHeader.prototype.createView):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.LiveLocation.prototype.uiLocation):
        (WebInspector.CSSStyleDeclaration.parseComputedStylePayload):
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.CompilerScriptMapping.prototype.loadSourceMapForScript):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._frameAdded):
        (WebInspector.ConsoleView.prototype._frameRemoved):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDocument):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointByURL):
        (WebInspector.DebuggerModel.prototype.):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.CallFrame.prototype.get location):
        * inspector/front-end/DebuggerScriptMapping.js:
        (WebInspector.DebuggerScriptMapping.prototype._parsedScriptSource):
        * inspector/front-end/DirectoryContentView.js:
        (WebInspector.DirectoryContentView.prototype._sort):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._updateBreadcrumbIfNeeded):
        * inspector/front-end/ElementsPanelDescriptor.js:
        (WebInspector.ElementsPanelDescriptor.prototype.appendApplicableItems):
        * inspector/front-end/ElementsTreeOutline.js:
        (.get node):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onAddRequestHeaders):
        (WebInspector.ExtensionServer.prototype._handleOpenURL):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        (WebInspector.ExtensionServer.prototype._onSetResourceContent):
        (WebInspector.ExtensionServer.prototype._notifyResourceAdded):
        (WebInspector.ExtensionServer.prototype._notifyUISourceCodeContentCommitted):
        (WebInspector.ExtensionServer.prototype._notifyRequestFinished):
        * inspector/front-end/FileContentView.js:
        (WebInspector.FileContentView.prototype._metadataReceived):
        (WebInspector.FileContentView.FileContentProvider.prototype.requestContent):
        * inspector/front-end/FileSystemModel.js:
        (WebInspector.FileSystemModel.prototype._frameAdded):
        (WebInspector.FileSystemModel.prototype._frameNavigated):
        (WebInspector.FileSystemModel.prototype._frameDetached):
        * inspector/front-end/FileSystemView.js:
        (WebInspector.FileSystemView.EntryTreeElement.prototype.onselect):
        (WebInspector.FileSystemView.EntryTreeElement.prototype.refresh):
        * inspector/front-end/HandlerRegistry.js:
        (WebInspector.HandlerRegistry.prototype._appendHrefItems):
        * inspector/front-end/HeapSnapshotLoader.js:
        (WebInspector.HeapSnapshotLoader.prototype.write):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._changeBase):
        (WebInspector.HeapProfileHeader.prototype.load):
        (WebInspector.HeapProfileHeader.prototype._snapshotReceived):
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel.prototype._frameNavigated):
        (WebInspector.IndexedDBModel.prototype._frameDetached):
        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDataView.prototype._keyColumnHeaderFragment):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._onFormattedChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointRemoved):
        (WebInspector.JavaScriptSourceFrame.prototype._consoleMessageAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._consoleMessageRemoved):
        (WebInspector.JavaScriptSourceFrame.prototype._handleGutterClick):
        (WebInspector.JavaScriptSourceFrame.prototype._continueToLine):
        * inspector/front-end/MemoryStatistics.js:
        (WebInspector.MemoryStatistics.prototype.show):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype._uiSourceCodeTitleChanged):
        (WebInspector.NavigatorView.prototype._uiSourceCodeWorkingCopyChanged):
        (WebInspector.NavigatorView.prototype._uiSourceCodeWorkingCopyCommitted):
        (WebInspector.NavigatorView.prototype._uiSourceCodeFormattedChanged):
        * inspector/front-end/NetworkLog.js:
        (WebInspector.NetworkLog.prototype._onRequestStarted):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype._cacheDisabledSettingChanged):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._onRequestUpdated):
        (WebInspector.NetworkLogView.prototype._mainFrameNavigated):
        (WebInspector.NetworkPanel.prototype.reveal):
        (WebInspector.NetworkPanel.prototype.appendApplicableItems):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):
        (WebInspector.NetworkUISourceCodeProvider.prototype._resourceAdded):
        * inspector/front-end/ObjectPopoverHelper.js:
        (WebInspector.ObjectPopoverHelper.prototype.):
        (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover):
        * inspector/front-end/PresentationConsoleMessageHelper.js:
        (WebInspector.PresentationConsoleMessageHelper.prototype._consoleMessageAdded):
        (WebInspector.PresentationConsoleMessageHelper.prototype._parsedScriptSource):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeAddedToWorkspace):
        (WebInspector.ResourceScriptFile.prototype._workingCopyCommitted):
        (WebInspector.ResourceScriptFile.prototype._workingCopyChanged):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._onRequestFinished):
        (WebInspector.ResourceTreeModel.prototype._consoleMessageAdded):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._databaseAdded):
        (WebInspector.ResourcesPanel.prototype._domStorageAdded):
        (WebInspector.IndexedDBTreeElement.prototype._indexedDBAdded):
        (WebInspector.IndexedDBTreeElement.prototype._indexedDBRemoved):
        (WebInspector.IndexedDBTreeElement.prototype._indexedDBLoaded):
        (WebInspector.FileSystemListTreeElement.prototype._fileSystemAdded):
        (WebInspector.FileSystemListTreeElement.prototype._fileSystemRemoved):
        (WebInspector.FileSystemListTreeElement.prototype._fileSystemTreeElementByName):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._traverseNext):
        (WebInspector.SearchResultsTreeElementsTraverser.prototype._traversePrevious):
        * inspector/front-end/RevisionHistoryView.js:
        (WebInspector.RevisionHistoryView.prototype._uiSourceCodeRemoved):
        * inspector/front-end/SASSSourceMapping.js:
        (rawLocationToUILocation):
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):
        * inspector/front-end/Script.js:
        (WebInspector.Script.Location.prototype.uiLocation):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.get _worker):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeAdded):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeRemoved):
        (WebInspector.ScriptsPanel.prototype._editorClosed):
        (WebInspector.ScriptsPanel.prototype._editorSelected):
        (WebInspector.ScriptsPanel.prototype._scriptSelected):
        (WebInspector.ScriptsPanel.prototype.canSearchAndReplace):
        (WebInspector.ScriptsPanel.prototype.replaceSelectionWith):
        (WebInspector.ScriptsPanel.prototype.replaceAllWith):
        (WebInspector.ScriptsPanel.prototype._toggleBreakpoint):
        (WebInspector.ScriptsPanel.prototype.set _fileRenamed):
        (WebInspector.ScriptsPanel.prototype._appendUISourceCodeItems):
        * inspector/front-end/ScriptsPanelDescriptor.js:
        (WebInspector.ScriptsPanelDescriptor.prototype.appendApplicableItems):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping.prototype.rawLocationToUILocation):
        (WebInspector.StylesSourceMapping.prototype._uiSourceCodeAddedToWorkspace):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype._scrollChanged):
        (WebInspector.TabbedEditorContainer.prototype._selectionChanged):
        (WebInspector.TabbedEditorContainer.prototype._tabClosed):
        (WebInspector.TabbedEditorContainer.prototype._tabSelected):
        (WebInspector.TabbedEditorContainer.prototype._uiSourceCodeTitleChanged):
        (WebInspector.TabbedEditorContainer.prototype._uiSourceCodeWorkingCopyChanged):
        (WebInspector.TabbedEditorContainer.prototype._uiSourceCodeWorkingCopyCommitted):
        (WebInspector.TabbedEditorContainer.prototype._uiSourceCodeFormattedChanged):
        * inspector/front-end/TimelineModel.js:
        (WebInspector.TimelineModelLoader.prototype.write):
        * inspector/front-end/UISourceCodeFrame.js:
        (WebInspector.UISourceCodeFrame.prototype._onFormattedChanged):
        * inspector/front-end/Workspace.js:
        (WebInspector.WorkspaceController.prototype._frameAdded):
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):

2012-11-05  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: render message bubbles in CodeMirror experiment.
        https://bugs.webkit.org/show_bug.cgi?id=101164

        Reviewed by Vsevolod Vlasov.

        It sounds like addLineWidget just makes it happen.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        (WebInspector.CodeMirrorTextEditor.prototype.addDecoration):
        (WebInspector.CodeMirrorTextEditor.prototype.get if):
        (WebInspector.CodeMirrorTextEditor.prototype.removeDecoration):
        (WebInspector.CodeMirrorTextEditor.prototype._change):
        * inspector/front-end/DefaultTextEditor.js:
        (.preventDefaultOnMouseUp):
        * inspector/front-end/PresentationConsoleMessageHelper.js:
        (WebInspector.PresentationConsoleMessageHelper):
        * inspector/front-end/cm/cmdevtools.css:
        (.CodeMirror .webkit-html-message-bubble):
        (.CodeMirror .webkit-html-message-bubble img):
        (.CodeMirror .webkit-html-warning-message):
        (.CodeMirror .webkit-html-error-message):

2012-11-05  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Validate CSS Device Adaptation properties and resolve shorthands
        https://bugs.webkit.org/show_bug.cgi?id=95962

        Reviewed by Alexis Menard.

        Add the missing keywords and properties for the viewport at-rule.
        Note that we have to mark that we are inside a viewport scope because
        some properties are not validated as they would be inside a style
        rule. As an example, the semantics of CSSPropertyWidth are completely
        different: on a viewport rule, it stands for a shorthand for the
        minimum and maximum width.

        Test: css3/device-adapt/viewport-properties-validation.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore):
        (WebCore::CSSParser::parseViewportProperty):
        (WebCore::CSSParser::parseViewportShorthand):
        * css/CSSParser.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:

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

        Unreviewed, rolling out r133286, r133385, and r133394.
        http://trac.webkit.org/changeset/133286
        http://trac.webkit.org/changeset/133385
        http://trac.webkit.org/changeset/133394
        https://bugs.webkit.org/show_bug.cgi?id=101198

        Broke image placement on some web sites. (Requested by kling
        on #webkit).

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sweepMatchedPropertiesCache):
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::canShareStyleWithElement):
        * dom/Attr.cpp:
        (WebCore::Attr::detachFromElementWithValue):
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::detachAttribute):
        (WebCore::Element::getAttribute):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::getAttributeNodeNS):
        (WebCore::Element::normalizeAttributes):
        (WebCore::Element::attrIfExists):
        (WebCore::Element::ensureAttr):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        (Element):
        (WebCore::Element::updateInvalidAttributes):
        * dom/ElementAttributeData.cpp:
        (WebCore::MutableElementAttributeData::MutableElementAttributeData):
        (WebCore):
        (WebCore::attrListMap):
        (WebCore::attrListForElement):
        (WebCore::ensureAttrListForElement):
        (WebCore::removeAttrListForElement):
        (WebCore::findAttrInList):
        (WebCore::ElementAttributeData::attrIfExists):
        (WebCore::ElementAttributeData::ensureAttr):
        (WebCore::ElementAttributeData::setAttr):
        (WebCore::ElementAttributeData::removeAttr):
        (WebCore::ElementAttributeData::detachAttrObjectsFromElement):
        (WebCore::ElementAttributeData::reportMemoryUsage):
        (WebCore::ElementAttributeData::cloneDataFrom):
        (WebCore::ElementAttributeData::clearAttributes):
        (WebCore::ElementAttributeData::getAttributeNode):
        * dom/ElementAttributeData.h:
        (WebCore):
        (WebCore::ElementAttributeData::attributeStyle):
        (WebCore::ElementAttributeData::setAttributeStyle):
        (ElementAttributeData):
        (WebCore::ElementAttributeData::ElementAttributeData):
        * dom/Node.h:
        (WebCore):
        (WebCore::Node::hasAttrList):
        (WebCore::Node::attributeStyleDirty):
        (WebCore::Node::setAttributeStyleDirty):
        (WebCore::Node::clearAttributeStyleDirty):
        (Node):
        (WebCore::Node::setHasAttrList):
        (WebCore::Node::clearHasAttrList):
        (WebCore::Node::isStyleAttributeValid):
        (WebCore::Node::setIsStyleAttributeValid):
        (WebCore::Node::clearIsStyleAttributeValid):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::inlineStyleChanged):
        (WebCore::StyledElement::updateAttributeStyle):
        * dom/StyledElement.h:
        (StyledElement):
        (WebCore::StyledElement::invalidateStyleAttribute):
        (WebCore::StyledElement::attributeStyle):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):

2012-11-05  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial Qt build fix.

        Surround imports from QtGui by QT_{BEGIN,END}_NAMESPACE to fix namespaced
        builds.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/ImageQt.cpp:

2012-11-05  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] ShadowRoot type is not set correctly.
        https://bugs.webkit.org/show_bug.cgi?id=101188

        Reviewed by Hajime Morita.

        ShadowRoot type is not set correctly in Release build. We have had to remove #ifndef block.

        Test: fast/dom/shadow/shadowroot-type.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::create):
        * testing/Internals.cpp:
        (WebCore::Internals::shadowRootType):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

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

        BaseChooserOnlyDateAndTimeInputType should implement DateTimeChooserClient
        https://bugs.webkit.org/show_bug.cgi?id=101038

        Reviewed by Hajime Morita.

        Add DateTimeChooserClient behavior to BaseChooserOnlyDateAndTimeInputType.
        It means that date/time input elements without
        ENABLE_INPUT_MULTIPLE_FIELDS_UI can open date/time choosers by
        DOMActivate event.

        This patch doesn't change behavior yet because Chromimum-Android port
        intercepts user events and doesn't deliver them to date/time input
        elements. <http://crbug.com/159381>

        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        Add DateTimeChooserClient behavior. The code is similar to
        PickerIndicatorElement.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::~BaseChooserOnlyDateAndTimeInputType):
        Closes DateTimeChooser.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent):
        Open DateTimeChooser if
         - The element is not disabled,
         - The element is not read-only,
         - The element has a renderer,
         - This event is created by a user gesture, and
         - The element has no DateTimeChooser.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::detach):
        Closes DateTimeChooser.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::didChooseValue):
        Set a string value coming from a chooser to the input element.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::didEndChooser):
        Clear m_dateTimeChooser when the chooser was closed.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::closeDateTimeChooser):
        Requests to close the chooser.
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        (BaseChooserOnlyDateAndTimeInputType):
         - Implement DateTimeChooserClient
         - Add closeDateTimeChooser helper function.
         - Add detach override.
         - Add m_dateTimeChooser.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        Added. The code is moved from PickerIndicatorElement.cpp in order to
        share it with BaseChooserOnlyDateAndTimeInputType.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Declare setupDateTimeChooserParameters.
        * html/shadow/PickerIndicatorElement.cpp:
        (WebCore::PickerIndicatorElement::openPopup):
        Move some code to HTMLInputElement::setupDateTimeChooserParameters.

2012-11-04  Julien Chaffraix  <jchaffraix@webkit.org>

        Fix the collapsing border code to handle mixed directionality at the row level
        https://bugs.webkit.org/show_bug.cgi?id=101060

        Reviewed by Ojan Vafai.

        After bug 87900, we support mixed directionality at the row-group level. For coherency
        - as the underlying code didn't support it - we were artificially ignoring 'direction'
        below the row-group. This change relaxes the restriction and patches the collapsing
        borders code to query the right style and border.

        Tests: fast/table/border-collapsing/table-ltr-rows-mixed-direction.html
               fast/table/border-collapsing/table-rtl-row-mixed-direction.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::tableStartBorderAdjoiningCell):
        (WebCore::RenderTable::tableEndBorderAdjoiningCell):
        Changed to query the row's direction.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::hasStartBorderAdjoiningTable):
        (WebCore::RenderTableCell::hasEndBorderAdjoiningTable):
        Added 2 helper functions. They determine if a specific cell's border
        adjoins the table. This code is required as the last cell's end border
        can be resolved against the start border.

        (WebCore::RenderTableCell::computeCollapsedStartBorder):
        (WebCore::RenderTableCell::computeCollapsedEndBorder):
        Updated these functions now that being the start / end column doesn't mean
        that we have to resolve against the row / row-group / table's border.

        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::styleForCellFlow):
        Updated to return the row's style.

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::borderAdjoiningStartCell):
        (WebCore::RenderTableRow::borderAdjoiningEndCell):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::borderAdjoiningStartCell):
        (WebCore::RenderTableSection::borderAdjoiningEndCell):
        Updated these functions to work with mixed directionality.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setLogicalPositionForCell):
        Changed this function to use the section's direction. This is wrong and should be changed
        once we properly fix the collapsing border code.

        (WebCore::RenderTableSection::logicalRectForWritingModeAndDirection):
        Added a FIXME.

        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::width):
        This is a bug in our implementation: we used to return a non-zero width for inexistant borders (per CSS 2.1,
        'border-style: off | hidden' should have a 0 width). This is covered by our existing tests (among others by
        fast/table/border-collapsing/last-cell-left-border-hidden-table-ltr-section-rtl.html).

2012-11-04  Andrey Adaikin  <aandrey@chromium.org>

        Web Inspector: [Canvas] do not blow up the capturing log
        https://bugs.webkit.org/show_bug.cgi?id=100752

        Reviewed by Pavel Feldman.

        Clear obsolete calls in the canvas 2D capturing log in runtime.
        Now we store in the log only minimum number of calls that are necessary to replay a
        canvas 2D context. To achieve that we find in runtime those calls in the log that no
        longer contribute to the final context state and remove them.
        These are the rules according which we find and remove such calls:
        - all PATH methods between a clip() call and beginPath() call can be removed
        - all MATRIX methods before a restore() or setTransform() call but after any PATH or corresponding save() method
        - all consecutive save() + restore() calls

        Tests: inspector/profiler/canvas2d/canvas2d-api-changes.html
               inspector/profiler/canvas2d/canvas2d-profiler-capturing-basics.html

        * inspector/InjectedScriptCanvasModuleSource.js:
        (.):

2012-11-04  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] ShadowRoot should have a method to return ShadowRootType.
        https://bugs.webkit.org/show_bug.cgi?id=101178

        Reviewed by Hajime Morita.

        When we style PseudoCustomElement, we have to know ShadowRootType.
        We would like to expose a method to get ShadowRootType also in Release mode.

        This is a preparation patch for Bug 101170.

        * dom/ShadowRoot.h:
        (ShadowRoot):

2012-11-04  Keishi Hattori  <keishi@webkit.org>

        Introduce Month class to calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=101024

        Reviewed by Kent Tamura.

        Month class needs to be introduced to implement a month picker. This
        patch just introduces the Month class into the calendar picker without
        changing the current behavior.

        No new tests. Covered by existing calendar-picker-*.html tests.

        * Resources/pagepopups/calendarPicker.js:
        (Month.prototype.toLocaleString): Returns a localized month string.
        (Month): Takes a Month object, number representing the month, or year and month numbers.
        (Month.parse): Returns a new Month from an ISO month string.
        (Month.createFromDate): Returns a new Month containing the given datetime.
        (Month.prototype.equals): Returns true if the given month is the same.
        (Month.prototype.previous): Returns the previous month.
        (Month.prototype.next): Returns the next month.
        (Month.prototype.startDate): Returns a datetime that is the start of this month. The value is inclusive.
        (Month.prototype.endDate): Returns a datetime that is the end of this month. The value is exclusive.
        (Month.prototype.valueOf): Returns a number representing the month.
        (Month.prototype.toString): Returns an ISO month string.
        (YearMonthController): Use Month object.
        (YearMonthController.prototype.attachTo): Year 275760 ends in September so use the year before to measure the label width.
        (YearMonthController.prototype.setMonth): Take a month object.
        (YearMonthController.prototype._redraw): Use ISO month string for element.dataset.value.
        (YearMonthController.prototype._handleYearMonthChange):
        (YearMonthController.prototype.moveRelatively):
        (DaysTable): Use Month object.
        (DaysTable.prototype._renderMonth): Take a month object. Testing for isNaN is moved up to fix a bug when showing September, 275760.
        (DaysTable.prototype._navigateToMonth): Take a month object.
        (DaysTable.prototype._navigateToMonthWithAnimation): Take a month object.
        (DaysTable.prototype.navigateToMonthAndKeepSelectionPosition): Take a month object.
        (DaysTable.prototype.selectDate):
        (DaysTable.prototype._maybeSetPreviousMonth): Use Month object to calculate the previous month.
        (DaysTable.prototype._maybeSetNextMonth): Use Month object to calculate the next month.

2012-11-04  Halton Huo  <halton.huo@intel.com>

        [EFL] Use _LIBRARIES instead of _LIBRARY
        https://bugs.webkit.org/show_bug.cgi?id=101042

        Reviewed by Gyuyoung Kim.

        In CMake Find files, _LIBRARY is intended for internal use, should
        use _LIBRARIES instead.

        * PlatformEfl.cmake: s/_LIBRARY}/_LIBRARIES}

2012-11-04  MORITA Hajime  <morrita@google.com>

        Shadow DOM should be able to be disabled per context.
        https://bugs.webkit.org/show_bug.cgi?id=101173

        Reviewed by Dimitri Glazkov.

        This change pulls back relevant bits from r131549. Note that if
        the the port enables runtime Shadow DOM flag, this can cause slow
        down on some Chromium page cycler test cases (which r131549
        attempted to fix).

        This change is temporal and the flags should be switched back from
        ContextFeatures to RuntimeEnabledFeatures once it gains sufficent
        stability.

        * dom/ContextFeatures.cpp:
        (WebCore::ContextFeatures::shadowDOMEnabled):
        (WebCore):
        * dom/ContextFeatures.h:
        * dom/Position.cpp:
        (WebCore::Position::Position):
        (WebCore::Position::findParent):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getSelection):
        * html/HTMLTagNames.in:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::contentTagName):
        * page/DOMWindow.idl:

2012-11-04  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Implement custom pseudo-elements styling
        https://bugs.webkit.org/show_bug.cgi?id=100812

        Reviewed by Hajime Morita.

        Instead of using ElementRareData::m_shadowPseudoId, we use 'pseudo' attribute.

        Later we would like to remove Element::shadowPseudoId and Element::setShadowPseudoId
        and use pseudo()/setPseudo() instead (Bug 101171).

        Test: fast/dom/shadow/styling-pseudo-attribute.html

        * dom/Element.cpp:
        (WebCore::Element::shadowPseudoId):
        (WebCore::Element::setShadowPseudoId):
        * dom/ElementRareData.cpp:
        (WebCore::ElementRareData::reportMemoryUsage):
        * dom/ElementRareData.h:
        (ElementRareData):

2012-11-04  Kent Tamura  <tkent@chromium.org>

        BaseChooserOnlyDateAndTimeInputType should have BaseClickableWithKeyInputType behavior
        https://bugs.webkit.org/show_bug.cgi?id=101039

        Reviewed by Hajime Morita.

        Add BaseClickableWithKeyInputType behavior to
        BaseChooserOnlyDateAndTimeInputType. It means date/time input types
        without ENABLE_INPUT_MULTIPLE_FIELDS_UI receive DOMActivate events by
        pressing space or enter key. They're going to open a date/time chooser
        by DOMActive event.

        Because BaseChooserOnlyDateAndTimeInputType inherits from
        BaseDateAndTimeInputType, it can't inherit
        BaseClickableWithKeyInputType. So, this patch adds static helper
        functions to BaseClickableWithKeyInputType, and
        BaseChooserOnlyDateAndTimeInputType uses them.

        This patch doesn't change behavior yet because Chromimum-Android port
        intercepts user events and doesn't deliver them to date/time input
        elements.

        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent):
        Add an empty implementation with a FIXME comment.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleKeydownEvent):
        Add BaseClickableWithKeyInputType behavior by a helper function.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleKeypressEvent): Ditto.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleKeyupEvent): Ditto.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::accessKeyAction): Ditto.
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        (BaseChooserOnlyDateAndTimeInputType): Add function declarations.
        * html/BaseClickableWithKeyInputType.cpp:
        Add static helper functions, and existing member functions use them.
        * html/BaseClickableWithKeyInputType.h:
        (BaseClickableWithKeyInputType): Add declarations of the helper functions.
        * html/InputType.h:
        (InputType): Make dispatchSimulatedClickIfActive public because it is
        called from a helper function.

2012-11-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133416.
        http://trac.webkit.org/changeset/133416
        https://bugs.webkit.org/show_bug.cgi?id=101169

        Broke world selection by right click (Requested by rniwa on
        #webkit).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureForTextSelectionOrContextMenu):
        (WebCore::EventHandler::sendContextMenuEvent):

2012-11-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Missing ASCIILiteral in a place of accessibility
        https://bugs.webkit.org/show_bug.cgi?id=101160

        Reviewed by Darin Adler.

        ASCIILiteral usage is being missed in a spot of accessibliity.

        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaTimeDisplay::accessibilityDescription):

2012-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        Reviewed by Simon Hausmann.

        Reland with build fixes.

        The problem here is that we use QWebSettings::clearMemoryCaches, a WebKit1 API
        from the injected bundle, which calls initializeWebCoreQt and it sets the platform
        strategies to the one for WebKit1. We should stop using WebKit1 API's from WebKit2
        code. In order to keep the behavior, this patch adds exported helpers to WebCore
        that can be used from DumpRenderTree and WebKitTestRunner. This is the same idea
        as WebCoreTestSupport but these helpers are specific to Qt. Technically we could
        add it to the WebKit1 API for the time being, but my goal was to move in the direction
        of removing the WebKit1 dependency from WebKitTestRunner. We only build the file
        in non production mode.

        Basically covered by all tests.

        * Target.pri:
        * WebCore.pri: We need to link against fontconfig (only in non-production mode) since
        initializeTestFonts uses it.
        * platform/qt/QtTestSupport.cpp: Added. I choose GPL license because code from qwebsettings.cpp
        is also under that.
        (WebKit):
        (WebKit::QtTestSupport::clearMemoryCaches): This is basically a copy of QWebSettings::clearMemoryCaches
        without calling initializeWebCoreQt.
        (WebKit::QtTestSupport::initializeTestFonts): I moved this code here as well now that we have to expose
        symbols from WebCore anyway. The advantage is that now we don't have to build it twice and we don't need
        additional files to forward it from the directory of DumpRenderTree for WebKitTestRunner.
        I added a call to FontCace::invalidate in the case when the font set has been changed so that it will do
        the job even if we would stop clearing all caches between tests. Also moved the call to
        QFontDatabase::removeAllApplicationFonts from callers to here.
        * platform/qt/QtTestSupport.h:
        (WebKit):
        (QtTestSupport):

2012-11-04  Florin Malita  <fmalita@chromium.org>

        Color-profile property triggers assert
        https://bugs.webkit.org/show_bug.cgi?id=101080

        Reviewed by Dirk Schulze.

        CSSPropertyColorProfile is not handled in StyleResolver::applySVGProperty(), triggering the
        unimplemented property assert. Adding a stub entry to avoid that.

        Test: svg/css/color-profile-crash.html

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):

2012-11-04  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        Unable to copy text on disabled input fields on long press gesture
        https://bugs.webkit.org/show_bug.cgi?id=99698

        Reviewed by Ryosuke Niwa.

        Text from disabled input/text should be allowed to select. Replaced isContentEditable()
        with canStartSelection()

        Test: fast/events/touch/gesture/disabled-input-text-selection.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureLongPress):

2012-11-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133403, r133404, and r133409.
        http://trac.webkit.org/changeset/133403
        http://trac.webkit.org/changeset/133404
        http://trac.webkit.org/changeset/133409
        https://bugs.webkit.org/show_bug.cgi?id=101158

        "Broke tests" (Requested by kbalazs on #webkit).

        * Target.pri:
        * WebCore.pri:
        * platform/qt/QtTestSupport.h: Removed.

2012-11-03  Alexey Proskuryakov  <ap@apple.com>

        Get rid of USE(CFURLSTORAGESESSIONS)
        https://bugs.webkit.org/show_bug.cgi?id=101131

        Reviewed by Sam Weinig.

        This is always enabled on CFNetwork based platforms.

        * WebCore.exp.in:
        * page/Settings.cpp:
        (WebCore::Settings::setPrivateBrowsingEnabled):
        * platform/mac/CookieJar.mm:
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::setCookies):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/ResourceHandle.h:
        (ResourceHandle):
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore):
        (WebCore::currentCFHTTPCookieStorage):
        * platform/network/cf/CookieStorageCFNet.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::makeFinalRequest):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore):
        * platform/network/cf/ResourceRequest.h:
        (ResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore):
        * platform/network/mac/CookieStorageMac.mm:
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::shouldRelaxThirdPartyCookiePolicy):
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore):
        (WebCore::ResourceRequest::setStorageSession):

2012-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        Reviewed by Simon Hausmann.

        Reland with build fix.

        The problem here is that we use QWebSettings::clearMemoryCaches, a WebKit1 API
        from the injected bundle, which calls initializeWebCoreQt and it sets the platform
        strategies to the one for WebKit1. We should stop using WebKit1 API's from WebKit2
        code. In order to keep the behavior, this patch adds exported helpers to WebCore
        that can be used from DumpRenderTree and WebKitTestRunner. This is the same idea
        as WebCoreTestSupport but these helpers are specific to Qt. Technically we could
        add it to the WebKit1 API for the time being, but my goal was to move in the direction
        of removing the WebKit1 dependency from WebKitTestRunner. We only build the file
        in non production mode.

        Basically covered by all tests.

        * Target.pri:
        * WebCore.pri: We need to link against fontconfig (only in non-production mode) since
        initializeTestFonts uses it.
        * platform/qt/QtTestSupport.cpp: Added. I choose GPL license because code from qwebsettings.cpp
        is also under that.
        (WebKit):
        (WebKit::QtTestSupport::clearMemoryCaches): This is basically a copy of QWebSettings::clearMemoryCaches
        without calling initializeWebCoreQt.
        (WebKit::QtTestSupport::initializeTestFonts): I moved this code here as well now that we have to expose
        symbols from WebCore anyway. The advantage is that now we don't have to build it twice and we don't need
        additional files to forward it from the directory of DumpRenderTree for WebKitTestRunner.
        I added a call to FontCace::invalidate in the case when the font set has been changed so that it will do
        the job even if we would stop clearing all caches between tests. Also moved the call to
        QFontDatabase::removeAllApplicationFonts from callers to here.
        * platform/qt/QtTestSupport.h:
        (WebKit):
        (QtTestSupport):

2012-11-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133397.
        http://trac.webkit.org/changeset/133397
        https://bugs.webkit.org/show_bug.cgi?id=101155

        "Broke Qt. No way to force the damn bots to do a clean build.
        I'm giving up." (Requested by kbalazs on #webkit).

        * Target.pri:
        * WebCore.pri:
        * platform/qt/QtTestSupport.h: Removed.

2012-11-03  Stephen White  <senorblanco@chromium.org>

        Speculative fix to eliminate flakiness in
        css3/filters/blur-filter-page-scroll-self.html
        https://bugs.webkit.org/show_bug.cgi?id=91620.
        Suspicion is that a prior test is setting
        window.internals.settings.setEnableCompositingForFixedPosition(true),
        causing this test to be intermittely run on the GPU, giving different
        pixel results depending on test order.

        Reviewed by Jochen Eisinger.

        Covered by css3/filters/blur-filter-page-scroll-self.html

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        (Backup):

2012-11-03  Mark Rowe  <mrowe@apple.com>

        REGRESSION (r132858): Crash below -[DOMElement setClassName:] when called with a nil string

        Reviewed by Anders Carlsson.

        The changes in r132858 introduced an overload of AtomicString::add for CFStrings. However, the overload
        that was introduced is not null safe.

        * platform/text/cf/AtomicStringCF.cpp:
        (WTF::AtomicString::add): Handle a null string by returning a null StringImpl.

2012-11-03  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        Reviewed by Simon Hausmann.

        The problem here is that we use QWebSettings::clearMemoryCaches, a WebKit1 API
        from the injected bundle, which calls initializeWebCoreQt and it sets the platform
        strategies to the one for WebKit1. We should stop using WebKit1 API's from WebKit2
        code. In order to keep the behavior, this patch adds exported helpers to WebCore
        that can be used from DumpRenderTree and WebKitTestRunner. This is the same idea
        as WebCoreTestSupport but these helpers are specific to Qt. Technically we could
        add it to the WebKit1 API for the time being, but my goal was to move in the direction
        of removing the WebKit1 dependency from WebKitTestRunner. We only build the file
        in non production mode.

        Basically covered by all tests.

        * Target.pri:
        * WebCore.pri: We need to link against fontconfig (only in non-production mode) since
        initializeTestFonts uses it.
        * platform/qt/QtTestSupport.cpp: Added. I choose GPL license because code from qwebsettings.cpp
        is also under that.
        (WebKit):
        (WebKit::QtTestSupport::clearMemoryCaches): This is basically a copy of QWebSettings::clearMemoryCaches
        without calling initializeWebCoreQt.
        (WebKit::QtTestSupport::initializeTestFonts): I moved this code here as well now that we have to expose
        symbols from WebCore anyway. The advantage is that now we don't have to build it twice and we don't need
        additional files to forward it from the directory of DumpRenderTree for WebKitTestRunner.
        I added a call to FontCace::invalidate in the case when the font set has been changed so that it will do
        the job even if we would stop clearing all caches between tests. Also moved the call to
        QFontDatabase::removeAllApplicationFonts from callers to here.
        * platform/qt/QtTestSupport.h:
        (WebKit):
        (QtTestSupport):

2012-11-03  Dan Beam  <dbeam@chromium.org>

        Implement HTMLFormElement#requestAutocomplete and associated events
        https://bugs.webkit.org/show_bug.cgi?id=100557

        Reviewed by Adam Barth.

        Implements an initial version of the proposal for interactive autocomplete outlined in this email:
        http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-October/037711.html

        The goal of this patch is to allow web authors to call formElement.requestAutocomplete(); after subscribing for
        autocomplete/autocompleteerror events on formElement. If the form's [autocomplete] attribute is "off" an
        error will be dispatched. Otherwise, a request will be issued to the FrameLoaderClient.  At the moment, the
        implementation in Chrome (https://codereview.chromium.org/11270018/) will simply dispatch an error until the
        UI on Chrome's side is built. Both autocomplete and autocompleteerror events will be dispatched asynchronously
        after a small delay to behave consistently in all situations and implementations.

        Currently this is behind the feature flag REQUEST_AUTOCOMPLETE, which is disabled.

        Test: fast/forms/form-request-autocomplete.html

        * dom/EventNames.h:
        (WebCore):

        Added autocomplete and autocompleteerror events. The autocomplete event is dispatched after a user adds more
        information to a form using the future UI. This is not currently dispatched in any implementation (including Chrome)
        but will be in the future. The autocompleteerror event is dispatched when the form has [autocomplete="off"] on the
        node being asked for an interactive autocomplete. The user agent may also dispatch this event if it doesn't implement
        this API but has turned on the feature flag, can't currently show an autocomplete UI (e.g. running headlessly or in
        an HTML notification, security concerns, or any other reason it desires).

        * html/HTMLAttributeNames.in:

        Added onautocomplete and onautocompleteerror attributes so they can be parsed when creating form elements and used
        as event listeners. For example:

          <form onautocomplete="/* when autocomplete succeeds */" autocompleteerror="/* when autocomplete fails */">

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

        Added m_requestAutocompleteTimer (a timer that's used to dispatch events asynchronously) to the initializer list that
        triggers requestAutocompleteTimerFired when it times out.

        (WebCore::HTMLFormElement::requestAutocomplete):

        Called when HTMLFormElement#requestAutocomplete is called from JS (also see HTMLFormElement.idl) and decides whether
        to dispatch an error and exit early (in the case where autocomplete="off") or pass the request on to the
        FrameLoaderClient.

        (WebCore::HTMLFormElement::finishRequestAutocomplete):

        Called when the request for an interactive autocomplete is finished with either a success or error result. This
        causes an event to queue and fired after a 0 second delay. Events are owned by HTMLFormElement and reference the
        target element (this) until fired.

        (WebCore::HTMLFormElement::requestAutocompleteTimerFired):

        Called when the event timer runs out to pump the queue of current events. Events are released on dispatch.

        (WebCore::HTMLFormElement::parseAttribute):

        Encountering onautocomplete or onautocompleteerror attributes while parsing HTMLFormElements now adds event listeners
        for autocomplete an autocompleteerror events (respectively) to dispatch the value of the attribute as a script.

        * html/HTMLFormElement.h:
        (HTMLFormElement):

        Added various methods and data members as required by the implementation.

        * html/HTMLFormElement.idl:

        Added the method requestAutocomplete and associated DOM event handler attributes (onautocomplete/onautocompleteerror)
        to HTMLFormElement's public DOM API (unprefixed, as per Ian Hickson's advice). All are require the Conditional
        REQUEST_AUTOCOMPLETE to be enabled to be activated.

        * loader/EmptyClients.cpp:
        (WebCore):
        (WebCore::EmptyFrameLoaderClient::didRequestAutocomplete):

        Added noop implementation for FrameLoader::didRequestAutocomplete.

        * loader/EmptyClients.h:
        (EmptyFrameLoaderClient):

        Added FrameLoader::didRequestAutocomplete to EmptyFrameLoaderClient interface.

        * loader/FrameLoaderClient.h:
        (FrameLoaderClient):

        Added noop implementation to FrameLoaderClient interface (which is implemented chromium's FrameLoaderLoaderImpl.cpp).

2012-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: %d, %i, and %f log formatters have same result
        https://bugs.webkit.org/show_bug.cgi?id=101148

        Reviewed by Alexander Pavlov.

        Added separate formatters for %f, %i, %d and %s.

        Test: inspector/console/console-message-format.html

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.stringFormatter):
        (WebInspector.ConsoleMessageImpl.prototype.floatFormatter):
        (WebInspector.ConsoleMessageImpl.prototype.integerFormatter):

2012-11-03  Andreas Kling  <kling@webkit.org>

        Decouple Attr logic from ElementAttributeData.
        <http://webkit.org/b/101126>

        Reviewed by Antti Koivisto.

        Move all logic dealing with Attr DOM nodes from ElementAttributeData to Element.
        This makes more sense since an Attr is tied to a single Element, but an ElementAttributeData
        can be shared by any number of Elements at a given time.

        Also updated naming convention from just "Attr" to "Attr node" in the code I was touching.
        "Attr" is way too generic, and has been historically confused with WebCore::Attribute a lot.

        * dom/Element.h:
        * dom/ElementAttributeData.h:
        * dom/Element.cpp:
        (WebCore::attrNodeListMap):
        (WebCore::attrNodeListForElement):
        (WebCore::ensureAttrNodeListForElement):
        (WebCore::removeAttrNodeListForElement):
        (WebCore::findAttrNodeInList):
        (WebCore::Element::~Element):
        (WebCore::Element::detachAttribute):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::getAttributeNodeNS):
        (WebCore::Element::normalizeAttributes):
        (WebCore::Element::attrIfExists):
        (WebCore::Element::ensureAttr):
        (WebCore::Element::detachAttrNodeFromElementWithValue):
        (WebCore::Element::detachAllAttrNodesFromElement):
        (WebCore::Element::cloneAttributesFromElement):

            Move everything Attr-related into Element.cpp while simplifying some loops and remove
            conditions that are no longer needed as they used to depend on having an attributeData().

        * dom/Node.h:
        (WebCore::Node::hasSyntheticAttrChildNodes):
        (WebCore::Node::setHasSyntheticAttrChildNodes):

            Renamed the hasAttrList() node flag to hasSyntheticAttrChildNodes().

        * dom/Attr.cpp:
        (WebCore::Attr::detachFromElementWithValue):

            Remove awkward indirection and let the call site deal with removing the Attr node from
            the Element's list of Attr nodes.

        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::clearAttributes):

            Remove now-unused Element* argument.

2012-11-03  Pavel Feldman  <pfeldman@chromium.org>

        REGRESSION (r132014-r132047): Webkit Inspector Window docking broken
        https://bugs.webkit.org/show_bug.cgi?id=101125

        Reviewed by Vsevolod Vlasov.

        Added "bottom" as default docked state.

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

2012-11-02  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] ShadowRoot should be able to know the existence of <content>
        https://bugs.webkit.org/show_bug.cgi?id=100921

        Reviewed by Dimitri Glazkov.

        When <content> is inserted into or removed from a shadow subtree, ShadowRoot counts the number of <content>.
        It provides O(1) method to check the existence of <content>.

        This is necessary when we implement a fast checking path for distribution invalidation when an element attribute
        is changed. Larger context is explained in Bug 100451.

        Test: fast/dom/shadow/has-content-elements.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::hasInsertionPoint): Since we track both <content> and <shadow>, we don't need to traverse
        all the descendants of ShadowRoot anymore.
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::registerContentElement):
        (WebCore::ShadowRoot::unregisterContentElement):
        (WebCore::ShadowRoot::hasContentElement):
        (ShadowRoot):
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::HTMLContentElement):
        (WebCore::HTMLContentElement::insertedInto): When <content> is inserted into ShadowDOM subtree,
        we notify it to the ShadowRoot. Note that only active <content> element is counted.
        (WebCore):
        (WebCore::HTMLContentElement::removedFrom):
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        * testing/Internals.cpp:
        (WebCore::Internals::hasContentElement):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-11-02  KyungTae Kim  <ktf.kim@samsung.com>

        sCurrentPaintTimeStamp is not initialized when FrameView::paintContents returns in the middle
        https://bugs.webkit.org/show_bug.cgi?id=99990

        Reviewed by Darin Adler.

        Move initialization code for sCurrentPaintTimeStamp to the below of early returns,
        because it was not reset after early return.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

2012-11-02  KyungTae Kim  <ktf.kim@samsung.com>

        Fix build warning in PluginView.cpp on release build
        https://bugs.webkit.org/show_bug.cgi?id=101049

        Reviewed by Kentaro Hara.

        The protocol, host, port parameters are not used when LOG_DISABLED
        Use UNUSED_PARAM macro for removing -Wunused-parameter warning

        * plugins/PluginView.cpp:
        (WebCore::PluginView::getAuthenticationInfo):

2012-10-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Move soup authentication from GtkAuthenticationDialog to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=99914

        Reviewed by Carlos Garcia Campos.

        Move the actual soup authentication code from the GtkAuthenticationDialog to ResourceHandleSoup.
        This allows a more generic implementation of authentication, for example, one where a WebKit2
        client can completely handle authentication.

        No new tests. This does not change behavior.

        * platform/gtk/GtkAuthenticationDialog.cpp: Remove references to the SoupPasswordManager, which
        is going away in the next release of Gnome. Instead we always assume that the authentication backend has
        support for remembering passwords and pass that information along with the answer to the authentication
        request.

        The rest of the changes to this class can be summarized as:
        1. Getting the information from the AuthenticationChallenge instead of directly from the libsoup
           objects.
        2. Using the AuthenticationClient to accomplish the authentication instead of talking to libsoup
           directly.
        * platform/gtk/GtkAuthenticationDialog.h:
        (GtkAuthenticationDialog): Remove members which are no longer used.
        * platform/network/ResourceHandle.h:
        (ResourceHandle): ResourceHandleSoup now implements the entire AuthenticationClient interface.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveAuthenticationChallenge): Don't handle authentication
        for synchronous handles.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Now set the current challenge on
        the internal data structure.
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential): Added.
        (WebCore::ResourceHandle::receivedCredential): Added.
        (WebCore::ResourceHandle::receivedCancellation): Added.
        (WebCore::authenicateCallback): Pass the handle as the authentication client.

2012-11-02  Benjamin Poulain  <bpoulain@apple.com>

        Improve CSSParser::setupParser() since the prefix/suffix are literals
        https://bugs.webkit.org/show_bug.cgi?id=101107

        Reviewed by Andreas Kling.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::setupParser):
        * css/CSSParser.h:
        (CSSParser):
        (WebCore::CSSParser::setupParser):
        CSSParser::setupParser() is only used with literals prefix and suffix. We do not have
        to compute the length at runtime, we can direclty encode it in the binary.

2012-11-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133375.
        http://trac.webkit.org/changeset/133375
        https://bugs.webkit.org/show_bug.cgi?id=101138

        Caused 3 tests to fail on Mac (Requested by aboxhall-laptop on
        #webkit).

        * platform/text/LineBreakIteratorPoolICU.h:
        (WebCore::LineBreakIteratorPool::take):
        (WebCore::LineBreakIteratorPool::put):
        (LineBreakIteratorPool):
        * platform/text/TextBreakIterator.h:
        (WebCore):
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        (LazyLineBreakIterator):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/RenderText.h:
        (WebCore):
        * rendering/break_lines.cpp:
        (WebCore):
        (WebCore::isBreakableSpace):
        (WebCore::needsLineBreakIterator):
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):
        * rendering/break_lines.h:
        (WebCore):
        (WebCore::isBreakable):

2012-11-02  Andreas Kling  <kling@webkit.org>

        Cut overgrown ElementAttributeData bitfield.
        <http://webkit.org/b/101129>

        Reviewed by Anders Carlsson.

        Make sure the ElementAttributeData bitfield fits into 32 bits. Added a compile-time assertion
        to guard against future bloatage.

        * dom/ElementAttributeData.cpp:
        (SameSizeAsElementAttributeData):
        * dom/ElementAttributeData.h:
        (ElementAttributeData):

2012-11-02  Michael Saboff  <msaboff@apple.com>

        Crash calling is8Bit() in visitedLinkHash()
        https://bugs.webkit.org/show_bug.cgi?id=101119

        Reviewed by Filip Pizlo.

        Added an isEmpty() check to AttributeURL and KURL.

        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash):

2012-11-02  Glenn Adams  <glenn@skynav.com>

        Add support to -webkit-line-break property for CSS3 Text line-break property values and semantics.
        https://bugs.webkit.org/show_bug.cgi?id=89235

        Reviewed by Eric Seidel.

        See also wiki documentation at:
        [1] http://trac.webkit.org/wiki/LineBreaking
        [2] http://trac.webkit.org/wiki/LineBreakingCSS3Mapping

        Web exposed changes include:
        (1) The default (initial) value for -webkit-line-break becomes 'auto', instead of 'normal';
        (2) The values 'auto', 'loose', 'normal', and 'strict' are added to -webkit-line-break;
        (3) See [2] above for details regarding interpretation.

        Tests: css3/line-break/line-break-auto-centered.html
               css3/line-break/line-break-auto-half-kana.html
               css3/line-break/line-break-auto-hyphens.html
               css3/line-break/line-break-auto-inseparables.html
               css3/line-break/line-break-auto-iteration-marks.html
               css3/line-break/line-break-auto-postfixes.html
               css3/line-break/line-break-auto-prefixes.html
               css3/line-break/line-break-auto-sound-marks.html
               css3/line-break/line-break-loose-centered.html
               css3/line-break/line-break-loose-half-kana.html
               css3/line-break/line-break-loose-hyphens.html
               css3/line-break/line-break-loose-inseparables.html
               css3/line-break/line-break-loose-iteration-marks.html
               css3/line-break/line-break-loose-postfixes.html
               css3/line-break/line-break-loose-prefixes.html
               css3/line-break/line-break-loose-sound-marks.html
               css3/line-break/line-break-normal-centered.html
               css3/line-break/line-break-normal-half-kana.html
               css3/line-break/line-break-normal-hyphens.html
               css3/line-break/line-break-normal-inseparables.html
               css3/line-break/line-break-normal-iteration-marks.html
               css3/line-break/line-break-normal-postfixes.html
               css3/line-break/line-break-normal-prefixes.html
               css3/line-break/line-break-normal-sound-marks.html
               css3/line-break/line-break-strict-centered.html
               css3/line-break/line-break-strict-half-kana.html
               css3/line-break/line-break-strict-hyphens.html
               css3/line-break/line-break-strict-inseparables.html
               css3/line-break/line-break-strict-iteration-marks.html
               css3/line-break/line-break-strict-postfixes.html
               css3/line-break/line-break-strict-prefixes.html
               css3/line-break/line-break-strict-sound-marks.html

        * platform/text/LineBreakIteratorPoolICU.h:
        (WebCore::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
        Add static function to construct ICU locale argument (also used as pool key) with additional
        break keyword.
        (WebCore::LineBreakIteratorPool::take):
        (WebCore::LineBreakIteratorPool::put):
        (LineBreakIteratorPool):
        Remove direct dependency from ICU library (and types), moving that dependency into
        new {open,close}LineBreakIterator() functions (defined in TextBreakIteratorICU.cpp).
        Update to take line break mode into account.
        Create (and cache) different break iterators depending on line break mode (in addition to locale),
        which entails expanding pool entry key format to optionally append "@break=" +
        "loose"|"normal"|"strict" keyword to locale string.

        * platform/text/TextBreakIterator.h:
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::isLooseCJKMode):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        (LazyLineBreakIterator):
        Define LineBreakIteratorMode enumeration for use in TextBreakIterator et al.
        Add state member to indicate line break mode.

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::acquireLineBreakIterator):
        Use new line break mode when making iterator from pool.
        Handle change of return type of LineBreakIteratorPool::take() to non-ICU type,
        i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
        (WebCore::releaseLineBreakIterator):
        Handle change of parameter type of LineBreakIteratorPool::put() to non-ICU type,
        i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
        (WebCore::isCJKLocale):
        New functions for determining if CJK rules apply.
        (WebCore::openLineBreakIterator):
        New function for abstracting opening of ICU style line break iterator. This is now
        used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.
        This function also takes into account the line break mode.
        (WebCore::closeLineBreakIterator):
        (WebCore::mapLineIteratorModeToRules):
        New function for abstracting closing of ICU style line break iterator. This is now
        used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):
        Pass line break iterator mode flag when reseting LazyLineBreakIterator.
        Add looseMode local variable to prevent need for computing under isBreakable().

        * rendering/RenderText.cpp:
        (WebCore::mapLineBreakToIteratorMode):
        Add implementation for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
        and RenderBlock::LineBreaker::nextLineBreak.
        (WebCore::RenderText::computePreferredLogicalWidths):
        Ensure (lazy line) breakIterator is initialized for line break mode.
        Ensure isBreakable() is passed loose mode flag to match behavior in RenderBlock::LineBreaker::nextLineBreak.

        * rendering/RenderText.h:
        (WebCore):
        Add declaration for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
        and RenderBlock::LineBreaker::nextLineBreak.

        * rendering/break_lines.cpp:
        (WebCore):
        Introduce two (local) enums NBSPBehavior and LooseBehavior for expanding template on nextBreakablePosition
        to include loose mode parameter.
        (WebCore::isBreakableSpace):
        Add externally specified loose mode parameter to prevent need to invoke line break iterator
        accessor method on each invocation. Use new loose mode flavors off NBP functions.
        (WebCore::needsLineBreakIterator):
        Introduce loose mode behavior template parameter to optimize loose mode behavior code path in order
        to prevent regression to non loose mode path.
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):
        Use new template parameter enums described above.
        (WebCore::nextBreakablePositionIgnoringNBSPLoose):
        (WebCore::nextBreakablePositionLoose):
        Introduce two additional 'loose' mode flavors of NBP template expansions.

        * rendering/break_lines.h:
        (WebCore):
        (WebCore::isBreakable):
        Add externally specified loose mode parameter to prevent need to invoke line break iterator
        accessor method on each invocation.

2012-11-02  Elliott Sprehn  <esprehn@chromium.org>

        Replace NodeRareData hash map with a union on m_renderer
        https://bugs.webkit.org/show_bug.cgi?id=100057

        Reviewed by Eric Seidel.

        Use a union on Node::m_renderer between NodeRareData* and RenderObject*. This removes
        the overhead of accessing rare data and the memory from the map.

        This is an 8% improvement on Bindings/get-elements-by-tag-name.html which tested
        document.getElementsByTagName and was previously optimized in Bug 90059 for a 5% 
        improvement. As this is better than even the special casing for document that was
        done in that bug, general node list access should see an even greater win.

        This reduces the memory usage on nytimes.com by 250k per Bug 101052 by
        removing the rare data map overhead.

        This is also a 15% improvement on Parser/textarea-parsing.html

        By removing the performance overhead of rareData() this patch addresses the performance
        issues raised in Bugs 73853, 87034 and 89635.

        I ran Parser/html5-full-render.html and there was no performance regression after
        tuning Text::recalcTextStyle and the refactor that was done in r132684.

        No new tests, this is just a refactor.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/Element.cpp:
        (WebCore::Element::elementRareData):
        * dom/Node.cpp:
        (WebCore::Node::rareData):
        (WebCore::Node::ensureRareData):
        (WebCore::Node::clearRareData):
        (WebCore::Node::renderBox):
        (WebCore::Node::renderBoxModelObject):
        (WebCore::Node::reportMemoryUsage):
        * dom/Node.h:
        (NodeRareDataBase):
          Base class for NodeRareData that knows about the renderer so we can
          inline the accesses in Node.h
        (WebCore::NodeRareDataBase::renderer):
        (WebCore::NodeRareDataBase::setRenderer):
        (WebCore::NodeRareDataBase::~NodeRareDataBase):
        (WebCore::NodeRareDataBase::NodeRareDataBase):
        (WebCore):
        (WebCore::Node::renderer):
        (WebCore::Node::setRenderer):
        (Node):
        * dom/NodeRareData.h:
        * dom/NodeRenderStyle.h:
        (WebCore::Node::renderStyle):
        * dom/Text.cpp:
        (WebCore::Text::recalcTextStyle):
          This method appears very hot in html5-full-render.html and accessing the
          renderer 4 times caused a 2% performance regression with this patch. I
          reduced it to 1 access and there's no longer any performance regression.
        * dom/WebCoreMemoryInstrumentation.cpp:
          Removed tracking of the rare data map memory usage as there is no longer
          a map to track.
        * dom/WebCoreMemoryInstrumentation.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):

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

        [Mac] ResourceHandle changes for network process
        https://bugs.webkit.org/show_bug.cgi?id=101111

        Reviewed by Jessie Berlin.

        With NSOperationQueue, we'll be getting NetworkProcess delegate method calls
        on secondary threads, and so we won't block other requests while consulting with WebProcess.

        * platform/network/NetworkingContext.h:
        (WebCore::NetworkingContext::scheduledRunLoopPairs):
        (WebCore::NetworkingContext::scheduledOperationQueue):
        Add an ability to schedule on an NSOperationQueue. Now that scheduling on run loop
        is not a must, give scheduledRunLoopPairs() a default implementation.

        * platform/network/mac/ResourceHandleMac.mm: Removed isInitializingConnection
        static. It was only used to catch a long obsolete bug with debug logging, and
        cannot work with multiple threads.
        (WebCore::ResourceHandle::start): Scedule on a operation queue if applicable.
        (-[WebCoreResourceHandleAsDelegate connection:willCacheResponse:]): Removed a
        check that used isInitializingConnection.

2012-11-02  Chris Rogers  <crogers@google.com>

        Automating gain AudioParam with linearRampToValueAtTime introduces buzzing distortion
        https://bugs.webkit.org/show_bug.cgi?id=100885

        Reviewed by Kenneth Russell.

        AudioParamTimeline needs to use double-precision for time-values to avoid drift and precision issues.

        Covered by existing tests.

        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::calculateTimelineValues):
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valueForContextTime):
        (WebCore::AudioParamTimeline::valuesForTimeRange):
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * Modules/webaudio/AudioParamTimeline.h:
        (AudioParamTimeline):

2012-11-02  Stephen Chenney  <schenney@chromium.org>

        Reduce redundant code in SimpleFontData[platform]
        https://bugs.webkit.org/show_bug.cgi?id=97245

        Reviewed by Eric Seidel.

        Move duplicated code out of platform specific files and into the common file.
        This represents all of the methods in SimpleFontData that do not have genuine
        platform specific code.

        No new tests because there is no change at all in the functionality.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore):
        (WebCore::SimpleFontData::smallCapsFontData): Implementation from platform files.
        (WebCore::SimpleFontData::emphasisMarkFontData): Implementation from platform files.
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore): Removed common code.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore): Removed common code.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore): Removed common code.
        * platform/graphics/pango/SimpleFontDataPango.cpp:
        (WebCore): Removed common code.
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore): Removed common code.
        * platform/graphics/skia/SimpleFontDataSkia.cpp:
        (WebCore): Removed common code.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore): Removed common code.
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        (WebCore): Removed common code.
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore): Removed common code.

2012-11-02  Adam Barth  <abarth@webkit.org>

        memory-instrumentation-cached-images.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=101103

        Unreviewed.

        Restore code deleted in http://trac.webkit.org/changeset/133331.

        * bindings/v8/IntrusiveDOMWrapperMap.h:

2012-11-02  Simon Fraser  <simon.fraser@apple.com>

        Enable SUBPIXEL_LAYOUT on Mac
        https://bugs.webkit.org/show_bug.cgi?id=101076

        Reviewed by Dave Hyatt.

        Define ENABLE_SUBPIXEL_LAYOUT and include it in FEATURE_DEFINES.

        * Configurations/FeatureDefines.xcconfig:

2012-11-02  Lianghui Chen  <liachen@rim.com>

        [BlackBerry] ResourceHandle::cancel() in ResourceHandleBlackBerry should setClient to null.
        https://bugs.webkit.org/show_bug.cgi?id=101082

        Internal PR: 235410.
        Patch suggested by George Staikos, prepared by Lyon Chen.
        Reviewed by Yong Li.

        ResourceHandle::cancel() should call setClient(0) to close the window
        during which it has been cancelled but its client is still there and can
        be called.

        No new tests as it's a code improvement without obvious bug.

        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::ResourceHandle::cancel):

2012-11-02  Anders Carlsson  <andersca@apple.com>

        Add a PluginInactive plug-in unavailability reason
        https://bugs.webkit.org/show_bug.cgi?id=101089

        Reviewed by Sam Weinig.

        This is to be used by Mac WebKit and WebKit2 shortly.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::inactivePluginText):
        (WebCore):
        * platform/LocalizedStrings.h:
        (WebCore):
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        (WebCore::inactivePluginText):
        (WebCore):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::inactivePluginText):
        (WebCore):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::inactivePluginText):
        (WebCore):
        * platform/qt/LocalizedStringsQt.cpp:
        (WebCore::inactivePluginText):
        (WebCore):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::unavailablePluginReplacementText):
        * rendering/RenderEmbeddedObject.h:

2012-11-02  Rob Buis  <rbuis@rim.com>

        [CMAKE] Remove QNX specific section
        https://bugs.webkit.org/show_bug.cgi?id=101063

        Reviewed by Daniel Bates.

        We do not need the QNX section anymore, so also remove the FEATURE_DEFINES_CSS variable as it
        equals FEATURE_DEFINES_WITH_SPACE_SEPARATOR.

        * CMakeLists.txt:

2012-11-02  Michael Saboff  <msaboff@apple.com>

        visitedHashLink() converts 8 bit URLs and attributes to 16 bits.
        https://bugs.webkit.org/show_bug.cgi?id=101014

        Reviewed by Geoffrey Garen.

        Converted most of the static methods to templated based on character type.  Changed visitedHashLink to 
        check bitness of both the base URL and attribute.  If both are 8 bit, then we process using the LChar
        version of the templated methods.  Otherwise we use the 16 bit flavor.

        Changes covered by existing tests.

        * platform/LinkHash.cpp:
        (WebCore::findSlashDotDotSlash):
        (WebCore::findSlashSlash):
        (WebCore::findSlashDotSlash):
        (WebCore::containsColonSlashSlash):
        (WebCore::squeezeOutNullCharacters):
        (WebCore::cleanSlashDotDotSlashes):
        (WebCore::mergeDoubleSlashes):
        (WebCore::cleanSlashDotSlashes):
        (WebCore::cleanPath):
        (WebCore::matchLetter):
        (WebCore::needsTrailingSlash):
        (WebCore::visitedURLInline):
        (WebCore::visitedURL):
        (WebCore::visitedLinkHash):

2012-11-02  Ian Vollick  <vollick@chromium.org>

        Support invalidation tracking for composited layers
        https://bugs.webkit.org/show_bug.cgi?id=97801

        Reviewed by Simon Fraser.

        GraphicsLayers now store invalidated rects and can include them in
        the layer tree dump.

        Test: compositing/repaint/invalidations-on-composited-layers.html

        * WebCore.exp.in:
          Exports FrameView::resetTrackedRepaints()
        * page/FrameView.cpp:
        (WebCore::FrameView::setTracksRepaints):
          Notifies each compositor that we are starting/stopping repaints.
        (WebCore::FrameView::resetTrackedRepaints):
          Moved implementation to the cpp file.
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::~GraphicsLayer):
          Clears the repaint rects associated with this layer.
        (WebCore::GraphicsLayer::resetTrackedRepaints):
          Clears the repaint rects associated with this layer.
          Note that the repaint rects are stored in a statically allocated
          HashMap to avoid using space on the graphics layers.
        (WebCore::GraphicsLayer::addRepaintRect):
          Adds a repaint rect to list associated with this layer in the
          hash map mentioned above.
        (WebCore::GraphicsLayer::dumpProperties):
          This has been modified to include the repaint rects in the dump
          if they've been requested.
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::isTrackingRepaints):
          This is how graphics layers check if repaint tracking is happening.
          Returns false by default.
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp:
        (WebCore::GraphicsLayerBlackBerry::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerBlackBerry::setNeedsDisplay):
        (WebCore::GraphicsLayerBlackBerry::setNeedsDisplayInRect):
          These now call GraphicsLayer::addRepaintRect as necessary.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplayInRect):
          Now calls GraphicsLayer::addRepaintRect as necessary.
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerChromium::setNeedsDisplay):
        (WebCore::GraphicsLayerChromium::setNeedsDisplayInRect):
          These now call GraphicsLayer::addRepaintRect as necessary.
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::setNeedsDisplay):
        (WebCore::GraphicsLayerClutter::setNeedsDisplayInRect):
          These now call GraphicsLayer::addRepaintRect as necessary.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
          These now call GraphicsLayer::addRepaintRect as necessary.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isTrackingRepaints):
          Required since this is a GraphicsLayerClient.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
          Now accepts a flag to include the repaint rects in the layer tree
          dump.
        (WebCore::resetTrackedRepaintRectsRecursive):
          Clears the repaint rects on all graphics layers.
        (WebCore::RenderLayerCompositor::resetTrackedRepaintRects):
          Clears the repaint rects on all graphics layers.
        (WebCore::RenderLayerCompositor::isTrackingRepaints):
          Required since this is a GraphicsLayerClient.
        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText):
        * testing/Internals.h:
        * testing/Internals.idl:
          The internals changes plumb the new flag for including the repaint
          rects in the layer tree dump.

2012-11-02  Adam Barth  <abarth@webkit.org>

        [V8] Generalize NodeWrapperMap to be able to handle other sorts of keys
        https://bugs.webkit.org/show_bug.cgi?id=100973

        Reviewed by Stephen White.

        This is the first step towards using intrusive DOM wrapper maps more
        widely in WebCore (see
        http://lists.webkit.org/pipermail/webkit-dev/2012-November/022686.html
        for more context).

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        * bindings/v8/IntrusiveDOMWrapperMap.h:
        (WebCore):
        (WebCore::IntrusiveDOMWrapperMap::weakCallback):

2012-11-02  Adam Barth  <abarth@webkit.org>

        ASSERT in RenderLayer::hitTestContents can fire
        https://bugs.webkit.org/show_bug.cgi?id=99656

        Reviewed by Eric Seidel.

        The issue is that updateHitTestResult and addNodeToRectBasedTestResult
        are using two different nodes. Since they aren't consistent, we violate
        assertions about only setting the inner node if we're doing a
        rect-based hit test. This patch makes the two consistent.

        Test: fast/dom/nodesFromRect/nodesFromRect-continuation-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeForHitTest):
        (WebCore):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::updateHitTestResult):
        * rendering/RenderBlock.h:
        (RenderBlock):

2012-11-02  Mike West  <mkwst@chromium.org>

        Prefer 'Content-Security-Policy' to 'X-WebKit-CSP'.
        https://bugs.webkit.org/show_bug.cgi?id=101043

        Reviewed by Adam Barth.

        The canonical 'Content-Security-Policy' header landed in 133095, but we
        missed a few tests while updating to the new hotness. We also should
        start using the canonical header for the inspector.

        This patch should have no visible change; tests should continue to pass
        with the new header, just as they did with the old header.

        * inspector/front-end/inspector.html:

2012-11-02  Adam Barth  <abarth@webkit.org>

        ENABLE(UNDO_MANAGER) is disabled everywhere and is not under active development
        https://bugs.webkit.org/show_bug.cgi?id=100711

        Reviewed by Eric Seidel.

        No one is actively working on ENABLE(UNDO_MANAGER). There are some
        tricky lifetime issues in the UndoManager API that are complicating
        ongoing work to improve the interaction between WebCore and the garbage
        collector. Rather than leave this code in a broken state, we should
        remove it for the time being. We can always restore it from the svn
        history when there is an active owner for this code.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.features.am:
        * GNUmakefile.list.am:
        * Target.pri:
        * UseJSC.cmake:
        * UseV8.cmake:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMTransaction.cpp: Removed.
        * bindings/js/DOMTransaction.h: Removed.
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSUndoManagerCustom.cpp: Removed.
        * bindings/v8/DOMTransaction.cpp: Removed.
        * bindings/v8/DOMTransaction.h: Removed.
        * bindings/v8/V8HiddenPropertyName.h:
        (WebCore):
        * bindings/v8/custom/V8DOMTransactionCustom.cpp: Removed.
        * bindings/v8/custom/V8UndoManagerCustom.cpp: Removed.
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        (WebCore::PropertySetCSSStyleDeclaration::setPropertyInternal):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setDataAndUpdate):
        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild):
        (WebCore::willRemoveChildren):
        (WebCore::updateTreeAfterInsertion):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore):
        (Document):
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::willModifyAttribute):
        * editing/CompositeEditCommand.h:
        * editing/DOMTransaction.idl: Removed.
        * editing/DOMTransactionStep.cpp: Removed.
        * editing/DOMTransactionStep.h: Removed.
        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):
        (WebCore::Editor::canUndo):
        (WebCore::Editor::undo):
        (WebCore::Editor::canRedo):
        (WebCore::Editor::redo):
        * editing/UndoManager.cpp: Removed.
        * editing/UndoManager.h: Removed.
        * editing/UndoManager.idl: Removed.
        * editing/UndoStep.h:
        (UndoStep):

2012-11-02  Mike West  <mkwst@chromium.org>

        Measure the usage of the various CSP headers.
        https://bugs.webkit.org/show_bug.cgi?id=100974

        Reviewed by Adam Barth.

        Currently, we're collecting metrics regarding usage of the
        'X-WebKit-CSP' and 'X-WebKit-CSP-Report-Only' HTTP headers. We've
        recently added support for the canonical 'Content-Security-Policy'
        and 'Content-Security-Policy-Report-Only' headers. This patch adds
        those headers explicitly into the metrics, giving insight into uptake
        of the unprefixed header, and into usage of pure reporting vs.
        enforcement.

        No visible functionality should change; all Content Security Policy
        tests should continue to pass.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
            Convert the CSP header type into a FeatureObserver::Feature, and
            observe it.
        * page/FeatureObserver.h:
            Add three new values to the enum to cover the new header types.

2012-11-02  Ojan Vafai  <ojan@chromium.org>

        Fix silly mistake from http://trac.webkit.org/changeset/133315.
        Forgot to remove the "!".

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

2012-11-02  Tom Sepez  <tsepez@chromium.org>

        Support X-XSS-Protection: report=URL header syntax in XSSAuditor.
        https://bugs.webkit.org/show_bug.cgi?id=100892

        Reviewed by Adam Barth.

        This patch adds a security feature which allows a violation report to be sent back
        to a site when the XSSAuditor detects a reflected XSS against it.  It uses the same
        reporting mechanism as for CSP violation reports.

        Tests: http/tests/security/xssAuditor/malformed-xss-protection-header-5.html
               http/tests/security/xssAuditor/malformed-xss-protection-header-6.html
               http/tests/security/xssAuditor/malformed-xss-protection-header-7.html
               http/tests/security/xssAuditor/malformed-xss-protection-header-8.html
               http/tests/security/xssAuditor/malformed-xss-protection-header-9.html
               http/tests/security/xssAuditor/report-script-tag.html
               http/tests/security/xssAuditor/xss-protection-parsing-03.html
               http/tests/security/xssAuditor/xss-protection-parsing-04.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        Invoke Ping loader's violation reporting, if requested, when a reflected
        XSS is detected.
        
        * html/parser/XSSAuditor.h:
        XSSAuditor class need to store the report URL as well as the undigested versions
        of the request URL and request body for reporting.

        * loader/MixedContentChecker.cpp:
        (WebCore):
        * loader/MixedContentChecker.h:
        (MixedContentChecker):
        Make isMixedContent() method public.

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendViolationReport):
        * loader/PingLoader.h:
        (PingLoader):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):
        Renamed reportContentSecurityPolicyViolation() method to sendViolationReport(),
        since this is now used to send more than just CSP violations.
        
        * platform/network/HTTPParsers.cpp:
        (WebCore):
        (WebCore::skipEquals):
        (WebCore::skipValue):
        (WebCore::parseXSSProtectionHeader):
        * platform/network/HTTPParsers.h:
        Parse and return report= directive in X-XSS-Protection header.
        
2012-11-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133313.
        http://trac.webkit.org/changeset/133313
        https://bugs.webkit.org/show_bug.cgi?id=101078

        "A lot of tests hit the ASSERTs introduced by this patch"
        (Requested by haraken on #webkit).

        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::setDOMWrapper):

2012-11-02  Ojan Vafai  <ojan@chromium.org>

        Unreviewed, rolling out r132913.
        http://trac.webkit.org/changeset/132913
        https://bugs.webkit.org/show_bug.cgi?id=91850

        Caused performance regressions.
        See https://bugs.webkit.org/show_bug.cgi?id=100872 for details.

        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::visitExternalStrings):
        * bindings/v8/V8StringResource.cpp:
        (StringTraits):
        (WebCore::v8StringToWebCoreString):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::makeExternalString):
        (WebCore::WebCoreStringResource::visitStrings):
        * bindings/v8/V8ValueCache.h:
        (WebCore::WebCoreStringResource::WebCoreStringResource):
        (WebCore::WebCoreStringResource::~WebCoreStringResource):
        (WebCore::WebCoreStringResource::data):
        (WebCoreStringResource):
        (WebCore::WebCoreStringResource::length):
        (WebCore::WebCoreStringResource::atomicString):
        (WebCore::WebCoreStringResource::toStringResource):

2012-11-02  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove dependency on SoupPasswordManager
        https://bugs.webkit.org/show_bug.cgi?id=100775

        Reviewed by Carlos Garcia Campos.

        Remember passwords using libsecret instead of SoupPasswordManager. We accomplish this using
        a new class, CredentialBackingStore. CredentialBackingStore will soon be the thing that backs
        CredentialStoreGtk. The name is based on the name of a similar class from the BlackBerry port.

        No new tests. This does not change behavior.

        * GNUmakefile.am: Add libsecret flags to the build and the new directory to the include list.
        * GNUmakefile.list.am: Add new files to the source list.
        * platform/gtk/GRefPtrGtk.cpp: Add support for SecretValue to GRefPtrGtk.
        * platform/gtk/GtkAuthenticationDialog.cpp: Replace interaction with SoupPasswordManger with
        interaction with the CredentialBackingStore. Remove all conditional SoupPasswordManager guards.
        * platform/gtk/GtkAuthenticationDialog.h: Ditto.
        * platform/network/gtk/CredentialBackingStore.cpp: Added.
        * platform/network/gtk/CredentialBackingStore.h: Added.

2012-11-02  Jinwoo Song  <jinwoo7.song@samsung.com>

        Fix build warning [-Wswitch]
        https://bugs.webkit.org/show_bug.cgi?id=101029

        Reviewed by Alexey Proskuryakov.

        Fix build warning message: enumeration value ‘Viewport’ not handled in switch [-Wswitch]
        in Source/WebCore/css/StyleSheetContents.cpp.
        Add case statement for 'Viewport' with the CSS_DEVICE_ADAPTATION macro.

        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):

2012-11-02  Ojan Vafai  <ojan@chromium.org>

        Move m_element checks out of canShareStyle into locateSharedStyle
        https://bugs.webkit.org/show_bug.cgi?id=101070

        Reviewed by Darin Adler.

        Can shareStyleWithElement is called for each sibling as we look for a
        shareElement. locateSharedStyle is called once for the element we're
        trying to find a style for. Checks that only depend on the latter
        element should, thus be in locateSharedStyle.

        No new tests. There should be no change in behavior, except possibly
        a performance improvement in some cases.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::locateSharedStyle):

2012-11-02  Kentaro Hara  <haraken@chromium.org>

        [V8] Add ASSERT() to guarantee that we don't store NULL pointers to V8 internal fields
        https://bugs.webkit.org/show_bug.cgi?id=101054

        Reviewed by Adam Barth.

        I'm investigating a Chromium crash bug:
        http://code.google.com/p/chromium/issues/detail?id=155942

        I've not yet identified the root cause (because I can't reproduce
        the crash), but it looks like we are storing NULL pointers to
        V8 internal fields. Just in case, we can add an ASSERT() to
        guarantee that NULL pointers are never stored. (Also I'm hoping
        that this ASSERT() will give me more debug information.)

        No tests. No change in behavior.

        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::setDOMWrapper):

2012-11-02  Kevin Ellis  <kevers@chromium.org>

        Imrpove scoring in touch adjustment to address bias towards smaller targets.
        https://bugs.webkit.org/show_bug.cgi?id=101046

        Reviewed by Antonio Gomes.

        Update the touch overlap score for touch adjustmetn to normalize
        with respect to the maximum possible overlap rather than the size
        of the target element.  This change enables good overlap scores for
        small and large targets alike.  Prior to the patch it was not possible
        to get a good overlap score for a sufficiently larget target.

        Covered by existing tests, which have been updated to reflect the
        intended behavior.

        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::hybridDistanceFunction):

2012-11-02  Mike West  <mkwst@chromium.org>

        Web Inspector: Repeated errors are rendered incorrectly: link is not floating to the right.
        https://bugs.webkit.org/show_bug.cgi?id=101032

        Reviewed by Yury Semikhatsky.

        https://bugs.webkit.org/show_bug.cgi?id=100525 incorrectly added
        '-webkit-flex: 1' only to the list generated for errors in the console.
        It should have been added to normal warning text as well. This patch
        fixes the problem.

        * inspector/front-end/inspector.css:
        (.repeated-message .outline-disclosure, .repeated-message > .console-message-text):

2012-11-02  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: show popup for CPU bars.
        https://bugs.webkit.org/show_bug.cgi?id=100951

        Reviewed by Pavel Feldman.

        Each CPU bar can represent a combination of several shorter messages.
        We should show information about combined messages - start time,
        total duration, CPU time, message count.

        * English.lproj/localizedStrings.js: Added "Message Count" string.
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._refreshMainThreadBars):
        Supply elements with underlying info.
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.generateMainThreadBarPopupContent):
        Added.

2012-11-02  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Network panel grid UI is misaligned after r132888
        https://bugs.webkit.org/show_bug.cgi?id=101050

        Rollback the change to basic data grid css and move it to the native memory
        snapshot datagrid css.

        Reviewed by Alexander Pavlov.

        * inspector/front-end/dataGrid.css:
        (.data-grid td):
        * inspector/front-end/nativeMemoryProfiler.css:
        (.native-snapshot-view .data-grid td):

2012-11-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133303.
        http://trac.webkit.org/changeset/133303
        https://bugs.webkit.org/show_bug.cgi?id=101068

        "Broke qt wk2 build (seems like bots fails to rerun qmake if
        needed)" (Requested by kbalazs on #webkit).

        * Target.pri:
        * WebCore.pri:
        * platform/PlatformStrategies.cpp:
        (WebCore):
        * platform/qt/QtTestSupport.h: Removed.

2012-11-02  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] setPlatformStrategies always asserts after r132744
        https://bugs.webkit.org/show_bug.cgi?id=100838

        Reviewed by Simon Hausmann.

        The problem here is that we use QWebSettings::clearMemoryCaches, a WebKit1 API
        from the injected bundle, which calls initializeWebCoreQt and it sets the platform
        strategies to the one for WebKit1. We should stop using WebKit1 API's from WebKit2
        code. In order to keep the behavior, this patch adds exported helpers to WebCore
        that can be used from DumpRenderTree and WebKitTestRunner. This is the same idea
        as WebCoreTestSupport but these helpers are specific to Qt. Technically we could
        add it to the WebKit1 API for the time being, but my goal was to move in the direction
        of removing the WebKit1 dependency from WebKitTestRunner. We only build the file
        in non production mode.

        Basically covered by all tests.

        * Target.pri:
        * WebCore.pri: We need to link against fontconfig (only in non-production mode) since
        initializeTestFonts uses it.
        * platform/PlatformStrategies.cpp:
        (WebCore): Zero initialize the global static variable as it is expected by the functions
        below. It is a side fix. It seems like it has not been shown on debug WebKit2 bots because
        common runtime environments tend to zero initialize statics by default - but I don't think
        we should rely on that.
        * platform/qt/QtTestSupport.cpp: Added. I choose GPL license because code from qwebsettings.cpp
        is also under that.
        (WebKit):
        (WebKit::QtTestSupport::clearMemoryCaches): This is basically a copy of QWebSettings::clearMemoryCaches
        without calling initializeWebCoreQt.
        (WebKit::QtTestSupport::initializeTestFonts): I moved this code here as well now that we have to expose
        symbols from WebCore anyway. The advantage is that now we don't have to build it twice and we don't need
        additional files to forward it from the directory of DumpRenderTree for WebKitTestRunner.
        I added a call to FontCace::invalidate in the case when the font set has been changed so that it will do
        the job even if we would stop clearing all caches between tests. Also moved the call to
        QFontDatabase::removeAllApplicationFonts from callers to here.
        * platform/qt/QtTestSupport.h:
        (WebKit):
        (QtTestSupport):

2012-11-02  Kent Tamura  <tkent@chromium.org>

        Optimize DateTimeFormat::quoteAndAppendLiteral output
        https://bugs.webkit.org/show_bug.cgi?id=101040

        Reviewed by Kentaro Hara.

        In LDML date format pattern, only ASCII alphabet and quote have special
        roles. So we don't need to quote the input string if it doesn't contain
        them.

        No new tests. Updated WebKit/chromium/tests/LocaleWinTest.cpp

        * platform/text/DateTimeFormat.cpp:
        (WebCore::isASCIIAlphabetOrQuote): A helper to check special characters.
        (WebCore::DateTimeFormat::quoteAndAppendLiteral):
        Append the input string as is if it has no special character.

2012-11-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI instrument NodeRareData::Map. It uses ~250k on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=101052

        Reviewed by Yury Semikhatsky.

        I noticed that in many cases cache structures are plain static HashMap, HashSet etc.
        MemoryAgent can visit it but instrumentation for these containers report no objectType.
        It means that addRootObject method needs to accept objectType property as an argument.
        Otherwise I would have had to create a proxy class with proper objectType.

        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore::WebCoreMemoryInstrumentation::reportMemoryUsage):
        (WebCore):
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryInstrumentation):
        (WebCore):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):

2012-11-02  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] ASSERT hit for every mouse click
        https://bugs.webkit.org/show_bug.cgi?id=100607

        Reviewed by Jocelyn Turcotte.

        Changed the logic of absolutePathForRenderer to use the first highlight box as the mid box 
        by uniting the two in case the mid box is empty. This allows the first box to be merged with
        the last box should they intersect, and thereby prevents an ASSERT in addHighlightRect that is
        triggered by two intersecting boxes being passed to addHighlightRect as separate ones.

        Also, this patch removes some superfluous checks for LayoutRect::isEmpty, which is being checked
        in LayoutRect::intersects already.

        No new tests, but added manual test: ManualTests/tap-gesture-on-em-link-tap-highlight-assert.html

        * page/GestureTapHighlighter.cpp:

2012-11-02  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Regression r130057: Improper preferred width calculation when an inline replaced object, wrapped in an inline flow, follows some text.
        https://bugs.webkit.org/show_bug.cgi?id=99442

        Reviewed by Levi Weintraub.

        Extra width is displayed after an inline replaced object that follows some
        text (not ending in a whitespace) within an inline-block. This is due to
        the end width (endMin) of the text object being carried forward (via inlineMin)
        and added onto the next line containing the inline replaced object.

        This was caused as a regression to, or rather became apparent post the fix
        http://trac.webkit.org/changeset/130057 which fixed the block's preferred
        width when a renderInline with width contained an inline replaced object.

        Test: fast/block/block-with-inline-replaced-child-following-text.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        Introduced another flag (shouldBreakLineAfterText) which is set when
        our current Text line (object) does not end in a whitespace, thereby
        implying that there could be more text following, for which the end width
        needs to be carried forward onto the next line.

        In case the following object instead turns out to be an Inline Replaced
        object, we should terminate our previous line and reset this extra width.
        This is now being handled by checking for the shouldBreakLineAfterText
        flag while processing Inline Replaced objects.

        Once set, shouldBreakLineAfterText shall be reset only if we get another
        Text object that ends in a whitespace, signifying the termination of
        that text line. For all other cases, we persist with this flag through
        the block's inline contents.

2012-11-02  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Console: remove obsolete ctrl-shift-m shortcut
        https://bugs.webkit.org/show_bug.cgi?id=101036

        Reviewed by Pavel Feldman.

        Ctrl-shift-m on console dumps MemoryAgent.getDOMNodeCount
        This functionality seems to be obsolete.

        * inspector/front-end/ConsoleView.js: Removed shortcut and function.

2012-11-02  Stephen Chenney  <schenney@chromium.org>

        SVG classes cause layering violations in platform Font code
        https://bugs.webkit.org/show_bug.cgi?id=98513

        Reviewed by Eric Seidel.

        Add a contained class to save and restore GlpyhPage state in FontFallbackList.
        This allows us to remove the layering violation, and several methods, that
        previously existed to support SVGTextRunRenderingContext.

        No new tests because no change at all in functionality.

        * platform/graphics/FontFallbackList.h:
        (FontFallbackList):
        (GlyphPagesStateSaver): New state save and restore class
        (WebCore::FontFallbackList::GlyphPagesStateSaver::GlyphPagesStateSaver): Save GlyphPage state
        (WebCore::FontFallbackList::GlyphPagesStateSaver::~GlyphPagesStateSaver): Restore GlyphPage state
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter): Shift to usage of the new class.

2012-11-02  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Fix compilation errors
        https://bugs.webkit.org/show_bug.cgi?id=101027

        Reviewed by Yury Semikhatsky.

        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotNode.prototype._createSizeCell):

2012-11-02  Andreas Kling  <kling@webkit.org>

        Only resolve attribute-derived style once per shared ElementAttributeData.
        <http://webkit.org/b/100990>

        Reviewed by Antti Koivisto.

        Track the serialization of the "style" attribute, and the dirtiness of the presentation attribute style
        on ElementAttributeData instead of in Node flags.

        This allows us to avoid duplicate work for ElementAttributeData that are shared between multiple elements,
        since the state is no longer per-Element.

        I've left the presentation attribute cache in there for now, since it covers two additional cases:

            - Elements with the same attributes in different order.
            - Elements with the same presentation attributes, but with differing non-presentation attributes.

        It's likely that we're not gaining much from it anymore, but that's a topic for another patch.

        * dom/Node.h:
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::presentationAttributeStyle):
        (WebCore::ElementAttributeData::setPresentationAttributeStyle):
        (WebCore::ElementAttributeData::styleAttributeIsDirty):
        (WebCore::ElementAttributeData::setStyleAttributeIsDirty):
        (WebCore::ElementAttributeData::presentationAttributeStyleIsDirty):
        (WebCore::ElementAttributeData::setPresentationAttributeStyleIsDirty):
        (ElementAttributeData):
        (WebCore::ElementAttributeData::ElementAttributeData):
        * dom/Element.cpp:
        (WebCore::Element::getAttribute):
        * dom/Element.h:
        (WebCore::Element::styleAttributeIsDirty):
        (WebCore::Element::updateInvalidAttributes):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateStyleAttribute):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::inlineStyleChanged):
        * dom/StyledElement.h:
        (WebCore::StyledElement::invalidateStyleAttribute):

            Move the "attribute style dirty" and "style attribute valid" node flags to ElementAttributeData
            and change them to both use dirty semantics.

        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::cloneDataFrom):

            Share the presentation attribute style between cloned elements initially.

        * dom/StyledElement.h:
        (WebCore::StyledElement::presentationAttributeStyle):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sweepMatchedPropertiesCache):
        (WebCore::StyleResolver::matchAllRules):
        (WebCore::StyleResolver::canShareStyleWithElement):
        * dom/ElementAttributeData.cpp:
        (WebCore::MutableElementAttributeData::MutableElementAttributeData):
        (WebCore::ElementAttributeData::reportMemoryUsage):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):

            Renamed StyledElement::attributeStyle() to presentationAttributeStyle(). The old name was too
            easily confused with "style attribute".

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):

            Renamed from updateAttributeStyle().

2012-11-01  Kent Tamura  <tkent@chromium.org>

        Introduce ENABLE_DATE_AND_TIME_INPUT_TYPES, and clarify usage of other related flags
        https://bugs.webkit.org/show_bug.cgi?id=101007

        Reviewed by Kentaro Hara.

        ChromeClient::openDateTimeChooser and Locale::formatDateTime are
        necessary if one of date/time input types is enabled and even if
        ENABLE_INPUT_MULTIPLE_FIELDS_UI is disabled. So they should be wrapped
        with ENABLE(DATE_AND_TIME_INPUT_TYPES).

        The following clases are used only for ChromeClient::openDateTimeChooser.
        They should be wrapped with the same flag.
          - class DateTimeChooser
          - class DateTiemChooserClient

        The following classes/functions are used for
        Locale::formatDateTime. They should be wrapped with the same flag.
          - Locale::dateFormat
          - Locale::monthFormat
          - Locale::timeFormat
          - Locale::shortTimeFormat
          - Locale::monthLabels
          - Locale::shortMonthLabels
          - Locale::standAloneMonthLabels
          - Locale::shortStandAloneMonthLabels
          - class DateTimeFormat

        Also, we change the meaning of ENABLE_CALENDAR_PICKER. It meant
         1) <input> supports calendar picker UI, and
         2) WebCore/Resources/pagepopups/ is used for the calendar UI implementation.
        Now ENABLE_CALENDAR_PICKER means only 2.

        No new tests because of no behavior changes.

        * html/BaseDateAndTimeInputType.h: This is necessary only if date/time
        input types are enabled because this is a common super class of
        date/time InputType classes.
        * html/BaseDateAndTimeInputType.cpp: Ditto.
        * html/BaseChooserOnlyDateAndTimeInputType.cpp: Ditto.
        * html/BaseChooserOnlyDateAndTimeInputType.h: Ditto.

        * page/ChromeClient.h: Change the flag for openDateTimeChooser, and add a comment.
        * loader/EmptyClients.cpp: Follow the openDateTimeChooser flag change.
        * loader/EmptyClients.h: Ditto.
        * platform/DateTimeChooser.h:
        This is needed only if ChromeClient::openDateTimeChooser is available.
        * platform/DateTimeChooserClient.h: Ditto.

        * platform/LocalizedStrings.h:
        weekFormatInLDML is necessary if ENABLE(INPUT_TYPE_WEEK) regardless of
        ENABLE(INPUT_MULTIPLE_FIELDS_UI).

        * platform/text/PlatformLocale.h:
        Change the condition for Locale::formatDateTime and the code used by
        Locale::formatDateTime.
        * platform/text/PlatformLocale.cpp:
        (WebCore::Locale::formatDateTime):
        This is necessary even if !ENABLE(INPUT_MULTIPLE_FIELDS_UI), to produce
        localized representations of date/time values.
        * platform/text/LocaleICU.cpp:
        Change the condition for the code used by Locale::formatDateTime.
        * platform/text/LocaleICU.h: Ditto.
        * platform/text/LocaleNone.cpp: Ditto.
        * platform/text/mac/LocaleMac.h: Ditto.
        * platform/text/mac/LocaleMac.mm: Ditto.
        * platform/text/win/LocaleWin.cpp: Ditto.
        * platform/text/win/LocaleWin.h: Ditto.
        * platform/text/DateTimeFormat.cpp: Ditto.
        * platform/text/DateTimeFormat.h: Ditto.

        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        Remove some #if-#endif for a picker indicator element because
        ENABLE_CALENDAR_PICKER meaning is changed.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp: Ditto.

        * html/shadow/PickerIndicatorElement.cpp: CALENDAR_PICKER ->
        INPUT_MULTIPLE_FIELDS_UI because ENABLE_CALENDAR_PICKER meaning is changed.
        * html/shadow/PickerIndicatorElement.h: Ditto.
        * rendering/RenderDetailsMarker.cpp: Ditto.
        * rendering/RenderDetailsMarker.h: Ditto.
        * rendering/RenderTheme.h: Ditto.
        * rendering/RenderThemeChromiumCommon.cpp: Ditto.
        * rendering/RenderThemeChromiumCommon.h: Ditto.
        * rendering/RenderThemeChromiumMac.h: Ditto.
        * rendering/RenderThemeChromiumSkia.h: Ditto.

2012-11-02  Zeno Albisser  <zeno@webkit.org>

        [Qt] Revert QCocoaNativeInterface workaround from r131720.
        https://bugs.webkit.org/show_bug.cgi?id=100842

        Reviewed by Simon Hausmann.

        After updating Qt5 on the buildbots, the workaround
        introduced in r131720 is not needed anymore.

        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):

2012-11-02  Kent Tamura  <tkent@chromium.org>

        Add a common base class for date/time input types without inline editing behavior
        https://bugs.webkit.org/show_bug.cgi?id=101031

        Reviewed by Hajime Morita.

        Add BaseChooserOnlyDateAndTimeInputType class, which will support
        DateTimeChooserClient, and date/time input types inherit it if
        !ENABLE(INPUT_MULTIPLE_FIELDS_UI).

        No new tests. This doesn't change any behavior.

        * CMakeLists.txt: Add BaseChooserOnlyDateAndTimeInputType.{cpp,h}.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * html/BaseChooserOnlyDateAndTimeInputType.cpp: Added.
        * html/BaseChooserOnlyDateAndTimeInputType.h: Added.

        * html/DateInputType.h: Inherit BaseChooserOnlyDateAndTimeInputType if
        !ENABLE(INPUT_MULTIPLE_FIELDS_UI).
        * html/DateTimeInputType.h: Ditto.
        * html/DateTimeLocalInputType.h: Ditto.
        * html/MonthInputType.h: Ditto.
        * html/TimeInputType.h: Ditto.
        * html/WeekInputType.h: Ditto.

2012-11-02  Peter Wang  <peter.wang@torchmobile.com.cn>

        Web Inspector: [JSC] implement WorkerScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=99801

        Reviewed by Yury Semikhatsky.

        To implement Worker Inspector for JSC.
        The virtual function "runEventLoopWhilePaused" is defined, since there are different ways to block
        the JS running in worker-context and normal page-context.
        The function "isContentScript" now is virtual because the original invoked functions are useless
        and cause problem in worker-context.
        In function "WebCore::WorkerScriptController::attachDebugger", we invoke "initScriptIfNeeded" to
        ensure the JSGloblalObject exist in the case of attaching Debugger before executing the worker
        JS code (Pause on start).

        No new test case.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        (WebCore):
        * bindings/js/PageScriptDebugServer.h:
        (PageScriptDebugServer):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::isContentScript):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        (JSC):
        (ScriptDebugServer):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::attachDebugger):
        (WebCore):
        (WebCore::WorkerScriptController::detachDebugger):
        * bindings/js/WorkerScriptController.h:
        (WorkerScriptController):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        * bindings/js/WorkerScriptDebugServer.h:
        (WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::getListenersForGlobalObject):
        (WebCore::WorkerScriptDebugServer::isContentScript):

2012-11-02  KyungTae Kim  <ktf.kim@samsung.com>

        Compilation warning in Node.cpp when USERSELECT_ALL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=101025

        Reviewed by Ryosuke Niwa.

        The parameter 'treatment' is not used when USERSELECT_ALL is disabled. 

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

2012-11-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Middle click closes an editor and pastes selection into current editor on Linux
        https://bugs.webkit.org/show_bug.cgi?id=100743

        Reviewed by Alexander Pavlov.

        Editor now consumes all middle mouse button mouse ups except for the ones in the main panel.
        TabbedPane now consumes all middle mouse button mouse ups as well.
        Navigator view does not pass focus anymore if element was selected with middle mouse button.

        * inspector/front-end/DefaultTextEditor.js:
        (.preventDefaultOnMouseUp):
        (.consumeMouseUp):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorSourceTreeElement.prototype.ondblclick):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane):
        (WebInspector.TabbedPane.prototype.onMouseUp):
        (WebInspector.TabbedPane.prototype.onMouseClick):

2012-11-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI instrument ShadowRoot. It gives us ~400k on plus.google.com
        https://bugs.webkit.org/show_bug.cgi?id=100866

        Reviewed by Yury Semikhatsky.

        Plain vanilla memory instrumentation code for HTMLInputElement which has a ElementShadow.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::reportMemoryUsage):
        (WebCore):
        * dom/DocumentOrderedMap.h:
        (DocumentOrderedMap):
        * dom/Element.cpp:
        (WebCore::Element::reportMemoryUsage):
        (WebCore):
        * dom/Element.h:
        * dom/ElementRareData.cpp: Added.
        (WebCore):
        (WebCore::ElementRareData::reportMemoryUsage):
        * dom/ElementRareData.h:
        (ElementRareData):
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::reportMemoryUsage):
        (WebCore):
        * dom/ElementShadow.h:
        (ElementShadow):
        * dom/Node.cpp:
        (WebCore::Node::reportMemoryUsage):
        * dom/NodeRareData.cpp: Added.
        (WebCore):
        (WebCore::NodeListsNodeData::reportMemoryUsage):
        (WebCore::NodeRareData::reportMemoryUsage):
        * dom/NodeRareData.h:
        (NodeListsNodeData):
        (NodeRareData):
        * dom/ShadowRoot.cpp:
        (WebCore):
        (WebCore::ShadowRoot::reportMemoryUsage):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::reportMemoryUsage):
        (WebCore):
        * dom/TreeScope.h:
        (TreeScope):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::reportMemoryUsage):
        (WebCore):
        * html/HTMLFormControlElement.h:
        (HTMLFormControlElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::reportMemoryUsage):
        (WebCore):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::reportMemoryUsage):
        (WebCore):
        * html/HTMLTextFormControlElement.h:
        (HTMLTextFormControlElement):

2012-11-02  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Cookie info in Network Resources Cookies tab shows "Invalid Date"
        https://bugs.webkit.org/show_bug.cgi?id=97471

        Reviewed by Pavel Feldman.

        This patch is partly based on patch by Otto Derek Cheung <otcheung@rim.com>.
        Refactored CookieParser so that all cookies in front-end were WebInspector.Cookie object.
        Cookie table can now show Max-Age as well as Expires attribute of a cookie.
        Fixed expiresDate calculation.
        Removed getters from CookieParser for better compilation.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.CookieRuleBase.prototype.mapResourceCookies):
        (WebInspector.AuditRules.CookieSizeRule.prototype._average):
        (WebInspector.AuditRules.CookieSizeRule.prototype._max):
        (WebInspector.AuditRules.StaticCookielessRule.prototype._collectorCallback):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        * inspector/front-end/CookieParser.js:
        (WebInspector.CookieParser.prototype.cookies):
        (WebInspector.CookieParser.prototype._flushCookie):
        (WebInspector.CookieParser.prototype._addCookie):
        (WebInspector.Cookie.prototype.httpOnly):
        (WebInspector.Cookie.prototype.secure):
        (WebInspector.Cookie.prototype.session):
        (WebInspector.Cookie.prototype.path):
        (WebInspector.Cookie.prototype.domain):
        (WebInspector.Cookie.prototype.expires):
        (WebInspector.Cookie.prototype.maxAge):
        (WebInspector.Cookie.prototype.size):
        (WebInspector.Cookie.prototype.setSize):
        (WebInspector.Cookie.prototype.expiresDate):
        (WebInspector.Cookie.prototype.attributes):
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.Cookies.buildCookiesFromString):
        (WebInspector.Cookies.buildCookieProtocolObject):
        (WebInspector.Cookies.cookieMatchesResourceURL):
        (WebInspector.Cookies.cookieDomainMatchesResourceDomain):
        * inspector/front-end/CookiesTable.js:
        (WebInspector.CookiesTable):
        (WebInspector.CookiesTable.prototype._totalSize):
        (WebInspector.CookiesTable.prototype._sortCookies.expiresCompare):
        (WebInspector.CookiesTable.prototype._sortCookies):
        (WebInspector.CookiesTable.prototype._createGridNode):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype._buildCookie):

2012-11-01  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: do not call checkCountedObject with wrong pointers
        https://bugs.webkit.org/show_bug.cgi?id=100958

        Reviewed by Alexander Pavlov.

        Removed redundant call to checkCountedObject.

        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::countObjectSize):

2012-11-02  Peter Wang  <peter.wang@torchmobile.com.cn>

        Web Inspector: a small defect in "WorkersSidebarPanel.js"
        https://bugs.webkit.org/show_bug.cgi?id=101022

        Reviewed by Yury Semikhatsky.

        In "autoattachToWorkersClicked", the "event.target.checked" doesn't alwyas valid, since the
        "event.target" might be a label.

        The problem just causes an error report, doesn't effect function, so no new test case.

        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane.prototype._autoattachToWorkersClicked):

2012-11-01  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Element should have getter and setter of attribute 'pseudo'
        https://bugs.webkit.org/show_bug.cgi?id=100831

        Reviewed by Hajime Morita.

        We expose 'pseudo' attribute in Element. When nothing is assigned to 'pseudo', it should return null.

        Test: fast/dom/shadow/pseudo-attribute.html

        * dom/Element.cpp:
        (WebCore::Element::pseudo):
        (WebCore):
        (WebCore::Element::setPseudo):
        * dom/Element.h:
        (Element):
        * dom/Element.idl:
        * html/HTMLAttributeNames.in:

2012-11-01  Roger Fong  <roger_fong@apple.com>

        Build fix. http://trac.webkit.org/changeset/133252 broke the Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=101008

        Reviewed by fischman@chromium.org.

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

2012-11-01  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r133244.
        http://trac.webkit.org/changeset/133244
        https://bugs.webkit.org/show_bug.cgi?id=100973

        Broke Chromium Mac (clang) builds.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        * bindings/v8/IntrusiveDOMWrapperMap.h:
        (WebCore::DOMNodeWrapperMap::weakCallback):

2012-11-01  Ami Fischman  <fischman@chromium.org>

        HTMLMediaPlayer should free m_player when src is set/changed
        https://bugs.webkit.org/show_bug.cgi?id=99647

        Reviewed by Eric Carlson.

        New ManualTest added; manual since leaking media players doesn't have layoutTestController-visible effects.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): clearMediaPlayer() when src is set/changed
        (WebCore::HTMLMediaElement::userCancelledLoad): use new clearMediaPlayer() helper
        (WebCore::HTMLMediaElement::clearMediaPlayer): clear m_player and associated timers/flags
        (WebCore):
        (WebCore::HTMLMediaElement::createMediaPlayer): whitespace-only change
        * html/HTMLMediaElement.h: new method: createMediaPlayer().
        (HTMLMediaElement):

2012-11-01  Tom Sepez  <tsepez@chromium.org>

        XSS blocker false positive when page contains <iframe src="">
        https://bugs.webkit.org/show_bug.cgi?id=93416

        Reviewed by Adam Barth.

        Treat src="" and src="about:blank" as safe resources even if they appear
        in the query parameters.

        Tests: http/tests/security/xssAuditor/iframe-injection-allowed-2.html
               http/tests/security/xssAuditor/iframe-injection-allowed-3.html
               http/tests/security/xssAuditor/iframe-injection-allowed.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::isLikelySafeResource):

2012-11-01  Tien-Ren Chen  <trchen@chromium.org>

        Fix assertion failure in RenderGeometryMap::absoluteRect when frame scale != 1.0
        https://bugs.webkit.org/show_bug.cgi?id=100912

        Reviewed by Simon Fraser.

        Frame scale will add transformation to RenderView, so fixed position doesn't
        get propagated up to the viewport by RenderGeometryMap. This is handled
        correctly in RenderView::mapLocalToContainer, causing the assertion to fail.
        This patch corrects RenderGeometryMap::mapToAbsolute to handle the RenderView
        transformation case.

        A layout test is added to catch this issue. The test will crash debug build
        without this patch.

        Test: compositing/geometry/fixed-position-composited-page-scale-scroll.html

        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::mapToAbsolute):

2012-11-01  Adam Barth  <abarth@webkit.org>

        [V8] Generalize NodeWrapperMap to be able to handle other sorts of keys
        https://bugs.webkit.org/show_bug.cgi?id=100973

        Reviewed by Kentaro Hara.

        This is the first step towards using intrusive DOM wrapper maps more
        widely in WebCore (see
        http://lists.webkit.org/pipermail/webkit-dev/2012-November/022686.html
        for more context).

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        * bindings/v8/IntrusiveDOMWrapperMap.h:
        (WebCore):
        (WebCore::IntrusiveDOMWrapperMap::weakCallback):

2012-11-01  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] CustomFilterOperation should be converted to ValidatedCustomFilterOperation before using it
        https://bugs.webkit.org/show_bug.cgi?id=100533

        Reviewed by Dean Jackson.

        Added the code that converts a CustomFilterOperation to a ValidatedCustomFilterOperation.
        Both the software path and the composited one will use this operation instead. There will be
        no need to check the shader in platform code anymore.

        No new tests, already covered by existing custom filter tests.

        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp:
        (WebCore::ValidatedCustomFilterOperation::ValidatedCustomFilterOperation):
        * platform/graphics/filters/ValidatedCustomFilterOperation.h:
        (WebCore):
        (WebCore::ValidatedCustomFilterOperation::create):
        (ValidatedCustomFilterOperation):
        (WebCore::ValidatedCustomFilterOperation::validatedProgram):
        (WebCore::ValidatedCustomFilterOperation::parameters):
        (WebCore::ValidatedCustomFilterOperation::meshRows):
        (WebCore::ValidatedCustomFilterOperation::meshColumns):
        (WebCore::ValidatedCustomFilterOperation::meshType):
        (WebCore::ValidatedCustomFilterOperation::operator==):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::createCustomFilterEffect):
        (WebCore::FilterEffectRenderer::build):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::ensureBacking):
        (WebCore::RenderLayer::clearBacking):
        (WebCore::RenderLayer::styleChanged): updateOrRemoveFilterClients needs to be called before the composited
        layer is updated. Otherwise the composited layer will never see a loaded filter in the first call.
        (WebCore):
        (WebCore::RenderLayer::isCSSCustomFilterEnabled):
        (WebCore::RenderLayer::computeFilterOperations):
        (WebCore::RenderLayer::updateOrRemoveFilterClients): Split updateOrRemoveFilterEffect into 2 functions.
        This one is supposed to add the clients needed to load network resources.
        (WebCore::RenderLayer::updateOrRemoveFilterEffectRenderer): Figures out if a software fallback is needed 
        and creates a FilterEffectRenderer.
        * rendering/RenderLayer.h:
        (RenderLayer):

2012-11-01  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Get rid of internal tex coord attribute
        https://bugs.webkit.org/show_bug.cgi?id=94358

        Reviewed by Dean Jackson.

        Remove the internal css_a_texCoord attribute that WebKit added to shaders in order to
        sample the element texture by texture coordinate.

        Now, the WebKit-added sampling code can leverage a_texCoord if the author defined it, or
        WebKit can add its own a_texCoord definition to the author's shader.

        Note that vertex attributes are read-only in GLSL. Also, note that we already reject the
        shader if the author did not define a_texCoord with the correct type. Essentially, if
        a_texCoord exists in the author's validated shader, we are guaranteed that it's the correct
        type and that its value is unmodified.

        Test: css3/filters/custom/custom-filter-a-tex-coord-optional.html

        * platform/graphics/filters/CustomFilterCompiledProgram.cpp:
        (WebCore::CustomFilterCompiledProgram::CustomFilterCompiledProgram):
            Remove the references to m_internalTexCoordAttribLocation.
        (WebCore::CustomFilterCompiledProgram::initializeParameterLocations): Ditto.
        * platform/graphics/filters/CustomFilterCompiledProgram.h: Ditto.
        * platform/graphics/filters/CustomFilterRenderer.cpp:
        (WebCore::CustomFilterRenderer::bindProgramAndBuffers): Ditto.
        (WebCore::CustomFilterRenderer::unbindVertexAttributes): Ditto.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::CustomFilterValidatedProgram):
            Pass the set of symbols found in the author's shaders to the rewriteMixVertexShader
            method.
        (WebCore::CustomFilterValidatedProgram::rewriteMixVertexShader):
            If the author didn't define a_texCoord, add it to the end of the author's vertex 
            shader, but before the shader's new main function. As before, the new main function
            will pass the texture coordinate to the fragment shader via the css_v_texCoord varying.
        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        (WebCore):
            Add a forward declaration for ANGLEShaderSymbol.
        (CustomFilterValidatedProgram):
            Update the method prototype for rewriteMixVertexShader.

2012-11-01  Chris Rogers  <crogers@google.com>

        Ensure that AudioNode deletion is synchronized with a stable state of the rendering graph
        https://bugs.webkit.org/show_bug.cgi?id=100994

        Reviewed by Kenneth Russell.

        In some rare cases it has been observed that nodes are getting deleted in the main thread
        during an audio rendering quantum where the dirty inputs and outputs have not yet been cleaned
        via calls to handleDirtyAudioSummingJunctions() and handleDirtyAudioNodeOutputs().
        This was possible because nodes marked for deletion with markForDeletion() could be picked
        up in a subsequent call to deleteMarkedNodes() before the render quantum has finished and
        handlePostRenderTasks() has had a chance to reconcile these marked nodes and clean the dirty state.
        The solution is to manage the marked nodes in a separate vector which only gets copied to another
        vector truly eligible for deletion which is synchronized in handlePostRenderTasks().

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::markForDeletion):
        (WebCore::AudioContext::scheduleNodeDeletion):
        (WebCore::AudioContext::deleteMarkedNodes):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):

2012-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r133224 as suggested by Enrica.
        Confirmed the test failures go away on Chromium Mac locally.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDrag):

2012-11-01  Alexey Proskuryakov  <ap@apple.com>

        Rename HAVE(NETWORK_CFDATA_ARRAY_CALLBACK) to USE(NETWORK_CFDATA_ARRAY_CALLBACK)

        Rubber-stamped by Joe Pecoraro.

        All CFNetwork based platforms have this now, but not all use it at the moment.

        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/cf/SubresourceLoaderCF.cpp:
        * loader/mac/ResourceLoaderMac.mm:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::buffer):
        (WebCore::SharedBuffer::getSomeData):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (ResourceHandleClient):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willCacheResponse):
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/mac/ResourceHandleMac.mm:

2012-11-01  Alexey Proskuryakov  <ap@apple.com>

        Fix HAVE(NETWORK_CFDATA_ARRAY_CALLBACK) build
        https://bugs.webkit.org/show_bug.cgi?id=100979

        Reviewed by Joseph Pecoraro.

        * loader/ResourceBuffer.cpp: (WebCore::ResourceBuffer::append):
        * loader/ResourceBuffer.h:
        Added a version of append() that takes CFDataRef, passing it directly to SharedBuffer.

        * loader/mac/ResourceLoaderMac.mm: (WebCore::ResourceLoader::didReceiveDataArray):
        InspectorInstrumentation now takes a length. Unfortunately, we don't have encodedLength
        here, meaning that the results will likely be incorrect.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willCacheResponse): Removed a version that needlessly used deprecated API.
        (WebCore::ResourceHandle::createCFURLConnection): This code assumed that
        HAVE(NETWORK_CFDATA_ARRAY_CALLBACK) and USE(PROTECTION_SPACE_AUTH_CALLBACK) always
        come together. Changed to check for these separately.

2012-11-01  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Add more form validation strings
        https://bugs.webkit.org/show_bug.cgi?id=100978

        Reviewed by Yong Li.

        PR 210072

        Implement these two methods properly.

        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):

2012-11-01  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Move MeshBoxType out of CustomFilterOperation
        https://bugs.webkit.org/show_bug.cgi?id=100782

        Reviewed by Dean Jackson.

        Moved CustomFilter::MeshBoxType enum to the CustomFilterConstants.h file and renamed it to CustomFilterMeshBoxType. 
        This way we can reuse it without including the CustomFilterOperation file.

        No new tests, just refactoring code.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator CustomFilterMeshBoxType):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createCustomFilterOperation):
        * platform/graphics/filters/CustomFilterArrayParameter.h: Adding AnimationUtilities.h for WebCore::blend, looks like
        CustomFilterOperation already included AnimationsUtilities.h indirectly.
        * platform/graphics/filters/CustomFilterConstants.h: Added CustomFilterMeshBoxType.
        * platform/graphics/filters/CustomFilterNumberParameter.h:
        * platform/graphics/filters/CustomFilterOperation.cpp:
        (WebCore::CustomFilterOperation::CustomFilterOperation):
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::create):
        (WebCore::CustomFilterOperation::meshBoxType):
        (CustomFilterOperation):
        * platform/graphics/filters/CustomFilterRenderer.cpp:
        (WebCore::CustomFilterRenderer::create):
        (WebCore::CustomFilterRenderer::CustomFilterRenderer):
        * platform/graphics/filters/CustomFilterRenderer.h: Also removed the need to include CustomFilterOperation.h. Some other
        headers were needed to replace the files that were automatically incldued because of that file.
        (WebCore):
        (CustomFilterRenderer):
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::FECustomFilter):
        (WebCore::FECustomFilter::create):
        * platform/graphics/filters/FECustomFilter.h:
        (FECustomFilter):

2012-11-01  Enrica Casucci  <enrica@apple.com>

        Part2 of: Extend -webkit-user-select with new value "all"
        <rdar://problem/10161404>
        https://bugs.webkit.org/show_bug.cgi?id=91912

        Reviewed by Ryosuke Niwa.

        The new value "all" for -webkit-user-select property gives content none-or-all selection option.
        The patch was originally prepared by Alice Cheng but the approach has been changed.
        The idea is to treat these elements like non editable, meaning that we should skip over them entirely
        when moving the cursor and a deletion should delete the element and all its descentants at once.
        The key change is in Node::rendererIsEditable where we now return false if the element style is
        userSelect: all. The other change is in the way we create the selection on mouse click and dragging
        over the element. In both cases we force the selection to extend over the entire element with
        the user-select: all attribute.
        This is currently enabled only for the Mac port.

        Test: editing/selection/user-select-all-selection.html

        * dom/Node.cpp: Added a parameter to isContentEditable to behave differently
        when called from JavaScript. Internally isContentEditable returns false on
        nodes with user-select: all style.
        (WebCore::Node::isContentEditable):
        (WebCore::Node::isContentRichlyEditable):
        (WebCore::Node::rendererIsEditable):
        (WebCore::Node::shouldUseInputMethod):
        (WebCore::Node::willRespondToMouseClickEvents):
        * dom/Node.h:
        (WebCore::Node::rendererIsEditable):
        (WebCore::Node::rendererIsRichlyEditable):
        * dom/Position.cpp:
        (WebCore::Position::nodeIsUserSelectAll): Added.
        (WebCore::Position::rootUserSelectAllForNode): Added.
        * dom/Position.h: Added static functions described above.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Added parameter to
        isContentEditable() call.
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement): Added parameter to
        isContentEditable() call.
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply): Added parameter to
        isContentEditable() call.
        * editing/FrameSelection.cpp:
        (WebCore::adjustForwardPositionForUserSelectAll): New helper function.
        (WebCore::adjustBackwardPositionForUserSelectAll): New helper function.
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyExtendingLeft):
        (WebCore::FrameSelection::modifyExtendingBackward):
        (WebCore::FrameSelection::modify):
        (WebCore::CaretBase::invalidateCaretRect): Added parameter to
        isContentEditable() call.
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply): Ditto.
        (WebCore::InsertNodeBeforeCommand::doUnapply): Ditto.
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::doApply): Ditto.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): We should not consider a paragraph break and element
        with user-select: all style, like we do at the border of editability.
        (WebCore::endOfParagraph): Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart): Create a selection
        around the element whose style is user-select: all.
        (WebCore::EventHandler::updateSelectionForMouseDrag): Ditto.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionState): Fixed a bug uncovered during this work.
        If the selection starts in one of the leaf boxes and after we encounter one with SelectionNone,
        we should return the selection state as SelectionBoth, assuming we went past the end selection.
        This avoids doing an incorrect gap filling for the selection highlighting.

2012-11-01  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Fix Windows build by re-adding a #include
        https://bugs.webkit.org/show_bug.cgi?id=100986

        Reviewed by Stephen White.

        Fix #include that broke windows.

        * Modules/indexeddb/IDBCallbacks.h:

2012-11-01  David Barton  <dbarton@mathscribe.com>

        REGRESSION (r128837): mathml/presentation/subsup.xhtml became flaky
        https://bugs.webkit.org/show_bug.cgi?id=97390

        Reviewed by Ojan Vafai.

        In a RenderMathMLSubSup, we need to set the base's wrapper's style so that baseHeight
        in layout() will be the base's true height, without any flexbox stretching.

        Tested by existing tests.

        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::fixAnonymousStyles):
        (WebCore::RenderMathMLSubSup::addChild):
        (WebCore::RenderMathMLSubSup::styleDidChange):
        * rendering/mathml/RenderMathMLSubSup.h:
        (RenderMathMLSubSup):

2012-11-01  Antti Koivisto  <antti@apple.com>

        REGRESSION (r132941): attribute modification 10% performance regression
        https://bugs.webkit.org/show_bug.cgi?id=100873

        Reviewed by Ojan Vafai.

        Don't do the class change finding by mutating SpaceSplitString. It is slow. Instead use a bit vector
        to mark the unchanged classes

        * css/StyleResolver.cpp:
        (WebCore):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::hasSelectorForAttribute):
        (WebCore):
        (WebCore::StyleResolver::hasSelectorForClass):
        (WebCore::StyleResolver::hasSelectorForId):
        
            Inlined these and moved value validity testing to clients.

        * dom/Element.cpp:
        (WebCore::checkNeedsStyleInvalidationForIdChange):
        (WebCore):
        (WebCore::Element::attributeChanged):
    
            Clean up id testing too.

        (WebCore::checkNeedsStyleInvalidationForClassChange):
        
            Use bit vector for marking seen values. Avoids allocations and reffing.

        (WebCore::Element::classAttributeChanged):
        
            Don't test if style is already invalid.

2012-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] Crash in Range::editingStartPosition
        https://bugs.webkit.org/show_bug.cgi?id=100972

        Reviewed by Enrica Casucci.

        Add a missing null pointer check. toNormalizedRange() can return null here, in which case the call to
        pastLastNode() will crash.

        No new tests since determining the exact condition under which we go through the said code path and
        toNormalRange returns null is hard.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontForSelection):

2012-11-01  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=100917
        There should be a way to dump the scrolling tree from the layout tests

        Reviewed by Simon Fraser.

        New Internals call to dump the scrolling state tree as text. Calls through to the 
        ScrollingCoordinator.
        * testing/Internals.cpp:
        (WebCore::Internals::scrollingStateTreeAsText):
        (WebCore):
        * testing/Internals.h:
        * testing/Internals.idl:
        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::scrollingStateTreeAsText):
        (WebCore):
        * page/Page.h:
        (Page):

        ScrollingCoordinator tells the rootStateNode to dump the tree as text.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scrollingStateTreeAsText):
        (WebCore):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollingStateTreeAsText):
        (WebCore):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):

        dumpNode() dumps generic stuff for each node, and dumpProperties will dump the 
        properties that are specific to different types of nodes.
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::writeIndent):
        (WebCore):
        (WebCore::ScrollingStateNode::dumpNode):
        (WebCore::ScrollingStateNode::scrollingStateTreeAsText):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore):
        (ScrollingStateNode):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        (WebCore):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (ScrollingStateScrollingNode):

2012-11-01  Kenneth Russell  <kbr@google.com>

        Add RGB to supported destination formats of ImageBuffer::copyToPlatformTexture
        https://bugs.webkit.org/show_bug.cgi?id=100971

        Reviewed by Stephen White.

        The ImageBuffer::copyToPlatformTexture restriction added in
        r132965 was too restrictive. Allow RGB textures to prevent
        performance regressions.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::texImage2D):
        * platform/graphics/ImageBuffer.h:
        (ImageBuffer):

2012-11-01  Michael Matovsky  <mmatovsky@rim.com>

        [BlackBerry] Web page view state should be preserved for pages loaded from page cache
        https://bugs.webkit.org/show_bug.cgi?id=100694
        Internal PR: 220488

        Internally reviewed by Lianghui Chen, Joe Mason
        Reviewed by Rob Buis.

        The web page view specific metadata should be preserved for web pages loaded from page cache (by using back/forward).
        This requires web page view state to be saved in and restored from the corresponding page cache history item.

        No new tests for platform specific internal change.

        * history/blackberry/HistoryItemViewState.h:
        (HistoryItemViewState):

2012-11-01  Alec Flett  <alecflett@chromium.org>

        IndexedDB: add methods to support id-based backend APIs
        https://bugs.webkit.org/show_bug.cgi?id=100425

        Reviewed by Tony Chang.

        First half of refactor involves adding a number of methods that
        are int64_t-based rather than String-based. As a part of this, the
        IDB*Metadata structs and the backend objectStore/index maps all
        use int64_t as keys, rather than String.

        In addition, there were a number of cleanups that came out of the
        refactor:

        - The list of object stores active in a transaction is now
          maintained by the frontend IDBTransaction rather than the backend
          IDBTransactionBackendImpl. This also had a simplifying rippling
          effect through other call signatures.

        - I was able to remove an apparently old FIXME from
          IDBTransactionBackendImpl::objectStore and replace it with an ASSERT.

        - IDBObjectStoreBackendImpl's IndexWriter class got a little
          simpler since the id is now easily available in the
          IDBIndexMetadata.

        - A number of methods got simpler in their int64_t versions,
          specifically dropping a number of ExceptionCodes.

        There is also some glue code
        (getIndexId/getIndexIds/getObjectStoreId) that will go away with
        the 2nd half of this: https://bugs.webkit.org/show_bug.cgi?id=100425

        No new tests, no new functionality as this is just a refactor.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::objectStoreNames):
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::metadata):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::objectStore):
        (WebCore::IDBDatabaseBackendImpl::getObjectStoreId):
        (WebCore):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStoreFromMap):
        (WebCore::IDBDatabaseBackendImpl::addObjectStoreToMap):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::id):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndexBackendInterface.h:
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        (IDBIndexMetadata):
        (IDBObjectStoreMetadata):
        (WebCore::IDBObjectStoreMetadata::containsIndex):
        (IDBDatabaseMetadata):
        (WebCore::IDBDatabaseMetadata::IDBDatabaseMetadata):
        (WebCore::IDBDatabaseMetadata::containsObjectStore):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putWithIndexKeys):
        (WebCore):
        (WebCore::makeIndexWriters):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReady):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReadyInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::index):
        (WebCore::IDBObjectStoreBackendImpl::getIndexId):
        (WebCore::IDBObjectStoreBackendImpl::getIndexIds):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::removeIndexFromMap):
        (WebCore::IDBObjectStoreBackendImpl::addIndexToMap):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::objectStore):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::objectStore):
        (WebCore):
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

2012-11-01  Adam Barth  <abarth@webkit.org>

        [V8] The DOMWrapperVisitor abstraction is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=100965

        Reviewed by Kentaro Hara.

        This patch removes the DOMWrapperVisitor interface because it is no
        longer needed. As a consequence, DOMWrapperMaps no longer need to
        support enumeration, and we can move more DOM objects to use the faster
        intrusive wrappers.

        There was one remaining user of DOMWrapperVisitor in the
        ScriptProfiler, which I've moved over to enumerating objects directly
        from V8, similar to a function above it in the same file.

        * bindings/v8/DOMWrapperMap.h:
        (WebCore):
        (DOMWrapperMap):
        * bindings/v8/IntrusiveDOMWrapperMap.h:
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitNodeWrappers):
        (WebCore::ScriptProfiler::visitExternalArrays):

2012-11-01  Mike West  <mkwst@chromium.org>

        CSP 1.0: Warn when old-style directives encountered.
        https://bugs.webkit.org/show_bug.cgi?id=100883

        Reviewed by Adam Barth.

        In Mozilla's pre-W3C-spec implementation, a few directives are
        implemented that were either renamed, reworked, or removed from CSP 1.0.
        This patch adds special warning messages for three of those directives
        to set developer expectations correctly.

        Test: http/tests/security/contentSecurityPolicy/source-list-parsing-deprecated.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::parseDirective):
        (WebCore::CSPDirectiveList::addDirective):
        (WebCore::ContentSecurityPolicy::reportUnsupportedDirective):
        * page/ContentSecurityPolicy.h:
            Rename 'reportUnrecognizedDirectives' to
            'reportUnsupportedDirectives', and teach it to give more descriptive
            error messages when encountering 'allow', 'options', and
            'policy-uri'.

2012-11-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Update CodeMirror to v3
        https://bugs.webkit.org/show_bug.cgi?id=99319

        Reviewed by Vsevolod Vlasov.

        Updated to ToT v3.

        * inspector/front-end/CodeMirrorTextEditor.js:
        (WebInspector.CodeMirrorTextEditor):
        (WebInspector.CodeMirrorTextEditor.prototype._gutterClick):
        (WebInspector.CodeMirrorTextEditor.prototype.addBreakpoint):
        (WebInspector.CodeMirrorTextEditor.prototype.removeBreakpoint):
        (WebInspector.CodeMirrorTextEditor.prototype.setExecutionLine):
        (WebInspector.CodeMirrorTextEditor.prototype.clearExecutionLine):
        (WebInspector.CodeMirrorTextEditor.prototype.highlightLine):
        (WebInspector.CodeMirrorTextEditor.prototype.clearLineHighlight):
        (WebInspector.CodeMirrorTextEditor.prototype._change):
        * inspector/front-end/cm/cmdevtools.css:
        (.CodeMirror):
        (.CodeMirror-linenumber):
        (.cm-breakpoint):
        * inspector/front-end/cm/codemirror.css:
        (.CodeMirror):
        (.CodeMirror-scroll):
        (.CodeMirror-lines):
        (.CodeMirror pre):
        (.CodeMirror-scrollbar-filler):
        (.CodeMirror-gutters):
        (.CodeMirror-linenumbers):
        (.CodeMirror-linenumber):
        (.CodeMirror pre.CodeMirror-cursor):
        (.CodeMirror pre.CodeMirror-secondarycursor):
        (.cm-keymap-fat-cursor pre.CodeMirror-cursor):
        (.cm-keymap-fat-cursor pre.CodeMirror-cursor:not(#nonsense_id)):
        (.CodeMirror pre.CodeMirror-cursor.CodeMirror-overwrite):
        (.cm-s-default .cm-keyword):
        (.cm-s-default .cm-atom):
        (.cm-s-default .cm-number):
        (.cm-s-default .cm-def):
        (.cm-s-default .cm-variable):
        (.cm-s-default .cm-variable-2):
        (.cm-s-default .cm-variable-3):
        (.cm-s-default .cm-property):
        (.cm-s-default .cm-operator):
        (.cm-s-default .cm-comment):
        (.cm-s-default .cm-string):
        (.cm-s-default .cm-string-2):
        (.cm-s-default .cm-meta):
        (.cm-s-default .cm-error):
        (.cm-s-default .cm-qualifier):
        (.cm-s-default .cm-builtin):
        (.cm-s-default .cm-bracket):
        (.cm-s-default .cm-tag):
        (.cm-s-default .cm-attribute):
        (.cm-s-default .cm-header):
        (.cm-s-default .cm-quote):
        (.cm-s-default .cm-hr):
        (.cm-s-default .cm-link):
        (.cm-header, .cm-strong):
        (.cm-em):
        (.cm-emstrong):
        (.cm-link):
        (.cm-invalidchar):
        (div.CodeMirror span.CodeMirror-matchingbracket):
        (div.CodeMirror span.CodeMirror-nonmatchingbracket):
        (.CodeMirror-sizer):
        (.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler):
        (.CodeMirror-vscrollbar):
        (.CodeMirror-hscrollbar):
        (.CodeMirror-gutter):
        (.CodeMirror-gutter-elt):
        (.CodeMirror-linebackground):
        (.CodeMirror-linewidget):
        (.CodeMirror-measure):
        (.CodeMirror-measure pre):
        (.CodeMirror-selected):
        (.CodeMirror-focused .CodeMirror-selected):
        (.CodeMirror span):
        * inspector/front-end/cm/codemirror.js:
        (window.CodeMirror.):
        (window.CodeMirror):
        * inspector/front-end/utilities.js:

2012-11-01  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        RIM PR 235194.

        Check img pointer is null, if so, do early return.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::drawControl):
        (WebCore::drawThreeSlice):
        (WebCore::drawNineSlice):

2012-11-01  Adam Barth  <abarth@webkit.org>

        [V8] The V8DOMMap visitors are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=100963

        Reviewed by Kentaro Hara.

        This patch inlines visitAllDOMNodes into its one caller (and removes
        one layer of visitor adaptor abstraction).

        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitNodeWrappers):
        * bindings/v8/V8DOMMap.cpp:
        * bindings/v8/V8DOMMap.h:
        (WebCore):

2012-11-01  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update BB10 form theme.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        RIM PR 235194.

        Check img pointer is null, if so, do early return.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::drawControl):
        (WebCore::drawThreeSlice):
        (WebCore::drawNineSlice):

2012-11-01  Adam Barth  <abarth@webkit.org>

        Unreviewed. Build fix.

        * bindings/v8/V8GCController.cpp:

2012-11-01  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add Ewk_Auth_Request API
        https://bugs.webkit.org/show_bug.cgi?id=100858

        Reviewed by Kenneth Rohde Christiansen.

        Provide an AuthenticationClient for EFL port in WebCore so
        that we can handle authentication similarly to other ports
        of WebKit.

        No new tests, no behavior change for layout tests.

        * PlatformEfl.cmake: Add AuthenticationChallengeSoup.cpp to CMake.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        * platform/network/ResourceHandle.h:
        (ResourceHandle): Have ResourceHandle subclass AuthenticationClient like
        most of the other ports.
        * platform/network/soup/AuthenticationChallengeSoup.cpp: Fix initialization
        of previousFailureCount member. It should be 1 if we are retrying
        authentication and 0 otherwise, not the opposite.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/soup/ResourceHandleSoup.cpp: Provide implementation for EFL
        port of AuthenticationClient methods.
        (WebCore::WebCoreSynchronousLoader::didReceiveAuthenticationChallenge):
        (WebCoreSynchronousLoader):
        (WebCore):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        (WebCore::authenticateCallback):
        (WebCore::ResourceHandle::defaultSession):

2012-10-24  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        WebIconDatabase: Properly clean up on destruction
        https://bugs.webkit.org/show_bug.cgi?id=100237

        Reviewed by Brady Eidson.

        It's now possible that the IconDatabase gets destroyed since WebKit2
        isn't using it as a singleton.

        Check that the database was properly closed rather than asserting that
        it won't get deleted.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::~IconDatabase):

2012-11-01  Alexei Filippov  <alph@chromium.org>

        Web Inspector: make component subitems use parent color in native memory snapshots.
        https://bugs.webkit.org/show_bug.cgi?id=100876

        A component subitems use the color of the component itself if the color
        is not explicitly specified for the subitem.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotNode.prototype._createSizeCell):
        (WebInspector.MemoryBlockViewProperties._initialize):
        (WebInspector.MemoryBlockViewProperties._forMemoryBlock):

2012-11-01  Emil A Eklund  <eae@chromium.org>

        [subpixel] Change intrinsicSize to LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=99104

        Reviewed by Levi Weintraub.

        Change RenderReplaced and intrinsicSize to LayoutUnit to avoid
        rounding problems when zooming/scaling. Also change imageSize to
        LayoutUnit as it can return a scaled size.

        Test: fast/sub-pixel/tiled-canvas-elements.html

        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::finish):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * loader/cache/CachedImage.h:
        (CachedImage):
        * platform/graphics/FractionalLayoutSize.h:
        (FractionalLayoutSize):
        (WebCore::FractionalLayoutSize::scale):
        (WebCore::FractionalLayoutSize::clampToMinimumSize):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::intrinsicSize):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::canvasSizeChanged):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::updateIntrinsicSizeIfNeeded):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::minimumReplacedHeight):
        * rendering/RenderImage.h:
        (RenderImage):
        * rendering/RenderImageResource.h:
        (WebCore::RenderImageResource::imageSize):
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        (WebCore::RenderReplaced::computeAspectRatioInformationForRenderBox):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        * rendering/RenderReplaced.h:
        (RenderReplaced):
        (WebCore::RenderReplaced::minimumReplacedHeight):
        (WebCore::RenderReplaced::setIntrinsicSize):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updateIntrinsicSize):
        (WebCore::RenderVideo::calculateIntrinsicSize):
        (WebCore::RenderVideo::videoBox):
        (WebCore::RenderVideo::minimumReplacedHeight):
        * rendering/RenderVideo.h:
        (RenderVideo):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::imageSize):
        * rendering/style/StyleCachedImage.h:
        (StyleCachedImage):
        * rendering/style/StyleCachedImageSet.cpp:
        (WebCore::StyleCachedImageSet::imageSize):
        * rendering/style/StyleCachedImageSet.h:
        (StyleCachedImageSet):
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::imageSize):
        (WebCore::StyleGeneratedImage::computeIntrinsicDimensions):
        * rendering/style/StyleGeneratedImage.h:
        (StyleGeneratedImage):
        * rendering/style/StyleImage.h:
        (StyleImage):
        * rendering/style/StylePendingImage.h:

2012-11-01  Adam Barth  <abarth@webkit.org>

        [V8] Unify the V8GCController visitors
        https://bugs.webkit.org/show_bug.cgi?id=100897

        Reviewed by Eric Seidel.

        After this patch, we use a single visitor for all DOM wrappers,
        regardless of type. We also visit all the wrappers in one pass by
        calling v8::V8::VisitHandlesWithClassIds directly rather than via
        visitAllDOMNodes.

        This patch also introduces a wrapper class ID for non-Node DOM objects.
        Previously, only DOM nodes had a class ID.

        * bindings/v8/IntrusiveDOMWrapperMap.h:
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::retainedDOMInfo):
        (WebCore::ScriptProfiler::initialize):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::visitAllDOMNodes):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        * bindings/v8/V8GCController.cpp:
        (WebCore::GCHandleVisitor::notifyFinished):
        (GCHandleVisitor):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):

2012-11-01  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r133143.
        http://trac.webkit.org/changeset/133143
        https://bugs.webkit.org/show_bug.cgi?id=96894

        Causing content_browsertests failures

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientationClient.h:
        (DeviceOrientationClient):
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore):
        (WebCore::DeviceOrientationController::~DeviceOrientationController):
        (WebCore::DeviceOrientationController::timerFired):
        (WebCore::DeviceOrientationController::addListener):
        (WebCore::DeviceOrientationController::removeListener):
        (WebCore::DeviceOrientationController::removeAllListeners):
        (WebCore::DeviceOrientationController::suspendEventsForAllListeners):
        (WebCore::DeviceOrientationController::resumeEventsForAllListeners):
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        (WebCore::DeviceOrientationController::supplementName):
        * dom/DeviceOrientationController.h:
        (WebCore):
        (DeviceOrientationController):
        (WebCore::DeviceOrientationController::isActive):
        (WebCore::DeviceOrientationController::client):
        (WebCore::DeviceOrientationController::from):
        * dom/Document.cpp:
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        * loader/EmptyClients.h:
        (WebCore::EmptyDeviceOrientationClient::startUpdating):
        (WebCore::EmptyDeviceOrientationClient::stopUpdating):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DeviceClient.h: Removed.
        * page/DeviceController.cpp: Removed.
        * page/DeviceController.h: Removed.

2012-11-01  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][AC]Free GL resources allocated by GraphicsContext3DEfl.
        https://bugs.webkit.org/show_bug.cgi?id=100923.

        Reviewed by Kenneth Rohde Christiansen.

        GraphicsContext3DEfl creates FBO's, textures and render buffer's, but doesn't free them.
        This patch makes sure that GraphicsContext3dEfl frees all the GL resources allocated by it.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):

2012-11-01  Andreas Kling  <kling@webkit.org>

        Fix StylePropertySet/ElementAttributeData custom allocation in debug builds.
        <http://webkit.org/b/100753>

        Unreviewed debug bot crash fix after r133138.

        There's additional padding after StylePropertySet and ElementAttributeData
        in 64-bit debug builds since there are additional members in RefCountedBase.
        Use 'sizeof(ImmutableFoo) - sizeof(void*)' as the base size of ImmutableFoo.

        * css/StylePropertySet.cpp:
        (WebCore::sizeForImmutableStylePropertySetWithPropertyCount):
        * dom/ElementAttributeData.cpp:
        (WebCore::sizeForImmutableElementAttributeDataWithAttributeCount):
        (WebCore::ElementAttributeData::createImmutable):
        (WebCore::ElementAttributeData::reportMemoryUsage):

2012-11-01  Stephen Chenney  <schenney@chromium.org>

        FEImage::m_document is never cleared. Why not?
        https://bugs.webkit.org/show_bug.cgi?id=99243

        Reviewed by Dirk Schulze.

        Adding a comment to explain why the failure to clear m_document is not a problem.

        No new tests because no code change at all.

        * svg/graphics/filters/SVGFEImage.h:
        (FEImage): Add a comment on the lifetime of m_document.

2012-11-01  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: make "addRecord" unambiguous
        https://bugs.webkit.org/show_bug.cgi?id=100761

        Reviewed by Pavel Feldman.

        TimelinePresentationModel.addRecord accepts two parameters:
        record and parentRecord. parentRecord is always root record.
        Make this explicit by removing parentRecord parameter.

        * inspector/front-end/TimelinePanel.js: Removed parameter.
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel.prototype.addRecord):
        Used root recoed instead of parent record.

2012-11-01  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Browser prematurely sends wrong credentials
        https://bugs.webkit.org/show_bug.cgi?id=100585

        Reviewed by George Staikos.

        Don't send credentials to the server before been challenged.

        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):

2012-11-01  Stephen Chenney  <schenney@chromium.org>

        SVG as an image may recreate the renderer on zoom
        https://bugs.webkit.org/show_bug.cgi?id=99508

        Reviewed by Abhishek Arya.

        The SVGImage code, when SVG is used in <img> tags, caches the renderer
        at the start of the painting method and re-uses the pointer at the end
        of the method. However, when the page is zoomed the renderer may be
        detached mid-method, thus leaving a stray pointer. The fix is to
        re-fetch the pointer after the zooms.

        Test: svg/as-image/img-zoom-svg-stylesheet.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawSVGToImageBuffer): Re-fetch the renderer after
        the zoom operations.

2012-11-01  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce Inspector.detached message containing termination cause.
        https://bugs.webkit.org/show_bug.cgi?id=100948

        Reviewed by Yury Semikhatsky.

        Now protocol clients have more information to process connection termination.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (WebInspector.RemoteDebuggingTerminatedScreen):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded.WebInspector.socket.onopen):
        (WebInspector.loaded):
        (WebInspector.detached):

2012-11-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Restoring breakpoints for formatted UISourceCode should be triggered by BreakpointManager, not ScriptsPanel.
        https://bugs.webkit.org/show_bug.cgi?id=100593

        Reviewed by Pavel Feldman.

        BreakpointManager now listen for FormattedChanged event and restores formatted breakpoints on it.
        Removed now redundant callback from UISourceCode.setFormatted().

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._restoreBreakpoints):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeAdded):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeFormatted):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeRemoved):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addUISourceCode):
        (WebInspector.ScriptsPanel.prototype._revealExecutionLine):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSource):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype._fireContentAvailable):
        (WebInspector.UISourceCode.prototype.setFormatted.formattedChanged):
        (WebInspector.UISourceCode.prototype.setFormatted.didGetContent):
        (WebInspector.UISourceCode.prototype.setFormatted):

2012-10-30  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: Output code evaluated in the console the same as console.log
        https://bugs.webkit.org/show_bug.cgi?id=100695

        Reviewed by Pavel Feldman.

        Added an option to return object preview from evaluation commands in the protocol.
        The option is used to generate preview for console eval results.

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::callFunctionOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.useArrayPreviewInFormatter):
        (WebInspector.ConsoleMessageImpl.prototype._formatParameterAsArray):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleCommandResult.prototype.useArrayPreviewInFormatter):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.evaluateOnSelectedCallFrame):
        (WebInspector.DebuggerModel.CallFrame.prototype.evaluate):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.evaluate):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype._resolveObjectForPopover):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.):
        (WebInspector.RemoteObject.prototype.callFunction):
        (WebInspector.RemoteObject.prototype.callFunctionJSON):
        * inspector/front-end/RuntimeModel.js:
        (WebInspector.RuntimeModel.prototype.evaluate):
        (WebInspector.RuntimeModel.prototype.evaluated):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):

2012-11-01  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Remove obsolete code from JavaScriptSourceFrame
        https://bugs.webkit.org/show_bug.cgi?id=100594

        Reviewed by Yury Semikhatsky.

        Removed obsolete WorkingCopyCommitted listener.
        Removed redundant code that removes breakpoints from _innerSetContent.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype._innerSetContent):

2012-11-01  Andreas Kling  <kling@webkit.org>

        Update average StylePropertySet size estimation.
        <http://webkit.org/b/100940>

        Reviewed by Antti Koivisto.

        Use sizeForImmutableStylePropertySetWithPropertyCount(2) as the average StylePropertySet
        size to keep it in sync with the changed object memory layout.

        * css/StylePropertySet.cpp:
        (WebCore::sizeForImmutableStylePropertySetWithPropertyCount):
        (WebCore::StylePropertySet::createImmutable):
        (WebCore::StylePropertySet::averageSizeInBytes):
        (WebCore::StylePropertySet::reportMemoryUsage):


2012-11-01  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][Qt][AC] Remove an unnecessary connection to X-Server.
        https://bugs.webkit.org/show_bug.cgi?id=100628.

        Reviewed by Kenneth Rohde Christiansen.

        With Changset: https://bugs.webkit.org/show_bug.cgi?id=100523
        GraphicsSurfacePrivate should always use the Display returned by offscreenwindow.
        However, in GraphicsSurfacePrivate constructor we call XOpenDisplay before asking
        display from offscreenwindow.
        This patch removes unnecessary call to XOpenDisplay made in GraphicsSurfacePrivate.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):

2012-11-01  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Former auto-height regions should not ignore their defined height
        https://bugs.webkit.org/show_bug.cgi?id=100749

        Reviewed by Julien Chaffraix.

        When a region with height auto has its height defined, we should also clear the override logical content height.
        Otherwise, the region will use the wrong height when laying out content from the associated render flow thread.

        Test: fast/regions/autoheight-definedheight-changenotdetected.html

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::updateRegionHasAutoLogicalHeightFlag):

2012-11-01  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: do not report memory occupied by RenderObjects referenced from CSSImageGeneratorValue
        https://bugs.webkit.org/show_bug.cgi?id=100934

        Reviewed by Alexander Pavlov.

        * css/CSSImageGeneratorValue.cpp:
        (WTF): Skip rederences to RenderObjects from CSSImageGeneratorValue when collecting
        memory usage data.

2012-11-01  Kihong Kwon  <kihong.kwon@samsung.com>

        Add DeviceController base-class to remove duplication of DeviceXXXControler
        https://bugs.webkit.org/show_bug.cgi?id=96894

        Reviewed by Hajime Morita.

        Add DeviceController which is extracted from DeviceOrientationController to remove duplication.
        And soon-to-be-added DeviceMotionController and ProximityController.

        Covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientationClient.h:
        * dom/DeviceOrientationController.cpp:
        Remove member functions to move to DeviceController.
        - addListener(), removeListener(), removeAllListeners(), isActive()
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        (WebCore::DeviceOrientationController::client):
        (WebCore::DeviceOrientationController::hasLastData):
        (WebCore::DeviceOrientationController::getLastEvent):
        (WebCore::DeviceOrientationController::from):
        (WebCore):
        * dom/DeviceOrientationController.h:
        (WebCore):
        (WebCore::DeviceOrientationController::~DeviceOrientationController):
        (DeviceOrientationController):
        * dom/Document.cpp:
        Remove suspendEventsForAllListeners() and resumeEventsForAllListeners() function calls.
        These calls can be made by checking activeDOMObjectsAreSuspended() and activeDOMObjectsAreStopped() before dispatchEvent.
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        * loader/EmptyClients.h:
        (EmptyDeviceClient):
        (WebCore::EmptyDeviceClient::startUpdating):
        (WebCore::EmptyDeviceClient::stopUpdating):
        (WebCore):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DeviceClient.h: Added.
        (WebCore):
        (DeviceClient):
        (WebCore::DeviceClient::~DeviceClient):
        * page/DeviceController.cpp: Added.
        DeviceController has extracted functions from DeviceOrientationController and DeviceMotionController.
        - addDeviceEventListener(), removeDeviceEventlistener(), removeAllDeviceEventListeners(), dispatchDeviceEvent()
        All kind of device event controller which has DeviceClient can be inherited from DeviceController.
        (WebCore):
        (WebCore::DeviceController::DeviceController):
        (WebCore::DeviceController::addDeviceEventListener):
        (WebCore::DeviceController::removeDeviceEventListener):
        (WebCore::DeviceController::removeAllDeviceEventListeners):
        (WebCore::DeviceController::dispatchDeviceEvent):
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h: Added.
        (WebCore):
        (DeviceController):
        (WebCore::DeviceController::~DeviceController):
        (WebCore::DeviceController::isActive):
        (WebCore::DeviceController::client):
        (WebCore::DeviceController::hasLastData):
        (WebCore::DeviceController::getLastEvent):

2012-11-01  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: report memory occupied by ResourceRequest instead of its base ResourceRequestBase
        https://bugs.webkit.org/show_bug.cgi?id=100497

        Reviewed by Alexander Pavlov.

        Added memory reporting method to chromium implementation of ResourceRequest.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::reportMemoryUsageBase): Renamed reportMemoryUsage
        on ResourceRequestBase to reportMemoryUsageBase and made it protected. I'd
        rather make ResourceRequestBase::reportMemoryUsage virtual and override it
        in the descendant but ResourceRequestBase doesn't have any virtual methods
        and shouldn't be used directly(ResourceRequest should be used instead).
        * platform/network/ResourceRequestBase.h:
        (ResourceRequestBase):
        * platform/network/chromium/ResourceRequest.cpp:
        (WebCore::ResourceRequest::reportMemoryUsage):
        (WebCore):
        * platform/network/chromium/ResourceRequest.h:
        (ResourceRequest):

2012-11-01  Andreas Kling  <kling@webkit.org>

        Pack immutable StylePropertySets harder on 64-bit.
        <http://webkit.org/b/100753>
        <rdar://problem/12599155>

        Reviewed by Antti Koivisto.

        Move away from using CSSProperty as internal storage for immutable StylePropertySets.
        Instead use two arrays, one for property metadata (ID, shorthand ID, !important, ...)
        and one for the CSSValue pointers. This saves 4 bytes per property on 64-bit.

        Old object layout:

            Ref count                   (4 bytes)
            Metadata                    (4 bytes)
            CSSProperty [N]             (16 bytes each)

        New object layout:

            Ref count                   (4 bytes)
            Metadata                    (4 bytes)
            CSSValue* [N]               (8 bytes each)
            StylePropertyMetadata [N]   (4 bytes each)

        901kB progress on Membuster3 (22% overall reduction in StylePropertySet memory.)

        The CSSProperty class sticks around for now, it's still used in mutable StylePropertySets
        and by the StylePropertySet constructors.

        * css/CSSProperty.cpp:
        * css/CSSProperty.h:
        (CSSProperty):
        (WebCore::CSSProperty::CSSProperty):
        (WebCore::CSSProperty::id):
        (WebCore::CSSProperty::shorthandID):
        (WebCore::CSSProperty::isImportant):
        (WebCore::CSSProperty::metadata):

            Break the bitfield from CSSProperty out into a StylePropertyMetadata class (actually a union.)

        * css/StylePropertySet.cpp:
        (WebCore::immutableStylePropertySetSize):

            Updated size calculation for immutable StylePropertySets, 1/4 smaller!

        (WebCore::ImmutableStylePropertySet::ImmutableStylePropertySet):
        (WebCore::ImmutableStylePropertySet::~ImmutableStylePropertySet):
        (WebCore::MutableStylePropertySet::MutableStylePropertySet):
        (WebCore::StylePropertySet::mergeAndOverrideOnConflict):
        (WebCore::StylePropertySet::reportMemoryUsage):
        (WebCore::StylePropertySet::PropertyReference::cssName):
        (WebCore::StylePropertySet::PropertyReference::cssText):
        * css/StylePropertySet.h:
        (WebCore::StylePropertySet::PropertyReference::id):
        (WebCore::StylePropertySet::PropertyReference::shorthandID):
        (WebCore::StylePropertySet::PropertyReference::isImportant):
        (WebCore::StylePropertySet::PropertyReference::isInherited):
        (WebCore::StylePropertySet::PropertyReference::isImplicit):
        (PropertyReference):
        (WebCore::StylePropertySet::PropertyReference::value):
        (WebCore::StylePropertySet::PropertyReference::toCSSProperty):
        (WebCore::StylePropertySet::PropertyReference::propertyMetadata):
        (WebCore::StylePropertySet::PropertyReference::propertyValue):
        (StylePropertySet):
        (ImmutableStylePropertySet):
        (WebCore::StylePropertySet::immutableValueArray):
        (WebCore::StylePropertySet::immutableMetadataArray):

            Refactored internal storage for StylePropertySet.

2012-11-01  Kent Tamura  <tkent@chromium.org>

        Remove unused Locale::parseDateTime
        https://bugs.webkit.org/show_bug.cgi?id=100910

        Reviewed by Kentaro Hara.

        For date/time input types, InputType::convertFromVisibleValue is never
        called. convertFromVisibleValue is called when an inner editable node is
        updated. However input elements don't have such editable nodes if
        ENABLE_INPUT_MULTIPLE_FIELDS_UI is enabled, and a user can't edit the
        inner editable node otherwise because we open date/time pickers when a
        user try to change the field value.

        We had used convertFromVisibleValue for input[type=date] with an old UI.

        No new tests because of no behavior changes.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::convertFromVisibleValue):
        Remove Locale::parseDateTiem and put ASSERT_NOT_REACHED.

        * platform/text/PlatformLocale.h: Remove parseDateTime.

        * platform/text/LocaleICU.h: Remove parseDateTime and a bogus comment.
        * platform/text/LocaleICU.cpp: Remove parseDateTime.

        * platform/text/LocaleNone.cpp: Remove parseDateTime.

        * platform/text/mac/LocaleMac.h: Remove parseDateTime.
        * platform/text/mac/LocaleMac.mm: Ditto.
        * platform/text/win/LocaleWin.h:
        - Remove parseDateTime, its helpers, and m_baseYear.
        - Remove appendNumber, appendTwoDigitsNumber, appendFourDigitsNumber,
          and formatDate. They don't exist.
        * platform/text/win/LocaleWin.cpp:
        Remove the above functions.
        (WebCore::LocaleWin::LocaleWin): Remove m_baseYear iniitalization.

2012-10-31  Nate Chapin  <japhet@chromium.org>

        Remove some CachedResource::Status's in favor of looking at CachedResource::m_error
        https://bugs.webkit.org/show_bug.cgi?id=100901

        Reviewed by Adam Barth.

        No new tests, refactor only.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::notifyFinished):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::stopLoading):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::wasCanceled):
        (WebCore::CachedResource::errorOccurred):
        (WebCore::CachedResource::loadFailedOrCanceled):

2012-10-31  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r133122.
        http://trac.webkit.org/changeset/133122
        https://bugs.webkit.org/show_bug.cgi?id=99083

        Broke Chromium Win, Android, ChromeOS builds

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsOpaque):
        (WebCore::GraphicsLayerChromium::paint):
        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp:
        (WebCore::OpaqueRectTrackingContentLayerDelegate::paintContents):
        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h:
        (OpaqueRectTrackingContentLayerDelegate):

2012-10-31  Takashi Sakamoto  <tasak@google.com>

        [Refactoring] Move initial style setting for ProgressValueElement from attach method to createShadowSubtree method in HTMLProgressElement.
        https://bugs.webkit.org/show_bug.cgi?id=83664

        Reviewed by Hajime Morita.

        The original code updates inline style during attach(). However,
        the attach would be invoked from Element::recalcStyle()'s reattach().
        If updating inline styles during the reattach(), style related flags,
        i.e. childNeedsStyleRecalc, and needsStyleRecalc are cleared after the
        reattach(). So the inline styles are not updated in next
        setNeedsStyleRecalc, because ProgressValueElement has already had
        InlineStyleChange (existingChanegType == InlineStyleChange) and
        markAncestorsWithChildNeedsStyleRecalc is not invoked.

        Test: fast/dom/HTMLProgressElement/progress-bar-set-value.html

        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::attach):
        Copied updateFromElement from didElementStateChange. If removing the
        update, indeterminate-progress-001.html and progress-element.html
        under fast/dom/HTMLProgressElement will fail. We still need attach()
        and updateFromElement. To remove the attach(), need more refactoring,
        i.e. investigating where attach() is invoked from and modifying all
        related codes.
        (WebCore::HTMLProgressElement::createShadowSubtree):
        Initialize m_value by indeterminate-position. The value is default
        value of progress element.

2012-10-31  Hayato Ito  <hayato@chromium.org>

        Make resolveReprojection() defined in ComposedShadowTreeWalker.cpp callable from outside.
        https://bugs.webkit.org/show_bug.cgi?id=100832

        Reviewed by Dimitri Glazkov.

        InsertionPoint.h now defines resolveReprojection() so that it can be called from outside.

        No new tests as no new functionality.

        * dom/ComposedShadowTreeWalker.cpp:
        * html/shadow/InsertionPoint.h:
        (WebCore::shadowOfParentForDistribution):
        (WebCore):
        (WebCore::resolveReprojection):

2012-10-31  Alok Priyadarshi  <alokp@chromium.org>

        [chromium] Pass canPaintLCDText to WebContentLayerClient::paintContents
        https://bugs.webkit.org/show_bug.cgi?id=99083

        Reviewed by James Robinson.

        Use LCD text setting passed to WebContentLayerClient::paintContents instead of turning it off for all composited layers.

        No new tests needed. This patch does not change anything functionally.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsOpaque):
        (WebCore::GraphicsLayerChromium::paint):
        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.cpp:
        (WebCore::OpaqueRectTrackingContentLayerDelegate::paintContents):
        * platform/graphics/chromium/OpaqueRectTrackingContentLayerDelegate.h:
        (OpaqueRectTrackingContentLayerDelegate):

2012-10-31  Chris Evans  <cevans@google.com>

        RenderArena has a memory leak and poor efficiency
        https://bugs.webkit.org/show_bug.cgi?id=100893

        Reviewed by Eric Seidel.

        1) Avoid memory leak that persists for the Document lifetime by
        increasing recycled size buckets up to 1024. It was previously 400,
        and sizeof(RenderNamedFlowThread) / sizeof(RenderSVGText) both blew this
        quota. An assert was added to prevent this happening again.

        2) Fix the size of the recyled size bucket array on 64-bit. We only
        need 8 byte granularity on 64-bit, but we had 4.

        3) Try and pass power-of-two sizes to the underlying malloc() call, so
        that we're space efficient. We now take Arena metadata into account.

        4) Double the default RenderArena size allocation to 8192 bytes. Even
        for a render of a trivial text file, 4096 bytes is not enough to prevent
        extra calls into the underlying malloc() for more arena pool.

        * rendering/RenderArena.cpp:
        (WebCore::RenderArena::RenderArena): Adjust arena size so that we pass on the page-sized multiple to the underlying malloc() implementation.
        (WebCore::RenderArena::allocate):
        (WebCore::RenderArena::free): Assert that the allocation size is handled by our recycling buckets.
        * rendering/RenderArena.h:
        (WebCore): Maintain free buckets up to 1024 bytes to avoid memory leak.
        (RenderArena): Double the default allocation size and handle 64-bit systems more efficiently.

2012-10-31  Adam Barth  <abarth@webkit.org>

        [V8] Garbage collection should use opaque roots rather than implicit references
        https://bugs.webkit.org/show_bug.cgi?id=100707

        Reviewed by Kentaro Hara.

        This patch replaces visitDOMWrapper with opaqueRootForGC. The
        former used to inform V8 of implicit relationships between wrapper
        objects on a per-wrapper basis. That meant that we needed to know which
        DOMDataStore a given wrapper was in during garbage collection.

        After this patch, we now use object groups rather than implicit
        references to inform V8 of these relationships. That has two benefits:

        1) We no longer need to know which DOMDataStore a wrapper belongs
           because we don't need to find the exact source wrapper for the
           implicit connection.

        2) We can now handle more complicated implicit relationships, for
           example when some of the intervening objects haven't had their
           JavaScript wrappers created yet.

        This patch also unlocks to paths of future development:
        A) Fixing the remaining failures in fast/dom/gc-9.html
        B) Enumerating DOM wrappers entirely from V8 rather than from the
           DOMWrapperMaps (so that we can move more object towards using
           IntrusiveDOMWrapperMaps, which aren't enumerable from WebCore).

        * bindings/scripts/CodeGeneratorV8.pm:
        (NeedsCustomOpaqueRootForGC):
        (GenerateOpaqueRootForGC):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/v8/V8GCController.cpp:
        (ImplicitConnection):
        (WebCore::ImplicitConnection::ImplicitConnection):
        (WebCore::ImplicitConnection::root):
        (WebCore::ImplicitConnection::wrapper):
        (WebCore):
        (WebCore::operator<):
        (WrapperGrouper):
        (WebCore::WrapperGrouper::WrapperGrouper):
        (WebCore::WrapperGrouper::addToGroup):
        (WebCore::WrapperGrouper::keepAlive):
        (WebCore::WrapperGrouper::apply):
        (WebCore::ObjectVisitor::ObjectVisitor):
        (WebCore::ObjectVisitor::visitDOMWrapper):
        (ObjectVisitor):
        (WebCore::V8GCController::opaqueRootForGC):
        (WebCore::NodeVisitor::NodeVisitor):
        (WebCore::NodeVisitor::visitNodeWrapper):
        (NodeVisitor):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (WebCore):
        (V8GCController):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WebCore::WrapperTypeInfo::opaqueRootForGC):
        (WrapperTypeInfo):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::opaqueRootForGC):
        * bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp:
        (WebCore::V8SpeechRecognitionResult::opaqueRootForGC):

2012-10-31  Stephen White  <senorblanco@chromium.org>

        Unreviewed, rolling out r133107.
        http://trac.webkit.org/changeset/133107
        https://bugs.webkit.org/show_bug.cgi?id=100425

        Broke compile on Chromium Win.

        * Modules/indexeddb/IDBCallbacks.h:
        (IDBCallbacks):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::objectStoreNames):
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::metadata):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::objectStore):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStoreFromMap):
        (WebCore::IDBDatabaseBackendImpl::addObjectStoreToMap):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBFactory.cpp:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndexBackendInterface.h:
        * Modules/indexeddb/IDBKeyPath.cpp:
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore):
        (IDBDatabaseMetadata):
        (WebCore::IDBDatabaseMetadata::IDBDatabaseMetadata):
        (IDBObjectStoreMetadata):
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        (IDBIndexMetadata):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putWithIndexKeys):
        (WebCore):
        (WebCore::makeIndexWriters):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReady):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReadyInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::index):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::removeIndexFromMap):
        (WebCore::IDBObjectStoreBackendImpl::addIndexToMap):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::objectStore):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::objectStore):
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/IDBTransactionCoordinator.h:

2012-10-31  Alec Flett  <alecflett@chromium.org>

        IndexedDB: add methods to support id-based backend APIs
        https://bugs.webkit.org/show_bug.cgi?id=100425

        Reviewed by Tony Chang.

        First half of refactor involves adding a number of methods that
        are int64_t-based rather than String-based. As a part of this, the
        IDB*Metadata structs and the backend objectStore/index maps all
        use int64_t as keys, rather than String.

        In addition, there were a number of cleanups that came out of the
        refactor:

        - The list of object stores active in a transaction is now
          maintained by the frontend IDBTransaction rather than the backend
          IDBTransactionBackendImpl. This also had a simplifying rippling
          effect through other call signatures.

        - I was able to remove an apparently old FIXME from
          IDBTransactionBackendImpl::objectStore and replace it with an ASSERT.

        - IDBObjectStoreBackendImpl's IndexWriter class got a little
          simpler since the id is now easily available in the
          IDBIndexMetadata.

        - A number of methods got simpler in their int64_t versions,
          specifically dropping a number of ExceptionCodes.

        There is also some glue code
        (getIndexId/getIndexIds/getObjectStoreId) that will go away with
        the 2nd half of this: https://bugs.webkit.org/show_bug.cgi?id=100425

        No new tests, no new functionality as this is just a refactor.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::objectStoreNames):
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::metadata):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::objectStore):
        (WebCore::IDBDatabaseBackendImpl::getObjectStoreId):
        (WebCore):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStoreFromMap):
        (WebCore::IDBDatabaseBackendImpl::addObjectStoreToMap):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::id):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndexBackendInterface.h:
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        (IDBIndexMetadata):
        (IDBObjectStoreMetadata):
        (WebCore::IDBObjectStoreMetadata::containsIndex):
        (IDBDatabaseMetadata):
        (WebCore::IDBDatabaseMetadata::IDBDatabaseMetadata):
        (WebCore::IDBDatabaseMetadata::containsObjectStore):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putWithIndexKeys):
        (WebCore):
        (WebCore::makeIndexWriters):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReady):
        (WebCore::IDBObjectStoreBackendImpl::setIndexesReadyInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::index):
        (WebCore::IDBObjectStoreBackendImpl::getIndexId):
        (WebCore::IDBObjectStoreBackendImpl::getIndexIds):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::removeIndexFromMap):
        (WebCore::IDBObjectStoreBackendImpl::addIndexToMap):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::objectStore):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::objectStore):
        (WebCore):
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

2012-10-30  Mark Lam  <mark.lam@apple.com>

        A JSC printf (support for %J+s and %b).
        https://bugs.webkit.org/show_bug.cgi?id=100566.

        Reviewed by Michael Saboff.

        Added forwarding header for VMInspector.h.

        No new tests needed for this.

        * ForwardingHeaders/interpreter/VMInspector.h: Added.

2012-10-31  Chris Rogers  <crogers@google.com>

        Implement optional arguments in AudioBufferSourceNode start() method
        https://bugs.webkit.org/show_bug.cgi?id=100894

        Reviewed by Kenneth Russell.

        The start() method should be able to take 1, 2, or 3 arguments, optionally supporting
        offset and duration.  Currently, only 1 and 3 arguments are supported.

        Test: webaudio/audiobuffersource-start.html

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::renderFromBuffer):
        (WebCore::AudioBufferSourceNode::startGrain):
        (WebCore):
        * Modules/webaudio/AudioBufferSourceNode.h:
        (AudioBufferSourceNode):
        * Modules/webaudio/AudioBufferSourceNode.idl:

2012-10-31  Mike West  <mkwst@chromium.org>

        Implement the canonical "Content-Security-Policy" header.
        https://bugs.webkit.org/show_bug.cgi?id=96765

        Reviewed by Adam Barth.

        The CSP 1.0 specification defines the "Content-Security-Policy" header
        as the canonical mechanism of defining a resource's security policy. Up
        through this patch, we've implemented the functionality behind a prefix
        in order to ensure compatibility with the standard once it's released as
        a recommendation. Both the specification and WebKit's implementation are
        far enough along in that process that it makes sense to support the
        unprefixed header for sites that wish to opt-in to CSP 1.0.

        As discussed on public-webappsec[1], we'll keep the experimental 1.1
        features behind the prefixed header ('X-WebKit-CSP') until that standard
        is far enough along to justify moving them out to the canonical header.

        This patch defines the 'Content-Security-Policy' header for all ports,
        just as the 'X-WebKit-CSP' header is currently supported on all ports.
        Ports that have not opted-in to the CSP_NEXT flag will see exactly the
        same behavior with both headers. Ports that have opted-in will see much
        of CSP 1.1's current definition on the prefixed header, and CSP 1.0 on
        the canonical header.

        The functionality in this change is covered by the changes made to
        existing tests. No expectations changed, only the headers that are sent.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
            Add canonical header support to 'meta' element definitions.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
            Add canonical header support to FrameLoader.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::headerType):
            The ContentSecurityPolicy::HeaderType enum now has four values:
            prefixed/report-only, unprefixed/report-only, prefixed/enforce, and
            unprefixed/enforce. Instead of creating logic to output the proper
            type based on internal flags, CSPDirectiveList now saves the value
            provided at creation time, and returns it via this method.
        (CSPDirectiveList):
        (WebCore::CSPDirectiveList::CSPDirectiveList):
            The constructor now accepts a type, which is stored on the object.
            It also stores a new internal variable, 'm_experimental', which
            defines whether or not experimental features ought to be available.
            These features are still locked behind the CSP_NEXT flag, but that
            might not be the case forever.
        (WebCore::CSPDirectiveList::create):
            The static constructor wrapper now passes the type into the real
            constructor, which also now handles setting its internal variables.
        (WebCore::CSPDirectiveList::parse):
            'parse()' is given the header, so it makes sense to store it here as
            well, rather than in the create wrapper.
        (WebCore::CSPDirectiveList::addDirective):
            1.1 directives remain locked behind CSP_NEXT, but now also require
            that 'm_experimental' is set, signaling usage of the prefixed header
            and an implicit opt-in to 1.1.
        * page/ContentSecurityPolicy.h:
            Added two new types to the HeaderTypes enum: PrefixedReportOnly, and
            PrefixedEnforcePolicy. These map to 'X-WebKitCSP-Report-Only' and
            'X-WebKit-CSP', respectively.

2012-10-31  Roger Fong  <roger_fong@apple.com>

        Change PopupMenu positioning on Windows such that behaviour on multiple monitors matches Windows standards.
        https://bugs.webkit.org/show_bug.cgi?id=100317

        Reviewed by Sam Weinig.

        The existing code determines which screen the popup menu "belongs" to by determining which screen the owning application's hwnd belongs to,
        where ownership is determined by how much of the hwnd is on which screen.
        To match what most Windows applications do, the owning screen should be whichever screen the drop down button belongs to.
        To determine which screen an element belongs to in Windows we need to pass in an hwnd for that element.
        However, since the drop down button is something that WebKit renders there is no hwnd.

        To remedy this issue, we can temporarily move the popup menu's hwnd to match the position and size of the button,
        determine the correct screen, and then eventually move it back to the correct final position after the rest of 
        the calculations have been completed. This is all done in the same function call so no rendering of the popup menu occurs
        between the temporary and final positionings.

        There's not really a good way of testing popup menus except manually, they're separate hwnds created outside of the WebView.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::monitorFromHwnd):
        (WebCore):
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::calculatePositionAndSize):

2012-10-31  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Added viewport at-rule to the CSS parser and tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=95961

        Reviewed by Kenneth Rohde Christiansen.

        Add tokens and grammar rules to parse @-webkit-viewport blocks. Also add
        the newly parsed rule to the rule list.

        This parser now implements the following part of the CSS Device Adaptation
        specification: http://www.w3.org/TR/css-device-adapt/#syntax

        Test: css3/device-adapt/viewport-at-rule-parsing.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::detectAtToken):
        (WebCore):
        (WebCore::CSSParser::createViewportRule):
        * css/CSSParser.h:
        (CSSParser):
        (WebCore::CSSParser::markViewportRuleBodyStart):
        (WebCore::CSSParser::markViewportRuleBodyEnd):
        (WebCore::CSSParser::inViewport):

            These methods are needed by the next patch validating the properties.
            Some viewport properties are common to other rules but have different
            semantics, and accepts different keywords. The validation needs to be
            done in a different code path.

        * css/CSSPropertySourceData.h:
        * css/CSSRule.cpp:
        (WebCore):
        (WebCore::CSSRule::cssText):
        (WebCore::CSSRule::destroy):
        (WebCore::CSSRule::reattach):
        (WebCore::CSSRule::reportMemoryUsage):
        * css/CSSRule.h:
        (CSSRule):
        (WebCore::CSSRule::isViewportRule):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::reportMemoryUsage):
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        (WebCore):
        (WebCore::StyleRuleViewport::StyleRuleViewport):
        (WebCore::StyleRuleViewport::~StyleRuleViewport):
        (WebCore::StyleRuleViewport::mutableProperties):
        (WebCore::StyleRuleViewport::setProperties):
        (WebCore::StyleRuleViewport::reportDescendantMemoryUsage):
        * css/StyleRule.h:
        (StyleRuleBase):
        (WebCore::StyleRuleBase::isViewportRule):
        (WebCore):
        (StyleRuleViewport):
        (WebCore::StyleRuleViewport::create):
        (WebCore::StyleRuleViewport::properties):
        (WebCore::StyleRuleViewport::copy):
        * css/WebKitCSSViewportRule.cpp: Added.
        (WebCore):
        (WebCore::WebKitCSSViewportRule::WebKitCSSViewportRule):
        (WebCore::WebKitCSSViewportRule::~WebKitCSSViewportRule):
        (WebCore::WebKitCSSViewportRule::style):
        (WebCore::WebKitCSSViewportRule::cssText):
        (WebCore::WebKitCSSViewportRule::reattach):
        (WebCore::WebKitCSSViewportRule::reportDescendantMemoryUsage):
        * css/WebKitCSSViewportRule.h: Added.
        (WebCore):

2012-10-31  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Validate types of built-in uniforms
        https://bugs.webkit.org/show_bug.cgi?id=98974

        Reviewed by Dean Jackson.

        Reject shaders which define built-in uniforms with the wrong type. For example, we reject a
        shader with the GLSL code "uniform float u_textureSize;" because u_textureSize should be a
        vec2, not a float.

        Relevant Spec Section:
        https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#shader-uniform-variables

        Test: css3/filters/custom/invalid-custom-filter-uniform-types.html

        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore):
        (WebCore::builtInUniformNameToTypeMap):
        (WebCore::validateSymbols):

2012-10-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133044.
        http://trac.webkit.org/changeset/133044
        https://bugs.webkit.org/show_bug.cgi?id=100888

        Hits an ASSERT in the isolatedWorlds tests (Requested by
        abarth on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (NeedsToVisitDOMWrapper):
        (GenerateVisitDOMWrapper):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectVisitor::ObjectVisitor):
        (WebCore::ObjectVisitor::visitDOMWrapper):
        (ObjectVisitor):
        (WebCore::rootForGC):
        (ImplicitConnection):
        (WebCore::ImplicitConnection::ImplicitConnection):
        (WebCore::ImplicitConnection::root):
        (WebCore::ImplicitConnection::wrapper):
        (WebCore):
        (WebCore::operator<):
        (WebCore::NodeVisitor::NodeVisitor):
        (WebCore::NodeVisitor::visitNodeWrapper):
        (NodeVisitor):
        (WebCore::NodeVisitor::applyGrouping):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (V8GCController):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WebCore::WrapperTypeInfo::visitDOMWrapper):
        (WrapperTypeInfo):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::visitDOMWrapper):
        * bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp:
        (WebCore::V8SpeechRecognitionResult::visitDOMWrapper):

2012-10-31  Philip Rogers  <pdr@google.com>

        Cache animationMode() in SVG animations.
        https://bugs.webkit.org/show_bug.cgi?id=99694

        Reviewed by Eric Seidel.

        This patch caches animationMode() which accounted for 25% of the CPU time of a simple
        animation benchmark! This is the 3rd patch for WK99694.

        Background: SVGAnimationElement contains most of the shared animation logic for <animate>,
        <set>, <animateColor>, <animateTransform>, and <animateMotion>. <animateMotion> is the only
        animation element that can depend on other elements in the page. For example:
        <path id="mypath" d="M0 0 L 100 100Z"/> <!-- note, can be animated! -->
        <rect x="0" y="0" width="100" height="100" fill="green">
            <animateMotion dur="6s" repeatCount="indefinite">
                <mpath xlink:href="#mypath"/>
            </animateMotion>
        </rect>
        See: http://www.w3.org/TR/SVG/single-page.html#animate-AnimateMotionElement

        animationMode depends on several properties of an animation element: the set tag, whether
        the animation has a path, and the "values", "to", and "by" attributes. animationMode() was
        a hot function for two reasons:
        1) hasAttribute(SVGNames::valuesAttr) is expensive because we are unable to use
           fastHasAttribute. This is cacheable by simply calculating the animationMode when the
           "values" attribute changes.
        2) In the <animateMotion> case, determining if a path is empty or changed is expensive.
           AnimateMotion can have a path attribute, or it can have <mpath> children that reference
           a (possibly non-existent) <path> element elsewhere in the page. Before this patch we did
           this path lookup on every animation loop in case something changed. After this patch we
           only update AnimateMotion's path when it changes.

        A previous patch, http://trac.webkit.org/changeset/132847, laid the groundwork for tracking
        <path> changes in <mpath>. This patch adds <mpath> to our resource tracking infrastructure
        to track when target <path>s change, instead of looking this up every time.

        This refactoring is covered by existing tests.
        svg/animations/mozilla/animateMotion-mpath-targetChange-1.svg fails after this patch
        because our element dependency tracking has a bug with duplicate ids; see WK99893.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseAttribute):
        (WebCore::SVGAnimateMotionElement::updateAnimationPath):

            animationPath() has been changed to updateAnimationPath() and should only be called
            when the animation path (path attribute, or mpath's referenced path) has changed.

        (WebCore::SVGAnimateMotionElement::buildTransformForProgress):
        (WebCore::SVGAnimateMotionElement::updateAnimationMode):

            If an animationPath exists, we use PathAnimation, otherwise we fall back to the normal
            updateAnimationMode() codepath.

        (WebCore):
        * svg/SVGAnimateMotionElement.h:
        (SVGAnimateMotionElement):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::isSupportedAttribute):
        (WebCore::SVGAnimationElement::parseAttribute):

            The from, by, and to attributes have been added so that we can track when they change
            and update the animation mode. Similarly for when the values attribute changes.

        (WebCore::SVGAnimationElement::updateAnimationMode):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::animationMode):
        (SVGAnimationElement):
        (WebCore::SVGAnimationElement::setAnimationMode):
        (WebCore::SVGAnimationElement::calculateDistance):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):

            It would be nice to move all the duplicated buildPendingResource() logic into a central
            place (SVGURIReference?) but for now it is copied. This function is nearly identical to
            SVGFEImageElement::buildPendingResource.

        (WebCore):
        (WebCore::SVGMPathElement::clearResourceReferences):
        (WebCore::SVGMPathElement::insertedInto):
        (WebCore::SVGMPathElement::removedFrom):
        (WebCore::SVGMPathElement::svgAttributeChanged):
        (WebCore::SVGMPathElement::targetPathChanged):
        (WebCore::SVGMPathElement::notifyParentOfPathChange):
        * svg/SVGMPathElement.h:
        (SVGMPathElement):
        * svg/SVGPathElement.cpp:

            When a <path>'s path changes, we need to notify any dependent <mpath> elements. This is
            typically handled with RenderSVGResource::markForLayoutAndParentResourceInvalidation
            but for the special-case of <mpath> we only need to track when the path's "d" attribute
            changes so invalidateMPathDependencies() has been added.

        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::invalidateMPathDependencies):
        (WebCore):
        (WebCore::SVGPathElement::insertedInto):
        (WebCore::SVGPathElement::removedFrom):
        * svg/SVGPathElement.h:
        (SVGPathElement):
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::SVGSetElement):
        (WebCore::SVGSetElement::updateAnimationMode):
        (WebCore):
        * svg/SVGSetElement.h:
        (SVGSetElement):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::isSupportedAttribute):

2012-10-31  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=100879
        ScrollingStateNode::cloneAndResetNode() should not be virtual

        Reviewed by Simon Fraser.

        cloneAndResetNode() is currently pure virtual and implemented only 
        in ScrollingStateScrollingNode. However, all of the work that it 
        does at this time is stuff that a generic ScrollingStateNode could 
        do. We should move this implementation to the base class so that it 
        does not need to be duplicated for future node types.

        This patch also re-names cloneAndResetNode() to cloneAndReset()
        and correspondingly re-names cloneAndResetChildNodes() to 
        cloneAndResetChildren(). 

        Finally the patch also changes the copy constructors of both of these 
        classes to take a const reference instead of a pointer.

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        (WebCore::ScrollingStateNode::cloneAndReset):
        (WebCore):
        (WebCore::ScrollingStateNode::cloneAndResetChildren):
        * page/scrolling/ScrollingStateNode.h:
        (ScrollingStateNode):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::commit):

2012-10-31  Tom Sepez  <tsepez@chromium.org>
        
        Malformed X-XSS-Protection headers not reported.
        https://bugs.webkit.org/show_bug.cgi?id=100538

        Reviewed by Adam Barth.

        Re-writes X-XSS-Protection header parser to be more particular, and to
        return better information on error.

        Tests: http/tests/security/xssAuditor/malformed-xss-protection-header-1.html
               http/tests/security/xssAuditor/malformed-xss-protection-header-2.html
               http/tests/security/xssAuditor/malformed-xss-protection-header-4.html
               http/tests/security/xssAuditor/xss-protection-parsing-02.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        Detect error return code and log console message with details
        * platform/network/HTTPParsers.cpp:
        (WebCore):
        (WebCore::skipWhiteSpace):
        Use safe less-than comparsion in case called with pos already out of range.
        (WebCore::skipToken):
        Fix comparison to properly reject substrings at end of input.  Prevent advancing
        returned position when match fails, so that this may someday be used to match
        optional tokens.
        (WebCore::parseXSSProtectionHeader):
        Return detailled error status. Avoid needless string copy.
        * platform/network/HTTPParsers.h:
        Add new error returns for x-xss-protection header parser.
        
2012-10-31  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (tile cache layers): bits of tiled layers are missing with certain 3D transforms
        https://bugs.webkit.org/show_bug.cgi?id=100808
        <rdar://problem/12562541>

        Reviewed by Dean Jackson.

        When projecting rects down into transformed layers, the projection can fail with severe
        3D rotations if the computed w component in TransformationMatrix::projectPoint() is negative.
        In this case we already clamp, but the fact that we clamped doesn't make it out to
        GraphicsLayerCA::computeVisibleRect() which resulted in incorrect visible rects being
        computed.
        
        Fix by propagating the fact that clamping occurred out of the TransformState functions
        which can clamp. In computeVisibleRect(), simply consider the entire layer bounds
        to be visible if clamping occurred.

        Tests: compositing/tiling/rotated-tiled-clamped.html
               compositing/tiling/rotated-tiled-preserve3d-clamped.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::computeVisibleRect): If either the applyTransform()
        or the state.mappedQuad() clamped, use our bounds as the visible rect.
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::applyTransform): Pass out clamping state.
        (WebCore::TransformState::flatten): Ditto.
        (WebCore::TransformState::mappedPoint): Ditto.
        (WebCore::TransformState::mappedQuad): Ditto.
        (WebCore::TransformState::flattenWithTransform): Ditto. No need to initialize
        wasClamped, since this function is internal.
        * platform/graphics/transforms/TransformState.h:
        (TransformState):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::projectQuad): If any point projection clamped,
        set the flag to say we clamped.
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix):

2012-10-31  Tiancheng Jiang  <tijiang@rim.com>

        Change bubble message style to BB10 UX spec.
        https://bugs.webkit.org/show_bug.cgi?id=100862

        Reviewed by Rob Buis.

        RIM PR 198108
        Internal Reviewed by Otto Cheung.
        No new tests.

        * css/themeBlackBerry.css:
        (::-webkit-validation-bubble-message): Added.
        (::-webkit-validation-bubble-arrow): Added.
        (::-webkit-validation-bubble-heading): Added.

2012-10-31  Mike West  <mkwst@chromium.org>

        Prefer document->addConsoleMessage to document->domWindow->console->addMessage.
        https://bugs.webkit.org/show_bug.cgi?id=100850

        Reviewed by Adam Barth.

        For historical reasons, a few places in WebCore talk to Console directly
        via 'document()->domWindow()->console()->addMessage(...)'. This is more
        safely wrapped by calling 'addConsoleMessage' on the Document itself.

        No visible functionality should change; we'll simply avoid potential
        null dereferences in the future.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::printWarningToConsole):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportLocalLoadFailed):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::logWarning):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::abort):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):

2012-10-31  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: frame chooser does not work on subsequent inspector open.
        https://bugs.webkit.org/show_bug.cgi?id=100771

        Reviewed by Yury Semikhatsky.

        - Make WorkerRuntimeAgent and PageRuntimeAgent register themselves in the instrumenting agents independently
        - Move pause / run worker handling from InspectorRuntimeAgent into WorkerRuntimeAgent
        - Remove remains of the front-end reused signal from InspectorAgent
        - Send execution contexts post clear window object instead of post commit load.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::clearFrontend):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorAgent.h:
        (InspectorAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::willEvaluateWorkerScript):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::restore):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::run):
        (WebCore::InspectorRuntimeAgent::setScriptDebugServer):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/InstrumentingAgents.h:
        (WebCore):
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::workerRuntimeAgent):
        (WebCore::InstrumentingAgents::setWorkerRuntimeAgent):
        (InstrumentingAgents):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::~PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::setFrontend):
        (WebCore::PageRuntimeAgent::clearFrontend):
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        * inspector/PageRuntimeAgent.h:
        (PageRuntimeAgent):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::~WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::run):
        (WebCore):
        (WebCore::WorkerRuntimeAgent::pauseWorkerContext):
        * inspector/WorkerRuntimeAgent.h:
        (WorkerRuntimeAgent):

2012-10-31  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [Qt][EFL][AC][WK2]TextureMapperLayer backing store contents are drawn upside down on screen.
        https://bugs.webkit.org/show_bug.cgi?id=100845.

        Reviewed by Noam Rosenthal.

        WebGL displays the Canvas with (0,0) being the bottom left corner.
        In GraphicsSurface::platformPaintToTextureMapper we don't set ShouldFlipTexture
        flag before painting to TextureMapper.
        It results in backing store contents being drawn upside down on screen.
        This patch enables ShouldFlipTexture flag when TextureMapperLayer renders 
        it's backing store contents into a TextureMapper.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):

2012-10-31  Noam Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Enable filter animations in GraphicsLayerAnimation
        https://bugs.webkit.org/show_bug.cgi?id=100318

        Reviewed by Kenneth Rohde Christiansen.

        Use the same method of animating filters in WebCore to animate filters for TextureMapper.
        Added the appropriate methods to GraphicsLayerAnimation and TextureMapperLayer.

        Tested by LayoutTests/css3/filters/filter-animation-hw.html and other tests.

        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore):
        (WebCore::blendFunc):
        (WebCore::applyFilterAnimation):
        (WebCore::GraphicsLayerAnimation::applyInternal):
        * platform/graphics/GraphicsLayerAnimation.h:
        (Client):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::intermediateSurfaceRect):
        (WebCore::TextureMapperLayer::shouldPaintToIntermediateSurface):
        (WebCore::TextureMapperLayer::paintRecursive):
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):
        (WebCore::TextureMapperLayer::setFilters):
        (WebCore::TextureMapperLayer::setAnimatedFilters):

2012-10-31  Adam Barth  <abarth@webkit.org>

        [V8] Garbage collection should use opaque roots rather than implicit references
        https://bugs.webkit.org/show_bug.cgi?id=100707

        Reviewed by Kentaro Hara.

        This patch replaces visitDOMWrapper with opaqueRootForGC. The
        former used to inform V8 of implicit relationships between wrapper
        objects on a per-wrapper basis. That meant that we needed to know which
        DOMDataStore a given wrapper was in during garbage collection.

        After this patch, we now use object groups rather than implicit
        references to inform V8 of these relationships. That has two benefits:

        1) We no longer need to know which DOMDataStore a wrapper belongs
           because we don't need to find the exact source wrapper for the
           implicit connection.

        2) We can now handle more complicated implicit relationships, for
           example when some of the intervening objects haven't had their
           JavaScript wrappers created yet.

        This patch also unlocks to paths of future development:
        A) Fixing the remaining failures in fast/dom/gc-9.html
        B) Enumerating DOM wrappers entirely from V8 rather than from the
           DOMWrapperMaps (so that we can move more object towards using
           IntrusiveDOMWrapperMaps, which aren't enumerable from WebCore).

        * bindings/scripts/CodeGeneratorV8.pm:
        (NeedsCustomOpaqueRootForGC):
        (GenerateOpaqueRootForGC):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/v8/V8GCController.cpp:
        (ImplicitConnection):
        (WebCore::ImplicitConnection::ImplicitConnection):
        (WebCore::ImplicitConnection::root):
        (WebCore::ImplicitConnection::wrapper):
        (WebCore):
        (WebCore::operator<):
        (WrapperGrouper):
        (WebCore::WrapperGrouper::WrapperGrouper):
        (WebCore::WrapperGrouper::addToGroup):
        (WebCore::WrapperGrouper::keepAlive):
        (WebCore::WrapperGrouper::apply):
        (WebCore::ObjectVisitor::ObjectVisitor):
        (WebCore::ObjectVisitor::visitDOMWrapper):
        (ObjectVisitor):
        (WebCore::V8GCController::opaqueRootForGC):
        (WebCore::NodeVisitor::NodeVisitor):
        (WebCore::NodeVisitor::visitNodeWrapper):
        (NodeVisitor):
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/V8GCController.h:
        (WebCore):
        (V8GCController):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WebCore::WrapperTypeInfo::opaqueRootForGC):
        (WrapperTypeInfo):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::opaqueRootForGC):
        * bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp:
        (WebCore::V8SpeechRecognitionResult::opaqueRootForGC):

2012-10-31  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Add total node to native memory snapshot tree
        https://bugs.webkit.org/show_bug.cgi?id=100843

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeSnapshotDataGrid):
        (WebInspector.NativeSnapshotNode):
        (WebInspector.MemoryBlockViewProperties._initialize):

2012-10-31  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Table with percentage column widths doesn't scale to fill the entire width of a table containing it
        https://bugs.webkit.org/show_bug.cgi?id=11645

        Reviewed by Julien Chaffraix.

        When the inner (or nested) table has auto width and column(s) with
        percent width, we should scale our column(s) to the width of the
        containing table (unless it has auto width).

        Test: fast/table/scale-nested-percent-width-cols.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::shouldScaleColumns):
        If the containing table width was of percent type, we were disallowing
        our inner or nested table's column from scaling to the size of the parent
        table. We should prohibit the scaling of the nested table columns only
        if the parent table has auto width.

2012-10-31  Ian Vollick  <vollick@chromium.org>

        Add support for text-based repaint testing
        https://bugs.webkit.org/show_bug.cgi?id=100584

        Reviewed by Simon Fraser.

        Allows tracked repaint rects to be dumped as text.

        The following layout tests have been converted:
          fast/repaint/layer-full-repaint.html
          fast/repaint/overflow-flipped-writing-mode-table.html

        * WebCore.exp.in:
          Exports for:
            FrameView::setTracksRepaints(bool)
            Frame::trackedRepaintRectsAsText() const
        * page/Frame.cpp:
        (WebCore::Frame::trackedRepaintRectsAsText):
          Returns a string containing information on all tracked repaint rects.
        * page/FrameView.cpp:
        (WebCore::FrameView::setTracksRepaints):
          Rather than calling m_trackedRepaintRects.clear() directly, I've
          called resetTrackedRepaints(). This will allow us to do more
          sophisticated resetting when we start tracking repaint rects for
          composited layers.
        (WebCore::FrameView::trackedRepaintRectsAsText):
          Provides the string returned by Frame::trackedRepaintRectsAsText.
        * testing/Internals.cpp:
        (WebCore::Internals::repaintRectsAsText):
          Returns Frame::trackedRepaintRectsAsText.
        (WebCore):
        (WebCore::Internals::startTrackingRepaints):
          Calls FrameView::setTracksRepaints(true)
        (WebCore::Internals::stopTrackingRepaints):
          Calls FrameView::setTracksRepaints(false)
        * testing/Internals.h:
        * testing/Internals.idl:
          Declarations for:
            repaintRectsAsText
            startTrackingRepaints
            stopTrackingRepaints

2012-10-31  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: page crash when pausing in dedicated worker
        https://bugs.webkit.org/show_bug.cgi?id=100837

        Reviewed by Pavel Feldman.

        Pass debugger agent to InjectedScriptHost::init in case of workers.

        Test: inspector-protocol/debugger-pause-dedicated-worker.html

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2012-10-31  Zoltan Nyul  <zoltan.nyul@intel.com>

        perspective-origin should ignore values with more then two lengths and use the default values
        https://bugs.webkit.org/show_bug.cgi?id=100835

        Reviewed by Kenneth Rohde Christiansen.

        Perspective-origin should ignore values with more then two lengths
        (http://www.w3.org/TR/css3-transforms/#perspective-origin) and use
        the default values instead of parsing it as an unlimited-length list,
        of which all but the first two values are ignored. This makes perspective-origin 
        behave similar to transform-origin which uses default value in this case,
        as well as firefox does the same.

        Test: transforms/2d/computed-style-origin.html

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

2012-10-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133016.
        http://trac.webkit.org/changeset/133016
        https://bugs.webkit.org/show_bug.cgi?id=100856

        broke compile-webkit on several bots (Requested by podivilov
        on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientationClient.h:
        (DeviceOrientationClient):
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore):
        (WebCore::DeviceOrientationController::~DeviceOrientationController):
        (WebCore::DeviceOrientationController::timerFired):
        (WebCore::DeviceOrientationController::addListener):
        (WebCore::DeviceOrientationController::removeListener):
        (WebCore::DeviceOrientationController::removeAllListeners):
        (WebCore::DeviceOrientationController::suspendEventsForAllListeners):
        (WebCore::DeviceOrientationController::resumeEventsForAllListeners):
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        (WebCore::DeviceOrientationController::supplementName):
        * dom/DeviceOrientationController.h:
        (WebCore):
        (DeviceOrientationController):
        (WebCore::DeviceOrientationController::isActive):
        (WebCore::DeviceOrientationController::client):
        (WebCore::DeviceOrientationController::from):
        * dom/Document.cpp:
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        * loader/EmptyClients.h:
        (WebCore::EmptyDeviceOrientationClient::startUpdating):
        (WebCore::EmptyDeviceOrientationClient::stopUpdating):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DeviceClient.h: Removed.
        * page/DeviceController.cpp: Removed.
        * page/DeviceController.h: Removed.

2012-10-31  Antti Koivisto  <antti@apple.com>

        Remove stray calls to mutableAttributeData()
        https://bugs.webkit.org/show_bug.cgi?id=100849

        Reviewed by Andreas Kling.

        Changing the cached class attribute value does not require mutable attribute data.

        * dom/Element.cpp:
        (WebCore::Element::classAttributeChanged):
        * dom/ElementAttributeData.h:
        (WebCore::ElementAttributeData::clearClass):
        
            Make const like setClass().

2012-10-31  Mike West  <mkwst@chromium.org>

        X-Frame-Options console message should be associated with a request.
        https://bugs.webkit.org/show_bug.cgi?id=100735

        Reviewed by Pavel Feldman.

        In 99941, we added the possibility to tie console messages to requests,
        which enables automatic generation of stack traces, line numbers, etc.
        making the error simpler to diagnose for web developers. This patch
        uses the piping laid in that patch to improve the console message
        generated when a document is blocked by X-Frame-Options.

        No new tests; the functionality is covered by changes to existing tests.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
            Grab the request identifier from the currently active DocumentLoader
            and pass it into the console message.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
            Grab the request identifier from the MainResourceLoader, and pass it
            into the console message.

2012-10-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133015.
        http://trac.webkit.org/changeset/133015
        https://bugs.webkit.org/show_bug.cgi?id=100847

        broke Apple Win Debug compilation (Requested by podivilov on
        #webkit).

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::clearFrontend):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::didCommitLoadFired):
        (InspectorAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::willEvaluateWorkerScript):
        (WebCore::InspectorInstrumentation::runtimeAgentEnabled):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::restore):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::run):
        (WebCore):
        (WebCore::InspectorRuntimeAgent::pauseWorkerContext):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/InstrumentingAgents.h:
        (WebCore):
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorRuntimeAgent):
        (WebCore::InstrumentingAgents::setInspectorRuntimeAgent):
        (InstrumentingAgents):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::~PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::setFrontend):
        (WebCore::PageRuntimeAgent::clearFrontend):
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::didClearWindowObject):
        * inspector/PageRuntimeAgent.h:
        (PageRuntimeAgent):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::~WorkerRuntimeAgent):
        * inspector/WorkerRuntimeAgent.h:
        (WorkerRuntimeAgent):

2012-10-31  Kihong Kwon  <kihong.kwon@samsung.com>

        Add DeviceController base-class to remove duplication of DeviceXXXControler
        https://bugs.webkit.org/show_bug.cgi?id=96894

        Reviewed by Hajime Morita.

        Add DeviceController which is extracted from DeviceOrientationController to remove duplication.
        And soon-to-be-added DeviceMotionController and ProximityController.

        Covered by existing tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientationClient.h:
        * dom/DeviceOrientationController.cpp:
        Remove member functions to move to DeviceController.
        - addListener(), removeListener(), removeAllListeners(), isActive()
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        (WebCore::DeviceOrientationController::client):
        (WebCore::DeviceOrientationController::hasLastData):
        (WebCore::DeviceOrientationController::getLastEvent):
        (WebCore::DeviceOrientationController::from):
        (WebCore):
        * dom/DeviceOrientationController.h:
        (WebCore):
        (WebCore::DeviceOrientationController::~DeviceOrientationController):
        (DeviceOrientationController):
        * dom/Document.cpp:
        Remove suspendEventsForAllListeners() and resumeEventsForAllListeners() function calls.
        These calls can be made by checking activeDOMObjectsAreSuspended() and activeDOMObjectsAreStopped() before dispatchEvent.
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        * loader/EmptyClients.h:
        (EmptyDeviceClient):
        (WebCore::EmptyDeviceClient::startUpdating):
        (WebCore::EmptyDeviceClient::stopUpdating):
        (WebCore):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DeviceClient.h: Added.
        (WebCore):
        (DeviceClient):
        (WebCore::DeviceClient::~DeviceClient):
        * page/DeviceController.cpp: Added.
        DeviceController has extracted functions from DeviceOrientationController and DeviceMotionController.
        - addDeviceEventListener(), removeDeviceEventlistener(), removeAllDeviceEventListeners(), dispatchDeviceEvent()
        All kind of device event controller which has DeviceClient can be inherited from DeviceController.
        (WebCore):
        (WebCore::DeviceController::DeviceController):
        (WebCore::DeviceController::addDeviceEventListener):
        (WebCore::DeviceController::removeDeviceEventListener):
        (WebCore::DeviceController::removeAllDeviceEventListeners):
        (WebCore::DeviceController::dispatchDeviceEvent):
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h: Added.
        (WebCore):
        (DeviceController):
        (WebCore::DeviceController::~DeviceController):
        (WebCore::DeviceController::isActive):
        (WebCore::DeviceController::client):
        (WebCore::DeviceController::hasLastData):
        (WebCore::DeviceController::getLastEvent):

2012-10-31  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: frame chooser does not work on subsequent inspector open.
        https://bugs.webkit.org/show_bug.cgi?id=100771

        Reviewed by Yury Semikhatsky.

        - Make WorkerRuntimeAgent and PageRuntimeAgent register themselves in the instrumenting agents independently
        - Move pause / run worker handling from InspectorRuntimeAgent into WorkerRuntimeAgent
        - Remove remains of the front-end reused signal from InspectorAgent
        - Send execution contexts post clear window object instead of post commit load.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::clearFrontend):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorAgent.h:
        (InspectorAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::willEvaluateWorkerScript):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::restore):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::run):
        (WebCore::InspectorRuntimeAgent::setScriptDebugServer):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):
        * inspector/InstrumentingAgents.h:
        (WebCore):
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::workerRuntimeAgent):
        (WebCore::InstrumentingAgents::setWorkerRuntimeAgent):
        (InstrumentingAgents):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::~PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::setFrontend):
        (WebCore::PageRuntimeAgent::clearFrontend):
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        * inspector/PageRuntimeAgent.h:
        (PageRuntimeAgent):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::~WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::run):
        (WebCore):
        (WebCore::WorkerRuntimeAgent::pauseWorkerContext):
        * inspector/WorkerRuntimeAgent.h:
        (WorkerRuntimeAgent):

2012-10-31  Keishi Hattori  <keishi@webkit.org>

        Calendar picker can flicker when opened from the suggestion picker
        https://bugs.webkit.org/show_bug.cgi?id=100816

        Reviewed by Kent Tamura.

        Calendar picker was opening before the hiding completed.

        No new tests. Added test to date-suggestion-picker-key-operations.html.

        * Resources/pagepopups/pickerCommon.js: Added didHide event.
        * Resources/pagepopups/suggestionPicker.js:
        (SuggestionPicker.prototype.selectEntry): Use didHide event so we don't open the calendar picker prematurely.
        (SuggestionPicker._handleWindowDidHide): When the window finished hiding, open the calendar picker.

2012-10-31  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Reset binding test result after r132973
        https://bugs.webkit.org/show_bug.cgi?id=99178

        Unreviewed gardening.

        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::getJSFloat64ArrayConstructorTable):
        (WebCore::JSFloat64ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSFloat64ArrayConstructor::getOwnPropertyDescriptor):

2012-10-31  Mike West  <mkwst@chromium.org>

        Script run from an isolated world should bypass a page's CSP.
        https://bugs.webkit.org/show_bug.cgi?id=97398

        Reviewed by Adam Barth.

        A page's Content Security Policy currently applies to all resources
        loaded, regardless of their source. That generally makes sense, but
        proves problematic when considering script run from an isolated
        world (Chrome extensions, for instance). These scripts should be allowed
        to inject resources into a page's DOM without eiher being restricted by
        the page's active CSP, or generating violation reports that spam the
        page owner.

        Ideally, the isolated world could define its own Content Security Policy
        which should be applied to resources it loads. For the moment, this
        patch accepts a String that we can parse later on, but only uses it in
        a binary way. If a non-empty policy String is provided, we bypass the
        main world's CSP checks. If an empty String is provided, the main
        world's CSP checks remain active.

        Test: http/tests/security/isolatedWorld/bypass-main-world-csp.html

        (WebCore::isolatedWorldContentSecurityPolicies):
        (WebCore::DOMWrapperWorld::isolatedWorldHasContentSecurityPolicy):
        (WebCore::DOMWrapperWorld::setIsolatedWorldContentSecurityPolicy):
        (WebCore::DOMWrapperWorld::clearIsolatedWorldContentSecurityPolicy):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
            Mechanisms for setting and clearing Content Security Policies from
            isolated worlds; implemented in the same HashMappy way as
            SecurityOrigin.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::shouldBypassMainWorldContentSecurityPolicy):
        (WebCore):
        * bindings/v8/ScriptController.h:
        (ScriptController):
            Adding a method to ScriptController to query the state of the
            current world's Content Security Policy. We'll drop this once we can
            apply a policy more directly, but for the moment it's necessary for
            the next bit.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
            Check the new ScriptController method, and only perform CSP checks
            when loading resources if we're executing code from the main world,
            or an isolated world with no Content Security Policy set.

2012-10-31  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, attempt to fix the release build by not exporting symbols that aren't defined there.

        * WebCore.exp.in:

2012-10-31  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: do not report memory occupied by objects referenced using client interfaces
        https://bugs.webkit.org/show_bug.cgi?id=100824

        Reviewed by Alexander Pavlov.

        In many classes we have pointer to a client object. These references should be
        reported as weak pointers and the client's memory usage should be reported when
        the client is reached from its instrumented owner where we know exact type of
        the client. Otherwise we would need to add reportMemoryUsage to all client
        interfaces which places additional burden on the client implementers and blurs
        the instrumentation boundaries.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::reportMemoryUsage):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::reportMemoryUsage):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::reportMemoryUsage):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::reportMemoryUsage):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::reportMemoryUsage):
        * page/Page.cpp:
        (WebCore::Page::reportMemoryUsage):

2012-10-31  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, attempt to fix the build by exporting NoExceptionAssertionChecker symbols.

        * WebCore.exp.in:

2012-10-31  Eric Seidel  <eric@webkit.org>

        Add non-virtual firstChild/lastChild overrides to RenderBlock and RenderTableCol for a > 30% speedup on table from bug 100304
        https://bugs.webkit.org/show_bug.cgi?id=100306

        Reviewed by Abhishek Arya.

        Presumably this is a speedup for other rendering tests as well.  We use firstChild() all over
        the rendering code w/o considering that it makes a virtual function call.
        Originally I just fixed the one callsite which was showing up on the sample to
        use children()->firstChild() directly.  However after further thought, this
        broader solution seemed the better way to go.  The first patch was a 15% win for
        this large table, this broader solution was a 30%!? win.

        The elephant in the room for this table is that we're walking the whole table
        for many nextColumn calls.  But that I will solve in a later bug.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::firstChild):
        (WebCore::RenderBlock::lastChild):
        (RenderBlock):
        * rendering/RenderObject.h:
        (RenderObject):
        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::firstChild):
        (WebCore::RenderTableCol::lastChild):
        (RenderTableCol):

2012-10-31  Philippe Normand  <pnormand@igalia.com>

        Spatialized panning renders incorrectly with USE_CONCATENATED_IMPULSE_RESPONSES
        https://bugs.webkit.org/show_bug.cgi?id=98294

        Reviewed by Chris Rogers.

        Regenerated the concatenated impulse responses file with
        elevations in increasing order per azimuth. In the previous
        version of this file the elevations for 315, 330 and 345 were
        concatenated at the wrong indexes.

        * platform/audio/resources/Composite.wav:

2012-10-31  Tim Horton  <timothy_horton@apple.com>

        Full-page PDFPlugin should support inline form editing
        https://bugs.webkit.org/show_bug.cgi?id=100155

        Reviewed by Dan Bernstein.

        Add form controls corresponding to Text and Choice PDF annotations,
        allowing for single- and multi-line text input, and <option>-like input.

        Currently, forms are only implemented for full-page PDF documents.

        * WebCore.exp.in: Expose a variety of additional WebCore functionality to WebKit2.
        * WebCore.xcodeproj/project.pbxproj: Expose some more WebCore headers as private headers for use in WebKit2.

2012-10-30  Eric Seidel  <eric@webkit.org>

        RoboHornetPro spends ~25% of total test time in WebCore::Region::Shape methods
        https://bugs.webkit.org/show_bug.cgi?id=98800

        Reviewed by Sam Weinig.

        This patch brings our total RoboHornetPro time from 8.2 seconds to 5.3 seconds!

        OverlapMap previously used Regions to track Layer bounds rects. 
        Unfortunately unioning a list of Regions is O(N^2)
        where N is the number of Shapes (in this case rects).
        This is because Shapes are immutable, so to union two shapes, we copy
        both Shapes' segment/span vectors into a single new Shape.
        Thus if we union a set of M Regions, each with 1 Shape, we'll end up copying
        the segments of the first Shape N times before we have the final Region/Shape
        and the second shape N-1 times. The sum of 1 to N is (N*(N-1))/2 aka order N^2.
        Fixing the N^2 algorithm covered by https://bugs.webkit.org/show_bug.cgi?id=100814.

        For now we just avoid this O(N^2) by moving away from Region, since OverlapMap
        doesn't need it. We just collect a vector of the layer rects and hit-test that directly.
        Hit-testing the rect list is O(N), just like hit-testing the same information in a Region would be.

        Even better for us is that the OverlapMap is never even used in RoboHornetPro.
        We just collect these rects to end up doing nothing with them. :)

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::OverlapMap::add):
        (WebCore::RenderLayerCompositor::OverlapMap::overlapsLayers):
        (WebCore::RenderLayerCompositor::OverlapMap::pushCompositingContainer):
        (WebCore::RenderLayerCompositor::OverlapMap::popCompositingContainer):
        (RenderLayerCompositor::OverlapMap):

2012-10-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=100813
        ScrollingCoordinatorMac::stateNodeForID() should return a 
        ScrollingStateNode* instead of a ScrollingStateScrollingNode*

        Reviewed by Sam Weinig.

        ScrollingCoordinatorMac::stateNodeForID() should return a 
        ScrollingStateNode* instead of a ScrollingStateScrollingNode* so that 
        it can be used for other types of nodes once we add them.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinatorMac::recomputeWheelEventHandlerCountForFrameView):
        (WebCore::ScrollingCoordinatorMac::requestScrollPositionUpdate):
        (WebCore::ScrollingCoordinatorMac::stateNodeForID):

2012-10-30  Keishi Hattori  <keishi@webkit.org>

        F4 inside <input type=time> should not open calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=100730

        Reviewed by Kent Tamura.

        We lacked the check to see if the picker indicator is visible.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-open-picker-key-bindings.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::handleKeydownEvent): Check if picker indicator is visible.

2012-10-30  Kent Tamura  <tkent@chromium.org>

        Delaying 'change' and 'input' event dispatching during HTMLInputElement::setValue
        https://bugs.webkit.org/show_bug.cgi?id=100772

        Reviewed by Abhishek Arya.

        'change' and 'input' events are asynchronous and not
        cancelable. We can use ScopedEvent.

        Test: fast/forms/range/range-type-change-onchange.html

        * dom/Node.cpp:
        (WebCore::Node::dispatchChangeEvent): Use dispatchScopedEvent.
        (WebCore::Node::dispatchInputEvent): Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue):
        Make a scope to delay event dispatching.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent): Ditto.

2012-10-30  Simon Fraser  <simon.fraser@apple.com>

        Fix issues with filters and reflections
        https://bugs.webkit.org/show_bug.cgi?id=100308

        Reviewed by Dirk Schulze.

        Composited filters were being applied to the wrong CALayer. The code used
        primaryLayer(), which may be a CATransformLayer (which filters cannot apply
        to; doing so causes console spew), or a CALayer that is used for reflection
        flattening, which again is the wrong layer.

        Test: css3/filters/composited-reflected.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateContentsVisibility): Replace .get()-> with ->
        (WebCore::GraphicsLayerCA::updateContentsOpaque): Ditto.
        (WebCore::GraphicsLayerCA::updateFilters): Apply filters to m_layer, not primaryLayer(),
        and use m_layerClones, not primaryLayerClones().
        (WebCore::GraphicsLayerCA::cloneLayer): When cloning a layer for reflections, copy filters
        from the source layer.
        * platform/graphics/ca/PlatformCALayer.h:
        (PlatformCALayer): Add a member function to copy filters from a supplied layer.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setFilters): Remove blank line.
        (PlatformCALayer::copyFiltersFrom): Copy CAFIlters from the given layer.
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::copyFiltersFrom): Stub; no filters on Windows.

2012-10-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=100809
        ScrollingCoordinator::attachToStateTree() should take an enum 
        indicating what type of node to create

        Reviewed by Simon Fraser.

        New enum ScrollingNodeType will soon have other values, such as 
        FixedNode.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::attachToStateTree):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):

        This patch generalizes this function so that it can be used to create 
        different types of nodes and so that it is actually ready to create 
        child nodes. 
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::attachToStateTree):

        The rootStateNode is always a ScrollingNode.
        (WebCore::ScrollingCoordinatorMac::ensureRootStateNodeForFrameView):

        For the time being, always create a ScrollingNode.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::attachToScrollingCoordinator):

2012-10-30  Gregg Tavares  <gman@google.com>

        Set the initial scissor box for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=100804

        Reviewed by Kenneth Russell.

        The initial scissor box needs to be set for WebGL

        No new tests as no new functionality.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::initializeNewContext):

2012-10-30  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] PurgeCredential should also purge the persisted credential store
        https://bugs.webkit.org/show_bug.cgi?id=100744

        Reviewed by George Staikos.

        When challenged by the server, we will check the credential in-memory and from the persistent storage.
        So the invalid credentials should also be purged from the persistent credential storage; Otherwise,
        it will be sent to the server next time been challenged, instead of prompting the user.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::purgeCredentials):

2012-10-30  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        DOM URL is flaky when workers are used
        https://bugs.webkit.org/show_bug.cgi?id=99178

        Reviewed by Geoffrey Garen.

        Extend JSNoStaticTables to also avoid direct access of static tables in constructor objects.

        Test: fast/workers/worker-domurl.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (constructorHashTableAccessor):
        (GenerateConstructorDefinition):

2012-10-30  Jae Hyun Park  <jae.park@company100.net>

        Coordinated Graphics: Remove unused methods
        https://bugs.webkit.org/show_bug.cgi?id=100799

        Reviewed by Noam Rosenthal.

        Currently, there are several unused methods regarding Coordinated
        Graphics. This patch removes those unused methods.

        No new tests (No change in behavior).

        * platform/graphics/texmap/TextureMapperGL.cpp:

2012-10-30  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Multiple segment polygon layout does not get all segments
        https://bugs.webkit.org/show_bug.cgi?id=100039

        Reviewed by Dirk Schulze.

        Corrected the algorithm for computing included polygon intervals for rectilinear polygons,
        and polygons with horizontal edges in general.

        Tests: fast/exclusions/shape-inside/shape-inside-rectilinear-polygon-001.html
               fast/exclusions/shape-inside/shape-inside-rectilinear-polygon-002.html

        * rendering/ExclusionPolygon.cpp: Removed some internal dead code related to the no-longer-used sortedEdgesMinY Vector.
        (WebCore::ExclusionPolygon::ExclusionPolygon): Initialize new ExclusionPolygonEdge edgeIndex field.
        (WebCore::getVertexIntersectionVertices): Return the previous, next, and target vertex indices for a vertex intersection.
        (WebCore::ExclusionPolygon::computeXIntersections): Refactored the core of this method to improve handling of horizontal edges.
        (WebCore::ExclusionPolygon::computeEdgeIntersections): Ignore zero-width edges.
        * rendering/ExclusionPolygon.h: Removed the rightVertexY() method, since it's no longer used.
        (WebCore::ExclusionPolygon::edgeAt): New method.
        (WebCore::ExclusionPolygon::numberOfEdges): New method.
        (ExclusionPolygon): Added support for retrieving edges.
        (WebCore::ExclusionPolygonEdge::vertex1): Use vertex1Index.
        (WebCore::ExclusionPolygonEdge::vertex2): Use vertex2Index.
        (ExclusionPolygonEdge): Renamed index1, index2 fields to vertex1Index, vertex2Index.
        (WebCore::ExclusionPolygonEdge::previousEdge): New method.
        (WebCore::ExclusionPolygonEdge::nextEdge): New method.

2012-10-30  Chris Evans  <cevans@google.com>

        Improve performance of MaskPtr.
        https://bugs.webkit.org/show_bug.cgi?id=100790

        Reviewed by Eric Seidel.

        Calculate the mask once, and store it as a fast-access member variable.
        Also avoid unneccessary integer width expansion in index calculation.
        Parser/tiny-innerHTML.html has a high stddev.
        Best result I've seen pre-patch is 5.70 runs/s.
        Best result I've seen post-patch is 5.72 runs/s, but this is not statistically significant.
        MaskPtr is still showing as ~2% in the profile, so we're not sure we trust the profile symbolization at this time.
        MaskPtr is now reduced to a single inline instruction (was: 4) so this seems like a strict improvement worth landing.

        * rendering/RenderArena.cpp:
        (MaskPtr): Use a passed-in mask for the mask operation.
        (WebCore::RenderArena::RenderArena): Calculate the mask and store it.
        (WebCore::RenderArena::allocate):
        (WebCore::RenderArena::free): Use stored mask and avoid unneccessary casts.
        * rendering/RenderArena.h:
        (RenderArena): Store the freelist mask as a member variable.

2012-10-30  Kenichi Ishibashi  <bashi@chromium.org>

        local(Helvetica) in src descriptor prevent fallback
        https://bugs.webkit.org/show_bug.cgi?id=100446

        Reviewed by Dan Bernstein.

        FontCache::getCachedFontData() has a mechanism that aliases a few pairs
        of font family names, so that if the family name specified in the font-family
        property is not available on the system, but the its alias is available,
        it will be used instead. This is appropriate for the font-family property,
        but not for font family names specified in the local() function of the src
        descriptor in a @font-face rule.

        This patch disables the mechanism while checking src descriptor of @font-face.

        No new tests. It's difficult to test the change because 'Helvetica' can
        be mapped any other font. For example, chromium DRT uses FontConfig to
        map Helvetica to Times New Roman. Other ports may map Helvetica to other
        fonts. We can't define the expected result.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        Call fontCache()->getCachedFontData() with checkingAlternateName = true.
        This disables aliasing font family names in FontCache.

2012-10-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=100796
        Should add FixedPositionViewportConstraints to ScrollingConstraints.h

        Reviewed by Simon Fraser.

        ScrollingConstraints.h currently contains an abstract class called 
        ViewportConstraints that is intended to encapsulate data and logic 
        required to reposition elements whose layout depends on the viewport 
        rect (positions fixed and sticky), when scrolling and zooming. 
        However, at this time there is only a subclass for sticky. We should 
        add a sub-class for fixed. This is required to get pages with fixed 
        position elements scrolling on the scrolling thread.

        * page/scrolling/ScrollingConstraints.cpp:
        (WebCore::FixedPositionViewportConstraints::layerPositionForViewportRect):
        (WebCore):
        * page/scrolling/ScrollingConstraints.h:
        (WebCore::ViewportConstraints::ViewportConstraints):
        (ViewportConstraints):
        (WebCore::ViewportConstraints::setAnchorEdges):
        (FixedPositionViewportConstraints):
        (WebCore::FixedPositionViewportConstraints::FixedPositionViewportConstraints):
        (WebCore::FixedPositionViewportConstraints::viewportRectAtLastLayout):
        (WebCore::FixedPositionViewportConstraints::setViewportRectAtLastLayout):
        (WebCore::FixedPositionViewportConstraints::layerPositionAtLastLayout):
        (WebCore::FixedPositionViewportConstraints::setLayerPositionAtLastLayout):
        (WebCore):

2012-10-30  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] update form theme for BB10.
        https://bugs.webkit.org/show_bug.cgi?id=100760

        Reviewed by Rob Buis.

        RIM PR:222126
        Introduce slide function to paint new theme for the form controls.

        No new tests.

        * css/themeBlackBerry.css:
        (select):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):
        (WebCore::drawControl): Added.
        (WebCore::drawThreeSlice): Added.
        (WebCore::drawNineSlice): Added.
        (WebCore::loadImage): Added.
        (WebCore::RenderThemeBlackBerry::systemFont): Modified.
        (WebCore::RenderThemeBlackBerry::paintTextFieldOrTextAreaOrSearchField): Modified.
        (WebCore::RenderThemeBlackBerry::paintCheckbox): Modified.
        (WebCore::RenderThemeBlackBerry::paintRadio): Modified.
        (WebCore::RenderThemeBlackBerry::paintButton): Modified.
        (WebCore::RenderThemeBlackBerry::paintMenuList): Modified.
        (WebCore::RenderThemeBlackBerry::paintMenuListButton): Modified.
        (WebCore::RenderThemeBlackBerry::paintSliderTrackRect): Modified.
        (WebCore::RenderThemeBlackBerry::paintSliderThumb): Modified.
        * platform/blackberry/RenderThemeBlackBerry.h:
        (RenderThemeBlackBerry):

2012-10-30  Rick Byers  <rbyers@chromium.org>

        cssText for cursor property doesn't include hotspot
        https://bugs.webkit.org/show_bug.cgi?id=99530

        Reviewed by Darin Adler.

        Implement customCssText in CSSCursorImageValue to include the hotspot when present.
        Also explicitly track whether or not a hotspot was supplied in the parser,
        while still using the existing convention of (-1,-1) to denote no hotspot
        in the rest of the system.

        Test: fast/css/cursor-parsing.html

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::customCssText):
        * css/CSSCursorImageValue.h:
        (CSSCursorImageValue):

2012-10-30  Kenneth Russell  <kbr@google.com>

        Temporarily restrict use of ImageBufferSkia::copyToPlatformTexture until bugs resolved
        https://bugs.webkit.org/show_bug.cgi?id=100714

        Reviewed by Stephen White.

        For the moment, only use ImageBuffer::copyToPlatformTexture when
        copying to RGBA/UNSIGNED_BYTE textures, and document restriction
        in header. Restriction will be lifted once the implementations
        (currently only Chromium has one) have been fixed; see bug 100715.

        No new tests; manually ran WebGL conformance test
        tex-image-and-sub-image-2d-with-canvas-rgba5551.html on NVIDIA
        hardware on Mac OS.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::texImage2D):
        * platform/graphics/ImageBuffer.h:
        (ImageBuffer):

2012-10-30  Nico Weber  <thakis@chromium.org>

        Fix potential overflow in jpeg exif reader. Found by aedla@google.com.
        https://bugs.webkit.org/show_bug.cgi?id=100320

        Reviewed by Eric Seidel.

        Adding more than 1 element past an array is undefined, so don't do it.

        No test, since in practice ifd will just overflow and `end - ifd` will
        become much larget than 2 and the `if (end - ifd < 2)` a few lines
        down will catch that case.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::readImageOrientation):

2012-10-26  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Add the ValidatedCustomFilterOperation class
        https://bugs.webkit.org/show_bug.cgi?id=100558

        Reviewed by Dean Jackson.

        Added the ValidatedCustomFilterOperation class. The file is now almost empty,
        but more is going to come in the following patches.

        Added the a filter operation type VALIDATED_CUSTOM and updated the compositors to ignore
        such operations for now.
        
        No new tests, there is no new functionality yet.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::filtersCanBeComposited):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::filtersCanBeComposited):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::copyWebCoreFilterOperationsToWebFilterOperations):
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::hasCustomFilter):
        (WebCore::FilterOperations::getOutsets):
        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp: Added.
        (WebCore):
        (WebCore::ValidatedCustomFilterOperation::ValidatedCustomFilterOperation):
        (WebCore::ValidatedCustomFilterOperation::~ValidatedCustomFilterOperation):
        (WebCore::ValidatedCustomFilterOperation::blend):
        * platform/graphics/filters/ValidatedCustomFilterOperation.h: Added.
        (WebCore):
        (ValidatedCustomFilterOperation):
        (WebCore::ValidatedCustomFilterOperation::create):
        (WebCore::ValidatedCustomFilterOperation::affectsOpacity):
        (WebCore::ValidatedCustomFilterOperation::movesPixels):
        (WebCore::ValidatedCustomFilterOperation::blendingNeedsRendererSize):
        (WebCore::ValidatedCustomFilterOperation::operator==):

2012-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Sync up FeatureDefine Configuration Files
        https://bugs.webkit.org/show_bug.cgi?id=100171

        Reviewed by David Kilzer.

        Follow up to better coordinate with iOS feature defines. Make:

          - ENABLE_FILTERS always on
          - ENABLE_INPUT_* iphonesimulator values point to the iphoneos values

        * Configurations/FeatureDefines.xcconfig:

2012-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Sync up FeatureDefine Configuration Files
        https://bugs.webkit.org/show_bug.cgi?id=100171

        Reviewed by David Kilzer.

        Ensure an identical FeatureDefine files across all projects. Changes:

          - ENABLE_CSS_BOX_DECORATION_BREAK should be in all
          - ENABLE_PDFKIT_PLUGIN should be in all
          - ENABLE_RESOLUTION_MEDIA_QUERY should be in all
          - ENABLE_ENCRYPTED_MEDIA should be in all
          - ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING with corrected value
          - Some alphabetical ordering cleanup

        * Configurations/FeatureDefines.xcconfig:

2012-10-30  Andreas Kling  <kling@webkit.org>

        StylePropertySet: Convert more logic to use PropertyReference.
        <http://webkit.org/b/100779>

        Reviewed by Antti Koivisto.

        Rewrite more of the StylePropertySet logic to use PropertyReference instead of CSSProperty.
        This is cleanup before changing the internal storage layout of immutable StylePropertySet.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::cssPropertyMatches):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSStyleDeclaration.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::cssPropertyMatches):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::appendFontLonghandValueIfExplicit):
        (WebCore::StylePropertySet::fontValue):
        (WebCore::StylePropertySet::get4Values):
        (WebCore::StylePropertySet::getPropertyCSSValue):
        (WebCore::StylePropertySet::removeProperty):
        (WebCore::StylePropertySet::propertyIsImportant):
        (WebCore::StylePropertySet::getPropertyShorthand):
        (WebCore::StylePropertySet::isPropertyImplicit):
        (WebCore::StylePropertySet::setProperty):
        (WebCore::StylePropertySet::mergeAndOverrideOnConflict):
        (WebCore::StylePropertySet::findPropertyIndex):
        (WebCore::StylePropertySet::findMutableCSSPropertyWithID):
        (WebCore::StylePropertySet::propertyMatches):
        (WebCore::StylePropertySet::removeEquivalentProperties):
        * css/StylePropertySet.h:
        (WebCore::StylePropertySet::PropertyReference::shorthandID):
        (WebCore::StylePropertySet::PropertyReference::isImplicit):

2012-10-30  Eric Seidel  <eric@webkit.org>

        Teach RenderTable how to use Vector::insert and Vector::append instead of its own custom memmove code
        https://bugs.webkit.org/show_bug.cgi?id=100428

        Reviewed by Julien Chaffraix.

        RenderTable is now like all other clients of Vector instead of being
        needlessly different. :)

        insert, append and grow all use the same expandCapacity logic under the covers
        and Vector::insert uses TypeOperations::moveOverlapping which should use memmove
        by default for unknown types.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::appendColumn):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::ColumnStruct::ColumnStruct):

2012-10-30  Vincent Scheib  <scheib@chromium.org>

        Unreviewed, rolling out r132927.
        http://trac.webkit.org/changeset/132927
        https://bugs.webkit.org/show_bug.cgi?id=100558

        Compile error on Chromium builders

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::filtersCanBeComposited):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::filtersCanBeComposited):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::copyWebCoreFilterOperationsToWebFilterOperations):
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::hasCustomFilter):
        (WebCore::FilterOperations::getOutsets):
        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp: Removed.
        * platform/graphics/filters/ValidatedCustomFilterOperation.h: Removed.

2012-10-30  W. James MacLean  <wjmaclean@chromium.org>

        [chromium] Restrict link highlights to targets that display a hand-cursor
        https://bugs.webkit.org/show_bug.cgi?id=99862

        Reviewed by James Robinson.

        To avoid applying highlights to inappropriate targets, such as large divs with
        click handlers installed, test candidate targets and only highlight them if they
        would normally display a hand cursor on mouse over. This is a heuristic, but has
        been tested and found effective in practice.

        This CL refactors EventHandler::selectCursor() to make the logic for determining
        if CURSOR_AUTO should resolve to CURSOR_POINTER available outside EventHandler.

        Relies on existing cursor tests.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::useHandCursor):
        (WebCore):
        (WebCore::EventHandler::selectCursor):
        * page/EventHandler.h:
        (EventHandler):

2012-10-30  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Remove CookieDatabaseBackingStore::upgradeTableIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=100783

        Reviewed by Yong Li.

        PR 220513.

        Remove CookieDatabaseBackingStore::upgradeTableIfNeeded, it was needed for backwards
        compatibility, but not needed anymore.

        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.cpp:
        (WebCore::CookieDatabaseBackingStore::invokeOpen):
        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h:

2012-10-30  Glenn Adams  <glenn@skynav.com>

        [CSS] Expand -webkit-line-break value space
        https://bugs.webkit.org/show_bug.cgi?id=100739

        Reviewed by Eric Seidel.

        (1) expand -webkit-line-break to include new values defined by CSS3 Text [1], i.e., 'auto', 'strict', 'loose';
        (2) change default (initial) value for -webkit-line-break to 'auto' to match CSS3 Text;
        (3) rename enum EKHTMLLineBreak to LineBreak, renaming enum values appropriately;

        New tests to be added when functionality of new values is added. No rendering behavior change at this time.
        Only externally visible change is default (initial) value returning 'auto' rather than 'normal', for which 3 existing
        tests that were sensitive to this value have been updated. Note that until the functionality for the new values is
        added, any actual use of the new values will be treated as the same as the pre-existing 'normal' value, i.e., the
        default semantics.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Update from kthmlLineBreak() to lineBreak().

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        Update values supported for CSSPropertyWebkitLineBreak.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LineBreak):
        Update LineBreak enumeration values (previously EKHTMLLineBreak).

        * css/CSSValueKeywords.in:
        Update keywords used for -webkit-line-break.

        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        Update names for line break style getter/setter.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        Remove khtml prefix on line break related state.

        * rendering/style/RenderStyle.h:
        Remove khtml prefix on line break related methods. Update to redefined LineBreak
        enumeration type.

        * rendering/style/RenderStyleConstants.h:
        Rename EKHTMLLineBreak enumeration to LineBreak.
        Redefine LineBreak enumeration to include new CSS3 Text modes (auto, loose, strict) and
        use better names.

        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        Remove khtml prefix on line break related state references.

        * rendering/style/StyleRareInheritedData.h:
        (StyleRareInheritedData):
        Remove khtml prefix on line break related state. Widen field to 3 bits to support 8 values,
        of which 5 are now used.

2012-10-30  Antti Koivisto  <antti@apple.com>

        Avoid unnecessary style recalcs on class attribute mutation
        https://bugs.webkit.org/show_bug.cgi?id=100776

        Reviewed by Andreas Kling.

        There is no need to invalidate element style on class attribute change if neither the added
        or removed classes featured in any active stylesheet.

        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::add):
        (WebCore::RuleFeatureSet::clear):
        (WebCore::RuleFeatureSet::reportMemoryUsage):
        * css/RuleFeature.h:
        (RuleFeatureSet):
        * css/RuleSet.cpp:
        (WebCore::collectFeaturesFromSelector):
        
            Collect classes mentioned in CSS selectors the same way ids and attribute names are
            already collected.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::hasSelectorForClass):
        
            Add a method to test if a given class name is mentioned anywhere in stylehseets.

        (WebCore):
        * css/StyleResolver.h:
        * css/StyleScopeResolver.h:
        (WebCore):
        * dom/Element.cpp:
        (WebCore::collectAddedAndRemovedClasses):
        (WebCore):
        (WebCore::Element::classAttributeChanged):
        
            Figure out which classes were added and removed. Test if they are present in any style
            rule and invalidate the style only if they are.

        * dom/SpaceSplitString.cpp:
        (WebCore::SpaceSplitStringData::add):
        (WebCore::SpaceSplitStringData::remove):
        (WebCore::SpaceSplitString::add):
        (WebCore::SpaceSplitString::remove):
        
            Added bool return value to indicate if anything was actually removed. Reorganized 
            the code a bit to avoid unnecessary uniquing when nothing changes.

        * dom/SpaceSplitString.h:
        (SpaceSplitStringData):
        (SpaceSplitString):

2012-10-30  Robert Hogan  <robert@webkit.org>

        white-space: nowrap inline element beside a floated element wraps incorrectly without trailing textnode/newline
        https://bugs.webkit.org/show_bug.cgi?id=29648

        Reviewed by Levi Weintraub.

        A no-wrap child on a line inside an autowrap container should move to the next line if a float doesn't allow
        it to fit. This will happen if there is trailing space after the no-wrap child but not if it's the last renderer
        on the line. This is because nextLineBreak() is only interested in the white-space style of the current renderer 
        and the renderer's next sibling (if there is one) when deciding whether it needs to fit below any floats that
        push it beyond the edge of the container. There isn't any situation in which a no-wrap child shouldn't move 
        below a float on an auto-wrap line though, so this check always needs to respect the container's white-space style too.

        Test: fast/text/whitespace/no-wrap-child-in-auto-wrap-container.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):

2012-10-26  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Add the ValidatedCustomFilterOperation class
        https://bugs.webkit.org/show_bug.cgi?id=100558

        Reviewed by Dean Jackson.

        Added the ValidatedCustomFilterOperation class. The file is now almost empty,
        but more is going to come in the following patches.

        Added the a filter operation type VALIDATED_CUSTOM and updated the compositors to ignore
        such operations for now.
        
        No new tests, there is no new functionality yet.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::filtersCanBeComposited):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::filtersCanBeComposited):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::copyWebCoreFilterOperationsToWebFilterOperations):
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::hasCustomFilter):
        (WebCore::FilterOperations::getOutsets):
        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp: Added.
        (WebCore):
        (WebCore::ValidatedCustomFilterOperation::ValidatedCustomFilterOperation):
        (WebCore::ValidatedCustomFilterOperation::~ValidatedCustomFilterOperation):
        (WebCore::ValidatedCustomFilterOperation::blend):
        * platform/graphics/filters/ValidatedCustomFilterOperation.h: Added.
        (WebCore):
        (ValidatedCustomFilterOperation):
        (WebCore::ValidatedCustomFilterOperation::create):
        (WebCore::ValidatedCustomFilterOperation::affectsOpacity):
        (WebCore::ValidatedCustomFilterOperation::movesPixels):
        (WebCore::ValidatedCustomFilterOperation::blendingNeedsRendererSize):
        (WebCore::ValidatedCustomFilterOperation::operator==):

2012-10-29  Anders Carlsson  <andersca@apple.com>

        Build WebKit as C++11 on Mac
        https://bugs.webkit.org/show_bug.cgi?id=100720

        Reviewed by Daniel Bates.

        * Configurations/Base.xcconfig:
        Add CLANG_CXX_LANGUAGE_STANDARD=gnu++0x.

        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        * platform/graphics/filters/CustomFilterProgramInfo.cpp:
        (WebCore::CustomFilterProgramInfo::hash):
        (WebCore::ProtectionSpaceHash::hash):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::setHTTPBody):
        Add static_casts to prevent implicit type conversions in non-constant initializer lists.
        
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::createDragImage):
        * platform/mac/CursorMac.mm:
        (WebCore::createNamedCursor):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetContentsSize):
        Use NSMakePoint to prevent implicit type conversions in non-constant initializer lists.

        * platform/mac/CookieJar.mm:
        (WebCore::cookiesEnabled):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::shouldRelaxThirdPartyCookiePolicy):
        Add explicit casts to NSHTTPCookieAcceptPolicy.

        * platform/mac/WebCoreNSURLExtras.h:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::URLByTruncatingOneCharacterBeforeComponent):
        (WebCore::dataForURLComponentType):
        * platform/network/ProtectionSpaceHash.h:
        Use CFIndex instead of CFURLComponentType, the enum can be mangled differently in some cases, and these
        functions are exported from WebCore.

2012-10-30  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12395187> REGRESSION (r121299): OS X Text Replacement forces cursor out of text fields
        https://bugs.webkit.org/show_bug.cgi?id=100768

        Reviewed by Anders Carlsson.

        r121299 introduced code to restore the paragraph range by saving its length and start offset
        relative to the document. The latter was obtained by iterating over the range starting at
        the beginning of the document and ending at the beginning of the paragraph range. However,
        such a range could not be constructed if the paragraph range was contained in a shadow DOM,
        since a range must have both its endpoints within the same shadow tree (or not in a shadow
        tree).

        Test: platform/mac/editing/spelling/autocorrection-in-textarea.html

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor): Changed paragraphStartIndex to be relative to the
        root container of paragraphRange, using the same logic used by
        checkForDifferentRootContainer() in Range.cpp.

2012-10-30  Dan Carney  <dcarney@google.com>

        Remove ensureAuxiliaryContext
        https://bugs.webkit.org/show_bug.cgi?id=99975

        Reviewed by Adam Barth.

        Removed auxilliaryContext as use if it is problematic in IDB.

        No new tests. No change in functionality.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::setValueReady):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::generateIndexKeysForValue):
        (WebCore::IDBObjectStore::put):
        (WebCore):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::deserializeIDBValue):
        (WebCore::injectIDBKeyIntoScriptValue):
        * bindings/v8/IDBBindingUtilities.h:
        (WebCore):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toV8Context):
        (WebCore):
        * bindings/v8/V8Binding.h:
        (WebCore):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore):
        * bindings/v8/V8PerIsolateData.h:

2012-10-30  Huang Dongsung  <luxtella@company100.net>

        [CSS Shaders] Add CustomFilterRenderer to reuse this class by Accelerated Compositing.
        https://bugs.webkit.org/show_bug.cgi?id=98989

        Reviewed by Dean Jackson.

        Extract CustomFilterRenderer class from the rendering part of FECustomFilter.
        FECustomFilter now plays a role in extending FilterEffect and delegates
        rendering CSS Shaders to CustomFilterRenderer.

        CustomFilterRenderer does not know Filter and FilterEffect. We can
        create a CustomFilterRenderer instance with only GraphicsContext3D and
        CustomFilterValidatedProgram. It means that Accelerated Compositing can
        create the CustomFilterRenderer instance if Accelerated Compositing has
        GraphicsContext3D and CustomFilterOperation, and it is already possible.

        This patch prepares to enable CSS Shaders on Accelerated Compositing.

        No new tests. Covered by css3/filters/custom

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/CustomFilterRenderer.cpp: Added.
        (WebCore):
        (WebCore::orthogonalProjectionMatrix):
        (WebCore::CustomFilterRenderer::create):
        (WebCore::CustomFilterRenderer::CustomFilterRenderer):
        (WebCore::CustomFilterRenderer::~CustomFilterRenderer):
        (WebCore::CustomFilterRenderer::premultipliedAlpha):
        (WebCore::CustomFilterRenderer::programNeedsInputTexture):
        (WebCore::CustomFilterRenderer::draw):
        (WebCore::CustomFilterRenderer::prepareForDrawing):
        (WebCore::CustomFilterRenderer::initializeCompiledProgramIfNeeded):
        (WebCore::CustomFilterRenderer::initializeMeshIfNeeded):
        (WebCore::CustomFilterRenderer::bindVertexAttribute):
        (WebCore::CustomFilterRenderer::unbindVertexAttribute):
        (WebCore::CustomFilterRenderer::bindProgramArrayParameters):
        (WebCore::CustomFilterRenderer::bindProgramNumberParameters):
        (WebCore::CustomFilterRenderer::bindProgramTransformParameter):
        (WebCore::CustomFilterRenderer::bindProgramParameters):
        (WebCore::CustomFilterRenderer::bindProgramAndBuffers):
        (WebCore::CustomFilterRenderer::unbindVertexAttributes):
        * platform/graphics/filters/CustomFilterRenderer.h: Copied from Source/WebCore/platform/graphics/filters/FECustomFilter.h.
        (WebCore):
        (CustomFilterRenderer):
          CustomFilterRenderer renders custom filters in GPU using a
          GraphicsContext3D.
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::FECustomFilter):
        (WebCore::FECustomFilter::create):
        (WebCore::FECustomFilter::deleteRenderBuffers):
        (WebCore::FECustomFilter::drawFilterMesh):
        (WebCore::FECustomFilter::prepareForDrawing):
        (WebCore::FECustomFilter::applyShader):
        (WebCore::FECustomFilter::resolveMultisampleBuffer):
        (WebCore::FECustomFilter::resizeMultisampleBuffers):
        (WebCore::FECustomFilter::resizeContext):
        * platform/graphics/filters/FECustomFilter.h:
        (WebCore):
        (FECustomFilter):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::createCustomFilterEffect):

2012-10-30  Mike West  <mkwst@chromium.org>

        Web Inspector: Associate console messages with the requests that caused them.
        https://bugs.webkit.org/show_bug.cgi?id=99941

        Reviewed by Pavel Feldman.

        The inspector currently supports the concept of a request's "initiator"
        in order to add context to console messages that are generated in
        response to a specific request. The initiator is used as the message's
        anchor link iff a requestID is present, and no stack trace is present.

        Currently, this functionality is only exposed to three specific
        callsites: 'InspectorConsoleAgent::didFinishXHRLoading',
        'InspectorConsoleAgent::didReceiveResponse', and
        'InspectorConsoleAgent::didFailLoading'. This patch adds a generic
        mechanism to associate requests with console messages by passing the
        request's identifier through 'ScriptExecutionContext::addConsoleMessage'
        or 'Console::addMessage' when relevant.

        This patch should have no visible changes. It just installs some new
        piping, and adjusts the three methods mentioned above to use it.
        Existing tests shouldn't break.

        * dom/Document.cpp:
        (WebCore::Document::addMessage):
        * dom/Document.h:
        (Document):
            Add a 'requestIdentifier' parameter (defaulting to 0), and pipe it
            through to Console::addMessage.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::addConsoleMessage):
        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
            Add a 'requestIdentifier' parameter (defaulting to 0), and pipe it
            through to the subclass' addMessage method.
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
            Accept an unsigned long instead of a string, and move the conversion
            from WebCore request identifiers to Inspector request identifiers
            into ConsoleMessage.
        * inspector/ConsoleMessage.h:
        (ConsoleMessage):
            Add 'requestIdentifier' (defaulting to 0) to the
            ConsoleMessage constructor that accepts a ScriptCallStack (it was
            already part of the constructor that accepted a line number).
        * inspector/IdentifiersFactory.cpp:
        (WebCore::IdentifiersFactory::requestId):
            If the provided request identifier is 0, return an empty string.
            This simplifies the logic at the callsite.
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
            Add a 'requestIdentifier' parameter (defaulting to 0), and pipe it
            through to the 'ConsoleMessage' constructor after converting it to
            an internal identifier via 'IdentifiersFactor::requestId'.
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
            Use the new 'requestIdentifier' parameter on addMessageToConsole
            rather than replicating the behavior in each of these three methods.
        * inspector/InspectorConsoleAgent.h:
        (InspectorConsoleAgent):
            Add a 'requestIdentifier' parameter (defaulting to 0).
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
            Add a 'requestIdentifier' parameter (defaulting to 0), and pipe it
            through to lower levels of the stack.
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        * page/Console.h:
        (Console):
            Add a 'requestIdentifier' parameter (defaulting to 0), and pipe it
            through to 'InspectorInstrumentation::addMessageToConsole'.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::addMessageToWorkerConsole):
        * workers/WorkerContext.h:
        (WorkerContext):
            Add a 'requestIdentifier' parameter (defaulting to 0), and pipe it
            through to 'InspectorInstrumentation::addMessageToConsole'.

2012-10-29  Anders Carlsson  <andersca@apple.com>

        String::createCFString should return a RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=100419

        Reviewed by Andreas Kling.

        Update callers of String::createCFString.

        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * html/HTMLMediaElement.cpp:
        (WebCore::createFileURLForApplicationCacheResource):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        * platform/LocalizedStrings.cpp:
        (WebCore::formatLocalizedString):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::keygenKeychainItemName):
        (WebCore::imageTitle):
        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::mainBundleIsEqualTo):
        * platform/cf/FileSystemCF.cpp:
        (WebCore::fileSystemRepresentation):
        (WebCore::pathAsURL):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimation::PlatformCAAnimation):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (resubmitAllAnimations):
        (PlatformCALayer::addAnimationForKey):
        (PlatformCALayer::removeAnimationForKey):
        (PlatformCALayer::setName):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::updateTiles):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::utiFromMIMEType):
        * platform/graphics/cg/ImageSourceCGMac.mm:
        (WebCore::MIMETypeForImageSourceType):
        (WebCore::preferredExtensionForImageSourceType):
        * platform/mac/ClipboardMac.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):
        (WebCore::utiTypeFromCocoaType):
        * platform/mac/SSLKeyGeneratorMac.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::createCF):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::setCookies):
        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::DNSResolveQueue::platformResolve):
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::cfError):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::setDefaultMIMEType):
        (WebCore::willSendRequest):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::setPrivateBrowsingEnabled):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::createStreams):
        (WebCore::SocketStreamHandle::addCONNECTCredentials):
        (WebCore::SocketStreamHandle::copyCFStreamDescription):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary):
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForKey):
        * platform/text/cf/StringCF.cpp:
        (WTF::String::createCFString):
        * platform/text/cf/StringImplCF.cpp:
        (WTF::StringImpl::createCFString):
        * platform/text/mac/StringImplMac.mm:
        (WTF::StringImpl::operator NSString *):
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::encode):
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::autosaveKey):
        (WebCore::SearchPopupMenuWin::saveRecentSearches):

2012-10-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Support embedded SVG objects in AX tree
        https://bugs.webkit.org/show_bug.cgi?id=97571

        Reviewed by Tim Horton.

        This patch allows an SVG image from another resource to be hooked into the AX
        hierarchy. This is done by creating an AX wrapper for the root SVG that holds onto
        its native parent image. The SVGChromeClient is then used to connect to this SVG resource.

        Test: accessibility/svg-remote-element.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityAllInOne.cpp:
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isAccessibilitySVGRoot):
        (AccessibilityObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::detach):
        (WebCore::AccessibilityRenderObject::offsetBoundingBoxForRemoteSVGElement):
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        (WebCore::AccessibilityRenderObject::remoteSVGElementHitTest):
        (WebCore::AccessibilityRenderObject::elementAccessibilityHitTest):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::isSVGImage):
        (WebCore::AccessibilityRenderObject::detachRemoteSVGRoot):
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/AccessibilitySVGRoot.cpp: Added.
        (WebCore::AccessibilitySVGRoot::AccessibilitySVGRoot):
        (WebCore::AccessibilitySVGRoot::~AccessibilitySVGRoot):
        (WebCore::AccessibilitySVGRoot::create):
        (WebCore::AccessibilitySVGRoot::parentObject):
        * accessibility/AccessibilitySVGRoot.h: Added.
        (AccessibilitySVGRoot): Class provides ability to wrap the SVG root of a remote accessibility element.
        (WebCore::AccessibilitySVGRoot::setParent):
        (WebCore::AccessibilitySVGRoot::isAccessibilitySVGRoot):
        (WebCore::toAccessibilitySVGRoot):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper position]): The position of AX elements within a remote SVG element needs to be handled 
        in a special manner.
        (createAccessibilityRoleMap):
        * loader/EmptyClients.h:
        (EmptyChromeClient): Expose isEmptyChromeClient() so Accessibility will know when to apply different policies for finding
        the accessibility bounding rect of elements.
        (WebCore::EmptyChromeClient::isEmptyChromeClient):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::isEmptyChromeClient):
        (ChromeClient):
        * svg/graphics/SVGImage.cpp:
        * svg/graphics/SVGImageChromeClient.h: Added.
        (SVGImageChromeClient): Expose the SVGImageChromeClient so that Accessibility can reference its image.
        (WebCore::SVGImageChromeClient::SVGImageChromeClient):
        (WebCore::SVGImageChromeClient::isSVGImageChromeClient):
        (WebCore::SVGImageChromeClient::image):
        (WebCore::SVGImageChromeClient::chromeDestroyed):
        (WebCore::SVGImageChromeClient::invalidateContentsAndRootView):
        (WebCore::toSVGImageChromeClient):

2012-10-30  Dan Carney  <dcarney@google.com>

        add 7 bit strings capabilities to the v8 binding layer
        https://bugs.webkit.org/show_bug.cgi?id=91850

        Reviewed by Adam Barth.

        This change enables the v8 binding layer to make use of webkit's
        8 bit string capabilities. Using 8 bit strings leads to certain
        benchmark performance improvemnts as can be seen in
        https://bug-91850-attachments.webkit.org/attachment.cgi?id=163334.

        No new tests. Test coverage already extensive.

        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::visitExternalStrings):
        * bindings/v8/V8StringResource.cpp:
        (StringTraits):
        (WebCore::false):
        (WebCore):
        (WebCore::true):
        (WebCore::v8StringToWebCoreString):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::makeExternalString):
        (WebCore::WebCoreStringResourceBase::visitStrings):
        * bindings/v8/V8ValueCache.h:
        (WebCore::WebCoreStringResourceBase::WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::~WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::atomicString):
        (WebCoreStringResourceBase):
        (WebCore::WebCoreStringResourceBase::memoryConsumption):

2012-10-30  Christophe Dumez  <christophe.dumez@intel.com>

        [AC] Fix compilation warnings when enabling Accelerated Compositing
        https://bugs.webkit.org/show_bug.cgi?id=100741

        Reviewed by Kenneth Rohde Christiansen.

        Fix a few compilation warnings when building EFL port
        with accelerated compositing enabled.

        No new tests, no behavior change.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::resolveGLMethods):
        (WebCore::GraphicsSurface::platformCopyToGLTexture):
        (WebCore::GraphicsSurface::platformLock):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):

2012-10-30  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Animations jump when the page is suspended
        https://bugs.webkit.org/show_bug.cgi?id=100673

        Reviewed by Kenneth Rohde Christiansen.

        GraphicsLayerAnimations::pause() should accept time from start and not an offset.

        We need to support the "freeze" API before this can be reliably tested.
        See https://bugs.webkit.org/show_bug.cgi?id=100703.

        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore::GraphicsLayerAnimation::pause):

2012-10-30  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [Qt][EFL][AC] While Using WebGL, MiniBrowser segfaults on Refreshing the page.
        https://bugs.webkit.org/show_bug.cgi?id=100639.

        Reviewed by Kenneth Rohde Christiansen.

        TextureMapperSurfaceBackingStore can import textures from a GraphicSurface.
        In such cases GraphicsSurfaceGLX creates an XPixmap to read texture content
        from a given WindowId, but doesn't create any new window.
        However, OffScreenRootWindow always tries to unmap window (in its destructor) resulting in segfault.
        With this patch OffScreenRootWindow would check for a valid window before trying to unmap it.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):

2012-10-30  Emil A Eklund  <eae@chromium.org>

        [subixel] Change LineWidth::shrinkAvailableWidthForNewFloatIfNeeded to not pixel snap
        https://bugs.webkit.org/show_bug.cgi?id=100742

        Reviewed by Levi Weintraub.

        As we no longer pixel snap values when computing the current width for a
        line we should not do it in shrinkAvailableWidthForNewFloatIfNeeded
        either.

        Test: fast/sub-pixel/float-wrap-zoom.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::LineWidth): Remove unnecessary ifdef.
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded): Use float values instead of pixel snapped/floored values as the line width calculations uses floats.

2012-10-30  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Reject vertex shaders with custom attributes
        https://bugs.webkit.org/show_bug.cgi?id=98973

        Reviewed by Dean Jackson.

        Improved CSS Custom Filters shader validation. With this patch:
        (1) Shaders with custom attributes do not execute (e.g. attribute float my_attribute;).
        (2) Shaders with a_triangleCoord defined do not execute with an attached mesh.

        Most of the changes are from renaming CustomFilterOperation::MeshType to
        CustomFilterMeshType, and moving the enumeration to CustomFilterConstants.h. This avoids
        pulling in CustomFilterOperation for classes that only care about the mesh type.

        Note that in CSS Custom Filters, the a_triangleCoord attribute is only available in detached
        meshes. In detached meshes, no vertices are shared between triangles. Thus, each vertex
        belongs to a specific triangle, which a_triangleCoord identifies. In attached meshes,
        vertices can belong to many triangles, which a_triangleCoord cannot identify because it's
        only a vec3.

        Tests:
        Add two new checks to the test file:
            css3/filters/custom/invalid-custom-filter-attribute-types.html
        Add two new shaders:
            css3/filters/resources/invalid-custom-attribute.vs
            css3/filters/resources/invalid-a-triangle-coord-with-attached-mesh.vs

        * WebCore.xcodeproj/project.pbxproj:
            Update a broken reference to CustomFilterConstants.h in the Xcode project file.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
            Replace CustomFilterOperation::MeshType with CustomFilterMeshType.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createCustomFilterOperation): Ditto.
        * platform/graphics/filters/CustomFilterConstants.h:
            Add CustomFilterMeshType enum to share across the Custom Filters codebase, so that we
            don't have to include CustomFilterOperation just to access the old
            CustomFilterOperation::MeshType enum.
        * platform/graphics/filters/CustomFilterMesh.cpp:
        (WebCore::CustomFilterMesh::CustomFilterMesh):
            Replace CustomFilterOperation::MeshType with CustomFilterMeshType.
        * platform/graphics/filters/CustomFilterMesh.h:
        (WebCore::CustomFilterMesh::create): Ditto.
        (WebCore::CustomFilterMesh::meshType): Ditto.
        (CustomFilterMesh): Ditto.
        * platform/graphics/filters/CustomFilterMeshGenerator.cpp: Ditto.
        (WebCore::CustomFilterMeshGenerator::CustomFilterMeshGenerator): Ditto.
        (WebCore::CustomFilterMeshGenerator::dumpBuffers): Ditto.
        * platform/graphics/filters/CustomFilterMeshGenerator.h:
        (CustomFilterMeshGenerator): Ditto.
        (WebCore::CustomFilterMeshGenerator::floatsPerVertex): Ditto.
        (WebCore::CustomFilterMeshGenerator::verticesCount): Ditto.
        * platform/graphics/filters/CustomFilterOperation.cpp: 
        (WebCore::CustomFilterOperation::CustomFilterOperation): Ditto.
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::create): Ditto.
        (WebCore::CustomFilterOperation::meshType): Ditto.
        (CustomFilterOperation): Ditto.
        * platform/graphics/filters/CustomFilterProgram.cpp:
        (WebCore::CustomFilterProgram::CustomFilterProgram):
            Add a meshType constructor parameter because the program now needs to know the meshType
            to properly validate.
        (WebCore::CustomFilterProgram::programInfo):
            Pass meshType to CustomFilterProgram constructor.
        (WebCore::CustomFilterProgram::operator==):
            Check the meshType in the equals operator.
        * platform/graphics/filters/CustomFilterProgram.h:
            Make vertexShaderString() and fragmentShaderString() public so that we don't have to ask
            for a programInfo object just to get the shader strings in
            CoordinatedGraphicsArgumentCoders.cpp.
        * platform/graphics/filters/CustomFilterProgramInfo.cpp:
        (WebCore::CustomFilterProgramInfo::CustomFilterProgramInfo):
            Add a meshType constructor parameter.       
        (WebCore::CustomFilterProgramInfo::hash):
            Include the meshType in the validated program hash, since the same shader code can pass
            or fail validation based on the meshType.
        (WebCore::CustomFilterProgramInfo::operator==):
            Check the meshType in the equals operator.
        * platform/graphics/filters/CustomFilterProgramInfo.h:
        (CustomFilterProgramInfo):
            Update method prototype.
        (WebCore::CustomFilterProgramInfo::meshType):
            Add meshType getter.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::validateSymbols):
            If the author defines attribute that is is not found in the built-in attribute map,
            reject the shader.
            If the author defines a_triangleCoord without a detached mesh type, reject the shader.
            Also, make this previously file-static function into a method of
            CustomFilterValidatedProgram because it now needs to access the m_meshType.
        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        (CustomFilterValidatedProgram):
            Add a meshType constructor parameter because the program now needs to know the meshType
            to properly validate.
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::FECustomFilter):
            Replace CustomFilterOperation::MeshType with CustomFilterMeshType.
        (WebCore::FECustomFilter::create): Ditto.
        (WebCore::FECustomFilter::bindProgramAndBuffers): Ditto.
        (WebCore::FECustomFilter::unbindVertexAttributes): Ditto.
        * platform/graphics/filters/FECustomFilter.h:
        (FECustomFilter): Ditto.
        * rendering/style/StyleCustomFilterProgram.h:
        (WebCore::StyleCustomFilterProgram::create):
            Add a meshType constructor parameter.
        (WebCore::StyleCustomFilterProgram::StyleCustomFilterProgram): Ditto.

2012-10-30  Andrey Lushnikov  <lushnikov@google.com>

        Web Inspector: adds isOwnProperty to remote protocol
        https://bugs.webkit.org/show_bug.cgi?id=100664

        Reviewed by Pavel Feldman.

        Test: inspector/runtime/runtime-getProperties-isOwnProperty.html

        Adds requested 'isOwn' property to the 'PropertyDescriptor' class of the
        remote debugging protocol. 

        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:

2012-10-30  Zeno Albisser  <zeno@webkit.org>

        [Qt][Win] BitmapTextureGL::updateContents() broken after r132019.
        https://bugs.webkit.org/show_bug.cgi?id=100680

        When creating a temporary for swizzling the image data,
        the temporary will have the target size.
        Therefore no offset within the available image data
        shall be applied in this case.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):

2012-10-30  Kent Tamura  <tkent@chromium.org>

        Remove unused code for old input[type=date] UI
        https://bugs.webkit.org/show_bug.cgi?id=100734

        Reviewed by Hajime Morita.

        The old input[type=date] UI used in Google Chrome 20-23 (text field with
        a fixed placeholder) was replaced with ENABLE_INPUT_MULTIPLE_FIELDS_UI.

        No new tests because of no behavior changes.

        * html/DateInputType.cpp: Remove ENABLE_INPUT_TYPE_DATE_LEGACY_UI code path.
        * html/DateInputType.h: Ditto.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::supportsPlaceholder):
        Remove fixed-placeholder feature.
        * html/HTMLInputElement.h:
        (HTMLInputElement): Ditto.
        * html/HTMLTextFormControlElement.h:
        (HTMLTextFormControlElement): isPlaceholderEmpty() is not needed to be virtual
        * html/InputType.cpp: Remove fixed-placeholder feature.
        * html/InputType.h: Ditto.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::updatePlaceholderText): Ditto.

        * platform/text/PlatformLocale.h:
        (Locale): Remove dateFormatText.
        * platform/text/LocaleICU.cpp: Ditto.
        * platform/text/LocaleICU.h: Ditto.
        * platform/text/LocaleNone.cpp: Ditto.
        * platform/text/mac/LocaleMac.h: Ditto.
        * platform/text/mac/LocaleMac.mm: Ditto.
        * platform/text/win/LocaleWin.cpp: Ditto.
        * platform/text/win/LocaleWin.h: Ditto.
        * platform/LocalizedStrings.h:
        (WebCore): Remove unused functions; calendarTodayText,
        calendarClearText, dateFormatYearText, dateFormatMonthText,
        dateFormatDayInMonthText

2012-10-30  Kent Tamura  <tkent@chromium.org>

        Fix crash by calendar picker or suggestion picker
        https://bugs.webkit.org/show_bug.cgi?id=100728

        Reviewed by Hajime Morita.

        Change DateTimeChooser so that it is ref-coutned.

        Test: platform/chromium/fast/forms/calendar-picker/calendar-picker-type-change-onchange.html

        * platform/DateTimeChooser.h: Made DateTimeChooser RefCounted.
        * page/ChromeClient.h:
        (ChromeClient): openDateTimeChooser should return PassRefPtr<DateTimeChooser>.
        * loader/EmptyClients.h:
        (EmptyChromeClient): Follow the above change.
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::openDateTimeChooser): Ditto.

        * html/shadow/PickerIndicatorElement.h:
        (PickerIndicatorElement): Hold DateTimeChooser in RefPtr<DateTimeChooser>.
        * html/shadow/PickerIndicatorElement.cpp:
        (WebCore::PickerIndicatorElement::PickerIndicatorElement):
        Remove unnecessary initialization.

2012-10-30  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: promote "cpu activity" out of experiment
        https://bugs.webkit.org/show_bug.cgi?id=100726

        Reviewed by Pavel Feldman.

        1. CPU actibity bars redesigned
        2. Experiment setting removed
        3. Feature setting added

        * English.lproj/localizedStrings.js: Updated setting label.
        * inspector/front-end/Settings.js: Replaced experiment with setting.
        * inspector/front-end/SettingsScreen.js: Added new setting.
        * inspector/front-end/TimelinePanel.js: Update cpu bars appearance.
        * inspector/front-end/timelinePanel.css: Ditto.

2012-10-30  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Change the default compositing mode and the default CSS value for <fragmentShader>
        https://bugs.webkit.org/show_bug.cgi?id=94020

        Reviewed by Dean Jackson.

        The default compositing mode has been changed from "normal source-over" to
        "normal source-atop". This applies to the default fragment shader that will
        kick in when there is no explicit fragment shader or mix function defined.

        This has required to update all the existing tests; the dummy empty fragment
        shader has also been removed because not needed.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter): An existence check
        for the fragment shader has been added.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createCustomFilterOperation): The default program
        has been updated: PROGRAM_TYPE_BLENDS_TEXTURE (compositing enabled) now is
        the default.
        * platform/graphics/filters/CustomFilterProgramInfo.h:
        (WebCore::CustomFilterProgramMixSettings::CustomFilterProgramMixSettings):
        New CustomFilterProgramMixSettings defaults to "source-atop" composite
        operator.

2012-10-30  Ádám Kallai  <kadam@inf.u-szeged.hu>

        [Qt][Mac] Unreviewed build fix.
        https://bugs.webkit.org/show_bug.cgi?id=100727.

        Speculative build fix after 132858. Include missing CoreFoundation/CoreFoundation.h header.

        * platform/text/cf/AtomicStringCF.cpp:

2012-10-30  Gabor Rapcsanyi  <rgabor@webkit.org>

        Optimize vclip for NEON in VectorMath
        https://bugs.webkit.org/show_bug.cgi?id=100737

        Reviewed by Zoltan Herczeg.

        Speed up vclip in VectorMath with NEON intrinsics.

        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vclip):

2012-10-30  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Software and composited filters should have a common path
        https://bugs.webkit.org/show_bug.cgi?id=100532

        Reviewed by Dean Jackson.

        Added computeFilterOperations as a common method between the software filters
        and hardware composited ones. The method rejects custom filters that are not
        loaded yet. In bug 100533 it will also convert the CustomFilterOperation to a 
        ValidatedCustomFilterOperation. That will help us keep the loading and verification 
        code for the custom filters common across all the ports.

        No new tests, just refactoring existing code.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeFilterOperations):
        (WebCore):
        (WebCore::RenderLayer::updateOrRemoveFilterEffect):
        * rendering/RenderLayer.h:
        (WebCore):
        (RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateFilters):

2012-10-30  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Implement native memory snapshot grid view
        https://bugs.webkit.org/show_bug.cgi?id=100656

        Native memory snapshots are now shown as an expandable tree form
        using the grid control.

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.NativeMemorySnapshotView):
        (WebInspector.NativeSnapshotDataGrid):
        (WebInspector.NativeSnapshotNode):
        (WebInspector.NativeSnapshotNode.prototype.createCell):
        (WebInspector.NativeSnapshotNode.prototype._createSizeCell):
        (WebInspector.NativeSnapshotNode.prototype._populate):
        (WebInspector.MemoryBlockViewProperties._initialize):
        (WebInspector.MemoryBlockViewProperties._forMemoryBlock):
        * inspector/front-end/dataGrid.css:
        (.data-grid td):
        * inspector/front-end/nativeMemoryProfiler.css:
        (.memory-bar-chart-bar):
        (.native-snapshot-view):
        (.native-snapshot-view.visible):
        (.native-snapshot-view .data-grid):
        (.native-snapshot-view .data-grid table):
        (.native-snapshot-view .data-grid div.size-text):
        (.native-snapshot-view .data-grid div.size-bar):
        (.native-snapshot-view .data-grid div.percent-text):

2012-10-30  Zoltan Nyul  <zoltan.nyul@intel.com>

        3d rotation with [0, 0, 0] direction vector should not be applied
        https://bugs.webkit.org/show_bug.cgi?id=100733

        Reviewed by Levi Weintraub.

        As stated in the specification (http://dev.w3.org/csswg/css3-3d-transforms/#transform-functions),
        a direction vector that cannot be normalized, such as [0, 0, 0], will cause the rotation to not be applied,
        but webkit applies it with [1, 0, 0] direction vector.

        Test: transforms/3d/general/3dtransform-values.html

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::rotate3d):

2012-10-30  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: report actual object address for CachedResourceClients
        https://bugs.webkit.org/show_bug.cgi?id=100659

        Reviewed by Alexander Pavlov.

        Skipped pointers to objects that are not allocated on the heap directly.

        To test this we need to compare addresses of objects traversed by the memory
        insrumentation with those allocated by the memory allocator. The latter set
        should include the former one.

        * css/StyleResolver.cpp:
        (WTF): skip pointers to RuleData structures as they are stored by value in RuleSet
        objects and should not be reported separately.
        * loader/cache/CachedResource.cpp:
        (WTF): do not report memory occupied by CachedResourceClients as objects implementing
        the interface may have address which differ from CachedResourceClient*. The clients
        should be reachable from their instrumented owners where we know exact type of the
        clients and hence can figure correct address.

2012-10-29  Shinya Kawanaka  <shinyak@chromium.org>

        [Refatoring] Remove ElementShadow::insertionPointFor
        https://bugs.webkit.org/show_bug.cgi?id=100625

        Reviewed by Hajime Morita.

        Now that ElementShadow::insertionPointFor does not do any special things, and it's only used in
        ComposedShadowTreeWalker. So we can remove it.

        No new tests, simple refactoring.

        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::resolveReprojection):
        (WebCore::AncestorChainWalker::parent):
        * dom/ElementShadow.cpp:
        * dom/ElementShadow.h:
        (ElementShadow):
        * dom/ShadowRoot.h: ShadowRoot has insertionPointFor declaration, but we don't have any implementation.
        We should remove it.

2012-10-29  Andy Estes  <aestes@apple.com>

        Fix a typo that caused SVG external resources to be blocked on
        platforms other than Chromium.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):

2012-10-29  Keishi Hattori  <keishi@webkit.org>

        NSLocale leaks in LocaleMac
        https://bugs.webkit.org/show_bug.cgi?id=97628

        Reviewed by Kent Tamura.

        We need to adopt the NSLocale object so it doesn't leak and
        determineLocale() should return a NSLocale without additional retain.

        No new tests.

        * platform/text/mac/LocaleMac.mm:
        (WebCore::determineLocale): Returns a RetainPtr<NSLocale>.
        (WebCore::Locale::create):
        (WebCore::LocaleMac::LocaleMac): m_locale should adopt the NSLocale object.
        (WebCore::LocaleMac::create): LocaleMac constructor takes NSLocale without additional retain.

2012-10-29  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Disable redirect to data scheme for potential fishing.
        https://bugs.webkit.org/show_bug.cgi?id=100713

        Reviewed by George Staikos.

        We will disable redirect to data scheme to avoid potential security concern, 
        described in klevjers.com/papers/phishing.pdf.


        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleRedirect):

2012-10-29  Vincent Scheib  <scheib@chromium.org>

        Unreviewed, rolling out r132845.
        http://trac.webkit.org/changeset/132845
        https://bugs.webkit.org/show_bug.cgi?id=99975

        Broke chromium builds, linker errors from
        IDBBindingUtilitiesTest

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.h:
        (IDBRequest):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore):
        (WebCore::deserializeIDBValue):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::idbKeyToScriptValue):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::ensureAuxiliaryContext):
        (WebCore):
        * bindings/v8/V8PerIsolateData.h:
        (V8PerIsolateData):

2012-10-29  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Simplify Xcode configuration settings that used to vary between OS versions.

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/WebCore.xcconfig:

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Remove references to unsupported OS and Xcode versions.

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Removed.
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebCore.xcconfig:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

2012-10-29  Anders Carlsson  <andersca@apple.com>

        AtomicString(CFStringRef) shouldn't unconditionally create a StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=100701

        Reviewed by Dan Bernstein.

        * WebCore.exp.in:
        Export AtomicString::add(CFStringRef).

        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add AtomicStringCF.cpp 

        * platform/text/cf/AtomicStringCF.cpp: Added.
        (WTF::AtomicString::add):
        When trying to add the atomic string to the table, first try to get a Latin-1 pointer
        from the string. Second, try to get a Unicode pointer from the string.
        If that also fails, copy the string to a temporary unicode buffer and add it from there.

        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForKey):
        Update for AtomicString::createCFString being removed.

2012-10-25  Stephen Chenney  <schenney@chromium.org>

        feImage should not be allowed to self reference
        https://bugs.webkit.org/show_bug.cgi?id=94652

        Reviewed by Eric Seidel.

        Add cycle detection for SVG filter application, and also fix a problem
        with graphics context restore when filters are applied. This also
        converts the flags in FilterData to a state tracking system, as the
        number of flags was getting messy and only one flag is valid at any given time.

        Test: svg/filters/feImage-self-and-other-referencing.html

        * rendering/svg/RenderSVGResourceFilter.cpp: Convert to new FilterData
        state management and enable cycle detection.
        (WebCore):
        (WebCore::RenderSVGResourceFilter::removeClientFromCache): Change isBuilt and markedForRemoval flags to state enums.
        (WebCore::RenderSVGResourceFilter::applyResource): Change flags to state enums and detect cycles.
        (WebCore::RenderSVGResourceFilter::postApplyResource): Change flags to state and add handling
        for the various states.
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged): Change isBuilt flag to state enums.
        * rendering/svg/RenderSVGResourceFilter.h:
        (WebCore::FilterData::FilterData):
        (FilterData): Convert to a state tracking system.
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced): Add a block around the
        SVGRenderingContext so that it applies the filter and reverts the
        context before the calling method restores the context.

2012-10-29  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12592716> REGRESSION (r132545): With full-page accelerated drawing, a
        reproducible hang occurs at <http://www.cbsnews.com/stories/2010/01/24/ftn/main6136386.shtml>.

        Reviewed by Anders Carlsson.

        Work around <rdar://problem/12584492> by limiting the scope of the fix for <http://webkit.org/b/100413>.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipOut): Reverted to using CGContextGetClipBoundingBox() rather
        than CGRectInfinite when the context is accelerated and has a transform that is not just
        a translation or a scale.

2012-10-29  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Simplify AuthenticationChallengeManager::instance
        https://bugs.webkit.org/show_bug.cgi?id=100614

        Reviewed by Yong Li.
        Internally reviewed by Lyon Chen.

        Use a standard Singleton pattern here, this makes sure we create lazily.

        * platform/blackberry/AuthenticationChallengeManager.cpp:
        (WebCore):
        * platform/blackberry/AuthenticationChallengeManager.h:
        (AuthenticationChallengeManager):

2012-10-29  Adam Barth  <abarth@webkit.org>

        Block SVG external references pending a security review
        https://bugs.webkit.org/show_bug.cgi?id=100635

        Reviewed by Eric Seidel.

        We need to do a security review of loading external SVG references
        before we're sure that it is safe.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):

2012-10-29  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Crash on checking version of corrupt backing store
        https://bugs.webkit.org/show_bug.cgi?id=100692

        Reviewed by Tony Chang.

        If the backing store fails to open (due to corruption, non-writeable disk, etc)
        the subsequent schema version check dereferences a null pointer. Fix to only
        do the schema check if the database opened.

        Chromium tests will be included with crrev.com/11196029

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::open):

2012-10-29  Philip Rogers  <pdr@google.com>

        Let SVGElements have pending resources.
        https://bugs.webkit.org/show_bug.cgi?id=99694

        Reviewed by Eric Seidel.

        Our SVG pending resource tracking is used for handling dynamic id changes. For example,
        if an SVG element references an id that is not yet in the document (or has been removed),
        the SVG element will be 'pending' an id. When styled elements are inserted into
        the document, buildPendingResourcesIfNeeded() is called to force any pending elements
        to resolve their dependencies. Only SVGStyledElement targets can be referenced using
        this infrastructure, and that is not changed with this patch.

        Previously, only SVGStyledElements could have pending resources. Some examples of where
        this is violated are SVGAnimateElement and SVGMPathElement which are not a styled elements
        but which can have pending references (they can reference styled elements and
        paths, respectively). This patch changes the pending resource handling to allow
        any SVGElement to have pending resources.

        This patch is only a refactoring of code in preparation for WK99694 and does not
        affect existing functionality or tests.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::isElementPendingResource):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemoval):
        * svg/SVGDocumentExtensions.h:
        (WebCore):
        (SVGDocumentExtensions):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::removedFrom):
        (WebCore::SVGElement::hasPendingResources):
        (WebCore):
        (WebCore::SVGElement::setHasPendingResources):
        (WebCore::SVGElement::clearHasPendingResourcesIfPossible):
        * svg/SVGElement.h:
        (SVGElement):
        (WebCore::SVGElement::buildPendingResource):
        * svg/SVGStyledElement.cpp:
        (WebCore):
        (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded):
        (WebCore::SVGStyledElement::removedFrom):
        * svg/SVGStyledElement.h:
        (SVGStyledElement):
        (WebCore::SVGStyledElement::selfHasRelativeLengths):

2012-10-29  Dan Carney  <dcarney@google.com>

        Remove ensureAuxiliaryContext
        https://bugs.webkit.org/show_bug.cgi?id=99975

        Reviewed by Adam Barth.

        Removed auxilliaryContext as use if it is problematic in IDB.

        No new tests. No change in functionality.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::setValueReady):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::generateIndexKeysForValue):
        (WebCore::IDBObjectStore::put):
        (WebCore):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::deserializeIDBValue):
        (WebCore::injectIDBKeyIntoScriptValue):
        * bindings/v8/IDBBindingUtilities.h:
        (WebCore):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toV8Context):
        (WebCore):
        * bindings/v8/V8Binding.h:
        (WebCore):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore):
        * bindings/v8/V8PerIsolateData.h:

2012-10-29  Alpha Lam  <hclam@chromium.org>

        [skia] Handle mask box image.
        https://bugs.webkit.org/show_bug.cgi?id=100570

        Reviewed by James Robinson.

        When drawing an image with source rectangle it should intersect with image rectangle.
        This should be the case for drawing single image and tiling an image.

        Test: fast/images/mask-box-image-crash.html

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):

2012-10-29  Eric Carlson  <eric.carlson@apple.com>

        Support captions when PLUGIN_PROXY_FOR_VIDEO
        https://bugs.webkit.org/show_bug.cgi?id=100690

        Reviewed by Simon Fraser.

        When built with PLUGIN_PROXY_FOR_VIDEO, WebCore uses a plug-in for the media element's
        platform media engine. Update this code path so the shadow DOM elements used to display
        text tracks are created and configured correctly.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureMediaControls): Create media controls if necessary.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout): Set the position and size of the shadow DOM when the
            position of the embedded element changes.
        * rendering/RenderEmbeddedObject.h:

2012-10-29  Justin Novosad  <junov@google.com>

        [Chromium] flickering observed when copying 2D canvas to webGL texture
        https://bugs.webkit.org/show_bug.cgi?id=100691

        Reviewed by Stephen White.

        Added a flush to the webgl context after texture upload from an image
        buffer to ensure proper graphics context synchronization with respect
        to subsequent changes to the source image.

        Tests: fast/canvas/webgl/canvas-2d-webgl-texture.html

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::copyToPlatformTexture):

2012-10-29  Glenn Adams  <glenn@skynav.com>

        [CSSOM] Extraneous whitespace in CSSImportRule.cssText
        https://bugs.webkit.org/show_bug.cgi?id=100657

        Reviewed by Simon Fraser.

        Remove extraneous whitespace when serializing CSSImportRule.cssText when
        media list is empty.

        Test: cssom/cssimportrule-media.html

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::cssText):
        Don't append extra whitespace if mediaText is empty.

2012-10-29  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        webview not redrawn as needed when accelerated compositing is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=99109

        Reviewed by Martin Robinson.

        GL shared display is not in the gtk loop and therefore, its events are
        not captured by gtk. So, we use gdk default instead.

        No new tests, covered by existing tests.

        * platform/gtk/RedirectedXCompositeWindow.cpp:
        (WebCore::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        (WebCore::RedirectedXCompositeWindow::~RedirectedXCompositeWindow):
        (WebCore::RedirectedXCompositeWindow::resize):

2012-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: bind redo to Ctrl+Y on non-mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=100685

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype._registerShortcuts):

2012-10-29  Enrica Casucci  <enrica@apple.com>

        Add ENABLE_USERSELECT_ALL feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=100559

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2012-10-29  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Extract the CustomFilterParameterList to its own file
        https://bugs.webkit.org/show_bug.cgi?id=100548

        Reviewed by Dean Jackson.

        Moved all the CustomFilterParameterList related methods to their own file.
        Also made CustomFilterParameterList inherit from Vector instead of typedefing it,
        so that we can add a different operator== and a blend method to it.

        No new tests, just refactoring existing code.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleResolver.h:
        * platform/graphics/filters/CustomFilterOperation.cpp:
        (WebCore::CustomFilterOperation::CustomFilterOperation):
        (WebCore::CustomFilterOperation::blend):
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore):
        (WebCore::CustomFilterOperation::operator==):
        * platform/graphics/filters/CustomFilterParameterList.cpp: Added.
        (WebCore):
        (WebCore::CustomFilterParameterList::operator==):
        (WebCore::CustomFilterParameterList::checkAlphabeticalOrder):
        (WebCore::CustomFilterParameterList::blend):
        * platform/graphics/filters/CustomFilterParameterList.h: Added.
        (WebCore):
        (CustomFilterParameterList):

2012-10-29  Brady Eidson  <beidson@apple.com>

        Try to fix 32-bit builds after my incompletely tested m_identifier change.

        Not reviewed.

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::identifier): Revert my "unsigned long" -> "uint64_t" change in two places.

2012-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Text with zero font size renders as X px sometimes, causing fast/text/zero-font-size-2.html to fail
        https://bugs.webkit.org/show_bug.cgi?id=100115

        Reviewed by Noam Rosenthal.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawGlyphs):

2012-10-29  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Make GraphicsLayerAnimation choose a proper timing function.
        https://bugs.webkit.org/show_bug.cgi?id=100623

        Reviewed by Noam Rosenthal.

        Currently, GraphicsLayerAnimation chooses a timing function in the wrong
        way. Other GraphicsLayers choose a timing function in the similar way to
        GraphicsLayerCA::timingFunctionForAnimationValue(). The way consists of
        the following steps.
        1. Try to query the timing function of the current keyframe animation value.
        2. If the timing function of #1 is null, try to query the timing function of Animation.
        3. If the timing function of #2 is null, return CubicBezierTimingFunction::defaultTimingFunction().

        This patch makes GraphicsLayerAnimation choose a timing function in the same way
        to other implementations.

        Covered by existing animations tests.

        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore::timingFunctionForAnimationValue):
        (WebCore::GraphicsLayerAnimation::apply):

2012-10-29  Patrick Dubroy  <dubroy@chromium.org>

        Web Inspector: Toolbar overflow appears outside window
        https://bugs.webkit.org/show_bug.cgi?id=100663

        Reviewed by Pavel Feldman.

        Since the search bar was removed from the toolbar, the overflow menu appears too far
        to the right, and is unreadable. Fixed this by aligning it relative to the right side
        of the window, rather than the left.

        * inspector/front-end/Toolbar.js:
        (WebInspector.ToolbarDropdown.prototype.show):
        * inspector/front-end/inspector.css:
        (#toolbar-dropdown .toolbar-label):

2012-10-29  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Implement CustomFilterArrayParameter::blend
        https://bugs.webkit.org/show_bug.cgi?id=96437

        Reviewed by Dean Jackson.

        This patch adds the missing code to blend values within
        an array() when using Custom Filters.

        Test: css3/filters/custom/custom-filter-array-blending.html

        * platform/graphics/filters/CustomFilterArrayParameter.h:
        (WebCore::CustomFilterArrayParameter::blend):

2012-10-29  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Drag and drop a URL in inspector is not working as expected
        https://bugs.webkit.org/show_bug.cgi?id=100527

        Reviewed by Yury Semikhatsky.

        Inhibit custom dragstart handling when the active element is A.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._ondragstart):

2012-10-29  Mike West  <mkwst@chromium.org>

        Web Inspector: Error/warning count is one pixel off.
        https://bugs.webkit.org/show_bug.cgi?id=100660

        Reviewed by Pavel Feldman.

        The error/warning count div had a top padding of 6. That was one pixel
        too many.

        * inspector/front-end/inspector.css:
        (#error-warning-count):

2012-10-29  Shinya Kawanaka  <shinyak@chromium.org> 

        [Refactoring] Use isActiveInsertionPoint() instead of isInsertionPoint()
        https://bugs.webkit.org/show_bug.cgi?id=100459

        Reviewed by Hajime Morita.

        Checking InsertionPoint and its activeness with two if-statement is error-prone. We would like to
        use a utility function which checks both at once.

        We rewrite some lines with such function.

        No new tests, simple refactoring.

        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::ComposedShadowTreeWalker::traverseNode):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::populate):
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::distributeNodeChildrenTo):
        * html/shadow/InsertionPoint.h:
        (WebCore::isInsertionPoint): Since our convention is the argument of this kind of function should not be null,
        we would like to make it similar to the other functions.
        (WebCore::toInsertionPoint):
        (WebCore::isLowerEncapsulationBoundary):

2012-10-29  Patrick Dubroy  <dubroy@chromium.org>

        Web Inspector: Fix vertical alignment in toolbar backgrounds and overflow button.
        https://bugs.webkit.org/show_bug.cgi?id=100373

        Reviewed by Pavel Feldman.

        Fix the background image for the selected toolbar item to be vertically centered.
        Make close button and toolbar overflow button vertically centered for any toolbar
        height.

        * inspector/front-end/Toolbar.js: Remove unused variable.
        * inspector/front-end/inspector.css:
        (.toolbar-item.toggleable):
        (body.compact .toolbar-item.toggleable):
        (.toolbar-item.toggleable.toggled-on):
        (body.compact .toolbar-label):
        (#toolbar-dropdown-arrow):
        (#close-button-left, #close-button-right):
        (.toolbar-item.close-left):
        * inspector/front-end/inspector.html:

2012-10-29  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: Overview bars do not correspond to timeline bars
        https://bugs.webkit.org/show_bug.cgi?id=100500

        Reviewed by Yury Semikhatsky.

        Fix: do not shorten bars by nested records of the same category.

        * inspector/front-end/TimelineOverviewPane.js: Check added.

2012-10-29  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Timeline: make cpu-monitoring feature available only on capable browsers
        https://bugs.webkit.org/show_bug.cgi?id=100530

        Reviewed by Yury Semikhatsky.

        Motivation: cpu-monitoring feature looks like a glitch,
        when it is not supported by browser.

        * inspector/Inspector.json: Added capability getter to protocol.
        * inspector/InspectorClient.h: Added capability getter.
        * inspector/InspectorTimelineAgent.cpp: Proxy to request to client.
        * inspector/InspectorTimelineAgent.h: Added capability getter.
        * inspector/front-end/Settings.js: Added capability field.
        * inspector/front-end/TimelinePanel.js: Check capability.
        * inspector/front-end/inspector.js: Forward capability value.

2012-10-29  Antti Koivisto  <antti@apple.com>

        Move seamless stylesheet collecting to DocumentStyleSheetCollection
        https://bugs.webkit.org/show_bug.cgi?id=100655

        Reviewed by Andreas Kling.

        Move the code from StyleResolver to DocumentStyleSheetCollection. StyleResolver should focus on resolving style.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        
            Use standard create() pattern.

        (WebCore):
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::collectActiveCSSStyleSheetsFromSeamlessParents):
        
            Since parent activeAuthorStyleSheets() contains all seamlessly inherited sheets too, this does not need to
            iterate to ancestors anymore.

        (WebCore):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::create):
        (DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::styleSheetsForStyleSheetList):
        (WebCore::DocumentStyleSheetCollection::activeAuthorStyleSheets):
        
            activeAuthorStyleSheets() now includes the stylesheets inherited from the seamless parent too.

        (WebCore::DocumentStyleSheetCollection::needsUpdateActiveStylesheetsOnStyleRecalc):

2012-10-29  Andreas Kling  <kling@webkit.org>

        Don't expose implementation details of StylePropertySet storage.
        <http://webkit.org/b/100644>

        Reviewed by Antti Koivisto.

        Add a StylePropertySet::PropertyReference class, now returned by propertyAt(index).
        This will allow us to refactor the internal storage of StylePropertySet without
        breaking its API.

        A PropertyReference is a simple inlinable wrapper around a StylePropertySet&/index pair.

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSParser.cpp:
        * css/CSSParser.h:
        * css/SVGCSSParser.cpp:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):
        (WebCore::StylePropertySet::mergeAndOverrideOnConflict):
        (WebCore::StylePropertySet::findPropertyWithId):
        (WebCore::StylePropertySet::reportMemoryUsage):
        * css/StylePropertySet.h:
        (StylePropertySet):
        (PropertyReference):
        (WebCore::StylePropertySet::PropertyReference::PropertyReference):
        (WebCore::StylePropertySet::PropertyReference::id):
        (WebCore::StylePropertySet::PropertyReference::isImportant):
        (WebCore::StylePropertySet::PropertyReference::isInherited):
        (WebCore::StylePropertySet::PropertyReference::cssName):
        (WebCore::StylePropertySet::PropertyReference::cssText):
        (WebCore::StylePropertySet::PropertyReference::value):
        (WebCore::StylePropertySet::PropertyReference::propertyInternal):
        (WebCore::StylePropertySet::propertyAt):
        (WebCore::StylePropertySet::propertyAtInternal):
        (WebCore):
        * css/StyleResolver.cpp:
        (WebCore::attributeStylesEqual):
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::resolveVariables):
        * editing/ApplyStyleCommand.cpp:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::mergeStyle):
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization):
        * editing/Editor.cpp:
        * editing/markup.cpp:
        * page/Frame.cpp:
        * svg/SVGFontFaceElement.cpp:

2012-10-29  Kent Tamura  <tkent@chromium.org>

        Move LocaleWin.{cpp,h} to platform/text/win/
        https://bugs.webkit.org/show_bug.cgi?id=100641

        Reviewed by Kentaro Hara.

        We have platform/text/win/ directory. Windows-specific files should be
        in it.
        Note that these files are used only in Chromium-win for now.

        No new tests. This doesn't change any behavior.

        * WebCore.gyp/WebCore.gyp: Fix path names.
        * WebCore.gypi: Ditto.
        * platform/text/win/LocaleWin.cpp: Renamed from Source/WebCore/platform/text/LocaleWin.cpp.
        * platform/text/win/LocaleWin.h: Renamed from Source/WebCore/platform/text/LocaleWin.h.

2012-10-29  Kent Tamura  <tkent@chromium.org>

        Rename Localizer to Locale
        https://bugs.webkit.org/show_bug.cgi?id=100634

        Reviewed by Kentaro Hara.

        - Rename Localizer class to Locale
        - Rename localizer with locale in variable names
        - Rename localizer with locale in function names

        No new tests. This doesn't make any behavior changes.

        * dom/Document.h:
        (WebCore): Declare Locale instead of Localizer.
        (Document):
        - Rename getCachedLocalizer to getCachedLocale.
        - Rename LocaleToLocalizerMap to LocaleIdentifierToLocaleMap.
        - Rename m_localizerCache to m_localeCache.
        * dom/Document.cpp:
        (WebCore::Document::getCachedLocale): Follow renamings.
        * dom/Element.h:
        (WebCore): Declare Locale instead of Localizer.
        (Element): Rename localizer() to locale().
        * dom/Element.cpp:
        (WebCore::Element::locale): Follow renamings.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::localizeValue): Ditto.
        (WebCore::BaseDateAndTimeInputType::convertFromVisibleValue): Ditto.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue): Ditto.
        * html/DateInputType.cpp:
        (WebCore::DateInputType::fixedPlaceholder): Ditto.
        (WebCore::DateInputType::setupLayoutParameters): Ditto.
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::setupLayoutParameters): Ditto.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::setupLayoutParameters): Ditto.
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::setupLayoutParameters): Ditto.
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::localizeValue): Ditto.
        (WebCore::NumberInputType::convertFromVisibleValue): Ditto.
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::localizeValue): Ditto.
        (WebCore::TimeInputType::setupLayoutParameters): Ditto.

        * html/shadow/DateTimeEditElement.h:
        (WebCore): Declare Locale instead of Localizer.
        (LayoutParameters): Rename localizer data member to locale.
        (WebCore::DateTimeEditElement::LayoutParameters::LayoutParameters): Follow renamings.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField): Ditto.
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement): Rename localizerForOwner to localeForOwner.
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::formatValue): Follow renamings.
        (WebCore::DateTimeNumericFieldElement::handleKeyboardEvent): Ditto.
        (WebCore::DateTimeNumericFieldElement::localeForOwner): Ditto.
        * page/PagePopupClient.h:
        (WebCore): Declare Locale instead of Localizer.
        (PagePopupClient): Rename localizer member function to locale.
        * page/PagePopupController.cpp:
        (WebCore::PagePopupController::localizeNumberString): Follow renamings.

        * platform/text/PlatformLocale.cpp: Rename the Localizer class to Locale.
        (DateTimeStringBuilder):
        (WebCore::DateTimeStringBuilder::DateTimeStringBuilder):
        (WebCore::Locale::~Locale):
        (WebCore::Locale::setLocaleData): Renamed from setLocalizerData.
        (WebCore::Locale::convertToLocalizedNumber):
        (WebCore::Locale::detectSignAndGetDigitRange):
        (WebCore::Locale::matchedDecimalSymbolIndex):
        (WebCore::Locale::convertFromLocalizedNumber):
        (WebCore::Locale::localizedDecimalSeparator):
        (WebCore::Locale::dateTimeFormatWithSeconds):
        (WebCore::Locale::dateTimeFormatWithoutSeconds):
        (WebCore::Locale::formatDateTime):
        * platform/text/PlatformLocale.h: Update the ifndef macro.
        (Locale): Renamed from Localizer. Also, renamed the followings:
         - initializeLocalizerData -> initializeLocaleData
         - setLocalizerData -> setLocaleData
         - m_hasLocalizerData -> m_hasLocaleData
        (WebCore::Locale::Locale):
        (WebCore::Locale::createDefault):
        * platform/text/LocaleICU.cpp: Follow renamings.
        * platform/text/LocaleICU.h: Ditto.
        * platform/text/LocaleNone.cpp: Ditto.
        * platform/text/LocaleWin.cpp: Ditto.
        * platform/text/LocaleWin.h: Ditto.
        * platform/text/mac/LocaleMac.h: Ditto.
        * platform/text/mac/LocaleMac.mm: Ditto.

2012-10-29  Mike West  <mkwst@chromium.org>

        Web Inspector: Error messages lines in console are 1px taller than regular messages
        https://bugs.webkit.org/show_bug.cgi?id=100521

        Reviewed by Pavel Feldman.

        The inspector is adding a 1px bottom border to list elements inside
        a disclosure list. This is unnecessary in the current layout; it's
        causing console messages with stack traces to be one pixel taller than
        other console messages, which this patch fixes.

        As a drive-by, this patch also adjusts the disclosure triangle's
        position to match.

        * inspector/front-end/inspector.css:
        (.outline-disclosure li):
        (.outline-disclosure li.parent::before):

2012-10-29  Mike West  <mkwst@chromium.org>

        Web Inspector: The bubble for repeated errors is misplaced.
        https://bugs.webkit.org/show_bug.cgi?id=100525

        Reviewed by Pavel Feldman.

        The repeated-message bubble is displayed as an inline-block element,
        which works well as long as no stack trace is present. If present, the
        message is wrapped in an 'ol' element displayed as a block, which pushes
        itself down to the next line.

        To avoid that issue, this patch switches the wrapper element to flexbox,
        glorious flexbox.

        * inspector/front-end/inspector.css:
        (.console-message .bubble):
        (.repeated-message .outline-disclosure):
        (.filter-all .console-log-level.repeated-message, .filter-logs .console-log-level.repeated-message):

2012-10-29  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Handle non-parsedOk properties as inactive ones
        https://bugs.webkit.org/show_bug.cgi?id=100119

        Reviewed by Vsevolod Vlasov.

        Test: inspector/styles/inactive-properties.html

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.createExclamationMark):
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):
        * inspector/front-end/elementsPanel.css:
        (.styles-section.computed-style .properties li.not-parsed-ok):
        (.styles-section.computed-style .properties li.not-parsed-ok img.exclamation-mark):
        (.styles-section .properties .not-parsed-ok):

2012-10-29  Eric Seidel  <eric@webkit.org>

        Make rendering tables with <colgroups> twice as fast by avoiding walking the DOM for colgroups 4 times for each cell
        https://bugs.webkit.org/show_bug.cgi?id=100630

        Reviewed by Ojan Vafai.

        This is not a complete fix.  Our rendering of this large tables still takes 7.8 seconds
        on my retina MBP (down from 14.3s before this change).
        It's very expensive to walk the DOM each time we call RenderTable::colElement
        so this caches the RenderTableCol* in a vector for easier walking.
        We invalidate the cache any time a RenderTableCol is added or removed from the
        rendering sub-tree to avoid holding a bad pointer.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::invalidateCachedColumns):
        (WebCore):
        (WebCore::RenderTable::addColumn):
        (WebCore::RenderTable::removeColumn):
        (WebCore::RenderTable::updateColumnCache):
        (WebCore::RenderTable::slowColElement):
        * rendering/RenderTable.h:
        (RenderTable):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::insertedIntoTree):
        (WebCore):
        (WebCore::RenderTableCol::willBeRemovedFromTree):
        * rendering/RenderTableCol.h:

2012-10-28  Kent Tamura  <tkent@chromium.org>

        Rename Localizer.{cpp,h} to PlatformLocale.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=100627

        Reviewed by Yuta Kitamura.

        We'd like to rename Localizer class to Locale class. However we use
        PlatformLocale.cpp and PlatformLocale.h as their file names because
        <locale.h> exists in the C standard.  In this patch, we rename only file
        names. We're going to rename the class name later.

        No new tests. This doesn't make any behavior change.

        * platform/text/PlatformLocale.h: Renamed from Source/WebCore/platform/text/Localizer.h.
        * platform/text/PlatformLocale.cpp: Renamed from Source/WebCore/platform/text/Localizer.cpp.
        Follow the Localizer.h -> PlatformLocale.cpp renaming.

        * CMakeLists.txt: Follow the file name renaming.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/Document.cpp: Ditto.
        * html/BaseDateAndTimeInputType.cpp: Ditto.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp: Ditto.
        * html/DateInputType.cpp: Ditto.
        * html/DateTimeInputType.cpp: Ditto.
        * html/DateTimeLocalInputType.cpp: Ditto.
        * html/MonthInputType.cpp: Ditto.
        * html/NumberInputType.cpp: Ditto.
        * html/TimeInputType.cpp: Ditto.
        * html/shadow/DateTimeEditElement.cpp: Ditto.
        * html/shadow/DateTimeNumericFieldElement.cpp: Ditto.
        * page/PagePopupController.cpp: Ditto.
        * platform/text/LocaleICU.h: Ditto.
        * platform/text/LocaleNone.cpp: Ditto.
        * platform/text/LocaleWin.h: Ditto.
        * platform/text/mac/LocaleMac.h: Ditto.

2012-10-28  Shinya Kawanaka  <shinyak@chromium.org>

        The shadow element is not reprojected to a nested ShadowRoot.
        https://bugs.webkit.org/show_bug.cgi?id=99228

        Reviewed by Dimitri Glazkov.

        We support shadow reprojection; elements distributed to <shadow> element can be reprojected to <content> now.

        First, we have a distribution vector for each InsertionPoint, even if InsertionPoint is a shadow insertion point.
        And we update a node-distribution map. Basically We're creating a map from node to InsertionPoint in ElementShadow.
        If a node can be distributed to several InsertionPoint (e.g. in case reprojection happens),
        the InsertionPoint in older ShadowDOM is chosen.

        We also fix ComposedShadowTreeWalker to consider shadow reprojection.

        Tests: fast/dom/shadow/composed-shadow-tree-walker-shadow-reprojection.html
               fast/dom/shadow/shadow-reprojection-click.html
               fast/dom/shadow/shadow-reprojection-dynamic.html
               fast/dom/shadow/shadow-reprojection-fallback.html
               fast/dom/shadow/shadow-reprojection.html
               fast/dom/shadow/shadow-reprojection2.html

        * css/StyleResolver.cpp:
        (WebCore::shouldResetStyleInheritance): Now context.insertionPoint() returns the final insertion point where
        a node is distributed. So we don't have to trace shadow insertion point anymore here.
        (WebCore::StyleResolver::styleForElement): Since a direct child of ShadowRoot can be distributed now. In that case,
        we don't have any parentElement. The parent node is a ShadowRoot in that case.
        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::nodeCanBeDistributed): If a node can be distributed, returns true.
        (WebCore):
        (WebCore::resolveReprojection): Resolves content-reprojection and shadow-reprojection both.
        (WebCore::ComposedShadowTreeWalker::traverseSiblingOrBackToInsertionPoint):
        (WebCore::ComposedShadowTreeWalker::traverseParent):
        (WebCore::ComposedShadowTreeWalker::traverseParentBackToYoungerShadowRootOrHost): A case ShadowRoot is assigned
        to some InsertionPoint should be handled with in traverseSiblingOrBackToInsertionPoint. So we remove it.
        (WebCore::AncestorChainWalker::parent): Now we have a case that a direct child of ShadowRoot can be distributed.
        In that case, we should not update m_distributedNode.
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::insertionPointFor): Since we have a distribution vector for each InsertionPoint,
        we don't have a special case that a ShadowRoot is assigned to some InsertionPoint. Actually the existing code
        is not correct now due to shadow reprojection.
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::populate): Populate a POOL. If a node is InsertionPoint, we fill it with the
        distributed nodes.
        (WebCore):
        (WebCore::ContentDistributor::distribute): Since we want to make a distribution vector for each InsertionPoint,
        we have to resolve a shadow InsertionPoint
        (WebCore::ContentDistributor::distributeNodeChildrenTo):
        * html/shadow/ContentDistributor.h:
        (ContentDistributor):
        * html/shadow/HTMLShadowElement.h:
        (WebCore::toHTMLShadowElement):
        (WebCore):
        * html/shadow/InsertionPoint.h:
        (WebCore::parentNodeForDistribution):
        (WebCore::parentElementForDistribution):
        (WebCore):

2012-10-28  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Webkit adds a boundary to the Content-Type: text/plain POST header
        https://bugs.webkit.org/show_bug.cgi?id=100445

        Reviewed by Kent Tamura.

        Fixed a bug where an empty boundary parameter was added to Content-Type
        header when POSTing forms with enctype=text/plain.

        Test: http/tests/misc/form-post-textplain.html

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::populateFrameLoadRequest): Add boundary parameter to
        Content-Type only when a boundary string is generated.

2012-10-28  Philip Rogers  <pdr@google.com>

        Cache calcMode() value for SVG animations.
        https://bugs.webkit.org/show_bug.cgi?id=99694

        Reviewed by Eric Seidel.

        This patch refactors SVGAnimationElement::calcMode() to return a cached value instead
        of recalculating its value on every call. On a simple test of 100 rectangles with 100
        animations each, calls to calcMode() account for 3% of the total animation. After this
        patch, calcMode() no longer appears in animation profiles at all.

        No new tests as this functionality is covered by existing tests.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):

            The default calcMode for all animation types is linear except AnimateMotion,
            which defaults to CalcModePaced.
            See: http://www.w3.org/TR/SVG/single-page.html#animate-CalcModeAttribute

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::isSupportedAttribute):
        (WebCore::SVGAnimationElement::parseAttribute):
        (WebCore::SVGAnimationElement::setCalcMode):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::calcMode):
        (WebCore::SVGAnimationElement::setCalcMode):
        (SVGAnimationElement):

2012-10-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Get rid of StyleResolver state related to unknown pseudo-elements.
        https://bugs.webkit.org/show_bug.cgi?id=100582

        Reviewed by Eric Seidel.

        All of the state, related to unknown pseudo-elements is already understood at the time of collecting rules.
        We can just get rid of most of this code in StyleResolver.

        At the time of matching rules, we know for certain that only rules that contain unknown pseudo-elements,
        or are UA rules, or are explicitly invited by a TreeScope will match. So we can just return early in many cases.

        No change in behavior, covered by existing tests.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector): Removed now-unnecessary param.
        (WebCore::SelectorChecker::checkOneSelector): Ditto.
        * css/SelectorChecker.h:
        (SelectorChecker): Ditto.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver): Ditto.
        (MatchingUARulesScope): Moved class definition here, since we now use it in a different place.
        (WebCore::StyleResolver::collectMatchingRules): Changed the logic to stop matching rules that definitely won't match in a different scope.
        (WebCore::StyleResolver::collectMatchingRulesForList): Removed code that's now unnecesssary.
        (WebCore::StyleResolver::checkSelector): Removed now-unnecessary param.
        (WebCore::StyleResolver::checkRegionSelector): Removed weird dead code.
        * css/StyleResolver.h:
        (StyleResolver): Removed now-unnecessary member.

2012-10-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132696.
        http://trac.webkit.org/changeset/132696
        https://bugs.webkit.org/show_bug.cgi?id=100609

        Needs a bit more clean-up on Chrome Web UI side. (Requested by
        dglazkov on #webkit).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderListBox.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):

2012-10-27  Alexey Proskuryakov  <ap@apple.com>

        All tests crash in WebKit1 mode
        https://bugs.webkit.org/show_bug.cgi?id=100602

        Reviewed by Sam Weinig.

        * platform/PlatformStrategies.cpp: (WebCore::setPlatformStrategies): Fix an incorrect
        assertion - if this function is called twice, it should be with the same strategy.

2012-10-27  Anders Carlsson  <andersca@apple.com>

        Fix AVFoundation build.

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

2012-10-27  David Barton  <dbarton@mathscribe.com>

        ASSERTION FAILED: m_next in LayoutState.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99796

        Reviewed by Eric Seidel.

        Before RenderMathMLBlock::computeChildrenPreferredLogicalHeights calls child->layoutIfNeeded(),
        it must ensure a layoutState exists. We disable it in any case, since we are just calculating
        metrics here, and the final layout may well happen again.

        No new tests. I don't know how to create an automated test for this. The crashes users are
        seeing are flaky.

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::computeChildrenPreferredLogicalHeights):

2012-10-27  David Barton  <dbarton@mathscribe.com>

        [MathML] Improve some addChild methods
        https://bugs.webkit.org/show_bug.cgi?id=98791

        Reviewed by Eric Seidel.

        MathML addChild methods need to handle any anonymous renderers correctly. Actually, most MathML elements have a fixed
        number of children, so conformant javascript won't be doing arbitrary addChild and removeChild calls. However, we don't
        want any assertions to fail, and we do want addChild to work correctly when beforeChild == 0, to build up the original
        renderer, and then replaceChild at least should work correctly after that. We therefore clean up these routines before
        giving them to the chromium fuzzers.
        
        It's best to build the anonymous wrappers just once initially if possible, so empty wrappers aren't left in the render
        tree after later removeChild calls.

        Test: mathml/presentation/dynamic.html added for mfrac and msqrt. There are already tests for dynamically changing
        msub/sup elements, in mathml/presentation/m*-changed.xhtml.

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::addChild):
            - The two wrappers are built initially. Also, the old RenderMathMLBlock::addChild(row, beforeChild); doesn't really
              work because beforeChild is buried inside a wrapper. This new routine allows the numerator and denominator to be
              added initially, and then later replaced with replaceChild. It's not clear whether e.g. a plain removeChild of a
              numerator should move the remaining child from the denominator to the numerator or not, so we ignore that for now.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::addChild):
            - A bit of bullet-proofing for the fuzzers.
        * rendering/mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::addChild):
            - Like RenderMathMLFraction::addChild, we create the wrappers once initially, and then fill them dynamically.

2012-10-27  Levi Weintraub  <leviw@chromium.org>

        Background images can incorrectly repeat with sub-pixel layout
        https://bugs.webkit.org/show_bug.cgi?id=94622

        Reviewed by Emil A Eklund.

        Attempting to better match author expectations when painting tiled background images. When under
        the effects of zoom with sub-pixel layout enabled, the drawn size of a rendered element can
        differ depending on its location. This change looks at the size of the scaled tiled background
        image size, and either ceils or floors that value depending on if tiling that value will
        result in us being one pixel or less short of covering the background size. This is a heuristic,
        as sub-pixel/zooming isn't specced.

        Test: fast/sub-pixel/scaled-background-image.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::applySubPixelHeuristicForTileSize):
        (WebCore):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):

2012-10-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132725.
        http://trac.webkit.org/changeset/132725
        https://bugs.webkit.org/show_bug.cgi?id=100596

        it broke linking on chromium debug bots (Requested by loislo
        on #webkit).

        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::addPlatformComponentsInfo):
        (WebCore):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * platform/MemoryUsageSupport.cpp:
        (WebCore::MemoryUsageSupport::memoryUsageByComponents):
        * platform/MemoryUsageSupport.h:
        (ComponentInfo):
        (WebCore::MemoryUsageSupport::ComponentInfo::ComponentInfo):
        (MemoryUsageSupport):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore):
        * platform/PlatformMemoryInstrumentation.h:
        (PlatformMemoryTypes):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (WebCore::MemoryUsageSupport::memoryUsageByComponents):
        * platform/qt/MemoryUsageSupportQt.cpp:
        (WebCore::MemoryUsageSupport::memoryUsageByComponents):

2012-10-27  Dan Bernstein  <mitz@apple.com>

        REAL_PLATFORM_NAME build setting is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=100587

        Reviewed by Mark Rowe.

        Removed the definition of REAL_PLATFORM_NAME and replaced references to it with references
        to PLATFORM_NAME.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebCore.xcconfig:

2012-10-27  Tony Chang  <tony@chromium.org>

        Remove internals shouldDisplayTrackKind methods; these are also on internals.settings
        https://bugs.webkit.org/show_bug.cgi?id=100564

        Reviewed by Adam Barth.

        Remove duplicate methods from internals that was just forwarding on the call to internals.settings.
        Also fix a bug where we didn't reset these settings properly.

        No new tests, this is covered by existing media/track tests.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Properly save display track settings.
        (WebCore::InternalSettings::Backup::restoreTo): Restore display track settings.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl: Use [Conditional=VIDEO_TRACK].
        * testing/Internals.cpp: Remove code.
        * testing/Internals.h: Remove code.
        * testing/Internals.idl: Remove code.

2012-10-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: instrument chromium GlyphCache. It keeps ~2mb.
        https://bugs.webkit.org/show_bug.cgi?id=100515

        Reviewed by Yury Semikhatsky.

        I replaced old version with an abstract number with new one which precisely reports allocated SkGlyphCache objects and their sizes.

        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * platform/MemoryUsageSupport.cpp:
        (WebCore::MemoryUsageSupport::reportMemoryUsage):
        * platform/MemoryUsageSupport.h:
        (MemoryUsageSupport):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore):
        * platform/PlatformMemoryInstrumentation.h:
        (PlatformMemoryTypes):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (reportMemoryUsage):
        (WebCore::reportGlyphCache):
        (WebCore):
        (WebCore::MemoryUsageSupport::reportMemoryUsage):
        * platform/qt/MemoryUsageSupportQt.cpp:
        (WebCore::MemoryUsageSupport::reportMemoryUsage):

2012-10-26  Philip Rogers  <pdr@google.com>

        Prevent NaN offset values in ElementTimeControl.
        https://bugs.webkit.org/show_bug.cgi?id=100322

        Reviewed by Abhishek Arya.

        NaN values can cause ElementTimeControl to go back in time!
        If a value of NaN is passed to ElementTimeControl::beginElementAt(offset),
        subsequent sorting will cause an assert in SVGSMILElement::findInstanceTime
        because NaN values are not properly sorted. NaN SMILTime values
        should not be allowed at all, so this patch adds a check for them in
        ElementTimeControl's setters.
 
        This patch also adds preventative asserts to catch if SMILTime is ever
        initialized with NaN, or if addEndTime/addBeginTime are ever called
        with NaN values.

        Test: svg/custom/elementTimeControl-nan-crash.html

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::beginElementAt):
        (WebCore::SVGAnimationElement::endElementAt):
        * svg/animation/SMILTime.h:
        (WebCore::SMILTime::SMILTime):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::addBeginTime):
        (WebCore::SVGSMILElement::addEndTime):

2012-10-26  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Browser prematurely sends wrong credentials
        https://bugs.webkit.org/show_bug.cgi?id=100585

        Reviewed by Yong Li.

        Manually revert the patch for bug 96362, which causes regressions and the right patch has been
        submitted with patch for bug 100448. Since the auto-revert fails, we use this patch to manually
        revert.

        No new tests. The test is coverted by patch for 100448.

        * platform/network/blackberry/CredentialBackingStore.cpp:
        * platform/network/blackberry/CredentialBackingStore.h:
        (CredentialBackingStore):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):

2012-10-26  Brady Eidson  <beidson@apple.com>

        Have NetworkProcess manage resource load scheduling.
        https://bugs.webkit.org/show_bug.cgi?id=100479

        Reviewed by Alexey Proskuryakov.

        Down in WebCore we need to virtualize a handful of ResourceLoadScheduler methods
        to be overridden by WebKit's implementation.

        No new tests (No change in Core behavior).

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

        * loader/ResourceLoadScheduler.cpp:
        (WebCore::resourceLoadScheduler): Gracefully handle LoaderStrategies wanting to return the default scheduler.
        (WebCore::ResourceLoadScheduler::scheduleLoad): Call notifyDidScheduleResourceRequest.
        (WebCore::ResourceLoadScheduler::notifyDidScheduleResourceRequest): Moved InspectorInstrumentation call
          here so derived classes can do it indirectly.
        (WebCore::ResourceLoadScheduler::startResourceLoader): To allow derived classes the ability to call
          ResourceLoader::start() which only ResourceLoadScheduler can do.

        * loader/ResourceLoadScheduler.h:
        (ResourceLoadScheduler): Virtualize some core public methods so they can be overridden.
        (WebCore::ResourceLoadScheduler::setSerialLoadingEnabled): Make virtual.
        (WebCore::ResourceLoadScheduler::isSuspendingPendingRequests): Make private as it's internal only.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::setIdentifier): Add this setter so outside clients can manually change the identifier.

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::identifier): Change identifier to explicitly be uint64_t.
        (WebCore::ResourceLoader::request): Make public.
        (ResourceLoader):

2012-10-26  Chris Rogers  <crogers@google.com>

        Implement AudioBufferSourceNode .loopStart and .loopEnd attributes
        https://bugs.webkit.org/show_bug.cgi?id=100170

        Reviewed by Kenneth Russell.

        AudioBufferSourceNode currently only supports looping of an entire AudioBuffer.
        Sample-based synthesis is a very common technique which requires "internal" loop-points.
        For example, the first part of the sample data might represent the attack portion of
        a synthesized instrument, which then enters a loop portion.

        Tests: webaudio/audiobuffersource-loop-comprehensive.html
               webaudio/audiobuffersource-loop-points.html

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::renderFromBuffer):
        * Modules/webaudio/AudioBufferSourceNode.h:
        (AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::loopStart):
        (WebCore::AudioBufferSourceNode::loopEnd):
        (WebCore::AudioBufferSourceNode::setLoopStart):
        (WebCore::AudioBufferSourceNode::setLoopEnd):
        * Modules/webaudio/AudioBufferSourceNode.idl:

2012-10-26  Daniel Cheng  <dcheng@chromium.org>

        dragover's default action should prevent drop for file drags
        https://bugs.webkit.org/show_bug.cgi?id=79173

        Reviewed by Tony Chang.

        During a file drag, we need to keep track of whether or not the document has cancelled the
        dragover action. We should only send a drop event if the dragover event was cancelled; this
        matches the behavior of the spec, as well as IE, Gecko, and Opera. The relevant sections
        from the spec are the sections pertaining to dragover and drop events at:
        http://www.whatwg.org/specs/web-apps/current-work/#drag-and-drop-processing-model

        Test: fast/events/only-valid-drop-targets-receive-file-drop.html

        * page/DragController.cpp:
        (WebCore::DragController::performDrag):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        * page/DragController.h:
        (DragController): Cleanup to repurpose a variable that doesn't need to be a member anymore
                          and remove the corresponding getter/setter.

2012-10-26  Nico Weber  <thakis@chromium.org>

        Fix a operator ordering bug in SVGSMILElement::calculateAnimationPercentAndRepeat
        https://bugs.webkit.org/show_bug.cgi?id=94756

        Reviewed by Dirk Schulze.

        The function has an early exit for !simpleDuration.value(), so
        !simpleDuration.value() always is 0 when passed as second parameter to
        fmod(), which means fmod() always returns NaN, which always evaluates
        to true. Simplify the code by removing that explicit check.

        No observable behavior change.

        Covered by existing svg tests.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::calculateAnimationPercentAndRepeat):

2012-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132695.
        http://trac.webkit.org/changeset/132695
        https://bugs.webkit.org/show_bug.cgi?id=100581

        caused 20+ test crashes on bots (Requested by estes on
        #webkit).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::resourceLoadScheduler):
        * loader/ResourceLoadScheduler.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::willSendRequest):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::performPostLoadActions):

2012-10-26  Vincent Scheib  <scheib@chromium.org>

        Unreviewed, rolling out r132702.
        http://trac.webkit.org/changeset/132702
        https://bugs.webkit.org/show_bug.cgi?id=100322

        Compile error on Chromium Linux dbg builder (and others)

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::beginElementAt):
        (WebCore::SVGAnimationElement::endElementAt):
        * svg/animation/SMILTime.h:
        (WebCore::SMILTime::SMILTime):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::addBeginTime):
        (WebCore::SVGSMILElement::addEndTime):

2012-10-26  Philip Rogers  <pdr@google.com>

        Prevent NaN offset values in ElementTimeControl.
        https://bugs.webkit.org/show_bug.cgi?id=100322

        Reviewed by Abhishek Arya.

        NaN values can cause ElementTimeControl to go back in time!
        If a value of NaN is passed to ElementTimeControl::beginElementAt(offset),
        subsequent sorting will cause an assert in SVGSMILElement::findInstanceTime
        because NaN values are not properly sorted. NaN SMILTime values
        should not be allowed at all, so this patch adds a check for them in
        ElementTimeControl's setters.

        This patch also adds preventative asserts to catch if SMILTime is ever
        initialized with NaN, or if addEndTime/addBeginTime are ever called
        with NaN values.

        Test: svg/custom/elementTimeControl-nan-crash.html

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::beginElementAt):
        (WebCore::SVGAnimationElement::endElementAt):
        * svg/animation/SMILTime.h:
        (WebCore::SMILTime::SMILTime):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::addBeginTime):
        (WebCore::SVGSMILElement::addEndTime):

2012-10-26  Tony Chang  <tony@chromium.org>

        Move non-Settings Inspector methods from internals.settings to internals
        https://bugs.webkit.org/show_bug.cgi?id=100392

        Reviewed by Adam Barth.

        These methods don't have to do with the WebCore Settings object, so move them up to internals.
        I moved the reset code from InternalSettings to Internals.

        No new tests, this is just a rename. Existing tests should pass.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Remove inspector methods.
        (WebCore::InternalSettings::Backup::restoreTo): Remove inspector methods.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): New method for resetting page state. Named after similar
        methods in WTR.
        (WebCore::Internals::setInspectorResourcesDataSizeLimits): Moved from InspectorSettings.
        (WebCore::Internals::setJavaScriptProfilingEnabled): Moved from InspectorSettings.
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject): Reset state in Internals.
        * testing/v8/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject): Reset state in Internals.

2012-10-26  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Notification should be sent when accessibilityIsIgnored changes
        https://bugs.webkit.org/show_bug.cgi?id=99547

        Reviewed by Chris Fleizach.

        Adds a new flag in AccessibilityObject that keeps track of the most recent
        value of accessibilityIsIgnored(). After certain events such as an ARIA
        attribute change or content change, checks the new value of
        accessibilityIsIgnored() and posts a "children changed" notification on the
        parent node if it changed, making sure the parent recomputes its vector of
        (unignored) children.

        Also moves handling of attribute changes to AXObjectCache, and sends
        notifications for some attribute changes that were previously silent. On
        Chromium, all changes to an accessibility object's attributes should
        result in some notification.

        Some tests would have broken because an AccessibilityScrollView was created
        and holding a reference to a ScrollView for an iframe after it was deleted,
        so this change switches AccessibilityScrollView to hold a weak reference
        to ScrollView instead.

        Tests: platform/chromium/accessibility/is-ignored-change-sends-notification.html
               platform/chromium/accessibility/other-aria-attribute-change-sends-notification.html
               platform/chromium/accessibility/text-change-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedUIElementForPage):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::textChanged):
        (WebCore):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::labelChanged):
        (WebCore::AXObjectCache::recomputeIsIgnored):
        * accessibility/AXObjectCache.h:
        (AXObjectCache):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::textChanged):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::recomputeIsIgnored):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::insertChild):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::cachedIsIgnoredValue):
        (WebCore):
        (WebCore::AccessibilityObject::setCachedIsIgnoredValue):
        (WebCore::AccessibilityObject::notifyIfIgnoredValueChanged):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::textChanged):
        (AccessibilityObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::correspondingControlForLabelElement):
        (WebCore::AccessibilityRenderObject::textChanged):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::~AccessibilityScrollView):
        (WebCore):
        (WebCore::AccessibilityScrollView::detach):
        (WebCore::AccessibilityScrollView::isAttachment):
        (WebCore::AccessibilityScrollView::widgetForAttachmentView):
        (WebCore::AccessibilityScrollView::updateScrollbars):
        (WebCore::AccessibilityScrollView::webAreaObject):
        (WebCore::AccessibilityScrollView::elementRect):
        (WebCore::AccessibilityScrollView::documentFrameView):
        (WebCore::AccessibilityScrollView::parentObject):
        (WebCore::AccessibilityScrollView::parentObjectIfExists):
        (WebCore::AccessibilityScrollView::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityScrollView::scrollTo):
        * accessibility/AccessibilityScrollView.h:
        (WebCore::AccessibilityScrollView::scrollView):
        (AccessibilityScrollView):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLineBoxTree):
        (WebCore::RenderBlock::createAndAppendRootInlineBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):

2012-10-26  Joshua Bell  <jsbell@chromium.org>

        [WebKitIDL] Optional dictionary types should have default values of empty dictionary
        https://bugs.webkit.org/show_bug.cgi?id=100547

        Reviewed by Adam Barth.

        Per WebIDL, "Optional dictionary type arguments are always considered to have a default
        value of an empty dictionary." WebKitIDL already supported this via the extended attribute
        [Optional=DefaultIsUndefined] but make this the default for Dictionary.

        Binding test expectations updated.

        * Modules/filesystem/DirectoryEntry.h: Remove default parameters.
        (DirectoryEntry):
        * Modules/indexeddb/IDBDatabase.h: Remove overloads.
        (IDBDatabase):
        * Modules/indexeddb/IDBObjectStore.h: Remove overloads.
        (IDBObjectStore):
        * Modules/mediastream/RTCPeerConnection.idl: Remove DefaultIsUndefined annotations.
        * bindings/scripts/CodeGeneratorJS.pm: Special case for Optional Dictionary.
        (GenerateParametersCheck):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOptionsObject): Updated expectation - no early call.
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::optionsObjectCallback): Ditto.

2012-10-26  Vincent Scheib  <scheib@chromium.org>

        Generated should not be supported for things with a shadow
        https://bugs.webkit.org/show_bug.cgi?id=98836

        Unreviewed rollout of rollout of http://trac.webkit.org/changeset/132269.
        Initial rollout was speculative and was shown not to be related to crashes.
        Change author: Elliott Sprehn  <esprehn@chromium.org>

        As far as CSS is concerned inputs and things with shadow content inside 
        shouldn't support pseudo elements like :before, :after or :first-letter.
        Neither Gecko or Presto supports it, and we only accidentally supported 
        it. 
 
        Until the spec tells us what to do we should disable support. This is 
        also neccesary because the new generated content implementation doesn't 
        support shadows. 

        Test: fast/forms/pseudo-elements.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderListBox.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):

2012-10-26  Brady Eidson  <beidson@apple.com>

        Crash in WebProces at WebCore::ResourceLoadScheduler::crossOriginRedirectReceived + 78
        <rdar://problem/12575514> and https://bugs.webkit.org/show_bug.cgi?id=100554

        Reviewed by Alexey Proskuryakov.

        This was fallout from http://trac.webkit.org/changeset/132501 where I missed some of the 
        spots that call resourceLoadScheduler().

        As a result we were creating more than one ResourceLoadScheduler, allowing the host records 
        to get out of sync.

        The fix that also results in less #ifdefs scattered throughout the code is to use a single 
        choke point for all ResourceLoadScheduler access.

        No new tests 
        (No change of behavior for the default config, not testable at this time in the repro config)

        Add a single choke point for accessing the correct ResourceLoadScheduler:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::defaultResourceLoadScheduler): New private function that keeps the singleton default ResourceLoadScheduler.
        (WebCore::resourceLoadScheduler): Refactor this function to either ask the LoaderStrategy or call through to

        Revert back to using that single choke point everywhere:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::willSendRequest):

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::performPostLoadActions):

2012-10-26  Elliott Sprehn  <esprehn@chromium.org>

        Try to fix the windows build
        https://bugs.webkit.org/show_bug.cgi?id=100556

        Reviewed by Eric Seidel.

        Touch files by adding whitespace to try and make the windows
        build bot regenerate files.

        No new tests, just kick the bot.

        * dom/DOMAllInOne.cpp:
        * html/HTMLElementsAllInOne.cpp:
        * html/shadow/TextControlInnerElements.cpp:

2012-10-26  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Platform Abstraction for WebKit Resource/Image Loading
        https://bugs.webkit.org/show_bug.cgi?id=100518

        PR 231732

        Reviewed by Yong Li.

        Use the new resource/image loading abstraction ResourceStore.

        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        (WebCore::Image::loadPlatformResource):

2012-10-26  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions] Block children have incorrect offset when shape-inside element lays out below other elements
        https://bugs.webkit.org/show_bug.cgi?id=98189

        Reviewed by Dirk Schulze.

        The initial code assumed that each block created a new layout state, such that
        LayoutState::layoutOffset would be specific to each block child of a shape-inside.
        Typically, however, block children of a shape-inside do not create a new layout state,
        and therefore we use the current element's offset instead.

        Test: fast/exclusions/shape-inside/shape-inside-subsequent-blocks.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Modified to use only logicalTop
        rather than LayoutState::layoutOffset::width/height and logicalTop.

2012-10-26  Elliott Sprehn  <esprehn@chromium.org>

        Remove setRenderStyle in favor of callbacks on HTMLOptionElement and HTMLOptGroupElement
        https://bugs.webkit.org/show_bug.cgi?id=100397

        Reviewed by Ojan Vafai.

        Use Node custom callbacks to support the non-renderer style caching for option
        and optgroup eliminating the need for setRenderStyle.

        setRenderStyle only existed to support HTMLOptionElement and HTMLOptGroupElement
        so they could store their RenderStyle even though they have no renderer. This
        means all style setting went through the virtual call to setRenderStyle, and it
        also hid the if statement protecting against null renderers meaning we end up
        checking if the renderer is null repeatedly in recalcStyle. This refactor cleans
        up recalcStyle to be more clear about what's going on.

        No new tests needed, this is just a refactor.

        * dom/Element.cpp:
        (WebCore::Element::pseudoStyleCacheIsInvalid):
        (WebCore::Element::recalcStyle):
        * dom/Node.cpp:
        (WebCore::Node::createRenderer):
        (WebCore::Node::setRenderStyle):
            Removed this method because it was only here to support HTMLOptionElement
            and HTMLOptGroupElement. Instead we can use node custom callbacks.
        * dom/Node.h:
        (WebCore::Node::nonRendererStyle): Renamed from nonRendererRenderStyle to match other style methods.
        * dom/NodeRenderStyle.h:
        (WebCore::Node::renderStyle):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
        (WebCore::HTMLOptGroupElement::attach): Reorder the logic to avoid calling styleForRenderer twice.
        (WebCore::HTMLOptGroupElement::updateNonRenderStyle): Updates the cached non-renderer style.
        (WebCore::HTMLOptGroupElement::nonRendererStyle):
        (WebCore::HTMLOptGroupElement::customStyleForRenderer):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::attach): Reorder the logic to avoid calling styleForRenderer twice.
        (WebCore::HTMLOptionElement::updateNonRenderStyle): Updates the cached non-renderer style.
        (WebCore::HTMLOptionElement::nonRendererStyle):
        (WebCore::HTMLOptionElement::customStyleForRenderer):
        (WebCore::HTMLOptionElement::didRecalcStyle): Requests the repaint of the select like setRenderStyle used to.
        * html/HTMLOptionElement.h:

2012-10-26  Dirk Schulze  <krit@webkit.org>

        -webkit-clip-path property should just reference clipPath
        https://bugs.webkit.org/show_bug.cgi?id=100531

        Reviewed by Eric Seidel.

        The -webkit-clip-path property should just reference clipPath. Added a check for that.

        Test: css3/masking/clip-path-reference-of-fake-clipPath.html

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

2012-10-26  Aaron Colwell  <acolwell@chromium.org>

        Remove the circular reference between TextTrack and TextTrackCue
        https://bugs.webkit.org/show_bug.cgi?id=100300

        Reviewed by Eric Carlson.

        Changed TextTrackCue.m_track to a normal pointer to break the circular
        reference that was keeping both objects from ever getting deleted.

        No new tests. This simply fixes a memory leak.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::~TextTrack):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::TextTrackCue):
        (WebCore::TextTrackCue::~TextTrackCue):
        (WebCore::TextTrackCue::track):
        (WebCore::TextTrackCue::setTrack):
        * html/track/TextTrackCue.h:
        (TextTrackCue):

2012-10-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Breakpoints are not managed correctly when editing uiSourceCode that was bound to ScriptFile after JavaScriptSourceFrame creation.
        https://bugs.webkit.org/show_bug.cgi?id=100535

        Reviewed by Pavel Feldman.

        Added SourceMappingChanged event to UISourceCode and made
        JavaScriptSourceFrame update ScriptFile events listeners on it.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype._onSourceMappingChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._updateScriptFile):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._bindUISourceCodeToScripts):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.setSourceMapping):

2012-10-26  Vincent Scheib  <scheib@chromium.org>

        Unreviewed, rolling out r132644.
        http://trac.webkit.org/changeset/132644
        https://bugs.webkit.org/show_bug.cgi?id=100497

        Causes webkit_unit_tests
        MemoryInstrumentationTest.ImageObserver to fail.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::reportMemoryUsage):
        * platform/network/ResourceRequestBase.h:
        (ResourceRequestBase):
        * platform/network/chromium/ResourceRequest.cpp:
        * platform/network/chromium/ResourceRequest.h:

2012-10-26  Zeno Albisser  <zeno@webkit.org>

        [Qt] MiniBrowser segfaults on exit after using WebGL.
        https://bugs.webkit.org/show_bug.cgi?id=100523

        The display connection must not be closed before
        destroying the offscreen window.
        Therefore opening the connection is moved to the
        getXWindow() function. And closing the connection
        is being moved to the destructor of the offscreen window.

        Reviewed by Kenneth Rohde Christiansen.


        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::OffScreenRootWindow::OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::getXWindow):
        (OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::display):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (WebCore):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):

2012-10-26  Parth Patel  <parpatel@rim.com>

        [BlackBerry] Extending existing ThreadUnsafe singletons in webkit to
        Generic ThreadUnsafe Singleton
        https://bugs.webkit.org/show_bug.cgi?id=100529

        Reviewed by Yong Li.

        No new tests added as there was no behavioural change.

        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore):
        * platform/network/blackberry/NetworkManager.h:
        (NetworkManager):

2012-10-26  Mike West  <mkwst@chromium.org>

        Web Inspector: Fix log-type icon alignment.
        https://bugs.webkit.org/show_bug.cgi?id=100520

        Reviewed by Yury Semikhatsky.

        The icons are just a pixel or two off, and it's driving me nuts.

        * inspector/front-end/inspector.css:
        (.console-message::before, .console-user-command::before, #console-prompt::before, .console-group-title::before):
        (.console-warning-level::before):

2012-10-26  Erik Arvidsson  <arv@chromium.org>

        Replaceable attributes should also have readonly
        https://bugs.webkit.org/show_bug.cgi?id=91768

        Reviewed by Adam Barth.

        This updates the code generators for JSC and V8 to handle this case correctly.

        * Modules/intents/DOMWindowIntents.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2012-10-26  Nico Weber  <thakis@chromium.org>

        Clear m_orientation in FrameData::clear() for skia
        https://bugs.webkit.org/show_bug.cgi?id=100456

        Reviewed by Stephen White.

        clear() is only called by the FrameData destructor and for multi-image
        images in BitmapImage::destroyDecodedData(). Multi-frame images don't
        have exif data, so this patch should have no effect in practice. It
        makes the skia code match the CG code in BitmapImageCG.cpp though.

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::FrameData::clear):

2012-10-26  Florin Malita  <fmalita@chromium.org>

        Crash on loading SVG filter resource on HTML element
        https://bugs.webkit.org/show_bug.cgi?id=100491

        Reviewed by Dirk Schulze.

        Skip non-filter elements referenced via -webkit-filter.

        Test: svg/filters/filter-reference-crash.html

        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayerFilterInfo::updateReferenceFilterClients):

2012-10-26  Antti Koivisto  <antti@apple.com>

        Lots of time spent under DNSResolveQueue::platformProxyIsEnabledInSystemPreferences
        https://bugs.webkit.org/show_bug.cgi?id=100514

        Reviewed by Anders Carlsson.

        DNSResolveQueue::platformProxyIsEnabledInSystemPreferences gets called for every link in
        the document. The function is relatively slow.
        
        This patch caches the result of the last check for 5 seconds. Based on code comments
        prefetching is disabled with proxies due to regressing performance with some configurations.
        Proxy status changes rarely and a slight reaction delay shoudn't cause practical problems.

        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::DNSResolveQueue):
        
            Add constructor. Also fixes a bug, m_requestsInFlight was not initialized.
            
        (WebCore):
        (WebCore::DNSResolveQueue::isUsingProxy):
        (WebCore::DNSResolveQueue::add):
        (WebCore::DNSResolveQueue::fired):
        * platform/network/DNSResolveQueue.h:
        (DNSResolveQueue):

2012-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132662.
        http://trac.webkit.org/changeset/132662
        https://bugs.webkit.org/show_bug.cgi?id=100528

        It is not necessary any more. (Requested by loislo on
        #webkit).

        * platform/qt/MemoryUsageSupportQt.cpp:
        (WebCore::MemoryUsageSupport::memoryUsageByComponents):
        (WebCore):

2012-10-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix for Qt builders.

        * platform/qt/MemoryUsageSupportQt.cpp:

2012-10-26  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r132658.
        http://trac.webkit.org/changeset/132658
        https://bugs.webkit.org/show_bug.cgi?id=100515

        It broke the Qt build

        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::addPlatformComponentsInfo):
        (WebCore):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * platform/MemoryUsageSupport.cpp:
        (WebCore::MemoryUsageSupport::memoryUsageByComponents):
        * platform/MemoryUsageSupport.h:
        (ComponentInfo):
        (WebCore::MemoryUsageSupport::ComponentInfo::ComponentInfo):
        (MemoryUsageSupport):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore):
        * platform/PlatformMemoryInstrumentation.h:
        (PlatformMemoryTypes):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (WebCore::MemoryUsageSupport::memoryUsageByComponents):

2012-10-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Some context menu items are duplicated on Resources and Sources panels.
        https://bugs.webkit.org/show_bug.cgi?id=100522

        Reviewed by Pavel Feldman.

        Method appendApplicableItems now receives event as a parameter.
        HandlerRegistry now makes sure that it is not called more than once for certain context menu event.

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._emptyElementContextMenu):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointContextMenu):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._emptyElementContextMenu):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.Placard.prototype._placardContextMenu):
        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu):
        (WebInspector.ContextMenu.prototype.show):
        (WebInspector.ContextMenu.prototype.appendApplicableItems):
        (WebInspector.ContextMenu.Provider.prototype.appendApplicableItems):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._contextMenu):
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane.prototype._contextMenu):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._contextMenuInDataTable):
        * inspector/front-end/DefaultTextEditor.js:
        (WebInspector.DefaultTextEditor.prototype._contextMenu):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._contextMenuEventFired.set get var):
        * inspector/front-end/ElementsPanelDescriptor.js:
        (WebInspector.ElementsPanelDescriptor.prototype.appendApplicableItems):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
        * inspector/front-end/HandlerRegistry.js:
        (WebInspector.HandlerRegistry.prototype.appendApplicableItems):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype._contextMenu):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype.handleContextMenu):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkLogView.prototype._contextMenu):
        * inspector/front-end/NetworkPanelDescriptor.js:
        (WebInspector.NetworkPanelDescriptor.prototype.appendApplicableItems):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype._contextMenuEventFired):
        (WebInspector.ObjectPropertyTreeElement.prototype._contextMenuFired):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._handleContextMenuEvent):
        (WebInspector.ProfileSidebarTreeElement.prototype.handleContextMenuEvent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.IndexedDBTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.FileSystemListTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.IDBDatabaseTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.SnippetsNavigatorView.prototype.handleContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.appendApplicableItems):
        * inspector/front-end/ScriptsPanelDescriptor.js:
        (WebInspector.ScriptsPanelDescriptor.prototype.appendApplicableItems):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._contextMenuEventFired):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPaneTab.prototype._tabContextMenu):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._contextMenu):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype._emptyElementContextMenu):
        (WebInspector.WatchExpressionTreeElement.prototype._contextMenu):

2012-10-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: instrument chromium GlyphCache. It keeps ~2mb data on gmail.
        https://bugs.webkit.org/show_bug.cgi?id=100515

        Reviewed by Yury Semikhatsky.

        I replaced old version with an abstract number with new one which precisely reports allocated SkGlyphCache objects and their sizes.

        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * platform/MemoryUsageSupport.cpp:
        (WebCore::MemoryUsageSupport::reportMemoryUsage):
        * platform/MemoryUsageSupport.h:
        (MemoryUsageSupport):
        * platform/PlatformMemoryInstrumentation.cpp:
        (WebCore):
        * platform/PlatformMemoryInstrumentation.h:
        (PlatformMemoryTypes):
        * platform/chromium/MemoryUsageSupportChromium.cpp:
        (reportMemoryUsage):
        (WebCore::reportGlyphCache):
        (WebCore):
        (WebCore::MemoryUsageSupport::reportMemoryUsage):

2012-10-26  Kent Tamura  <tkent@chromium.org>

        [Chromium] Build fix for r132650.
        https://bugs.webkit.org/show_bug.cgi?id=100482

        * platform/text/LocaleWin.cpp:
        (WebCore::LocaleWin::timeFormat):

2012-10-26  Yury Semikhatsky  <yurys@chromium.org>

        [v8] Memory instrumentation: don't count memory of WrapperTypeInfo
        https://bugs.webkit.org/show_bug.cgi?id=100517

        Reviewed by Alexander Pavlov.

        * bindings/v8/V8PerIsolateData.cpp: when estimating bindings memory size skip
        pointers to WrapperTypeInfo objects as they are static fields and belong to
        the data segment.
        (WTF):

2012-10-26  Kent Tamura  <tkent@chromium.org>

        Refactor Localizer-related classes.
        https://bugs.webkit.org/show_bug.cgi?id=100482

        Reviewed by Kentaro Hara.

        - Localizer has unused code
         Localizer should have function implementations only if they are used in
         multiple subclasses.
        - Some Localizer subclasses hide Localizer data members
        - Should use String::isNull to check initialization-or-not

        No new tests. This should not change any behavior.

        * platform/text/Localizer.h:
        (Localizer):
        - timeFormat, shortTimeFormat, and timeAMPMLabels should be pure virtual.
        - Remove m_localizedDateFormatText, m_localizedShortTimeFormatText, and
          m_timeAMPMLabels
        * platform/text/Localizer.cpp:
        Remove implementations of timeFormat, shortTimeFormat, and timeAMPMLabels.

        * platform/text/LocaleICU.h:
        (LocaleICU): Introduce m_timeFormatWithSeconds and m_timeFormatWithoutSeconds.
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::initializeDateTimeFormat):
        Use new data members instead of Localizer data members.
        (WebCore::LocaleICU::dateFormat): Use isNull.

        * platform/text/LocaleNone.cpp:
        (LocaleNone): Add timeFormat, shortTimeFormat, timeAMPMLabels
        implementations, and m_timeAMPMLabels.
        (WebCore::LocaleNone::timeFormat): Returns the HTML time format.
        (WebCore::LocaleNone::shortTimeFormat): Returns the HTML time format.
        (WebCore::LocaleNone::timeAMPMLabels): Returns "AM" and "PM".

        * platform/text/LocaleWin.h:
        (LocaleWin): Add m_timeFormatWithSeconds.
        * platform/text/LocaleWin.cpp:
        (WebCore::LocaleWin::dateFormat): Use isNull.
        (WebCore::LocaleWin::timeFormat): Use m_timeFormatWithSeconds.

        * platform/text/mac/LocaleMac.h:
        (LocaleMac): Rename m_localized*TimeFormatText to m_timeFormatWith*Seconds.
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::timeFormat): Follow the renaming.
        (WebCore::LocaleMac::shortTimeFormat): Ditto.

2012-10-26  Kent Tamura  <tkent@chromium.org>

        Crash in PagePopupController by events after WebPagePopupImpl::closePopup
        https://bugs.webkit.org/show_bug.cgi?id=100454

        Reviewed by Hajime Morita.

        No new tests. The bug is timing-dependent.

        * page/DOMWindowPagePopup.cpp:
        (WebCore::DOMWindowPagePopup::~DOMWindowPagePopup):
        Calls clearPagePopupClient for the associalated PagePopupController object.
        * page/PagePopupController.cpp:
        (WebCore::PagePopupController::setValueAndClosePopup):
        Do nothing if m_popupClient is 0.
        (WebCore::PagePopupController::localizeNumberString): Ditto.
        (WebCore::PagePopupController::clearPagePopupClient): Added.
        * page/PagePopupController.h:
        (PagePopupController): Declare clearPagePopupClient.

2012-10-25  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Bring device geolocation and orientation emulation from behind the experiment
        https://bugs.webkit.org/show_bug.cgi?id=100220

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.UserAgentSettingsTab):

2012-10-26  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: report memory occupied by ResourceRequest instead of its base ResourceRequestBase
        https://bugs.webkit.org/show_bug.cgi?id=100497

        Reviewed by Alexander Pavlov.

        Added memory reporting method to Chromium implementation of ResourceRequest.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::reportMemoryUsageBase): Renamed reportMemoryUsage
        on ResourceRequestBase to reportMemoryUsageBase and made it protected. I'd
        rather make ResourceRequestBase::reportMemoryUsage virtual and override it
        in the descendant but ResourceRequestBase doesn't have any virtual methods
        and shouldn't be used directly (ResourceRequest should be used instead).
        * platform/network/ResourceRequestBase.h:
        (ResourceRequestBase):
        * platform/network/chromium/ResourceRequest.cpp:
        (WebCore::ResourceRequest::reportMemoryUsage):
        (WebCore):
        * platform/network/chromium/ResourceRequest.h:
        (ResourceRequest):

2012-10-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Remove the on-hover highlighting of console messages
        https://bugs.webkit.org/show_bug.cgi?id=100511

        Reviewed by Pavel Feldman.

        This clashes with the hovered element highlight in console messages.

        * inspector/front-end/inspector.css:
        (ol.watch-expressions > li.hovered):

2012-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132612.
        http://trac.webkit.org/changeset/132612
        https://bugs.webkit.org/show_bug.cgi?id=100512

        Crashes fast/events/tabindex-focus-blur-all.html in debug mode
        (Requested by pfeldman on #webkit).

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::styleDidChange):
        (WebCore::RenderTableCol::updateFromElement):
        (WebCore::RenderTableCol::computePreferredLogicalWidths):
        * rendering/RenderTableCol.h:
        (RenderTableCol):

2012-10-26  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: fast return upon setting the same dock side.
        https://bugs.webkit.org/show_bug.cgi?id=100510

        Reviewed by Vsevolod Vlasov.

        Added fast return.

        * inspector/front-end/DockController.js:

2012-10-26  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial build fix: It's glXGetCurrentContext not glxGetCurrentContext :)

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):

2012-10-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Printing should use use high resolution images when available
        https://bugs.webkit.org/show_bug.cgi?id=100488

        Reviewed by Antti Koivisto.

        The images loaded using -webkit-device-pixel-ratio depends on
        the display type (deviceScaleFactor) and thus affects which
        images are being used for printing. Printing should always
        use the higher resolution images (aka 'retina' images).

        Test: fast/media/mq-pixel-ratio-print.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::device_pixel_ratioMediaFeatureEval):

2012-10-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI instrument InspectorResourceAgent. it caches resources for the front-end.
        https://bugs.webkit.org/show_bug.cgi?id=100496

        Reviewed by Yury Semikhatsky.

        It is plain instrumentation for InspectorResourceAgent and NetworkResourceData which is used by the agent.

        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryTypes):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::reportMemoryUsage):
        (WebCore):
        * inspector/InspectorResourceAgent.h:
        (InspectorResourceAgent):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::XHRReplayData::reportMemoryUsage):
        (WebCore):
        (WebCore::NetworkResourcesData::ResourceData::reportMemoryUsage):
        (WebCore::NetworkResourcesData::reportMemoryUsage):
        * inspector/NetworkResourcesData.h:
        (XHRReplayData):
        (ResourceData):
        (NetworkResourcesData):

2012-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132493.
        http://trac.webkit.org/changeset/132493
        https://bugs.webkit.org/show_bug.cgi?id=100509

        It didn't fix the tests on the bot as we had hoped. (Requested
        by drott on #webkit).

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError):

2012-10-26  Zeno Albisser  <zeno@webkit.org>

        [Qt] Temporarily disable use of QXcbNativeInterface in GraphicsSurfaceGLX.
        https://bugs.webkit.org/show_bug.cgi?id=100493

        Once QXcbNativeInterface::nativeResourceForContext() can provide the
        GLXContext for an existing QOpenGLContext, this patch shall be reverted.

        Reviewed by Simon Hausmann.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):

2012-10-26  Zeno Albisser  <zeno@webkit.org>

        [Qt] Remove QOpenGL specific code from GraphicsSurfaceGLX.
        https://bugs.webkit.org/show_bug.cgi?id=100492

        This patch removes most of the QOpenGLContext related code
        from GraphicsSurfaceGLX. This allows sharing almost all
        GraphicsSurfaceGLX code with EFL, by relying on pure GLX.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::OffScreenRootWindow::get):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (OffScreenRootWindow):
        (WebCore):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
        (GraphicsSurfacePrivate):
        (WebCore::resolveGLMethods):

2012-10-26  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL][WK2] Enable WebGL
        https://bugs.webkit.org/show_bug.cgi?id=97652

        Reviewed by Gyuyoung Kim.

        Implemented GraphicsSurface for EFL to enable WebGL for WebKit2.
        Depends on GLX since Evas doesn't provide the necessary functionality.

        No new tests. Covered by existing tests.

        * PlatformEfl.cmake:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::createGraphicsSurfaces):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::createGraphicsSurfaces):
        (WebCore::GraphicsContext3DPrivate::copyToGraphicsSurface):
        (WebCore::GraphicsContext3DPrivate::graphicsSurfaceToken):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/surfaces/efl: Added.
        * platform/graphics/surfaces/efl/GraphicsSurfaceEfl.cpp: Added.
        (WebCore):
        (WebCore::OffScreenRootWindow::get):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
        (WebCore::GraphicsSurface::platformBeginPaint):
        (WebCore::GraphicsSurface::createReadOnlyImage):
        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.h: Added.
        (WebCore):
        (OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::OffScreenRootWindow):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createPixmap):
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
        (WebCore::GraphicsSurfacePrivate::display):
        (WebCore::GraphicsSurfacePrivate::glxPixmap):
        (WebCore::GraphicsSurfacePrivate::size):
        (WebCore::GraphicsSurfacePrivate::glContext):
        (WebCore::resolveGLMethods):
        * platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp:
        (WebCore):
        (WebCore::OffScreenRootWindow::OffScreenRootWindow::get):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):

2012-10-26  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Overrides] Do not persist the User Agent "master switch"
        https://bugs.webkit.org/show_bug.cgi?id=100484

        Reviewed by Yury Semikhatsky.

        The User Agent override state is managed in the front-end, just like for other override-able parameters.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::disable):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.get NetworkAgent):
        (WebInspector.NetworkManager):
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.UserAgentSettingsTab.prototype._createUserAgentSelectRowElement.set checkboxClicked):
        (WebInspector.UserAgentSettingsTab.prototype._createUserAgentSelectRowElement):
        * inspector/front-end/UserAgentSupport.js:
        (WebInspector.UserAgentSupport):
        (WebInspector.UserAgentSupport.prototype.toggleUserAgentOverride):
        (WebInspector.UserAgentSupport.prototype._userAgentChanged):

2012-10-26  Takashi Sakamoto  <tasak@google.com>

        [Shadow]: removing styles in shadow dom subtree causes crash.
        https://bugs.webkit.org/show_bug.cgi?id=100455

        Reviewed by Hajime Morita.

        To quickly check whether shadow roots or elements have any scoped
        styles or not, elements have hasStyleScoped flag. If elements have
        any scoped styles, the styles are direct children of the element.
        The original code just sees how many chilren are scoped style or not.
        However styles in shadow dom subtree are registered with the shadow
        root but are not always direct children of shadow roots. So to check
        whether shadow roots have any scoped styles, modified to count
        number of styles registered with the shadow root.

        Test: fast/dom/shadow/remove-styles-in-shadow-crash.html

        * dom/Node.cpp:
        (WebCore::Node::registerScopedHTMLStyleChild):
        (WebCore::Node::unregisterScopedHTMLStyleChild):
        Made the above two method virtual. class ShadowRoot overrides these
        methods.
        (WebCore::Node::numberOfScopedHTMLStyleChildren):
        Moved HTMLStyleElement.cpp to Node.cpp, because the above two methods
        are moved into Node.cpp.
        * dom/Node.h:
        (Node):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::registerScopedHTMLStyleChild):
        (WebCore::ShadowRoot::unregisterScopedHTMLStyleChild):
        Modify to count how many styles are registered with the shadow root.
        The "counting" is done when styles are registered and unregistered
        with the shadow root, i.e. style element is inserted into document or
        removed from document. When unregister some style, there are no more
        styles registered with the shadow root. Set style scoped flag false.
        * dom/ShadowRoot.h:
        (ShadowRoot):
        * html/HTMLStyleElement.cpp:
        * html/HTMLStyleElement.h:
        (WebCore::HTMLStyleElement::isRegisteredAsScoped):
        Now isRegisteredAsScoped is used in Node.cpp, so removed inline and
        moved .cpp to .h.

2012-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132589.
        http://trac.webkit.org/changeset/132589
        https://bugs.webkit.org/show_bug.cgi?id=100498

        Breaks font-face layout tests (Requested by pfeldman on
        #webkit).

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):

2012-10-26  Takashi Sakamoto  <tasak@google.com>

        [Shadow DOM] Needs @host rule for ShadowDOM styling
        https://bugs.webkit.org/show_bug.cgi?id=88606

        Reviewed by Hajime Morita.

        Implemented @host-@rules according to the shadow dom spec:
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#host-at-rule
        The design doc is:
        https://docs.google.com/document/d/1P2yorchF8lci2sccr-mVSRf2dtvjKeiuyQWzCB2bEA8/edit

        Test: fast/dom/shadow/athost-atrules.html

        * css/CSSGrammar.y.in:
        Added rules for parsing @host @-rules.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectAtToken):
        Added a new token "@host".
        (WebCore::CSSParser::createHostRule):
        Added a new method to create an @host @-rule, which is invoked from
        (WebCore):
        * css/CSSParser.h:
        Added a declaration of the above new method: createHostRule.
        * css/CSSPropertySourceData.h:
        Added HOST_RULE to enum Type.
        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):
        Modified multiple bool arguments into one argument. Now it
        uses combinations of values from enum AddRuleFlags.
        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addStyleRule):
        Updated according to the RuleData's change.
        Modified to Invoke increaseSpecificity if the given rule is @host
        @-rule.
        (WebCore::RuleSet::addRulesFromSheet):
        Invoked addHostRule if the given rule is @host @-rule.
        * css/RuleSet.h:
        (RuleData):
        (WebCore::RuleData::increaseSpecificity):
        Added a new method to increase selector's specificity. This method is
        used to make @host @-rules' specificity larger than normal author
        rules' specificity.
        (RuleSet):
        * css/StyleResolver.cpp:
        (WebCore::makeRuleSet):
        (WebCore::StyleResolver::addHostRule):
        A wrapper method to invoke StyleScopeResolver::addHostRule. The method
        is used to make only StyleResolver know an implementation detail about
        class StyleScopeResolver.
        (WebCore::StyleResolver::appendAuthorStylesheets):
        Updated according to the RuleData's change.
        (WebCore::StyleResolver::styleSharingCandidateMatchesHostRules):
        A new method to find matched host rules when an element is given.
        This method invokes
        StyleScopeResolver::styleSharingCandidateMatchesHostRules to find
        matched host rules.
        (WebCore):
        (WebCore::StyleResolver::matchHostRules):
        A new method to find matched host rules when an element is given.
        This method invokes StyleScopeResolver::matchHostRules to find
        matched host rules.
        (WebCore::StyleResolver::matchScopedAuthorRules):
        Modified to invoke matchHostRules.
        (WebCore::StyleResolver::locateSharedStyle):
        Disable sibling style cache if the given element is a shadow host and
        any @host @-rules are applied to the element.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::ensureScopeResolver):
        If no scopeResolver is created, create and return the instance.
        If created, just return the instance.
        (StyleResolver):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::reportMemoryUsage):
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        (WebCore::StyleRuleHost::StyleRuleHost):
        Implemented class StyleRuleHost. The class is almost the same as
        StyleRuleBlock except type.
        (WebCore):
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::isHostRule):
        (StyleRuleHost):
        (WebCore::StyleRuleHost::create):
        (WebCore::StyleRuleHost::copy):
        (WebCore):
        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::ensureAtHostRuleSetFor):
        A new method to create a new RuleSet for the given shadow root.
        (WebCore):
        (WebCore::StyleScopeResolver::atHostRuleSetFor):
        A new private inline method to obtain @host @-rules declared in
        the given shadow root.
        (WebCore::StyleScopeResolver::addHostRule):
        Added a new method to register @host @-rules with shadow roots.
        (WebCore::StyleScopeResolver::styleSharingCandidateMatchesHostRules):
        A new method to find whether any @host @-rules are applied to
        the given host element.
        (WebCore::StyleScopeResolver::matchHostRules):
        A new method to find matched rules for the given host element.
        (WebCore::StyleScopeResolver::reportMemoryUsage):
        * css/StyleScopeResolver.h:
        (WebCore):
        (StyleScopeResolver):
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):

2012-10-26  Jaehun Lim  <ljaehun.lim@samsung.com>

        [CMAKE] Add TextAutosizer.cpp in WebCore/CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=100476

        Reviewed by Kentaro Hara.

        ENABLE_TEXT_AUTOSIZING option is added in CMAKE,
        but the source file for that feature is omitted.

        No new tests. Covered by existing tests.

        * CMakeLists.txt:

2012-10-26  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderTableCol::computePreferredLogicalWidths and RenderTableCol::layout should never be called
        https://bugs.webkit.org/show_bug.cgi?id=99861

        Reviewed by Ojan Vafai.

        RenderTableCol's computePreferredLogicalWidths and layout's only purpose were to clear the preferred logical
        widths dirty / layout flag so that we would properly propagate the information to our containing table. This
        led to clunky code where the table layout code had to forcefully call RenderTableCol::computePreferredLogicalWidths
        or else we would ignore the next layout hint on the <col> or <colgroup>.

        Tests: fast/table/col-span-change-relayout.html
               fast/table/simplified-layout-table.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        Simplified the code now that we only need to iterate over the sections.

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        Removed call to computePreferredLogicalWidths.

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::styleDidChange):
        (WebCore::RenderTableCol::updateFromElement):
        Forward a layout hint to the table so that we properly recompute the cell's logical withs.

        (WebCore::RenderTableCol::computePreferredLogicalWidths):
        (WebCore::RenderTableCol::layout):
        Change our implementations of those 2 methods to be no-ops, while enforcing that they are
        never called when it was possible.

        (WebCore::RenderTableCol::propagateLayoutCueToTable):
        New helper function that forward any layout cue to the containing table, this works around
        us not clearing the flags which confuses RenderObject markContainingBlocksForLayout and
        invalidateContainerPreferredLogicalWidths.

        * rendering/RenderTableCol.h:
        Made the function that we are not expected to be called private.

2012-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132601.
        http://trac.webkit.org/changeset/132601
        https://bugs.webkit.org/show_bug.cgi?id=100494

        It broke the Qt build (Requested by Ossy on #webkit).

        * PlatformEfl.cmake:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::createGraphicsSurfaces):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::OffScreenRootWindow::get):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (OffScreenRootWindow):
        (WebCore):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
        (GraphicsSurfacePrivate):
        (WebCore::resolveGLMethods):

2012-10-26  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: do not report memory occupied by v8::String
        https://bugs.webkit.org/show_bug.cgi?id=100487

        Reviewed by Alexander Pavlov.

        Pointers to v8::String are skipped when reporting memory usage of V8 bindings'
        string cache.

        * bindings/v8/V8Binding.cpp:
        (WTF):

2012-10-26  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Add support for auto-height regions with region-breaks
        https://bugs.webkit.org/show_bug.cgi?id=99952

        Reviewed by David Hyatt.

        This patch takes region breaks into account when computing the height for auto logical height regions.
        When a region break is encountered before/after an element from within a flow thread and we are in the layout
        phase in which we lay out the flow threads in regions unconstrained, we use the region break to
        compute the region override logical content height if the region break fits inside an auto logical height region.
        A region break inside an auto logical height region determines the region override logical content height, taking
        min/max height into account.

        Tests: fast/regions/autoheight-allregions-nobreaks.html
               fast/regions/autoheight-allregions.html
               fast/regions/autoheight-breakafteralways-maxheight.html
               fast/regions/autoheight-breakbeforealways.html
               fast/regions/autoheight-firstregion-breakalways.html
               fast/regions/autoheight-lastregion-overflowauto-breaksignored.html
               fast/regions/autoheight-lastregion-overflowauto.html
               fast/regions/autoheight-middleregion.html
               fast/regions/autoheight-secondregion-breakoutside.html
               fast/regions/autoheight-secondregion.html
               fast/regions/autoheight-singleregion-breakafteralways-maxheight.html
               fast/regions/autoheight-singleregion-breakafteralways.html
               fast/regions/autoheight-singleregion-breakaftermargin.html
               fast/regions/autoheight-singleregion-breakbeforealways-minheight.html
               fast/regions/autoheight-singleregion-breakbeforealways.html
               fast/regions/autoheight-singleregion-multiplebreaks.html
               fast/regions/autoheight-singleregion-overflowauto-breaksignored.html
               fast/regions/autoheight-singleregion-overflowauto.html

        * rendering/RenderBlock.cpp: When encounter a region break before/after an element inside a flow thread,
        try to use it to determine the override logical content height for auto logical height regions.
        (WebCore::RenderBlock::applyBeforeBreak):
        (WebCore::RenderBlock::applyAfterBreak):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::computeOverflowStateForRegions):
        Simulate a region break at the end of the flow thread content.
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::clearOverrideLogicalContentHeightInRegions):
        Helper method used to clear the overrideLogicalContentHeight for auto logical height regions.
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        Extend the method to process region breaks. The method returns true if at least one auto logical height region
        has its override logical content height computed.        
        * rendering/RenderFlowThread.h:
        * rendering/RenderRegion.cpp: Make these methods work with auto logical height regions.
        (WebCore::RenderRegion::pageLogicalHeight):
        (WebCore::RenderRegion::logicalHeightOfAllFlowThreadContent):

2012-10-26  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL][WK2] Enable WebGL
        https://bugs.webkit.org/show_bug.cgi?id=97652

        Reviewed by Gyuyoung Kim.

        Implemented GraphicsSurface for EFL to enable WebGL for WebKit2.
        Depends on GLX since Evas doesn't provide the necessary functionality.

        No new tests. Covered by existing tests.

        * PlatformEfl.cmake:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::createGraphicsSurfaces):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::createGraphicsSurfaces):
        (WebCore::GraphicsContext3DPrivate::copyToGraphicsSurface):
        (WebCore::GraphicsContext3DPrivate::graphicsSurfaceToken):
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        (GraphicsContext3DPrivate):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/surfaces/efl: Added.
        * platform/graphics/surfaces/efl/GraphicsSurfaceEfl.cpp: Added.
        (WebCore):
        (WebCore::OffScreenRootWindow::get):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
        (WebCore::GraphicsSurface::platformBeginPaint):
        (WebCore::GraphicsSurface::createReadOnlyImage):
        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.h: Added.
        (WebCore):
        (OffScreenRootWindow):
        (WebCore::OffScreenRootWindow::OffScreenRootWindow):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createPixmap):
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
        (WebCore::GraphicsSurfacePrivate::display):
        (WebCore::GraphicsSurfacePrivate::glxPixmap):
        (WebCore::GraphicsSurfacePrivate::size):
        (WebCore::GraphicsSurfacePrivate::glContext):
        (WebCore::resolveGLMethods):
        * platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp:
        (WebCore):
        (WebCore::OffScreenRootWindow::OffScreenRootWindow::get):
        (WebCore::OffScreenRootWindow::~OffScreenRootWindow):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::createSurface):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
        (WebCore::GraphicsSurfacePrivate::swapBuffers):

2012-10-26  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Add feature flags for CSS Device Adaptation
        https://bugs.webkit.org/show_bug.cgi?id=95960

        Reviewed by Kenneth Rohde Christiansen.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.features.am:

2012-10-26  Li Yin  <li.yin@intel.com>

        fast/forms/file/input-file-write-files.html should cover correct setting value
        https://bugs.webkit.org/show_bug.cgi?id=100085

        Reviewed by Kentaro Hara.

        From Spec: http://dev.w3.org/html5/spec/single-page.html#dom-input-value-filename
        On setting, if the new value is the empty string, it must empty the list of selected
        files; otherwise, it must throw an InvalidStateError exception.

        Test: fast/forms/file/input-file-value.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue):
        (WebCore):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLInputElement.idl:

2012-10-26  Keishi Hattori  <keishi@webkit.org>

        Refactor calendar picker to remove _x/_y from DaysTable
        https://bugs.webkit.org/show_bug.cgi?id=100460

        Reviewed by Kent Tamura.

        _x/_y properties keep the coordinates for the selection but when we add
        week and month picking capabilities, the selection can't be expressed as
        a set of coordinates. This change will remove it.

        No new tests. Covered by calendar-picker-*.html tests.

        * Resources/pagepopups/calendarPicker.js:
        (DaysTable): Removed _x/_y properties.
        (DaysTable.prototype._hasSelection): Changed to refer to the DOM to see if we have a selection.
        (DaysTable.prototype.navigateToMonthAndKeepSelectionPosition): Lookup the selection position.
        (DaysTable.prototype.selectDate): Deselect first so we don't have two selections.
        (DaysTable.prototype._selectRangeContainingNode): Selects date/week/month containing the given day node.
        (DaysTable.prototype._selectRangeAtPosition): Selects date/week/month at the given position.
        (DaysTable.prototype._firstNodeInSelectedRange): Returns first selected day node.
        (DaysTable.prototype._deselect): Deselects all selections.
        (DaysTable.prototype._handleMouseOver): Use _selectRangeContainingNode so we don't have many places handling the selection.
        (DaysTable.prototype._handleMouseOut): Use _deselect.
        (DaysTable.prototype._handleKey): Lookup the selection position.
        (DaysTable.prototype.updateSelection): Use _selectRangeAtPosition.

2012-10-26  Ningxin Hu  <ningxin.hu@intel.com>

        FileReader abort case causes Chromium renderer crash
        https://bugs.webkit.org/show_bug.cgi?id=99142

        Reviewed by Kentaro Hara.

        Before dispatching load event, FileReader should check if it is
        in aborting.

        Test: manually launch fast/files/file-reader-abort.html in Chromium
        browser and compare the result with
        fast/files/file-reader-abort-expected.txt.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::didFinishLoading):

2012-10-26  Julien Chaffraix  <jchaffraix@webkit.org>

        Generate less repaint calls during subtree detaching
        https://bugs.webkit.org/show_bug.cgi?id=99741

        Reviewed by Eric Seidel.

        Following bug 98336, detach is now a subtree top-down operation. Because we
        track visual overflow from our children during layout for most cases, we can
        generate a repaint only on the subtree root.

        On http://dglazkov.github.com/performance-tests/redraw.html, this ups the FPS to
        26 fps from 22 fps on my MBP (+ 15%). On PerformanceTests/layout/subtree-detach.html,
        it decreases the time by 35%. This is due to being the best case and we now generate
        only one repaint per detach phase.

        Covered by existing pixels tests (including but not limited to repaint ones).

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers):
        Changed the function not to be recursive anymore to generate one painting for
        our root only. Added a FIXME about using our RenderLayer for repainting to avoid
        the cost of computing our absolute repaint rectangle.

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        Removed the logic for repainting in the general case. However we still force a repaint
        if we have a RenderLayer as we don't track their overflow in some cases (e.g. positioned
        objects). This check is conservative and could be narrowed down (e.g overflow RenderLayers
        are properly accounted for in our clipppedOverflowRectForRepaint).

2012-10-26  Kenichi Ishibashi  <bashi@chromium.org>

        local(Helvetica) in src descriptor prevent fallback
        https://bugs.webkit.org/show_bug.cgi?id=100446

        Reviewed by Dan Bernstein.

        FontCache::getCachedFontData() has a mechanism that aliases a few pairs
        of font family names, so that if the family name specified in the font-family
        property is not available on the system, but the its alias is available,
        it will be used instead. This is appropriate for the font-family property,
        but not for font family names specified in the local() function of the src
        descriptor in a @font-face rule.

        This patch disables the mechanism while checking src descriptor of @font-face.

        No new tests. It's difficult to test the change because 'Helvetica' can
        be mapped any other font. For example, chromium DRT uses FontConfig to
        map Helvetica to Times New Roman. Other ports may map Helvetica to other
        fonts. We can't define the expected result.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        Call fontCache()->getCachedFontData() with checkingAlternateName = true.
        This disables aliasing font family names in FontCache.

2012-10-26  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Doctype Audits panel code
        https://bugs.webkit.org/show_bug.cgi?id=100371

        Reviewed by Alexander Pavlov.

        This is a preparation step for ongoing refactoring.
        It is much easier to read doctyped code.

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.MinimizeDnsLookupsRule.prototype.doRun):
        Replaced "undefined" with "null"
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditCategory.prototype.callbackWrapper):
        Removed callback parameter indirection.        
        (WebInspector.AuditRuleResult.prototype.addFormatted):
        Converted private instance function to scoped function.

2012-10-26  János Badics  <jbadics@inf.u-szeged.hu>

        [Qt]REGRESSION(r131428): cookies.db created on wrong place
        https://bugs.webkit.org/show_bug.cgi?id=99445

        Reviewed by Simon Hausmann.

        Added a slash to the path of cookies.db in CookieJarQt.cpp.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::SharedCookieJarQt::SharedCookieJarQt):

2012-10-26  Adam Barth  <abarth@webkit.org>

        Unreviewed. This ASSERT is no longer correct (and fires on many tests.)

        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):

2012-10-26  Kent Tamura  <tkent@chromium.org>

        [Chromium-Win] Support shortTimeFormat
        https://bugs.webkit.org/show_bug.cgi?id=100471

        Reviewed by Kentaro Hara.

        No new tests. Covered by fast/forms/time-multiple-fields/ and
        WebKit/chromium/tests/LocaleWinTest.

        * platform/text/LocaleWin.cpp:
        (WebCore::LocaleWin::shortTimeFormat):
        Gets a format by LOCALE_SSHORTTIME. If it fails, remove "<delimiter>ss"
        from the format by LOCALE_STIMEFORMAT.
        * platform/text/LocaleWin.h:
        (LocaleWin): Declare m_timeFormatWithoutSeconds.

2012-10-26  Adam Barth  <abarth@webkit.org>

        Unreviewed. Update run-bindings-tests results after recent active DOM
        object changes.

        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::constructorCallback):
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::wrap):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructorConstructorCallback):
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::wrap):

2012-10-26  MORITA Hajime  <morrita@google.com>

        [V8] REGRESSION(132540) Assertion failure on V8DOMWrapper::setJSWrapperForDOMNode()
        https://bugs.webkit.org/show_bug.cgi?id=100462

        Reviewed by Adam Barth.

        Removed the no longer correct assertion statement.

        No new tests. Covered by breaking tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):

2012-10-25  Adam Barth  <abarth@webkit.org>

        [V8] WorkerContextExecutionProxy should use ScopedPersistent
        https://bugs.webkit.org/show_bug.cgi?id=100443

        Reviewed by Eric Seidel.

        This class was manually re-implementing the ScopedPersistent pattern.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::initializeIfNeeded):
        (WebCore::WorkerContextExecutionProxy::evaluate):
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WebCore::WorkerContextExecutionProxy::context):
        (WorkerContextExecutionProxy):

2012-10-25  Peter Wang  <peter.wang@torchmobile.com.cn>

        A mistake in WebCore::JavaScriptCallFrame::evaluate which will cause assert failed
        https://bugs.webkit.org/show_bug.cgi?id=100347

        Reviewed by Mark Lam and Filip Pizlo.

        In worker context, calling "JSDOMWindowBase::commonJSGlobalData" will cause assert,
        since there is "ASSERT(isMainThread())" in "JSDOMWindowBase::commonJSGlobalData".

        No new test case, since no behaviour changed.

        * bindings/js/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):

2012-10-25  Adam Barth  <abarth@webkit.org>

        [V8] We can merge the wrapper maps for DOM objects and active DOM objects
        https://bugs.webkit.org/show_bug.cgi?id=100432

        Reviewed by Eric Seidel.

        Now that we use the same object to visit both DOM objects and active
        DOM objects, there's no reason to keep them in separate hash maps.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetDomMapName):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStore::reportMemoryUsage):
        * bindings/v8/DOMDataStore.h:
        (DOMDataStore):
        * bindings/v8/V8DOMMap.cpp:
        * bindings/v8/V8DOMMap.h:
        (NodeWrapperVisitor):
        (WebCore):
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::majorGCPrologue):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::V8WebSocket::constructorCallback):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):

2012-10-25  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] User Challenged again after browser restart for HTTP/FTP sites already successfully authenticated.
        https://bugs.webkit.org/show_bug.cgi?id=100448

        Reviewed by George Staikos.

        Internally reviewed by Joe Mason.

        We didn't check the persistent Credential Storage for Credentials when challenged by the server.

        Manual Test: login to ftp://localhost on BlackBerry device, and restart the browser to login again.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):

2012-10-25  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Add histogram statistics for backing store errors
        https://bugs.webkit.org/show_bug.cgi?id=98465

        Reviewed by Adam Barth.

        Define a macro for consistent asserting (during development), logging, and recording
        internal backing store errors via histograms. Define specific histogram values to
        track issues with opening backing stores to gather stats on corruption.

        No new tests - just the stats, ma'am, just the stats.

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):
        (WebCore::setUpMetadata):
        (WebCore::IDBLevelDBBackingStore::open):
        (WebCore::IDBLevelDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::createIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::updateIDBDatabaseIntVersion):
        (WebCore::IDBLevelDBBackingStore::updateIDBDatabaseMetaData):
        (WebCore::deleteRange):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::deleteIndex):
        (WebCore::IDBLevelDBBackingStore::findKeyInIndex):

2012-10-25  Adam Barth  <abarth@webkit.org>

        [V8] We can merge ActiveDOMObjectPrologueVisitor with ObjectVisitor
        https://bugs.webkit.org/show_bug.cgi?id=100430

        Reviewed by Eric Seidel.

        There's no reason for these visitors to be separate objects anymore.

        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectVisitor::ObjectVisitor):
        (WebCore::ObjectVisitor::visitDOMWrapper):
        (WebCore::V8GCController::majorGCPrologue):

2012-10-25  Tony Chang  <tony@chromium.org>

        Remove unused static methods from DOMTimer.h
        https://bugs.webkit.org/show_bug.cgi?id=100427

        Reviewed by Kenneth Russell.

        Since these values got moved into Settings, these methods are no longer called.

        No new tests, removing dead code.

        * page/DOMTimer.h:
        (DOMTimer): Remove unused getters.

2012-10-25  Leo Yang  <leoyang@rim.com>

        [BlackBerry] Infinite redirect loop is not displayed to user
        https://bugs.webkit.org/show_bug.cgi?id=100420

        Reviewed by George Staikos.

        CNN.com is redirecting us infinitely with 302 http code and response body. We catch
        it my setting our extended error code as we defined. But we were not trying to notify
        error because we have received body. This was wrong. For extended http status code
        which is less than 0 we should display our own error page regardless there was data
        received from the server or not.

        Tested by manually loading CNN.com.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::shouldNotifyClientFailed):

2012-10-25  Nico Weber  <thakis@chromium.org>

        Flip ImageOrientation coordinate system from lefthanded to righthanded
        https://bugs.webkit.org/show_bug.cgi?id=100414

        Reviewed by Eric Seidel.

        platform/graphics, noteably GraphicsContext uses a right-handed
        coordinate system (origin in the top left corner, x growing to the
        right, y to the bottom).  ImageOrientation was an outlier from
        and used a left-handed coordinate system.  This patch makes
        ImageOrientation match the rest of platform/graphics.

        This is a pure refactoring and has no observable effects.

        * platform/chromium/DragImageChromiumSkia.cpp:
        (WebCore::createDragImageFromImage):
        * platform/graphics/ImageOrientation.cpp:
        (WebCore::ImageOrientation::transformFromDefault):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::draw):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):

2012-10-25  Keishi Hattori  <keishi@webkit.org>

        Hide popup while transitioning from the suggestion picker to the calendar picker
        https://bugs.webkit.org/show_bug.cgi?id=99537

        Reviewed by Kent Tamura.

        Right now you can see a squished calendar picker while transitioning
        from suggestion picker from calendar picker. This change will hide the
        popup before opening the calendar picker.

        No new tests.

        * Resources/pagepopups/pickerCommon.js: Hiding the window will also trigger a resize event so I created a separate event, didOpenPicker.
        (hideWindow): Resize the window to 1x1 because we can't resize to 0x0.
        * Resources/pagepopups/suggestionPicker.js:
        (SuggestionPicker.prototype.selectEntry): Hide the window first and then open the calendar picker.

2012-10-25  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):

2012-10-25  Anders Carlsson  <andersca@apple.com>

        Remove feed and feeds URL scheme workarounds
        https://bugs.webkit.org/show_bug.cgi?id=100442

        Reviewed by Dan Bernstein.

        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::enqueueOrDispatchScrollEvent):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):

2012-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132514.
        http://trac.webkit.org/changeset/132514
        https://bugs.webkit.org/show_bug.cgi?id=100440

        "Broke chromium content_browsertests AccessibilityAriaMenu
        AccessibilityInputRange AccessibilityListMarkers" (Requested
        by scheib on #webkit).

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::contentChanged):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        * accessibility/AXObjectCache.h:
        (AXObjectCache):
        (WebCore::AXObjectCache::contentChanged):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::contentChanged):
        (AccessibilityObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::correspondingControlForLabelElement):
        (WebCore::AccessibilityRenderObject::contentChanged):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::isAttachment):
        (WebCore::AccessibilityScrollView::widgetForAttachmentView):
        (WebCore::AccessibilityScrollView::updateScrollbars):
        (WebCore::AccessibilityScrollView::webAreaObject):
        (WebCore::AccessibilityScrollView::elementRect):
        (WebCore::AccessibilityScrollView::documentFrameView):
        (WebCore::AccessibilityScrollView::parentObject):
        (WebCore::AccessibilityScrollView::parentObjectIfExists):
        (WebCore::AccessibilityScrollView::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityScrollView::scrollTo):
        * accessibility/AccessibilityScrollView.h:
        (WebCore::AccessibilityScrollView::scrollView):
        (AccessibilityScrollView):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLineBoxTree):
        (WebCore::RenderBlock::createAndAppendRootInlineBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):

2012-10-25  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12544626> [cg] RenderBlock::selectionGaps() is extremely slow when there are many floats
        https://bugs.webkit.org/show_bug.cgi?id=100413

        Reviewed by Anders Carlsson.

        RenderBlock::selectionGaps() calls GraphicsContext::clipOut(const IntRect&) for each float.
        Sped up the Core Graphics implementation of this function considerably by removing an
        unnecessary call to CGContextGetClipBoundingBox.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipOut): Changed to use CGRectInfinite rather than the bounding
        box of the current clip.

2012-10-25  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (132422): Tiles don't move when the Find dialog causes programmatic scrolls
        https://bugs.webkit.org/show_bug.cgi?id=100433
        <rdar://problem/12575582>

        Reviewed by Simon Fraser.

        Actually update GraphicsLayer positions from updateMainFrameScrollPosition if
        we're doing a programmatic scroll; otherwise programmatic scrolls while scrolling
        on the main thread will short-circuit and end up only updating the GraphicsLayer's
        notion of its current position, but never synchronizing that to the layer itself.

        No new tests, as this is currently untestable.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):

2012-10-25  Simon Fraser  <simon.fraser@apple.com>

        Tiled layers are missing content on zooming
        https://bugs.webkit.org/show_bug.cgi?id=100422

        Reviewed by Beth Dakin.

        Tiled layers using TileCaches were missing content after
        zooming. TileCache was confused in the presence of scaling;
        it unapplies the scale on the layer above the tiles (so the tiles
        live in screen space), and computed the tile coverage rect
        in these tile coordinates. This worked for the page tile cache,
        because its visibleRect was sent in pre-scaled. However, for
        tiled layer TileCaches this was wrong.
        
        Fix by scaling the tile coverage rect by m_scale before
        using it to compute which tiles to throw away and bring in.
        
        To fix the problem of the visibleRect being pre-scaled
        for the page tile cache, remove the setting of the visibleRect
        in RenderLayerCompositor::frameViewDidScroll(), and rely on 
        GraphicsLayerCA::updateVisibleRect() which computes the
        visible rect in the correct, layer coordinates.

        Test: compositing/tiling/tile-cache-zoomed.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateVisibleRect): Call setVisibleRect()
        for all tile cache layers, not just tiled layer ones, but only do
        the visible rect adjustment for those that are not the page tile cache.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::revalidateTiles): Use a coverageRectInTileCoords rect,
        which is scaled to be in the same coordinate space as the tile grid.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidScroll): Remove the code
        that sets the setVisibleRect() on the TiledBacking.

2012-10-25  Adam Barth  <abarth@webkit.org>

        [V8] ActiveDOMNodes no longer require a separate wrapper map
        https://bugs.webkit.org/show_bug.cgi?id=100352

        Reviewed by Eric Seidel.

        There is no longer any reason to keep a separate DOM wrapper map for
        active DOM nodes. We can simply store them in the normal DOM node
        wrapper map (which is more efficient because it doesn't use a HashMap).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GetDomMapName):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStore::reportMemoryUsage):
        * bindings/v8/DOMDataStore.h:
        (DOMDataStore):
        * bindings/v8/IntrusiveDOMWrapperMap.h:
        * bindings/v8/V8DOMMap.cpp:
        * bindings/v8/V8DOMMap.h:
        (WebCore):
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (V8DOMWrapper):
        (WebCore::V8DOMWrapper::getCachedWrapper):

2012-10-25  Tony Chang  <tony@chromium.org>

        Unreviewed, fix the build on Mac.

        Putting the getter in the Settings.h caused the global variable to be inlined and needing it to be exported.
        Instead, put the implementation in the cpp file.

        * page/Settings.cpp:
        (WebCore::Settings::defaultMinDOMTimerInterval):
        (WebCore):
        (WebCore::Settings::defaultDOMTimerAlignmentInterval):
        * page/Settings.h:
        (Settings):

2012-10-25  Tony Chang  <tony@chromium.org>

        Move default DOM Timer values into Settings
        https://bugs.webkit.org/show_bug.cgi?id=100405

        Reviewed by Kenneth Russell.

        Move the global values for defaultMinDOMTimerInterval and defaultDOMTimerAlignmentInterval into
        the Settings object. This is more consistent with other global settings and allows us to remove
        the setters on the DOMTimer object.

        No new tests, this is a refactor.

        * page/DOMTimer.cpp: Remove globals.
        * page/DOMTimer.h:
        (WebCore::DOMTimer::defaultMinTimerInterval): Call through to Settings
        (WebCore::DOMTimer::defaultTimerAlignmentInterval): Call through to Settings.
        (DOMTimer): Remove setters.
        * page/Settings.cpp:
        (WebCore::Settings::setDefaultMinDOMTimerInterval): Use a global in Settings.
        (WebCore::Settings::setDefaultDOMTimerAlignmentInterval): Use a global in Settings.
        * page/Settings.h:
        (WebCore::Settings::defaultMinDOMTimerInterval): Inline the getter.
        (WebCore::Settings::defaultDOMTimerAlignmentInterval): Inline the getter.
        (Settings): Add globals.

2012-10-25  Simon Fraser  <simon.fraser@apple.com>

        Report the tile coverage rect in layer coords, and add some tests for tiled backing and zooming
        https://bugs.webkit.org/show_bug.cgi?id=100416

        Reviewed by Beth Dakin.

        The tileCoverageRect is computed in "tile" coordinates, which don't match
        the visibleRect coordinates. It's more useful when testing to see the
        tile coverage relative to the view bounds, so unapply the scale whem
        reporting tile coverage in tests.

        Tests: platform/mac/tiled-drawing/tiled-drawing-zoom-scrolled.html
               platform/mac/tiled-drawing/tiled-drawing-zoom.html

        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::tileCoverageRect):

2012-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132269.
        http://trac.webkit.org/changeset/132269
        https://bugs.webkit.org/show_bug.cgi?id=100412

        "Speculative rollout of r132269 in hopes of fixing a
        mysterious recalcStyle crasher" (Requested by eseidel on
        #webkit).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderListBox.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):

2012-10-25  Stephen White  <senorblanco@chromium.org>

        Change ReferenceFilterOperations to reference (own) the data passed to
        them.
        https://bugs.webkit.org/show_bug.cgi?id=97715

        Reviewed by Nate Chapin.

        Covered by css3/filters/reference-filter-update-after-remove.html

        * css/CachedSVGDocumentReference.h: Added.
        (CachedSVGDocumentReference):
        New class which holds a CachedResourceHandle<CachedSVGDocument>, but
        can be placed in ReferenceFilterOperation's Data.  It also calls
        addClient() / removeClient(), in order to keep the CachedSVGDocument
        alive until the FilterEffectRenderer can get it.
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::document):
        Accessor for the underlying document.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        Wrap the CachedSVGDocument handle in a CachedSVGDocumentReference, and
        transfer ownership to the ReferenceFilterOperation.
        (WebCore::StyleResolver::createFilterOperations):
        Same as above.
        * platform/graphics/filters/FilterOperation.h:
        (Data):
        New base class for generic data which can be deleted polymorphically.
        (WebCore::FilterOperation::ReferenceFilterOperation::data):
        (WebCore::FilterOperation::ReferenceFilterOperation::setData):
        Use the above-mentioned Data class, instead of a void *.
        (WebCore::FilterOperation::ReferenceFilterOperation::ReferenceFilterOperation):
        Don't initialize data to null; OwnPtr will do that for us.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        Extract the cached SVG document from the reference data.
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayerFilterInfo::updateReferenceFilterClients):
        Extract the cached SVG document from the reference data.

2012-10-25  Simon Fraser  <simon.fraser@apple.com>

        Incorrect tile size in the slow scrolling case
        https://bugs.webkit.org/show_bug.cgi?id=100411

        Reviewed by Beth Dakin.

        If we're in slow scrolling mode, we don't want to inflate the
        coverage rect based on scrollability. This ensures that the few
        big tiles we create have the correct size.

        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::computeTileCoverageRect):

2012-10-25  Nico Weber  <thakis@chromium.org>

        Move ImageOrientation transform back in CG space (lower-left origin), adapt the skia code to work with that, turn on feature for chromium
        https://bugs.webkit.org/show_bug.cgi?id=100401

        Reviewed by Eric Seidel.

        This is an alternative fix for the regression caused by r132384 / bug
        100179. The bug exists because different pieces of code didn't agree
        which space the transformation returned by ImageOrientation was in.

        r132384 moved it from CG coordinates to skia coordinates, but didn't
        do it completetely. This CL reverts this part of r132384 so that the
        transformation is in CG coordinates again, and adapts the skia code to
        work in that space.

        Alternatively, https://bugs.webkit.org/show_bug.cgi?id=100319 woudl
        make the cg code work with the transform in skia coordinates.

        Covered by fast/images/exif-orientation.html

        * platform/chromium/DragImageChromiumSkia.cpp:
        (WebCore::createDragImageFromImage):
        * platform/graphics/ImageOrientation.cpp:
        (WebCore::ImageOrientation::transformFromDefault):
        * platform/graphics/ImageOrientation.h:
        (WebCore):
        (WebCore::ImageOrientation::usesWidthAsHeight):
        (WebCore::ImageOrientation::fromEXIFValue):
        (ImageOrientation):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::draw):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):

2012-10-25  Simon Fraser  <simon.fraser@apple.com>

        Log the tile cache tile size in test output
        https://bugs.webkit.org/show_bug.cgi?id=100409

        Reviewed by Beth Dakin.

        When dumping tile cache information in tests, also dump the tile size.

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
        * platform/graphics/ca/mac/TileCache.h:

2012-10-25  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        do not multiply/demultiply colors when alpha is 255
        https://bugs.webkit.org/show_bug.cgi?id=89246

        Reviewed by Kenneth Rohde Christiansen.

        Do not use colorFromPremultipliedARGB in getImageData nor
        premultipliedARGBFromColor in putByteArray. Avoiding object creation
        and function call make canvas.getImageData about 10% faster and
        canvas.putImageData about 30% faster.

        Also, we avoid multiplication/demultiplication computation when alpha
        is 255. Result is the same, but when there is no transparency,
        canvas.getImageData is about 4x faster, and canvas.putImageData is
        about 2x faster.

        No new tests. No change in behavior.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::putByteArray):

2012-10-25  Nate Chapin  <japhet@chromium.org>

        Add a main resource type to the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=99864

        Reviewed by Adam Barth.

        No new tests, no functionality change.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::hasTextContent):
        (WebCore::InspectorPageAgent::cachedResourceType):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFail):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource):
        (WebCore::CachedRawResource::addAdditionalRequestHeaders):
        (WebCore):
        (WebCore::CachedRawResource::setShouldBufferData):
        (WebCore::CachedRawResource::loader):
        (WebCore::CachedRawResource::clear):
        * loader/cache/CachedRawResource.h:
        (WebCore):
        (CachedRawResource):
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        (WebCore::cachedResourceTypeToTargetType):
        (WebCore::CachedResource::updateResourceRequest):
        (WebCore):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::setResourceError):
        (WebCore::CachedResource::resourceError):
        (CachedResource):
        (WebCore::CachedResource::ignoreForRequestCount):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        * loader/cache/CachedResourceLoader.h:
        (CachedResourceLoader):
        * platform/network/ResourceLoadPriority.h:
        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::toResourceLoadPriority):
        (WebCore::toHTTPPipeliningPriority):

2012-10-25  Ojan Vafai  <ojan@chromium.org>

        [V8] Add histograms to measure V8 work done during window close and navigation
        https://bugs.webkit.org/show_bug.cgi?id=100358

        Reviewed by Adam Barth.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::clearForClose):
        (WebCore::ScriptController::clearWindowShell):

2012-10-25  Antti Koivisto  <antti@apple.com>

        Avoid unnecessary style recalcs on id attribute mutation.
        https://bugs.webkit.org/show_bug.cgi?id=100395

        Reviewed by Andreas Kling.

        There is no need to invalidate element style on id attribute change if neither the old nor the new id were 
        mentioned in any stylesheet. This is similar to the optimization we already have for class attributes.
        
        Recalculating element style is expensive. It seems id attribute mutation is often used in scripts for purposes other than styling. 

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::hasSelectorForId):
        (WebCore):
        * css/StyleResolver.h:
        * dom/Element.cpp:
        (WebCore::makeIdForStyleResolution):
        (WebCore):
        (WebCore::Element::attributeChanged):

2012-10-25  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Notification should be sent when accessibilityIsIgnored changes
        https://bugs.webkit.org/show_bug.cgi?id=99547

        Reviewed by Chris Fleizach.

        Adds a new flag in AccessibilityObject that keeps track of the most recent
        value of accessibilityIsIgnored(). After certain events such as an ARIA
        attribute change or content change, checks the new value of
        accessibilityIsIgnored() and posts a "children changed" notification on the
        parent node if it changed, making sure the parent recomputes its vector of
        (unignored) children.

        Also moves handling of attribute changes to AXObjectCache, and sends
        notifications for some attribute changes that were previously silent. On
        Chromium, all changes to an accessibility object's attributes should
        result in some notification.

        Some tests would have broken because an AccessibilityScrollView was created
        and holding a reference to a ScrollView for an iframe after it was deleted,
        so this change switches AccessibilityScrollView to hold a weak reference
        to ScrollView instead.

        Tests: platform/chromium/accessibility/is-ignored-change-sends-notification.html
               platform/chromium/accessibility/other-aria-attribute-change-sends-notification.html
               platform/chromium/accessibility/text-change-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedUIElementForPage):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::textChanged):
        (WebCore):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::labelChanged):
        (WebCore::AXObjectCache::recomputeIsIgnored):
        * accessibility/AXObjectCache.h:
        (AXObjectCache):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::textChanged):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::recomputeIsIgnored):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::insertChild):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::cachedIsIgnoredValue):
        (WebCore):
        (WebCore::AccessibilityObject::setCachedIsIgnoredValue):
        (WebCore::AccessibilityObject::notifyIfIgnoredValueChanged):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::textChanged):
        (AccessibilityObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::correspondingControlForLabelElement):
        (WebCore::AccessibilityRenderObject::textChanged):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::~AccessibilityScrollView):
        (WebCore):
        (WebCore::AccessibilityScrollView::detach):
        (WebCore::AccessibilityScrollView::isAttachment):
        (WebCore::AccessibilityScrollView::widgetForAttachmentView):
        (WebCore::AccessibilityScrollView::updateScrollbars):
        (WebCore::AccessibilityScrollView::webAreaObject):
        (WebCore::AccessibilityScrollView::elementRect):
        (WebCore::AccessibilityScrollView::documentFrameView):
        (WebCore::AccessibilityScrollView::parentObject):
        (WebCore::AccessibilityScrollView::parentObjectIfExists):
        (WebCore::AccessibilityScrollView::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityScrollView::scrollTo):
        * accessibility/AccessibilityScrollView.h:
        (WebCore::AccessibilityScrollView::scrollView):
        (AccessibilityScrollView):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLineBoxTree):
        (WebCore::RenderBlock::createAndAppendRootInlineBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):

2012-10-25  Dominik Röttsches  <dominik.rottsches@intel.com>

        Conditionalize XHR timeout support
        https://bugs.webkit.org/show_bug.cgi?id=100356

        Reviewed by Adam Barth.

        Adding feature for XHR_TIMEOUT to disable it on ports that don't have
        network backend support for setTimeoutInterval.

        No new tests, covered by http/tests/xmlhttprequest/timeout/*

        * Configurations/FeatureDefines.xcconfig: Default ON on mac.
        * GNUmakefile.am:
        * GNUmakefile.features.am:
          Autotools support for the flag.
        * xml/XMLHttpRequest.cpp: #if ENABLE(XHR_TIMEOUT) wrapping
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::didFail):
        * xml/XMLHttpRequest.h: #if ENABLE(XHR_TIMEOUT) wrapping
        (XMLHttpRequest):
        * xml/XMLHttpRequest.idl: Conditional properties timeout and ontimeout (event handler).

2012-10-25  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor must replace form action with about:blank when reflected action detected.
        https://bugs.webkit.org/show_bug.cgi?id=100280

        Reviewed by Daniel Bates.

        Changes empty string form-action replacement to about:blank.
        Existing form-action.html test modified to check this case.
        
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterFormToken):

2012-10-25  Kevin Ellis  <kevers@chromium.org>

        Touch adjustment snaps to wrong target at a plugin boundary.
        https://bugs.webkit.org/show_bug.cgi?id=99938

        Reviewed by Antonio Gomes.

        Inidcate that an <embed> element can respond to
        mouse click events, since mouse events are forwarded
        to the plugin.  Fixes touch adjustment at a plugin
        boundary.  Prior to the patch a clickable element 
        adjacent to the plugin would capture synthetic mouse
        events from tap gestures that spanned the plugin
        boundary.

        Test: touchadjustment/plugin.html

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::willRespondToMouseClickEvents):
        (WebCore):
        * html/HTMLEmbedElement.h:

2012-10-25  Ojan Vafai  <ojan@chromium.org>

        Get rid of ScriptController::clearForNavigation
        https://bugs.webkit.org/show_bug.cgi?id=100390

        Reviewed by Adam Barth.

        Get rid of clearForNavigation and change resetIsolatedWorlds
        to reset so that it can also do the hintForCollectGarbage call.
        No new tests. No behavior change.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::reset):
        (WebCore::ScriptController::clearForClose):
        (WebCore::ScriptController::clearWindowShell):
        * bindings/v8/ScriptController.h:
        (ScriptController):

2012-10-25  Simon Fraser  <simon.fraser@apple.com>

        r132427 changed the tiling behavior of tiled layer TileCaches as well as the page tile cache
        https://bugs.webkit.org/show_bug.cgi?id=100323

        Reviewed by Anders Carlsson.

        r132427 assumed that TileCaches were only used for the page, and changed the tile
        size behavior of all non-page TileCaches.
        
        Fix by giving TiledBacking a new 'CoverageForSlowScrolling' flag which
        affects the tile size behavior.
        
        Consolidated the two places that set TileCoverage into one, and in the process
        reduced FrameView's direct communication with TiledBacking.

        No new tests because we can't test tile size via tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::didMoveOnscreen): Rely on RenderLayerCompositor to
        call setIsInWindow() on the main page tile cache.
        (WebCore::FrameView::willMoveOffscreen): Ditto.
        (WebCore::FrameView::performPostLayoutTasks): Rather than explicitly tell
        the TiledBacking that it should do stuff, just tell the compositor that
        layout happened.
        * platform/graphics/TiledBacking.h: New CoverageForSlowScrolling flag.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::tileSizeForCoverageRect): Only use one big tile
        if the CoverageForSlowScrolling flag is set.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking): layer->isRootLayer()
        is equivalent to renderer()->isRenderView() and clearer.
        (WebCore::RenderLayerBacking::tiledBacking): Call adjustTileCacheCoverage().
        It would be nice to move the rest of this TiledBacking code from here somehow.
        (WebCore::RenderLayerBacking::adjustTileCacheCoverage): Update the TileCoverage
        flags, taking into account horizontal and vertical scrollability independently,
        and whether we're in slow scrolling mode.
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidLayout): Have the page
        tiled backing update it's coverage flags.
        (WebCore::RenderLayerCompositor::pageTiledBacking): Utility function.
        (WebCore::RenderLayerCompositor::didMoveOnscreen): Moved from FrameView.
        (WebCore::RenderLayerCompositor::willMoveOffscreen): Ditto.
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2012-10-25  Elliott Sprehn  <esprehn@chromium.org>

        Everything that sets RenderObject::m_style should go through setStyleInternal
        https://bugs.webkit.org/show_bug.cgi?id=100338

        Reviewed by Ojan Vafai.

        Whenever we set m_style in RenderObject go through setStyleInternal and make
        it inline. This gives a common place to put printfs and makes the code cleaner.

        No new tests, just a refactor.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        (WebCore::RenderObject::setStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setStyleInternal):

2012-10-25  Brady Eidson  <beidson@apple.com>

        Allow LoaderStrategy to override the ResourceLoadScheduler
        https://bugs.webkit.org/show_bug.cgi?id=100355

        Reviewed by Anders Carlsson.

        Allow LoaderStrategy to override the implementation of the ResourceLoadScheduler.
        Add a default implementation that just returns the current ResourceLoadScheduler.

        No new tests (No behavior change).

        Project file stuff:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        "Virtualize" ResourceLoadScheduler to expose build issues in preparation for future virtualization:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::~ResourceLoadScheduler):
        * loader/ResourceLoadScheduler.h:
        (ResourceLoadScheduler):

        Add the new method plus a default implementation:
         * loader/LoaderStrategy.cpp: 
        (WebCore::LoaderStrategy::resourceLoadScheduler):
        * loader/LoaderStrategy.h:

        When strategies are enabled, use the LoaderStrategy for this:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::willSendRequest):

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::performPostLoadActions):

2012-10-25  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: inspector tests failing after r132454
        https://bugs.webkit.org/show_bug.cgi?id=100381

        Reviewed by Pavel Feldman.

        Added implementation for DOMNodeWrapperMap::reportMemoryUsage method,
        otherwise no actual pointer is reported which breaks instrumentation.

        * bindings/v8/IntrusiveDOMWrapperMap.h:

2012-10-25  Dominik Röttsches  <dominik.rottsches@intel.com>

        Init timeout flag in ResourceErrorCF
        https://bugs.webkit.org/show_bug.cgi?id=100349

        Reviewed by Alexey Proskuryakov.

        Initialize the timeout property to true if the network error was a timeout error.
        This is a speculative fix for the XHR timeout test cases failing on Apple Win -
        I can't verify this on a local machine.

        No new tests, covered by
        LayoutTests/http/tests/xmlhttprequest/timeout/*

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError): Init m_timeout from error code.

2012-10-25  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        'resolution' MQ: Printing should use use high resolution images when available
        https://bugs.webkit.org/show_bug.cgi?id=100382

        Reviewed by Antti Koivisto.

        Special case print to not use the dpi of the screen, but one of 300.

        Updated the resolution media query test to cover this.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::resolutionMediaFeatureEval): Update compared decimal points
        to three, due to 300 / 96 being equal to 3.125.

2012-10-25  Kinuko Yasuda  <kinuko@chromium.org>

        [chromium] External FileSystem should use the root path returned by requestFileSystem
        https://bugs.webkit.org/show_bug.cgi?id=100372

        Reviewed by Kentaro Hara.

        External FileSystem should use the root path returned by
        requestFileSystem as other type is doing. Current implementation
        completely ignore the returned path.

        New tests are to be added in chromium (as the type is only available in chromeos and chrome extensions)

        * Modules/filesystem/chromium/DOMFileSystemChromium.cpp:
        (WebCore::DOMFileSystemBase::createFileSystemURL):

2012-10-25  Kevin Ellis  <kevers@chromium.org>

        Can't easily position the cursor on an empty line in a textarea with touch if touch adjustment is enabled
        https://bugs.webkit.org/show_bug.cgi?id=97576

        Reviewed by Antonio Gomes.

        Consolidate touch adjustment candidates that are
        editable.  Adjustment becomes coarse being based
        on the bounds of the outermost editable element.
        This fix allows tap positioning of the text caret
        on a blank line immediately above or below another
        element.

        Test: touchadjustment/editable-content.html

        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::compileSubtargetList):
        (WebCore::TouchAdjustment::hybridDistanceFunction):

2012-10-25  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: add reportMemoryUsage to ImageObserver interface
        https://bugs.webkit.org/show_bug.cgi?id=100091

        Reviewed by Pavel Feldman.

        Added reportMemoryUsage method to ImageObserver to make sure it is reported as
        appropriate descendant(with pointer adjusted due to offsets added by inheritance)
        rather than as a standalone memory block.

        * platform/graphics/ImageObserver.h:
        (ImageObserver):

2012-10-25  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Overrides] Add latitude and longitude labels for the geolocation fields
        https://bugs.webkit.org/show_bug.cgi?id=100375

        Reviewed by Yury Semikhatsky.

        No new tests, a UI change.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.UserAgentSettingsTab.prototype._createGeolocationOverrideElement):

2012-10-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Add setMediaTypeOverride to window.internals.settings
        https://bugs.webkit.org/show_bug.cgi?id=100249

        Reviewed by Kenneth Rohde Christiansen.

        Added setMediaTypeOverride to window.internals.settings.

        Test: fast/media/print-restores-previous-mediatype.html

        * WebCore.exp.in: Exported WebCore::Settings::setMediaTypeOverride(WTF::String const&) for MAC.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setMediaTypeOverride):
        (WebCore):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::mediaTypeOverride):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setMediaTypeOverride):
        (WebCore):
        * testing/InternalSettings.h:
        (Backup):
        (InternalSettings):
        * testing/InternalSettings.idl:

2012-10-22  Mikhail Naganov  <mnaganov@chromium.org>

        [Chromium] Add supportMultipleWindows setting, needed for Android
        https://bugs.webkit.org/show_bug.cgi?id=99716

        Reviewed by Adam Barth.

        Add supportMultipleWindows settings for reusing the same view when
        opening popups. This is required for emulating the behavior of
        Android WebView. Adding into WebCore, as other ports might want to
        use this setting in the future.

        Tests: fast/dom/HTMLAnchorElement/anchor-no-multiple-windows.html
               fast/dom/Window/window-open-no-multiple-windows.html
               fast/forms/post-popup-no-multiple-windows.html

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setSupportsMultipleWindows):
        (WebCore):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::supportsMultipleWindows):

2012-10-25  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, fix Web Inspector frontend compilability

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._ondragstart):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceClick):
        (WebInspector.StylePropertyTreeElement.prototype):

2012-10-23  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Drag and drop property value from Inspector is not working as expected
        https://bugs.webkit.org/show_bug.cgi?id=100040

        Reviewed by Vsevolod Vlasov.

        Do not start a custom drag for a tree element if there is a non-collapsed selection in the Inspector.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._ondragstart):

2012-10-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI instrument InspectorDebuggerAgent. It uses a lot of memory on heavy js sites because it keeps all the scripts in a map.
        https://bugs.webkit.org/show_bug.cgi?id=100340

        Reviewed by Yury Semikhatsky.

        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryTypes):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::reportMemoryUsage):
        (WebCore):
        (WebCore::ScriptDebugListener::Script::reportMemoryUsage):
        * inspector/InspectorDebuggerAgent.h:
        (InspectorDebuggerAgent):
        * inspector/ScriptDebugListener.h:
        (Script):

2012-10-25  Adam Barth  <abarth@webkit.org>

        [V8] We can handle ActiveDOMNodes and DOMNodes in the same GC visitor
        https://bugs.webkit.org/show_bug.cgi?id=100351

        Reviewed by Eric Seidel.

        There is no reason to handle active DOM nodes in a separate pass from
        regular DOM nodes anymore.

        * bindings/v8/V8DOMMap.cpp:
        * bindings/v8/V8DOMMap.h:
        (WebCore):
        * bindings/v8/V8GCController.cpp:
        (WebCore::ActiveDOMObjectPrologueVisitor::visitDOMWrapper):
        (WebCore::NodeVisitor::NodeVisitor):
        (NodeVisitor):
        (WebCore::NodeVisitor::visitNodeWrapper):
        (WebCore::V8GCController::majorGCPrologue):

2012-10-25  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Improper out-of-order call on a rule that is being removed from the stylesheet.
        https://bugs.webkit.org/show_bug.cgi?id=100357

        Reviewed by Vsevolod Vlasov.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::deleteRule):

2012-10-25  Adam Barth  <abarth@webkit.org>

        [V8] DOMDataStoreHandle serves no purpose and can be removed
        https://bugs.webkit.org/show_bug.cgi?id=100333

        Reviewed by Eric Seidel.

        After https://bugs.webkit.org/show_bug.cgi?id=100316,
        DOMDataStoreHandle is just a glorified OwnPtr.

        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::domDataStore):
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        * bindings/v8/V8DOMMap.cpp:
        * bindings/v8/V8DOMMap.h:

2012-10-25  Elliott Sprehn  <esprehn@chromium.org>

        Remove dead Node::isBlockFlowOrBlockTable
        https://bugs.webkit.org/show_bug.cgi?id=100336

        Reviewed by Eric Seidel.

        Nothing uses Node::isBlockFlowOrBlockTable anymore so remove it.

        No new tests needed, just removing dead code.

        * dom/Node.cpp:
        * dom/Node.h:
        (Node):

2012-10-25  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Fix "check-inspector-strings" script and fix localized strings.
        https://bugs.webkit.org/show_bug.cgi?id=100090

        Reviewed by Vsevolod Vlasov.

        Fixed localized strings table.

        * English.lproj/localizedStrings.js: Added missing, removed orhans.
        * inspector/front-end/CSSNamedFlowView.js: Removed tailing whitespaces.
        * inspector/front-end/NativeMemorySnapshotView.js:
        Removed double localization.

2012-10-25  Adam Barth  <abarth@webkit.org>

        [V8] We can merge DOMDataStore, ScopedDOMDataStore, and StaticDOMDataStore into one class
        https://bugs.webkit.org/show_bug.cgi?id=100316

        Reviewed by Eric Seidel.

        Prior to this patch, DOMDataStore had two subclasses,
        ScopedDOMDataStore and StaticDOMDataStore, which used slighly different
        wrapper map base classes and had different lifetimes. This patch
        unifies all these classes into DOMDataStore itself. This makes this
        code much more straightforward.

        * WebCore.gypi:
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStore::current):
        (WebCore::DOMDataStore::reportMemoryUsage):
        * bindings/v8/DOMDataStore.h:
        (DOMDataStore):
        (WebCore::DOMDataStore::domNodeMap):
        (WebCore::DOMDataStore::activeDomNodeMap):
        (WebCore::DOMDataStore::domObjectMap):
        (WebCore::DOMDataStore::activeDomObjectMap):
        * bindings/v8/ScopedDOMDataStore.cpp: Removed.
        * bindings/v8/ScopedDOMDataStore.h: Removed.
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::neuterBinding):
        * bindings/v8/StaticDOMDataStore.cpp: Removed.
        * bindings/v8/StaticDOMDataStore.h: Removed.
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::DOMDataStoreHandle::DOMDataStoreHandle):
        (WebCore::DOMDataStoreHandle::~DOMDataStoreHandle):
        (WebCore::visitActiveDOMNodes):
        (WebCore::visitDOMObjects):
        (WebCore::visitActiveDOMObjects):
        * bindings/v8/V8DOMMap.h:
        (WebCore):
        * bindings/v8/V8PerIsolateData.h:
        (V8PerIsolateData):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::~WorkerScriptController):
        * bindings/v8/WorkerScriptController.h:
        (WorkerScriptController):

2012-10-24  Kent Tamura  <tkent@chromium.org>

        Minimize CSS rulesets for multiple-fields input
        https://bugs.webkit.org/show_bug.cgi?id=100198

        Reviewed by Kentaro Hara.

        - Unify rulesets for input::-webkit-datetime-edit-*-field.
         input::-webkit-datetime-edit-*-field had identical ruleset.

        - Move some rulesets near to related rulesets.
         Move -webkit-datetime-edit-*-field:focus nearby the new unified ruleset.
         Move input::-webkit-datetime-edit-second-field[readonly] nearby
        input::-webkit-datetime-edit-minute-field[readonly].

        No new tests. This shouldn't make any behavior change.

        * css/html.css:
        (input::-webkit-datetime-edit-year-field):
        (input::-webkit-datetime-edit-year-field:focus):
        (input::-webkit-datetime-edit-second-field[readonly]):

2012-10-24  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r132291): Crash in BaseMultipleFieldsDateAndTimeInputType
        https://bugs.webkit.org/show_bug.cgi?id=100326

        Reviewed by Eric Seidel.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-change-type.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree):
        We need to disconnect m_spinButtonElement before destructing the UA shadow tree.

2012-10-24  Adam Barth  <abarth@webkit.org>

        [V8] DOMData is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=100313

        Reviewed by Eric Seidel.

        This class serves no purpose anymore and can be deleted.

        * WebCore.gypi:
        * bindings/v8/DOMData.cpp: Removed.
        * bindings/v8/DOMData.h: Removed.
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::current):
        * bindings/v8/DOMDataStore.h:
        (WebCore):
        (DOMDataStore):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::neuterBinding):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::getDOMNodeMap):
        (WebCore::getActiveDOMNodeMap):
        (WebCore::getDOMObjectMap):
        (WebCore::getActiveDOMObjectMap):
        (WebCore::removeAllDOMObjects):
        (WebCore::visitActiveDOMNodes):
        (WebCore::visitDOMObjects):
        (WebCore::visitActiveDOMObjects):

2012-10-24  Kent Tamura  <tkent@chromium.org>

        Sort an Xcode project file.

        * WebCore.xcodeproj/project.pbxproj: Sorted.

2012-10-24  Adam Barth  <abarth@webkit.org>

        [V8] AbstractWeakReferenceMap is unnecessarily general and complex
        https://bugs.webkit.org/show_bug.cgi?id=100175

        Reviewed by Eric Seidel.

        Before this patch, AbstractWeakReferenceMap served two masters:

        1) DOM wrappers
        2) NPV8 function templates

        These two uses cases pushed AbstractWeakReferenceMap to be more general
        and complex that needed. This patch separates these two uses cases into
        two separate classes. V8NPTemplateMap is all of 40 lines of code. It's
        not worth complicating the DOM wrapper code path to share that tiny
        amount of code.

        The other thing this patch does is store a pointer to the DOM wrapper
        map as the weak callback context object. That means we no longer need
        to search through all the wrapper maps in order to find the map that
        contains this particular DOM wrapper.

        * WebCore.gypi:
        * bindings/v8/DOMData.cpp:
        * bindings/v8/DOMData.h:
        (DOMData):
        * bindings/v8/DOMDataStore.cpp:
            - Delete all these complicated weak callback functions. The weak
              callback functions are now an order of magnitude simpler and
              declared as private member functions on the wrapper map.
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::domNodeMap):
        (WebCore::DOMDataStore::activeDomNodeMap):
        (DOMDataStore):
            - We now have a consistent type to use for all these wrapper maps.
              Both the hash map and the intrusive map derive from
              DOMWrapperMap (with a single template parameter).
        * bindings/v8/DOMWrapperMap.h: Added.
        (WebCore):
        (DOMWrapperVisitor):
            - The visitor is no longer an inner class. It's just a top-level
              class that does the same thing.
        (DOMWrapperMap):
            - The abstract interface for DOMWrapperMap has about half as many
              functions as the old AbstractWeakReferenceMap because the two use
              cases are disentangled.
        (WebCore::DOMWrapperMap::~DOMWrapperMap):
        (DOMWrapperHashMap):
            - This is a concrete instance of DOMWrapperMap that uses a hash map.
        (WebCore::DOMWrapperHashMap::DOMWrapperHashMap):
        (WebCore::DOMWrapperHashMap::remove):
        (WebCore::DOMWrapperHashMap::defaultWeakCallback):
            - Notice that the context parameter now points to the hashmap
              itself rather than to the native object. Now that we don't need
              to handle the NPAPI case, we can recover the native object from
              the wrapper using toNative. The assert in set() ensures that this
              always works.
        * bindings/v8/DOMWrapperWorld.h:
        * bindings/v8/IntrusiveDOMWrapperMap.h:
            - These classes are now simplified because they need to implement
              fewer functions.
        (WebCore::DOMNodeWrapperMap::weakCallback):
            - For this weak callback, we still use the native object as the
              context parameter. We could also recover the native object from
              the wrapper, which means this context parameter is available to
              do other work.
        * bindings/v8/ScopedDOMDataStore.cpp:
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
            - This code no longer needs to have knowledge of which weak
              callbacks these objects use.
        (WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
            - We need to clear the maps before deleting them because there are
              still JavaScript objects that have references to the map in their
              weak callback parameter. Previously, we handled this case because
              we would search all the wrapper maps and fail to find the wrapper.
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitExternalArrays):
        * bindings/v8/StaticDOMDataStore.cpp:
            - This code no longer needs to have knowledge of which weak
              callback these maps use.
        * bindings/v8/StaticDOMDataStore.h:
        (StaticDOMDataStore):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::getDOMNodeMap):
        (WebCore::getActiveDOMNodeMap):
        (WebCore::removeAllDOMObjects):
            - Rather than using some complicated visitor pattern, we can now
              just call clear() directly on the maps to remove all the objects.
        (WebCore::visitActiveDOMNodes):
        (WebCore::visitDOMObjects):
        (WebCore::visitActiveDOMObjects):
        * bindings/v8/V8DOMMap.h:
        (WebCore):
            - Delete the old versions of these classes.
        (DOMDataStoreHandle):
            - Style nit: one-argument constructors should be marked explicit.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::domWrapperType):
            - I moved this logic into WrapperTypeInfo.h to avoid a circular
              header dependency.
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):
        * bindings/v8/V8GCController.cpp:
            - EnsureWeakDOMNodeVisitor is no longer used (or needed since we no
              longer clear the weak callbacks in V8GCController).
        * bindings/v8/V8NPObject.cpp:
        (V8NPTemplateMap):
            - staticTemplateMap is no longer an instance of WeakReferenceMap.
              Instead, this patch just implements the functionality we need
              here directly.
        (WebCore::V8NPTemplateMap::get):
        (WebCore::V8NPTemplateMap::set):
        (WebCore::V8NPTemplateMap::sharedInstance):
        (WebCore::V8NPTemplateMap::weakCallback):
        (WebCore::V8NPTemplateMap::dispose):
        (WebCore::npObjectGetProperty):
        (WebCore):
        (WebCore::staticNPObjectMap):
        (WebCore::weakNPObjectCallback):
            - DOMWrapperMap no longer exposes a "forget" function. Instead, we
              just use the more basic "remove" and "Dispose" operations to do
              the same thing. This is possible now because we no longer have
              "removeIfPossible" to support searching all the wrapper maps for
              the one that has the right wrapper.
        (WebCore::createV8ObjectForNPObject):
            - DOMWrapperMap No longer has a "contains" function. Instead, we
              use get, which actually makes this code more efficient because we
              only do one hash map lookup.
        (WebCore::forgetV8ObjectForNPObject):
            - The changes here are a combination of the two sorts of changes
              above.
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore::toNative):
        (WebCore::toWrapperTypeInfo):
            - The patch moves these functions into this header to avoid a
              circular header dependency.

2012-10-24  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [cairo] unneeded FloatRect object creation in BitmapImage::draw
        https://bugs.webkit.org/show_bug.cgi?id=100298

        Reviewed by Martin Robinson.

        Do not copy FloatRect arguments src and dst to local variables.
        Instead, use src and dst directly.

        No new tests. No change in behavior.

        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):

2012-10-24  Seokju Kwon  <seokju.kwon@samsung.com>

        [SOUP] Provide logging for SocketStreamHandleSoup
        https://bugs.webkit.org/show_bug.cgi?id=100215

        Reviewed by Alexey Proskuryakov.

        Add logging to SocketStreamHandleSoup to facilitate debugging.

        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::~SocketStreamHandle):
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::platformClose):

2012-10-24  Nico Weber  <thakis@chromium.org>

        Pass on exif orientation from ImageSource when using the open-source image decoders
        https://bugs.webkit.org/show_bug.cgi?id=100164

        Reviewed by Eric Seidel.

        The orientation is honored always for image documents, and optionally
        for <img> elements if shouldRespectImageOrientation is set (off by
        default). However, the feature needs port-specific modifications to
        GraphicsContext (without this, webcore will use the rotated bounds but
        draw the image as if it hadn't be rotated, resulting in squished
        pixels), and most ports don't implement these yet -- so put
        turning this on for image documents behind a port-specific #ifdef.

        No observable behavior change. Once it's hooked up, it will be tested
        by fast/images/exif-orientation.html.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::orientationAtIndex):
        * platform/graphics/chromium/DeferredImageDecoder.cpp:
        (WebCore::DeferredImageDecoder::orientation):
        (WebCore):
        * platform/graphics/chromium/DeferredImageDecoder.h:
        (DeferredImageDecoder):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::readImageOrientation):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):

2012-10-24  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=100169
        We should make TileCache tiles the size of the tile coverage rect 
        when we can't do fast scrolling
        -and-
        <rdar://problem/12505021>

        Reviewed by Simon Fraser.

        Some websites that don't do fast scrolling still scroll slower than 
        they do with tiled drawing disabled. 
        https://bugs.webkit.org/show_bug.cgi?id=99768 addressed some of this 
        performance problem, but there is still more ground to make up. This 
        patch addresses the remaining issue by making tiles the size of the 
        window when we can't do fast scrolling. 

        The constructor and create function no longer take a size parameter. 
        That's all fully controlled within TileCache now. m_tileSize is no 
        longer const.
        * platform/graphics/ca/mac/TileCache.h:

        Store the current default size as constants so that we can access it 
        in both the constructor and adjustTileSizeForCoverageRect().
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):

        This new function will set m_tileSize to the size of the tile 
        coverage rect if the tile coverage is limited to the visible area. 
        Otherwise, the tiles are set to be the default size.
        (WebCore::TileCache::adjustTileSizeForCoverageRect):
        
        Call adjustTileSizeForCoverageRect().
        (WebCore::TileCache::revalidateTiles):

        No need to send in a size anymore.
        * platform/graphics/ca/mac/WebTileCacheLayer.h:
        (WebCore):

2012-10-24  David Barton  <dbarton@mathscribe.com>

        MathML tests trigger font cache assertions in debug bots
        https://bugs.webkit.org/show_bug.cgi?id=100268

        Reviewed by Eric Seidel.

        Add a FontCachePurgePreventer to fix this.

        Tested by existing tests.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement):

2012-10-24  Tim Horton  <timothy_horton@apple.com>

        Update main frame scroll position immediately for programmatic scrolls
        https://bugs.webkit.org/show_bug.cgi?id=98074

        Reviewed by Simon Fraser.

        Immediately update the main frame scroll position after a programmatic scroll,
        so that performing a scrollBy or scrollTo will be instantly reflected in
        all of the scroll offset accessors.

        No new tests; this will be tested by many scrolling tests once WebKitTestRunner
        can use threaded scrolling.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):

2012-10-24  Mihai Parparita  <mihaip@chromium.org>

        [Chromium] Allow pushState and related history APIs to be disabled per context
        https://bugs.webkit.org/show_bug.cgi?id=99780

        Reviewed by Adam Barth.

        Chrome Apps do not support the history API (or navigation in general).
        Since pushState is generally feature detected, it's cleanest to disable
        it via a V8 per-context feature, so that applications can have the
        appropriate fallback behavior (other history APIs are re-mapped to throw
        exceptions, since history.back() and the link are not feature detected).

        * dom/ContextFeatures.cpp:
        (WebCore::ContextFeatures::pushStateEnabled):
        (WebCore):
        * dom/ContextFeatures.h:
        * dom/Document.cpp:
        (WebCore::Document::enqueuePopstateEvent):
        * page/History.idl:

2012-10-24  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Make sure all events are dispatched asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=100286

        Reviewed by Adam Barth.

        This is necessary to safeguard against if the UA uses synchronous UA->WebKit calls,
        and the web application calls methods on the RTCPeerConnection in the event callbacks.

        Test: fast/mediastream/RTCPeerConnection-events.html
        Also tested by the chromium webrtc fuzz tests.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::negotiationNeeded):
        (WebCore::RTCPeerConnection::didGenerateIceCandidate):
        (WebCore::RTCPeerConnection::didAddRemoteStream):
        (WebCore::RTCPeerConnection::didRemoveRemoteStream):
        (WebCore::RTCPeerConnection::didAddRemoteDataChannel):
        (WebCore::RTCPeerConnection::changeReadyState):
        (WebCore::RTCPeerConnection::changeIceState):
        (WebCore):
        (WebCore::RTCPeerConnection::scheduleDispatchEvent):
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.h:
        (RTCPeerConnection):

2012-10-24  Mark Pilgrim  <pilgrim@chromium.org>

        [Chromium] Remove screen-related functions from PlatformSupport
        https://bugs.webkit.org/show_bug.cgi?id=97474

        Reviewed by Adam Barth.

        Screen-related functions like screenHorizontalDPI that
        used to be on PlatformSupport are now accessed through a new
        PlatformPageClient attached to Widget in WebCore-land, which is
        implemented by ChromeClientImpl in WebKit-land, which proxies
        calls to WebWidgetClient, which is actually implemented in
        Chromium-land.

        * WebCore.gypi:
        * platform/Widget.h:
        * platform/chromium/PageClientChromium.h: Copied from Source/WebCore/platform/chromium/PlatformWidget.h.
        (PageClientChromium):
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::toPlatformPageClient):
        (WebCore):
        (WebCore::screenHorizontalDPI):
        (WebCore::screenVerticalDPI):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/chromium/PlatformSupport.h:
        (PlatformSupport):

2012-10-24  Adam Barth  <abarth@webkit.org>

        [V8] WorkerContextExecutionProxy doesn't need to track events
        https://bugs.webkit.org/show_bug.cgi?id=100295

        Reviewed by Eric Seidel.

        This code was added when this code was originally upstreamed as part of
        the Chromium port. There doesn't appear to be any reason why
        WorkerContextExecutionProxy needs to keep a Vector of raw event
        pointers. Those points are likely to become dangling, making the rest
        of what this code does very sketchy.

        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::callListenerFunction):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::dispose):
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WebCore::WorkerContextExecutionState::WorkerContextExecutionState):
        (WorkerContextExecutionProxy):

2012-10-24  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] The mesh should be specified using <column, row> order
        https://bugs.webkit.org/show_bug.cgi?id=96285

        Reviewed by Dean Jackson.

        Change StyleResolver and CSSComputedStyleDeclaration to handle the mesh parameters in
        column, row order.

        Test: css3/filters/custom/custom-filter-mesh-column-row-order.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForFilter):
            Append the number of columns before the number of rows in the meshParameters
            CSSValueList.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createCustomFilterOperation):
            Store the second mesh parameter in meshRows instead of meshColumns.

2012-10-24  Jae Hyun Park  <jae.park@company100.net>

        loaderRunLoop() should use synchronization instead of while loop
        https://bugs.webkit.org/show_bug.cgi?id=55402

        Reviewed by Alexey Proskuryakov.

        Originally, loaderRunLoop() sleeps until a thread has started and set
        the loaderRunLoopObject static variable. This patch uses
        ThreadCondition to synchronize instead of a while loop.

        No new tests (No behavior change).

        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::runLoaderThread):
        (WebCore::loaderRunLoop):
        * platform/network/cf/LoaderRunLoopCF.h:
        (WebCore):

2012-10-24  Sailesh Agrawal  <sail@chromium.org>

        Incorrect keycodes for numpad /, -, +, .
        https://bugs.webkit.org/show_bug.cgi?id=99188

        Reviewed by Tony Chang.

        In r57951 we switched to mapping keys by character code.
        This regressed the numpad keys which no longer match the Windows virtual key codes.
        This CL fixes this by never mapping numpad keys by character code.

        Test: platform/mac/fast/events/numpad-keycode-mapping.html

        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::windowsKeyCodeForKeyEvent):

2012-10-24  Simon Fraser  <simon.fraser@apple.com>

        Null-check the RenderView in ocument::windowScreenDidChange to fix a crash when saving PDFs
        https://bugs.webkit.org/show_bug.cgi?id=100141
        <rdar://problem/12559147>

        Reviewed by Tim Horton.

        For PDF documents the RenderView is null, so null-check it to avoid a crash
        when saving PDFs.

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

2012-10-24  Terry Anderson  <tdanderson@chromium.org>

        Handle two-finger tap gestures in the same way as long-press gestures
        https://bugs.webkit.org/show_bug.cgi?id=99947

        Reviewed by Adam Barth.

        Currently a long-press gesture is used to dispatch a context menu (for platforms 
        defining CONTEXT_MENUS) or to select text (for Android). Additionally, for platforms 
        defining TOUCH_ADJUSTMENT, gesture target fuzzing is performed on the location and 
        touch area of the long-press gesture.

        This CL will cause two-finger tap gestures to be handled in the same way as long-press 
        gestures. The location and touch area of a two-finger tap gesture will correspond to 
        the location and touch area of the first finger down; the location/area of the second 
        finger will be ignored.

        Test: touchadjustment/touch-links-two-finger-tap.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureLongPress):
        (WebCore):
        (WebCore::EventHandler::handleGestureForTextSelectionOrContextMenu):
        (WebCore::EventHandler::handleGestureTwoFingerTap):
        (WebCore::EventHandler::adjustGesturePosition):
        * page/EventHandler.h:
        (EventHandler):

2012-10-24  Chris Fleizach  <cfleizach@apple.com>

        AX:When aria-label is used, the text under an element is still appearing as the AXTitle
        https://bugs.webkit.org/show_bug.cgi?id=98167

        Reviewed by Beth Dakin.

        According to WAI-ARIA text computation, the presence of aria-label and alternative text
        should override the visible text within an element.

        Test: platform/mac/accessibility/aria-label-overrides-visible-text.html

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper accessibilityTitle]):

2012-10-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132303 and r132312.
        http://trac.webkit.org/changeset/132303
        http://trac.webkit.org/changeset/132312
        https://bugs.webkit.org/show_bug.cgi?id=100287

        Triggering crashes on many popular websites (Requested by
        leviw|gardening on #webkit).

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectAtToken):
        * css/CSSParser.h:
        * css/CSSPropertySourceData.h:
        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):
        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addRulesFromSheet):
        (WebCore::RuleSet::addStyleRule):
        * css/RuleSet.h:
        (RuleData):
        (RuleSet):
        * css/StyleResolver.cpp:
        (WebCore::makeRuleSet):
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::locateSharedStyle):
        * css/StyleResolver.h:
        (StyleResolver):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::reportMemoryUsage):
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleRule.h:
        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::reportMemoryUsage):
        * css/StyleScopeResolver.h:
        (WebCore):
        (StyleScopeResolver):
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):

2012-10-24  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Cursor property value identities should be preserved
        https://bugs.webkit.org/show_bug.cgi?id=100051

        Reviewed by Tony Chang.

        Some W3C test submissions point out that subsequent accesses to cursor properties should
        yield the same value until the cursor advances. We handled this with custom binding code for
        IDBCursor.value but not IDBCursor.key or IDBCursor.primaryKey. The custom value code is
        being removed in webkit.org/b/100034 in favor of returning ScriptValue and the same fix can
        be applied to key/primaryKey.

        Test: storage/indexeddb/cursor-properties.html

        * Modules/indexeddb/IDBCursor.cpp: Compute/store/serve up ScriptValues instead of IDBKeys
        (WebCore::IDBCursor::key):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::setValueReady):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        (WebCore::IDBCursor::idbPrimaryKey): Expose this for callers that need access to the IDBKey
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBObjectStore.cpp: ... like this one.
        (WebCore):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent): Pass along script context, for the conversion.
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::idbKeyToScriptValue): New method for explicit conversion.
        (WebCore):
        * bindings/v8/IDBBindingUtilities.h:
        (WebCore):

2012-10-24  Ami Fischman  <fischman@chromium.org>

        call to setNeedsLayout during RenderVideo::paintReplaced
        https://bugs.webkit.org/show_bug.cgi?id=100265

        Reviewed by Eric Carlson.

        Removed unnecessary call and added new defensive guards to catch erroneous setNeedsLayout() calls
        during paints earlier (so the offending calls are in the emitted stacktrace).

        No new tests - new defensive checks are triggered by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents): forbid setNeedsLayout() during painting
        * rendering/RenderObject.cpp:
        (WebCore):
        (WebCore::RenderObject::SetLayoutNeededForbiddenScope::SetLayoutNeededForbiddenScope):
        (WebCore::RenderObject::SetLayoutNeededForbiddenScope::~SetLayoutNeededForbiddenScope):
        * rendering/RenderObject.h:
        (RenderObject):
        (SetLayoutNeededForbiddenScope): added helper class for forbidding setNeedsLayout() in a scope.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced): drop the offending & unnecessary call to updatePlayer().

2012-10-24  Adam Barth  <abarth@webkit.org>

        [V8] ActiveDOMObjectEpilogueVisitor is unnecessary and can be deleted
        https://bugs.webkit.org/show_bug.cgi?id=100208

        Reviewed by Eric Seidel.

        Rather than clearing and re-establishing the weak callback for
        ActiveDOMObjects during every GC, this patch puts all the
        ActiveDOMObjects with pending activity into an object group with a live
        object, causing them not to be garbage collected.

        In addition to simplifying this code, this patch makes the patch in
        https://bugs.webkit.org/show_bug.cgi?id=100175 much easier because
        V8GCController no longer needs to know how to configure the weak
        callbacks for these objects.

        * bindings/v8/V8GCController.cpp:
        (WebCore::ActiveDOMObjectPrologueVisitor::ActiveDOMObjectPrologueVisitor):
        (ActiveDOMObjectPrologueVisitor):
        (WebCore::ActiveDOMObjectPrologueVisitor::visitDOMWrapper):
        (WebCore::V8GCController::majorGCPrologue):
        (WebCore::V8GCController::majorGCEpilogue):
        * bindings/v8/V8PerIsolateData.cpp:
        (WebCore::V8PerIsolateData::V8PerIsolateData):
        * bindings/v8/V8PerIsolateData.h:
        (WebCore::V8PerIsolateData::liveRoot):
        (V8PerIsolateData):

2012-10-24  Brady Eidson  <beidson@apple.com>

        Add a strategy for loader customization.
        https://bugs.webkit.org/show_bug.cgi?id=100278

        Reviewed by Alexey Proskuryakov.

        It's empty for now and does nothing, just like the goggles.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::loaderStrategy):
        (PlatformStrategies):
        (WebCore::PlatformStrategies::PlatformStrategies):

2012-10-24  Tony Chang  <tony@chromium.org>

        Setting width of a flexitem causes the adjacent flex item to be displayed poorly.
        https://bugs.webkit.org/show_bug.cgi?id=99925

        Reviewed by Ojan Vafai.

        Make sure that we always repaint when moving a child. This is similar to what RenderDeprecatedFlexibleBox does.

        Test: css3/flexbox/repaint-during-resize-no-flex.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::setFlowAwareLocationForChild): Move logic for repaining into the helper method
        for setting the location of a child.
        (WebCore::RenderFlexibleBox::layoutColumnReverse): Remove code for repaint since it's now in setFlowAwareLocationForChild.
        (WebCore::RenderFlexibleBox::adjustAlignmentForChild): Remove code for repaint since it's now in setFlowAwareLocationForChild.

2012-10-24  Simon Fraser  <simon.fraser@apple.com>

        Fix CALayer hiearchy when combining tiling with preserve-3d
        https://bugs.webkit.org/show_bug.cgi?id=100205

        Reviewed by Dean Jackson.

        When an element has "transform-style: preserve-3d", its GraphicsLayerCA has a
        m_structuralLayer which is a CATransformLayer. The primary CALayer which contains rendered
        content becomes a sublayer of the CATransformLayer. If the element has backface-visibility:hidden,
        it is the primary layer that is set to be single-sided.
        
        In r131940 we started to use TileCaches in place of CATiledLayer. TileCaches work via
        "customSublayers" returned from the PlatformCALayer, where the custom sublayer is 
        the tile cache container layer. However, the custom sublayers were being added as
        children of the structural (CATransformLayer) layer, not of the primary (CALayer) layer,
        thus they were not affected by the doubleSided property.
        
        This change cleans up the confusing code in GraphicsLayerCA::updateSublayerList()
        by maintaining two vectors of PlatformCALayers, one for sublayers of the structural
        layer, and one for sublayers of the primary layer. It adds custom sublayers to
        the latter list, so now the tile cache container layer becomes a sublayer of
        the primary layer, so is affected by that layer's doubleSided property.

        Test: compositing/tiling/backface-preserve-3d-tiled.html

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

2012-10-23  Zhenyao Mo  <zmo@google.com>

        Update mozilla's CheckedInt.h to the latest version
        https://bugs.webkit.org/show_bug.cgi?id=100177

        Reviewed by Kenneth Russell.

        * html/canvas/CheckedInt.h: Sync with mozilla's copy with minumum modifications.
        (detail):
        (IsSupportedPass2):
        (IsSupported):
        (UnsignedType):
        (IsSigned):
        (TwiceBiggerType):
        (PositionOfSignBit):
        (MinValue):
        (MaxValue):
        (WebCore::detail::HasSignBit):
        (WebCore::detail::BinaryComplement):
        (WebCore::detail::IsInRange):
        (WebCore::detail::IsAddValid):
        (WebCore::detail::IsSubValid):
        (WebCore::detail::IsMulValid):
        (WebCore::detail::IsDivValid):
        (WebCore::detail::OppositeIfSignedImpl::run):
        (WebCore::detail::OppositeIfSigned):
        (WebCore):
        (CheckedInt):
        (WebCore::CheckedInt::CheckedInt):
        (WebCore::CheckedInt::value):
        (WebCore::CheckedInt::isValid):
        (WebCore::CheckedInt::operator -):
        (WebCore::CheckedInt::operator ==):
        (WebCore::CheckedInt::operator++):
        (WebCore::CheckedInt::operator--):
        (CastToCheckedIntImpl):
        (WebCore::detail::CastToCheckedIntImpl::run):
        (WebCore::castToCheckedInt):
        (WebCore::operator ==):
        * html/canvas/DataView.cpp: change valid() to isValid().
        (WebCore::DataView::create):
        * html/canvas/WebGLBuffer.cpp: Ditto.
        (WebCore::WebGLBuffer::associateBufferDataImpl):
        (WebCore::WebGLBuffer::associateBufferSubDataImpl):
        * html/canvas/WebGLRenderingContext.cpp: Ditto.
        (WebCore):
        (WebCore::WebGLRenderingContext::drawArrays):
        * platform/graphics/GraphicsContext3D.cpp: Ditto.
        (WebCore::GraphicsContext3D::computeImageSizeInBytes):

2012-10-24  Noam Rosenthal  <noam.rosenthal@nokia.com>

        [Qt-on-Mac] GraphicsSurfaces should not create a global IOSurface handle
        https://bugs.webkit.org/show_bug.cgi?id=89885

        Reviewed by Kenneth Rohde Christiansen.

        Use mach_port instead of global tokens for IOSurfaces.
        Global IOSurfaces are accessible from other processes using their handle, while mach_ports
        can only be shared directly via IPC.

        Tested by existing WebGL tests.

        * platform/graphics/surfaces/GraphicsSurfaceToken.h:
        (GraphicsSurfaceToken):
        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):

2012-10-24  Rick Byers  <rbyers@chromium.org>

        image-set doesn't round-trip properly with cssText
        https://bugs.webkit.org/show_bug.cgi?id=99725

        Reviewed by Beth Dakin.

        Fix serialization of -webkit-image-set rules to use the same format as
        is used for parsing.

        Test: fast/css/image-set-setting.html

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::customCssText):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::item): Add const overload

2012-10-24  Jonathan Feldstein  <jfeldstein@rim.com>

        BlackBerry fix for webgl-depth-texture.html
        https://bugs.webkit.org/show_bug.cgi?id=100258

        Reviewed by Yong Li.

        Removed a platform specific define that is unnecessary.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters):

2012-10-24  Nico Weber  <thakis@chromium.org>

        Honor image orientation in GraphicsContextSkia
        https://bugs.webkit.org/show_bug.cgi?id=100179

        Reviewed by Stephen White.

        Also fix a bug in ImageOrientation.h: Some of the values were
        switched. They now match the description in the exif spec at
        http://www.exif.org/Exif2-2.PDF page 18, and the notes at
        http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html and
        the picture at http://www.80sidea.com/archives/2316.

        They showed up correctly in Safari because the orientation transform
        was done after flipping Y. Let the flipping happen later. I verified
        that flipping transformation order and fixing the exif enum cancelled
        each other out, so this has no effect on the apple port.

        Not hooked up yet, so no observable difference.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageOrientation.h:
        (WebCore::ImageOrientation::usesWidthAsHeight):
        (WebCore::ImageOrientation::fromEXIFValue):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        (WebCore::BitmapImage::draw):
        (WebCore):

2012-10-24  Alexey Proskuryakov  <ap@apple.com>

        Fixed Windows path for SharedWorkerStrategy.h - it's in workers/, not platform/.

        * WebCore.vcproj/WebCore.vcproj:

2012-10-24  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit exposes abstract ARIA role range as AXSlider; should be generic AXGroup
        https://bugs.webkit.org/show_bug.cgi?id=100204

        Reviewed by Beth Dakin.

        Remove the "range" role as a valid ARIA role.

        Test: platform/mac/accessibility/aria-slider-value.html

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

2012-10-24  Florin Malita  <fmalita@chromium.org>

        [Chromium] SVG repaint issues
        https://bugs.webkit.org/show_bug.cgi?id=99874

        Reviewed by Levi Weintraub.

        RenderSVGRoot::paintReplaced() converts the container offsets to a relative transform,
        but in doing so it ends up accumulating subpixel rounding deltas twice: first for 
        adjustedPaintOffset and second in localToParentTransform(). If coordinates are on
        half-pixel boundaries, the 2x rounding delta yields a full pixel drift and we end up
        painting at the wrong location.

        This can be avoided by using localToBorderBoxTransform() directly, which (unlike
        localToParentTransform()) doesn't perform rounding.

        No new tests: existing pixel results cover this change after rebaseline.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):

2012-10-24  Levi Weintraub  <leviw@chromium.org>

        Fixing the Chromium build after typo in r132367.

        * WebCore.gypi:

2012-10-24  Nico Weber  <thakis@chromium.org>

        [chromium] Respect image orientation in image dragging code
        https://bugs.webkit.org/show_bug.cgi?id=100200

        Reviewed by Tony Chang.

        Based on the corresponding code in DragImageMac.mm.  The image
        rotation code isn't hooked up yet, so no observable effect for now.

        * platform/chromium/DragImageChromiumSkia.cpp:
        (WebCore::createDragImageFromImage):

2012-10-24  Michael Saboff  <msaboff@apple.com>

        Code cleanup after r132165
        https://bugs.webkit.org/show_bug.cgi?id=100135

        Reviewed by Geoffrey Garen.

        Fixed up some unneccesary and inefficient constructs in MarkupTokenBase.h.

        Code clean up without functional changes, therefore no new tests.

        * xml/parser/MarkupTokenBase.h:
        (WebCore::MarkupTokenBase::beginEndTag): Changed argument to be const Vector<LChar, 32>&.
        (WebCore::MarkupTokenBase::appendToCharacter): Changed argument to be const Vector<LChar, 32>&.
        (WebCore::MarkupTokenBase::appendToName): Elimintated inline.
        (WebCore::MarkupTokenBase::name): Elimintated inline.
        (WebCore::MarkupTokenBase::nameString): Elimintated inline.

2012-10-24  Toni Barzic  <tbarzic@chromium.org>

        Crash when trying to write exception message to null console
        https://bugs.webkit.org/show_bug.cgi?id=99658

        Reviewed by Adam Barth.

        DOMWindow::console may return NULL, so we should do a NULL check before adding message to it.
        This may happen e.g. if a worker throws an exception just as the document is being replaced in the view.
        The exception task could be processes after current window in the frame changes, and console in the document window is nulled.

        Test: fast/workers/worker-exception-during-navigation.html

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

2012-10-24  Cosmin Truta  <ctruta@rim.com>

        Incorrect conditional use of LogFTP
        https://bugs.webkit.org/show_bug.cgi?id=100260

        Reviewed by Alexey Proskuryakov.

        Use LogFTP if !LOG_DISABLED, to allow toggling ASSERTIONS_DISABLED_DEFAULT
        without breaking the build.

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

2012-10-23  Alexey Proskuryakov  <ap@apple.com>

        Add a strategy for shared workers
        https://bugs.webkit.org/show_bug.cgi?id=100165

        Reviewed by Brady Eidson.

        Also a little bit of alphabetization.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/PlatformStrategies.h:
        * workers/SharedWorkerStrategy.h: Added.

2012-10-24  David Barton  <dbarton@mathscribe.com>

        [MathML] Timeouts on linux after r132264
        https://bugs.webkit.org/show_bug.cgi?id=100202

        Reviewed by Eric Seidel.

        When building a stretched operator, such as a large parenthesis or bracket, we need to
        check that the extension glyph's height is > 0, to avoid an infinite loop. The 0 height
        can occur if the glyph is missing on the host system.

        Tested by existing tests.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement):

2012-10-24  Parth Patel  <parpatel@rim.com>

        [BlackBerry] Extending existing ThreadUnsafe singletons in webkit to
        Generic ThreadUnsafe Singleton
        https://bugs.webkit.org/show_bug.cgi?id=100145

        Reviewed by Rob Buis.

        Extending the singletons to generic singleton and changing
        getInstance() in IconDatabaseClientBlackBerry to instance()
        to match the generic singleton template.

        Reviewed Internally by Yong Li.

        Tests are not modified and added as there was no behavioural change.

        * platform/blackberry/SharedTimerBlackBerry.cpp:
        (SharedTimerBlackBerry):
        (WebCore):

2012-10-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI add instrumentation for ResourceBuffer. It gives us 10mb on gmail
        https://bugs.webkit.org/show_bug.cgi?id=100254

        Reviewed by Yury Semikhatsky.

        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::reportMemoryUsage):
        (WebCore):
        * loader/ResourceBuffer.h:
        (ResourceBuffer):

2012-10-24  Eric Carlson  <eric.carlson@apple.com>

        Allow ports to override text track rendering style
        https://bugs.webkit.org/show_bug.cgi?id=97800
        <rdar://problem/12044964>

        Unreviewed Build fix.
        
        CGFloat is already a float in a 32-bit build so narrowPrecisionToFloat() is unnecessary

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::captionFontSizeScale):

2012-10-24  Eric Carlson  <eric.carlson@apple.com>

        Allow ports to override text track rendering style
        https://bugs.webkit.org/show_bug.cgi?id=97800
        <rdar://problem/12044964>

        Reviewed by Maciej Stachowiak.

        * WebCore.exp.in: Export new WebkitSystemInterface functions.
        * WebCore.xcodeproj/project.pbxproj: Add CaptionUserPreferences.h, CaptionUserPreferencesMac.mm,
            and CaptionUserPreferencesMac.h.

        * css/mediaControls.css: Rearrange the caption CSS so it is possible to style the cue window,
            background, and text independently.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_disableCaptions with theme->userPrefersCaptions().
        (WebCore::HTMLMediaElement::attach): Register for caption preferences change callbacks.
        (WebCore::HTMLMediaElement::detach): Unregister for caption preferences change callbacks.
        (WebCore::HTMLMediaElement::userPrefersCaptions): Return theme->userPrefersCaptions().
        (WebCore::HTMLMediaElement::userIsInterestedInThisTrackKind): Consider userPrefersCaptions().
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible): Move the code that marks all tracks as
            un-configured to markCaptionAndSubtitleTracksAsUnconfigured so it can be reused.
        (WebCore::HTMLMediaElement::captionPreferencesChanged): New, force a reevaluation of all text tracks.
        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured): New, code moved from 
            setClosedCaptionsVisible
        * html/HTMLMediaElement.h: Inherit from CaptionPreferencesChangedListener.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Get rid of unnecessary member
            variable. Get caption font scale from theme instead of hard coding.
        * html/shadow/MediaControlElements.h:

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Change attributes from String to AtomicString.
        (WebCore::TextTrack::isValidKindKeyword): Ditto.
        (WebCore::TextTrack::setKind): Ditto.
        (WebCore::TextTrack::setMode): Ditto.
        (WebCore::TextTrack::mode): Ditto.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::create): Ditto.
        (WebCore::TextTrack::kind): Ditto.
        (WebCore::TextTrack::label): Ditto.
        (WebCore::TextTrack::setLabel): Ditto.
        (WebCore::TextTrack::language): Ditto.
        (WebCore::TextTrack::setLanguage): Ditto.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::TextTrackCueBox): Set the shadow pseudo id.
        (WebCore::TextTrackCueBox::textTrackCueBoxShadowPseudoId): New, class method to return the 
            shadow pseudo id so it can be used elsewhere.
        (WebCore::TextTrackCueBox::shadowPseudoId): Call textTrackCueBoxShadowPseudoId.
        (WebCore::TextTrackCue::pastNodesShadowPseudoId): New, class method to return the 
            shadow pseudo id so it can be used elsewhere.
        (WebCore::TextTrackCue::futureNodesShadowPseudoId): Ditto.
        (WebCore::TextTrackCue::updateDisplayTree):
        * html/track/TextTrackCue.h:

        * page/CaptionUserPreferences.h: Added.
        * page/CaptionUserPreferencesMac.h: Added.
        * page/CaptionUserPreferencesMac.mm: Added.
        (WebCore::userCaptionPreferencesChangedNotificationCallback):
        (WebCore::CaptionUserPreferencesMac::CaptionUserPreferencesMac):
        (WebCore::CaptionUserPreferencesMac::~CaptionUserPreferencesMac):
        (WebCore::CaptionUserPreferencesMac::userHasCaptionPreferences): New, passthrough to WKSI function.
        (WebCore::CaptionUserPreferencesMac::userPrefersCaptions): Ditto.
        (WebCore::CaptionUserPreferencesMac::captionsWindowColor): Return Color with user's caption window color preference.
        (WebCore::CaptionUserPreferencesMac::captionsBackgroundColor): Return Color with user's caption 
            background color preference.
        (WebCore::CaptionUserPreferencesMac::captionsTextColor): Return Color with user's caption text color preference.
        (WebCore::CaptionUserPreferencesMac::captionsEdgeColorForTextColor): Return Color for text edge effect.
        (WebCore::CaptionUserPreferencesMac::cssPropertyWithTextEdgeColor): Return String with CSS to set a text-shadow
            or webkit-text-stroke property.
        (WebCore::CaptionUserPreferencesMac::cssColorProperty): Return a String with css to set a property 
            with a color value.
        (WebCore::CaptionUserPreferencesMac::captionsTextEdgeStyle): Return a String with css to style caption 
            text with the user's preferred text edge stye.
        (WebCore::CaptionUserPreferencesMac::captionsDefaultFont): Return a String with css to style caption
            text with the user's preferred font.
        (WebCore::CaptionUserPreferencesMac::captionsStyleSheetOverride): Return a String with css to style captions
            with the user's preferred style.
        (WebCore::CaptionUserPreferencesMac::captionFontSizeScale): Return the user's preferred caption font scale.
        (WebCore::CaptionUserPreferencesMac::captionPreferencesChanged): Notify listeners of caption preference change.
        (WebCore::CaptionUserPreferencesMac::registerForCaptionPreferencesChangedCallbacks): Add a caption preferences 
            changes listener.
        (WebCore::CaptionUserPreferencesMac::unregisterForCaptionPreferencesChangedCallbacks): Remove a caption preferences
            changes listener.
        (WebCore::CaptionUserPreferencesMac::updateCaptionStyleSheetOveride): New, if theme has a captions style sheet override,
            inject it into the current page group, otherwise remove injected sheet.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferences):
        (WebCore::PageGroup::registerForCaptionPreferencesChangedCallbacks): New, passthrough to platform specific function
            of the same name.
        (WebCore::PageGroup::unregisterForCaptionPreferencesChangedCallbacks): Ditto.
        (WebCore::PageGroup::userPrefersCaptions): Ditto.
        (WebCore::PageGroup::userHasCaptionPreferences): Ditto.
        (WebCore::PageGroup::captionFontSizeScale): Ditto.
        * page/PageGroup.h:

        * platform/mac/WebCoreSystemInterface.h: Updated.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2012-10-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Introduce workspace provider as a content providing backend for project.
        https://bugs.webkit.org/show_bug.cgi?id=100244

        Reviewed by Pavel Feldman.

        Introduced WorkspaceProvider interface as a content providing backend for project.
        Added NetworkWorkspaceProvider as a network based (default) implementation.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping):
        * inspector/front-end/DebuggerScriptMapping.js:
        (WebInspector.DebuggerScriptMapping):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider):
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):
        (WebInspector.NetworkUISourceCodeProvider.prototype._resourceAdded):
        (WebInspector.NetworkUISourceCodeProvider.prototype._addFile):
        * inspector/front-end/NetworkWorkspaceProvider.js: Added.
        (WebInspector.NetworkWorkspaceProvider):
        (WebInspector.NetworkWorkspaceProvider.prototype.requestFileContent):
        (WebInspector.NetworkWorkspaceProvider.prototype.setFileContent):
        (WebInspector.NetworkWorkspaceProvider.prototype.searchInFileContent):
        (WebInspector.NetworkWorkspaceProvider.prototype.addFile):
        (WebInspector.NetworkWorkspaceProvider.prototype.removeFile):
        (WebInspector.NetworkWorkspaceProvider.prototype.reset):
        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping):
        (_bindUISourceCode):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel):
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/Workspace.js:
        (WebInspector.FileDescriptor):
        (WebInspector.WorkspaceProvider):
        (WebInspector.WorkspaceProvider.prototype.requestFileContent):
        (WebInspector.WorkspaceProvider.prototype.searchInFileContent):
        (WebInspector.WorkspaceProvider.prototype.addEventListener):
        (WebInspector.WorkspaceProvider.prototype.removeEventListener):
        (WebInspector.Project):
        (WebInspector.Project.prototype.reset):
        (WebInspector.Project.prototype._fileAdded):
        (WebInspector.Project.prototype._fileRemoved):
        (WebInspector.Project.prototype.requestFileContent):
        (WebInspector.Project.prototype.searchInFileContent):
        (WebInspector.Workspace):
        (WebInspector.Workspace.prototype.addProject):
        (WebInspector.Workspace.prototype.project):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2012-10-24  Nikita Vasilyev  <me@elv1s.ru>

        Web Inspector: Styles pane: Don't select whole value when I select just a part
        https://bugs.webkit.org/show_bug.cgi?id=100242

        Reviewed by Alexander Pavlov.

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

2012-10-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: UiSourceCode should rely on the workspace as a content provider.
        https://bugs.webkit.org/show_bug.cgi?id=100216

        Reviewed by Pavel Feldman.

        Workspace is now passed to UISourceCode to be used as a content provider.
        Content providers are now stored in the workspace/project.
        Next step would be to move content providers to workspace providers.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.breakpointStorageId):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype.contentType):
        (WebInspector.UISourceCode.prototype.requestContent):
        (WebInspector.UISourceCode.prototype.requestOriginalContent):
        (WebInspector.UISourceCode.prototype._commitContent):
        (WebInspector.UISourceCode.prototype.searchInContent):
        * inspector/front-end/Workspace.js:
        (WebInspector.WorkspaceController.prototype._mainFrameNavigated):
        (WebInspector.Project):
        (WebInspector.Project.prototype.addUISourceCode):
        (WebInspector.Project.prototype.removeUISourceCode):
        (WebInspector.Project.prototype.uiSourceCodes):
        (WebInspector.Project.prototype.requestFileContent):
        (WebInspector.Project.prototype.searchInFileContent):
        (WebInspector.Workspace):
        (WebInspector.Workspace.prototype.addTemporaryUISourceCode):
        (WebInspector.Workspace.prototype.removeTemporaryUISourceCode):
        (WebInspector.Workspace.prototype.reset):

2012-10-24  Zeno Albisser  <zeno@webkit.org>

        Implement GraphicsSurface for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=98147

        Reviewed by Kenneth Rohde Christiansen.

        * Target.pri:
            Include GraphicsSurfaceWin.cpp in SOURCES on Windows.
        * platform/graphics/surfaces/GraphicsSurface.h:
            Add typedef for PlatformGraphicsSurface on Windows.
        * platform/graphics/surfaces/GraphicsSurfaceToken.h:
            Add typedef for BufferHandle on Windows.
        (GraphicsSurfaceToken):
        * platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp: Added.
            The GraphicsSurface implementation on Windows relies on the
            availability of ANGLE and the EGL_ANGLE_query_surface_pointer extension.
            For Qt this requirements are implicitly satisfied, when Qt is built
            on Windows and QT_CONFIG contains OpenGLES2.
            The GraphicsSurface then renders a given texture onto an offscreen
            pixel buffer surface, queries the surface pointer using the
            EGL_ANGLE_query_surface_pointer extension, and transmits the received
            surface pointer (share handle) over IPC.
            On the UIProcess side, the surface pointer can then be resolved
            using eglCreatePbufferFromClientBuffer.
        (WebCore):
        (WebCore::loadShader):
            Initialize the shaders needed for drawing onto the GraphicsSurface.
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
            In case of the instance being on the WebProcess side,
            create an EGLContext that shares the texture objects with the provided
            share context. Also create two pixel buffer surfaces, one as front- and
            one as backbuffer.
            Query the surface pointers for the pixel buffer surfaces and initialize
            the GraphicsSurfaceToken that can be passed over IPC later.
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
            Release all aquired resources and destroy the pixel buffer surfaces.
            Also close the EGL-Display connection.
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
            Make the belonging context current on the back buffer surface
            and use drawTexture() to draw the provided texture onto the GraphicsSurface.
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
            Save the previously current context, then make the context belonging
            to the GraphicsSurface current.
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
            Restore the context that was current before calling makeCurrent().
        (WebCore::GraphicsSurfacePrivate::swapBuffers):
            Swap front and back buffer surfaces and handles.
        (WebCore::GraphicsSurfacePrivate::token):
        (WebCore::GraphicsSurfacePrivate::frontBufferTextureID):
            This function is meant to be called from the UIProcess side.
            If no front buffer surface has been created before for the current
            front buffer handle, one will be created.
            Then eglBindTexImage will be used to actually bind the current
            front buffer surface to a texture as a source for drawing.
        (WebCore::GraphicsSurfacePrivate::initialFrontBufferShareHandle):
        (WebCore::GraphicsSurfacePrivate::frontBufferShareHandle):
        (WebCore::GraphicsSurfacePrivate::backBufferShareHandle):
        (WebCore::GraphicsSurfacePrivate::releaseFrontBufferTexture):
            Free the resources related to the front buffer surface.
            On the UIProcess side we never actually bind the back buffer.
        (WebCore::GraphicsSurfacePrivate::initializeShaderProgram):
            Initialize and link the shader programs necessary for drawing
            onto the GraphicsSurface.
        (WebCore::GraphicsSurfacePrivate::createSurfaceFromShareHandle):
            Creates a single pixel buffer surface from a share Handle.
            This function will be called on the UIProcess side,
            for the front buffer handle, whenever the buffers have been swapped.
        (WebCore::GraphicsSurfacePrivate::drawTexture):
            The WebProcess uses this function to draw a given
            texture onto the GraphicsSurface's back buffer.
        (WebCore::GraphicsSurface::platformExport):
        (WebCore::GraphicsSurface::platformGetTextureID):
        (WebCore::GraphicsSurface::platformCopyToGLTexture):
        (WebCore::GraphicsSurface::platformCopyFromTexture):
        (WebCore::GraphicsSurface::platformPaintToTextureMapper):
            Uses TextureMapperGL::drawTexture() to draw the front buffer texture
            to the TextureMapper on the UIProcess side.
        (WebCore::GraphicsSurface::platformFrontBuffer):
        (WebCore::GraphicsSurface::platformSwapBuffers):
        (WebCore::GraphicsSurface::platformCreate):
        (WebCore::GraphicsSurface::platformImport):
        (WebCore::GraphicsSurface::platformLock):
        (WebCore::GraphicsSurface::platformUnlock):
        (WebCore::GraphicsSurface::platformDestroy):

2012-09-27  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: provide memory instrumentation for ListHashSet
        https://bugs.webkit.org/show_bug.cgi?id=97786

        Reviewed by Vsevolod Vlasov.

        Switched existing usages of addListHashSet to the generic instrumentation mechanism
        as it should work just just fine now that there is a memory instrumentation of
        ListHashSet.

        * dom/DocumentEventQueue.cpp:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::reportMemoryUsage):

2012-10-24  Charles Wei  <charles.wei@torchmobile.com.cn>

        [BlackBerry] Credentials not re-used for a redirected request to the same domain
        https://bugs.webkit.org/show_bug.cgi?id=100193

        Reviewed by George Staikos.

        We should store the credentials in the redirection response handler, if the request is challenged.
        Because the redirect response suggests the authentication succeeds. 

        Test: http://browsertest01.rim.net/authbasic

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleRedirect):

2012-10-24  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Implement CSS reload upon related SASS resource saving
        https://bugs.webkit.org/show_bug.cgi?id=98024

        Reviewed by Vsevolod Vlasov.

        SASS-generated debug info in CSS is parsed to find out which SASS files contributed to this stylesheet.
        Upon SASS file save in the Sources panel, all affected external CSS stylesheets are reloaded to update
        the page styles (presuming that SASS is running in the "watch" mode during the development cycle).

        * English.lproj/localizedStrings.js:
        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping):
        (WebInspector.SASSSourceMapping.prototype._fileSaveFinished.callback):
        (WebInspector.SASSSourceMapping.prototype._reloadCSS):
        (_bindUISourceCode):
        (_addCSSURLforSASSURL):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):

2012-10-23  Yury Semikhatsky  <yurys@chromium.org>

        Memory instrumentation: don't count agent-specific front-ends separately
        https://bugs.webkit.org/show_bug.cgi?id=100087

        Reviewed by Alexander Pavlov.

        Pointers to domain-specific inspector front-end interfaces are reported as
        weak pointers instead of members to avoid double-counting.

        Test by comparing set of reported instrumented objects with the set of objects
        allocated by tcmalloc.

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::reportMemoryUsage):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::reportMemoryUsage):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::reportMemoryUsage):

2012-10-23  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r132303) Broke debug build when SHADOW_DOM is enabled but STYLE_SCOPED is disabled
        https://bugs.webkit.org/show_bug.cgi?id=100203

        Unreviewed Build fix.

        Fix compilation error in StyleResolver.h when SHADOW_DOM flag is
        set and STYLE_SCOPED is not.

        No new tests, no behavior change.

        * css/StyleResolver.h:
        (WebCore::StyleResolver::ensureScopeResolver):

2012-10-23  Andreas Kling  <kling@webkit.org>

        Remove specialized hash traits for GlyphPages.
        <http://webkit.org/b/100185>

        Reviewed by Dan Bernstein.

        Now that the default minimum table size has been lowered for all tables, there's no need
        for this specialization anymore.

        * platform/graphics/FontFallbackList.h:
        (FontFallbackList):

2012-10-23  Kent Tamura  <tkent@chromium.org>

        Multiple fields input UI: Don't use CSS properties for physical direction
        https://bugs.webkit.org/show_bug.cgi?id=100195

        Reviewed by Kentaro Hara.

        CSS declarations such as "padding: 0 0 0 1px;" "margin-left: 0.2em;" are
        not direction-neutral, and makes unexpected appearance in RTL. We should
        use -webkit-padding-start or -webkit-margin-start.

        No new tests. Covered by date-multiple-fields-appearance-l10n.html and
        month-multiple-fields-appearance-l10n.html

        * css/html.css:
        (input[type="date"]): Use padding:0 and -webkit-padding-start:1px;
        (input[type="datetime"]): Ditto.
        (input[type="datetime-local"]): Ditto.
        (input[type="month"]): Ditto.
        (input[type="time"]): Ditto.
        (input[type="week"]): Ditto.
        (input[type="week"]::-webkit-inner-spin-button):
        Use -webkit-margin-start. Also use an integral pixel size instead of
        avoid a fractional relative size to avoid subpixel layout rounding.

2012-10-23  Dan Bernstein  <mitz@apple.com>

        The font cache evicts inactive font data too aggressively when not under memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=100194

        Reviewed by Sam Weinig.

        Increasing the number of inactive font data objects the cache may hold increases the hit
        rate, leading to improved page load performance. When memory pressure is detected,
        MemoryPressureHandler evicts all inactive objects, regardless of the limits we are
        increasing here.

        * platform/graphics/FontCache.cpp:
        (WebCore): Increased the maximum number of inactive font data objects in the cache from 50
        to 225, and the number of objects to evict once the limit is met from 20 to 25.

2012-10-23  Takashi Sakamoto  <tasak@google.com>

        [Shadow DOM] Needs @host rule for ShadowDOM styling
        https://bugs.webkit.org/show_bug.cgi?id=88606

        Reviewed by Hajime Morita.

        Implemented @host-@rules according to the shadow dom spec:
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#host-at-rule
        The design doc is:
        https://docs.google.com/document/d/1P2yorchF8lci2sccr-mVSRf2dtvjKeiuyQWzCB2bEA8/edit

        Test: fast/dom/shadow/athost-atrules.html

        * css/CSSGrammar.y.in:
        Added rules for parsing @host @-rules.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectAtToken):
        Added a new token "@host".
        (WebCore::CSSParser::createHostRule):
        Added a new method to create an @host @-rule, which is invoked from
        (WebCore):
        * css/CSSParser.h:
        Added a declaration of the above new method: createHostRule.
        * css/CSSPropertySourceData.h:
        Added HOST_RULE to enum Type.
        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):
        Modified multiple bool arguments into one argument. Now it
        uses combinations of values from enum AddRuleFlags.
        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addStyleRule):
        Updated according to the RuleData's change.
        Modified to Invoke increaseSpecificity if the given rule is @host
        @-rule.
        (WebCore::RuleSet::addRulesFromSheet):
        Invoked addHostRule if the given rule is @host @-rule.
        * css/RuleSet.h:
        (RuleData):
        (WebCore::RuleData::increaseSpecificity):
        Added a new method to increase selector's specificity. This method is
        used to make @host @-rules' specificity larger than normal author
        rules' specificity.
        (RuleSet):
        * css/StyleResolver.cpp:
        (WebCore::makeRuleSet):
        (WebCore::StyleResolver::addHostRule):
        A wrapper method to invoke StyleScopeResolver::addHostRule. The method
        is used to make only StyleResolver know an implementation detail about
        class StyleScopeResolver.
        (WebCore::StyleResolver::appendAuthorStylesheets):
        Updated according to the RuleData's change.
        (WebCore::StyleResolver::styleSharingCandidateMatchesHostRules):
        A new method to find matched host rules when an element is given.
        This method invokes
        StyleScopeResolver::styleSharingCandidateMatchesHostRules to find
        matched host rules.
        (WebCore):
        (WebCore::StyleResolver::matchHostRules):
        A new method to find matched host rules when an element is given.
        This method invokes StyleScopeResolver::matchHostRules to find
        matched host rules.
        (WebCore::StyleResolver::matchScopedAuthorRules):
        Modified to invoke matchHostRules.
        (WebCore::StyleResolver::locateSharedStyle):
        Disable sibling style cache if the given element is a shadow host and
        any @host @-rules are applied to the element.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::ensureScopeResolver):
        If no scopeResolver is created, create and return the instance.
        If created, just return the instance.
        (StyleResolver):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::reportMemoryUsage):
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        (WebCore::StyleRuleHost::StyleRuleHost):
        Implemented class StyleRuleHost. The class is almost the same as
        StyleRuleBlock except type.
        (WebCore):
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::isHostRule):
        (StyleRuleHost):
        (WebCore::StyleRuleHost::create):
        (WebCore::StyleRuleHost::copy):
        (WebCore):
        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::ensureAtHostRuleSetFor):
        A new method to create a new RuleSet for the given shadow root.
        (WebCore):
        (WebCore::StyleScopeResolver::atHostRuleSetFor):
        A new private inline method to obtain @host @-rules declared in
        the given shadow root.
        (WebCore::StyleScopeResolver::addHostRule):
        Added a new method to register @host @-rules with shadow roots.
        (WebCore::StyleScopeResolver::styleSharingCandidateMatchesHostRules):
        A new method to find whether any @host @-rules are applied to
        the given host element.
        (WebCore::StyleScopeResolver::matchHostRules):
        A new method to find matched rules for the given host element.
        (WebCore::StyleScopeResolver::reportMemoryUsage):
        * css/StyleScopeResolver.h:
        (WebCore):
        (StyleScopeResolver):
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):

2012-10-23  Andreas Kling  <kling@webkit.org>

        REGRESSION(r130643): ASSERTION FAILED: result.iterator != end() below PluginDatabase::add
        <http://webkit.org/b/100065>

        Reviewed by Anders Carlsson.

        Restore the pre-r130643 hash table size for PluginDatabase to prevent these easily reproducible
        collisions. This will need a proper fix at some point.

        * plugins/PluginDatabase.h:
        * plugins/PluginPackage.h:
        (PluginPackageHashTraits):

2012-10-23  Simon Fraser  <simon.fraser@apple.com>

        Allow tests to run with a tile cache, and optionally dump the tile cache via layerTreeAsText()
        https://bugs.webkit.org/show_bug.cgi?id=100159

        Reviewed by Tim Horton.

        Add a LAYER_TREE_INCLUDES_PAGE_TILE_CACHE flag for layerTreeAsText(), and plumb it
        through to GraphicsLayerCA, which dumps the TiledBacking tile coverage rect.

        Test: platform/mac/tiled-drawing/use-tiled-drawing.html

        * page/Frame.h:
        * platform/graphics/GraphicsLayer.cpp:
        (showGraphicsLayerTree):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::tiledBacking):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::tiledBacking):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/ca/mac/TileCache.h:
        (WebCore::TileCache::tileCoverageRect):
        (TileCache):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::computeTileCoverageRect):
        (WebCore::TileCache::revalidateTiles):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-10-23  Simon Fraser  <simon.fraser@apple.com>

        Flush pending GraphicsLayer changes when reattaching compositing layers if necessary
        https://bugs.webkit.org/show_bug.cgi?id=100187
        <rdar://problem/12546770>

        Reviewed by Dan Bernstein.

        Fix a regression from r131940. That revision changed RenderLayerCompositor::flushPendingLayerChanges()
        to bail if the root layer is unattached, which indicates that we're in the page cache, or in a
        background tab. However, that dropped the layer flush on the floor, so that any subsequent changes
        to GraphicsLayerCAs would just pile up and never get flushed. This was most evident on pages
        that require frequent flushing, such as those running animated GIFs.
        
        Fix by setting a flag in flushPendingLayerChanges() if we're unattached. Consult the flag
        when re-attaching the root layer, and if it's set, flush the GraphicsLayers.
        
        Not testable because we can't test detaching and re-adding web views in DRT/WTR.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor): Initialize m_shouldFlushOnReattach to false.
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): If the root layer attachment
        is RootLayerUnattached, set the m_shouldFlushOnReattach flag before returning.
        (WebCore::RenderLayerCompositor::attachRootLayer): If m_shouldFlushOnReattach, flush the layers,
        saying that we're the flush root.
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor): Add m_shouldFlushOnReattach flag.

2012-10-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132276.
        http://trac.webkit.org/changeset/132276
        https://bugs.webkit.org/show_bug.cgi?id=100189

        It broke the Qt-WK2 build intentionally (Requested by
        Ossy_night on #webkit).

        * page/Frame.h:
        * platform/graphics/GraphicsLayer.cpp:
        (showGraphicsLayerTree):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::tiledBacking):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::tiledBacking):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/ca/mac/TileCache.h:
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::tileCoverageRect):
        (WebCore::TileCache::revalidateTiles):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-10-23  Philip Rogers  <pdr@google.com>

        Add extra check for data() in PageSerializer.
        https://bugs.webkit.org/show_bug.cgi?id=99102

        Reviewed by Eric Seidel.

        The image returned from imageForRenderer() does not contain the raw SVG data
        so this patch adds a check for image->image()->data() before writing SVG
        in PageSerializer::addImageToResources.

        Covered by existing test WebPageNewSerializeTest.SVGImageDontCrash.

        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::addImageToResources):

2012-10-23  Kent Tamura  <tkent@chromium.org>

        Move appendAsLDMLLiteral in LocaleWin.cpp to a common place
        https://bugs.webkit.org/show_bug.cgi?id=100129

        Reviewed by Kentaro Hara.

        We're going to use appendAsLDMLLiteral in other code, and it is
        related to DateTimeFormat class.  So we move it to DateTimeFormat
        class as quoteAndAppendLiteral.

        No new tests because of no behavior change.

        * platform/text/DateTimeFormat.cpp:
        (WebCore::DateTimeFormat::quoteAndAppendLiteral):
        Moved from LocaleWin.cpp
        * platform/text/DateTimeFormat.h:
        Declare StringBuilder by wtf/Forward.h. It also declares String.
        (DateTimeFormat): Declare quoteAndAppendLiteral.
        * platform/text/LocaleWin.cpp:
        (WebCore): Move appendLDMLLiteral to DateTimeFormat.
        (WebCore::convertWindowsDateFormatToLDML):
        Follow the moving.

2012-10-23  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r131421): Text baseline is not aligned in some locales
        https://bugs.webkit.org/show_bug.cgi?id=100088

        Reviewed by Hajime Morita.

        Before this patch, the element with ::-webkit-datetime-edit had
        -webkit-align-items:center. It was incorrect at all because it
        ignores baselines of each of inner fields. We need to change it to
        -webkit-align-items:baseline, or stop using -webkit-flex.

        However -webkit-align-items:baseline doesn't work because a spin
        button element in the element doesn't have the baseline. If we
        specified -webkit-align-items:baseline, the spin button would
        shift up.

        So, we change the element structure for multiple fields input
        elements. Before this patch, the structure was:

        input
          |
           - ::-webkit-date-and-time-container (flex cotainer)
             |
             |- ::-webkit-datetime-edit (has flexibility in date-and-time-container, also this is a flex container)
             |  |- ::-webkit-datetime-edit-foo
             |  |      :
             |  |
             |  |- ::-webkit-date-time-edit-gap  (has flexibility in datetime-edit)
             |   - ::-webkit-inne-spin-button
              - ::-webkit-calendar-picker-indicator

        After the patch, the structure will be:

        input
          |
           - ::-webkit-date-and-time-container (flexible box)
             |
             |- ::-webkit-datetime-edit (has flexibility in date-and-time-container)
             |  |- ::-webkit-datetime-edit-foo
             |  |      :
             |  |
             |
             |- ::-webkit-inne-spin-button
              - ::-webkit-calendar-picker-indicator

        Because the spin button owner is date-and-time-container, we don't
        need to make the datetime-edit element a flex container.

        Also, we had rounding error by subpixel layout. To avoid it, we
        stop using fractional paddings.

        In order to implement this, we need to change the SpinButtonOwner
        interface provider from DateTimeEditElement to
        BaseMultipleFieldsDateAndTimeInputType.

        No new tests. Covered by month-multiple-fields-appearance-l10n.html.

        * css/html.css:
        (input::-webkit-datetime-edit): Stop making this a flex
        container. Inner fields in this use the single baseline.
        (input::-webkit-datetime-edit-ampm-field):
        Don't use fractional paddings to avoid rounding erros of subpixel
        layout.  Use integral margin instead to avoid overwrap of focus
        ring and background-color of the field.
        (input::-webkit-datetime-edit-day-field): Ditto.
        (input::-webkit-datetime-edit-hour-field): Ditto.
        (input::-webkit-datetime-edit-millisecond-field): Ditto.
        (input::-webkit-datetime-edit-minute-field): Ditto.
        (input::-webkit-datetime-edit-month-field): Ditto.
        (input::-webkit-datetime-edit-second-field): Ditto.
        (input::-webkit-datetime-edit-week-field): Ditto.
        (input::-webkit-datetime-edit-year-field): Ditto.
        (input::-webkit-date-and-time-container): Ditto.

        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Overrides
        SpinButtonOwner functions, and add m_spinButtonElement.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::focusAndSelectSpinButtonOwner):
        Just delegate to DateTimeEditElement::focusIfNoFocus.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldSpinButtonRespondToMouseEvents):
        Moved from DateTimeEditElement::shouldSpinButtonRespondToMouseEvents.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldSpinButtonRespondToWheelEvents):
        Moved from DateTimeEditElement::shouldSpinButtonRespondToWheelEvents.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::spinButtonStepDown):
        Delegate to DateTimeEditElement::stepDown.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::spinButtonStepUp):
        Delegate to DateTimeEditElement::stepUp.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType):
        Initialize m_spinButtonElement.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType):
        Reset SpinButtonOwner for m_spinButtonElement like the old code of ~DateTimeEditElement.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
        Put a SpinButtonElement between the DateTimeEditElement and the PickerIndicatorElement.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::forwardEvent):
        Take care of SpinButtonElement.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged):
        Release capture of SpinButtonElement. This corresponds to the old
        code of DateTimeEditElement::updateUIState.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::readonlyAttributeChanged): Ditto.

        * html/TextFieldInputType.h:
        Make SpinButtonElement::SpinButtonOwner protected to allow overriding.

        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement): Remove SpniButtonOwner implementation,
        m_spinButton, and rename some functions.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::DateTimeEditElement):
        Remove m_spinButton.
        (WebCore::DateTimeEditElement::~DateTimeEditElement): Ditto.
        (WebCore::DateTimeEditElement::focusIfNoFocus):
        Renamed from focusAndSelectSpinButtonOwner. This is called
        BaseMultipleFieldsDateAndTimeInputType::focusAndSelectSpinButtonOwner.
        (WebCore::DateTimeEditElement::layout):
        Remove creation code for -webkit-datetime-edit-gap and SpinButtonElement.
        (WebCore::DateTimeEditElement::defaultEventHandler):
        Move the code for m_spinButton to
        BaseMultipleFieldsDateAndTimeInputType::forwardEvent.
        (WebCore::DateTimeEditElement::hasFocusedField): A helper for
        BaseMultipleFieldsDateAndTimeInputType::shouldSpinButtonRespondToWheelEvents.
        (WebCore::DateTimeEditElement::stepDown): A helper for
        BaseMultipleFieldsDateAndTimeInputType::spinButtonStepDown.
        (WebCore::DateTimeEditElement::stepUp): A helper for
        BaseMultipleFieldsDateAndTimeInputType::spinButtonStepUp.
        (WebCore::DateTimeEditElement::updateUIState): Move the code to
        BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged
        and readonlyAttributeChanged.

2012-10-23  Andreas Kling  <kling@webkit.org>

        Shrink immutable ElementAttributeData and StylePropertySet by one pointer each.
        <http://webkit.org/b/100123>

        Reviewed by Anders Carlsson.

        Remove one pointer of unintentional padding in the immutable versions of these objects.
        583kB progression on Membuster3.

        * css/StylePropertySet.cpp:
        (WebCore::immutableStylePropertySetSize):
        * dom/ElementAttributeData.cpp:
        (WebCore::immutableElementAttributeDataSize):

2012-10-23  Nate Chapin  <japhet@chromium.org>

        Crash in WebCore::SubresourceLoader::willSendRequest.
        https://bugs.webkit.org/show_bug.cgi?id=100147

        Reviewed by Abhishek Arya.

        No new tests. There is a test case that should cover this, but it doesn't
        work correctly on many platforms due to its use of testRunner.addURLToRedirect().
        See http/tests/loading/cross-origin-XHR-willLoadRequest.html.
        Tested manually on http://www.nick.co.uk/shows/spongebob

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):

2012-10-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK][Soup] Implement the default authentication dialog via WebCoreSupport
        https://bugs.webkit.org/show_bug.cgi?id=99351

        Reviewed by Carlos Garcia Campos.

        Instead of connecting to the SoupSession::authenticate signal in the API layer
        via a SoupSessionFeature, route the message through the typical WebCore authentication
        mechanism. This is a step on the path to having full-blown support for authentication
        in the API allowing for custom authentication dialogs and behavior in clients.

        No new tests. This should not change behavior.

        * GNUmakefile.list.am: Add the new implementation file for the AuthenticationChallenge.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge): Include GTK+ here as well.
        * platform/gtk/GtkAuthenticationDialog.cpp: Instead of carrying a raw pointer to a SoupAuth
        carry a GRefPtr which will allow the dialog to be used even after the AuthenticationChallenge
        is destroyed.
        * platform/gtk/GtkAuthenticationDialog.h: ditto.
        * platform/network/ResourceHandle.h: Add a didReceiveAuthenticationChallenge method.
        * platform/network/ResourceHandleInternal.h:
        (ResourceHandleInternal): Remove the getter for the initiating page ID.
        * platform/network/soup/AuthenticationChallenge.h: Added an implementation of AuthenticationChallenge
        that takes a bit of data from the handle including SoupMessage, SoupAuth, and SoupSession.
        * platform/network/soup/AuthenticationChallengeSoup.cpp: Added. Ditto.
        * platform/network/soup/ResourceError.h:
        (ResourceError): Added a factory for authentication errors.
        * platform/network/soup/ResourceErrorSoup.cpp: Ditto.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::setSoupRequestInitiaingPageID): Just get the page directly from the NetworkingContext.
        (WebCore::createSoupMessageForHandleAndRequest): Always set the "handle" data on the message.
        It's always used now.
        (WebCore::ResourceHandle::start): Get the initiating page ID directly from the NetworkingContext.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Added this method which routes
        the authentication challenge to the client.
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential): Added a stub for this method.
        (WebCore::ResourceHandle::loadResourceSynchronously): Don't pass the session to the loader.
        (WebCore::authenicateCallback): Added.
        (WebCore::ResourceHandle::defaultSession): Connect the authenticate callback.

2012-10-23  Adam Barth  <abarth@webkit.org>

        [V8] Simplify GCEpilogueVisitor along the same lines as GCPrologueVisitor
        https://bugs.webkit.org/show_bug.cgi?id=100157

        Reviewed by Eric Seidel.

        This patch removes the traits template parameter from GCEpilogueVisitor
        and makes it mirror GCPrologueVisitor again.

        * bindings/v8/V8GCController.cpp:
        (WebCore):
        (ActiveDOMObjectEpilogueVisitor):
        (WebCore::ActiveDOMObjectEpilogueVisitor::ActiveDOMObjectEpilogueVisitor):
        (WebCore::ActiveDOMObjectEpilogueVisitor::visitDOMWrapper):
        (WebCore::V8GCController::majorGCEpilogue):

2012-10-23  Varun Jain  <varunjain@chromium.org>

        Context menu generated from touch gestures on textareas has
        context of the cursor position instead of the position where the event occurs.
        https://bugs.webkit.org/show_bug.cgi?id=99520

        Reviewed by Kenneth Rohde Christiansen.

        Send a synthetic mouse down event for context menu-summoning-gesture events so
        that textareas can correctly set cursors before receiving the context menu event.

        Test: fast/events/touch/gesture/right-click-gestures-set-cursor-at-correct-position.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureTwoFingerTap):
        (WebCore):
        (WebCore::EventHandler::sendContextMenuEventForGesture):
        * page/EventHandler.h:
        (EventHandler):

2012-10-23  Andy Estes  <aestes@apple.com>

        [WebKit2 API] Add properties to get textRects from a WKDOMRange or WKDOMNode
        https://bugs.webkit.org/show_bug.cgi?id=100162

        Reviewed by Sam Weinig.

        * WebCore.exp.in: Exported symbols needed by WebKit2.
        * bindings/objc/DOM.mm:
        (-[DOMNode textRects]): Moved some logic into Node::textRects()
        (everything but the call to updateLayoutIgnorePendingStylesheets()).
        * dom/Node.cpp:
        (WebCore::Node::textRects):
        * dom/Node.h:

2012-10-23  Adam Barth  <abarth@webkit.org>

        [V8] Remove unused function from DOM wrapper visitor
        https://bugs.webkit.org/show_bug.cgi?id=100163

        Reviewed by Eric Seidel.

        No one overrides these virtual functions. They were added in
        http://trac.webkit.org/changeset/73491, but we don't use them in the GC
        controller anymore.

        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::visit):

2012-10-23  Aaron Colwell  <acolwell@chromium.org>

        Clear m_mediaSource reference when the MediaSource is closed
        https://bugs.webkit.org/show_bug.cgi?id=100047

        Reviewed by Eric Carlson.

        The m_mediaSource object shouldn't be accessed after the object
        transitions to closed so this change simply clears the reference
        when that transition happens.

        No new tests because the change isn't visible to JavaScript.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Removed a closed transition that is actually dead code.
        (WebCore::HTMLMediaElement::setSourceState): Clear the m_mediaSource reference on closed transition.

2012-10-23  Simon Fraser  <simon.fraser@apple.com>

        Allow tests to run with a tile cache, and optionally dump the tile cache via layerTreeAsText()
        https://bugs.webkit.org/show_bug.cgi?id=100159

        Reviewed by Tim Horton.

        Add a LAYER_TREE_INCLUDES_PAGE_TILE_CACHE flag for layerTreeAsText(), and plumb it
        through to GraphicsLayerCA, which dumps the TiledBacking tile coverage rect.

        Test: platform/mac/tiled-drawing/use-tiled-drawing.html

        * page/Frame.h:
        * platform/graphics/GraphicsLayer.cpp:
        (showGraphicsLayerTree):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::tiledBacking):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::tiledBacking):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/ca/mac/TileCache.h:
        (WebCore::TileCache::tileCoverageRect):
        (TileCache):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::computeTileCoverageRect):
        (WebCore::TileCache::revalidateTiles):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText):
        * testing/Internals.h:
        * testing/Internals.idl:

2012-10-23  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Enable threaded/IPC animations
        https://bugs.webkit.org/show_bug.cgi?id=93146

        Reviewed by Kenneth Rohde Christiansen.

        Add enablers to TextureMapper and GraphicsLayerAnimation so that they could be used
        across processes with IPC. Added some public accessors to GraphicsLayerAnimation,
        and allowed a GraphicsLayerTextureMapper to receive a full list of animations.

        Covered by existing animation and compositing tests.

        * platform/graphics/GraphicsLayerAnimation.cpp:
        (WebCore::GraphicsLayerAnimation::GraphicsLayerAnimation):
            Initialize the animation with the startTime instead of the offset.

        (WebCore::GraphicsLayerAnimations::getActiveAnimations):
        * platform/graphics/GraphicsLayerAnimation.h:
        (WebCore::GraphicsLayerAnimation::setState):
            Allow setting the pause time as well.

        (WebCore::GraphicsLayerAnimation::boxSize):
        (WebCore::GraphicsLayerAnimation::startTime):
        (WebCore::GraphicsLayerAnimation::pauseTime):
        (WebCore::GraphicsLayerAnimation::animation):
        (WebCore::GraphicsLayerAnimation::keyframes):
        (WebCore::GraphicsLayerAnimation::listsMatch):
        (WebCore::GraphicsLayerAnimations::size):
        (WebCore::GraphicsLayerAnimations::animations):
            Add public accessors to GraphicsLayerAnimation properties.

        (GraphicsLayerAnimation):
        (GraphicsLayerAnimations):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        (WebCore::GraphicsLayerTextureMapper::setAnimations):
            Allow replacing the entire list of animations.

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

2012-10-23  Chris Rogers  <crogers@google.com>

        Change setTargetValueAtTime() to setTargetAtTime()
        https://bugs.webkit.org/show_bug.cgi?id=100153

        Reviewed by Adam Barth.

        The AudioParam method name has changed due to Web Audio API spec review.
        Keep legacy support for the old name.

        Test: webaudio/audioparam-setTargetAtTime.html

        * Modules/webaudio/AudioParam.h:
        (WebCore::AudioParam::setTargetAtTime):
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::setTargetAtTime):
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * Modules/webaudio/AudioParamTimeline.h:
        (AudioParamTimeline):

2012-10-23  Benjamin Poulain  <benjamin@webkit.org>

        [Mac] Remove extraneous conversion to String->NSString
        https://bugs.webkit.org/show_bug.cgi?id=100044

        Reviewed by Darin Adler.

        Improve some unfortunate use of String->NSString.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification): The variable macNotification is ultimately
        needed as NSString, and all its value are or can be NSString.
        Convert the last 3 char* values to NSString literal and use NSString* all the way.

        * loader/mac/LoaderNSURLExtras.h:
        * loader/mac/LoaderNSURLExtras.mm:
        (suggestedFilenameWithMIMEType):
        We converted the String to NSString to pass to suggestedFilenameWithMIMEType. There is no need
        for the string to be a NSSTring there, we can leave it in its original type.

        The case checking for a nil MIMEType was dead code because the implicit conversion never returns nil.

        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink):
        Use String's nsStringNilIfEmpty().

        * platform/mac/HTMLConverter.mm:
        (-[WebHTMLConverter _addAttachmentForElement:URL:needsParagraph:usePlaceholder:]):
        Fix the coding style. Do the conversion to NSString only when needed.

2012-10-23  Roger Fong  <roger_fong@apple.com>

        [Win] Popup menus positioning needs to take multiple monitors into account.
        https://bugs.webkit.org/show_bug.cgi?id=100158

        Reviewed by Timothy Horton.

        Add screen.x() to repositioning check to account for position of current monitor.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):

2012-10-23  Huang Dongsung  <luxtella@company100.net>

        [CSS Shaders] Set FilterOperations on GraphicsLayer after the program of CSS Shaders is loaded.
        https://bugs.webkit.org/show_bug.cgi?id=99908

        Reviewed by Dean Jackson.

        CSS Shaders can not render anything until the program is loaded. If there is
        partial loaded shaders program, whole FilterOperations chain can not render
        anything. It occurs a flash. So We have to wait until the program is loaded, to
        prevent a flash as RenderLayerBacking::updateImageContents() waits until an
        image is fully loaded.

        No new tests, CSS Shaders on Accelerated Compositing are not activated yet.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateFilters):

2012-10-23  Elliott Sprehn  <esprehn@chromium.org>

        Generated should not be supported for things with a shadow
        https://bugs.webkit.org/show_bug.cgi?id=98836

        Reviewed by Dimitri Glazkov.

        As far as CSS is concerned inputs and things with shadow content inside
        shouldn't support pseudo elements like :before, :after or :first-letter.
        Neither Gecko or Presto supports it, and we only accidentally supported
        it.

        Until the spec tells us what to do we should disable support. This is
        also neccesary because the new generated content implementation doesn't
        support shadows.

        Test: fast/forms/pseudo-elements.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderListBox.h: Added missing canHaveGeneratedChildren() that returns false.
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):

2012-10-23  Huang Dongsung  <luxtella@company100.net>

        [CSS Shaders] Implement overlay, color-dodge, color-burn, hard-light, soft-light blend modes.
        https://bugs.webkit.org/show_bug.cgi?id=98504

        Reviewed by Dean Jackson.

        Add expressions for the aforementioned blend modes. The expressions are lifted
        directly from the CSS Compositing and Blending spec [1]. WebKit adds these
        blending expressions to the author's shader.

        [1]: https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blendingnormal

        Test: css3/filters/custom/custom-filter-blend-modes.html

        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::rewriteMixFragmentShader):
        (WebCore::CustomFilterValidatedProgram::blendFunctionString):

2012-10-23  Huang Dongsung  <luxtella@company100.net>

        [CSS Shaders] Implement all composite operators except destination and lighter.
        https://bugs.webkit.org/show_bug.cgi?id=97859

        Reviewed by Dean Jackson.

        Add expressions for all composite operators except destination and
        lighter. The expressions are lifted directly from the CSS Compositing
        and Blending spec [1]. WebKit adds these compositing expressions to the
        author's shader.

        [1]: https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#advancedcompositing

        Test: css3/filters/custom/custom-filter-composite-operators.html

        * platform/graphics/filters/CustomFilterCompiledProgram.cpp:
        (WebCore::CustomFilterCompiledProgram::initializeParameterLocations):
            Remove ASSERTION checking if glGetUniformLocation returns negative,
            because ASSERTION can fail with clear and copy composite operations.
            Clear and copy composite operations do not need "css_u_texture"
            representing the DOM element texture. If the driver compiler is
            smart, "css_u_texture" is not regarded as an active uniform, so
            glGetuniformLocation returns -1. glGetAttribLocation ditto.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::compiledProgram):
            Move the above ASSERTION in CustomFilterCompiledProgram to here.
            ASSERTION checks if m_samplerLocation is not -1 when the author
            shader needs an input texture.
        (WebCore::CustomFilterValidatedProgram::needsInputTexture):
        (WebCore):
        (WebCore::CustomFilterValidatedProgram::compositeFunctionString):
        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        (CustomFilterValidatedProgram):

2012-10-23  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Changing the blend mode in CSS doesn't update the custom filter rendering
        https://bugs.webkit.org/show_bug.cgi?id=99887

        Reviewed by Dirk Schulze.

        Before this patch, WebKit would not recompute an element's style when just its custom filter
        blend mode changed.

        For example, suppose an element initially has the style:
        -webkit-filter: custom(none mix(url(shader.fs) multiply source-atop));

        Then, we change the blend mode from "multiply" to "normal":
        -webkit-filter: custom(none mix(url(shader.fs) normal source-atop));

        WebKit now detects this change and recomputes the style.

        CustomFilterProgram now has an equals operator that considers the program type and the mix
        settings. The mix settings contain the blend mode.

        Test: css3/filters/custom/custom-filter-change-blend-mode.html

        * platform/graphics/filters/CustomFilterProgram.cpp:
        (WebCore::CustomFilterProgram::operator==):
            Previously, the equals operator was pure virtual in CustomFilterProgram. Now,
            CustomFilterProgram implements it and compares the program type and mix settings, if
            appropriate.
        (WebCore):
        * platform/graphics/filters/CustomFilterProgram.h:
        * platform/graphics/filters/CustomFilterProgramInfo.cpp:
        (WebCore::CustomFilterProgramInfo::hash):
            Refactor a repeated condition into a boolean to improve readability.
        (WebCore::CustomFilterProgramInfo::operator==):
            Refactor repeated conditions to improve readability. Reorder the conditions so the less
            expensive ones occur first.
        * rendering/style/StyleCustomFilterProgram.h:
        (WebCore::StyleCustomFilterProgram::operator==):
            Call the base class's equals operator.

2012-10-23  David Barton  <dbarton@mathscribe.com>

        [MathML] Symbol font uses greek letters for roman ones on linux and Windows
        https://bugs.webkit.org/show_bug.cgi?id=99921

        Reviewed by Eric Seidel.

        For parts of stretched parentheses and brackets, mathml.css currently uses the Symbol font,
        which on linux and Windows has greek letters at roman code points. To fix this, we switch
        to the STIXSizeOneSym font when available. However, this can cause vertical gaps between
        glyph parts, because of hard-coded constants in RenderMathMLOperator.cpp. We eliminate all
        these constants. We also shift glyphs upward by 1px and truncate them to avoid the gaps.

        Tested by existing tests, and one test added to LayoutTests/mathml/presentation/mo.xhtml.

        * css/mathml.css:
        (math, mfenced > *):
            - Set font-family for mn, mi, etc.
        (mo, mfenced):
            - Set font-family for mo and anonymous operators, including extension glyphs for
              stretched operators like parentheses and brackets.
        (math):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore):
            - Change 0x23d0 to 0x23aa for STIX & Cambria Math fonts.
        (WebCore::RenderMathMLOperator::glyphHeightForCharacter):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::createStackableStyle):
            - Eliminate unused lineHeight and topRelative parameters, and the hard-coded font size
              of 14.
        (WebCore::RenderMathMLOperator::createGlyph):
            - Eliminate unused lineHeight and topRelative parameters.
        * rendering/mathml/RenderMathMLOperator.h:
        (RenderMathMLOperator):

2012-10-23  Benjamin Poulain  <benjamin@webkit.org>

        WTFURL: Implement KURL::setPort()
        https://bugs.webkit.org/show_bug.cgi?id=99898

        Reviewed by Adam Barth.

        * platform/KURLWTFURL.cpp:
        (WebCore::KURL::setPort):

2012-10-23  Nico Weber  <thakis@chromium.org>

        In the open-source jpeg decoder, read image orientation from the exif data
        https://bugs.webkit.org/show_bug.cgi?id=100144

        Reviewed by Eric Seidel.

        This will be used to implement the shouldRespectImageOrientation
        setting (see bug 19688). Currently this isn't hooked up anywhere, so
        it has no observable effect for now.

        Once it's hooked up, it will be tested by
        fast/images/exif-orientation.html

        * platform/graphics/BitmapImage.h:
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::orientation):
        (ImageDecoder):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::readUint16):
        (WebCore):
        (WebCore::readUint32):
        (WebCore::checkExifHeader):
        (WebCore::readImageOrientation):
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::setOrientation):

2012-10-23  Chris Rogers  <crogers@google.com>

        Fix thread safety issue in AudioParamTimeline
        https://bugs.webkit.org/show_bug.cgi?id=100154

        Reviewed by Kenneth Russell.

        Add appropriate locking in AudioParamTimeline::valueForContextTime()

        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valueForContextTime):

2012-10-23  Alec Flett  <alecflett@chromium.org>

        IndexedDB: refactor backend to use IDB*Metadata
        https://bugs.webkit.org/show_bug.cgi?id=100055

        Reviewed by Tony Chang.

        This further encapsulates the static data in
        IDBObjectStoreBackendImpl and IDBIndexBackendImp into their
        respective IDB*Metadata structs, in preparation for
        https://bugs.webkit.org/show_bug.cgi?id=99774.

        No new tests as this is purely a refactor.

        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::metadata):
        * Modules/indexeddb/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        (WebCore::IDBIndexBackendImpl::id):
        (WebCore::IDBIndexBackendImpl::setId):
        (WebCore::IDBIndexBackendImpl::hasValidId):
        (WebCore::IDBIndexBackendImpl::name):
        (WebCore::IDBIndexBackendImpl::keyPath):
        (WebCore::IDBIndexBackendImpl::unique):
        (WebCore::IDBIndexBackendImpl::multiEntry):
        (IDBIndexBackendImpl):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore::IDBObjectStoreMetadata::IDBObjectStoreMetadata):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::metadata):
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):
        (WebCore::IDBObjectStoreBackendImpl::id):
        (WebCore::IDBObjectStoreBackendImpl::setId):
        (WebCore::IDBObjectStoreBackendImpl::name):
        (WebCore::IDBObjectStoreBackendImpl::keyPath):
        (WebCore::IDBObjectStoreBackendImpl::autoIncrement):
        (IDBObjectStoreBackendImpl):

2012-10-19  Roger Fong  <roger_fong@apple.com>

        [WebGL] conformance/textures/texture-size.html is failing on Apple Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=94041

        Reviewed by Dean Jackson.

        When binding a texture to GL_TEXTURE_2D when GL_ACTIVE_TEXTURE is 0, we set m_boundTexture0 to the texture unit. 
        However when we delete the texture, we need to be setting m_boundTexture0 to 0.
        Otherwise when we draw to the screen we bind m_boundTexture0 in the prepareTexture() method and since the associated texture 
        has already been deleted we end up in an error state.

        Tested using Khronos WebGL conformance suite:
        conformance/textures/texture-size.html

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::deleteTexture):

2012-10-22  Dirk Schulze  <krit@webkit.org>

        BasicShapePolygon::path takes width instead of height for boundary calculation
        https://bugs.webkit.org/show_bug.cgi?id=99919

        Reviewed by Darin Adler.

        The 'y' parameters of polygon were calculated by the with of the bounding box of the object.
        This caused problems on percentage values for point positions. 
        Changed it to the height of the bounding box.

        Test: css3/masking/clip-path-polygon-percentage.html

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapePolygon::path):

2012-10-23  Dominik Röttsches  <dominik.rottsches@intel.com>

        Add timeout support to XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=74802

        Reviewed by Nate Chapin.

        An implementation of XHR2 timeouts by using ResourceRequest's setTimeoutInterval.
        This made several changes necessary in CachedResource and SubresourceLoader in order
        to distinguish and forward the timeout case from there.

        The case of late updates to the timeout property, changing the timeout value after send()
        is not supported yet and handled separately in bug 98156.

        XHR2 timeout tests were initially written by Mozilla's Alex Vincent's. He granted
        permission to reuse them under PD/BSD license
        in https://bugzilla.mozilla.org/show_bug.cgi?id=525816#c86 - big thanks!
        I adapted them for W3C testharness.js and split them into groups with shorter test running time
        so that they can be used as WebKit layout tests.

        Tests: http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-aborted.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-abortedonmain.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-overridesexpires.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-simple.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-synconmain.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-twice.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-aborted.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-overridesexpires.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-simple.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-synconworker.html
               http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-worker-twice.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::notifyFinished): Forward information about timeout case.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFail): Distinguish timeout case when informing client.
        * loader/cache/CachedResource.h: Distinguishing timeout case for errors.
        (WebCore::CachedResource::errorOccurred):
        (WebCore::CachedResource::loadFailedOrCanceled):
        (WebCore::CachedResource::timedOut):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): Initializing m_timeout value to zero.
        (WebCore::XMLHttpRequest::setTimeout): Setter function, possibly raising JS exception.
        (WebCore):
        (WebCore::XMLHttpRequest::open): Open call may raise exception for synchronous requests when timeout value is set.
        (WebCore::XMLHttpRequest::createRequest): Assigning timeout value to ResourceRequest.
        (WebCore::XMLHttpRequest::didFail): Handling timeout case separately.
        (WebCore::XMLHttpRequest::didTimeout): Timeout case state transisition and event firing as spec'ed.
        * xml/XMLHttpRequest.h: New event listener, member and callback for handling timeout.
        (WebCore::XMLHttpRequest::timeout):
        (XMLHttpRequest):
        * xml/XMLHttpRequest.idl: New event listener and property added.
        * xml/XMLHttpRequestException.cpp:
        * xml/XMLHttpRequestException.h: Added an exception value for the timeout case.


2012-10-23  Christophe Dumez  <christophe.dumez@intel.com>

        Possible assertion hit in WebCore::HTMLSelectElement::updateListBoxSelection()
        https://bugs.webkit.org/show_bug.cgi?id=99967

        Reviewed by Tony Chang.

        Fix assertion hit in WebCore::HTMLSelectElement::updateListBoxSelection() when
        pressing the left mouse button outside a multiselect and then moving the cursor
        over the multiselect element while holding the button down.

        The issue is that the HTMLSelectElement handler for the mouse move event does
        not check if there is a selection before trying to extend the selection.

        Test: fast/dom/HTMLSelectElement/select-selectedIndex-noAnchorIndex-crash.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):

2012-10-23  Adam Barth  <abarth@webkit.org>

        [V8] ScriptWrappable should hold the wrapper handle directly (Dromaeo/dom-modify and dom-traverse get ~2.5% faster)
        https://bugs.webkit.org/show_bug.cgi?id=97974

        Reviewed by Eric Seidel.

        Previously, we stored a pointer to a handle to a wrapper in Node. That
        is an extra layer of indirection that slows down finding the wrapper
        for the node. A handle is just a pointer, so we might as we just store
        the handle in the Node directly. That speeds up dom-modify and
        dom-traverse by about 2.5%.

        This change also lets us get rid of the ChunkedTable we were using to
        store all the wrappers because they're now stored in the Nodes
        directly.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        * bindings/v8/IntrusiveDOMWrapperMap.h:
        (WebCore::IntrusiveDOMWrapperMap::IntrusiveDOMWrapperMap):
        (WebCore::IntrusiveDOMWrapperMap::get):
        (WebCore::IntrusiveDOMWrapperMap::set):
        (WebCore::IntrusiveDOMWrapperMap::contains):
        (WebCore::IntrusiveDOMWrapperMap::visit):
        (WebCore::IntrusiveDOMWrapperMap::removeIfPresent):
        (WebCore::IntrusiveDOMWrapperMap::clear):
        * bindings/v8/ScriptWrappable.h:
        (WebCore::ScriptWrappable::ScriptWrappable):
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::disposeWrapper):
        (WebCore::ScriptWrappable::reportMemoryUsage):
        (ScriptWrappable):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getCachedWrapper):

2012-10-23  Kentaro Hara  <haraken@chromium.org>

        [V8] Replace SetGlobalGCPrologueCallback() with AddGCPrologueCallback()
        https://bugs.webkit.org/show_bug.cgi?id=100140

        Reviewed by Adam Barth.

        SetGlobalGCPrologueCallback() and SetGlobalGCEpilogueCallback()
        are deprecated (See http://code.google.com/codesearch#OAMlx_jo-ck/src/v8/include/v8.h&exact_package=chromium&q=v8.h&type=cs&l=3149)
        Instead we should use AddGCPrologueCallback()
        and AddGCEpilogueCallback().

        No tests. No change in behavior.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::initializeV8IfNeeded):
        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::gcPrologue):
        (WebCore):
        (WebCore::V8GCController::minorGCPrologue):
        (WebCore::V8GCController::majorGCPrologue):
        (WebCore::V8GCController::gcEpilogue):
        (WebCore::V8GCController::minorGCEpilogue):
        (WebCore::V8GCController::majorGCEpilogue):
        * bindings/v8/V8GCController.h:
        (V8GCController):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initIsolate):

2012-10-23  Adam Barth  <abarth@webkit.org>

        [V8] Enumerate Nodes via the V8 heap rather than via a list in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=100033

        Reviewed by Eric Seidel.

        This patch changes how we enumerate nodes during garbage collection.
        After this patch, we use V8's list of open handles to enumerate node
        wrappers rather than using a separate list that we maintain in WebCore
        for this purpose. A future patch will remove the list in WebCore for a
        DOM performance gain.

        * bindings/js/ScriptProfiler.h:
        (WebCore):
        (WebCore::ScriptProfiler::visitNodeWrappers):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateToV8Converters):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::wrapSlow):
        * bindings/v8/IntrusiveDOMWrapperMap.h:
        (WebCore::IntrusiveDOMWrapperMap::set):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::visitNodeWrappers):
        * bindings/v8/ScriptProfiler.h:
        (WebCore):
        (ScriptProfiler):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::NodeWrapperVisitor::~NodeWrapperVisitor):
        (WebCore):
        (WebCore::visitAllDOMNodes):
        * bindings/v8/V8DOMMap.h:
        (WebCore):
        (NodeWrapperVisitor):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMNode):
        * bindings/v8/V8GCController.cpp:
        (WebCore::NodeVisitor::visitNodeWrapper):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::gcEpilogue):
        * inspector/BindingVisitors.h:
        (WebCore::WrappedNodeVisitor::~WrappedNodeVisitor):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore):

2012-10-22  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: paint rectangles are incorrectly shown in case subframes are present
        https://bugs.webkit.org/show_bug.cgi?id=99849

        Reviewed by Pavel Feldman.

        Move GraphicsContext and paint rectangle from willPaint() to didPaint(), so we don't have
        to store them as a state of InspectorPageAgent

        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::didPaintImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::didPaint):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didPaint):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        * inspector/TimelineRecordFactory.cpp:
        * inspector/TimelineRecordFactory.h:
        (TimelineRecordFactory):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):

2012-10-23  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: array grouping does not work for arrays with exactly 10000 elements.
        https://bugs.webkit.org/show_bug.cgi?id=100131

        Reviewed by Vsevolod Vlasov.

        Using ceil() - 1 instead of floor() in bucket size calculation.

        * inspector/front-end/ObjectPropertiesSection.js:

2012-10-23  Shinya Kawanaka  <shinyak@chromium.org>

        The order of resolving distribution in tree composition is wrong.
        https://bugs.webkit.org/show_bug.cgi?id=99552

        Reviewed by Dimitri Glazkov.

        According to the current ShadowDOM spec, we have to resolve <content> first, then resolve <shadow>.
        However, the order of resolution is now the mixed tree order of <content> and <shadow>.

        Test: fast/dom/shadow/content-reprojection-order.html

        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute): We should resolve <content> before <shadow>.
        Only the first active shadow insertion point can select the rest of contents.
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        * html/shadow/HTMLShadowElement.cpp:
        * html/shadow/HTMLShadowElement.h:
        (WebCore::isHTMLShadowElement):
        (WebCore):
        (WebCore::toHTMLShadowElement):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint): We don't need doesSelectFromHostChildren() anymore.

2012-10-23  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Move UISourceCode creation out of mappings to workspace.
        https://bugs.webkit.org/show_bug.cgi?id=100092

        Reviewed by Pavel Feldman.

        Moved uiSourceCode constructor calls out of mappings to workspace.

        * inspector/front-end/CompilerScriptMapping.js:
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):
        (WebInspector.NetworkUISourceCodeProvider.prototype._addUISourceCode):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._deleteOriginalUISourceCodeForScripts):
        (WebInspector.ResourceScriptMapping.prototype._deleteTemporaryUISourceCodeForScripts):
        (WebInspector.ResourceScriptMapping.prototype._bindUISourceCodeToScripts):
        (WebInspector.ResourceScriptMapping.prototype._createUISourceCode):
        (WebInspector.ResourceScriptMapping.prototype._getOrCreateTemporaryUISourceCode):
        (WebInspector.ResourceScriptMapping.prototype._getOrCreateOriginalUISourceCode):
        * inspector/front-end/SASSSourceMapping.js:
        (_bindUISourceCode):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype._createUISourceCodeForScript):
        * inspector/front-end/Workspace.js:
        (WebInspector.Project.prototype.addUISourceCode):
        (WebInspector.Project.prototype.removeUISourceCode):
        (WebInspector.Workspace.prototype.addTemporaryUISourceCode):
        (WebInspector.Workspace.prototype.removeTemporaryUISourceCode):

2012-10-23  Emil A Eklund  <eae@chromium.org>

        Remove unnecessary m_layoutDelta[XY]Saturated initialization
        https://bugs.webkit.org/show_bug.cgi?id=100018

        Reviewed by Julien Chaffraix.
        
        Remove unnecessary initialization from LayoutState constructor
        added in r132105.

        No new tests, no change in functionality.

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

2012-10-23  Zeno Albisser  <zeno@webkit.org>

        [Texmap] Fix drawTextureRectangleARB after r131485.
        https://bugs.webkit.org/show_bug.cgi?id=100133

        Consistently rename u_textureSize to u_samplerSize.

        Reviewed by Noam Rosenthal.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTextureRectangleARB):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::getShaderSpec):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (TextureMapperShaderProgram):

2012-10-23  Mike West  <mkwst@chromium.org>

        Web Inspector: 'data:' URLs should be properly trimmed for readability.
        https://bugs.webkit.org/show_bug.cgi?id=100083

        Reviewed by Pavel Feldman.

        We recently landed a patch to trim the middle out of long URLs in
        console messages in order to improve readability. That patch didn't
        effect 'data:' URLs, as they didn't match the regex in the linkifier.
        This patch ensures that 'data:' URLs are properly trimmed down to
        size.

        This problem came to light while resolving a different, smaller issue:
        'image/jpg' wasn't whitelisted as an image MIME type. That trivial fix
        is included in this patch.

        Test: http/tests/inspector/network/image-as-text-loading-data-url.html

        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager):
            Adds 'image/jpg' as a valid image type.
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.linkifyStringAsFragmentWithCustomLinkifier):
            Supports 'data:' URLs in the linkifier's regex.

2012-10-23  Mike West  <mkwst@chromium.org>

        Web Inspector: Floated anchor element sometimes overlaps following content.
        https://bugs.webkit.org/show_bug.cgi?id=100105

        Reviewed by Pavel Feldman.

        This patch ensures that each console message clears the
        potentially-overlapping floated anchor element.

        * inspector/front-end/inspector.css:
        (#console-prompt):
        (.console-message, .console-user-command):
            Clear the float, and flip the border from the bottom of the
            message to the top. Do the same for the prompt.
        (.console-message:first-child):
            Ensure that the first message doesn't have a top border.

2012-10-23  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Crash when adding a keyframes rule in the Styles pane
        https://bugs.webkit.org/show_bug.cgi?id=99826

        Reviewed by Pavel Feldman.

        The client-supplied selector text is first parsed to make sure it results in a valid style rule selector.

        Test: inspector/styles/add-new-rule-invalid-selector.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::createCSSParser):
        (WebCore):
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::checkStyleRuleSelector):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):

2012-10-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Add support for resolution media query
        https://bugs.webkit.org/show_bug.cgi?id=99077

        Reviewed by Antti Koivisto.

        Add support for 'resolution' media query feature.

        Background info:
        http://www.w3.org/blog/CSS/2012/06/14/unprefix-webkit-device-pixel-ratio

        Related spec links:
        http://www.w3.org/TR/css3-mediaqueries/#resolution (recommendation)
        http://www.w3.org/TR/css3-values/#resolution (candidate recommentation)

        Add infrastructure to make it testable.

        Test: fast/media/mq-resolution.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::detectNumberToken):
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::unitCategory):
        (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory):
        (WebCore::CSSPrimitiveValue::customCssText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        * css/CSSPrimitiveValue.h:

            Enable dpi, dpcm and dppx units when RESOLUTION_MEDIA_QUERY
            is enabled.

        * WebCore.exp.in:

            Export the WebCore::Settings setting.

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isDotsPerInch):
        (WebCore::CSSPrimitiveValue::isDotsPerPixel):
        (WebCore::CSSPrimitiveValue::isDotsPerCentimeter):
        (CSSPrimitiveValue):

            Add function for checking the recently added density types.

        * css/MediaFeatureNames.h:
        (MediaFeatureNames):

            Add support for resolution, min-resolution and max-resolution.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::compareResolution): Add methods for comparing resolutions.
        (WebCore):
        (WebCore::resolutionMediaFeatureEval):
        (WebCore::min_resolutionMediaFeatureEval):
        (WebCore::max_resolutionMediaFeatureEval):

            Implement the resolution method evaluation.

        * css/MediaQueryExp.cpp:
        (WebCore::featureWithValidPositiveDensity):
        (WebCore):
        (WebCore::featureWithoutValue):
        (WebCore::MediaQueryExp::MediaQueryExp):

            Hook up resolution with the right pre-checks.

       * page/Screen.cpp:
        (WebCore::Screen::horizontalDPI):
        (WebCore::Screen::verticalDPI):

            Check whether an override exists, and if so, uses it.
            If not calculate the value given the device scale factor.

        * page/Settings.cpp:
        (WebCore::Settings::setResolutionOverride):
        (WebCore):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::resolutionOverride):

            Add a resolution override to settings.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setResolutionOverride):
        (WebCore):
        * testing/InternalSettings.h:
        (Backup):
        (InternalSettings):
        * testing/InternalSettings.idl:

            Add a new setResolutionOverride method to internals.settings.

2012-10-23  Filip Spacek  <fspacek@rim.com>

        [BlackBerry] Improve the use of stencil buffer during compositing
        https://bugs.webkit.org/show_bug.cgi?id=100020

        We always want to scissor so remove the define.
        Only turn stenciling on if needed.

        Reviewed by Rob Buis.

        Reviewed internally by Arvid Nilsson.

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::setViewport):
        (WebCore::LayerRenderer::compositeLayers):
        (WebCore::LayerRenderer::drawLayersOnSurfaces):
        (WebCore::LayerRenderer::compositeLayersRecursive):
        (WebCore::LayerRenderer::updateScissorIfNeeded):

2012-10-23  'Pavel Feldman'  <pfeldman@chromium.org>

        Not reviewed: kick out non-chromium files from WebCore.gypi.

        * WebCore.gypi:

2012-10-23  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL][WK2] ecore_x should be initialised in WebProcess to avoid re-initialization by PlatformScreenEfl utilities and systemBeep() function
        https://bugs.webkit.org/show_bug.cgi?id=100110

        Reviewed by Kenneth Rohde Christiansen.

        Removed initialization of ecore_x, since it is initialized when process starts.

        test: fast/media/*

        * platform/efl/PlatformScreenEfl.cpp:
        (WebCore::screenDepth):
        (WebCore::screenRect):
        * platform/efl/SoundEfl.cpp:
        (WebCore::systemBeep):

2012-10-23  Adam Klein  <adamk@chromium.org>

        Always parse pasted fragments as HTML even on XHTML pages
        https://bugs.webkit.org/show_bug.cgi?id=99880

        Reviewed by Ojan Vafai.

        When pasting HTML into a page, using the XML parser is unlikely
        to work correctly, as the contents of the clipboard are unlikely
        to be properly-formed XHTML. Thus, for the pasting case, it's always
        better to use HTML parsing, which will properly parse either HTML
        (which is what's usually in the clipboard) or XHTML (which is
        sometimes there as well).

        The Mac port previously worked around this problem by falling back to plain text
        when parsing failed, but switching to HTML seems like a clear improvement.

        This also fixes a crash in Chromium (see http://webkit.org/b/99607
        and http://crbug.com/136218); it erroneously assumed that createFragmentFromMarkup()
        would never return null. This patch makes that true.

        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup): Don't delegate to createContextualFragment:
        we already know our context element is safe (i.e., it's <body>),
        and we want to force HTML (not XML) parsing.

2012-10-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] REGRESSION (r130851): fast/text/word-space-with-kerning.html fails
        https://bugs.webkit.org/show_bug.cgi?id=98876

        Reviewed by Simon Hausmann.

        Do not add word-spacing for leading space. This matches what simple path font-width does.

        Tested by existing tests.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

2012-10-23  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Incorrect resolution of relative URLs containing a scheme in query parameters
        https://bugs.webkit.org/show_bug.cgi?id=100084

        Reviewed by Vsevolod Vlasov.

        Use the RFC 3986 grammar for the URL scheme.

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

2012-10-23  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Elaborate source panel sidebar context menus.
        https://bugs.webkit.org/show_bug.cgi?id=99980

        Reviewed by Vsevolod Vlasov.

        - Watches: add "Add watch expression" item to items and empty element
        - Watches: hide "Remove watch expression" from editing prompt context menu
        - Watches: add titles to header buttons
        - XHR Breakpoints: add "Add Breakpoint" item to items and empty element
        - XHR Breakpoints: add "Remove all breakpoints" item to items (when >1)
        - XHR Breakpoints: add title to header button
        - JS Breakpoints: hide "Remove/(De)Activate breakpoints" when only 1 item present
        - JS Breakpoints: add "(De)Activate breakpoints" to empty element context menu

        * English.lproj/localizedStrings.js: Added corresponding strings.
        * inspector/front-end/BreakpointsSidebarPane.js: Adjusted context menu.
        (WebInspector.XHRBreakpointsSidebarPane): Ditto.
        * inspector/front-end/ObjectPropertiesSection.js: Added "isEditing()"
        * inspector/front-end/WatchExpressionsSidebarPane.js: Adjusted context menu.

2012-10-23  Kent Tamura  <tkent@chromium.org>

        Update binding test results for r132194
        https://bugs.webkit.org/show_bug.cgi?id=100097

        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::installPerContextProperties):

2012-10-23  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Sass can only resolve same folder paths
        https://bugs.webkit.org/show_bug.cgi?id=99259

        Reviewed by Vsevolod Vlasov.

        The actual reason is that the rule source location linkifier tries to linkify a resource (*.scss), which does not exist,
        and falls back to just stripping the main page URL prefix from the rule location URL. This change introduces LiveLocations
        for CSSRule locations and makes sure they are linkified using uiSourceCode's parsedURL.displayName.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel): Introduced LiveLocation management for CSSRules.
        (WebInspector.CSSStyleModel.prototype.setSourceMapping):
        (WebInspector.CSSStyleModel.prototype._updateLocations):
        (WebInspector.CSSStyleModel.prototype.createLiveLocation):
        (WebInspector.CSSStyleModel.prototype.updateLocations):
        (WebInspector.CSSStyleModel.LiveLocation): A LiveLocation for the CSS domain.
        (WebInspector.CSSStyleModel.LiveLocation.prototype.uiLocation):
        (WebInspector.CSSStyleModel.LiveLocation.prototype.dispose):
        * inspector/front-end/Linkifier.js:
        (WebInspector.Linkifier.prototype.linkifyCSSRuleLocation): CSSRule LiveLocation-based link builder.
        (WebInspector.Linkifier.DefaultFormatter.prototype.formatLiveAnchor): Add a title for anchors.
        (WebInspector.Linkifier.DefaultCSSFormatter): Formatter for CSS location links.
        (WebInspector.Linkifier.DefaultCSSFormatter.prototype.formatLiveAnchor):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.displayNameForURL): Use parsedURL.displayName if uiSourceCode is present for the specified URL.
        * inspector/front-end/SASSSourceMapping.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane):
        (WebInspector.StylesSidebarPane.prototype._innerRebuildUpdate):
        * inspector/front-end/inspector.html:

2012-10-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132149.
        http://trac.webkit.org/changeset/132149
        https://bugs.webkit.org/show_bug.cgi?id=100098

        Breaks inspector profiler tests in debug mode. (Requested by
        pfeldman1 on #webkit).

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::styleDidChange):
        (WebCore::RenderTableCol::updateFromElement):
        (WebCore::RenderTableCol::computePreferredLogicalWidths):
        * rendering/RenderTableCol.h:
        (RenderTableCol):

2012-10-23  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial Qt build fix: Fix build without USE_3D_GRAPHICS

        Move the #if USE(GRAPHICS_SURFACE) up to protect the inclusion of
        GraphicsContext3D.h to be done only if we use the surface.

        * platform/graphics/surfaces/GraphicsSurface.h:

2012-10-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132033.
        http://trac.webkit.org/changeset/132033
        https://bugs.webkit.org/show_bug.cgi?id=100097

        Broke calendar picker (Requested by tkent on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):

2012-10-23  Andras Becsi  <andras.becsi@digia.com>

        Remove devicePixelRatio from ViewportAttributes
        https://bugs.webkit.org/show_bug.cgi?id=99845

        Reviewed by Adam Barth.

        Since r121555 the devicePixelRatio is not calculated any more
        and the scale factor is stored in Page::m_deviceScaleFactor,
        thus it can be removed from ViewportAttributes to reduce
        redundancy and unnecessary client code.
        Use a new parameter in viewport calculation functions using
        the visible viewport size (instead of passing the adjusted
        viewport size) so that after this change clients do not end
        up using the unadjusted viewport size for calculations.

        No behavioural change, no new tests needed.

        * WebCore.exp.in:
        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        (WebCore::computeMinimumScaleFactorForContentContained):
        Add the devicePixelRatio as a parameter.
        (WebCore::restrictMinimumScaleFactorToViewportSize): Ditto.
        * dom/ViewportArguments.h:
        (ViewportAttributes):
        (WebCore):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::configurationForViewport):

2012-10-23  Kent Tamura  <tkent@chromium.org>

        Support full month names in DateTimeEditElement, and use them in input[type=month] by default
        https://bugs.webkit.org/show_bug.cgi?id=100060

        Reviewed by Kentaro Hara.

        According to https://plus.google.com/104770450049736549185/posts/4zsoeHoa7SM
        no one wants to show abbreviated month names for input[type=month].
        This change add support for full month names in DateTimeEditELement, and
        LocaleICU and LocaleMac retun month formats with full month names. Note
        that LocaleWin::monthFormat returns formats for full month names.

        No new tests. Covered by fast/forms/month-multiple-fields/month-multiple-fields-appearance-*.html

        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField):
        If count is 4, use Localizer::monthLabels or standAloneMonthLabels.
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::monthFormat):
        Returns a format for full month names.
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::monthFormat): Ditto.

2012-10-23  Mike West  <mkwst@chromium.org>

        Viewport errors should be slightly friendlier with regard to ';'.
        https://bugs.webkit.org/show_bug.cgi?id=100003

        Reviewed by Adam Barth.

        This patch scans viewport values that cause errors for ';'. If found,
        a quick message is appended to the error, noting that semicolons are
        not valid separators in viewport contents, and that commas would be
        the proper substitute.

        No functional changes, just a better error message.

        * dom/ViewportArguments.cpp:
        (WebCore::reportViewportWarning):

2012-10-23  Timothy Hatcher  <timothy@apple.com>

        Docking/undocking the Web Inspector does not work correctly in Safari.

        The "docked" and "bottom" strings need quoted instead of being passed as identifiers.

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

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow): Put quotes around the %s.

2012-10-23  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Compilation warning in GraphicsContext3DPrivate.cpp when AC is enabled
        https://bugs.webkit.org/show_bug.cgi?id=99723

        Reviewed by Kenneth Rohde Christiansen.

        Fix compilation warning in GraphicsContext3DPrivate.cpp when AC is
        enabled.

        No new tests, no change in behavior.

        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::createSurface):

2012-10-23  Dan Carney  <dcarney@google.com>

        When blocking localStorage, Firefox throws a security exception on access, and maybe so should we
        https://bugs.webkit.org/show_bug.cgi?id=63257

        Reviewed by Jochen Eisinger.

        Throw security exception when local storage is accessed
        under certain circumstances to match firefox.

        No new tests. Existing tests modified.

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::canGetItemsForName):
        (WebCore::JSStorage::nameGetter):
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::getOwnPropertyNames):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore):
        (WebCore::setDOMException):
        (WebCore::V8Storage::namedPropertyEnumerator):
        (WebCore::storageGetter):
        (WebCore::V8Storage::namedPropertyQuery):
        (WebCore::storageDeleter):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        * storage/Storage.cpp:
        * storage/Storage.h:
        (WebCore):
        (WebCore::Storage::length):
        (WebCore::Storage::key):
        (WebCore::Storage::getItem):
        (WebCore::Storage::setItem):
        (WebCore::Storage::removeItem):
        (WebCore::Storage::clear):
        (WebCore::Storage::contains):
        * storage/Storage.idl:
        * storage/StorageArea.h:
        (StorageArea):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::canAccessStorage): Checks whether access to storage is a security violation.
        (WebCore):
        (WebCore::StorageAreaImpl::disabledByPrivateBrowsingInFrame):
        (WebCore::StorageAreaImpl::length):
        (WebCore::StorageAreaImpl::key):
        (WebCore::StorageAreaImpl::getItem):
        (WebCore::StorageAreaImpl::setItem):
        (WebCore::StorageAreaImpl::removeItem):
        (WebCore::StorageAreaImpl::clear):
        (WebCore::StorageAreaImpl::contains):
        * storage/StorageAreaImpl.h:
        (StorageAreaImpl):

2012-10-22  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Remove custom binding code for IDBCursor.value
        https://bugs.webkit.org/show_bug.cgi?id=100034

        Reviewed by Kentaro Hara.

        Now that we're using ScriptValue instead of SerializedScriptValue we can just expose
        IDBCursor.value as an |any| (IDL) or |ScriptValue| (C++) to maintain the specified
        semantics that the object identity is retained across accesses.

        Test: storage/indexeddb/cursor-value.html

        * Modules/indexeddb/IDBCursor.cpp: Remove "dirty" tracking.
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::value):
        (WebCore::IDBCursor::setValueReady):
        * Modules/indexeddb/IDBCursor.h: IDBAny -> ScriptValue
        (IDBCursor):
        * Modules/indexeddb/IDBCursorWithValue.idl: IDBAny -> any
        * Modules/indexeddb/IDBObjectStore.cpp: No need to route through IDBAny to get ScriptValue.
        (WebCore):
        * UseV8.cmake: Remove references to IDBCustomBindings.cpp
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * bindings/v8/IDBCustomBindings.cpp: Removed.

2012-10-22  Dan Bernstein  <mitz@apple.com>

        Font’s fast code path is used for partial runs with kerning and ligatures, but shouldn’t be
        https://bugs.webkit.org/show_bug.cgi?id=100068

        Reviewed by Sam Weinig.

        As described in <http://webkit.org/b/100050>, the fast code path doesn’t handle partial runs
        correctly when kerning or ligatures are enabled. Since the partial-run case is uncommon,
        for now just use the complex code path in this case.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText): Changed to use the complex path for partial runs if there are any
        typesetting features.
        (WebCore::Font::drawEmphasisMarks): Ditto.
        (WebCore::Font::selectionRectForText): Ditto.
        (WebCore::Font::offsetForPosition): Changed to use the complex path if there are any
        typesetting features.

2012-10-22  Peter Wang  <peter.wang@torchmobile.com.cn>

        [BlackBerry] Missing some cookies in HTTP response header when set several cookies in one "Set-Cookie" header.
        https://bugs.webkit.org/show_bug.cgi?id=99950

        Reviewed by George Staikos.

        In "NetworkJob::handleNotifyHeaderReceived", if there are several "Set-Cookie" headers, 
        we should combine the following ones with the first.

        No new test case.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::handleNotifyHeaderReceived):

2012-10-22  MORITA Hajime  <morrita@google.com>

        Assertion failed at WebCore::toInsertionPoint / WebCore::ContentDistributor::distribute
        https://bugs.webkit.org/show_bug.cgi?id=100038

        Reviewed by Kent Tamura.

        isHTMLContentElement() assumes that the content element always has
        a tag name "content" but it doesn't when Shadow DOM feature is
        disabled. This fix let the function see the correct tag name.

        Test: fast/dom/shadow/insertion-points-with-shadow-disabled.html

        * html/shadow/HTMLContentElement.cpp:
        (WebCore::HTMLContentElement::contentTagName):
        * html/shadow/HTMLContentElement.h:
        (HTMLContentElement):
        (WebCore::isHTMLContentElement):

2012-10-22  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Fallback content should also be reprojection.
        https://bugs.webkit.org/show_bug.cgi?id=99750

        Reviewed by Dimitri Glazkov.

        Fallback content of InsertionPoint should be reprojected. The existing assumption that
        only the direct child of host element can be distributed to InsertionPoint does not hold anymore.
        So, if the parent of an element is InsertionPoint which should show fallback element, we have to
        check the grand parent of the element instead of the element.

        Tests: fast/dom/shadow/content-reprojection-fallback-reprojection.html
               fast/dom/shadow/content-reprojection-fallback.html

        * css/StyleResolver.cpp:
        (WebCore::shouldResetStyleInheritance): Checks the grandparent of the element if the parent is
        an InsertionPoint which uses fallback content.
        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::shadowOfParentForDistribution):
        (WebCore):
        (WebCore::resolveReprojection):
        (WebCore::ComposedShadowTreeWalker::traverseParent):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::shouldUseFallbackElements): True if the InsertionPoint should use fallback content.
        (WebCore):
        * html/shadow/InsertionPoint.h:
        (WebCore::parentElementForDistribution): Returns the grandparent element if the parent is InsertionPoint which uses
        fallback content. Returns parent element otherwise.
        (WebCore):

2012-10-22  Keishi Hattori  <keishi@webkit.org>

        Label position is wrong in the suggestion picker when all the suggestions have labels
        https://bugs.webkit.org/show_bug.cgi?id=99965

        Reviewed by Kent Tamura.

        Somehow the scrollbar was appearing and so the label element was being wrapped to the next line.

        No new tests. Can't reproduce in layout test.

        * Resources/pagepopups/suggestionPicker.css:
        (.suggestion-list):
        * Resources/pagepopups/suggestionPicker.js:
        (SuggestionPicker.prototype._fixWindowSize): Explicitly show the scroll bar.

2012-10-22  MORITA Hajime  <morrita@google.com>

        [Chromium] Needs to track ShadowRoot usage
        https://bugs.webkit.org/show_bug.cgi?id=99955

        Reviewed by Dimitri Glazkov.

        Added an UMA instrumentation.

        * dom/ShadowRoot.cpp:
        (WebCore::determineUsageType):
        (WebCore):
        (WebCore::ShadowRoot::create):

2012-10-22  Kent Tamura  <tkent@chromium.org>

        Introduce Localizer::standAloneMonthLabels
        https://bugs.webkit.org/show_bug.cgi?id=99963

        Reviewed by Kentaro Hara.

        We realized full month names and full stand-alone month names were
        necessary for input[type=month] UI. We change the compile-flag for
        Localizer::monthLabels from "ENABLE(CALENDAR_PICKER)" to
        "ENABLE(CALENDAR_PICKER) || ENABLE(INPUT_MULTIPLE_FIELDS_UI)," and
        introduce Localizer::standAloneMonthLabels.

        Tests: Add some test cases to Source/WebKit/chromium/LocaleMacTest.cpp
        and LocalizedDateICUTest.cpp.

        * platform/text/Localizer.h:
        (Localizer):
        - Add pure virtual standAloneMonthLabels.
        - Change the condition for monthLabels.

        * platform/text/LocaleNone.cpp:
        (LocaleNone): Declare monthLabels, standAloneMonthLabels, and m_monthLabels.
        (WebCore::LocaleNone::monthLabels):
        Added. It always returns English month names.
        (WebCore::LocaleNone::standAloneMonthLabels):
        Added. Just calls monthLabels.

        * platform/text/LocaleWin.h:
        (LocaleWin):
        Declare standAloneMonthLabels, and change the condition for monthLabels.
        * platform/text/LocaleWin.cpp:
        (WebCore): Change the condition for monthLabels.
        (WebCore::LocaleWin::standAloneMonthLabels):
        Added. Just calls monthLabels.

        * platform/text/mac/LocaleMac.h:
        (LocaleMac):
        - Add standAloneMonthLabels and m_standAloneMonthLabels
        - Change the condition for monthLabels and m_monthLabels.
        * platform/text/mac/LocaleMac.mm:
        (WebCore): Change the condition for monthLabels.
        (WebCore::LocaleMac::standAloneMonthLabels):
        Added. Get the information with NSDateFormatter::standaloneMonthSymbols.

        * platform/text/LocaleICU.h:
        (LocaleICU):
        - Add standAloneMonthLabels and m_standAloneMonthLabels
        - Change the condition for monthLabels and m_monthLabels.
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::initializeCalendar):
        Remove m_monthLabels initialization in order to avoid dependecy from monthLabels.
        (WebCore):
        (WebCore::createFallbackMonthLabels): Change the compile condition.
        (WebCore::LocaleICU::monthLabels):
        - Change the compile condition.
        - Don't depend on initializeCalendar to make the code for
        ENABLE(INPUT_MULTIPLE_FIELDS_UI) && !ENABLE(CALENDAR_PICKER) minimal.
        (WebCore::LocaleICU::standAloneMonthLabels):
        Added. The code is similar to shortStandAloneMonthLabels.

2012-10-22  Shinya Kawanaka  <shinyak@chromium.org>

        Refactoring around ContainerNode::attachChildren
        https://bugs.webkit.org/show_bug.cgi?id=99968

        Reviewed by Hajime Morita.

        Since ContainerNode::attach() is now equivalent to ContainerNode::attachChildren() + Node::attach(), we should call
        ContainerNode::attach() instead of calling them.

        No new tests, no change in behavior.

        * dom/ContainerNode.h:
        (ContainerNode):
        * dom/Element.cpp:
        (WebCore::Element::attach):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::attach):

2012-10-22  Michael Saboff  <msaboff@apple.com>

        HTML Parser should produce 8 bit strings for doctype, comment and tagName tokens
        https://bugs.webkit.org/show_bug.cgi?id=99889

        Reviewed by Geoffrey Garen.

        Added 8 bit check for accumulating all token data in MarkupTokenBase.  Added code to convert
        "name" token data directly to a string (8 or 16 as appropriate).  Changed to accumulate
        m_bufferedEndTagName as LChar's.

        No new tests, covered by existing tests.

        * html/parser/HTMLToken.h:
        (HTMLToken):
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):
        (WebCore::HTMLTokenizer::addToPossibleEndTag):
        (WebCore::HTMLTokenizer::isAppropriateEndTag):
        * html/parser/HTMLTokenizer.h:
        (HTMLTokenizer):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeLeading):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::MarkupTokenBase::beginStartTag):
        (WebCore::MarkupTokenBase::beginEndTag):
        (MarkupTokenBase):
        (WebCore::MarkupTokenBase::beginDOCTYPE):
        (WebCore::MarkupTokenBase::appendToComment):
        (WebCore::MarkupTokenBase::appendToName):
        (WebCore::MarkupTokenBase::nameString):
        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):

2012-10-22  Tony Chang  <tony@chromium.org>

        margin-top/bottom has no effect for child nodes of flex items
        https://bugs.webkit.org/show_bug.cgi?id=99923

        Reviewed by Ojan Vafai.

        Flexitems, like table cells, shouldn't collapse margins.

        Test: css3/flexbox/flexitem-no-margin-collapsing.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo): Check to see if the parent is a flexible box.
        We should always have a parent if we make it this far in the check.

2012-10-22  Marja Hölttä  <marja@chromium.org>

        Refactor CachedResourceLoader: add CachedResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=99736

        Reviewed by Adam Barth.

        For fixing bugs 84883 and 92761,
        CachedResourceLoader::requestResource should take as parameter
        information about who initiated the request. But the parameter
        list was already long. This gathers all the parameters into a
        separate class, CachedResourceRequest. The next step is to add
        information about who initiated the request into
        CachedResourceRequest.

        No new tests because no changes in functionality, just moving code
        around.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cachedImageSet):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * css/WebKitCSSSVGDocumentValue.cpp:
        (WebCore::WebKitCSSSVGDocumentValue::load):
        * css/WebKitCSSShaderValue.cpp:
        (WebCore::WebKitCSSShaderValue::cachedShader):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestShader):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::requestPreload):
        (WebCore::CachedResourceLoader::defaultCachedResourceOptions):
        (WebCore):
        * loader/cache/CachedResourceLoader.h:
        (WebCore):
        (CachedResourceLoader):
        * loader/cache/CachedResourceRequest.cpp: Added.
        (WebCore):
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        * loader/cache/CachedResourceRequest.h: Added.
        (WebCore):
        (CachedResourceRequest):
        (WebCore::CachedResourceRequest::mutableResourceRequest):
        (WebCore::CachedResourceRequest::resourceRequest):
        (WebCore::CachedResourceRequest::charset):
        (WebCore::CachedResourceRequest::setCharset):
        (WebCore::CachedResourceRequest::options):
        (WebCore::CachedResourceRequest::priority):
        (WebCore::CachedResourceRequest::forPreload):
        (WebCore::CachedResourceRequest::setForPreload):
        (WebCore::CachedResourceRequest::defer):
        (WebCore::CachedResourceRequest::setDefer):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):

2012-10-22  Adam Barth  <abarth@webkit.org>

        [V8] ASSERT that removeAllDOMObjects() is called only on worker threads
        https://bugs.webkit.org/show_bug.cgi?id=100046

        Reviewed by Eric Seidel.

        This function is called only on worker threads. We should ASSERT that
        fact and remove the dead code that tries to handle the main thread
        case.

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjects):

2012-10-22  Adam Barth  <abarth@webkit.org>

        [V8] We should call the faster v8::Integer::New APIs
        https://bugs.webkit.org/show_bug.cgi?id=100016

        Reviewed by Eric Seidel.

        In working to remove the integer cache, I added some faster APIs for
        creating v8::Integers. These APIs are faster than the old APIs, but not
        quite fast enough to replace the integer cache. We should still use
        them when we miss the integer cache.

        I've also included a small refactoring to V8PerIsolateData to make it
        clearer when we're calling v8::Isolate::GetCurrent().

        * bindings/v8/DOMData.cpp:
        (WebCore::DOMData::getCurrentStore):
        * bindings/v8/V8Binding.h:
        (WebCore::v8ExternalString):
        (WebCore::v8Integer):
        (WebCore::v8UnsignedInteger):
        * bindings/v8/V8PerIsolateData.h:
        (WebCore::V8PerIsolateData::current):
        (WebCore::V8PerIsolateData::from):
        * bindings/v8/V8ValueCache.cpp:
        (WebCore::StringCache::v8ExternalStringSlow):
        (WebCore::IntegerCache::createSmallIntegers):
        * bindings/v8/V8ValueCache.h:
        (WebCore::IntegerCache::v8Integer):
        (WebCore::IntegerCache::v8UnsignedInteger):
        (IntegerCache):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):

2012-10-22  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderTableCol::computePreferredLogicalWidths and RenderTableCol::layout should never be called
        https://bugs.webkit.org/show_bug.cgi?id=99861

        Reviewed by Ojan Vafai.

        RenderTableCol's computePreferredLogicalWidths and layout's only purpose were to clear the preferred logical
        widths dirty / layout flag so that we would properly propagate the information to our containing table. This
        led to clunky code where the table layout code had to forcefully call RenderTableCol::computePreferredLogicalWidths
        or else we would ignore the next layout hint on the <col> or <colgroup>.

        Test: fast/table/col-span-change-relayout.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        Simplified the code now that we only need to iterate over the sections.

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        Removed call to computePreferredLogicalWidths.

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::styleDidChange):
        (WebCore::RenderTableCol::updateFromElement):
        Forward a layout hint to the table so that we properly recompute the cell's logical withs.

        (WebCore::RenderTableCol::computePreferredLogicalWidths):
        (WebCore::RenderTableCol::layout):
        Change our implementations of those 2 methods to be no-ops, while enforcing that they are
        never called.

        (WebCore::RenderTableCol::propagateLayoutCueToTable):
        New helper function that forward any layout cue to the containing table, this works around
        us not clearing the flags which confuses RenderObject markContainingBlocksForLayout and
        invalidateContainerPreferredLogicalWidths.

        * rendering/RenderTableCol.h:
        Made the function that we are not expected to be called private.

2012-10-22  Pan Deng  <pan.deng@intel.com>

        [User Timing]Integrate with Perforamnce Timeline.
        https://bugs.webkit.org/show_bug.cgi?id=91072.

        Reviewed by Tony Gentilcore.

        This patch expose user timing entries via performance timeline interface. JavaScriptCore custom binding will be another patch

        No new tests, user timing test cases have been landed.

        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        (WebCore::Performance::webkitGetEntries):
        (WebCore::Performance::webkitGetEntriesByType):
        (WebCore::Performance::webkitGetEntriesByName):
        * page/PerformanceEntry.h:
        (WebCore::PerformanceEntry::startTimeCompareLessThan):
        (PerformanceEntry):
        * page/PerformanceEntryList.cpp:
        (WebCore::PerformanceEntryList::sort):
        (WebCore):
        * page/PerformanceEntryList.h:
        (PerformanceEntryList):
        * page/PerformanceUserTiming.cpp:
        (WebCore::convertToEntrySequence):
        (WebCore):
        (WebCore::getEntrySequenceByName):
        (WebCore::UserTiming::getMarks):
        (WebCore::UserTiming::getMeasures):
        * page/PerformanceUserTiming.h:
        (UserTiming):

2012-10-22  Pan Deng  <pan.deng@intel.com>

        Modify obsolete code in User Timing
        https://bugs.webkit.org/show_bug.cgi?id=99851

        Reviewed by Tony Gentilcore.

        Modify user timing implementation as PlatformString.h, prefix of webkitNow is removed, etc.

        No new tests.

        * page/PerformanceUserTiming.cpp:
        (WebCore::insertPerformanceEntry):
        (WebCore::UserTiming::mark):
        (WebCore::UserTiming::measure):
        * page/PerformanceUserTiming.h:

2012-10-22  Mark Lam  <mark.lam@apple.com>

        Change stack recursion checks to be based on stack availability.
        https://bugs.webkit.org/show_bug.cgi?id=99872.

        Reviewed by Filip Pizlo and Geoffrey Garen.

        Removed the use of ThreadStackType. Enabled the reserved JSStack space
        for error processing before doing work in reportException().

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonJSGlobalData):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):

2012-10-22  Andreas Kling  <kling@webkit.org>

        REGRESSION(r131104): Heap-use-after-free in WebCore::Element::attributeChanged
        <http://webkit.org/b/99937>

        Reviewed by Anders Carlsson.

        Setting the "type" attribute on an HTMLInputElement that has no "value" attribute set will cause the
        input type changing mechanism to write a value attribute onto the element. This happens in
        HTMLInputElement::updateType(), below parseAttribute().

        It's done via Element::setAttribute(), so we end up re-entering Element::setAttributeInternal()
        where the 'existingAttribute' pointer may now be invalid if adding the "value" attribute caused
        a reallocation in the ElementAttributeData's underlying Vector<Attribute>.

        To make it harder to introduce this kind of bug in the future, I changed almost all functions that take
        a "const Attribute&" to take a QualifiedName/AtomicString couple instead (the idea being that the 
        fewer references into the attribute store we have, the better.)

        Test: fast/html/input-type-change-crash.html

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::addAttributeInternal):
        (WebCore::Element::didAddAttribute):
        (WebCore::Element::didModifyAttribute):
        (WebCore::Element::didRemoveAttribute):
        * dom/Element.h:
        (Element):
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::cloneDataFrom):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):
        * dom/StyledElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):
        * svg/SVGElement.h:
        (SVGElement):

2012-10-22  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Bounds check for IDBCursor.advance() incorrect
        https://bugs.webkit.org/show_bug.cgi?id=100014

        Reviewed by Tony Chang.

        Fix introduced by trac.webkit.org/changeset/131658 restricted cursor.advance()'s argument
        as [EnforceRange] unsigned long long, but it's typed as [EnforceRange] unsigned long; the
        useless comparison was caught by a clang check.

        In lieu of webkit.org/b/96798 make it long long and correct the range check.

        Test: storage/indexeddb/cursor-advance.html

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::advance):
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBCursor.idl:

2012-10-22  Tony Chang  <tony@chromium.org>

        WebKit does not support 'flex-wrap: nowrap'
        https://bugs.webkit.org/show_bug.cgi?id=99924

        Reviewed by Ojan Vafai.

        The spec changed back from using none to nowrap for the single-line
        flexbox case.
        http://dev.w3.org/csswg/css3-flexbox/#flex-wrap-property

        No new tests, covered by css3/flexbox/css-properties.html and others.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFlexWrap):
        * css/CSSValueKeywords.in:
        * rendering/RenderBox.cpp:
        (WebCore::isStretchingColumnFlexItem):
        (WebCore::RenderBox::sizesLogicalWidthToFitContent):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::isMultiline):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2012-10-22  Mike West  <mkwst@chromium.org>

        'image/pjpeg' should be treated as an image by Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=100001

        Reviewed by Pavel Feldman.

        It's not exactly a "real" MIME type, but it's in use.

        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager):
            Adding 'image/pjpeg' as an image MIME type.

2012-10-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132119.
        http://trac.webkit.org/changeset/132119
        https://bugs.webkit.org/show_bug.cgi?id=100019

        Fails its own test on Mac platforms. (Requested by leviw on
        #webkit).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::sendContextMenuEventForGesture):
        * page/EventHandler.h:
        (EventHandler):

2012-10-22  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Points on the bottom and right edges of an exclusion shape should be classified as "outside"
        https://bugs.webkit.org/show_bug.cgi?id=98967

        Reviewed by Dirk Schulze.

        Changed the way lines are represented in the ExclusionShapeInsideInfo and ExclusionShape classes
        so that they're consistent with the rendering code that depends on them.  Lines are now defined
        by logicalTop, logicalHeight, instead of logicalTop,logicalBottom.  This a clean-up, not a change
        in functionality. It's already covered by the existing fast/exclusions LayoutTests.

        Test: fast/exclusions/shape-inside/shape-inside-bottom-edge.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::getExcludedIntervals):
        (WebCore::ExclusionPolygon::getIncludedIntervals):
        * rendering/ExclusionPolygon.h:
        * rendering/ExclusionRectangle.cpp:
        (WebCore::ExclusionRectangle::getExcludedIntervals):
        (WebCore::ExclusionRectangle::getIncludedIntervals):
        * rendering/ExclusionRectangle.h:
        * rendering/ExclusionShape.h:
        (LineSegment): Moved the struct fields below the constructor per webkit style.
        (ExclusionShape):
        (WebCore::ExclusionShape::minYForLogicalLine):
        (WebCore::ExclusionShape::maxYForLogicalLine):
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::computeSegmentsForLine):
        * rendering/ExclusionShapeInsideInfo.h:
        (ExclusionShapeInsideInfo):
        (WebCore::ExclusionShapeInsideInfo::lineOverlapsShapeBounds): Changed the test to not include
            lines whose logicalTop is equal to the shape's top+height.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):

2012-10-22  Chris Rogers  <crogers@google.com>

        Update some AudioContext create() method names to latest Web Audio spec
        https://bugs.webkit.org/show_bug.cgi?id=99888

        Reviewed by Adam Barth.

        The following AudioContext method names are being changed, with legacy support for the old names:
        createGainNode -> createGain
        createDelayNode -> createDelay
        createJavaScriptNode -> createScriptProcessor

        For details:
        https://www.w3.org/Bugs/Public/show_bug.cgi?id=18332

        Tests changed: webaudio/delaynode.html, webaudio/gain.html, webaudio/javascriptaudionode.html
        to test coverage of the new names.

        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createScriptProcessor):
        (WebCore::AudioContext::createGain):
        (WebCore::AudioContext::createDelay):
        * Modules/webaudio/AudioContext.h:
        (AudioContext):
        * Modules/webaudio/AudioContext.idl:
        * page/FeatureObserver.h:

2012-10-22  Varun Jain  <varunjain@chromium.org>

        Context menu generated from touch gestures on textareas has
        context of the cursor position instead of the position where the event occurs.
        https://bugs.webkit.org/show_bug.cgi?id=99520

        Reviewed by Kenneth Rohde Christiansen.

        Send a synthetic mouse down event for context menu-summoning-gesture events so
        that textareas can correctly set cursors before receiving the context menu event.

        Test: fast/events/touch/gesture/right-click-gestures-set-cursor-at-correct-position.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureTwoFingerTap):
        (WebCore):
        (WebCore::EventHandler::sendContextMenuEventForGesture):
        * page/EventHandler.h:
        (EventHandler):

2012-10-22  Zeno Albisser  <zeno@webkit.org>

        TextureMapperSurfaceBackingStore should check if GraphicsSurface is valid.
        https://bugs.webkit.org/show_bug.cgi?id=100002

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperSurfaceBackingStore::setGraphicsSurface):
            Check if a surface has been created before accessing the pointer.
        (WebCore::TextureMapperSurfaceBackingStore::paintToTextureMapper):
            Check if m_graphicsSurface is a valid pointer before dereferencing it.

2012-10-22  Michael Saboff  <msaboff@apple.com>

        r131955 is has improper function call in LinkHashChromium.cpp
        https://bugs.webkit.org/show_bug.cgi?id=100008

        Reviewed by Alexey Proskuryakov.

        Followup fix to r131955 for chromium platform.  Added call to 
        (const UChar*, unsigned) version of visitedLinkHash from String& version.

        * platform/chromium/LinkHashChromium.cpp:
        (WebCore::visitedLinkHash):

2012-10-22  Aaron Colwell  <acolwell@chromium.org>

        webkitsourceopen event doesn't always fire
        https://bugs.webkit.org/show_bug.cgi?id=99868

        Reviewed by Adam Barth.

        Changed MediaSource to derive from ActiveDOMObject so that event listeners
        will still fire even if all references to the object go out of scope.

        Test: http/tests/media/media-source/video-media-source-garbage-collection-before-sourceopen.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::create):
        (WebCore::MediaSource::MediaSource):
        (WebCore::MediaSource::scriptExecutionContext):
        (WebCore):
        (WebCore::MediaSource::hasPendingActivity):
        (WebCore::MediaSource::stop): Clears m_player & m_asyncEventQueue so they don't indicate pending activity anymore.
        * Modules/mediasource/MediaSource.h:
        (MediaSource):
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::registerMediaSourceURL): Added setPendingActivity() call so the MediaSource object stays active while in the registry.
        (WebCore::MediaSourceRegistry::unregisterMediaSourceURL): Added unsetPendingActivity() call so the MediaSource object can become inactive after being removed from the registry.

2012-10-22  Adam Barth  <abarth@webkit.org>

        [V8] Vastly simplify V8GCController's NodeVisitor
        https://bugs.webkit.org/show_bug.cgi?id=99884

        Reviewed by Kentaro Hara.

        NodeVisitor was vastly more complicated than necessary.

        This patch improve performance on these new gc benchmarks:

        gc-forest: 1.14% better
        gc-mini-tree: 5.09% better
        gc-tree: 4.60% better

        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectVisitor::visitDOMWrapper):
        (WebCore::addImplicitReferencesForNodeWithEventListeners):
        (WebCore::rootForGC):
        (WebCore::NodeVisitor::visitDOMWrapper):
        (WebCore::NodeVisitor::applyGrouping):
        (NodeVisitor):

2012-10-22  Emil A Eklund  <eae@chromium.org>

        Change baselinePosition and maxAscent/maxDescent to int
        https://bugs.webkit.org/show_bug.cgi?id=99767

        Reviewed by Levi Weintraub.

        Currently baselinePostion, maxAscent and maxDescent are
        LayoutUnits while ascent, descent and m_lineHeight are ints.
        This can lead to subtle alignment and rounding problems.

        Change baselinePosition and maxAscent/maxDescent to int to avoid
        these issues.

        Test: fast/sub-pixel/replaced-element-baseline.html

        * editing/FrameSelection.cpp:
        (WebCore::repaintRectForCaret):
        Inflate Y dimension just like we do for X to ensure that the
        repaint rect fully contains the caret.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::baselinePosition):
        * rendering/InlineBox.h:
        (InlineBox):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        Change maxAscent/maxDescent to int to match ascent/descent.
        
        * rendering/InlineFlowBox.h:
        (InlineFlowBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::baselinePosition):
        * rendering/InlineTextBox.h:
        (InlineTextBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::firstLineBoxBaseline):
        (WebCore::RenderBlock::lastLineBoxBaseline):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::baselinePosition):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::firstLineBoxBaseline):
        (WebCore::RenderBox::lastLineBoxBaseline):
        (RenderBox):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::baselinePosition):
        (WebCore::RenderFlexibleBox::firstLineBoxBaseline):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::baselinePosition):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::baselinePosition):
        * rendering/RenderListBox.h:
        (RenderListBox):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::baselinePosition):
        * rendering/RenderListMarker.h:
        (RenderListMarker):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::baselinePosition):
        * rendering/RenderSlider.h:
        (RenderSlider):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::baselinePosition):
        (WebCore::RenderTable::lastLineBoxBaseline):
        (WebCore::RenderTable::firstLineBoxBaseline):
        * rendering/RenderTable.h:
        (RenderTable):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::firstLineBoxBaseline):
        * rendering/RenderTableSection.h:
        (RenderTableSection):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::baselinePosition):
        * rendering/RenderTextControlMultiLine.h:
        (RenderTextControlMultiLine):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::baselinePosition):
        * rendering/RenderTheme.h:
        (RenderTheme):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::baselinePosition):
        * rendering/RenderThemeSafari.h:
        (RenderThemeSafari):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::baselinePosition):
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        * rendering/RootInlineBox.h:
        (RootInlineBox):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::baselinePosition):
        (WebCore::RenderMathMLTable::firstLineBoxBaseline):
        * rendering/mathml/RenderMathMLBlock.h:
        (RenderMathMLBlock):
        (RenderMathMLTable):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::firstLineBoxBaseline):
        * rendering/mathml/RenderMathMLFraction.h:
        (RenderMathMLFraction):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::firstLineBoxBaseline):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::firstLineBoxBaseline):
        * rendering/mathml/RenderMathMLUnderOver.h:
        (RenderMathMLUnderOver):

2012-10-22  Emil A Eklund  <eae@chromium.org>

        Modify LayoutState ASSERTS to support SATURATED_LAYOUT_ARITHMETIC
        https://bugs.webkit.org/show_bug.cgi?id=98692

        Reviewed by Dan Bernstein.

        We currently overflow/wrap when computing the delta in
        RenderBlock::setLogicalTopForChild in cases where we have an
        element with a width or height exceeding maxLayoutUnit. When
        the delta is later added back in RenderBlock::layoutBlockChild
        the number wraps again getting us back to the correct value.

        With SATURATED_LAYOUT_ARITHMETIC enabled the values no longer
        wraps, which seems like the correct thing to do however this
        causes the compare to fail for obvious reasons. By accounting
        for this we can keep the asserts (which have proven very
        helpful) even when SATURATED_LAYOUT_ARITHMETIC is turned on.

        No new tests, covered by existing tests.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        (LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChild):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        (WebCore::RenderView::addLayoutDelta):
        (RenderView):
        (WebCore::RenderView::layoutDeltaMatches):

2012-10-22  Tony Chang  <tony@chromium.org>

        Fix some baseline flexbox alignment
        https://bugs.webkit.org/show_bug.cgi?id=99879

        Reviewed by Ojan Vafai.

        Fix a bug where we weren't handling margin properly on inline-flexbox.
        Fix a bug where we weren't getting the edge of the content box properly when synthesizing
        a baseline.

        Test: css3/flexbox/flexbox-baseline-margins.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::inlineBlockBaseline): Add a new method that is used when calculating an inline-block's
        baseline. Previously we would use lastLineBoxBaseline.
        (WebCore::RenderBlock::lastLineBoxBaseline): Pass in direction and when searching children, use inlineBlockBaseline.
        * rendering/RenderBlock.h:
        (RenderBlock): Make lastLineBoxBaseline non-virtual.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::inlineBlockBaseline): Replace lastLineBoxBaseline with inlineBlockBaseline.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::synthesizedBaselineFromContentBox): Helper method for getting the baseline from the content box.
        (WebCore::RenderFlexibleBox::baselinePosition): Always include the margin. This fixes the inline-flexbox case.
        (WebCore::RenderFlexibleBox::firstLineBoxBaseline): Fix a case where we didn't synthesize a baseline.  Returning -1 means there is no baseline, but we can
        synthesize a baseline if we have a flexitem without text.
        (WebCore::RenderFlexibleBox::inlineBlockBaseline):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderTable.cpp: Replace lastLineBoxBaseline with inlineBlockBaseline.
        (WebCore::RenderTable::inlineBlockBaseline): Try to make comment more direct.
        * rendering/RenderTable.h:
        (RenderTable): Replace lastLineBoxBaseline with inlineBlockBaseline.

2012-10-22  Levi Weintraub  <leviw@chromium.org>

        Unreviewed Chromium build fix following r132074.

        * WebCore.gypi:

2012-10-22  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Don't use deprecated AccessibilityObject methods after r99502
        https://bugs.webkit.org/show_bug.cgi?id=99985

        Reviewed by Chris Fleizach.

        Update callers for AccessibilityObject's title() and
        accessibilityDescription() so they now use AccessibilityText.

        * accessibility/gtk/WebKitAccessibleUtil.cpp:
        (titleTagShouldBeUsedInDescriptionField): Internal helper function.
        (accessibilityTitle): New helper function, returns an String with
        the title for a AccessibilityObject, using AccessibleText.
        (accessibilityDescription): New helper function, returns an String with
        the description for a AccessibilityObject, using AccessibleText.
        * accessibility/gtk/WebKitAccessibleUtil.h: Added public
        declarations for accessibilityTitle and accessibilityDescription.

        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetName): Use new helpers for retrieving the title.
        (webkitAccessibleGetDescription): Use new helpers for retrieving
        the title and description.

        * accessibility/gtk/WebKitAccessibleInterfaceImage.cpp:
        (webkitAccessibleImageGetImageDescription): Use new helpers for
        retrieving the title.

2012-10-16  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: add timeline instrumentation for scrolling of a layer
        https://bugs.webkit.org/show_bug.cgi?id=99461

        Reviewed by Pavel Feldman.

        - added timeline instrumentation for scrolling of a layer;
        - added TRACE_EVENT for ScrollableArea::scrollPositionChanged()

        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::willScrollLayerImpl):
        (WebCore::InspectorInstrumentation::didScrollLayerImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::willScrollLayer):
        (WebCore):
        (WebCore::InspectorInstrumentation::didScrollLayer):
        * inspector/InspectorTimelineAgent.cpp:
        (TimelineRecordType):
        (WebCore::InspectorTimelineAgent::willScroll):
        (WebCore):
        (WebCore::InspectorTimelineAgent::didScroll):
        * inspector/InspectorTimelineAgent.h:
        (InspectorTimelineAgent):
        * inspector/front-end/TimelineModel.js:
        * inspector/front-end/TimelinePresentationModel.js:
        (WebInspector.TimelinePresentationModel._initRecordStyles):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollPositionChanged):

2012-10-22  Jan Keromnes  <janx@linux.com>

        Moved cmdevtools.js to folder cm/

        Web Inspector: Move file `cmdevtools.css` to `cm/`
        https://bugs.webkit.org/show_bug.cgi?id=99956

        Reviewed by Pavel Feldman.

        The file cmdevtools.js belongs to the CodeMirror editor experiment in cm/.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/cm/cmdevtools.css: Renamed from Source/WebCore/inspector/front-end/cmdevtools.css.
        (.CodeMirror):
        (.CodeMirror-scroll):
        (.cm-highlight):
        (@-webkit-keyframes fadeout):
        (to):
        (.cm-breakpoint):
        (.cm-breakpoint-disabled):
        (.cm-breakpoint-conditional):
        (.cm-execution-line):
        (.cm-s-web-inspector-js span.cm-keyword):
        (.cm-s-web-inspector-js span.cm-number):
        (.cm-s-web-inspector-js span.cm-comment):
        (.cm-s-web-inspector-js span.cm-string):
        (.cm-s-web-inspector-js span.cm-string-2):
        (.cm-s-web-inspector-css span.cm-keyword):
        (.cm-s-web-inspector-css span.cm-number):
        (.cm-s-web-inspector-css span.cm-comment):
        (.cm-s-web-inspector-css span.cm-string):
        (.cm-s-web-inspector-css span.cm-string-2):
        (.cm-s-web-inspector-css span.cm-link):
        (.cm-s-web-inspector-css span.cm-variable):
        (.cm-s-web-inspector-html span.cm-meta):
        (.cm-s-web-inspector-html span.cm-comment):
        (.cm-s-web-inspector-html span.cm-string):
        (.cm-s-web-inspector-html span.cm-tag):
        (.cm-s-web-inspector-html span.cm-attribute):
        (.cm-s-web-inspector-html span.cm-link):
        (.webkit-html-message-bubble):
        (.webkit-html-warning-message):
        (.webkit-html-error-message):
        (.webkit-html-message-line):
        (.webkit-html-message-line-hover):

2012-10-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Prepare mappings to moving uiSourceCodes creation out of them to workspace.
        https://bugs.webkit.org/show_bug.cgi?id=99997

        Reviewed by Pavel Feldman.

        Source mappings could now store a link to temporary uiSourceCodes only.
        Otherwise it should retrieve uiSourceCodes from workspace by URL.
        Original uiSourceCodes are now temporary in CompilerScriptMapping.

        * inspector/front-end/CompilerScriptMapping.js:
        (WebInspector.CompilerScriptMapping):
        (WebInspector.CompilerScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.CompilerScriptMapping.prototype.loadSourceMapForScript):
        (WebInspector.CompilerScriptMapping.prototype._reset):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider):
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):
        (WebInspector.NetworkUISourceCodeProvider.prototype._resourceAdded):
        (WebInspector.NetworkUISourceCodeProvider.prototype._addUISourceCode):
        (WebInspector.NetworkUISourceCodeProvider.prototype._projectWillReset):
        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping):
        (_bindUISourceCode):
        (_reset):

2012-10-22  Nicolas Dufresne <nicolas.dufresne@collabora.com>

        Gstreamer 1.0 not working
        https://bugs.webkit.org/show_bug.cgi?id=99852

        Reviewed by Philippe Normand.

        There was a series of trivial issue, g_object_is_floating() was called
        on type GstCaps (which is not a GObject), webkitGstGetPadCaps() was
        returning non-fixed caps and GST_MESSAGE_DURATION has been renamed
        to GST_MESSAGE_DURATION_CHANGED.

        Most failing test passes now.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        (webkitGstGetPadCaps):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):

2012-10-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Treat dynamic anonymous scripts as other anonymous and fix anonymous script editing and breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=99989

        Reviewed by Pavel Feldman.

        Dynamic anonymous scripts are now mapped to anonymous temporary uiSourceCodes.
        ResourceScriptMapping now supports two types of temporary uiSourceCodes:
         - original uiSourceCodes represent scripts while main uiSourceCodes are diverged;
         - temporary uiSourceCodes represent scripts for which resources are not yet loaded.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.breakpointStorageId):
        (WebInspector.BreakpointManager.Storage.prototype._updateBreakpoint):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping):
        (WebInspector.ResourceScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.ResourceScriptMapping.prototype._hasMergedToVM):
        (WebInspector.ResourceScriptMapping.prototype.addScript):
        (WebInspector.ResourceScriptMapping.prototype._deleteOriginalUISourceCodeForScripts):
        (WebInspector.ResourceScriptMapping.prototype._deleteTemporaryUISourceCodeForScripts):
        (WebInspector.ResourceScriptMapping.prototype._bindUISourceCodeToScripts):
        (WebInspector.ResourceScriptMapping.prototype._createUISourceCode):
        (WebInspector.ResourceScriptMapping.prototype._getOrCreateTemporaryUISourceCode):
        (WebInspector.ResourceScriptMapping.prototype._getOrCreateOriginalUISourceCode):
        (WebInspector.ResourceScriptMapping.prototype._uiSourceCodeAddedToWorkspace):
        (WebInspector.ResourceScriptMapping.prototype._scriptsForUISourceCode.get if):
        (WebInspector.ResourceScriptMapping.prototype._reset):

2012-10-22  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [css3-text] Add rendering support for -webkit-text-decoration-style
        https://bugs.webkit.org/show_bug.cgi?id=94094

        Reviewed by Julien Chaffraix.

        This patch implements the "text-decoration-style" property rendering as
        specified in CSS3 working draft, with "-webkit-" prefix. The specification can
        be found here: http://dev.w3.org/csswg/css3-text/#text-decoration-style

        Additionally, Mozilla implementation details can be found here:
        https://developer.mozilla.org/en/CSS/text-decoration-style

        Tests: fast/css3-text/css3-text-decoration/repaint/repaint-text-decoration-style.html
               fast/css3-text/css3-text-decoration/text-decoration-style.html

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQPenStyle):
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setupPaintForStroking):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::strokeStyleToWxPenStyle):
        Added 'DoubleStroke' and 'WavyStroke' to StrokeStyle enum and updated
        platform-specific stroke handling. Some styles requires
        platform-specific implementation (handled in bug 92868).
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::textDecorationStyleToStrokeStyle): Added static function that
        translates text decoration to stroke styles.
        (WebCore::InlineTextBox::paintDecoration): Text decoration style does
        not specify a property for line thickness (like border-width does for
        border style), so we statically set it to 1 for now. The 'double' style
        implementation simply adds a parallel line (depending if it is
        underline, overline or line-through) and the space between lines follows
        the approach used by border's 'double' style.
        * rendering/InlineTextBox.h:
        (InlineTextBox):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        Added text decoration style rendering support to
        InlineTextBox::paintDecoration().

2012-10-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Use the DNS resolve queue
        https://bugs.webkit.org/show_bug.cgi?id=99994

        Reviewed by Simon Hausmann.

        Use the DNS resolve queue, to ensure we can prefetch more than just the first 10 hostname encountered
        during parsing. It also ensure each hostname is only appears once in the queue.

        * Target.pri:
        * platform/network/qt/DNSQt.cpp: Added.
        (DnsPrefetchHelper):
        (WebCore::DnsPrefetchHelper::DnsPrefetchHelper):
        (WebCore::DnsPrefetchHelper::lookup):
        (WebCore::DnsPrefetchHelper::lookedUp):
        (WebCore::prefetchDNS):
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences):
        (WebCore::DNSResolveQueue::platformResolve):
        * platform/network/qt/DnsPrefetchHelper.cpp: Removed.
        * platform/network/qt/DnsPrefetchHelper.h: Removed.
        (DnsPrefetchHelper):

2012-10-22  Erik Arvidsson  <arv@chromium.org>

        HTMLBaseElement href attribute binding returns wrong URL
        https://bugs.webkit.org/show_bug.cgi?id=98184

        Reviewed by Ojan Vafai.

        Resolve the href attribute binding relative to the document URL instead of resolving it to the
        base element itself. If there is no href attribute this should return the fallback base URL.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#the-base-element

        Tests: fast/dom/HTMLAnchorElement/set-href-attribute-rebase.html
               fast/dom/HTMLBaseElement/href-attribute-resolves-with-respect-to-document.html

        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::href): Don't use completeURL. Resolve href based on document's URL instead
        of the generic [Reflect, URL] binding.
        (WebCore::HTMLBaseElement::setHref): Just sets the attribute.
        * html/HTMLBaseElement.h:
        * html/HTMLBaseElement.idl: We can no longer use [Reflect, URL]

2012-10-22  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Revisions should not be restored and persisted for anonymous uiSourceCodes.
        https://bugs.webkit.org/show_bug.cgi?id=99991

        Reviewed by Alexander Pavlov.

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

2012-10-22  Florin Malita  <fmalita@chromium.org>

        Incorrect embedded SVG image sizing on first load
        https://bugs.webkit.org/show_bug.cgi?id=99489

        Reviewed by Nikolas Zimmermann.

        RenderSVGImage::updateImageViewport() must be called after the image loader is finished,
        to ensure that a SVGImageCache::SizeAndScalesMap entry is created even if layout has
        already been performed.

        Test: svg/custom/svg-image-initial-size.html

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):

2012-10-22  Keishi Hattori  <keishi@webkit.org>

        Remove monthFormatInLDML
        https://bugs.webkit.org/show_bug.cgi?id=99971

        Reviewed by Kent Tamura.

        Removing monthFormatInLDML from localized strings because Localizer class now provides the same functionality.

        No new tests. Just removing unused code.

        * platform/LocalizedStrings.h:
        (WebCore):

2012-10-22  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable Microdata DOM API
        https://bugs.webkit.org/show_bug.cgi?id=99033

        Reviewed by Martin Robinson.

        Enable the Microdata DOM API, but still disable it when the unstable
        features should be disabled (for instance in release builds).

        No new tests - related tests are being unskipped and are expected to pass.

        * GNUmakefile.am:
        * GNUmakefile.features.am:
        * bindings/gobject/GNUmakefile.am: Add the required files so the Microdata
        API GObject bindings are generated and built.

2012-10-22  Zan Dobersek  <zandobersek@gmail.com>

        [GTK] Enable CSP 1.1
        https://bugs.webkit.org/show_bug.cgi?id=99064

        Reviewed by Martin Robinson.

        Enable CSP 1.1 in development builds but keep it disabled when the
        unstable features should not be enabled (like in stable releases).

        No new tests - they already exist and will be unskipped.

        * GNUmakefile.am:
        * GNUmakefile.features.am:

2012-10-22  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix "ASSERTION FAILED: !document->inPageCache()" when loading a page
        https://bugs.webkit.org/show_bug.cgi?id=98514

        Reviewed by Kenneth Rohde Christiansen.

        The problem is that we call setFixedVisibleContentRect, which triggers
        a layout, after the document has been put in the page cache and before
        the load has been actually committed.

        This applies the same trick as with setFixedLayoutSize by passing the rect
        in Frame::createView and calling setFixedVisibleContentRect before the
        new FrameView gets attached to the Frame/Document to prevent the layout.

        * WebCore.exp.in:
        * page/Frame.cpp:
        (WebCore::Frame::createView): Give a default value to the fixedLayoutSize and
        useFixedLayout arguments as well since they are used exceptionally.
        * page/Frame.h:
        (Frame):

2012-10-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Handle GET of blob URLs.
        https://bugs.webkit.org/show_bug.cgi?id=99053

        Reviewed by Simon Hausmann.

        Let BlobResourceHandle handle Blob request internally.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2012-10-22  Kenichi Ishibashi  <bashi@chromium.org>

        HarfBuzzShaper::shape() should return false when it adds no glyph to GlyphBuffer
        https://bugs.webkit.org/show_bug.cgi?id=99966

        Reviewed by Kent Tamura.

        If no glyph is added to GlyphBuffer, HarfBuzzShaper::shape() returns false.

        No new tests. Confirmed the fix by using Address Sanitizer.

        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::shape):
        (WebCore::HarfBuzzShaper::fillGlyphBuffer): Returns false when glyphBuffer.size() == 0
        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.h:
        (HarfBuzzShaper):

2012-10-22  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] ASSERT triggered when we try reprojecting fallback elements.
        https://bugs.webkit.org/show_bug.cgi?id=99815

        Reviewed by Hajime Morita.

        When fallback elements of InsertionPoint is reprojected, they were attached twice.
        We have to skip attaching them if they are attached. We also add a few ASSERT not to
        allow attaching twice if not necessary.

        We have confirmed that this patch does not regress the performance. The summary of the
        performance test is the following:

        Dromaeo/dom-modify.html [runs/s]:
                               median stdev    min    max
           without this patch:   3928   184   3655   4361
           with this patch   :   3925   178   3652   4350

        Parser/html5-full-render.html [s]:
                               median stdev    min    max
           without this patch:   3821    17   3811   3850
           with this patch   :   3838   4.4   3833   3844

        Test: fast/dom/shadow/content-reprojection-fallback-crash.html

        * dom/ContainerNode.cpp:
        (WebCore):
        (WebCore::childAttachedAllowedWhenAttachingChildren): If true, children of this node might
        be attached in advance because of ShadowDOM attaching process.
        * dom/ContainerNode.h:
        (ContainerNode):
        (WebCore):
        (WebCore::ContainerNode::attachChildren):
        * dom/Element.cpp:
        (WebCore::Element::attach):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::attach):

2012-10-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: merge "docked" state into the "dock side" enum.
        https://bugs.webkit.org/show_bug.cgi?id=99717

        Reviewed by Vsevolod Vlasov.

        Otherwise, it is hard to manage these inter-dependent flags.

        * WebCore.exp.in:
        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::requestSetDockSide):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        * inspector/InspectorFrontendClientLocal.h:
        (InspectorFrontendClientLocal):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::requestSetDockSide):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/DockController.js:
        (WebInspector.DockController):
        (WebInspector.DockController.prototype._updateUI.get sides):
        (WebInspector.DockController.prototype._updateUI):
        (WebInspector.DockController.prototype._toggleDockState):
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setAttachedWindow):
        (InspectorFrontendAPI.setDockSide):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.requestSetDockSide):
        * inspector/front-end/externs.js:

2012-10-22  MORITA Hajime  <morrita@google.com>

        Unreviewed follow up to update test result after r132033.

        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::installPerContextProperties):

2012-10-21  MORITA Hajime  <morrita@google.com>

        [V8] V8EnablePerContext shouldn't require document() accessor to the native object.
        https://bugs.webkit.org/show_bug.cgi?id=99954

        Reviewed by Kentaro Hara.

        It now refers ScriptExecutionContext of the creation context instead of document() of
        wrapped object.

        No new tests. No behavior change at this time.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):

2012-10-21  Kent Tamura  <tkent@chromium.org>

        Page popup: Fix crash by events after closing
        https://bugs.webkit.org/show_bug.cgi?id=99951

        Reviewed by Hajime Morita.

        WebCore should provide a way to uninstall a DOMWindowPagePopup supplement.

        No new tests. The bug is timing-dependent.

        * page/DOMWindowPagePopup.cpp:
        (WebCore::DOMWindowPagePopup::uninstall):
        Added. Calls Supplementable::removeSupplement.
        * page/DOMWindowPagePopup.h:
        (DOMWindowPagePopup): Declare uninstall.
        * platform/Supplementable.h:
        (WebCore::Supplementable::removeSupplement): Added.

2012-10-21  Keishi Hattori  <keishi@webkit.org>

        Refactor picker tests to fix flakiness and share code
        https://bugs.webkit.org/show_bug.cgi?id=99671

        Reviewed by Kent Tamura.

        Disable transitions until the picker is fully ready. This should fix flakiness.

        No new tests.

        * Resources/pagepopups/calendarPicker.css:
        (.preparing .unavailable): Disable transitions.
        (.preparing .available): Disable transitions.
        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker): Set "preparing" class.
        (CalendarPicker.prototype._handleWindowResize): Remove the "preparing" class when the window finishes resizing.

2012-10-21  Shinya Kawanaka  <shinyak@chromium.org>

        Web Inspector: Shadow DOM: Node removal doesn't reflect.
        https://bugs.webkit.org/show_bug.cgi?id=99567

        Reviewed by Pavel Feldman.

        We have to call InspectorInstrumentation::willRemoveDOMNode() even if a node is in a shadow tree.
        Otherwise, node won't be removed from the inspector.

        Test: inspector/elements/update-shadowdom.html

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

2012-10-21  Andreas Kling  <kling@webkit.org>

        Remove Page::javaScriptURLsAreAllowed setting.
        <http://webkit.org/b/99944>

        Reviewed by Anders Carlsson.

        This setting was exposed through internal WebView API in Apple's WebKit1.
        There are no longer any clients of that API.

        This is a step towards preventing elements from modifying their own attributes
        below attributeChanged().

        * WebCore.exp.in:
        * WebCore.order:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (Page):

2012-10-21  Hyungchan Kim  <hyungchan2.kim@lge.com>

        Add a separate flag for rgb swizzling whether it can be modified or not
        https://bugs.webkit.org/show_bug.cgi?id=98728

        BitmapTexture swizzles the source image if the OpenGL driver
        doesn't support the BGRA extension.
        In case of directly composited images, the source image should not
        be modified.

        http://www.satine.org/research/webkit/snowleopard/snowstack.html

        Reviewed by Noam Rosenthal.

        No new tests as this is only testable on specific hardware and
        currently not avaiable in the bots.

        * platform/graphics/texmap/TextureMapper.h:
        (BitmapTexture):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTile::updateContents):
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (TextureMapperTile):
        (TextureMapperTiledBackingStore):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawRepaintCounter):
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/texmap/TextureMapperGL.h:
        (BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::updateContents):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::updateBackingStore):

2012-10-21  Antti Koivisto  <antti@apple.com>

        Factor stylesheet invalidation analysis code into a class
        https://bugs.webkit.org/show_bug.cgi?id=99933

        Reviewed by Sam Weinig.

        Currently the stylesheet analysis code is all over the place. It should be factored into a class to make
        further progress easier.

        The patch adds StyleInvalidationAnalysis class and moves a bunch of code from SelectorChecker, StyleResolver
        and DocumentStyleSheetCollection there. No functional changes.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/SelectorChecker.cpp:
        (WebCore):
        * css/SelectorChecker.h:
        (WebCore):
        * css/StyleInvalidationAnalysis.cpp: Added.
        (WebCore):
        (WebCore::StyleInvalidationAnalysis::StyleInvalidationAnalysis):
        (WebCore::StyleInvalidationAnalysis::create):
        (WebCore::determineSelectorScopes):
        (WebCore::StyleInvalidationAnalysis::analyzeStyleSheet):
        (WebCore::elementMatchesSelectorScopes):
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        * css/StyleInvalidationAnalysis.h: Added.
        (WebCore):
        (StyleInvalidationAnalysis):
        (WebCore::StyleInvalidationAnalysis::dirtiesAllStyle):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::checkRegionSelector):
        * css/StyleResolver.h:
        (StyleResolver):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore):
        (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange):
        * dom/DocumentStyleSheetCollection.h:
        (DocumentStyleSheetCollection):

2012-10-08  Robert Hogan  <robert@webkit.org>

        In some float situations, the original layout is wrong and only corrects itself on repaint
        https://bugs.webkit.org/show_bug.cgi?id=18939

        Reviewed by Levi Weintraub.

        A <br> that follows collapsing spaces and has clearance set always needs to get a run and a linebox of its own.
        This allows the line below it to check for clearance from the <br> if it gets dirtied but the line with the <br>
        does not.

        Test: fast/block/br-with-clearance-after-collapsing-space.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):

2012-10-08  Robert Hogan  <robert@webkit.org>

        floated element with negative margin causes text wrap bug
        https://bugs.webkit.org/show_bug.cgi?id=94825

        Reviewed by Levi Weintraub.

        Avoid over-estimating the available width on the line by ensuring that the offset taken to avoid
        floats on the line is at least as much as the offset given by border, margin and padding. This only
        happens when a negative margin on the float brings its edge back before the offset
        given by the border, margin and padding of its parents.

        Test: fast/block/float/float-on-line-obeys-container-padding.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):

2012-10-20  Martin Robinson  <mrobinson@igalia.com>

        Fix 'make dist' for the GTK+ port

        * GNUmakefile.am: Add missing files to the source list.
        * GNUmakefile.list.am: Ditto.

2012-10-20  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12512710> [mac] Text with zero font size renders as 12px sometimes
        https://bugs.webkit.org/show_bug.cgi?id=99918

        Reviewed by Geoff Garen.

        -[NSFont fontWithName:size:] returns an NSFont of size 12 (the default User Font size) when
        asked for size 0, and this is what Font::drawGlyphs uses to draw the text.

        Test: fast/text/zero-font-size-2.html

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs): Added an early return if the size is zero.

2012-10-20  Andreas Kling  <kling@webkit.org>

        Clean up QualifiedName-as-hash-key scenario.
        <http://webkit.org/b/99394>

        Reviewed by Anders Carlsson.

        Cache the hash on QualifiedNameImpl after the first time it's computed.
        This grows QualifiedNameImpl by 4 bytes on 32-bit (no change on 64-bit due to base class padding)
        which I believe is fine, since QualifiedName is a shared object.

        Add a global nullQName() function that returns a QualifiedName(nullAtom, nullAtom, nullAtom)
        and use this to implement HashTraits<QualifiedName>::emptyValue(). The old implementation would
        create a new QualifiedName(nullAtom, nullAtom, nullAtom) each time, which had to be hashed,
        added to  the global QualifiedName cache, etc.

        Finally, don't have SVGAttributeHashTranslator create a temporary QualifiedName just to compute
        the hash of a (namespace, prefix, localName) tuple, use QualifiedNameComponents and hashComponents()
        directly instead.

        Altogether this shaves ~100ms off of the RoboHornet svgresize.html benchmark on my MBP.

        * dom/QualifiedName.cpp:
        (WebCore::nullQName):
        (WebCore::QualifiedName::QualifiedNameImpl::computeHash):
        * dom/QualifiedName.h:
        (QualifiedNameImpl):
        (WebCore::QualifiedName::QualifiedNameImpl::QualifiedNameImpl):
        (WebCore::QualifiedNameHash::hash):
        * svg/SVGElement.h:
        (WebCore::SVGAttributeHashTranslator::hash):

2012-10-20  Yael Aharon  <yael.aharon@intel.com>

        [EFL][AC] Build fix after r131933
        https://bugs.webkit.org/show_bug.cgi?id=99901

        Reviewed by Kentaro Hara.

        Add ArrayBoundsClamper.cpp to WebCore/CMakeLists.txt.

        No new tests.

        * CMakeLists.txt:

2012-10-19  Adam Barth  <abarth@webkit.org>

        [V8] V8DOMWrapper should avoid using its document parameter (so we can remove it soon)
        https://bugs.webkit.org/show_bug.cgi?id=99876

        Reviewed by Kentaro Hara.

        We want to remove the document parameter to instantiateV8Object. There
        isn't always a Document available, so it doesn't make sense to pass it
        as a parameter. We're just waiting for a V8 API change so we can still
        construct Node wrappers quickly.

        This patch removes a use of the document that snuck in. Rather than
        passing the ScriptExecutionContext around, we get it from the
        CreationContext of the prototype object (and only when we actually need
        it).

        * Modules/notifications/NotificationCenter.cpp:
        * Modules/notifications/NotificationCenter.h:
        (NotificationCenter):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateConstructorGetter):
        (GenerateImplementation):
        (GenerateToV8Converters):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextData::createWrapperFromCacheSlowCase):
        (WebCore::V8PerContextData::constructorForTypeSlowCase):
        * bindings/v8/V8PerContextData.h:
        (WebCore::V8PerContextData::createWrapperFromCache):
        (WebCore::V8PerContextData::constructorForType):
        (V8PerContextData):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initializeIfNeeded):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore):
        (WebCore::WrapperTypeInfo::installPerContextPrototypeProperties):

2012-10-19  Florin Malita  <fmalita@chromium.org>

        Incorrect pattern scaling
        https://bugs.webkit.org/show_bug.cgi?id=99870

        Reviewed by Dirk Schulze.

        The pattern space transform scale should reflect the tile_size(user space)
        to tile_image_size ratio, instead of tile_size to absolute_tile_size.

        Test: svg/custom/pattern-scaling.svg

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):

2012-10-19  Tony Chang  <tony@chromium.org>

        RenderFlexibleBox::preferredMainAxisContentExtentForChild can return a negative value
        https://bugs.webkit.org/show_bug.cgi?id=97827

        Reviewed by Ojan Vafai.

        I'm pretty sure this isn't possible (logicalHeight and maxPreferredLogicalWidth should always include
        border and padding), so just add an assert.

        No new tests, the assert is for code clarity.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):

2012-10-19  Tony Chang  <tony@chromium.org>

        Replace calls to updateLogicalHeight with calls to computeLogicalHeight
        https://bugs.webkit.org/show_bug.cgi?id=99883

        Reviewed by Ojan Vafai.

        In RenderBox and RenderBlock, switch to using computeLogicalHeight instead of
        saving the old height, calling update logical height, then restoring the old height.

        No new tests, this is just a refactoring.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths): Simple replace.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight): Adjust for content height.
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing): Adjust for content height.
        (WebCore::RenderBox::availableLogicalHeightUsing): Adjust for content height.

2012-10-19  Pablo Flouret  <pablof@motorola.com>

        Implement setRangeText() on text controls
        https://bugs.webkit.org/show_bug.cgi?id=91907

        Reviewed by Kent Tamura.

        setRangeText() replaces a range of text with some other text, and
        adjusts the existing selection according to its parameters.

        Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#dom-textarea/input-setrangetext

        Tests: fast/forms/color/color-setrangetext.html
               fast/forms/date/date-setrangetext.html
               fast/forms/datetime/datetime-setrangetext.html
               fast/forms/datetimelocal/datetimelocal-setrangetext.html
               fast/forms/file/file-setrangetext.html
               fast/forms/hidden/hidden-setrangetext.html
               fast/forms/image/image-setrangetext.html
               fast/forms/month/month-setrangetext.html
               fast/forms/number/number-setrangetext.html
               fast/forms/range/range-setrangetext.html
               fast/forms/search/search-setrangetext.html
               fast/forms/setrangetext.html
               fast/forms/textarea/textarea-setrangetext.html
               fast/forms/time/time-setrangetext.html
               fast/forms/week/week-setrangetext.html


        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction):
            The GObject generator doesn't support function overloads, so skip the
            version of setRangeText() that has only one argument, its behavior
            can be emulated with the four-argument version.

        * html/InputType.cpp:
        (WebCore::InputType::supportsSelectionAPI):
        (WebCore):
        * html/InputType.h:
        (InputType):
            Add supportsSelectionAPI() which indicates whether the various
            selection api functions like setRangeText, setSelectionRange, etc.
            are supported by this input element.

        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::supportsSelectionAPI):
        (WebCore):
        * html/BaseTextInputType.h:
        (BaseTextInputType):
            Text-based input types support the selection APIs.

        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::supportsSelectionAPI):
        (WebCore):
        * html/EmailInputType.h:
        (EmailInputType):
            Email inputs don't support the selection APIs.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setRangeText):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
            Add a setRangeText override which checks if it should apply to the
            input type, and calls the actual implementation on the parent class.
        * html/HTMLInputElement.idl:
        * html/HTMLTextAreaElement.idl:

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setRangeText):
        * html/HTMLTextFormControlElement.h:
        (HTMLTextFormControlElement):
            setRangeText implementation.


2012-10-19  Luke Macpherson   <macpherson@chromium.org>

        Remove HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE macro in StyleResolver.
        https://bugs.webkit.org/show_bug.cgi?id=99782

        Reviewed by Sam Weinig.

        Removes last usage of HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE macro, so that in future there will be no temptation
        to use it instead of adding a line to StyleBuilder.
        Also removes redundant checks for inital and inherit (HANDLE_INHERIT_AND_INTIAL already returns in those cases).
        I don't want to move this code into StyleBuilder until the FIXME that is already there is fixed.

        Covered by many existing writing mode tests (eg. fast/html/details-writing-mode.html)

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

2012-10-19  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Hidden indexing events are visible to script via bubbling/capture
        https://bugs.webkit.org/show_bug.cgi?id=96566

        Reviewed by Tony Chang.

        Stop propagation of error events fired at internal indexing requests as a result of
        aborting, as they should not be visible to scripts.

        Test: storage/indexeddb/index-population.html

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::preventPropagation):
        (IDBRequest):

2012-10-19  Simon Fraser  <simon.fraser@apple.com>

        Remove .get() calls in assertions as suggested by Darin Adler.
        
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::appendSublayer):
        (PlatformCALayer::insertSublayer):
        (PlatformCALayer::replaceSublayer):

2012-10-19  Simon Fraser  <simon.fraser@apple.com>

        Fix a hang when combining tile cache layers with preserve-3d or reflections
        https://bugs.webkit.org/show_bug.cgi?id=99890
        <rdar://problem/12539560>

        Reviewed by Dean Jackson.

        The new tile cache code added an updateSublayers() call when switching to/from
        tiled layers. This confused later sublayer rebuilding, causing us to attempt to
        add a layer as a child of itself, causing a hang in CA.
        
        Fix by removing all the explicit calls to updateFoo when updating the structural
        layer and switching to/from tiled layers. Instead, we set dirty flags, and rely
        on the fact that these flag-dirtying functions get called before the later functions
        that process those dirty flags. This is assured by some reordering of the update
        function calls.
        
        A final wrinkle is that ensureStructuralLayer() can change the layer that our
        parent GraphicsLayer put in its sublayer list. Rather than diddle with that sublayer
        list directly like we used to, just call noteSublayersChanged() on the parent, and have
        commitLayerChangesAfterSublayers() check the ChildrenChanged and do a second update
        of sublayers if necessary (we clear the flag in commitLayerChangesBeforeSublayers(), so
        only do this work if a sublayer requested it).
        
        Tests: compositing/tiling/preserve3d-tiled.html
               compositing/tiling/reflected-tiled.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::commitLayerChangesAfterSublayers):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::appendSublayer): Add assertion about adding a layer to itself.
        (PlatformCALayer::insertSublayer): Ditto.
        (PlatformCALayer::replaceSublayer): Ditto.

2012-10-19  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-hidden=false does not work as expected
        https://bugs.webkit.org/show_bug.cgi?id=98787

        Reviewed by Beth Dakin.

        ARIA requires that aria-hidden=false override an element's native visibility and include that
        node in the AX hierarchy.

        To accomplish this we have to allow invisible items to be included, as well as items that
        have no renderers associated with them.

        Test: accessibility/aria-hidden-negates-no-visibility.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGrid.h:
        (AccessibilityARIAGrid):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore):
       (WebCore::AccessibilityNodeObject::boundingBoxRect):
        (WebCore::AccessibilityNodeObject::insertChild):
        (WebCore::AccessibilityNodeObject::addChild):
        (WebCore::AccessibilityNodeObject::addChildren):
        (WebCore::AccessibilityNodeObject::textUnderElement):
        * accessibility/AccessibilityNodeObject.h:
        (AccessibilityNodeObject):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::textIteratorBehaviorForTextRange):
        (WebCore):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        (WebCore::AccessibilityObject::addChild):
        (WebCore::AccessibilityObject::insertChild):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnoredBase):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):

2012-10-19  Michael Saboff  <msaboff@apple.com>

        Add String version of visitedLinkHash() to properly handle 8-bit URL Strings.
        https://bugs.webkit.org/show_bug.cgi?id=99735

        Reviewed by Filip Pizlo.

        Added String version of visitedLinkHash().  Made speculative addition of visitedLinkHash()
        to chromium platform version of LinkHashChromium.cpp.
        Changed calls in the form of visitedLinkHash(string.characters(), string.length()) to use the
        new form.

        No changes to functionality, so no new tests.

        * WebCore.exp.in:
        * loader/HistoryController.cpp:
        (WebCore::addVisitedLink):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addVisitedLink):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHashInline):
        (WebCore::visitedLinkHash):
        * platform/LinkHash.h:
        * platform/chromium/LinkHashChromium.cpp:
        (WebCore::visitedLinkHash):

2012-10-19  Michael Saboff  <msaboff@apple.com>

        String(CFStringRef) should try to converting to an 8 bit string before converting to  16 bit string
        https://bugs.webkit.org/show_bug.cgi?id=99794

        Reviewed by Filip Pizlo.

        Try getting a Latin1 byte string before getting a UTF16 (UChar*) string.

        No new test, added 8 bit path.

        * platform/text/cf/StringCF.cpp:
        (WTF::String::String):

2012-10-19  Dima Gorbik  <dgorbik@apple.com>

        Page should be removed from the cache right after restore was called.
        https://bugs.webkit.org/show_bug.cgi?id=99737

        Reviewed by Brady Eidson.

        The pageCache was inconsistent after the restoration for a period of time because the cachedFrame is being nulled,
        but the page is still in the Cache. Now the page is being removed from the cache right after the restoration.
        This issue was spotted in a custom built application using WebKit and unfortunately there is no way to test this
        behavior in LayoutTests. All the current tests that exercise the page cache do pass.

        No new tests.

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

2012-10-19  Max Vujovic  <mvujovic@adobe.com>

        [WebGL] getUniformLocation fails for uniform array name without array brackets
        https://bugs.webkit.org/show_bug.cgi?id=99854

        Reviewed by Dean Jackson.

        Before this patch, gl.getUniformLocation(program, "array[0]") would return the array
        location, but gl.getUniformLocation(program, "array") would not. Now, the latter also
        returns the array location.

        In the process of adding a check to the following Khronos WebGL conformance test:
        conformance/glsl/misc/glsl-long-variable-names.html

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo):
            Before, we used to check that the symbol size was greater than one to determine that the
            symbol was an array. However, this doesn't identify arrays of length one. Now, we check
            if the symbol name ends in "[0]", since ANGLE appends this suffix to array symbol
            names.
            If the symbol is an array, we strip off the "[0]" and add a symbol with just the base
            name. We set the isArray flag on the symbol, so we don't lose the information that it is
            an array.
            Then, we create symbols for each array element like before. However, instead of
            replacing the "0" in array[0]" with each index, we take the base name "array" and
            append array brackets containing each index (e.g. "array" + "[7]").
        * platform/graphics/ANGLEWebKitBridge.h:
        (ANGLEShaderSymbol):
            Add isArray boolean to ANGLEShaderSymbol. Since array symbols don't end in "[0]"
            anymore, this is the only way to identify arrays.

2012-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r131915.
        http://trac.webkit.org/changeset/131915
        https://bugs.webkit.org/show_bug.cgi?id=98787

        It broke the build on platforms with \!HAVE(ACCESSIBILITY)

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::nodeIsTextControl):
        * accessibility/AXObjectCache.h:
        (WebCore):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGrid.h:
        (AccessibilityARIAGrid):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::elementRect):
        (WebCore::AccessibilityNodeObject::addChildren):
        (WebCore::AccessibilityNodeObject::textUnderElement):
        * accessibility/AccessibilityNodeObject.h:
        (AccessibilityNodeObject):
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::textIteratorBehaviorForTextRange):
        (WebCore):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnoredBase):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):

2012-10-19  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r131936.
        http://trac.webkit.org/changeset/131936
        https://bugs.webkit.org/show_bug.cgi?id=99717

        Broke the clang build

        * WebCore.exp.in:
        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::requestAttachWindow):
        (WebCore):
        (WebCore::InspectorFrontendClientLocal::requestDetachWindow):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        * inspector/InspectorFrontendClientLocal.h:
        (InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::requestSetDockSide):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::requestAttachWindow):
        (WebCore):
        (WebCore::InspectorFrontendHost::requestDetachWindow):
        (WebCore::InspectorFrontendHost::requestSetDockSide):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/DockController.js:
        (WebInspector.DockController):
        (WebInspector.DockController.prototype.setDocked):
        (WebInspector.DockController.prototype._innerSetDocked.set if):
        (WebInspector.DockController.prototype._innerSetDocked):
        (WebInspector.DockController.prototype._updateUI.get states):
        (WebInspector.DockController.prototype._updateUI):
        (WebInspector.DockController.prototype._toggleDockState):
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setAttachedWindow):
        (InspectorFrontendAPI.setDockSide):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.requestAttachWindow):
        (.WebInspector.InspectorFrontendHostStub.prototype.requestDetachWindow):
        (.WebInspector.InspectorFrontendHostStub.prototype.requestSetDockSide):
        * inspector/front-end/externs.js:
        (InspectorFrontendHostAPI.prototype.requestAttachWindow):
        (InspectorFrontendHostAPI.prototype.requestDetachWindow):

2012-10-09  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION (r130699): 5 various fast/ tests started failing
        https://bugs.webkit.org/show_bug.cgi?id=98729

        Reviewed by Xan Lopez.

        Do not try to remove the URL fragment for data URLs. This will likely
        just corrupt the URL.

        No new tests. This unskips some previously failing tests.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::urlStringForSoup): Do nothing for data URLs.

2012-10-19  Simon Fraser  <simon.fraser@apple.com>

        Use tile caches in place of CATiledLayer
        https://bugs.webkit.org/show_bug.cgi?id=99806
        <rdar://problem/6474145>

        Reviewed by Tim Horton.

        Have GraphicsLayerCA use TileCaches instead of CATiledLayer now for
        layers that exceed the 2000px size threshold.

        * platform/graphics/TiledBacking.h:
        (TiledBacking): Have normal getter and setter for the visible rect.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly): We need
        to pass in an old visibleRect to commitLayerChangesBeforeSublayers(). Just use
        our current visible rect, which result in no tile area work.
        (WebCore::GraphicsLayerCA::computeVisibleRect): Make this const and have it
        return the rect, for clarity.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): Keep track of the old
        visible rect, and use the change flags mechanism to ensure that we recompute
        tile areas later.
        When calling commitLayerChangesBeforeSublayers() on the mask layer, just pass
        its own visible rect as the old visible rect.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Pass in the
        oldVisibleRect so that updateVisibleRect() can use this to see how the
        visibleRect is changing.
        (WebCore::GraphicsLayerCA::adjustTiledLayerVisibleRect): This member function
        compares the old and new visible rects, and extends the tile coverage area
        in directions where more content is being exposed. It takes care to avoid
        "jitter" in the visible rect deltas causing edge tiles to get created then
        destroyed by keeping any extra padding that already exists in a direction
        where more content is being exposed.
        (WebCore::GraphicsLayerCA::updateVisibleRect): Call adjustTiledLayerVisibleRect()
        and use the result to update the TiledBacking's visibleRect.
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): Create layers of type
        LayerTypeTileCacheLayer instead of LayerTypeWebTiledLayer. Because tile
        cache layers involve adding an extra layer to the hierarchy (the tile container),
        we call updateSublayerList() when changing layer type.
        * platform/graphics/ca/GraphicsLayerCA.h: New m_sizeAtLastVisibleRectUpdate member
        that is used to prevent the adjustTiledLayerVisibleRect() logic being confused by
        size changes.
        (WebCore::GraphicsLayerCA::visibleRect):
        * platform/graphics/ca/mac/TileCache.h: Have normal getter and setter for the visible rect.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::setVisibleRect): Renamed to setVisibleRect().
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Avoid doing work
        for pages in the page cache, for which the root layer is unattached.
        (WebCore::RenderLayerCompositor::frameViewDidScroll): visibleRectChanged() was renamed
        to setVisibleRect().

2012-10-19  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=99768
        We should limit the tile cache coverage when a page can't take 
        advantage of fast tile scrolling anyway

        Reviewed by Simon Fraser.

        When sites can't use fast-scrolling, there is no need to inflate the 
        tile cache. In fact, we get a performance boost by keeping it small 
        on painting-intensive sites. 

        Instead of just looking a whether or not the FrameView 
        canHaveScrollbar(), consult 
        shouldUpdateScrollLayerPositionOnMainThread().
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        
        Expose shouldUpdateScrollLayerPositionOnMainThread().
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::hasNonLayerFixedObjects):
        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionOnMainThread):
        (WebCore):
        (WebCore::ScrollingCoordinator::updateShouldUpdateScrollLayerPositionOnMainThread):
        * page/scrolling/ScrollingCoordinator.h:
        (ScrollingCoordinator):

        Bug fix. Should be bitwise and.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::tileCoverageRect):

2012-10-19  Mark Lam  <mark.lam@apple.com>

        Added WTF::StackStats mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=99805.

        Reviewed by Geoffrey Garen.

        Added StackStats probes in layout methods.

        * dom/Document.cpp:
        (WebCore::Document::updateLayout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layout):
        * rendering/RenderDialog.cpp:
        (WebCore::RenderDialog::layout):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::layout):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::layout):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::layout):
        * rendering/RenderObject.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::layout):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layoutSpecialExcludedChild):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::layout):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layout):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::layout):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::layout):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::layout):
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::layout):
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::layout):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::layout):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::layout):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::layout):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2012-10-19  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: merge "docked" state into the "dock side" enum.
        https://bugs.webkit.org/show_bug.cgi?id=99717

        Reviewed by Vsevolod Vlasov.

        Otherwise, it is hard to manage these inter-dependent flags.

        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::requestSetDockSide):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        * inspector/InspectorFrontendClientLocal.h:
        (InspectorFrontendClientLocal):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::requestSetDockSide):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/DockController.js:
        (WebInspector.DockController):
        (WebInspector.DockController.prototype._updateUI.get sides):
        (WebInspector.DockController.prototype._updateUI):
        (WebInspector.DockController.prototype._toggleDockState):
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setAttachedWindow):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.requestSetDockSide):

2012-10-19  Joshua Bell  <jsbell@chromium.org>

        [V8] IndexedDB: Crash when lazy-indexing Date keys
        https://bugs.webkit.org/show_bug.cgi?id=99860

        Reviewed by Adam Barth.

        Missing a scope/context needed when digging values out of Date objects
        in an indexing callback.

        Test: storage/indexeddb/lazy-index-types.html

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):

2012-10-18  Dean Jackson  <dino@apple.com>

        Shader translator needs option to clamp uniform array accesses in vertex shaders
        https://bugs.webkit.org/show_bug.cgi?id=98977
        https://code.google.com/p/angleproject/issues/detail?id=49

        Reviewed by Alok Priyadarshi and Ken Russell.

        WebGL forbids out-of-bounds array access in shaders. Rewrite any shaders to
        ensure that non-direct array indexing is clamped to the bounds of the array.

        Test: fast/canvas/webgl/array-bounds-clamping.html

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::ANGLEWebKitBridge::compileShaderSource): Pass new compiler option SH_CLAMP_INDIRECT_ARRAY_BOUNDS

2012-10-19  Justin Novosad  <junov@chromium.org>

        [Chromium] Reduce memory footprint of canvas pattern object with deferred rendering
        https://bugs.webkit.org/show_bug.cgi?id=99856

        Reviewed by Stephen White.

        Marking internal bitmap copy as immutable to prevent it from being
        unnecessarily duplicated in skia by SkBitmapHeap.

        No new tests: code path already well covered by existing layout tests 
        fast/canvas/canvas-pattern-*

        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformPattern):

2012-10-19  Antti Koivisto  <antti@apple.com>

        Maintain a list of active CSS stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=99843

        Reviewed by Andreas Kling.

        Currently we maintain a per-document list of stylesheets that matches what is returned by the StyleSheetList DOM API. 
        This list contains both CSS and XSLT stylesheets which internally have basically nothing in common. Maintaining 
        a list of active CSS stylesheets separately simplifies code in number of places.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::addStylesheetsFromSeamlessParents):
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::collectCSSOMWrappers):
        * css/StyleResolver.h:
        (StyleResolver):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::styleSheets):
        (WebCore::StyleSheetList::detachFromDocument):
        * dom/Document.cpp:
        (WebCore::Document::setCompatibilityMode):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange):
        (WebCore::styleSheetsUseRemUnits):
        (WebCore::filterEnabledCSSStyleSheets):
        (WebCore):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        (WebCore::DocumentStyleSheetCollection::reportMemoryUsage):
        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::styleSheetsForStyleSheetList):
        (DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::activeAuthorStyleSheets):

2012-09-08  Alpha Lam  <hclam@chromium.org>

        [chromium] Implement deferred image decoding
        https://bugs.webkit.org/show_bug.cgi?id=94240

        Reviewed by Stephen White.

        Objectives:

        To record image decoding operations during painting and to defer
        decoding operations until rasterization.

        Rationale:

        This is a key feature that enables impl-side painting which requires
        fast recording of drawing operations. The existing decode-on-draw
        restricts that recording has to block on expensive decoding operations.
        This change allows recording of image decoding operations during paint
        time.

        Design:

        Image decoding happens when a BitmapImage is drawn into a
        GraphicsContext. When per-tile painting is enabled GraphicsContext
        is backed by SkCanvas in recording mode. This SkCanvas records drawing
        and image decoding operations to minimize recording time.

        An image decoding operation is recorded as a SkPixelRef object
        implemented by LazyDecodingPixelRef. This object references raw encoded
        data, regions to be decoded and scaling information.

        When used in conjunction with per-tile painting this feature defers
        image decoding until the SkCanvas referencing the image is rasterized.

        Both recording and rasterization happen on the main thread.

        Performance Impact:

        This feature is enabled by WebKit::setDeferredImageDecodingEnabled()
        and does not have an impact when disabled.

        This feature is disabled by default.

        Upcoming Changes:

        1. Implement a full-featured image cache in ImageDecodingStore.
        2. Allow rasterization and decoding on impl thread.

        Classes Involved:

        BitmapImage

        BitmapImage is the entry point for deferred image decoding. When
        drawing a BitmapImage into a GraphicsContext it makes a request to
        create a NativeImageSkia. We substitute the content in NativeImageSkia
        such that it is lazily decoded.

        DeferredImageDecoder

        This is the platform implementation of a image decoder for Chromium.
        This is a bridge layer that either delegates calls to the actual
        ImageDecoder or create a lazily-decoded SkBitmap and delegates calls
        to ImageDecodingStore.

        ImageDecodingStore

        This object manages all encoded images. It keeps track of encoded
        data and the corresponding ImageDecoder for doing actual decoding. It
        is also responsible for generating lazily decoded SkBitmaps. This
        SkBitmap contains a LazyDecodingPixelRef object which references to an
        image entry in ImageDecodingStore.

        ScaledImageFragment

        A container for a scaled image fragment. In addition to bitmap pixels
        it contains information about the ID of the image, scale and clipping.

        ImageFrameGenerator

        This object is responsible for generating decoded pixels. It is also
        a container for encoded image data and corresponding image decoder.

        LazyDecodingPixelRef

        This object is embedded in a SkBitmap to enable lazy decoding. When
        SkBitmap needs to access pixels LazyDecodingPixelRef is locked. It
        contains information to locate an image and scaling info, these
        information is submitted to ImageDecodingStore to access actual pixels.

        Layout tests. There are about 80 tests in this virtual test suite
        running this feature in this directory:

        platform/chromium/virtual/deferred/fast/images

        Unit tests. Added DeferredImageDecoderTest to verify deferred
        image decoding behavior.

        * WebCore.gypi:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/ImageSource.h:
        (WebCore):
        (ImageSource):
        * platform/graphics/chromium/DeferredImageDecoder.cpp: Added.
        (WebCore):
        (WebCore::DeferredImageDecoder::DeferredImageDecoder):
        (WebCore::DeferredImageDecoder::~DeferredImageDecoder):
        (WebCore::DeferredImageDecoder::create):
        (WebCore::DeferredImageDecoder::createForTesting):
        (WebCore::DeferredImageDecoder::filenameExtension):
        (WebCore::DeferredImageDecoder::frameBufferAtIndex):
        (WebCore::DeferredImageDecoder::setData):
        (WebCore::DeferredImageDecoder::isSizeAvailable):
        (WebCore::DeferredImageDecoder::size):
        (WebCore::DeferredImageDecoder::frameSizeAtIndex):
        (WebCore::DeferredImageDecoder::frameCount):
        (WebCore::DeferredImageDecoder::repetitionCount):
        (WebCore::DeferredImageDecoder::clearFrameBufferCache):
        (WebCore::DeferredImageDecoder::frameHasAlphaAtIndex):
        (WebCore::DeferredImageDecoder::frameBytesAtIndex):
        * platform/graphics/chromium/DeferredImageDecoder.h: Added.
        (WebCore):
        (DeferredImageDecoder):
        * platform/graphics/chromium/ImageDecodingStore.cpp: Added.
        (WebCore::ImageDecodingStore::ImageDecodingStore):
        (WebCore):
        (WebCore::ImageDecodingStore::~ImageDecodingStore):
        (WebCore::ImageDecodingStore::instanceOnMainThread):
        (WebCore::ImageDecodingStore::initializeOnMainThread):
        (WebCore::ImageDecodingStore::shutdown):
        (WebCore::ImageDecodingStore::isLazyDecoded):
        (WebCore::ImageDecodingStore::createLazyDecodedSkBitmap):
        (WebCore::ImageDecodingStore::resizeLazyDecodedSkBitmap):
        (WebCore::ImageDecodingStore::setData):
        (WebCore::ImageDecodingStore::lockPixels):
        (WebCore::ImageDecodingStore::unlockPixels):
        (WebCore::ImageDecodingStore::frameGeneratorBeingDestroyed):
        (WebCore::ImageDecodingStore::calledOnValidThread):
        (WebCore::ImageDecodingStore::lookupFrameCache):
        (WebCore::ImageDecodingStore::deleteFrameCache):
        * platform/graphics/chromium/ImageDecodingStore.h: Added.
        (WebCore):
        (ImageDecodingStore):
        (WebCore::ImageDecodingStore::create):
        * platform/graphics/chromium/ScaledImageFragment.cpp: Added.
        (WebCore):
        (WebCore::ScaledImageFragment::~ScaledImageFragment):
        (WebCore::ScaledImageFragment::ScaledImageFragment):
        (WebCore::ScaledImageFragment::isEqual):
        * platform/graphics/chromium/ScaledImageFragment.h: Added.
        (WebCore):
        (ScaledImageFragment):
        (WebCore::ScaledImageFragment::create):
        (WebCore::ScaledImageFragment::bitmap):
        (WebCore::ScaledImageFragment::isComplete):
        * platform/graphics/chromium/ImageFrameGenerator.cpp: Added.
        (WebCore):
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::~ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::decoder):
        (WebCore::ImageFrameGenerator::setData):
        * platform/graphics/chromium/ImageFrameGenerator.h: Added.
        (WebCore):
        (ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::create):
        (WebCore::ImageFrameGenerator::size):
        (WebCore::ImageFrameGenerator::imageId):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp: Added.
        (WebCore):
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::~LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::isScaled):
        (WebCore::LazyDecodingPixelRef::isClipped):
        (WebCore::LazyDecodingPixelRef::onLockPixels):
        (WebCore::LazyDecodingPixelRef::onUnlockPixels):
        (WebCore::LazyDecodingPixelRef::onLockPixelsAreWritable):
        * platform/graphics/chromium/LazyDecodingPixelRef.h: Added.
        (WebCore):
        (LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::frameGenerator):
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::resizedBitmap):
        * platform/image-decoders/ImageDecoder.h:
        (ImageFrame):
        (WebCore::ImageFrame::setSkBitmap):
        (WebCore::ImageFrame::getSkBitmap):

2012-10-18  Yael Aharon  <yael.aharon@intel.com>

        [EFL] GraphicsContext3D::m_renderStyle is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=99721

        Reviewed by Antonio Gomes.

        Initialize GraphicsContext3D::m_renderStyle.

        No new tests, no new functionality.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2012-10-19  Dongwoo Joshua Im  <dw.im@samsung.com>

        Rename ENABLE_CSS3_TEXT_DECORATION to ENABLE_CSS3_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=99804

        Reviewed by Julien Chaffraix.

        CSS3 text related properties will be implemented under this flag,
        including text decoration, text-align-last, and text-justify.

        No new functionality, no new test.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.features.am:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addTextDecorationProperty):
        (WebCore::CSSParser::parseTextDecoration):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        (StyleRareNonInheritedData):

2012-10-19  Nate Chapin  <japhet@chromium.org>

        Reorder some functions in SubresourceLoader to permit main resources
        https://bugs.webkit.org/show_bug.cgi?id=99769

        Reviewed by Adam Barth.

        Most resource types that go through the memory cache (and therefore
        through SubresourceLoader) are not sensitive to the exact ordering of
        the callbacks they receive, particularly as it relates to ResourceLoadNotifier
        calls.  Main resources are not so lenient.  For main resources to be cacheable
        and maintain the current behavior as precisely as possible, we will need to
        rearrange SubresourceLoader's willSendRequest() and didReceiveData().

        No new tests, refactor only.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest): There are a series of checks that can result
            in the request being canceled, plus calls to CachedResource::willSendRequest() and
            ResourceLoader::willSendRequest().  MainResourceLoader (which will be a
            CachedResourceClient) has work it expects to do before ResourceLoader::willSendRequest()
            is called, but the calls are out of order for that, so swap those.
        (WebCore::SubresourceLoader::didReceiveData): We need to populate ResourceLoader::m_resourceData
            before notifying CachedResource of new data, but we also want to do CachedResourceClients calls
            before calling ResourceLoadNotifier. This means we can't delegate to ResourceLoader.

2012-10-19  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-hidden=false does not work as expected
        https://bugs.webkit.org/show_bug.cgi?id=98787

        Reviewed by Beth Dakin.

        ARIA requires that aria-hidden=false override an element's native visibility and include that
        node in the AX hierarchy.
 
        To accomplish this we have to allow invisible items to be included, as well as items that
        have no renderers associated with them.

        Test: accessibility/aria-hidden-negates-no-visibility.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGrid.h:
        (AccessibilityARIAGrid):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore):
        (WebCore::AccessibilityNodeObject::boundingBoxRect):
        (WebCore::AccessibilityNodeObject::insertChild):
        (WebCore::AccessibilityNodeObject::addChild):
        (WebCore::AccessibilityNodeObject::addChildren):
        (WebCore::AccessibilityNodeObject::textUnderElement):
        * accessibility/AccessibilityNodeObject.h:
        (AccessibilityNodeObject):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::textIteratorBehaviorForTextRange):
        (WebCore):
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):
        (WebCore::AccessibilityObject::addChild):
        (WebCore::AccessibilityObject::insertChild):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnoredBase):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):

2012-10-19  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Rename owner to client in MediaStreamDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=99593

        Reviewed by Adam Barth.

        This patch renames owner to client in MediaStreamDescriptor as discussed in #99080.

        No new tests needed, covered by existing tests.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        * Modules/mediastream/MediaStream.h:
        (MediaStream):
        * Modules/mediastream/PeerConnection00.cpp:
        (WebCore::PeerConnection00::didRemoveRemoteStream):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::didRemoveRemoteStream):
        * platform/mediastream/MediaStreamCenter.cpp:
        (WebCore::MediaStreamCenter::endLocalMediaStream):
        (WebCore::MediaStreamCenter::addMediaStreamTrack):
        (WebCore::MediaStreamCenter::removeMediaStreamTrack):
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptorClient::~MediaStreamDescriptorClient):
        (WebCore::MediaStreamDescriptor::client):
        (WebCore::MediaStreamDescriptor::setClient):
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
        (MediaStreamDescriptor):

2012-10-19  Shinya Kawanaka  <shinyak@chromium.org>

        Elements assigned to <shadow> should not be reprojected.
        https://bugs.webkit.org/show_bug.cgi?id=99680

        Reviewed by Dimitri Glazkov.

        In the current spec, we don't have shadow reprojection, i.e. elements assigned to <shadow> should not be
        reprojected to content. However, we can select them by <shadow>.

        Tests: fast/dom/shadow/content-reprojection-complex.html
               fast/dom/shadow/content-reprojection-shadow.html
               fast/dom/shadow/shadow-reprojection-prohibited.html

        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute): When a node is <shadow>, we should not add elements assigned to <shadow>
        to POOL. Instead, <shadow> itself should be added to POOL.
        * html/shadow/HTMLContentElement.h:
        (WebCore::isHTMLContentElement):
        (WebCore):

2012-10-19  Chris Fleizach  <cfleizach@apple.com>

        VO issues with hidden <legend> and last explicitly labelled element within a group <fieldset>
        https://bugs.webkit.org/show_bug.cgi?id=96325

        Reviewed by Beth Dakin.

         When finding a <legend> for accessibility, we need to consider those that are offscreen. This patch
         modifies the original findLegend method to take a parameter to determine what should be done.

        Test: accessibility/hidden-legend.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::titleUIElement):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::findLegend):
        * rendering/RenderFieldset.h:

2012-10-17  Chris Fleizach  <cfleizach@apple.com>

        AX: Refactor accessibility name computation so it's more platform independent
        https://bugs.webkit.org/show_bug.cgi?id=99502

        Reviewed by Beth Dakin.

        The current model of determining the accessible text for an object has a lot of Mac biases built in
        due to legacy implementation. 

        This change categorizes and orders accessibility text based on WAI-ARIA text computation rules and then
        allows the platform (only Mac right now) to decide how best to apply that text to its own AX API.
        http://www.w3.org/TR/wai-aria/roles#textalternativecomputation

        This change tried very hard not to change any test behavior, even though it exposed a number of weird
        edge cases where we were treating attributes differently based on element type. 

        Future patches will resolve those discrepancies.

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::accessibilityText):
        * accessibility/AccessibilityImageMapLink.h:
        (AccessibilityImageMapLink):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::accessibilityText):
        * accessibility/AccessibilityMediaControls.h:
        (AccessibilityMediaControl):
        (WebCore::AccessibilityMediaTimeDisplay::isMediaControlLabel):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::titleElementText):
        (WebCore::AccessibilityNodeObject::accessibilityText):
        (WebCore::AccessibilityNodeObject::ariaLabeledByText):
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::alternativeTextForWebArea):
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::helpText):
        (WebCore::AccessibilityNodeObject::ariaDescribedByAttribute):
        * accessibility/AccessibilityNodeObject.h:
        (AccessibilityNodeObject):
        * accessibility/AccessibilityObject.h:
        (AccessibilityText):
        (WebCore::AccessibilityText::AccessibilityText):
        (WebCore::AccessibilityObject::isMediaControlLabel):
        (AccessibilityObject):
        (WebCore::AccessibilityObject::accessibilityText):
        (WebCore::AccessibilityObject::setAccessibleName):
        (WebCore::AccessibilityObject::accessibilityDescription):
        (WebCore::AccessibilityObject::title):
        (WebCore::AccessibilityObject::helpText):
        (WebCore::AccessibilityObject::stringValue):
        (WebCore::AccessibilityObject::textUnderElement):
        (WebCore::AccessibilityObject::text):
        (WebCore::AccessibilityObject::textLength):
        (WebCore::AccessibilityObject::setRoleValue):
        (WebCore::AccessibilityObject::roleValue):
        (WebCore::AccessibilityObject::selection):
        (WebCore::AccessibilityObject::hierarchicalLevel):
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityRenderObject.h:
        (AccessibilityRenderObject):
        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper titleTagShouldBeUsedInDescriptionField]):
        (-[WebAccessibilityObjectWrapper accessibilityTitle]):
        (-[WebAccessibilityObjectWrapper accessibilityDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityHelpText]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * platform/LocalizedStrings.cpp:
        (WebCore::localizedMediaControlElementHelpText):

2012-10-19  Kent Tamura  <tkent@chromium.org>

        Use Localizer::monthFormat to construct input[type=month] UI
        https://bugs.webkit.org/show_bug.cgi?id=99818

        Reviewed by Kentaro Hara.

        Use an LDML format returned by Localizer::monthFormat for
        input[type=month] UI.

        Because the format may contain symbolic month names and symbolic
        stand-alone month names, we need to add:
         - Symbolic/numeric detection in DateTimeEditBuilder
         - Normal/stand-alone detection in DateTimeEditBuilder
         - Symbolic edit field for months

        Test: fast/forms/month-multiple-fields/month-multiple-fields-appearance-l10n.html,
              fast/forms/month-multiple-fields/month-multiple-fields-keyboard-events.html

        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::setupLayoutParameters):
        Use Localizer::monthFormat.

        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField):
        - If the number of continuous field character is greater than 2, use
        DateTimeSymbolicMonthFieldElement.
        - Supports stand-alone month field.

        * html/shadow/DateTimeFieldElements.h:
        (DateTimeSymbolicMonthFieldElement): Added. A subclass of DateTimeSymbolicFieldElement.
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeSymbolicMonthFieldElement::DateTimeSymbolicMonthFieldElement):
        Added.
        (WebCore::DateTimeSymbolicMonthFieldElement::create): Added.
        (WebCore::DateTimeSymbolicMonthFieldElement::populateDateTimeFieldsState):
        We need to add 1 because the internal integer representation is 0-based
        and DateTimeFieldsState uses 1-based month.
        (WebCore::DateTimeSymbolicMonthFieldElement::setValueAsDate):
        DateComponents::month is 0-based.
        (WebCore::DateTimeSymbolicMonthFieldElement::setValueAsDateTimeFieldsState):
        We need to subtract 1 because the internal integer representation is 0-based
        and DateTimeFieldsState uses 1-based month.

        * html/shadow/DateTimeSymbolicFieldElement.h:
        (WebCore::DateTimeSymbolicFieldElement::symbolsSize):
        Added for DateTimeSymbolicMonthFieldElement::setValueAsDateTimeFieldsState.

2012-10-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: inspector/styles/styles-history.html is failing Text on Windows and Linux
        https://bugs.webkit.org/show_bug.cgi?id=99519

        Reviewed by Alexander Pavlov.

        Extracted _styleContentSet callback in a class method to make it sniffable by tests.

        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StyleFile.prototype._commitIncrementalEdit):
        (WebInspector.StyleFile.prototype._styleContentSet):

2012-10-19  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: add object-src 'none' to the inspector.html
        https://bugs.webkit.org/show_bug.cgi?id=99728

        Reviewed by Vsevolod Vlasov.

        * inspector/front-end/inspector.html:

2012-10-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Get rid of isSnippetEvaluation flag on UISourceCode
        https://bugs.webkit.org/show_bug.cgi?id=99823

        Reviewed by Yury Semikhatsky.

        Replaced isSnippetEvaluation flag with a pair of isSnippet and isTemporary set.

        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._getOrCreateTemporaryUISourceCode):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._releasedUISourceCodes):
        (WebInspector.ScriptSnippetModel.prototype._createUISourceCodeForScript):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.ScriptsNavigator.prototype._snippetsNavigatorViewForUISourceCode):
        (WebInspector.ScriptsNavigator.prototype.revealUISourceCode):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        * inspector/front-end/Workspace.js:
        (WebInspector.Project.prototype.addTemporaryUISourceCode):

2012-10-19  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Invalid Regex in SASSSourceMapping/didRequestContent, breaks Support for Sass experiment
        https://bugs.webkit.org/show_bug.cgi?id=99729

        Reviewed by Vsevolod Vlasov.

        Decode only the first line number digit written in a six-character escaped Unicode format.

        * inspector/front-end/SASSSourceMapping.js:
        (WebInspector.SASSSourceMapping.prototype._resourceAdded.didRequestContent):
        (WebInspector.SASSSourceMapping.prototype._resourceAdded):

2012-10-19  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Update the RuntimeEnabledFeatures flags
        https://bugs.webkit.org/show_bug.cgi?id=99714

        Reviewed by Adam Barth.

        Updating the RuntimeEnabledFeatures flags to match reality:
        isMediaStreamEnabled and isPeerConnectionEnabled should be true by default and
        isDeprecatedPeerConnectionEnabled false.

        Patch covered by existing tests.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):

2012-10-19  Adam Barth  <abarth@webkit.org>

        [V8] Simplify GCPrologueVisitor
        https://bugs.webkit.org/show_bug.cgi?id=99819

        Reviewed by Kentaro Hara.

        Previously, GCPrologueVisitor used a complicated traits-based template
        design. That's not necessary. We can just implement it directly without
        template magic.

        The one subtly here is that MessagePort is not actually a subclass of
        ActiveDOMObject. The next stage of this cleanup is to make MessagePort
        inherit from ActiveDOMObject and remove this special case entirely.

        * bindings/v8/V8GCController.cpp:
        (WebCore::EnsureWeakDOMNodeVisitor::visitDOMWrapper):
        (WebCore):
        (WebCore::ActiveDOMObjectPrologueVisitor::visitDOMWrapper):
        (WebCore::NodeVisitor::visitDOMWrapper):
        (WebCore::V8GCController::gcPrologue):

2012-10-19  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Saving HAR, snapshots and timeline data do not work in remote debugging mode
        https://bugs.webkit.org/show_bug.cgi?id=99179

        Reviewed by Yury Semikhatsky.

        Added method "close" to InspectorFrontendHost.
        Symantically, this method forces to flush all unsaved buffers for
        specified file. In native implementation this turns to be no-op.

        In stub implementation "close" causes compilation of blob object an
        navigating to blob-schema url.

        Removed "canAppend", as appending in now suppurted
        by all implementations.

        Repaced schema "data" with "blob" in InspectorFrontendHostStub "save"
        to avoid out-of-memory errors.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::close): Compiles blob object and
        navigates to blob-object url.
        (WebCore):
        * inspector/InspectorFrontendHost.h: Added "close" method.
        * inspector/InspectorFrontendHost.idl: Ditto.
        * inspector/front-end/FileManager.js:
        (WebInspector.FileManager.prototype.close): Proxy to InspectorFrontend.
        * inspector/front-end/FileUtils.js:
        (WebInspector.FileOutputStream.prototype.close):
        Invoke "close" on FileManager.
        (WebInspector.FileOutputStream.prototype._onAppendDone): Ditto.
        * inspector/front-end/HandlerRegistry.js: Added mandatory "close" call.
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapProfileHeader.prototype.canSaveToFile): Fixed check.
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub):
        Added "appendable" behaviour emulation.
        * inspector/front-end/SourceFrame.js: Added mandatory "close" call.
        * inspector/front-end/externs.js: Replaced "canAppend" with "close"

2012-10-18  Dominic Mazzoni  <dmazzoni@google.com>

        AX: labelForElement is slow when there are a lot of DOM elements
        https://bugs.webkit.org/show_bug.cgi?id=97825

        Reviewed by Ryosuke Niwa.

        Adds a DocumentOrderedMap to TreeScope that allows accessibility to
        quickly map from an id to the label for that id. This speeds up
        AccessibilityNode::labelForElement, which was a bottleneck in Chromium
        when accessibility was on.

        Tests: accessibility/title-ui-element-correctness.html
               perf/accessibility-title-ui-element.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::labelForElement):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesLabelForAttribute):
        (WebCore):
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getElementByLabelForAttribute):
        * dom/DocumentOrderedMap.h:
        (DocumentOrderedMap):
        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        (WebCore::Element::updateLabel):
        (WebCore):
        (WebCore::Element::willModifyAttribute):
        * dom/Element.h:
        (Element):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::destroyTreeScopeData):
        (WebCore::TreeScope::addLabel):
        (WebCore):
        (WebCore::TreeScope::removeLabel):
        (WebCore::TreeScope::labelElementForId):
        * dom/TreeScope.h:
        (WebCore):
        (TreeScope):
        (WebCore::TreeScope::shouldCacheLabelsByForAttribute):

2012-10-19  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Update localizedStrings.js
        https://bugs.webkit.org/show_bug.cgi?id=99701

        Reviewed by Yury Semikhatsky.

        Fixed most of missing strings and orphans.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/SettingsScreen.js:

2012-10-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI provide data for mixing with tcmalloc heap dumps.
        https://bugs.webkit.org/show_bug.cgi?id=99457

        Reviewed by Yury Semikhatsky.

        countObjectSize now accepts ptr as the first argument and saves it into HashMap if the binary was ran with HEAPPROFILE env variable.
        getProcessMemoryDistribution does snapshot and calls the downstream code with the map of counted objects.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::dumpUncountedAllocatedObjects):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::reportJSHeapInfo):
        (WebCore::reportRenderTreeInfo):
        (WebCore):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::countObjectSize):
        (WebCore::MemoryInstrumentationClientImpl::reportMemoryUsage):
        * inspector/MemoryInstrumentationImpl.h:
        (MemoryInstrumentationClientImpl):
        (WebCore::MemoryInstrumentationClientImpl::countedObjects):

2012-10-19  Adam Barth  <abarth@webkit.org>

        [V8] DOMObjectVisitor does nothing
        https://bugs.webkit.org/show_bug.cgi?id=99812

        Reviewed by Kentaro Hara.

        This code doesn't do anything, even in Debug! We should just remove it.

        * bindings/v8/V8GCController.cpp:
        (WebCore):
        (WebCore::V8GCController::gcPrologue):
        (WebCore::V8GCController::gcEpilogue):

2012-10-19  Adam Barth  <abarth@webkit.org>

        [V8] Remove unused typedef from V8GCController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99808

        Reviewed by Kentaro Hara.

        This typedef is not used.

        * bindings/v8/V8GCController.cpp:

2012-10-18  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Property considered overridden if it is non-inherited important property in inherited style
        https://bugs.webkit.org/show_bug.cgi?id=99720

        Reviewed by Yury Semikhatsky.

        Non-inherited properties are now disregarded in inherited styles.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._refreshStyleRules):
        (WebInspector.StylesSidebarPane.prototype._markUsedProperties):

2012-10-18  Adam Barth  <abarth@webkit.org>

        [V8] GrouperVisitor is secretly two entirely separate objects
        https://bugs.webkit.org/show_bug.cgi?id=99810

        Reviewed by Kentaro Hara.

        We can separate out the two things that GrouperVisitor is trying to do
        because they have nothing to do with each other.

        * bindings/v8/V8GCController.cpp:
        (ObjectVisitor):
        (WebCore::ObjectVisitor::visitDOMWrapper):
        (WebCore):
        (WebCore::V8GCController::gcPrologue):

2012-10-18  Kiran Muppala  <cmuppala@apple.com>

        Automatically start plugins created within a user gesture, skipping snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=99778

        Reviewed by Alexey Proskuryakov.

        If a user gesture is being processed, do not set the display state of
        HTMLPluginImageElement to WaitingForSnapshot.

        No new tests, since it only affects when plugins switch from snapshot to running
        state.  Does not affect rendering of other elements.

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

2012-10-18  Kent Tamura  <tkent@chromium.org>

        Add shortMonthLabels and shortStandAloneMonthLabels to Localizer
        https://bugs.webkit.org/show_bug.cgi?id=99787

        Reviewed by Kentaro Hara.

        This is going to be used for input[type=month] UI. This doesn't affect
        any bahevior yet.

        Tests: Add some tests to Source/WebKit/chromium/tests/, and will add
        layout tests later.

        * platform/text/Localizer.h:
        (Localizer): Add shortMonthLabels and shortStandAloneMonthLabels as pure
        virtual member functions.

        * platform/text/LocaleICU.h:
        (LocaleICU): Declare shortMonthLabels and shortStandAloneMonthLabels.
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::shortMonthLabels): Added.
        (WebCore::LocaleICU::shortStandAloneMonthLabels): Added.

        * platform/text/LocaleNone.cpp:
        (LocaleNone): Declare shortMonthLabels and shortStandAloneMonthLabels.
        (WebCore::LocaleNone::shortMonthLabels):
        Added. Always returns English labels.
        (WebCore::LocaleNone::shortStandAloneMonthLabels):
        Addes. Just calls shortMonthLabels.

        * platform/text/LocaleWin.h:
        (LocaleWin): Declare shortMonthLabels and shortStandAloneMonthLabels.
        * platform/text/LocaleWin.cpp:
        (WebCore::LocaleWin::shortMonthLabels): Added.
        (WebCore::LocaleWin::shortStandAloneMonthLabels):
        Added. Always returns shortMonthLabels.

        * platform/text/mac/LocaleMac.h:
        (LocaleMac): Declare shortMonthLabels and shortStandAloneMonthLabels.
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::shortMonthLabels): Added.
        (WebCore::LocaleMac::shortStandAloneMonthLabels): Added.

2012-10-18  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Implement value sanitization algorithm for type=datetime
        https://bugs.webkit.org/show_bug.cgi?id=76893

        Reviewed by Kent Tamura.

        Implement the value sanitization algorithm for type=datetime that adjusts
        the value to a valid normalized forced-UTC global date and time string.
        See http://www.whatwg.org/specs/web-apps/current-work/multipage/common-microsyntaxes.html#valid-normalized-forced-utc-global-date-and-time-string

        Test: fast/forms/datetime/datetime-value-sanitization.html

        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::sanitizeValue): Implemented.
        (WebCore):
        * html/DateTimeInputType.h:
        (DateTimeInputType): Add sanitizeValue.
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::addMinute): Fixed a bug that caused wrong adjustment
        of timezone offset (e.g. 2012-10-17T01:00+01:00 -> 2012-10-17T01:-60Z).

2012-10-18  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix build warning.
        https://bugs.webkit.org/show_bug.cgi?id=99788

        Reviewed by Kentaro Hara.

        Use UNUSED_PARAM macro for removing -Wunused-parameter.

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

2012-10-18  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] WebKit2 does not build without PLUGIN_PROCESS on Mac
        https://bugs.webkit.org/show_bug.cgi?id=99771

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: The symbol is used by WebCore Test Support, move it
        to the general section.

2012-10-18  Adam Barth  <abarth@webkit.org>

        [V8] fast/dom/gc-9.html fails for document.styleSheets
        https://bugs.webkit.org/show_bug.cgi?id=99786

        Reviewed by Kentaro Hara.

        V8 needs to know about this IDL attribute as well.

        * css/StyleSheetList.idl:

2012-10-18  Adam Barth  <abarth@webkit.org>

        [V8] fast/dom/gc-9.html fails for document.implementation
        https://bugs.webkit.org/show_bug.cgi?id=99783

        Reviewed by Kentaro Hara.

        In order to correctly manage the lifetime of document.implementation,
        we need to implement GenerateIsReachable=ImplDocument.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateVisitDOMWrapper):
        * bindings/scripts/IDLAttributes.txt:
        * dom/DOMImplementation.idl:

2012-10-18  Chris Fleizach  <cfleizach@apple.com>

        AX: Crashes in WebProcess at com.apple.WebCore: -[AccessibilityObjectWrapper remoteAccessibilityParentObject] + 78
        https://bugs.webkit.org/show_bug.cgi?id=96443

        Reviewed by Beth Dakin.

        Separate out the chain of calls so that the number of times document() is called is reduced and it will be easier
        to determine which line this crash is happening on.

        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
        (-[WebAccessibilityObjectWrapper remoteAccessibilityParentObject]):

2012-10-18  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Refactor IDBDatabaseBackendImpl to use IDBDatabaseMetadata
        https://bugs.webkit.org/show_bug.cgi?id=99773

        Reviewed by Tony Chang.

        Refactor to begin separating out metadata from stateful backend objects,
        in preparation for https://bugs.webkit.org/show_bug.cgi?id=99774.

        Also includes some #include dependency cleanup so that the backing store
        depends less on the stateful backend objects.

        No new tests as this is purely a refactor.

        * Modules/indexeddb/IDBBackingStore.h:
        (WebCore):
        (IDBBackingStore):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::openInternal):
        (WebCore::IDBDatabaseBackendImpl::metadata):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::setIntVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackendImpl::openConnectionWithVersion):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        (WebCore::IDBDatabaseBackendImpl::resetVersion):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::id):
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::deleteDatabase):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
        * Modules/indexeddb/IDBTransaction.h:
        (WebCore):

2012-10-18  Peter Kasting  <pkasting@google.com>

        [Skia] Set m_hasAlpha correctly in ImageFrame::copyBitmapData.
        https://bugs.webkit.org/show_bug.cgi?id=99781

        Reviewed by Adam Barth.

        No tests, since the actual effects of this bug are fickle and it's not
        clear how to extract and check particular subframes of an animated GIF.

        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::copyBitmapData):

2012-10-18  Pan Deng  <pan.deng@intel.com>

        [Resource Timing]Implementation of resource timing buffer size restriction functionality
        https://bugs.webkit.org/show_bug.cgi?id=84885.

        Reviewed by Tony Gentilcore.

        http://www.w3.org/TR/2012/CR-resource-timing-20120522/
        This patch enable functionality of set buffer size(default is 150 as spec). When buffer is full, resourceTimingBufferFull event will be fired. Incoming entries will be dropped if no more space for them. 

        Tests: http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_buffer_full_when_populate_entries.html
               http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_buffer_full_when_shrink_buffer_size.html
               http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_buffer_size_restriction.html
               http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_clear_resource_timing_functionality.html
               http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_on_shrink_buffer_size.html
               http/tests/w3c/webperf/submission/Intel/resource-timing/test_resource_timing_store_and_clear_during_callback.html

        * page/Performance.cpp:
        (WebCore):
        (WebCore::Performance::Performance):
        (WebCore::Performance::webkitSetResourceTimingBufferSize):
        (WebCore::Performance::addResourceTiming):
        (WebCore::Performance::isResourceTimingBufferFull):
        * page/Performance.h:
        (Performance):

2012-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r130411): Copying & pasting the first line of text can move caret to the end of text area
        https://bugs.webkit.org/show_bug.cgi?id=99663

        Reviewed by Enrica Casucci and Levi Weintraub.

        The bug was caused by positionOnlyToBeUpdated's offset not being shifted correctly in
        ReplaceSelectionCommand::mergeTextNodesAroundPosition. Suppose we have text nodes t1 and t2 and
        positionOnlyToBeUpdated had offset k in t2. When t2 is merged into t1, positionOnlyToBeUpdated should be
        moved to (t1, n + k) where n is the ORIGINAL length of t1 before t2 is merged. But we were using
        the length after t2 is merged.

        Fixed the bug by saving the original length of t1 and using that in the offset adjustment.
        Also use the right offset.

        Test: editing/pasteboard/copy-paste-first-line-in-textarea.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition):

2012-10-18  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Invalid read from WebKit::DOMObjectCache::clearByFrame
        https://bugs.webkit.org/show_bug.cgi?id=82882

        Reviewed by Xan Lopez.

        Based on a patch by Milan Crha <mcrha@redhat.com>

        Prevent an invalid access to a pointer while clearing the DOM
        object cache.
        * bindings/gobject/DOMObjectCache.cpp:
        (WebKit::DOMObjectCache::clearByFrame): Prevent an invalid access.

2012-10-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131810.
        http://trac.webkit.org/changeset/131810
        https://bugs.webkit.org/show_bug.cgi?id=99762

        Broke linux debug webkit_unit_tests (Requested by
        danakj|gardening on #webkit).

        * WebCore.gypi:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/ImageSource.h:
        (WebCore):
        (ImageSource):
        * platform/graphics/chromium/DeferredImageDecoder.cpp: Removed.
        * platform/graphics/chromium/DeferredImageDecoder.h: Removed.
        * platform/graphics/chromium/ImageDecodingStore.cpp: Removed.
        * platform/graphics/chromium/ImageDecodingStore.h: Removed.
        * platform/graphics/chromium/ImageFrameGenerator.cpp: Removed.
        * platform/graphics/chromium/ImageFrameGenerator.h: Removed.
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp: Removed.
        * platform/graphics/chromium/LazyDecodingPixelRef.h: Removed.
        * platform/graphics/chromium/ScaledImageFragment.cpp: Removed.
        * platform/graphics/chromium/ScaledImageFragment.h: Removed.
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::resizedBitmap):
        * platform/image-decoders/ImageDecoder.h:
        (ImageFrame):

2012-10-18  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Do some cleanup in the chromium WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=99713

        Reviewed by Adam Barth.

        Removing the deprecated version of WebMediaStreamDescriptor::initialize.

        No testing needed since only an unused function is removed.

        * platform/chromium/support/WebMediaStreamDescriptor.cpp:

2012-10-18  Alpha Lam  <hclam@chromium.org>

        [chromium] Implement deferred image decoding
        https://bugs.webkit.org/show_bug.cgi?id=94240

        Reviewed by Stephen White.

        Objectives:

        To record image decoding operations during painting and to defer
        decoding operations until rasterization.

        Rationale:

        This is a key feature that enables impl-side painting which requires
        fast recording of drawing operations. The existing decode-on-draw
        restricts that recording has to block on expensive decoding operations.
        This change allows recording of image decoding operations during paint
        time.

        Design:

        Image decoding happens when a BitmapImage is drawn into a
        GraphicsContext. When per-tile painting is enabled GraphicsContext
        is backed by SkCanvas in recording mode. This SkCanvas records drawing
        and image decoding operations to minimize recording time.

        An image decoding operation is recorded as a SkPixelRef object
        implemented by LazyDecodingPixelRef. This object references raw encoded
        data, regions to be decoded and scaling information.

        When used in conjunction with per-tile painting this feature defers
        image decoding until the SkCanvas referencing the image is rasterized.

        Both recording and rasterization happen on the main thread.

        Performance Impact:

        This feature is enabled by WebKit::setDeferredImageDecodingEnabled()
        and does not have an impact when disabled.

        This feature is disabled by default.

        Upcoming Changes:

        1. Implement a full-featured image cache in ImageDecodingStore.
        2. Allow rasterization and decoding on impl thread.

        Classes Involved:

        BitmapImage

        BitmapImage is the entry point for deferred image decoding. When
        drawing a BitmapImage into a GraphicsContext it makes a request to
        create a NativeImageSkia. We substitute the content in NativeImageSkia
        such that it is lazily decoded.

        DeferredImageDecoder

        This is the platform implementation of a image decoder for Chromium.
        This is a bridge layer that either delegates calls to the actual
        ImageDecoder or create a lazily-decoded SkBitmap and delegates calls
        to ImageDecodingStore.

        ImageDecodingStore

        This object manages all encoded images. It keeps track of encoded
        data and the corresponding ImageDecoder for doing actual decoding. It
        is also responsible for generating lazily decoded SkBitmaps. This
        SkBitmap contains a LazyDecodingPixelRef object which references to an
        image entry in ImageDecodingStore.

        ScaledImageFragment

        A container for a scaled image fragment. In addition to bitmap pixels
        it contains information about the ID of the image, scale and clipping.

        ImageFrameGenerator

        This object is responsible for generating decoded pixels. It is also
        a container for encoded image data and corresponding image decoder.

        LazyDecodingPixelRef

        This object is embedded in a SkBitmap to enable lazy decoding. When
        SkBitmap needs to access pixels LazyDecodingPixelRef is locked. It
        contains information to locate an image and scaling info, these
        information is submitted to ImageDecodingStore to access actual pixels.

        Layout tests. There are about 80 tests in this virtual test suite
        running this feature in this directory:

        platform/chromium/virtual/deferred/fast/images

        Unit tests. Added DeferredImageDecoderTest to verify deferred
        image decoding behavior.

        * WebCore.gypi:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/ImageSource.h:
        (WebCore):
        (ImageSource):
        * platform/graphics/chromium/DeferredImageDecoder.cpp: Added.
        (WebCore):
        (WebCore::DeferredImageDecoder::DeferredImageDecoder):
        (WebCore::DeferredImageDecoder::~DeferredImageDecoder):
        (WebCore::DeferredImageDecoder::create):
        (WebCore::DeferredImageDecoder::createForTesting):
        (WebCore::DeferredImageDecoder::filenameExtension):
        (WebCore::DeferredImageDecoder::frameBufferAtIndex):
        (WebCore::DeferredImageDecoder::setData):
        (WebCore::DeferredImageDecoder::isSizeAvailable):
        (WebCore::DeferredImageDecoder::size):
        (WebCore::DeferredImageDecoder::frameSizeAtIndex):
        (WebCore::DeferredImageDecoder::frameCount):
        (WebCore::DeferredImageDecoder::repetitionCount):
        (WebCore::DeferredImageDecoder::clearFrameBufferCache):
        (WebCore::DeferredImageDecoder::frameHasAlphaAtIndex):
        (WebCore::DeferredImageDecoder::frameBytesAtIndex):
        * platform/graphics/chromium/DeferredImageDecoder.h: Added.
        (WebCore):
        (DeferredImageDecoder):
        * platform/graphics/chromium/ImageDecodingStore.cpp: Added.
        (WebCore::ImageDecodingStore::ImageDecodingStore):
        (WebCore):
        (WebCore::ImageDecodingStore::~ImageDecodingStore):
        (WebCore::ImageDecodingStore::instanceOnMainThread):
        (WebCore::ImageDecodingStore::initializeOnMainThread):
        (WebCore::ImageDecodingStore::shutdown):
        (WebCore::ImageDecodingStore::isLazyDecoded):
        (WebCore::ImageDecodingStore::createLazyDecodedSkBitmap):
        (WebCore::ImageDecodingStore::resizeLazyDecodedSkBitmap):
        (WebCore::ImageDecodingStore::setData):
        (WebCore::ImageDecodingStore::lockPixels):
        (WebCore::ImageDecodingStore::unlockPixels):
        (WebCore::ImageDecodingStore::frameGeneratorBeingDestroyed):
        (WebCore::ImageDecodingStore::calledOnValidThread):
        (WebCore::ImageDecodingStore::lookupFrameCache):
        (WebCore::ImageDecodingStore::deleteFrameCache):
        * platform/graphics/chromium/ImageDecodingStore.h: Added.
        (WebCore):
        (ImageDecodingStore):
        (WebCore::ImageDecodingStore::create):
        * platform/graphics/chromium/ScaledImageFragment.cpp: Added.
        (WebCore):
        (WebCore::ScaledImageFragment::~ScaledImageFragment):
        (WebCore::ScaledImageFragment::ScaledImageFragment):
        (WebCore::ScaledImageFragment::isEqual):
        * platform/graphics/chromium/ScaledImageFragment.h: Added.
        (WebCore):
        (ScaledImageFragment):
        (WebCore::ScaledImageFragment::create):
        (WebCore::ScaledImageFragment::bitmap):
        (WebCore::ScaledImageFragment::isComplete):
        * platform/graphics/chromium/ImageFrameGenerator.cpp: Added.
        (WebCore):
        (WebCore::ImageFrameGenerator::ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::~ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::decoder):
        (WebCore::ImageFrameGenerator::setData):
        * platform/graphics/chromium/ImageFrameGenerator.h: Added.
        (WebCore):
        (ImageFrameGenerator):
        (WebCore::ImageFrameGenerator::create):
        (WebCore::ImageFrameGenerator::size):
        (WebCore::ImageFrameGenerator::imageId):
        * platform/graphics/chromium/LazyDecodingPixelRef.cpp: Added.
        (WebCore):
        (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::~LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::isScaled):
        (WebCore::LazyDecodingPixelRef::isClipped):
        (WebCore::LazyDecodingPixelRef::onLockPixels):
        (WebCore::LazyDecodingPixelRef::onUnlockPixels):
        (WebCore::LazyDecodingPixelRef::onLockPixelsAreWritable):
        * platform/graphics/chromium/LazyDecodingPixelRef.h: Added.
        (WebCore):
        (LazyDecodingPixelRef):
        (WebCore::LazyDecodingPixelRef::frameGenerator):
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::resizedBitmap):
        * platform/image-decoders/ImageDecoder.h:
        (ImageFrame):
        (WebCore::ImageFrame::setSkBitmap):
        (WebCore::ImageFrame::getSkBitmap):

2012-10-18  Yael Aharon  <yael.aharon@intel.com>

        [EFL] GraphicsContext3D::m_renderStyle is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=99721

        Reviewed by Antonio Gomes.

        Initialize GraphicsContext3D::m_renderStyle.

        No new tests, no new functionality.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2012-10-18  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Validate types of built-in vertex attributes
        https://bugs.webkit.org/show_bug.cgi?id=98972

        Reviewed by Dean Jackson.

        Reject custom filters in which the author defined built-in attributes with the wrong type.
        For example, the GLSL declaration "attribute float a_position" is incorrect because
        a_position should be a vec4, not a float.

        Test: css3/filters/custom/invalid-custom-filter-attribute-types.html

        * platform/graphics/ANGLEWebKitBridge.h:
        (WebCore::ANGLEShaderSymbol::isSampler):
            Add const qualifier to isSampler method.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore):
        (WebCore::builtInAttributeNameToTypeMap):
            New file static function. Returns a map of the CSS Custom Filters built-in attribute
            names and their expected types.
        (WebCore::validateSymbols):
            New file static function. Loop through all of the symbols. Reject the shader if we find
            a built-in attribute defined with the wrong type.
        (WebCore::CustomFilterValidatedProgram::CustomFilterValidatedProgram):
            Call the new validateSymbols function. If it returns false, exit the constructor early,
            which rejects the program.
            Move the loop that checks if any uniform is a sampler into the the validateSymbols
            function.

2012-10-18  Mike Reed  <reed@google.com>

        Handle if we fail to allocate nonPlatformCanvas in ImageBuffer constructor
        https://bugs.webkit.org/show_bug.cgi?id=99752

        Reviewed by Stephen White.

        Current code does not check if we were able to allocate the pixels, but still returns the canvas.
        However, the caller explicitly is checking for null on failure, so it will continue (and possibly
        crash later on).
        This change brings the nonPlatformCanvas behavior inline with createAcceleratedCanvas and
        TryCreateBitmapCanvas, both of which are also called by ImageBuffer's constructor.

        No new tests. Existing tests exercise ImageBuffer constructor.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::createNonPlatformCanvas):

2012-10-18  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=99668
        REGRESSION: Crash in 
        WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion
        -and corresponding-
        <rdar://problem/12491901>

        Reviewed by Simon Fraser.

        http://trac.webkit.org/changeset/130783 changed the lifetime of the 
        ScrollingStateTree's rootStateNode. Before that patch, the root state 
        node was never destroyed. It was just constantly re-used for 
        different RenderLayerBackings. This crash is just one of a few bugs 
        that has occurred because of that change. I have fixed the other bugs 
        individually, but I think that long-term, it is the safest solution 
        to go back to the original ownership model.

        So this patch ensures that the state tree will always have a root 
        state node. Instead of destroying and re-creating the root node when 
        it's scroll ID changes, we just update the ID.

        attachToStateTree() now takes an additional ID representing the ID of 
        the parent node.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::attachToStateTree):

        Add a way to set the scrolling node ID.
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::setScrollingNodeID):

        This code that provided a way to mark all properties as having 
        changed was added in http://trac.webkit.org/changeset/130989 as a way 
        to ensure we would re-set ScrollingThread's nodes when we destroyed 
        and re-created the rootStateNode. Now that we are no longer 
        destroying and re-creating the rootStateNode, this code is no longer 
        necessary.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        * page/scrolling/ScrollingStateScrollingNode.h:

        create m_rootStateNode right in the ScrollingStateTree's constructor.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::ScrollingStateTree):

        Don't let removeNode() destroy m_rootStateNode.
        (WebCore::ScrollingStateTree::removeNode):

        Also a part of r130989 that is no longer needed.
        (WebCore::ScrollingStateTree::rootLayerDidChange():
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::rootStateNode):
        (ScrollingStateTree):
        (WebCore::ScrollingStateTree::setRootStateNode):

        attachToStateTree() now takes an additional ID representing the ID of 
        the parent node.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):

        We no longer need ScrollingStateTree::rootLayerDidChange()
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewRootLayerDidChange):

        Do not destroy and re-create the state node. Just update its ID. When 
        we support child nodes soon, we will create them in this function.
        (WebCore::ScrollingCoordinatorMac::attachToStateTree):

        No need to null-check the rootStateNode.
        (WebCore::ScrollingCoordinatorMac::clearStateTree):

        Send 0 as the parent node ID to attachToStateTree() to represent the 
        root node.
        (WebCore::ScrollingCoordinatorMac::ensureRootStateNodeForFrameView):
        * rendering/RenderLayerBacking.cpp:

        RenderLayerBacking::attachToScrollingCoordinator() now takes a parent 
        layer.
        (WebCore::RenderLayerBacking::attachToScrollingCoordinator):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

        Since this is the root, send 0 to represent the parent layer.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2012-10-18  Yael Aharon  <yael.aharon@intel.com>

        [EFL] GraphicsContext3D::m_renderStyle is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=99721

        Reviewed by Antonio Gomes.

        Initialize GraphicsContext3D::m_renderStyle.

        No new tests, no new functionality.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2012-10-18  Brian White  <bcwhite@chromium.org>

        WebKit Doesn't Recognize Content-Language HTTP Header
        https://bugs.webkit.org/show_bug.cgi?id=97929

        Reviewed by Alexey Proskuryakov.

        The HTTP "Content-Language" header may be present and include the
        language of the page contents (as opposed to an embedded meta tag).

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

2012-10-18  Jer Noble  <jer.noble@apple.com>

        Crash in WebCore::Document::webkitExitFullscreen + 618
        https://bugs.webkit.org/show_bug.cgi?id=99496

        Reviewed by Eric Carlson.

        Prospective fix for null-dereference crash in Document::webkitExitFullscreen().

        * dom/Document.cpp:
        (WebCore::Document::webkitExitFullscreen): Null check page() before calling page()->chrome.

2012-10-18  Pablo Flouret  <pablof@motorola.com>

        Implement css3-conditional's @supports rule
        https://bugs.webkit.org/show_bug.cgi?id=86146

        Reviewed by Antti Koivisto.

        The "@supports" rule is a conditional group rule whose condition tests
        whether the user agent supports CSS property:value pairs.

        http://dev.w3.org/csswg/css3-conditional/#at-supports

        Test: css3/supports.html

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.features.am:
            Add an ENABLE_CSS3_CONDITIONAL_RULES flag.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore):
        (WebCore::CSSParser::detectSupportsToken): Tries to find 'and', 'not' and 'or' tokens.
        (WebCore::CSSParser::detectAtToken): Enter SupportsMode if @supports is detected.
        (WebCore::CSSParser::realLex): Try to detect supports tokens when in SupportsMode.
        * css/CSSParser.h: Added new SupportsMode parsing mode.
        (CSSParser):

2012-10-18  Marja Hölttä  <marja@chromium.org>

        Fix: CachedResourceLoader::requestSVGDocument was passing an URL as charset
        https://bugs.webkit.org/show_bug.cgi?id=99730

        Reviewed by Jochen Eisinger.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestSVGDocument):

2012-10-18  Jer Noble  <jer.noble@apple.com>

        Fullscreen movie controls behave incorrectly when clicked (and dragged)
        https://bugs.webkit.org/show_bug.cgi?id=99610

        Reviewed by Eric Carlson.

        Do not reset the relative drag position to 0,0 at the beginning of every drag.  Instead,
        store the cumulative drag offset and accumulate during each additional drag.

        No new tests; modified the fullscreen/video-controls-drag.html test.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::startDrag): Reset m_lastDragEventLocation.
        (WebCore::MediaControlPanelElement::continueDrag): Accumulate drag distance in m_cumulativeDragOffset.
        (WebCore::MediaControlPanelElement::resetPosition): Reset m_cumulativeDragOffset.
        * html/shadow/MediaControlElements.h:

2012-10-18  Brandon Jones  <bajones@google.com>

        Implement OES_element_index_uint / WEBKIT_OES_element_index_uint
        https://bugs.webkit.org/show_bug.cgi?id=97400

        Reviewed by Kenneth Russell.

        Implemented OES_element_index_uint WebGL extension

        Test: fast/canvas/webgl/oes-element-index-uint.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/OESElementIndexUint.cpp: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (WebCore::OESElementIndexUint::OESElementIndexUint):
        (WebCore::OESElementIndexUint::~OESElementIndexUint):
        (WebCore::OESElementIndexUint::getName):
        (WebCore::OESElementIndexUint::create):
        * html/canvas/OESElementIndexUint.h: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        (WebCore):
        (OESElementIndexUint):
        * html/canvas/OESElementIndexUint.idl: Copied from Source/WebCore/html/canvas/WebGLExtension.h.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::validateElementArraySize):
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        (WebCore::WebGLRenderingContext::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContext::validateRenderingState):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore):
        (WebGLRenderingContext):
        * platform/graphics/Extensions3D.h:
        (Extensions3D):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):

2012-10-18  Jer Noble  <jer.noble@apple.com>

        Add diagnostic logging to track per-page media engine usage.
        https://bugs.webkit.org/show_bug.cgi?id=99615
        <rdar://problem/12476473>

        Reviewed by Eric Carlson.

        Add diagnostic logging triggered only once-per-page and once-per-page-per-engine.

        * html/HTMLMediaElement.cpp:
        (WebCore::logMediaLoadRequest): Encapsulate diagnostic logging into single static method.
        (WebCore::HTMLMediaElement::mediaLoadingFailed): Call logMediaLoadRequest.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidCommitLoad): Reset the set of seen media engines.

        Add new methods to Page to track per-page media engine diagnostic info, similar to plugin diagnostic info.
        * page/Page.cpp:
        (WebCore::Page::hasSeenAnyMediaEngine):
        (WebCore::Page::hasSeenMediaEngine):
        (WebCore::Page::sawMediaEngine):
        (WebCore::Page::resetSeenMediaEngines):
        * page/Page.h:

        Add new static logging key definitions:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::pageContainsMediaEngineKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsAtLeastOneMediaEngineKey):
        * page/DiagnosticLoggingKeys.h:

2012-10-18  Michael Saboff  <msaboff@apple.com>

        Add 8-bit path to RenderBlock::handleTrailingSpaces()
        https://bugs.webkit.org/show_bug.cgi?id=99731

        Reviewed by Dan Bernstein.

        Factored out and added findFirstTrailingSpace() templated helper function that is called with the 
        approriate character pointer type.

        No tests needed, change covered by existing tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::findFirstTrailingSpace):
        (WebCore::RenderBlock::handleTrailingSpaces):

2012-10-18  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Add ExclusionShape::shapeBoundingBox() method
        https://bugs.webkit.org/show_bug.cgi?id=99216

        Reviewed by Dirk Schulze.

        Added a FloatRect::extend() method which simplifies writing loops that
        accumulate the bounding box for a sequence of FloatPoints. The new method
        is used by ExclusionPolygon to initialize the shape's logical and physical
        bounding boxes. This a clean-up, not a change in functionality. It's already
        covered by the existing fast/exclusions LayoutTests.

        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::extend): Extend the FloatRect's bounds to include a FloatPoint.
        (WebCore):
        * platform/graphics/FloatRect.h:
        (FloatRect): Added extend() method.
        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::ExclusionPolygon): Use FloatRect::extend() to compute the polygon's internal bounding box.
        * rendering/ExclusionShape.cpp:
        (WebCore::ExclusionShape::createExclusionShape): Use FloatRect::extend() to compute the polygon's physical bounding box.
        * rendering/ExclusionShape.h:
        (WebCore::ExclusionShape::shapeBoundingBox): Return the shape's bounding box in physical coordinates.
        (ExclusionShape):

2012-10-18  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Handle special case "empty" shapes
        https://bugs.webkit.org/show_bug.cgi?id=99342

        Reviewed by Dirk Schulze.

        Provide expclit coverage of the simple "empty" shape-inside shapes.
        Shapes will be considered "empty" in the sense that ExclusionShape::getIncludedIntervals()
        and ExclusionShape::getExcludedIntervals() will always return empty lists of intervals.
        This patch covers rectangles of zero width or height, circles with 0 radius, ellipses
        with 0 radiusX or radiusY, polygons with less than 3 vertices.

        Test: fast/exclusions/shape-inside/shape-inside-empty.html

        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::ExclusionPolygon): Initialize the m_empty flag.
        (WebCore::ExclusionPolygon::getExcludedIntervals): Added short-circuit return when the polygon is empty.
        (WebCore::ExclusionPolygon::getIncludedIntervals): Added short-circuit return when the polygon is empty.
        * rendering/ExclusionPolygon.h: Added the isEmpty() method.
        * rendering/ExclusionRectangle.cpp:
        (WebCore::ExclusionRectangle::getExcludedIntervals): Added short-circuit return when the rectangle is empty.
        (WebCore::ExclusionRectangle::getIncludedIntervals): Added short-circuit return when the rectangle is empty.
        * rendering/ExclusionRectangle.h: Added the isEmpty() method.
        * rendering/ExclusionShape.h: Added a virtual isEmpty() ExclusionShape method.
        (ExclusionShape):

2012-10-18  Takashi Sakamoto  <tasak@google.com>

        REGRESSION(r131464): Null-pointer crash in StyleResolver::styleForElement
        https://bugs.webkit.org/show_bug.cgi?id=99587

        Reviewed by Dimitri Glazkov.

        Since contents in datalist are not shown, summary in datalist is not
        shown either. So the summary has no render style. On the other hand,
        the summary is implemented by shadow DOM and it has some insertion
        point. Its child, e.g. title in the below test, is distributed.
        To solve the child's user-modify, looking at shadow host(=summary)'s
        style causes null-pointer crash.

        Test: fast/dom/shadow/user-modify-in-datalist-crash.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        Added a code to check whether the shadow host has any style or not.

2012-10-17  Philippe Normand  <pnormand@igalia.com>

        [GTK] AudioBusGtk sometimes fails to load the HRTF database
        https://bugs.webkit.org/show_bug.cgi?id=99601

        Reviewed by Martin Robinson.

        AudioBusGtk now first lookup for the uninstalled resource files,
        if the AUDIO_RESOURCES_PATH environment variable is
        set. Additionally the audio file reader is now better dealing with
        errors, returning an empty AudioBus in such cases and issuing
        warnings on the console output. The cleanup of some member
        variables was also moved to the destructor.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (AudioFileReader):
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader): Clear and free
        member variables. This was done in createBus before.
        (WebCore::AudioFileReader::handleMessage): Issue warnings in case
        of error and exit from the main loop so the pipeline is not
        forever stuck.
        (WebCore::AudioFileReader::createBus): Return an empty bus in case
        of error.
        * platform/audio/gtk/AudioBusGtk.cpp:
        (WebCore::AudioBus::loadPlatformResource): Load uninstalled
        resources first if AUDIO_RESOURCES_PATH is set.

2012-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: provisional change for merging "doced" state into the "dock side" enum.
        https://bugs.webkit.org/show_bug.cgi?id=99718

        Reviewed by Vsevolod Vlasov.

        Adds stub method that could be executed from the embedder.

        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setDockSide):

2012-10-18  Kent Tamura  <tkent@chromium.org>

        Add Localizer::monthFormat and implementations
        https://bugs.webkit.org/show_bug.cgi?id=99704

        Reviewed by Kentaro Hara.

        Localizer::monthFormat will be used for constructing input[type=month] UI.

        Tests: Add unit tests to Source/WebKit/chromium/tests/.

        * platform/text/Localizer.h:
        (Localizer): Declare pure virtual monthFormat function.

        * platform/text/LocaleNone.cpp:
        (LocaleNone): Declare monthFormat.
        (WebCore::LocaleNone::monthFormat):
        Added. Always reutrns an ISO-8601 format, "yyyy-MM"

        * platform/text/LocaleICU.h:
        (LocaleICU): Declare monthFormat.
        * platform/text/LocaleICU.cpp:
        (WebCore::getFormatForSkeleton):
        A helper to get a format for the specified skeleton.
        The overflow-allocalte-try-again pattern is similar to
        LocaleICU::decimalSymbol and LocaleICU::decimalTextAttribute.
        (WebCore::LocaleICU::monthFormat):
        Added. Calls getFormatForSkeleton with "yyyyMMM".

        * platform/text/mac/LocaleMac.h:
        (LocaleMac): Declare monthFormat.
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::monthFormat):
        Added. Calls NSDateFormatter::dateFormatFromTemplate with "yyyyMMM".

        * platform/text/LocaleWin.h:
        (LocaleWin): Declare monthFormat.
        * platform/text/LocaleWin.cpp:
        (WebCore::LocaleWin::monthFormat):
        Get a format by LOCALE_SYEARMONTH, and convert it to an LDML format.

2012-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: add X-WebKit-CSP header into inspector.html
        https://bugs.webkit.org/show_bug.cgi?id=99710

        Reviewed by Vsevolod Vlasov.

        A simple sanity measure.

        * inspector/front-end/inspector.html:

2012-10-18  Huang Dongsung  <luxtella@company100.net>

        [WK2] Add CustomFilterOperation serialization in ArgumentCoder.
        https://bugs.webkit.org/show_bug.cgi?id=98733

        Reviewed by Noam Rosenthal.

        Change CustomFilterOperation::parameters() to const function, because
        this method is a getter and a const instance needs to call this method.

        No new tests because there is no change in behavior.

        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::parameters):

2012-10-18  Hayato Ito  <hayato@chromium.org>

        treeScopeOfParent doesn't return the TreeScope of the parent
        https://bugs.webkit.org/show_bug.cgi?id=98207

        Reviewed by Hajime Morita.

        A minor clean up. Remove treeScopeOfParent() in Element.cpp.

        No tests needed, this is just a clean up.

        * dom/Element.cpp:
        (WebCore::Element::removedFrom):

2012-10-18  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Forcibly invoke property names suggestion box for empty prefix
        https://bugs.webkit.org/show_bug.cgi?id=99711

        Reviewed by Vsevolod Vlasov.

        Suggestions should be returned unconditionally for CSS property names, regardless of the prefix.

        * inspector/front-end/CSSCompletions.js:
        (WebInspector.CSSCompletions):
        (WebInspector.CSSCompletions.requestCSSNameCompletions):
        (WebInspector.CSSCompletions.prototype._firstIndexOfPrefix):
        * inspector/front-end/CSSKeywordCompletions.js:
        (WebInspector.CSSKeywordCompletions.forProperty):

2012-10-18  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Unreviewed, do not make UseV8.cmake executable.

        * UseV8.cmake: Removed property svn:executable.

2012-10-18  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add better RTCPeerConnectionHandler creation logic
        https://bugs.webkit.org/show_bug.cgi?id=99308

        Reviewed by Adam Barth.

        This patch makes sure that if the RTCPeerConnectionHandler can't be fully initialized/created
        the RTCPeerConnection constructor throws an exception.

        Not full testable, existing tests cover the normal case though.

        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandler::create):
        (WebCore::RTCPeerConnectionHandlerChromium::RTCPeerConnectionHandlerChromium):
        (WebCore::RTCPeerConnectionHandlerChromium::createWebHandler):
        (WebCore::RTCPeerConnectionHandlerChromium::initialize):
        (WebCore::RTCPeerConnectionHandlerChromium::createOffer):
        (WebCore::RTCPeerConnectionHandlerChromium::createAnswer):
        (WebCore::RTCPeerConnectionHandlerChromium::setLocalDescription):
        (WebCore::RTCPeerConnectionHandlerChromium::setRemoteDescription):
        (WebCore::RTCPeerConnectionHandlerChromium::updateIce):
        (WebCore::RTCPeerConnectionHandlerChromium::addIceCandidate):
        (WebCore::RTCPeerConnectionHandlerChromium::localDescription):
        (WebCore::RTCPeerConnectionHandlerChromium::remoteDescription):
        (WebCore::RTCPeerConnectionHandlerChromium::addStream):
        (WebCore::RTCPeerConnectionHandlerChromium::removeStream):
        (WebCore::RTCPeerConnectionHandlerChromium::getStats):
        (WebCore::RTCPeerConnectionHandlerChromium::openDataChannel):
        (WebCore::RTCPeerConnectionHandlerChromium::sendStringData):
        (WebCore::RTCPeerConnectionHandlerChromium::sendRawData):
        (WebCore::RTCPeerConnectionHandlerChromium::closeDataChannel):
        (WebCore::RTCPeerConnectionHandlerChromium::stop):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (RTCPeerConnectionHandlerChromium):

2012-10-19  Zeno Albisser  <zeno@webkit.org>

        Temporarily disable use of QCocoaNativeInterface in GraphicsSurfaceMac.
        https://bugs.webkit.org/show_bug.cgi?id=99320

        The current version of Qt5 deployed on the buildbots does not yet have
        an implementation for QCocoaNativeInterface::nativeResourceForContext().
        Therefore we disable this code path until Qt5/qtbase has been updated to
        a revision above Change-Id: Id00efc88a73d7df04a68c022f19d9d1c4f6d386b.

        Once Qt5 has been updated, this patch must be reverted.

        Reviewed by Noam Rosenthal.

        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):

2012-10-18  Zeno Albisser  <zeno@webkit.org>

        GraphicsSurface should not modify the current GL context.
        https://bugs.webkit.org/show_bug.cgi?id=99320

        Instead of reusing the currently bound GL context for drawing
        the texture onto the GraphicsSurface, GraphicsSurface should
        create a new context that shares the texture names with a context
        provided by the caller.
        This way the OpenGL states are clearly separated and we do not
        risk interfeering with the currently bound GL context.

        Reviewed by Noam Rosenthal.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
            When creating a GraphicsSurface pass the platform GL context
            as a parameter, so it can be used for sharing textures with.
        (WebCore::GraphicsContext3DPrivate::copyToGraphicsSurface):
            Pass the texture instead of the FBO. A Texture can be drawn
            directly or bound to another FBO, where a framebuffer
            always needs to be blit onto the surface.
        (WebCore::GraphicsContext3DPrivate::createGraphicsSurfaces):
            Pass the platform GL context as a parameter.
        * platform/graphics/surfaces/GraphicsSurface.cpp:
        (WebCore::GraphicsSurface::create):
        (WebCore::GraphicsSurface::copyFromTexture):
        * platform/graphics/surfaces/GraphicsSurface.h:
        (GraphicsSurface):
        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
            Create a new GL context that shares the textures with the
            context provided by the caller.
        (WebCore::GraphicsSurfacePrivate::~GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
            Add a convenience function to make the context that
            belongs to the surface current.
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
            Add a convenience function to make the previously
            bound context current again.
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
            Move blitting of the texture onto the surface
            into a separate function within GraphicsSurfacePrivate.
        (WebCore::GraphicsSurface::platformCopyFromTexture):
            Rename function platformCopyFromFramebuffer to
            platformCopyFromTexture, as we are now passing the texture only.
        (WebCore::GraphicsSurface::platformCreate):
        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore):
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::makeCurrent):
            Add a convenience function to make the context that
            belongs to the surface current.
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::doneCurrent):
            Add a convenience function to make the previously
        (WebCore::GraphicsSurfacePrivate::copyFromTexture):
            Move blitting of the texture onto the surface
            into a separate function within GraphicsSurfacePrivate.
        (WebCore::resolveGLMethods):
            Resolve additional GL methods necessary for this change.
        (WebCore::GraphicsSurface::platformCopyFromTexture):
            Rename function platformCopyFromFramebuffer to
            platformCopyFromTexture, as we are now passing the texture only.
        (WebCore::GraphicsSurface::platformCreate):

2012-10-18  Kent Tamura  <tkent@chromium.org>

        Set min-width property instead of width property for date/time fields
        https://bugs.webkit.org/show_bug.cgi?id=99673

        Reviewed by Hajime Morita.

        A field can have a text wider than pre-computed width because of
        :first-letter property. So, we should set min-width, not width.

        Tests: Covered by fast/forms/*-multiple-fields/*-multipe-fields-appearance-style.html

        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::customStyleForRenderer):
        Set min-width instead of width.
        * html/shadow/DateTimeSymbolicFieldElement.cpp:
        (WebCore::DateTimeSymbolicFieldElement::customStyleForRenderer): Ditto.

2012-10-18  MORITA Hajime  <morrita@google.com>

        Assertion failure at TreeScopeAdopter::moveNodeToNewDocument()
        https://bugs.webkit.org/show_bug.cgi?id=99510

        Reviewed by Kent Tamura.

        Shadow DOM notification call didn't have checks for mutation detection.
        This change adds such checks.

        Test: fast/forms/textarea/textarea-autofocus-removal-while-focusing-with-style.html

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromDocument):

2012-10-17  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Rebaselined run-bindings-tests.

        * bindings/scripts/test/V8/V8Float64Array.h:
        (V8Float64Array):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (V8TestActiveDOMObject):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (V8TestCustomNamedGetter):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (V8TestEventConstructor):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (V8TestEventTarget):
        * bindings/scripts/test/V8/V8TestException.h:
        (V8TestException):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (V8TestInterface):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (V8TestMediaQueryListListener):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (V8TestNamedConstructor):
        * bindings/scripts/test/V8/V8TestNode.h:
        (V8TestNode):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (V8TestSerializedScriptValueInterface):

2012-10-17  Mike West  <mkwst@chromium.org>

        Move mixed content logic out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=45638

        Reviewed by Eric Seidel.

        This change moves checks for mixed content out of FrameLoader, and into
        a new MixedContentChecker object. It's a pretty straightforward
        refactoring with no change to the overall logic, and only minor changes
        to the code to reduce repetition.

        The only substantive change is renaming the methods from 'checkIf*' to
        'can*' to reflect the value of the boolean they return.

        The visible functionality shouldn't change; this change should be
        covered by existing tests in http/tests/security/mixedContent.

        This patch is mostly a revitalization of Eric Sidel's original
        patch: https://bugs.webkit.org/attachment.cgi?id=67432&action=prettypatch

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Hey, look! A new file!
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::mixedContentChecker):
        (FrameLoader):
        * loader/MixedContentChecker.cpp: Added.
        (WebCore):
        (WebCore::MixedContentChecker::MixedContentChecker):
        (WebCore::MixedContentChecker::client):
        (WebCore::asUTF8):
        (WebCore::MixedContentChecker::isMixedContent):
        (WebCore::MixedContentChecker::canDisplayInsecureContent):
        (WebCore::MixedContentChecker::canRunInsecureContent):
        (WebCore::MixedContentChecker::logWarning):
        * loader/MixedContentChecker.h: Added.
        (WebCore):
        (MixedContentChecker):
            Migrate functionality from FrameLoader::checkIf* to
            MixedContentChecker::can*.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::pluginIsLoadable):
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::checkInsecureContent):
            Use the new method locations.

2012-10-17  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r95391): ComplexTextController is unnecessarily slow with characters with combining marks when the base character is not covered by any font
        https://bugs.webkit.org/show_bug.cgi?id=99654

        Reviewed by Adele Peterson.

        When the base character of a combining character sequence is not covered by any one of the
        available fonts, there is no point looking for a font that covers the entire sequence, nor
        to try to use a combination of fallback fonts for the entire sequence.

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::systemFallback): Moved ComplexTextController::systemFallbackFontData
        here and renamed it.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::collectComplexTextRuns): This function used to use
        systemFallbackFontData() whenever Font::fontDataForCombiningCharacterSequence returned 0
        for a base character with combining marks, regardless of whether the base character was
        covered by any font. Changed it to preserve the return value of
        fontDataForCombiningCharacterSequence, which is now 0 only if the base charcater is not in
        any font, while systemFallbackFontData() is used to indicate that no single font in the
        fallback list covers all characters in the sequence, but the base character is in some font.
        * platform/graphics/mac/ComplexTextController.h:
        (ComplexTextController): Moved systemFallbackFontData from here to SimpleFontData.
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Updated for the above
        move.
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::fontDataForCombiningCharacterSequence): Changed to return
        systemFallbackFontData() if no single font in the fallback list covers all characters in the
        sequence, while using 0 to signal the base character does not exist in any font.

2012-10-17  Dan Bernstein  <mitz@apple.com>

        Try to fix the build after r131701.

        * WebCore.exp.in:

2012-10-17  Hayato Ito  <hayato@chromium.org>

        Content element does not expose distributedNodes property.
        https://bugs.webkit.org/show_bug.cgi?id=99232

        Reviewed by Dimitri Glazkov.

        Add getDistributedNodes() to HTMLContentElement's IDL, which returns a
        static NodeList whose node are distributed to the content element.

        Test: fast/dom/shadow/content-element-distributed-nodes.html

        * html/shadow/HTMLContentElement.idl:
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::getDistributedNodes):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        * testing/Internals.cpp:
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-10-17  Pan Deng  <pan.deng@intel.com>

        [User Timing] implement main interface in of User Timing, according to http://www.w3.org/TR/2012/CR-user-timing-20120726/
        https://bugs.webkit.org/show_bug.cgi?id=90963

        Reviewed by Tony Gentilcore.

        This patch implemented mark(), measure(), clearMarks() and clearMeasures() interface of User Timing. Getters are not exposed by Performance Timeline yet, it will be future patch.

        Tests: http/tests/w3c/webperf/submission/user-timing/test_user_timing_clearMarks.html
               http/tests/w3c/webperf/submission/user-timing/test_user_timing_clearMeasures.html
               http/tests/w3c/webperf/submission/user-timing/test_user_timing_mark.html
               http/tests/w3c/webperf/submission/user-timing/test_user_timing_mark_exception.html
               http/tests/w3c/webperf/submission/user-timing/test_user_timing_measure.html
               http/tests/w3c/webperf/submission/user-timing/test_user_timing_measure_associate_with_navigation_timing.html
               http/tests/w3c/webperf/submission/user-timing/test_user_timing_measure_exception.html
               http/tests/w3c/webperf/submission/user-timing/test_user_timing_method_exist.html

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * page/Performance.cpp:
        (WebCore::Performance::webkitGetEntries):
        (WebCore::Performance::webkitGetEntriesByType):
        (WebCore::Performance::webkitGetEntriesByName):
        (WebCore):
        (WebCore::Performance::webkitMark):
        (WebCore::Performance::webkitClearMarks):
        (WebCore::Performance::webkitMeasure):
        (WebCore::Performance::webkitClearMeasures):
        * page/Performance.h:
        (WebCore):
        (Performance):
        * page/Performance.idl:
        * page/PerformanceMark.h: Added.
        (WebCore):
        (PerformanceMark):
        (WebCore::PerformanceMark::create):
        (WebCore::PerformanceMark::PerformanceMark):
        (WebCore::PerformanceMark::~PerformanceMark):
        * page/PerformanceMark.idl: Added.
        * page/PerformanceMeasure.h: Added.
        (WebCore):
        (PerformanceMeasure):
        (WebCore::PerformanceMeasure::create):
        (WebCore::PerformanceMeasure::PerformanceMeasure):
        (WebCore::PerformanceMeasure::~PerformanceMeasure):
        * page/PerformanceMeasure.idl: Added.
        * page/PerformanceUserTiming.cpp: Added.
        (WebCore):
        (WebCore::UserTiming::UserTiming):
        (WebCore::insertPerformanceEntry):
        (WebCore::clearPeformanceEntries):
        (WebCore::UserTiming::mark):
        (WebCore::UserTiming::clearMarks):
        (WebCore::UserTiming::findExistingMarkStartTime):
        (WebCore::UserTiming::measure):
        (WebCore::UserTiming::clearMeasures):
        * page/PerformanceUserTiming.h: Added.
        (WebCore):
        (UserTiming):
        (WebCore::UserTiming::create):

2012-10-17  James Robinson  <jamesr@chromium.org>

        Unreviewed clang compile fix - GraphicsLayerUpdater needs a virtual destructor.

        * platform/graphics/GraphicsLayerUpdater.h:
        (GraphicsLayerUpdater):

2012-10-17  Ryuan Choi  <ryuan.choi@samsung.com>

        Attempt to fix the build after r131680.

        Unreviewed build fix.

        * dom/Document.cpp: Guard ACCELERATED_COMPOSITING for RenderLayerCompositor.h

2012-10-17  Elliott Sprehn  <esprehn@chromium.org>

        StyleRareNonInheritedData::contentDataEquivalent only looks at the first ContentData
        https://bugs.webkit.org/show_bug.cgi?id=99560

        Reviewed by Eric Seidel.

        Previously we only compared the first ContentData in the linked
        list of ContentData's which meant that if the resolved style
        for content had the same prefix we wouldn't update the content.

        This patch adds a loop to compare each of the ContentData objects
        in the linked list.

        Test: fast/css-generated-content/content-property-change.html

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::contentDataEquivalent):

2012-10-17  Elliott Sprehn  <esprehn@chromium.org>

        Remove StyleContentType since it's not used anymore
        https://bugs.webkit.org/show_bug.cgi?id=99659

        Reviewed by Eric Seidel.

        Remove StyleContentType enum since it's not used anymore and
        make the is*() type checking methods on ContentData public.

        No new tests needed, this is just deleting dead code.

        * rendering/style/ContentData.h:
        (ContentData):
        * rendering/style/RenderStyleConstants.h:

2012-10-17  Simon Fraser  <simon.fraser@apple.com>

        Create a GraphicsLayerUpdater class that will do periodic layer flushes for layer trees containing tile caches
        https://bugs.webkit.org/show_bug.cgi?id=99518

        Reviewed by Dean Jackson.

        When using tile caches in place of tiled layers, we need to recompute their
        visible area periodically while animations and scrolling are happening.
        Make a new class, GraphicsLayerUpdater, to handle this updating.
        Internally, it uses DisplayRefreshMonitor to generate the periodic updates.
        
        GraphicsLayer clients are notified that layers need periodic updates. Clients
        are free to make use of GraphicsLayerUpdater to handle this updating, as
        RenderLayerCompositor does.
        
        Also do some minor refactoring of methods in RenderLayerCompositor that
        get to Page.

        * CMakeLists.txt: Add GraphicsLayerUpdater.cpp to the build.
        * GNUmakefile.list.am: Ditto.
        * PlatformBlackBerry.cmake: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/Document.cpp:
        (WebCore::Document::windowScreenDidChange): Tell the compositor that the screen
        changed, so it can tell the GraphicsLayerUpdater if it has one.
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::notifyFlushBeforeDisplayRefresh): Method called
        for layers that need periodic updates, like tile cache layers.
        * platform/graphics/GraphicsLayerUpdater.cpp: Added. Uses DisplayRefreshMonitorManager
        to flush layers before the next refresh.
        (WebCore::GraphicsLayerUpdater::GraphicsLayerUpdater):
        (WebCore::GraphicsLayerUpdater::~GraphicsLayerUpdater):
        (WebCore::GraphicsLayerUpdater::scheduleUpdate):
        (WebCore::GraphicsLayerUpdater::screenDidChange):
        (WebCore::GraphicsLayerUpdater::displayRefreshFired):
        * platform/graphics/GraphicsLayerUpdater.h: Added.
        (GraphicsLayerUpdaterClient): Clients need to implement flushLayers().
        (WebCore::GraphicsLayerUpdaterClient::~GraphicsLayerUpdaterClient):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): For tile cache layers,
        tell the client that this layer should be updated soon to update the visible rect.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::notifyFlushBeforeDisplayRefresh): Pass this message
        on to the compositor.
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking): Implement notifyFlushBeforeDisplayRefresh.
        Add OVERRIDE to all the client overrides.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags): Use helper to get to Page.
        (WebCore::RenderLayerCompositor::scheduleLayerFlush): Ditto.
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Soon we're going to be asking
        about the current state of animations inside the flush (for visible rect computation), so we
        need a AnimationUpdateBlock to make sure all the animation times are in sync.
        (WebCore::RenderLayerCompositor::notifyFlushBeforeDisplayRefresh): Make a GraphicsLayerUpdater
        if necessary, and tell it to update soon.
        (WebCore::RenderLayerCompositor::flushLayers): The GraphicsLayerUpdater client method.
        Just does a flush. For now, considers this Frame as the flush root, which will need fixing for iframes.
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame): Use helper to get to Page.
        (WebCore::RenderLayerCompositor::deviceScaleFactor): Ditto.
        (WebCore::RenderLayerCompositor::pageScaleFactor): Ditto.
        (WebCore::RenderLayerCompositor::destroyRootLayer): Ditto.
        (WebCore::RenderLayerCompositor::windowScreenDidChange): Tell the updater if we have one.
        (WebCore::RenderLayerCompositor::scrollingCoordinator): Use helper to get to Page.
        (WebCore::RenderLayerCompositor::graphicsLayerFactory): Use helper to get to Page.
        (WebCore::RenderLayerCompositor::page): The helper.
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor): Add OVERRIDE to all the client overrides.

2012-10-17  Eric Seidel  <eric@webkit.org>

        Make dom-query.html slightly faster by removing unnecessary ref-churn in StringTraits
        https://bugs.webkit.org/show_bug.cgi?id=99652

        Reviewed by Adam Barth.

        My testing showed this moved dom-query.html from  465560 runs/s to 479019
        which is about 2% if I'm doing my math correctly.

        I suspect that's due to avoiding the ref-churn we were incurring by using
        return-by-value symantics here.

        This is just the tip of the iceburg. :)

        * bindings/v8/V8StringResource.cpp:
        (StringTraits):
        * bindings/v8/V8ValueCache.h:
        (WebCore::WebCoreStringResource::webcoreString):
        (WebCore::WebCoreStringResource::atomicString):

2012-10-17  Luke Macpherson   <macpherson@chromium.org>

        Move handling of CSSPropertyWebkitLineClamp from StyleResolver into StyleBuilder.
        https://bugs.webkit.org/show_bug.cgi?id=99534

        Reviewed by Alexis Menard.

        One small step towards removing the giant switch statement in StyleResolver, this patch moves line clamp handling into StyleBuilder.

        Covered by fast/overflow/line-clamp.html

        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2012-10-17  Andy Estes  <aestes@apple.com>

        [WebKit2] Add removeChild: to WKDOMNode and make WKDOMText.data read/write
        https://bugs.webkit.org/show_bug.cgi?id=99662

        Reviewed by Sam Weinig.

        Export needed symbols.

        * WebCore.exp.in:

2012-10-17  Adam Barth  <abarth@webkit.org>

        [V8] Don't generate code that declares visitDOMWrapper if we're not going to generate the implementation
        https://bugs.webkit.org/show_bug.cgi?id=99653

        Reviewed by Eric Seidel.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):

2012-10-17  David Grogan  <dgrogan@chromium.org>

        IndexedDB: Destroy leveldb directory if unknown schema is detected
        https://bugs.webkit.org/show_bug.cgi?id=99636

        Reviewed by Tony Chang.

        chromium browser test in progress at
        https://codereview.chromium.org/11196029

        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):
        (WebCore::isSchemaKnown):
        Return true when the schema key doesn't exist because new databases
        won't have one.

        (WebCore::setUpMetadata):
        (WebCore::IDBLevelDBBackingStore::open):
        Piggy-back on existing leveldb::destroy code.

2012-10-17  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Incorrect rendering of borders on <col> with span > 1
        https://bugs.webkit.org/show_bug.cgi?id=76246

        Reviewed by Julien Chaffraix.

        The HTML5 rendering specification [10.2.2 - Display Types] states that
        "For the purposes of the CSS table model, the col element is expected to
        be treated as if it was present as many times as its span attribute
        specifies."
        We should thus apply a col element's border as if the element is present
        as many number of times as its span attribute.

        Apart from this, we should also treat the col and its enclosing colgroup
        separately while computing the collapsed borders.

        Test: fast/table/border-collapsing/collapsed-border-with-col-colgroup-span.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeCollapsedStartBorder):
        (WebCore::RenderTableCell::computeCollapsedEndBorder):
        Borders from col and its enclosing colgroup element should be handled
        separately, while considering the preceeding col's end border (for start
        border computation) and the next col's start border (for end border
        computation).

        Also, have made changes for handling of col elements with span attribute as
        per the specification. We now apply the border (start or end) of the col
        element irrespective of whether it has any span specified for it or not.

2012-10-17  Tom Sepez  <tsepez@chromium.org>

        Crash in ContainerNode::removeAllChildren()
        https://bugs.webkit.org/show_bug.cgi?id=98443

        Reviewed by Eric Carlson.

        This patch makes the errorEventSender added in WebKit Revision 112190 interact
        with the updatedHasPendingLoadEvent() mechanism in the same manner as the other
        existing event senders.

        Test: http/tests/security/video-poster-cross-origin-crash2.html

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::updatedHasPendingEvent):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        (WebCore::ImageLoader::dispatchPendingLoadEvent):
        * loader/ImageLoader.h:
        (ImageLoader):

2012-10-17  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Closing connection in upgradeneeded should result in error event
        https://bugs.webkit.org/show_bug.cgi?id=99486

        Reviewed by Tony Chang.

        The IDB spec requires that "...if connection is closed, return a DOMError of type AbortError".
        This was being handled during the "enqueue" phase, which was too early either for synchronously
        executing scripts or asynchronous messaging in multiprocess ports (crbug.com/150691). Move the
        logic to the "dispatch" phase.

        Test: storage/indexeddb/intversion-close-in-oncomplete.html

        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onSuccess): Move success to error morphing from here...
        (WebCore::IDBOpenDBRequest::dispatchEvent): To here.
        * Modules/indexeddb/IDBOpenDBRequest.h:
        (IDBOpenDBRequest):

2012-10-17  Elliott Sprehn  <esprehn@chromium.org>

        Use virtual dispatch to create ContentData renderers
        https://bugs.webkit.org/show_bug.cgi?id=99646

        Reviewed by Eric Seidel.

        ContentData are conceptually very similar to Nodes and we can use
        the same createRenderer pattern on them to simplify creating
        renderers for generated content. Now each ContentData class knows
        how to create its own renderer.

        Previously we switched over the StyleContentType which required a
        case for CONTENT_NONE and made the code look like it could return
        null, but this case is actually impossible because no ContentData
        class ever has a type of CONTENT_NONE and no null checks are really
        needed.

        This is the final step in removing dependence on StyleContentType.

        No new tests needed, this is just a refactor.

        * rendering/RenderObjectChildList.cpp: Remove createRendererForBeforeAfterContent.
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createRenderer):
        (WebCore):
        (WebCore::TextContentData::createRenderer):
        (WebCore::CounterContentData::createRenderer):
        (WebCore::QuoteContentData::createRenderer):
        * rendering/style/ContentData.h: Added a new virtual method createRenderer.
        (WebCore):
        (ContentData):
        (ImageContentData):
        (TextContentData):
        (CounterContentData):
        (QuoteContentData):

2012-10-17  Julien Chaffraix  <jchaffraix@webkit.org>

        RenderLayer subtrees without any self-painting layer shouldn't be walked during hit testing
        https://bugs.webkit.org/show_bug.cgi?id=89393

        Reviewed by Eric Seidel.

        Performance optimization, covered by existing tests.

        Bug 88888 added an peformance optimization for painting. As hit testing is very similar to
        painting, it would benefit from the same optimization.

        On http://dglazkov.github.com/performance-tests/biggrid.html, with a 10,000 * 100 tables,
        it reduces the time to select some text inside a cell from 1-2 seconds to a usable time
        (I didn't measure the exact timing).

        Note that as in bug 88888, the multi-column code is not covered by this optimization.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):
        This is the entrance to the hit testing code so we check if we can bail out early.

        (WebCore::RenderLayer::hitTestList):
        If we have no self-painting descendant layers, we can bail out.

        (WebCore::RenderLayer::hitTestContents):
        (WebCore::RenderLayer::hitTestLayer):
        hitTest should filter the layers that call these functions. Added some ASSERT to
        make sure we don't mistakenly call them when could avoid it.

2012-10-17  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Certain SVG content freezes QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=97258

        Reviewed by Simon Hausmann.

        Ensure dashpattern is well-formed by avoiding divisions by zero.

        Test: svg/stroke/zero-width-hang.html

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setLineDash):

2012-10-17  Alec Flett  <alecflett@chromium.org>

        IndexedDB: Explicitly send null/undefined/integers to frontend IDBCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=99619

        Reviewed by Adam Barth.

        Rather than pass SerializedScriptValue tokens from the backend,
        send explicit null, (as onSuccess(static_cast<SerializedScriptValue*>(0)))
        undefined, (as onSucess()), and integers (as onSuccess(long long))

        This reduces backend dependency on things that might require a JS
        interpreter on the backend.

        No new tests, this is a refactor and existing tests cover
        correctness. Tests that might fail include:

        Test: storage/indexeddb/index-count.html
        Test: storage/indexeddb/objectstore-count.html
        Test: storage/indexeddb/database-basics.html

        * Modules/indexeddb/IDBCallbacks.h:
        (IDBCallbacks):
        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::advanceInternal):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        (WebCore::IDBCursorBackendImpl::prefetchContinueInternal):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::value):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::countInternal):
        (WebCore::IDBIndexBackendImpl::getInternal):
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::clearInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::countInternal):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValue):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):

2012-10-17  Nate Chapin  <japhet@chromium.org>

        Move ResourceRequest construction out of SubresourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=99627

        Reviewed by Adam Barth.

        CachedResource::load() fills out a bunch of http headers.
        SubresourceLoader::create() adds a bunch more. Merge them.
        Note that this merge requires a bit more care in CachedRawResource::canReuse(),
        because more headers are set directly on CachedResource::m_resourceRequest, rather
        than on a copy of it.

        No new tests, no functionality change intended.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::shouldIgnoreHeaderForCacheReuse):
        (WebCore):
        (WebCore::CachedRawResource::canReuse):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::failBeforeStarting):
        (WebCore):
        (WebCore::CachedResource::addAdditionalRequestHeaders):
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (CachedResource):

2012-10-17  Anders Carlsson  <andersca@apple.com>

        Clean up Vector.h
        https://bugs.webkit.org/show_bug.cgi?id=99622

        Reviewed by Benjamin Poulain.

        Fix fallout from removing std::max and std::min using declarations.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::currentAge):

2012-10-17  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Enforce unsigned long/unsigned long long ranges
        https://bugs.webkit.org/show_bug.cgi?id=99637

        Reviewed by Tony Chang.

        The IndexedDB spec has [EnforceRange] specified on unsigned long and unsigned long long
        arguments, which requires the implementation to throw TypeError for negative values or
        values that exceed 2^53-1 (maximum JS number that behaves like an integer) - and 0 is
        specifically forbidden by the APIs as well.

        A more correct fix in the binding layer is in webkit.org/b/96798 but we can temporarily
        address this in the implementation.

        Also refactor to prevent IDBFactory.open(name, -1) from triggering an internal code path.

        Tests: storage/indexeddb/cursor-advance.html
               storage/indexeddb/intversion-bad-parameters.html
               storage/indexeddb/intversion-encoding.html

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::advance): Validate argument range.
        * Modules/indexeddb/IDBCursor.h:
        (IDBCursor):
        * Modules/indexeddb/IDBCursor.idl: Drop "unsigned" qualifier as the binding code is
        not yet doing the correct validation.
        * Modules/indexeddb/IDBFactory.cpp: Refactor to prevent open(name, -1)
        (WebCore):
        (WebCore::IDBFactory::open): Validate the int version here, then pass to...
        (WebCore::IDBFactory::openInternal): ... this method.
        * Modules/indexeddb/IDBFactory.h:
        (IDBFactory):
        * Modules/indexeddb/IDBFactory.idl: Drop "unsigned" qualifier; meaningless to binding
        code right now, can be re-added once webkit.org/b/96798 lands.

2012-10-17  Tony Chang  <tony@chromium.org>

        fast/forms/range/input-appearance-range-rtl.html off by one pixel
        https://bugs.webkit.org/show_bug.cgi?id=99625

        Reviewed by Ojan Vafai.

        Previously, we would assume that a vertical slider in RTL would render identically to
        a vertical slider in LTR. Due to differing thumb sizes, there is an off by one.

        This worked in deprecated flexbox because it doesn't adjust for RTL when applying
        box-align: center.

        Tests: fast/forms/range/input-appearance-range-rtl.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::layout): Force LTR for flexbox layout when vertical. We have to restore the old value
        just in case the user switches from vertical to horizontal.

2012-10-17  Michael Saboff  <msaboff@apple.com>

        Creating a String from an NSString should check for all 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=99392

        Reviewed by Geoffrey Garen.

        Use CFStringGetBytes() to try to get Latin1 data to create an 8 bit string.

        No functional change, change covered by existing tests.

        * platform/text/mac/StringMac.mm:
        (WTF::String::String):

2012-10-17  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Remove redundant OpenGL library addition from the build system.
        https://bugs.webkit.org/show_bug.cgi?id=99629

        Reviewed by Rob Buis.

        * PlatformEfl.cmake: Do not add OPENGL_gl_LIBRARY to
        WebCore_LIBRARIES, this is already done in CMakeLists.txt these
        days.

2012-10-17  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [CMake] Set WebCore_LIBRARIES earlier.
        https://bugs.webkit.org/show_bug.cgi?id=99630

        Reviewed by Rob Buis.

        * CMakeLists.txt: Follow the style we use in other CMakeList.txt
        files and set the Foo_LIBRARIES variables before we start checking
        for optional features, as they might append other libraries to the
        list (it already happens with WTF_USE_3D_GRAPHICS, for example).

2012-10-17  Philip Rogers  <pdr@google.com>

        Allow lazy initialization of SVG XML animated properties.
        https://bugs.webkit.org/show_bug.cgi?id=84657

        Reviewed by Tim Horton.

        When animating a property in the shadow tree, instance properties and tearoffs are created
        but they simply reference the animated element's animating properties.

        When starting an animation for the first time (see SVGAnimateElement::resetAnimatedType),
        we initialize the root property and instance properties using startAnimValAnimation(...).
        If an instance property is added while the root property is animating, this initialization
        will not occur and we crash.

        This patch updates the resetAnimValToBaseVal codepath to start (and initialize) an animated
        property if it is not already animating. After this patch, instance properties can be added
        in the middle of animation and they will be properly started/initialized.

        Test: svg/animations/use-while-animating-crash.html

        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::executeAction):

2012-10-17  Dan Carney  <dcarney@google.com>

        Bind isolatedWorldSecurityOrigin to world
        https://bugs.webkit.org/show_bug.cgi?id=99582

        Reviewed by Adam Barth.

        Security origin of isolated worlds was not previously set at the world
        level, although it could have been. 

        No new tests. No change in functionality.

        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::deallocate):
        (WebCore):
        (WebCore::isolatedWorldSecurityOrigins):
        (WebCore::DOMWrapperWorld::isolatedWorldSecurityOrigin):
        (WebCore::DOMWrapperWorld::setIsolatedWorldSecurityOrigin):
        (WebCore::DOMWrapperWorld::clearIsolatedWorldSecurityOrigin):
        * bindings/v8/DOMWrapperWorld.h:
        (DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::isIsolatedWorldId):
        (WebCore::DOMWrapperWorld::isIsolatedWorld):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::resetIsolatedWorlds):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/v8/ScriptController.h:
        (ScriptController):
        (WebCore::ScriptController::setIsolatedWorldSecurityOrigin):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
        * bindings/v8/V8DOMWindowShell.h:
        (V8DOMWindowShell):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::V8XMLHttpRequest::constructorCallback):

2012-10-17  Simon Fraser  <simon.fraser@apple.com>

        GraphicsLayer visible rect computation needs to use the current animating transform
        https://bugs.webkit.org/show_bug.cgi?id=99529

        Reviewed by Dean Jackson.

        If we're running an accelerated animation of transform
        on a GraphicsLayerCA, the current value of the transform won't
        be reflected in the GraphicsLayer's m_transform. However,
        we need the current value of the transform in order to correctly
        compute the visible rect of this layer and descendants.
        
        Add a function to GraphicsLayerClient to retrieve the current
        value of the transform from the client.
        
        RenderLayer's currentTransform() used to return a transform
        with transform-origin baked in; GraphicsLayerClient needs one
        that excludes transform-origin, so enhance RenderLayer::currentTransform()
        to be able to produce either.

        Tests: compositing/visible-rect/animated-from-none.html
               compositing/visible-rect/animated.html

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore):
        (GraphicsLayerClient):
        (WebCore::GraphicsLayerClient::getCurrentTransform):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::computeVisibleRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::currentTransform):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):

2012-10-17  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        plugins: Allow a plugin to dictate whether it can receive drag events or not.
        https://bugs.webkit.org/show_bug.cgi?id=99355

        Reviewed by Tony Chang.

        When doing a drag over a plugin, ask the plugin whether it can accept
        drag/drop to decide whether drag/drop is possible or not. At present,
        plugins do not receive drag events through WebCore (i.e. various
        implementations of PluginView::handleMouseEvent ignores the
        drop-events). This change makes it possible for the ports to ask the
        plugin first to decide whether it can (or wants to) accept drag events.
        The default implementation remains the same, i.e. plugins do not receive
        drag events. For chromium, the overridden implementation uses the
        WebPlugin interface to check whether the plugin can accept drag events.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::canProcessDrag):
        (WebCore):
        * html/HTMLPlugInElement.h:
        (WebCore):
        (HTMLPlugInElement):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * plugins/PluginViewBase.h:
        (WebCore):
        (WebCore::PluginViewBase::canProcessDrag):

2012-10-17  Andreas Kling  <kling@webkit.org>

        Shrink EventTargetData by making firingEventListeners vector optional.
        <http://webkit.org/b/99532>
        <rdar://problem/12515099>

        Reviewed by Anders Carlsson.

        The majority of event listeners never actually fire, and EventTargetData::firingEventListeners
        is just sitting there taking up space. Make it an OwnPtr instead, shrinking EventTargetData
        by 48 bytes and progressing Membuster3 by 395kB.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::fireEventListeners):
        (WebCore::EventTarget::removeAllEventListeners):
        * dom/EventTarget.h:
        (WebCore::EventTarget::isFiringEventListeners):

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        xss-DENIED-xsl-document-securityOrigin.xml crashes with icon assertion
        https://bugs.webkit.org/show_bug.cgi?id=99571

        Reviewed by Kenneth Rohde Christiansen.

        Check that the iconURL is not empty in IconController::continueLoadWithDecision()
        to avoid hitting assertions later when trying to commit this empty URL to the
        database. IconController::url() may indeed return an empty URL but there was
        no check for it.

        No new tests, already covered by http/tests/security/xss-DENIED-xsl-document-securityOrigin.xml.

        * loader/icon/IconController.cpp:
        (WebCore::IconController::continueLoadWithDecision):

2012-10-17  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix build warnings : -Wunused-parameter, -Wunused-variable
        https://bugs.webkit.org/show_bug.cgi?id=99539

        Reviewed by Kentaro Hara.

        Fix build warnings about unused parameter or unused variable when
        WTF_USE_TILED_BACKING_STORE option is enabled.

        * html/shadow/HTMLContentElement.cpp:
        (WebCore::contentTagName):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::createSurface):
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::canReuseWith):
        (WebCore::TextureMapper::beginPainting):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawRepaintCounter):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::updateContents):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::sortByZOrder):
        (WebCore::TextureMapperLayer::flushCompositingStateSelf):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::allowsIndependentlyCompositedFrames):

2012-10-17  Shinya Kawanaka  <shinyak@chromium.org>

        Dynamically added elements do not get re-projected.
        https://bugs.webkit.org/show_bug.cgi?id=99227

        Reviewed by Dimitri Glazkov.

        When distribution happens, we have to invalidate its host shadow's distribution, since the children of the host
        is changed.

        Test: fast/dom/shadow/content-reprojection-dynamic.html

        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute):

2012-10-17  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: no "delete watch expression" context menu item when clicking on the expression value
        https://bugs.webkit.org/show_bug.cgi?id=99602

        Reviewed by Pavel Feldman.

        Add delete items to the watch expression's value's context menu.

        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype._contextMenuFired):
        (WebInspector.ObjectPropertyTreeElement.prototype.populateContextMenu):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionTreeElement.prototype.populateContextMenu):
        (WebInspector.WatchExpressionTreeElement.prototype._contextMenu):

2012-10-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Undoing script changes does not restore breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=99598

        Reviewed by Pavel Feldman.

        workingCopyChanged now dispatches did/willMergeToVM instead of did/willDivergeFromVM
        when change returns uiSourceCode to non dirty state.
        Added wasDirty parameter to workingCopyChanged event.

        Test: inspector/debugger/live-edit-breakpoints.html

        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptFile.prototype._workingCopyCommitted):
        (WebInspector.ResourceScriptFile.prototype._workingCopyChanged):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.setWorkingCopy):

2012-10-17  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Avoid re-creating CSSGrammar.cpp with each (incremental) build

        Reviewed by Tor Arne Vestbø.

        The expected output is CSSGrammar.cpp and the input file used to be CSSGrammar.y,
        so ${QMAKE_FILE_BASE}.cpp did the correct transformation. Recently the input has
        changed to CSSGrammar.y.in, in which case the ${QMAKE_FILE_BASE} is CSSGrammar.y
        unfortunately. The resulting target CSSGrammar.y.cpp will never be created and
        therefore the target will always run.

        * DerivedSources.pri:

2012-10-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed fix for ImageSourceCG.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::reportMemoryUsage):

2012-10-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed fix for compilation on CG bots.

        * platform/graphics/cg/ImageSourceCG.cpp:

2012-10-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI instrument ImageDecoder. It owns a buffer that could be quite big.
        https://bugs.webkit.org/show_bug.cgi?id=99540

        Reviewed by Yury Semikhatsky.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::reportMemoryUsage):
        (WebCore):
        * platform/graphics/ImageSource.h:
        (ImageSource):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageFrame::reportMemoryUsage):
        (WebCore):
        (WebCore::ImageDecoder::reportMemoryUsage):
        * platform/image-decoders/ImageDecoder.h:
        (ImageFrame):
        (ImageDecoder):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::reportMemoryUsage):
        (WebCore):

2012-10-17  Zeno Albisser  <zeno@webkit.org>

        [Qt] Fix build on Mac OSX 10.6 and earlier.
        https://bugs.webkit.org/show_bug.cgi?id=99595

        Reviewed by Simon Hausmann.

        * Target.pri:

2012-10-17  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: display "disconnected" message when remote debugging terminates
        https://bugs.webkit.org/show_bug.cgi?id=99316

        Reviewed by Yury Semikhatsky.

        Otherwise, it is not clear that the front-end is no longer functional.

        * inspector/front-end/InspectorFrontendHostStub.js:
        (WebInspector.RemoteDebuggingTerminatedScreen):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded.WebInspector.socket.onclose):
        (WebInspector.loaded):

2012-10-17  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: delete watch expression button overlaps with the expression value
        https://bugs.webkit.org/show_bug.cgi?id=99569

        Reviewed by Vsevolod Vlasov.

        Delete watch expression button now doesn't overlap with the watch expression.

        * inspector/front-end/inspector.css:
        (.properties-tree.watch-expressions > li > .value):

2012-10-17  Luke Macpherson   <macpherson@chromium.org>

        Move handling of CSSPropertyPointerEvents from StyleResolver into StyleBuilder.
        https://bugs.webkit.org/show_bug.cgi?id=99536

        Reviewed by Alexis Menard.

        One small step towards removing the giant switch statement in StyleResolver,
        this patch moves pointer event property into StyleBuilder.

        Covered by fast/events/pointer-events.html and fast/events/pointer-events-2.html.

        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2012-10-17  Keishi Hattori  <keishi@webkit.org>

        Localized date should be based on LDML
        https://bugs.webkit.org/show_bug.cgi?id=99570

        Reviewed by Kent Tamura.

        Localized date should be based on LDML to match the format inside DateTimeEditElement.

        No new tests. Covered by LocaleMacTest.formatDate and LocaleWinTest.formatDate.

        * platform/text/LocaleICU.cpp: Removed formatDateTime.
        * platform/text/LocaleICU.h:
        (LocaleICU):
        * platform/text/LocaleNone.cpp: Removed formatDateTime.
        (LocaleNone):
        * platform/text/LocaleWin.cpp: Removed formatDateTime and formatDate.
        (WebCore):
        * platform/text/LocaleWin.h:
        (LocaleWin):
        * platform/text/Localizer.cpp:
        (WebCore::DateTimeStringBuilder::visitField): Added support for year/month/day.
        (WebCore::Localizer::formatDateTime): Creates the formatted string based on the format from dateFormat().
        * platform/text/Localizer.h:
        * platform/text/mac/LocaleMac.h:
        (LocaleMac):
        * platform/text/mac/LocaleMac.mm: Removed formatDateTime.

2012-10-17  Harald Alvestrand  <hta@google.com>

        Implement the Selector argument to RTCPeerConnection.getStats
        https://bugs.webkit.org/show_bug.cgi?id=99460

        Reviewed by Adam Barth.

        The change adds two new parameters to the RTCStatsRequest object:
        stream and component. Together these are enough to identify a
        MediaStreamTrack.

        Test: fast/mediastream/RTCPeerConnection-statsSelector.html

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::streamDescriptor):
        (WebCore):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getStats):
        * Modules/mediastream/RTCStatsRequestImpl.cpp:
        (WebCore::RTCStatsRequestImpl::create):
        (WebCore::RTCStatsRequestImpl::RTCStatsRequestImpl):
        (WebCore::RTCStatsRequestImpl::hasSelector):
        (WebCore):
        (WebCore::RTCStatsRequestImpl::stream):
        (WebCore::RTCStatsRequestImpl::component):
        * Modules/mediastream/RTCStatsRequestImpl.h:
        (RTCStatsRequestImpl):
        * platform/chromium/support/WebRTCStatsRequest.cpp:
        (WebKit):
        (WebKit::WebRTCStatsRequest::hasSelector):
        (WebKit::WebRTCStatsRequest::stream):
        (WebKit::WebRTCStatsRequest::component):
        * platform/mediastream/RTCStatsRequest.h:
        (WebCore):
        (RTCStatsRequest):

2012-10-17  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Enable use of more AllInOne files
        https://bugs.webkit.org/show_bug.cgi?id=99579

        Reviewed by Tor Arne Vestbø.

        The AllInOne files reduce pressure during final link time because the object files contain less duplicated
        symbols.

        * Target.pri: Add HTMLElementsAllInOne, EditingAllInOne and RenderingAllInOne to the build
        * editing/EditingAllInOne.cpp: Place a #if USE(CF) around the inclusion of SmartReplaceCF.cpp
        * html/HTMLElementsAllInOne.cpp: Move HTMLPlugInElement.cpp to the top to fix builds on X11 based platforms
        where the X headers get confused by the "Region" type that's also declared in WebCore.
        * rendering/RenderingAllInOne.cpp: Fix build on case-sensitive file systems (Plugin -> PlugIn) and added a
        #if PLATFORM(WIN) around the inclusion of RenderThemeWin.cpp.

2012-10-17  Kent Tamura  <tkent@chromium.org>

        REGRESSION(r131421): Text baseline becomes incorrect after re-layout of input[type=time]
        https://bugs.webkit.org/show_bug.cgi?id=99572

        Reviewed by Kentaro Hara.

        We use flexible box since r131421, and it seems text baseline becomes
        incorrect if there are text nodes in a flex container.

        Test: fast/forms/time-multiple-fields/time-multiple-fields-static-relayout.html

        * css/html.css:
        (input::-webkit-datetime-edit-text): Added.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitLiteral):
        Wrap text with an element with ::-webkit-datetime-edit-text.

2012-10-17  Grzegorz Czajkowski  <g.czajkowski@samsung.com>, Michal Roj <m.roj@samsung.com>

        [WK2][EFL] Implementation of spellchecking feature.
        https://bugs.webkit.org/show_bug.cgi?id=91854

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake:
        Add enchant-related compiler flags: header paths and the library flag.

2012-10-17  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Avoid style updates when retrieving the inline stylesheet text
        https://bugs.webkit.org/show_bug.cgi?id=99576

        Reviewed by Vsevolod Vlasov.

        Avoid using innerText() to retrieve inline stylesheet text, which may result in style and layout updates.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::inlineStyleSheetText):

2012-10-17  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r131365.

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBufferAdvance::width):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::cursorToX):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawText):

2012-10-17  Mike West  <mkwst@chromium.org>

        V8 should throw a more descriptive exception when blocking 'eval' via CSP.
        https://bugs.webkit.org/show_bug.cgi?id=94332

        Reviewed by Adam Barth.

        Following up on https://bugs.webkit.org/show_bug.cgi?id=94331, this
        patch wires up the new error message mechanism to V8, and updates the
        Chromium test expectations accordingly.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::disableEval):
            Pass 'errorMessage' through to V8.
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initializeIfNeeded):
            Grab the error message from ContentSecurityPolicy, and pass it
            through to V8.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy):
        (WebCore::WorkerContextExecutionProxy::evaluate):
        (WebCore::WorkerContextExecutionProxy::setEvalAllowed):
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WorkerContextExecutionProxy):
            Convert 'm_disableEvalPending' to a string to store the current
            error message, and use it to set the eval state.
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::disableEval):
            Pass 'errorMessage' through to V8.

2012-10-17  MORITA Hajime  <morrita@google.com>

        Assertion failed on HTMLFormControlElement.cpp: updateFromElementCallback()
        https://bugs.webkit.org/show_bug.cgi?id=99566

        Reviewed by Kent Tamura.

        It had a too optimistic assertion. This change removes it.

        Test: fast/forms/textarea/textarea-autofocus-removal-while-focusing.html

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

2012-10-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: When dirty uiSourceCode is saved to disk from scripts navigator context menu working copy is not committed.
        https://bugs.webkit.org/show_bug.cgi?id=99555

        Reviewed by Yury Semikhatsky.

        Save As context menu handler now commits working copy for dirty UISourceCodes.

        * inspector/front-end/HandlerRegistry.js:

2012-10-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Stylesheets saved with FileManager are not saved to disk when edited from Elements panel.
        https://bugs.webkit.org/show_bug.cgi?id=99554

        Reviewed by Yury Semikhatsky.

        Moved saving to disk from SourceFrame to UISourceCode.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._commitEditing):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype._commitContent):

2012-10-17  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] SASS sources are not saved to disk.
        https://bugs.webkit.org/show_bug.cgi?id=99551

        Reviewed by Yury Semikhatsky.

        Added resource null checks.

        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping.prototype._uiSourceCodeAddedToWorkspace):

2012-10-17  Elliott Sprehn  <esprehn@chromium.org>

        Clean up ContentData operator overloads
        https://bugs.webkit.org/show_bug.cgi?id=99556

        Reviewed by Eric Seidel.

        Use virtual dispatch for checking ContentData equality instead
        of a switch over the type. This the first step in getting rid
        of the StyleContentType enum and all the switch statements over
        the type().

        No tests needed, this is just a refactor.        

        * rendering/style/ContentData.cpp:
        * rendering/style/ContentData.h:
        (ContentData):
        (WebCore::operator==):
        (WebCore):
        (WebCore::operator!=):

2012-10-17  Gabor Rapcsanyi  <rgabor@webkit.org>

        NEON intrinsics Gauss filter does not work properly
        https://bugs.webkit.org/show_bug.cgi?id=98875

        Reviewed by Zoltan Herczeg.

        Fixing the NEON intrinsics Gauss filter. The stride parameter
        was missing from the intrinsics algorithm. Tested with pixel
        checks, now it's working properly.

        * platform/graphics/filters/arm/FEGaussianBlurNEON.h:
        (WebCore::boxBlurNEON):

2012-10-17  MORITA Hajime  <morrita@google.com>

        Crash on Frame::inScope() part 2
        https://bugs.webkit.org/show_bug.cgi?id=99543

        Reviewed by Kent Tamura.

        FrameTree::scopedChildCount() can be called even when the one of child frames
        is in orphan state. This change added a guard for that case.

        No new tests. A hard-to-test timing issue.

        * page/Frame.cpp:
        (WebCore::Frame::inScope):

2012-10-17  Shinya Kawanaka  <shinyak@chromium.org>

        Remove shadowAncestorNode() from VisibleSelection
        https://bugs.webkit.org/show_bug.cgi?id=99544

        Reviewed by Hajime Morita.

        An effort to replace shadowAncestorNode() with shadowHost(), since shadowAncestorNode() is now deprecated.

        No new tests, no change in behavior.

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries): Since shadowHost() returns 0 if
        an element is not in shadowRoot, it's ok to compare shadowAncestor to 0.

2012-10-17  Douglas Stockwell  <dstockwell@chromium.org>

        Content of replaced elements should be trimmed to the content edge curve.
        https://bugs.webkit.org/show_bug.cgi?id=63899

        Reviewed by Simon Fraser.

        When a border-radius is specified the content of replaced elements needs to be clipped to avoid
        being painted over the padding or border in the corners. Previously the clip that was applied
        was set to the border-edge curve, this patch contracts the clip by the size of the border and
        padding (the content-edge curve) to match the css3 spec.
        Spec: http://www.w3.org/TR/css3-background/#corner-clipping

        Test: fast/replaced/border-radius-clip-content-edge.html

        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2012-10-17  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        The HTML5 formtarget/formaction/formenctyp/formmethod/formnovalidate attributes don't work in button tags with nested elements
        https://bugs.webkit.org/show_bug.cgi?id=90539

        Reviewed by Kent Tamura.

        Fix a bug where form(action|enctype|method|target) attributes of <button> are not
        honored if the target of the click event is an element nested within the button.

        Test: fast/forms/formaction-attribute.html

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create): Looks for the attributes for form submission
        from the nearest FormControlElement ancestor of the event target.

2012-10-16  MORITA Hajime  <morrita@google.com>

        [Shadow DOM][V8] WebCore::V8DOMWindow::installPerContextProperties() is slow when shadowDOMEnabled flag is on.
        https://bugs.webkit.org/show_bug.cgi?id=99428

        Reviewed by Adam Barth.

        A benchmark unveiled that installPerContextProperties() could have made DOMWindow setup slower when
        - Some properties are added per-context basis by turnin the flag on and
        - There are bunch of DOMWindow object in the page (that is, there are many iframes.)

        This change eliminates Shadow DOM related per-context properties from DOMWindow for getting rid of that slowness.

        * dom/ContextFeatures.cpp:
        * dom/ContextFeatures.h: Removed shadowDOMEnabled() method and related enum entry.
        * dom/Position.cpp:
        (WebCore::Position::Position):
        (WebCore::Position::findParent):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getSelection):
        * dom/make_names.pl: Re-introduced "runtimeConditional" directive.
        (defaultTagPropertyHash):
        (printConstructorInterior):
        (printFactoryCppFile):
        (printWrapperFunctions):
        (printWrapperFactoryCppFile):
        * html/HTMLTagNames.in:
        * html/shadow/HTMLContentElement.cpp:
        (WebCore::contentTagName):
        * page/DOMWindow.idl:

2012-10-16  Julien Chaffraix  <jchaffraix@webkit.org>

        Make RenderObject destruction during detach a top-down operation
        https://bugs.webkit.org/show_bug.cgi?id=98336

        Reviewed by Eric Seidel.

        detach() is a DOM-driven operation that destroys the renderers bottom-up.
        While this is correct, it causes extra-work to be done (tree cleaning, ...)
        as it doesn't know about the render tree's structure.

        The render tree on the other side already supports top-down operations
        but it was overriden by the DOM side of detach.

        This change only makes ContainerNode::detach do a top-down render tree
        destruction. This is a required step towards doing smarter destruction.

        Refactoring covered by existing tests.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::detach):
        Changed the method to do a top-down destruction.

        * dom/Node.cpp:
        (WebCore::Node::detach):
        Added this ASSERT that ensures that we have properly cleaned up the
        whole DOM subtree. The only exception is child content belonging to a
        flow-thread as the code will shuffle the renderers under the flow-thread.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        As we don't update the node's renderer on the DOM side, do it here.
        The upside is that it ensures that we don't left any stray renderer
        in the tree.

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::destroyLeftoverChildren):
        Removed the calls to setRenderer as they are redundant with what we do
        in willBeDestroyed.

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::setText):
        Removed some now unneeded code, replaced by an ASSERT. This is because
        destroying m_firstLetter would automatically reset the node's renderer
        in destroyLeftoverChildren.

2012-10-16  Joseph Pecoraro  <pecoraro@apple.com>

        HTMLSelectElement::optionSelectedByUser confuses listIndex and optionIndex
        https://bugs.webkit.org/show_bug.cgi?id=99523

        Reviewed by Simon Fraser.

        There was a call site where the optionIndex was being passed to a
        function that expected the listIndex. Convert appropriately.

        Extends Test: platform/mac/fast/objc/dom-html-select-activate.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::optionSelectedByUser):

2012-10-16  Jian Li  <jianli@chromium.org>

        Rename feature define ENABLE_WIDGET_REGION to ENABLE_DRAGGBALE_REGION
        https://bugs.webkit.org/show_bug.cgi?id=98975

        Reviewed by Adam Barth.

        Renaming is needed to better match with the draggable region code.

        No new tests due to no functional change.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.exp.in:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore):
        (WebCore::Document::reportMemoryUsage):
        * dom/Document.h:
        (WebCore):
        (Document):
        * page/Chrome.cpp:
        (WebCore):
        * page/ChromeClient.h:
        (ChromeClient):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderInline.cpp:
        (WebCore):
        (WebCore::RenderInline::addAnnotatedRegions):
        * rendering/RenderInline.h:
        (RenderInline):
        * 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::styleWillChange):
        (WebCore):
        (WebCore::RenderObject::addAnnotatedRegions):
        * rendering/RenderObject.h:
        (WebCore::AnnotatedRegionValue::operator==):
        (AnnotatedRegionValue):
        (RenderObject):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        (StyleRareNonInheritedData):

2012-10-16  James Simonsen  <simonjam@chromium.org>

        [Page Visibility API] View-less documents should report as hidden
        https://bugs.webkit.org/show_bug.cgi?id=99410

        Reviewed by Tony Gentilcore.

        Test: fast/events/page-visibility-null-view.html

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

2012-10-16  Michael Saboff  <msaboff@apple.com>

        Change WTF_USE_8BIT_TEXTRUN to ENABLE_8BIT_TEXTRUN
        https://bugs.webkit.org/show_bug.cgi?id=99484

        Reviewed by Eric Seidel.

        Changed macro name to align with it's purpose, therefore changed USE(8BIT_TEXTRUN) to ENABLE(8BIT_TEXTRUN).

        No new tests.  Changed macro name, no functional change.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::subRun):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderBlock.h:
        (RenderBlock):

2012-10-16  Noam Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] REGRESSION(r131485): It broke the build
        https://bugs.webkit.org/show_bug.cgi?id=99499

        Unreviewed build (warning) fix.

        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::TextureMapperShaderProgram::getLocation):

2012-10-16  David Grogan  <dgrogan@chromium.org>

        Inspector: Don't fire assert when inspecting an empty db
        https://bugs.webkit.org/show_bug.cgi?id=99370

        Reviewed by Vsevolod Vlasov.

        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):

2012-10-16  Tony Chang  <tony@chromium.org>

        Unreviewed, try to fix the Apple Win build by forcing a rebuild of RenderingAllInOne.cpp.

        * rendering/RenderingAllInOne.cpp:

2012-10-16  Andrew Scherkus  <scherkus@chromium.org>

        Fix crash in WebCore::MediaControlPanelElement::makeTransparent()
        https://bugs.webkit.org/show_bug.cgi?id=97951

        Reviewed by Simon Fraser.

        No new tests as it's a speculative fix based on crash dump analysis.
     
        Despite MediaControlPanelElement checking for document()->page() nullity in other places, it forgot one check in makeTransparent().

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::makeTransparent):

2012-10-16  Emil A Eklund  <eae@chromium.org>

        Remove special-case flooring of baselinePosition for replaced elements in InlineFlowBox::placeBoxesInBlockDirection
        https://bugs.webkit.org/show_bug.cgi?id=99376

        Reviewed by Levi Weintraub.

        In r122769 (bug 91410) we added a special-case handling for
        replaced elements in InlineFlowBox::placeBoxesInBlockDirection
        to work around positioning issues in a couple of svg tests.
        This was needed to compensate for a workaround in the table
        painting code that was fixed in r131358 (bug 99364). As such the
        special-case handling for replaced elements is no longer needed
        in InlineFlowBox::placeBoxesInBlockDirection.

        Furthermore this caused problems with caret repainting leaving
        residual pixels which motivated this change.

        No new tests, have not been able to write a repaint test to
        demonstrate the caret repaint issue.

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

2012-10-16  Simon Fraser  <simon.fraser@apple.com>

        Some #include hygiene
        https://bugs.webkit.org/show_bug.cgi?id=99500

        Reviewed by Tony Chang.

        Clean up some #includes, mostly related to GraphicsLayer.h. In many
        cases this can be replaced by PlatformLayer.h.
        
        Remove an #include of PluginViewBase.h from Page.h, which was a source
        of #include fan-out.

        * html/canvas/CanvasRenderingContext2D.h:
        * page/Page.h:
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * plugins/PluginViewBase.h:

2012-10-16  Adam Barth  <abarth@webkit.org>

        Document::adoptNode shouldn't special-case <iframe>
        https://bugs.webkit.org/show_bug.cgi?id=99247

        Reviewed by Ryosuke Niwa.

        The special case was added in http://trac.webkit.org/changeset/75293 to
        fix a bug with magic iframes. Originally, I planned to remove this
        special case, but further investigation reveals that other browsers
        throw exceptions for other frame owner elements as well. Now we treat
        all frame owner elements the same way.

        Test: fast/frames/adopt-object-into-itself.html

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

2012-10-16  Dominik Röttsches  <dominik.rottsches@intel.com>

        Init timeout flag in ResourceErrorMac
        https://bugs.webkit.org/show_bug.cgi?id=99478

        Reviewed by Alexey Proskuryakov.

        On construction from platform error types, initialize the timeout flag 
        to true if the error results from a timeout.

        No new tests, covered by tests that will be added in bug 74802.

        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::platformLazyInit): Initializing timeout flag if the error was a timeout.

2012-10-16  Tony Chang  <tony@chromium.org>

        input[type=range] as a flex item renders thumb at wrong position
        https://bugs.webkit.org/show_bug.cgi?id=98666

        Reviewed by Ojan Vafai.

        Replace RenderSlider implementation with new flexbox and clean up the shadow DOM.
        The previous code was trying to set the height to 100% and had a bunch of hacks in
        the renderer code to set an explicit height. Using the new flexbox allows us to
        remove these renderer hacks.

        Test: css3/flexbox/flexitem-stretch-range.html

        * css/html.css:
        (input[type="range"]::-webkit-slider-container, input[type="range"]::-webkit-media-slider-container): Use new flexbox.
        (input[type="range"]::-webkit-slider-runnable-track): Use new flexbox.
        (input[type="range"]::-webkit-slider-thumb, input[type="range"]::-webkit-media-slider-thumb): Remove relative positioning since we're
        no longer setting top/left in the layout code.
        * css/mediaControlsChromium.css: Remove redundant styles and bottom: 1px hack.
        * css/mediaControlsChromiumAndroid.css: Remove redundant styles and bottom: 1px hack.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::listAttributeTargetChanged): We need to force a layout
        since the height of the control should change when adding/removing a datalist.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::RenderSliderContainer): Use new flexbox.
        (WebCore::RenderSliderContainer::computeLogicalHeight): Rather than setting style()->height() in layout, just compute the correct
        height when asked.  If we have a datalist, we increase the height (same code as before).  If we're vertical,
        we use the intrinsic size.
        (WebCore::RenderSliderContainer::layout): Remove extra layout code, but handle the position of the thumb.
        This used to be handled in the thumb's layout method, but I deleted that.
        * html/shadow/SliderThumbElement.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::RenderSlider): Use new flexbox.
        (WebCore::RenderSlider::layout): Set the limiter size to the size of the thumb. This is necessary
        for fast/css/unknown-pseudo-element-matching.html which tries to set the height of the thumb to 1px
        and expects the input to also have a height of 1px.  It worked before because the height of the input
        didn't depend on the height of its children.
        * rendering/RenderSlider.h: Fix indentation.
        (RenderSlider): Use new flexible box.

2012-10-16  Dima Gorbik  <dgorbik@apple.com>

        Remove Platform.h include from the header files.
        https://bugs.webkit.org/show_bug.cgi?id=98665

        Reviewed by Eric Seidel.

        We don't want other clients that include WebKit headers to know about Platform.h.

        No new tests.

        * platform/MemoryPressureHandler.h:
        * platform/graphics/filters/arm/FECompositeArithmeticNEON.h:
        * platform/graphics/filters/arm/FEGaussianBlurNEON.h:
        * platform/graphics/filters/arm/FELightingNEON.h:

2012-10-16  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Android: Need a way to get appropriate font for some specific characters.
        https://bugs.webkit.org/show_bug.cgi?id=67587

        Reviewed by Adam Barth.

        Use the new Skia API SkGetFallbackFamilyNameForChar() to get the family name for individual characters.

        No new tests. The following existing tests pass with the change:
        fast/writing-mode/vertical-subst-font-vert-no-dflt.html
        fast/dynamic/text-combine.html
        fast/writing-mode/japanese-rl-text.html
        fast/writing-mode/japanese-rl-selection.html
        fast/writing-mode/japanese-lr-text.html
        fast/repaint/japanese-rl-selection-repaint.html
        fast/writing-mode/border-vertical-lr.html

        * platform/graphics/chromium/FontCacheAndroid.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2012-10-16  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Add the chromium API for RTCDataChannel
        https://bugs.webkit.org/show_bug.cgi?id=99435

        Reviewed by Adam Barth.

        Adding WebRTCDataChannel.

        Test: fast/mediastream/RTCPeerConnection-datachannel.html

        * WebCore.gypi:
        * platform/chromium/support/WebRTCDataChannel.cpp: Added.
        (WebKit):
        (ExtraDataContainer):
        (WebKit::ExtraDataContainer::ExtraDataContainer):
        (WebKit::ExtraDataContainer::extraData):
        (WebKit::WebRTCDataChannel::WebRTCDataChannel):
        (WebKit::WebRTCDataChannel::initialize):
        (WebKit::WebRTCDataChannel::assign):
        (WebKit::WebRTCDataChannel::reset):
        (WebKit::WebRTCDataChannel::operator PassRefPtr<WebCore::RTCDataChannelDescriptor>):
        (WebKit::WebRTCDataChannel::operator WebCore::RTCDataChannelDescriptor*):
        (WebKit::WebRTCDataChannel::extraData):
        (WebKit::WebRTCDataChannel::setExtraData):
        (WebKit::WebRTCDataChannel::label):
        (WebKit::WebRTCDataChannel::reliable):
        (WebKit::WebRTCDataChannel::setBufferedAmount):
        (WebKit::WebRTCDataChannel::readyStateChanged):
        (WebKit::WebRTCDataChannel::dataArrived):
        (WebKit::WebRTCDataChannel::error):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::negotiationNeeded):
        (WebCore::RTCPeerConnectionHandlerChromium::didGenerateICECandidate):
        (WebCore):
        (WebCore::RTCPeerConnectionHandlerChromium::didChangeReadyState):
        (WebCore::RTCPeerConnectionHandlerChromium::didChangeICEState):
        (WebCore::RTCPeerConnectionHandlerChromium::didRemoveRemoteStream):

2012-10-16  Brady Eidson  <beidson@apple.com>

        Update indentation in *ResourceLoader headers to match modern WebKit style
        https://bugs.webkit.org/show_bug.cgi?id=99487

        Reviewed by Beth Dakin.

        I'm going to be working on these classes and the indentation is driving me crazy.

        * loader/MainResourceLoader.h:
        (WebCore):
        (MainResourceLoader):
        (WebCore::MainResourceLoader::isLoadingMultipartContent):

        * loader/NetscapePlugInStreamLoader.h:
        (WebCore):
        (NetscapePlugInStreamLoaderClient):
        (WebCore::NetscapePlugInStreamLoaderClient::didFinishLoading):
        (WebCore::NetscapePlugInStreamLoaderClient::wantsAllStreams):
        (WebCore::NetscapePlugInStreamLoaderClient::~NetscapePlugInStreamLoaderClient):
        (NetscapePlugInStreamLoader):

        * loader/ResourceLoader.h:
        (WebCore):
        (ResourceLoader):
        (WebCore::ResourceLoader::documentLoader):
        (WebCore::ResourceLoader::originalRequest):
        (WebCore::ResourceLoader::identifier):
        (WebCore::ResourceLoader::didReceiveCachedMetadata):
        (WebCore::ResourceLoader::willStopBufferingData):
        (WebCore::ResourceLoader::shouldUseCredentialStorage):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoader::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceLoader::receivedCancellation):
        (WebCore::ResourceLoader::url):
        (WebCore::ResourceLoader::handle):
        (WebCore::ResourceLoader::sendResourceLoadCallbacks):
        (WebCore::ResourceLoader::reachedTerminalState):
        (WebCore::ResourceLoader::request):
        (WebCore::ResourceLoader::cancelled):
        (WebCore::ResourceLoader::defersLoading):

2012-10-16  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=99254
        Make ScrollingTree an actual tree of nodes, and have it reflect the 
        ScrollingStateTree

        Reviewed by Simon Fraser.

        This patch finally makes the ScrollingTree over on the 
        ScrollingThread aware of the changes that we have been making to the 
        ScrollingStateTree.

        First, it makes ScrollingTreeNode a much more generic class, similar 
        to ScrollingStateNode. It is an abstract class and we will add other 
        types of nodes such as ScrollingTreeFixedNodes that will inherit from 
        this class. 

        All of the scrolling functionality that was in ScrollingTreeNode has 
        been moved to ScrollingTreeScrollingNode. And likewise, 
        ScrollingTreeNodeMac has been re-named to 
        ScrollingTreeScrollingNodeMac. 

        And finally, instead of just updating and creating the root node, 
        ScrollingTree now recurses through the whole ScrollingStateTree to 
        create and update a full tree of nodes.

        New files and moves files.
        * WebCore.xcodeproj/project.pbxproj:

        Add a getter for the children vector since we need to recurse it in 
        ScrollingTree.
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::children):
        (ScrollingStateNode):

        m_rootNode is now a ScrollingTreeScrollingNode.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):

        Instead of just updating the root node, call two new functions that 
        will take care of updating the whole tree.
        (WebCore::ScrollingTree::commitNewTreeState):

        This function ecurses through the ScrollingStateTree and updates the 
        corresponding ScrollingTreeNodes.
        (WebCore::ScrollingTree::updateNodesFromStateNode):

        This function takes the ScrollingStateTree's list of removed nodes 
        and removes the corresponding nodes from the ScrollingTree. It will 
        destroy the nodes after removing it as long as it's not the root 
        node. I think it's the safest choice for now to never remove the root 
        node. 
        (WebCore::ScrollingTree::removeDestroyedNodes):

        ScrollingTree now keeps a HashMap mapping ScrollingNodeIDs to 
        ScrollingTreeNodes.
        * page/scrolling/ScrollingTree.h:

        All of the scrolling-related functionality has been moved from this 
        class to new class ScrollingTreeScrollingNode. And some basic tree 
        traversal functionality has been added.
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::ScrollingTreeNode):
        (WebCore::ScrollingTreeNode::appendChild):
        (WebCore::ScrollingTreeNode::removeChild):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore):
        (ScrollingTreeNode):
        (WebCore::ScrollingTreeNode::scrollingNodeID):
        (WebCore::ScrollingTreeNode::setScrollingNodeID):
        (WebCore::ScrollingTreeNode::parent):
        (WebCore::ScrollingTreeNode::setParent):
        (WebCore::ScrollingTreeNode::scrollingTree):

        This class contains all of the scrolling-related work that used to be 
        done in ScrollingTreeNode.
        * page/scrolling/ScrollingTreeScrollingNode.cpp: Added.
        (WebCore):
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::~ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::update):
        * page/scrolling/ScrollingTreeScrollingNode.h: Added.
        (WebCore):
        (ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::shouldUpdateScrollLayerPositionOnMainThread):
        (WebCore::ScrollingTreeScrollingNode::viewportRect):
        (WebCore::ScrollingTreeScrollingNode::contentsSize):
        (WebCore::ScrollingTreeScrollingNode::horizontalScrollElasticity):
        (WebCore::ScrollingTreeScrollingNode::verticalScrollElasticity):
        (WebCore::ScrollingTreeScrollingNode::hasEnabledHorizontalScrollbar):
        (WebCore::ScrollingTreeScrollingNode::hasEnabledVerticalScrollbar):
        (WebCore::ScrollingTreeScrollingNode::canHaveScrollbars):
        (WebCore::ScrollingTreeScrollingNode::scrollOrigin):

        I noticed this whitespace error and had to fix it.
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::detachFromStateTree):

        Include ScrollingTreeScrollingNodeMac.h instead of 
        ScrollingTreeNodeMac.h
        * page/scrolling/mac/ScrollingTreeMac.mm:

        This class was just re-named.
        * page/scrolling/mac/ScrollingTreeNodeMac.h: Removed.
        * page/scrolling/mac/ScrollingTreeNodeMac.mm: Removed.
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h: Copied from page/scrolling/mac/ScrollingTreeNodeMac.h.
        (ScrollingTreeScrollingNodeMac):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm: Copied from page/scrolling/mac/ScrollingTreeNodeMac.mm.
        (WebCore::ScrollingTreeScrollingNode::create):
        (WebCore::ScrollingTreeScrollingNodeMac::ScrollingTreeScrollingNodeMac):
        (WebCore::ScrollingTreeScrollingNodeMac::~ScrollingTreeScrollingNodeMac):
        (WebCore::ScrollingTreeScrollingNodeMac::update):
        (WebCore::ScrollingTreeScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeMac::allowsHorizontalStretching):
        (WebCore::ScrollingTreeScrollingNodeMac::allowsVerticalStretching):
        (WebCore::ScrollingTreeScrollingNodeMac::stretchAmount):
        (WebCore::ScrollingTreeScrollingNodeMac::pinnedInDirection):
        (WebCore::ScrollingTreeScrollingNodeMac::canScrollHorizontally):
        (WebCore::ScrollingTreeScrollingNodeMac::canScrollVertically):
        (WebCore::ScrollingTreeScrollingNodeMac::shouldRubberBandInDirection):
        (WebCore::ScrollingTreeScrollingNodeMac::absoluteScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::immediateScrollBy):
        (WebCore::ScrollingTreeScrollingNodeMac::immediateScrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeMac::startSnapRubberbandTimer):
        (WebCore::ScrollingTreeScrollingNodeMac::stopSnapRubberbandTimer):
        (WebCore::ScrollingTreeScrollingNodeMac::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::minimumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::maximumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::scrollBy):
        (WebCore::ScrollingTreeScrollingNodeMac::scrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeMac::updateMainFramePinState):
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):

2012-10-16  Simon Fraser  <simon.fraser@apple.com>

        Add a new layer type for the page tiled cache layer
        https://bugs.webkit.org/show_bug.cgi?id=99491

        Reviewed by Dean Jackson.

        In preparation for using tile cache layers in place of CATiledLayer,
        add a new PlatformCALayer layer type LayerTypePageTileCacheLayer,
        since the page tile cache will have some different behavior from
        other tile cache layers.
        
        Generalize code that was looking at LayerTypeTileCacheLayer to use
        usesTileCacheLayer() if it applies to both types of tile caches.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): Show the tile
        wash for tiled layers as well as layers with transforms (the tile
        wash is just for debugging).
        (WebCore::GraphicsLayerCA::platformCALayerDidCreateTiles):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::usesTileCacheLayer):
        (PlatformCALayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer):
        (PlatformCALayer::~PlatformCALayer):
        (PlatformCALayer::tiledBacking):
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents): Avoid double-drawing the repaint counter in tile cache layers.

2012-10-16  Stephen Chenney  <schenney@chromium.org> 
        An feImage that tries to render itself should be stopped
        https://bugs.webkit.org/show_bug.cgi?id=94652

        Reviewed by Eric Seidel.

        An SVG feImage filter element will accept, as the src to render, an
        SVG document that makes use of the feImage itself. This causes the
        feImage to try to draw itself while already in the process of drawing
        itself. Various problems arise from this. The invariant we wish to
        maintain is that no element in the src tree of an feImage element
        refers to that feImage.

        This patch adds a flag to all FilterData objects that tracks whether or
        not the filter is currently applying itself, and avoids applying the
        filter recursively.

        While it may seem better to catch this problem when the src is set, or
        when the filter is built, that turns out to be challenging and
        inefficient. Say we choose to test when the src atttribute is set. To
        do so would require looking through all of the DOM nodes that will be
        rendered for the src, finding all resources used, and checking if any
        of them make use fo the feImage element that we are setting the source
        for. The infrastructure is not in place to do that, and it would
        involve walking a potentially very large portion of the DOM in order
        to detect a very rare situation. Note that it is not enough just to
        walk the DOM directly under the src; we also need to recursively follow any
        resource links to see if they use the feImage (e.g. patterns or
        masks or use or ...).

        If we instead try to use the renderer node to find self referencing,
        we need to recursively walk a potentially very large render tree,
        tracing all resources in search of the feImage. This would need to be
        done every time the filter is built, which is again a significant
        overhead for a situation that is very unlikely to occur. And we do not
        have methods that make it easy to find feImage filter effect nodes; they are
        hidden behind filter resource nodes.

        Hence the runtime check to catch the problem. The check must be in
        FilterData and RenderSVGResourceFilter code because we must prevent
        the destruction of the feImage when we encounter it recursively.

        This patch also renames FilterData::builded to FilterData::isBuilt.

        Test: svg/filters/feImage-self-referencing.html

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::ApplyingFilterEffectGuard): Guard to ensure that, in the future, we always
        clear the isApplying flag even if the postApplyResource method returns early.
        (WebCore::RenderSVGResourceFilter::applyResource): Do not apply a resource that is already applying and
        rename builded to isBuilt.
        (WebCore::RenderSVGResourceFilter::postApplyResource): Mark a resource as applying and clear after
        it is done. Abort if a resource is already applying when the method begins. Rename builded to isBuilt.
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged): Rename builded to isBuilt.
        * rendering/svg/RenderSVGResourceFilter.h:
        (WebCore::FilterData::FilterData):
        (FilterData): Add isApplying and rename builded to isBuilt.

2012-10-16  Nate Chapin  <japhet@chromium.org>

        sendResourceLoadCallbacks() is poorly named
        https://bugs.webkit.org/show_bug.cgi?id=99482

        Reviewed by Alexey Proskuryakov.

        In both CachedResource and ResourceLoader, rename sendResourceLoadCallbacks()
        to shouldSendResourceLoadCallbacks() to better indicate that it is a simple getter.

        No new tests, simple renaming.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::shouldSendResourceLoadCallbacks):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::shouldSendResourceLoadCallbacks):

2012-10-16  Chris Rogers  <crogers@google.com>

        Rename some AudioNodes
        https://bugs.webkit.org/show_bug.cgi?id=99358

        Reviewed by Daniel Bates.

        Here's a list of the node names, showing the changing ones:
            AudioBufferSourceNode
            MediaElementAudioSourceNode
            MediaStreamAudioSourceNode
            JavaScriptAudioNode ------------> ScriptProcessorNode
            RealtimeAnalyserNode ------------> AnalyserNode
            AudioGainNode ------------> GainNode
            DelayNode
            BiquadFilterNode
            AudioPannerNode ------------> PannerNode
            ConvolverNode
            AudioChannelSplitter ------------> ChannelSplitterNode
            AudioChannelMerger ------------> ChannelMergerNode
            DynamicsCompressorNode
            Oscillator ------------> OscillatorNode

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Modules/webaudio/AnalyserNode.cpp: Renamed from Source/WebCore/Modules/webaudio/RealtimeAnalyserNode.cpp.
        * Modules/webaudio/AnalyserNode.idl: Renamed from Source/WebCore/Modules/webaudio/RealtimeAnalyserNode.idl.
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setPannerNode):
        * Modules/webaudio/AudioBufferSourceNode.h:
        (AudioBufferSourceNode):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createJavaScriptNode):
        (WebCore::AudioContext::createPanner):
        (WebCore::AudioContext::createAnalyser):
        (WebCore::AudioContext::createGainNode):
        (WebCore::AudioContext::createChannelSplitter):
        (WebCore::AudioContext::createChannelMerger):
        (WebCore::AudioContext::createOscillator):
        * Modules/webaudio/AudioContext.h:
        (WebCore):
        (AudioContext):
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/ChannelMergerNode.cpp: Renamed from Source/WebCore/Modules/webaudio/AudioChannelMerger.cpp.
        * Modules/webaudio/ChannelMergerNode.h: Renamed from Source/WebCore/Modules/webaudio/AudioChannelMerger.h.
        (WebCore):
        (ChannelMergerNode):
        * Modules/webaudio/ChannelMergerNode.idl: Renamed from Source/WebCore/Modules/webaudio/AudioChannelMerger.idl.
        * Modules/webaudio/ChannelSplitterNode.cpp: Renamed from Source/WebCore/Modules/webaudio/AudioChannelSplitter.cpp.
        * Modules/webaudio/ChannelSplitterNode.h: Renamed from Source/WebCore/Modules/webaudio/AudioChannelSplitter.h.
        (WebCore):
        (ChannelSplitterNode):
        * Modules/webaudio/ChannelSplitterNode.idl: Renamed from Source/WebCore/Modules/webaudio/AudioChannelSplitter.idl.
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/webaudio/GainNode.cpp: Renamed from Source/WebCore/Modules/webaudio/AudioGainNode.cpp.
        * Modules/webaudio/GainNode.h: Renamed from Source/WebCore/Modules/webaudio/AudioGainNode.h.
        * Modules/webaudio/GainNode.idl: Renamed from Source/WebCore/Modules/webaudio/AudioGainNode.idl.
        * Modules/webaudio/OscillatorNode.cpp: Renamed from Source/WebCore/Modules/webaudio/Oscillator.cpp.
        * Modules/webaudio/OscillatorNode.h: Renamed from Source/WebCore/Modules/webaudio/Oscillator.h.
        * Modules/webaudio/OscillatorNode.idl: Renamed from Source/WebCore/Modules/webaudio/Oscillator.idl.
        * Modules/webaudio/PannerNode.cpp: Renamed from Source/WebCore/Modules/webaudio/AudioPannerNode.cpp.
        * Modules/webaudio/PannerNode.h: Renamed from Source/WebCore/Modules/webaudio/AudioPannerNode.h.
        (WebCore):
        * Modules/webaudio/PannerNode.idl: Renamed from Source/WebCore/Modules/webaudio/AudioPannerNode.idl.
        * Modules/webaudio/ScriptProcessorNode.cpp: Renamed from Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp.
        * Modules/webaudio/ScriptProcessorNode.h: Renamed from Source/WebCore/Modules/webaudio/JavaScriptAudioNode.h.
        (WebCore):
        * Modules/webaudio/ScriptProcessorNode.idl: Renamed from Source/WebCore/Modules/webaudio/JavaScriptAudioNode.idl.
        * Modules/webaudio/WaveTable.cpp:
        (WebCore::WaveTable::createSine):
        (WebCore::WaveTable::createSquare):
        (WebCore::WaveTable::createSawtooth):
        (WebCore::WaveTable::createTriangle):
        (WebCore::WaveTable::generateBasicWaveform):
        * Target.pri:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSScriptProcessorNodeCustom.cpp: Renamed from Source/WebCore/bindings/js/JSJavaScriptAudioNodeCustom.cpp.
        (WebCore):
        (WebCore::JSScriptProcessorNode::visitChildren):
        * dom/EventTarget.h:
        (WebCore):
        * dom/EventTargetFactory.in:

2012-10-16  Noam Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Refactor TextureMapperShaderManager to be clearer
        https://bugs.webkit.org/show_bug.cgi?id=86048

        Reviewed by Martin Robinson.

        Previous implementation of TextureMapperShaderManager was very verbose, calling for too
        many casts and ambiguous ownership.
        This refactor does the following:
        1. TextureMapperShaderProgram is one class without subclasses.
        2. Uniform/Attribute accessors are generated by special macros (TEXMAP_DECLARE_...) that
           generate both the C++ access function, as well as the GLSL name of the variable. This
           allows adding/removing variables from a shader without adding broiler-plate code like
           before.

        After this change TextureMapperShaderManager has only one responsibility - dealing with
        TextureMapperGL's built-in shaders and their lifecycle. Preparing filters etc. is done
        in TextureMapperGL.

        This is a refactor without new functionality. It has been verified to not break any existing
        relevant test.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawQuad):
        (WebCore::TextureMapperGL::drawTextureRectangleARB):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawTextureWithAntialiasing):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        (WebCore::TextureMapperGL::beginClip):
            Use the MACRO-generated uniform accessors.

        (WebCore):
        (WebCore::keyForFilterType):
        (WebCore::getPassesRequiredForFilter):
        (WebCore::gauss):
        (WebCore::gaussianKernel):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::BitmapTextureGL::applyFilters):
            Move the filter logic to TextureMapperGL

        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::TextureMapperShaderProgram::TextureMapperShaderProgram):
        (WebCore::TextureMapperShaderProgram::getLocation):
        (ShaderSpec):
        (WebCore::ShaderSpec::ShaderSpec):
        (WebCore::getShaderSpec):
        (WebCore::TextureMapperShaderManager::TextureMapperShaderManager):
        (WebCore::TextureMapperShaderManager::~TextureMapperShaderManager):
        (WebCore::TextureMapperShaderManager::getShaderProgram):
        * platform/graphics/texmap/TextureMapperShaderManager.h:
        (WebCore):
        (WebCore::TextureMapperShaderProgram::programID):
        (WebCore::TextureMapperShaderProgram::context):
        (WebCore::TextureMapperShaderProgram::create):
        (TextureMapperShaderProgram):
        (TextureMapperShaderManager):
            See description.

2012-10-16  Nico Weber  <thakis@chromium.org>

        [chromium/mac] Make spelling indicator HighDPI
        https://bugs.webkit.org/show_bug.cgi?id=99417

        Reviewed by Stephen White.

        This is the mac version of http://trac.webkit.org/changeset/130940
        Since the mac and non-mac code are very similar again, merge the two
        code paths again.

        Covered by editing/spelling/(inline-spelling|grammar)-markers-hidpi.html

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):

2012-10-16  Tony Chang  <tony@chromium.org>

        in a column flexbox, input overflows the box when stretched
        https://bugs.webkit.org/show_bug.cgi?id=99273

        Reviewed by Ojan Vafai.

        Fix a bug where we didn't properly subtract padding and border when overriding the child size.
        We didn't see this because of a performance optimization in RenderBox where we stretch children.
        Also apply this performance optimization in new flexbox for form controls.

        Test: css3/flexbox/stretch-input-in-column.html

        * rendering/RenderBox.cpp:
        (WebCore::flexboxChildHasStretchAlignment):
        (WebCore::isStretchingVerticalFlexboxChild):
        (WebCore::RenderBox::sizesLogicalWidthToFitContent): Apply performance optimization to form controls in new flexbox.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyStretchAlignmentToChild): Properly subtract border and padding.

2012-10-16  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r128787): Fixed position div causes other elements to not update correctly
        https://bugs.webkit.org/show_bug.cgi?id=98579

        Reviewed by Beth Dakin.

        RenderLayers cache repaint rects which are computed relative to the repaint container.
        Repaint containers depend on whether a RenderLayerBacking has its own backing store,
        so if that changes, we need to recompute repaint rects for all descendants.
        
        Test: compositing/repaint/requires-backing-repaint.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setRequiresOwnBackingStore):

2012-10-16  Zan Dobersek  <zandobersek@gmail.com>

        [GStreamer] GstBuffer ref race in WebKitWebAudioSrcLoop
        https://bugs.webkit.org/show_bug.cgi?id=95833

        Reviewed by Philippe Normand.

        The render bus used in GStreamer's implementation of AudioDestination no longer
        allocates memory for each of its channels. Rather than that, when looping, the
        data is rendered into a channel-specific GstBuffer. Each buffer is then chained
        to the appropriate GstPad, as has been the case before.

        No new tests - there are tests covering this change but they are not yet working
        on the GTK port or any other GStreamer implementation of Web Audio.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (_WebKitWebAudioSourcePrivate): Remove an unused member variable.
        (webkit_web_audio_src_init): Remove an unnecessary line.
        (webKitWebAudioSrcConstructed): Ditto.
        (webKitWebAudioSrcLoop):

2012-10-16  Pablo Flouret  <pablof@motorola.com>

        Pre-process CSSGrammar.y before running through bison.
        https://bugs.webkit.org/show_bug.cgi?id=94290

        Reviewed by Tony Chang.

        Running CSSGrammar.y through a preprocessor allows the use of feature
        defines in all places of the yacc file (i.e. not just in C blocks).
        Mostly useful to be able to keep every part of a feature under feature
        flags for self-documenting purposes.

        No new tests, CSSGrammar.y should be generated correctly and everything
        should keep working as before.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
            Modify build systems to use makegrammar.pl to generate the .y files
            and run those through bison.

        * WebCore.gyp/WebCore.gyp:
            Add a new action to preprocess the CSSGrammar.y.in file before the
            bison rule is run.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Add the new .y.in / .y.includes files.

        * css/CSSGrammar.y.in: Renamed from Source/WebCore/css/CSSGrammar.y.
            Also moved the top declarations section that has includes, defines,
            etc. to its own file. These shouldn't be touched by the first
            pass of the preprocessor. And changed the existing ENABLE(FEATURE)
            ifdefs to ENABLE_FEATURE since the ENABLE() macro is not available
            yet.
        * css/CSSGrammar.y.includes: Added.
            The aforementioned declarations header section. After the .y.in file
            is processed it will be concatenated with this one to make the
            CSSGrammar.y file.

        * css/makegrammar.pl:
            Modify the script to handle .y.in files.

2012-10-16  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Implement testRunner.dumpSelectionRect() in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=69545

        Reviewed by Simon Fraser.

        * WebCore.exp.in:

2012-10-16  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Implement fastBoundingPath/boundingPath distinction.
        https://bugs.webkit.org/show_bug.cgi?id=99471

        Reviewed by Noam Rosenthal.

        Tested by existing test: svg/custom/getBBox-path.svg

        * platform/graphics/Path.cpp:
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::fastBoundingRect):
        (WebCore::Path::boundingRect):

2012-10-16  Rob Buis  <rbuis@rim.com>

        [BlackBerry] replace BlackBerry::Platform::log() with BBLOG()
        https://bugs.webkit.org/show_bug.cgi?id=99302

        Reviewed by Yong Li.

        Fix a warning introduced by r131335. Since in release BBLOG is empty, only enable this block in debug builds.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):

2012-10-16  Antoine Quint  <graouts@apple.com>

        Inspector should allow reading the compositing debug settings
        https://bugs.webkit.org/show_bug.cgi?id=99458

        Reviewed by Timothy Hatcher.

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCompositingBordersVisible):
        * inspector/InspectorPageAgent.h:

2012-10-16  Dan Bernstein  <mitz@apple.com>

        Code to reverse a GlyphBuffer range is repeated in several places
        https://bugs.webkit.org/show_bug.cgi?id=99424

        Reviewed by Adele Peterson.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText): Replaced for loop with a call to
        GlyphBuffer::reverse.
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::reverse): Added. Reverses the given range.
        (WebCore::GlyphBuffer::swap): Made private.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::applyFontTransforms): Replaced for loops with calls to GlyphBuffer::reverse and
        corrected their bounds.
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForComplexText): Replaced for loop with a call to
        GlyphBuffer::range.

2012-10-16  Nate Chapin  <japhet@chromium.org>

        Re-order CachedRawResource::data() to set m_data earlier
        https://bugs.webkit.org/show_bug.cgi?id=99361

        Reviewed by Adam Barth.

        Currently, we calculate the diff between the data parameter and m_data, call
        dataReceived(), then set m_data to data. If something inside dataReceived()
        tries to access m_data via CachedResource::resourceBuffer(), it will see the
        old data instead of the new data, which seems inconsistent.

        No new tests, as no one appears to try to access m_data within dataReceived() currently.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::data):

2012-10-16  Julien Chaffraix  <jchaffraix@webkit.org>

        Fold setCellLogicalWidths logic into RenderTableSection layout
        https://bugs.webkit.org/show_bug.cgi?id=99382

        Reviewed by Eric Seidel.

        setCellLogicalWidths was implemented as a pre-phase to laying out
        the table's sections. This split was artificial as any change in
        the columns' logical width should trigger a sections' relayout, which
        could propagate and mark the cells / rows as needed.

        Merging setCellLogicalWidths into RenderTableSection::layout removes
        an unneeded cells walking and some clunkiness from our implementation.

        Refactoring covered by the existing tests.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable): Initialize our new boolean.
        (WebCore::RenderTable::layout):
        If m_columnLogicalWidthChanged, we force a relayout on our sections so that the cells and rows
        are marked for layout if there is the logical width change.

        * rendering/RenderTable.h:
        (WebCore::RenderTable):
        Added a new boolean to track if a column logical width changed (m_columnLogicalWidthChanged).

        (WebCore::RenderTable::setColumnPosition):
        If a column position changed, register that our column logical widths changed. This is not
        totally true, so added a comment about when it will be wrong.

        * rendering/RenderTableCell.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::setCellLogicalWidth):
        Updated the function to mark the cell and the row for layout. Also changed the argument to
        be an 'int' as this was what was passed in.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layout):
        * rendering/RenderTableSection.h:
        Removed setCellLogicalWidths and merged the logic into RenderTableSection::layout. We propagate
        the table layout's logical widths first so that rows are marked as needing layout as appropriate.

2012-10-16  Takashi Sakamoto  <tasak@google.com>

        [Meta] [Shadow] contenteditable attribute for distributed nodes.
        https://bugs.webkit.org/show_bug.cgi?id=90017

        Reviewed by Dimitri Glazkov.

        If an element is distributed to an insertion point, the element's
        webkit-user-modify is inherited from its shadow host.

        No new tests, because the existing test: user-modify-inheritance.html
        covers this change.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        After an element inherits a style from its parent, override user-modify
        by using the shadow host's style if the element is distributed.

2012-10-16  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Get rid of (now empty) JavaScriptSource and StyleSource, rename all usages to UISourceCode.
        https://bugs.webkit.org/show_bug.cgi?id=99469

        Reviewed by Pavel Feldman.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._uiSourceCodeAdded):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeRemoved):
        * inspector/front-end/CompilerScriptMapping.js:
        * inspector/front-end/JavaScriptSource.js: Removed.
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.canEditSource):
        (WebInspector.JavaScriptSourceFrame.prototype._onWorkingCopyChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._onWorkingCopyCommitted):
        (WebInspector.JavaScriptSourceFrame.prototype._innerSetContent):
        (WebInspector.JavaScriptSourceFrame.prototype.populateLineGutterContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.populateTextAreaContextMenu):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._supportsEnabledBreakpointsWhileEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._restoreBreakpointsAfterEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointAdded):
        (WebInspector.JavaScriptSourceFrame.prototype._breakpointRemoved):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextEditorContentLoaded):
        (WebInspector.JavaScriptSourceFrame.prototype._handleGutterClick):
        (WebInspector.JavaScriptSourceFrame.prototype._toggleBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype._setBreakpoint):
        (WebInspector.JavaScriptSourceFrame.prototype._continueToLine):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):
        (WebInspector.NetworkUISourceCodeProvider.prototype._resourceAdded):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._getOrCreateTemporaryUISourceCode):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel):
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype.evaluateScriptSnippet.get var):
        (WebInspector.ScriptSnippetModel.prototype.evaluateScriptSnippet.compileCallback):
        (WebInspector.ScriptSnippetModel.prototype.evaluateScriptSnippet):
        (WebInspector.ScriptSnippetModel.prototype._createUISourceCodeForScript):
        (WebInspector.ScriptSnippetModel.prototype._removeBreakpoints):
        (WebInspector.ScriptSnippetModel.prototype._projectWillReset):
        (WebInspector.SnippetScriptFile):
        (WebInspector.SnippetScriptFile.prototype._workingCopyCommitted):
        (WebInspector.SnippetScriptFile.prototype._workingCopyChanged):
        * inspector/front-end/ScriptsNavigator.js:
        (WebInspector.SnippetsNavigatorView.prototype._handleEvaluateSnippet):
        (WebInspector.SnippetsNavigatorView.prototype._handleRemoveSnippet):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.ScriptsPanel.prototype._uiSourceCodeFormatted):
        (WebInspector.ScriptsPanel.prototype._showOutlineDialog):
        (WebInspector.ScriptsPanel.prototype.set _fileRenamed):
        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested.callback):
        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested):
        * inspector/front-end/SnippetJavaScriptSourceFrame.js:
        (WebInspector.SnippetJavaScriptSourceFrame):
        (WebInspector.SnippetJavaScriptSourceFrame.prototype._runButtonClicked):
        * inspector/front-end/StyleSheetOutlineDialog.js:
        (WebInspector.StyleSheetOutlineDialog):
        (WebInspector.StyleSheetOutlineDialog.show):
        (WebInspector.StyleSheetOutlineDialog.prototype.requestItems):
        * inspector/front-end/StyleSource.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2012-10-15  Jer Noble  <jer.noble@apple.com>

        WebAudio: limit output level to 0db
        https://bugs.webkit.org/show_bug.cgi?id=95792
        <rdar://problem/11966135>

        Reviewed by Chris Rogers.

        Clamp the output buffer data to the range of [-1,1], which limits
        output volume to 0db. This ensures that malicious or poorly-written
        pages will not be able to blow through the system volume limit by
        creating >0db buffers and effects.

        No new tests; added ManualTests/webaudio/limit-level-0db.html.

        Clamp the output vector to values of [-1,1]:
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::render):

        Add a VectorMath wrapper for vDSP_clip to provide accelerated vector threshold operations:
        * platform/audio/VectorMath.h:
        * platform/audio/VectorMath.cpp:
        (VectorMath):
        (WebCore::VectorMath::vclip):

2012-10-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract domain specific editing handling logic from UISourceCode (step 2).
        https://bugs.webkit.org/show_bug.cgi?id=99301

        Reviewed by Pavel Feldman.

        StyleFile and ScriptFile now listen for the UISourceCode WorkingCopyChanged/Committed events and process
        them instead of being called explicitly.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._willMergeToVM):
        (WebInspector.JavaScriptSourceFrame.prototype._didMergeToVM):
        (WebInspector.JavaScriptSourceFrame.prototype._willDivergeFromVM):
        (WebInspector.JavaScriptSourceFrame.prototype._didDivergeFromVM):
        (WebInspector.JavaScriptSourceFrame.prototype._muteBreakpointsWhileEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._restoreBreakpointsAfterEditing):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype._hasMergedToVM):
        (WebInspector.ResourceScriptMapping.prototype._hasDivergedFromVM):
        (WebInspector.ResourceScriptMapping.prototype._bindUISourceCodeToScripts):
        (WebInspector.ResourceScriptFile):
        (WebInspector.ResourceScriptFile.prototype._workingCopyCommitted):
        (WebInspector.ResourceScriptFile.prototype._workingCopyChanged):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.SnippetScriptFile):
        (WebInspector.SnippetScriptFile.prototype._workingCopyCommitted):
        (WebInspector.SnippetScriptFile.prototype._workingCopyChanged):
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StyleFile):
        (WebInspector.StyleFile.prototype._workingCopyCommitted):
        (WebInspector.StyleFile.prototype._workingCopyChanged):
        (WebInspector.StyleFile.prototype._commitIncrementalEdit):
        (WebInspector.StyleFile.prototype._clearIncrementalUpdateTimer):
        (WebInspector.StyleFile.prototype.addRevision):
        (WebInspector.StyleContentBinding.prototype._innerStyleSheetChanged):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.setWorkingCopy):
        (WebInspector.UISourceCode.prototype.commitWorkingCopy):

2012-10-16  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Elements] Double-click to live edit style tags changes text to 'undefined' in some situations
        https://bugs.webkit.org/show_bug.cgi?id=99336

        Reviewed by Vsevolod Vlasov.

        Before editing text nodes, set their textContent to the nodeValue() of the corresponding WebInspector.DOMNode in the UI.
        Drive-by: fix text node editing artifact in the DOM tree.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._startEditingTextNode):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):

2012-10-16  Mike West  <mkwst@chromium.org>

        Web Inspector: Whitelist safe styles for 'console.log('%c...', ...)'.
        https://bugs.webkit.org/show_bug.cgi?id=98945

        Reviewed by Pavel Feldman.

        Support for styling console messages via '%c' landed without any
        parsing of the style information provided. This means that it's fairly
        simple to accidentally or maliciously break the console with cleverly
        styled messages. To mitigate this risk, whitelisting a safe subset of
        CSS seems appropriate.

        As a first pass at a reasonable whitelist, this patch allows
        'background[-*]', 'border[-*]', 'color[-*]', 'font[-*]',
        'margin[-*]', 'padding[-*]', 'text[-*]', '-webkit-background[-*]',
        '-webkit-border[-*]', '-webkit-font[-*]', '-webkit-margin[-*]',
        '-webkit-padding[-*]', and '-webkit-text[-*]'.

        Test: inspector/console/console-format-style-whitelist.html

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatWithSubstitutionString.styleFormatter):
            Create a buffer element onto which the user-provided styles are
            applied. Whitelisted styles are transfered from the buffer onto
            the actual console message.
        (WebInspector.ConsoleMessageImpl.prototype._formatWithSubstitutionString.isWhitelistedProperty):
             Returns true if the specific style is whitelisted. Expects styles
             in the hyphenated form (that is, '-webkit-padding-start' rather than
             CSSOM's 'webkitPaddingStart').

2012-10-16  Luke Macpherson   <macpherson@chromium.org>

        Handle CSSPropertyOpacity in StyleBuilder.
        https://bugs.webkit.org/show_bug.cgi?id=99418

        Reviewed by Alexis Menard.

        One small step in moving from the huge switch in StyleResolver::applyProperty() to the StyleBuilder approach.

        Covered by many existing tests, for example fast/text/complex-text-opacity.html.

        * css/StyleBuilder.cpp:
        (WebCore::StyleBuilder::StyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2012-10-16  Kent Tamura  <tkent@chromium.org>

        Fix some appearance glitches of multiple fields input elements
        https://bugs.webkit.org/show_bug.cgi?id=99412

        A follow-up change for r131421.

        * css/themeWin.css:
        (input[type="text"]): Don't reset paddings for date/time types.

2012-10-16  Kenichi Ishibashi  <bashi@chromium.org>

        hb_face_t instances should not depend on FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=99430

        Reviewed by Kent Tamura.

        Use platform specific font data (e.g. SkTypeface) to get
        font tables for harfbuzz-ng.

        No new tests. No changes in behavior.

        * platform/graphics/harfbuzz/ng/HarfBuzzNGFaceCairo.cpp:
        (WebCore::harfbuzzCairoGetTable): Takes cairo_scaled_font_t* as userData.
        (WebCore::HarfBuzzNGFace::createFace):
        * platform/graphics/harfbuzz/ng/HarfBuzzNGFaceCoreText.cpp:
        (WebCore::harfbuzzCoreTextGetTable): Takes CGFontRef as userData.
        (WebCore::HarfBuzzNGFace::createFace):
        * platform/graphics/harfbuzz/ng/HarfBuzzNGFaceSkia.cpp:
        (WebCore::harfbuzzSkiaGetTable): Takes SkFontID as userData.
        (WebCore::HarfBuzzNGFace::createFace):

2012-10-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131418.
        http://trac.webkit.org/changeset/131418
        https://bugs.webkit.org/show_bug.cgi?id=99431

        since 131403 seems innocent (Requested by shinyak|_ on
        #webkit).

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

2012-10-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI Instrument InspectorOverlay. It costs us ~9Mb because it creates page size canvas.
        https://bugs.webkit.org/show_bug.cgi?id=99426

        Reviewed by Yury Semikhatsky.

        New object type InspectorOverlay was added. InspectorOverlay was instrumented.
        The instrumentation code automatically visits all the objects that can be reached via m_overlayPage.

        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryTypes):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::reportMemoryUsage):
        (WebCore):
        * inspector/InspectorOverlay.h:
        (InspectorOverlay):

2012-10-16  Kent Tamura  <tkent@chromium.org>

        Remove unused functions in Locale* classes
        https://bugs.webkit.org/show_bug.cgi?id=99425

        Reviewed by Yuta Kitamura.

        Locale*::currentLocale has been unused since LocalizedDate* and
        LocalizedNumber* were removed.

        No new tests. This shouldn't change any behavior.

        * platform/text/LocaleICU.cpp: Remove createForCurrentLocale and currentLocale.
        * platform/text/LocaleICU.h: Ditto.
        * platform/text/LocaleWin.cpp: Remove currentLocale.
        * platform/text/LocaleWin.h: Ditto.
        * platform/text/mac/LocaleMac.h: Remove currentLocale.
        * platform/text/mac/LocaleMac.mm: Ditto.

2012-10-15  Kent Tamura  <tkent@chromium.org>

        Fix some appearance glitches of multiple fields input elements
        https://bugs.webkit.org/show_bug.cgi?id=99412

        Reviewed by Kentaro Hara.

        1. If CSS-specified width is wider than the intrinsic width of an input,
        the spin button and the picker indicator triangle should be put at the
        right side of the content area.

        2. Remove top, right, and bottom paddings to match input[type=number]
        appearance as possible.

        3. Remove unnecessary position:relative for spin buttons.

        4. Center content vertically if the height is taller than the intrinsic height.

        Tests: Update all of rendering tests for input element with multiple fields UI.

        * css/html.css:
        (input[type="date"]):
        - Specify display:-webkit-inline-flex and -webkit-align-items:stretch to center contents.
        - Remove top/right/bottom paddings.
        (input[type="datetime"]): Ditto.
        (input[type="datetime-local"]): Ditto.
        (input[type="month"]): Ditto.
        (input[type="time"]): Ditto.
        (input[type="week"]): Ditto.
        (input::-webkit-datetime-edit):
        - Switch to the starndard flexible box from the legacy one.
        - Add white-space:pre to avoid to collapse white spaces.
        (input::-webkit-datetime-edit-gap):
        Added. This element is added to push a spin button to the right side.
        (input::-webkit-date-and-time-container):
        Add -webkit-flex:1 for the input flexible box.
        Sort properties.
        (input[type="week"]::-webkit-inner-spin-button):
        - Use this in date, datetime, datetime-local, and week types.
        - Add display:inline-block because other elements in -webkit-datetime-edit is inilne.
        - Add position:static to cancel position:relative below.

        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::layout):
        Add an element with -webkit-datetime-edit-gap before a spin button.

2012-10-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: can't click delete button if watch expression is very long
        https://bugs.webkit.org/show_bug.cgi?id=99414

        Reviewed by Vsevolod Vlasov.

        Minus button in watch expression section doesn't overlap with the
        expression/value anymore.

        * inspector/front-end/inspector.css:
        (.properties-tree.watch-expressions > li.hovered):

2012-10-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131403.
        http://trac.webkit.org/changeset/131403
        https://bugs.webkit.org/show_bug.cgi?id=99420

        Suspicious to cause Performance test failing (Requested by
        shinyak|gardenin on #webkit).

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

2012-10-15  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: restore watch expression expansion state
        https://bugs.webkit.org/show_bug.cgi?id=99304

        Reviewed by Pavel Feldman.

        Expand watch expression value and its properties if they were expanded
        before update.

        Test: inspector/debugger/watch-expressions-preserve-expansion.html

        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionTreeElement.prototype.onexpand):
        (WebInspector.WatchExpressionTreeElement.prototype.oncollapse):
        (WebInspector.WatchExpressionTreeElement.prototype.onattach):
        (WebInspector.WatchExpressionTreeElement.prototype._expression):
        (WebInspector.WatchedPropertyTreeElement):
        (WebInspector.WatchedPropertyTreeElement.prototype.onattach):
        (WebInspector.WatchedPropertyTreeElement.prototype.onexpand):
        (WebInspector.WatchedPropertyTreeElement.prototype.oncollapse):
        (WebInspector.WatchedPropertyTreeElement.prototype._propertyPath):

2012-10-15  Mike West  <mkwst@chromium.org>

        Warn when CSP headers don't separate directives with ';'.
        https://bugs.webkit.org/show_bug.cgi?id=99274

        Reviewed by Adam Barth.

        A recent bug report exhibited confusion as to what role, exactly,
        semicolons play in Content Security Policy definitions. This patch
        adjusts the parser to warn web authors if a directive name is
        encountered while parsing a source list, which would almost certainly
        point to a missing semicolon. For example, something like:

            script-src 'self' object-src 'self' style-src *

        would throw two warnings, noting that 'object-src' and 'style-src' are
        probably meant as directives, and not as source expressions in the
        'script-src' source list.

        Test: http/tests/security/contentSecurityPolicy/source-list-parsing-no-semicolon.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSourceList::parse):
            Throw the new warning onto the console if the hostname of a source
            expression matches a CSP directive name.
        (WebCore::CSPDirectiveList::addDirective):
            Use the exciting new static variables so that the names of various
            directives are available outside of CSPDirectiveList::addDirective.
            These were previously defined as local static ASCIILiterals. Now
            they're static const char[] in an anonymous namespace.
        (WebCore::ContentSecurityPolicy::isDirectiveName):
            Static method that compares a string to all the known directive
            names, returning true if there's a (case-insensitive) match.
        (WebCore):
        (WebCore::ContentSecurityPolicy::reportDirectiveAsSourceExpression):
            A new warning message which should be printed when a directive name
            is encountered as a source expression. Matching the directive name
            is done via a new 'isDirectiveName' function which lives in an
            anonymous namespace along with the other CSP helper functions.
        * page/ContentSecurityPolicy.h:
            Added 'reportDirectiveAsSourceExpression' signature.

2012-10-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r131349.
        http://trac.webkit.org/changeset/131349
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Revert r131349 because API test is broken by this commit.

        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):

2012-10-15  Nate Chapin  <japhet@chromium.org>

        ResourceLoader::sendResourceLoadCallbacks() is backwards
        https://bugs.webkit.org/show_bug.cgi?id=99366

        Reviewed by Daniel Bates.

        No new tests, this function is uncalled but will be used
        in a later patch.

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::sendResourceLoadCallbacks):

2012-10-15  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r131365): WidthIterator::advance() is needlessly passed a GlyphBuffer in many cases
        https://bugs.webkit.org/show_bug.cgi?id=99413

        Reviewed by Adele Peterson.

        r131365 made Font::width() always pass a GlyphBuffer pointer to floatWidthForSimpleText and
        from there down to WidthIterator::advance(). However, when measuring the width of a run, a
        GlyphBuffer is only needed if font transforms (kerning and ligatures) need to be applied.

        No new test, because there is no change in behavior.

        * platform/graphics/Font.cpp:
        (WebCore::Font::width): Removed the local GlyphBuffer that was passed down to
        floatWidthForSimpleText().
        * platform/graphics/Font.h: Removed the GlyphBuffer* parameter to floatWidthForSimpleText.
        All but the above caller were passing 0.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::floatWidthForSimpleText): Removed the GlyphBuffer* parameter and added a
        local GlyphBuffer, which is passed by reference to WidthIterator::advance() only if
        typesetting features require it.
        (WebCore::Font::offsetForPositionForSimpleText): Updated for change to
        floatWidthForSimpleText.
        * platform/graphics/pango/FontPango.cpp:
        (WebCore::Font::floatWidthForComplexText): Ditto.

2012-10-15  Pablo Flouret  <pablof@motorola.com>

        Add force parameter to DOMTokenList.toggle
        https://bugs.webkit.org/show_bug.cgi?id=99375

        Reviewed by Darin Adler.

        See http://dom.spec.whatwg.org/#dom-domtokenlist-toggle and
        https://www.w3.org/Bugs/Public/show_bug.cgi?id=18463

        Essentially, the optional boolean force parameter, if present, makes
        toggle always add or remove a class.

        No new tests, modified fast/dom/HTMLElement/script-tests/class-list.js

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::toggle):
        (WebCore):
        * html/DOMTokenList.h:
        (DOMTokenList):
        * html/DOMTokenList.idl:
            New toggle() overload that takes a force parameter and calls
            addInternal() or removeInternal() based on it.

2012-10-15  Dan Bernstein  <mitz@apple.com>

        Layout Test fast/text/justify-ideograph-leading-expansion.html is failing an assertion chromium mac
        https://bugs.webkit.org/show_bug.cgi?id=99406

        Reviewed by Darin Adler.

        * platform/graphics/WidthIterator.cpp:
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::shouldApplyFontTransforms): Changed to return false if the run is
        shorter than 2 characters. 1-character runs are invariant under font transforms, and therefore
        Font::codePath() sends them through WidthIterator even on platforms where WidthIterator
        does not support kerning and ligatures.

2012-10-15  Michael Saboff  <msaboff@apple.com>

        Add 8 bit patch to Document::isValidName() for the non ASCII case
        https://bugs.webkit.org/show_bug.cgi?id=99402

        Reviewed by Darin Adler.

        Added 8 bit path to complete the processing of an 8 bit names without up-converting.

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

2012-10-15  Vlad Grecescu  <igrecesc@adobe.com>, Douglas Stockwell  <dstockwell@chromium.org>

        Support for background-clip:content-box and padding-box with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=23166

        Reviewed by Simon Fraser.

        Test: fast/css/background-clip-radius-values.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::clipRoundedInnerRect):
        (WebCore):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:

2012-10-15  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix unused parameter build warning.
        https://bugs.webkit.org/show_bug.cgi?id=99400

        Reviewed by Gyuyoung Kim.

        Remove the name of unused parameters to fix the build warning (-Wunused-parameter).

        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::ResourceError::tlsError):

2012-10-15  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] WebSocketInflater should handle BFINAL = 1 blocks
        https://bugs.webkit.org/show_bug.cgi?id=99282

        Reviewed by Yuta Kitamura.

        Reset decompression state if WebSocketInflater decompress a block with
        BFINAL set to 1.

        Test: http/tests/websocket/tests/hybi/deflate-frame-set-bfinal.html

        * Modules/websockets/WebSocketDeflater.cpp:
        (WebCore::WebSocketInflater::addBytes):
        Reset decompression state if inflate() returns Z_STREAM_END, which means the BFINAL
        of the current block was set to 1.
        (WebCore::WebSocketInflater::finish): Add an assertion.

2012-10-15  Simon Fraser  <simon.fraser@apple.com>

        Fix GraphicsLayer visible rect computation when scrolling in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=99385

        Reviewed by Dean Jackson, Tim Horton.

        RenderLayerCompositor always used frameView->frameRect() as the visible
        rect on the root used for GraphicsLayer visibleRect computation. This
        was wrong for subframes, which require a rect with an origin of (0,0)
        and size of the contentsSize().
        
        It was also wrong when the scrolling is not represented in the GraphicsLayer
        tree. When scrolling is done elsewhere, we need to use the ScrollView's
        visibleContentRect().

        Tests: compositing/visible-rect/scrolled.html
               compositing/visible-rect/iframe-and-layers.html
               compositing/visible-rect/iframe-no-layers.html

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

2012-10-15  Julien Chaffraix  <jchaffraix@webkit.org>

        Remove page visibility hidden histograms
        https://bugs.webkit.org/show_bug.cgi?id=99360

        Reviewed by Ojan Vafai.

        The 2 page visibility hidden histograms were added in http://webkit.org/b/85537 to
        investigate a potential optimization where we would destroy the render tree when
        a tab was hidden. The optimization was abandoned but the histograms were never
        removed. They are too narrow to be reused so this change removes them.

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

2012-10-15  Ryuan Choi  <ryuan.choi@samsung.com>

        REGRESSION: Build break after r131373 when ACCELERATED_COMPOSITING disabled
        https://bugs.webkit.org/show_bug.cgi?id=99397

        Unreviewed, build fix.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):

2012-10-14  Kent Tamura  <tkent@chromium.org>

        Input elements with multiple fields UI should set appropriate direction for browser locale automatically
        https://bugs.webkit.org/show_bug.cgi?id=99291

        Reviewed by Hajime Morita.

        Input elemnts with multiple fields UI ignores HTML dir attribute or CSS
        direction property, and their direction should be decided by the browser
        locale. If the browser locale is a RTL language, date/time input fields
        show formats/digits for the RTL language. The layout should be always
        RTL regardless of the direction in such case.

        Test: fast/forms/date-multiple-fields/date-multiple-fields-appearance-l10n.html

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue):
        Set approriate dir attribute value to the child element of the UA shadow root.

2012-10-15  Andreas Kling  <kling@webkit.org>

        StyleResolver: Garbage collect the matched properties cache on a timer.
        <http://webkit.org/b/98625>

        Reviewed by Eric Seidel.

        Sweeping the matched properties cache once every 100 additions ended up choking RoboHornet's
        svgresize.html benchmark. Move it to a single-shot timer that's refreshed every 100 additions
        and defers the actual sweep for 60 seconds.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::sweepMatchedPropertiesCache):
        (WebCore::StyleResolver::addToMatchedPropertiesCache):
        * css/StyleResolver.h:
        (StyleResolver):

2012-10-15  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [GStreamer] GstCaps are leaked when building with gstreamer-1.0
        https://bugs.webkit.org/show_bug.cgi?id=99362

        Reviewed by Martin Robinson.

        Implement GRefPtr<GstCaps> adoptGRef(GstCaps*).

        Change webkitGstGetPadCaps signature to return a GRefPtr<GstCaps>, and
        use GRefPtr<GstCaps> also in webkitVideoSinkRender to simply GstCaps
        refeference count.

        Covered by existing tests.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        (WTF):
        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        (webkitGstGetPadCaps):
        * platform/graphics/gstreamer/GStreamerVersioning.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::naturalSize):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender):

2012-10-15  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r131367.
        http://trac.webkit.org/changeset/131367
        https://bugs.webkit.org/show_bug.cgi?id=98666

        crashes on Apple Mac

        * css/html.css:
        (input[type="range"]::-webkit-slider-container, input[type="range"]::-webkit-media-slider-container):
        (input[type="range"]::-webkit-slider-runnable-track):
        (input[type="range"]::-webkit-slider-thumb, input[type="range"]::-webkit-media-slider-thumb):
        * css/mediaControlsChromium.css:
        (input[type="range"]::-webkit-media-slider-thumb):
        * css/mediaControlsChromiumAndroid.css:
        (input[type="range"]::-webkit-media-slider-thumb):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::listAttributeTargetChanged):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderThumb::layout):
        (WebCore):
        (WebCore::RenderSliderContainer::RenderSliderContainer):
        (RenderSliderContainer):
        (WebCore::RenderSliderContainer::layout):
        * html/shadow/SliderThumbElement.h:
        (RenderSliderThumb):
        * rendering/RenderSlider.cpp:
        (WebCore):
        (WebCore::RenderSlider::RenderSlider):
        (WebCore::RenderSlider::layout):
        * rendering/RenderSlider.h:
        (WebCore):
        (RenderSlider):
        (WebCore::RenderSlider::renderName):
        (WebCore::RenderSlider::isSlider):
        (WebCore::RenderSlider::requiresForcedStyleRecalcPropagation):
        (WebCore::toRenderSlider):

2012-10-15  Dan Bernstein  <mitz@apple.com>

        Try to fix the build again after r131375.

        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::shouldApplyFontTransforms): Removed the length check from here.

2012-10-15  Dan Bernstein  <mitz@apple.com>

        Try to fix assertion failures on ports that do not support kerning and ligatures on the fast
        code path after r131365.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::applyFontTransforms): Changed the early return condition to not bother with 1-glyph
        sequences.
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::shouldApplyFontTransforms): Changed to return false if the run is
        shorter than 2 characters.

2012-10-15  Dan Bernstein  <mitz@apple.com>

        Try to fix the Chromium Mac build after r131365.

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBufferAdvance::height): Added.
        * platform/graphics/skia/FontSkia.cpp:
        (WebCore::Font::drawGlyphs): Changed to use accessors for the GlyphBufferAdvance’s width and height.

2012-10-15  Simon Fraser  <simon.fraser@apple.com>

        Ensure that GraphicsLayer positions are updated while doing threaded scrolling
        https://bugs.webkit.org/show_bug.cgi?id=99372

        Reviewed by Anders Carlsson.

        When doing threaded scrolling, the scrolling thread updates the positions of CALayers,
        but doesn't update GraphicsLayers. This means that code that relies on GraphicsLayer positions
        works incorrectly.
        
        Threaded scrolling is not testabled in layout tests.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer):
        (WebCore::GraphicsLayer::syncPosition):

2012-10-15  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: Implement RTCDataChannel
        https://bugs.webkit.org/show_bug.cgi?id=99080

        Reviewed by Adam Barth.

        This patch introduces RTCDataChannel which is a pipe for sending data between two RTCPeerConnections.
        Since the data channel belongs to a peer connection object I have reused part of its infrastructure.

        Not currently testable. My next patch will add the chromium WebKit functionality, together with mocks and tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCDataChannel.cpp: Added.
        (WebCore):
        (WebCore::RTCDataChannel::create):
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::~RTCDataChannel):
        (WebCore::RTCDataChannel::label):
        (WebCore::RTCDataChannel::reliable):
        (WebCore::RTCDataChannel::readyState):
        (WebCore::RTCDataChannel::bufferedAmount):
        (WebCore::RTCDataChannel::binaryType):
        (WebCore::RTCDataChannel::setBinaryType):
        (WebCore::RTCDataChannel::send):
        (WebCore::RTCDataChannel::close):
        (WebCore::RTCDataChannel::readyStateChanged):
        (WebCore::RTCDataChannel::dataArrived):
        (WebCore::RTCDataChannel::error):
        (WebCore::RTCDataChannel::descriptor):
        (WebCore::RTCDataChannel::interfaceName):
        (WebCore::RTCDataChannel::scriptExecutionContext):
        (WebCore::RTCDataChannel::stop):
        (WebCore::RTCDataChannel::eventTargetData):
        (WebCore::RTCDataChannel::ensureEventTargetData):
        * Modules/mediastream/RTCDataChannel.h: Added.
        (WebCore):
        (RTCDataChannel):
        (WebCore::RTCDataChannel::refEventTarget):
        (WebCore::RTCDataChannel::derefEventTarget):
        * Modules/mediastream/RTCDataChannel.idl: Added.
        * Modules/mediastream/RTCDataChannelEvent.cpp: Added.
        (WebCore):
        (WebCore::RTCDataChannelEvent::create):
        (WebCore::RTCDataChannelEvent::RTCDataChannelEvent):
        (WebCore::RTCDataChannelEvent::~RTCDataChannelEvent):
        (WebCore::RTCDataChannelEvent::channel):
        (WebCore::RTCDataChannelEvent::interfaceName):
        * Modules/mediastream/RTCDataChannelEvent.h: Added.
        (WebCore):
        (RTCDataChannelEvent):
        * Modules/mediastream/RTCDataChannelEvent.idl: Added.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createDataChannel):
        (WebCore):
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::didAddRemoteDataChannel):
        (WebCore::RTCPeerConnection::stop):
        * Modules/mediastream/RTCPeerConnection.h:
        (WebCore):
        (RTCPeerConnection):
        * Modules/mediastream/RTCPeerConnection.idl:
        * WebCore.gypi:
        * dom/EventNames.h:
        (WebCore):
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * platform/mediastream/RTCDataChannelDescriptor.cpp: Added.
        (WebCore):
        (WebCore::RTCDataChannelDescriptor::create):
        (WebCore::RTCDataChannelDescriptor::RTCDataChannelDescriptor):
        (WebCore::RTCDataChannelDescriptor::~RTCDataChannelDescriptor):
        (WebCore::RTCDataChannelDescriptor::readyStateChanged):
        (WebCore::RTCDataChannelDescriptor::dataArrived):
        (WebCore::RTCDataChannelDescriptor::error):
        * platform/mediastream/RTCDataChannelDescriptor.h: Added.
        (WebCore):
        (RTCDataChannelDescriptorClient):
        (WebCore::RTCDataChannelDescriptorClient::~RTCDataChannelDescriptorClient):
        (RTCDataChannelDescriptor):
        (ExtraData):
        (WebCore::RTCDataChannelDescriptor::ExtraData::~ExtraData):
        (WebCore::RTCDataChannelDescriptor::client):
        (WebCore::RTCDataChannelDescriptor::setClient):
        (WebCore::RTCDataChannelDescriptor::label):
        (WebCore::RTCDataChannelDescriptor::reliable):
        (WebCore::RTCDataChannelDescriptor::readyState):
        (WebCore::RTCDataChannelDescriptor::bufferedAmount):
        (WebCore::RTCDataChannelDescriptor::setBufferedAmount):
        (WebCore::RTCDataChannelDescriptor::extraData):
        (WebCore::RTCDataChannelDescriptor::setExtraData):
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        (RTCPeerConnectionHandlerDummy):
        (WebCore::RTCPeerConnectionHandlerDummy::openDataChannel):
        (WebCore):
        (WebCore::RTCPeerConnectionHandlerDummy::sendStringData):
        (WebCore::RTCPeerConnectionHandlerDummy::sendRawData):
        (WebCore::RTCPeerConnectionHandlerDummy::closeDataChannel):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        (WebCore):
        (RTCPeerConnectionHandler):
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        (WebCore):
        (RTCPeerConnectionHandlerClient):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::openDataChannel):
        (WebCore):
        (WebCore::RTCPeerConnectionHandlerChromium::sendStringData):
        (WebCore::RTCPeerConnectionHandlerChromium::sendRawData):
        (WebCore::RTCPeerConnectionHandlerChromium::closeDataChannel):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (RTCPeerConnectionHandlerChromium):

2012-10-15  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Pass type of error causing abort to IDBTransaction::onAbort
        https://bugs.webkit.org/show_bug.cgi?id=99097

        Reviewed by Tony Chang.

        Include the error causing the abort in the callback from back end to
        front end so it can be exposed on the IDBTransaction.error property.

        Test: lazy-index-population.html

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::setIntVersionInternal):
        * Modules/indexeddb/IDBDatabaseCallbacks.h:
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::setIndexKeys):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort):
        * Modules/indexeddb/IDBTransaction.h:
        (IDBTransaction):
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore):
        (WebCore::IDBTransactionBackendImpl::commit):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        (IDBTransactionBackendImpl):
        * Modules/indexeddb/IDBTransactionCallbacks.h:
        (IDBTransactionCallbacks):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):

2012-10-15  Mike Reed  <reed@google.com>

        In Skia's ImageFrame, only set the isOpaque flag when the frame is complete
        https://bugs.webkit.org/show_bug.cgi?id=99326

        Reviewed by Stephen White.

        No new tests -- existing layouttests exercise this, esp. 
          png-partial-load-no-alpha.html
          webp-partial-load.html
        These two fail if skia is told that these are opaque, which it is w/o this CL.

        At the moment, Skia has a hack to ignore the opaque-setting, so that these tests will pass as is.
        This change is to first, correct webkit to only set isOpaque when the frame is complete, so that
        in a later change, Skia can remove the hack, and re-enable its opaqueness optimization.

        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::ImageFrame):
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::zeroFillPixelData):
        (WebCore::ImageFrame::hasAlpha):
        (WebCore::ImageFrame::setHasAlpha):
        (WebCore::ImageFrame::setStatus):

2012-10-12  Tony Chang  <tony@chromium.org>

        input[type=range] as a flex item renders thumb at wrong position
        https://bugs.webkit.org/show_bug.cgi?id=98666

        Reviewed by Ojan Vafai.

        Replace RenderSlider implementation with new flexbox and clean up the shadow DOM.
        The previous code was trying to set the height to 100% and had a bunch of hacks in
        the renderer code to set an explicit height. Using the new flexbox allows us to
        remove these renderer hacks.

        Test: css3/flexbox/flexitem-stretch-range.html

        * css/html.css:
        (input[type="range"]::-webkit-slider-container, input[type="range"]::-webkit-media-slider-container): Use new flexbox.
        (input[type="range"]::-webkit-slider-runnable-track): Use new flexbox.
        (input[type="range"]::-webkit-slider-thumb, input[type="range"]::-webkit-media-slider-thumb): Remove relative positioning since we're
        no longer setting top/left in the layout code.
        * css/mediaControlsChromium.css: Remove redundant styles and bottom: 1px hack.
        * css/mediaControlsChromiumAndroid.css: Remove redundant styles and bottom: 1px hack.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::listAttributeTargetChanged): We need to force a layout
        since the height of the control should change when adding/removing a datalist.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::RenderSliderContainer): Use new flexbox.
        (WebCore::RenderSliderContainer::computeLogicalHeight): Rather than setting style()->height() in layout, just compute the correct
        height when asked.  If we have a datalist, we increase the height (same code as before).  If we're vertical,
        we use the intrinsic size.
        (WebCore::RenderSliderContainer::layout): Remove extra layout code, but handle the position of the thumb.
        This used to be handled in the thumb's layout method, but I deleted that.
        * html/shadow/SliderThumbElement.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::RenderSlider): Use new flexbox.
        (WebCore::RenderSlider::layout): Set the limiter size to the size of the thumb. This is necessary
        for fast/css/unknown-pseudo-element-matching.html which tries to set the height of the thumb to 1px
        and expects the input to also have a height of 1px.  It worked before because the height of the input
        didn't depend on the height of its children.
        * rendering/RenderSlider.h: Fix indentation.
        (RenderSlider): Use new flexible box.

2012-10-15  Julien Chaffraix  <jchaffraix@webkit.org>

        Make RenderTable columns() and columnPositions() return a const reference
        https://bugs.webkit.org/show_bug.cgi?id=99339

        Reviewed by Abhishek Arya.

        The 2 getters were returning a non-const reference. This means that callers
        could have modified the Vector's where only FixedTableLayout and AutoTableLayout
        were expected to (for columnPositions(), no one should modify columns()).

        Refactoring covered by existing tests.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::layout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::layout):
        Updated those functions to use the new setter.

        * rendering/RenderTable.h:
        (WebCore::RenderTable::columns):
        (WebCore::RenderTable::columnPositions):
        Made the 2 functions return a const reference. They are also const now!

        (WebCore::RenderTable::setColumnPosition):
        Added this setter.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::setCellLogicalWidths):
        (WebCore::RenderTableSection::dirtiedColumns):
        Updated to use a const reference.

2012-10-15  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/12470680> Font’s fast code path doesn’t support kerning and ligatures
        https://bugs.webkit.org/show_bug.cgi?id=99113

        Reviewed by Tim Horton.

        * WebCore.exp.in: Exported wkCTFontTransformGlyphs.
        * platform/graphics/Font.cpp:
        (WebCore::Font::width): Added a local GlyphBuffer to pass to floatWidthForSimpleText().
        (WebCore::Font::codePath): Rather than always use the complex code path when any typesetting
        features are enabled, changed to do so only if WidthIterator doesn’t support this Font’s
        typesetting features.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText): Added a local GlyphBuffer to pass to
        WidthIterator::advance() when advancing to or from the range of interest. Added a FIXME
        about how this is not entirely correct when kerning or ligatures are enabled.
        (WebCore::Font::selectionRectForSimpleText): Added a local GlyphBuffer to pass to
        WidthIterator::advance() when advancing to or from the range of interest.
        (WebCore::Font::offsetForPositionForSimpleText): Updated for the change to
        WidthIterator::advanceOneCharacter().
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::applyTransforms): Added. Calls wkCTFontTransformGlyphs() where
        available.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Added initializer for the new m_typesettingFeatures
        data member.
        (OriginalAdvancesForCharacterTreatedAsSpace): Added this data type, used to track spaces and
        characters treated as spaces.
        (WebCore::applyFontTransforms): Added. Applies shaping and positioning transforms, as
        required by the typesetting features, to the glyphs recently added to a GlyphBuffer, while
        maintaining the advances of characters that are treated as spaces and the characters
        preceding them, if necessary.
        (WebCore::WidthIterator::advanceInternal): Added calls to applyFontTransforms() at the end
        of each contiguous run of glyphs from the same font. Also added code to maintain a vector
        of spaces and characters treated as space.
        (WebCore::WidthIterator::advanceOneCharacter): Changed the parameter type from a pointer to
        a reference.
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::supportsTypesettingFeatures): Added. Returns whether WidthIterator
        instances support the typesetting features of the given font. Returns true if the font is
        not a screen font and its typesetting features are kerning, ligatures or both.
        (WebCore::WidthIterator::shouldApplyFontTransforms): Added. Returns true if the typesetting
        features include kerning or ligatures.
        * platform/mac/WebCoreSystemInterface.h: Defined wkCTFontTransformOptions and declared
        wkCTFontTransformGlyphs.
        * platform/mac/WebCoreSystemInterface.mm: Defined wkCTFontTransformGlyphs.
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::advanceSimpleText): Added a local GlyphBuffer to pass to
        WidthIterator::advance().
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::floatWidthUsingSVGFont): Ditto.

2012-10-15  Mark Lam  <mark.lam@apple.com>

        Fix build broken by r131348.
        https://bugs.webkit.org/show_bug.cgi?id=97533.

        Not reviewed.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::layoutContent):

2012-10-15  Andreas Kling  <kling@webkit.org>

        Remove WTF::fastDeleteAllValues().
        <http://webkit.org/b/99345>

        Reviewed by Eric Seidel.

        It was only used to fastDelete() a class that was already overriding operator delete
        by way of WTF_MAKE_FAST_ALLOCATED anyway.

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

2012-10-15  Levi Weintraub  <leviw@chromium.org>

        Regression r130057: incorrect block pref width for alternating InlineFlow and inline Replaced
        https://bugs.webkit.org/show_bug.cgi?id=99194

        Reviewed by Eric Seidel.

        Correctly breaking lines after inline replaced elements that follow inline flows. Previously, alternating
        these two types of elements would cause us to increase our preferred width forever.

        Test: fast/block/block-with-inline-replaced-children-in-inline-flows.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):

2012-10-15  Emil A Eklund  <eae@chromium.org>

        Revert rounding change in RenderTable::paintObject
        https://bugs.webkit.org/show_bug.cgi?id=99364

        Reviewed by Levi Weintraub.

        Bug 91410 changed RenderTable::paintObject to round the offset
        in order to avoid table-background bleed through. The root cause
        for that has since been fixed and the rounding workaround is no
        longer needed. This change reverts the code change from bug
        91410 while preserving the test added as a part of that change
        as it now passes without the workaround.

        No new tests, covered by fast/sub-pixel/table-rows-no-gaps-expected.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):
        Remove unnecessary rounding.

2012-10-15  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Add CustomFilterProgramType to CustomFilterProgramInfo
        https://bugs.webkit.org/show_bug.cgi?id=96448

        Reviewed by Kenneth Rohde Christiansen.

        CustomFilterProgramInfo has been refactored to decouple the CustomFilterProgramType from
        the CustomFilterProgramMixSetting: m_mixSettings.enabled was redundant in light of the fact
        that m_programType encoded the very same information. Dependencies have been updated to reflect
        this change.

        Current tests already cover this code.

        * css/CSSComputedStyleDeclaration.cpp: 
        (WebCore::CSSComputedStyleDeclaration::valueForFilter): The check for mixSettings.enabled has been replaced
        by an explicit check for PROGRAM_TYPE_BLENDS_ELEMENT_TEXTURE program type.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createCustomFilterOperation): Setting the program type explicitly while creating a
        new filter program.
        * platform/graphics/filters/CustomFilterProgram.cpp:
        (WebCore::CustomFilterProgram::CustomFilterProgram): CustomFilterProgram's constructor has been updated to
        reflect the need of setting the program type explicitly.
        (WebCore::CustomFilterProgram::programInfo): Updated to create new CustomFilterProgramInfo setting the program
        type explicitly.
        * platform/graphics/filters/CustomFilterProgram.h:
        * platform/graphics/filters/CustomFilterProgramInfo.cpp:
        (WebCore::CustomFilterProgramInfo::CustomFilterProgramInfo): Added m_programType and udpated the related getter.
        (WebCore::CustomFilterProgramInfo::hash): ditto
        (WebCore::CustomFilterProgramInfo::operator==): MixSettings' equality check is being performed only whether
        the CustomFilterProgramInfo's program type is PROGRAM_TYPE_BLENDS_ELEMENT_TEXTURE.
        * platform/graphics/filters/CustomFilterProgramInfo.h:
        (WebCore::CustomFilterProgramMixSettings::CustomFilterProgramMixSettings): Got rid of the redundant enabled flag.
        (WebCore::CustomFilterProgramMixSettings::operator==): ditto
        (CustomFilterProgramInfo):
        (WebCore::CustomFilterProgramInfo::programType):
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp: The right shader validator is now being
        created according to the program type.
        (WebCore::CustomFilterValidatedProgram::CustomFilterValidatedProgram):
        (WebCore::CustomFilterValidatedProgram::rewriteMixVertexShader): The reference to MixSettings' enabled flag
        has been replaced with a check for the program type.
        (WebCore::CustomFilterValidatedProgram::rewriteMixFragmentShader): ditto
        * rendering/style/StyleCustomFilterProgram.h:
        (WebCore::StyleCustomFilterProgram::create): Updated to be aware of the program type.
        (WebCore::StyleCustomFilterProgram::StyleCustomFilterProgram): ditto

2012-10-15  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Key paths should support non-ASCII identifiers
        https://bugs.webkit.org/show_bug.cgi?id=98814

        Reviewed by Kentaro Hara.

        Update the parser for key paths to use the unicode classes from
        the IdentifierName production in ECMA-262.

        Test: storage/indexeddb/keypath-basics.html

        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore):
        (WebCore::IDBKeyPathLexer::lexIdentifier):

2012-10-15  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][Texmap] Set gl context in GraphicsContext3DPrivate
        https://bugs.webkit.org/show_bug.cgi?id=99325

        Reviewed by Kenneth Rohde Christiansen.

        Based on a patch from Regina Chung.
        This piece of code was lost in the final patch of https://bugs.webkit.org/show_bug.cgi?id=96627.
        The gl context is used as key in a hash map and cannot be NULL.

        No new tests. Accelerated compositing is not yet enabled in the EFL port.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2012-10-15  Mike West  <mkwst@chromium.org>

        Console messages containing long URLs should cut at some reasonable length.
        https://bugs.webkit.org/show_bug.cgi?id=97980

        Reviewed by Pavel Feldman.

        This patch lightly modifies the current styling of linkified URLs inside
        console messages in order to cut them down to some reasonable size for
        viewing. The middle of the URL is snipped out such that the whole
        thing fits into 150 characters. This only effects the displayed text;
        the link's href isn't changed; the link remains available via the
        context menu, accessible via the title attribute, and clicking it still
        takes the user directly to the resource in question.

        Test: inspector/console/console-trim-long-urls.html

        * inspector/front-end/ResourceUtils.js:
        (WebInspector.linkifyURLAsNode):
            Trim the middle of the URL to bring the whole string down to  down
            to 150 characters, and set the link's title to the full URL.

2012-10-15  Tony Chang  <tony@chromium.org>

        Add computeLogicalHeight override methods to RenderView and RenderMultiColumnSet
        https://bugs.webkit.org/show_bug.cgi?id=99348

        Reviewed by Ojan Vafai.

        Add computeLogicalHeight to the last 2 RenderBoxes that override the method.
        I'm unable to remove RenderMultiColumnSet::updateLogicalHeight and make the method
        non-virtual since it sets ComputedColumnHeight.  I'd like to remove this
        eventually.

        No new tests, this is just a code refactor.

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::updateLogicalHeight): Set computedColumnHeight.
        (WebCore::RenderMultiColumnSet::computeLogicalHeight):
        (WebCore):
        * rendering/RenderMultiColumnSet.h:
        (RenderMultiColumnSet):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeLogicalHeight):
        * rendering/RenderView.h:

2012-10-15  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Refactoring initialization and shutdown codes of EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Reviewed by Gyuyoung Kim.

        Remove codes to initialize and shutdown the EFL libraries from
        RunLoopEfl.cpp. Initialization and shutdown will be done in the
        ewk_main.cpp for ui process and WebProcessMainEfl.cpp for web
        process.

        No new tests. This patch doesn't change behavior.

        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):

2012-10-15  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Add support for auto-height regions (without region-breaks)
        https://bugs.webkit.org/show_bug.cgi?id=97533

        Reviewed by Julien Chaffraix.

        Implement the 2pass layout algorithm for computing the height of regions with auto logical height, without taking region breaks into account.
        The algorithm is described in the CSSRegions spec: http://dev.w3.org/csswg/css3-regions/#regions-visual-formatting-steps

        When the flow thread contains regions with auto logical height, a 2pass layout algorithm is needed to determine the height of auto logical height regions.
        In each step of the layout, the regions are laid out before the flow thread is laid out.

        In the first pass of layout (normal layout phase), the content of the flow thread is laid out unconstrained in the regions. The region marked as having auto logical height
        displays all the corresponding content from the flow thread (taking min-height and max-height into account), and the height of the content displayed
        determines the overridden logical content height. Thus, after the first pass of layout, each auto logical height region will store the logical height
        value for the second pass in its overridden logical content height property.

        In the second pass of layout (constrained flow threads layout phase), when the content of the flow thread is laid out constrained in the regions, the regions are laid out again and they are using
        the overridden logical content height from the first pass to update their logical height. Then, the flow thread content is laid out in the associated region chain,
        for which the auto logical height regions have proper logical height.

        A future patch will properly take region breaks into account for the first pass of layout.

        Tests: fast/regions/autoheight-abspos-region.html
               fast/regions/autoheight-floatright-region.html
               fast/regions/autoheight-horizontal-bt.html
               fast/regions/autoheight-inlineblock-normalflow-region.html
               fast/regions/autoheight-maxheight-region.html
               fast/regions/autoheight-minheight-region.html
               fast/regions/autoheight-normalflow-region.html
               fast/regions/autoheight-vertical-lr.html
               fast/regions/autoheight-vertical-rl.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::resetRegionsOverrideLogicalContentHeight):
        For all the auto logical height regions, resets their associated overrideLogicalContentHeight.
        Those regions are marked as needing layout (along with their ancestors).
        (WebCore::FlowThreadController::markAutoLogicalHeightRegionsForLayout):
        Mark all the auto logical height regions and their associated flow thread as needing layout (along with their ancestors).
        * rendering/FlowThreadController.h:
        * rendering/RenderBox.cpp:
        Add helper functions to clear out individual logical content width/height.
        (WebCore::RenderBox::clearOverrideLogicalContentHeight):
        (WebCore::RenderBox::clearOverrideLogicalContentWidth):
        (WebCore::RenderBox::clearOverrideSize):
        * rendering/RenderBox.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::computeLogicalHeight):
        If the flow thread has an auto logical height region for which we did not yet compute the overrideLogicalContentHeight value,
        bail out early since we cannot compute the flow thread logical height.
        (WebCore::RenderFlowThread::regionAtBlockOffset):
        If the offset is inside an auto logical height region for which we did not compute the overrideLogicalContentHeight, then we consider this region tall enough to accommodate all
        the content and we return this region. Otherwise, for an auto logical height region, we use either the overrideLogicalContentHeight (if we are in the first layout phase) or
        the logicalHeight if we are in the second layout phase (because the overriderLogicalContentHeight was already transferred into region logical height).
        (WebCore::RenderFlowThread::pageLogicalHeightForOffset):
        (WebCore::RenderFlowThread::pageRemainingLogicalHeightForOffset):
        (WebCore::RenderFlowThread::computeOverflowStateForRegions):
        (WebCore::RenderFlowThread::resetRegionsOverrideLogicalContentHeight):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        Simulate a region break at the specified offset. It will be extended to properly process the region breaks. At this moment, only one auto height region for a thread
        can have its height properly computed.
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::boxIntersectsRegion):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::updateLogicalHeight):
        If the auto logical height region has an overrideLogicalContentHeight and we are in the second pass of layout,
        we use the overrideLogicalContentHeight to update the region logical height.
        (WebCore::RenderRegion::needsOverrideLogicalContentHeightComputation):
        * rendering/RenderRegion.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layoutContent):
        Added a new function to contain the RenderView block layout and flow threads layout.
        (WebCore::RenderView::checkLayoutState):
        Helper function keeping the original asserts from RenderView, used in more than one place.
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        (WebCore::RenderView::normalLayoutPhase):
        (WebCore::RenderView::constrainedFlowThreadsLayoutPhase):

2012-10-15  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Fix memory leak in TreeOutline
        https://bugs.webkit.org/show_bug.cgi?id=99307

        Reviewed by Alexander Pavlov.

        Added cleanup of empty buckets in elements cache.

        * inspector/front-end/treeoutline.js:

2012-10-15  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Hide useless controls in remote-debugging mode.
        https://bugs.webkit.org/show_bug.cgi?id=99300

        Reviewed by Vsevolod Vlasov.

        "Close inspector" and "change docking mode" buttons seem to be rather
        useless in remote debugging mode.

        * inspector/front-end/inspector.css:
        (body.remote .toolbar-item.close-left, body.remote .toolbar-item.close-right):
        (body.remote .dock-status-bar-item):

2012-10-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement Favicons API
        https://bugs.webkit.org/show_bug.cgi?id=99087

        Reviewed by Kenneth Rohde Christiansen.

        Moved ewk_util from WebKit to WebCore and rename it
        to CairoUtilityEfl so that the code can be shared
        between WebKit1 and WebKit2. Some related utility
        code was also moved from RenderThemeEfl to
        CairoUtilityEfl.

        No new tests, no behavior change.

        * PlatformEfl.cmake:
        * platform/efl/RenderThemeEfl.cpp:
        * platform/graphics/efl/CairoUtilitiesEfl.cpp: Renamed from Source/WebKit/efl/ewk/ewk_util.cpp.
        (WebCore):
        (WebCore::evasObjectFromCairoImageSurface):
        (WebCore::createSurfaceForBackingStore):
        * platform/graphics/efl/CairoUtilitiesEfl.h: Renamed from Source/WebKit/efl/ewk/ewk_util_private.h.
        (WebCore):

2012-10-15  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=99350
        REGRESSION (r131238): Repro crash in 
       WebCore::ScrollingStateTree::removeNode(WebCore::ScrollingStateNode*) 
        opening pdf page
        -and corresponding-
        <rdar://problem/12499839>

        Reviewed by Simon Fraser.

        We have to null-check node here. It won't be found if  
        clearStateTree() was recently called.
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::detachFromStateTree):

2012-10-15  Jonathan Dong  <jonathan.dong@torchmobile.com.cn>

        [BlackBerry] replace BlackBerry::Platform::log() with BBLOG()
        https://bugs.webkit.org/show_bug.cgi?id=99302

        Reviewed by Rob Buis.

        RIM PR: 210884
        The marco BBLOG() is defined as a no-op in release mode which will
        save a function call in the release build.
        Internally reviewed by Charles Wei.

        No new tests since there's no functional change.

        * platform/blackberry/PlatformKeyboardEventBlackBerry.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::logFrameBufferStatus):
        * platform/graphics/blackberry/LayerCompositingThread.cpp:
        (WebCore::LayerCompositingThread::getTransformedHolePunchRect):
        * platform/graphics/blackberry/VideoLayerWebKitThread.cpp:
        (WebCore::VideoLayerWebKitThread::setHolePunchRect):
        (WebCore::VideoLayerWebKitThread::boundsChanged):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):

2012-10-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Provide logging for OnlineState detection code
        https://bugs.webkit.org/show_bug.cgi?id=99299

        Reviewed by Kenneth Rohde Christiansen.

        Add logging to NetworkStateNotifierEfl.cpp to facilitate
        debugging of this functionality.

        No new tests, no behavior change.

        * platform/network/efl/NetworkStateNotifierEfl.cpp:
        (WebCore::NetworkStateNotifier::updateState):

2012-10-15  MORITA Hajime  <morrita@google.com>

        [Regression r131167] run-webkit-tests fails
        https://bugs.webkit.org/show_bug.cgi?id=99279

        Reviewed by Kentaro Hara.

        CodeGeneratorV8.pm assumed that there are only two objects which have constructor getters and
        overlooked TestObj. This fix relaxes that assumption to accept it.

        No new tests. Fixing an existing test.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorGetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjV8Internal::TestObjConstructorGetter):

2012-10-15  Joe Mason  <jmason@rim.com>

        [BlackBerry] Fix WebSockets which was disabled by recent string changes
        https://bugs.webkit.org/show_bug.cgi?id=99248

        Reviewed by George Staikos.

        PR 223681: The signature of FilterStream::notifyStatusReceived changed to take a
        BlackBerry::Platform::String instead of a char *. But SocketStreamHandleBlackBerry was not
        updated to the new signature, so the status message is not getting passed on because it is
        not calling the correct override.

        No new tests because this is fixing a regression.

        * platform/network/blackberry/SocketStreamHandle.h:
        (SocketStreamHandle):
        * platform/network/blackberry/SocketStreamHandleBlackBerry.cpp:
        (WebCore::SocketStreamHandle::notifyStatusReceived):

2012-10-15  Rob Buis  <rbuis@rim.com>

        Remove RenderTextControl::isSelectableElement
        https://bugs.webkit.org/show_bug.cgi?id=99334

        Reviewed by Andreas Kling.

        It seems this method is not used anymore.

        * WebCore.order:
        * rendering/RenderTextControl.h:

2012-10-15  Mike West  <mkwst@chromium.org>

        CSP source expressions should support paths at file-level granularity.
        https://bugs.webkit.org/show_bug.cgi?id=99250

        Reviewed by Adam Barth.

        After a bit of discussion on public-webappsec[1], path support for CSP
        source expressions has been tuned to support file-level granularity. In
        particular, this means that:

        - 'example.com/js' matches a file named 'js'
        - 'example.com/js/' matches all files under a directory named 'js'
          (note the trailing slash)
        - 'example.com/js/file.js' matches only a file named 'file.js'
          inside a directory named 'js'

        Though this is part of the CSP 1.1 spec, it continues to be exposed
        outside the CSP_NEXT flag for back-compatibility.

        Test cases have been added to the existing
        http/tests/security/contentSecurityPolicy/source-list-parsing-paths-*
        in order ensure that the new functionality works correctly.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSource::pathMatches):
            If the path ends with '/', do a prefix check. If not, check for an
            exact match.
        (WebCore::CSPSourceList::parsePath):
            Don't automatically append a '/' to paths.

2012-10-15  George Staikos  <staikos@webkit.org>

        [BlackBerry] Adapt to Platform API changes in string handling
        https://bugs.webkit.org/show_bug.cgi?id=99248

        Reviewed by Yong Li.

        Convert usage of WebString, char* and std::string to BlackBerry::Platform::String.

        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack): Fix the build for BlackBerry.
        * page/blackberry/SettingsBlackBerry.cpp:
        (WebCore):
        (WebCore::Settings::initializeDefaultFontFamilies):
        * platform/blackberry/LocalizedStringsBlackBerry.cpp:
        * platform/blackberry/MIMETypeRegistryBlackBerry.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        * platform/blackberry/PasteboardBlackBerry.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/blackberry/ReadOnlyLatin1String.h: Removed.
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::setCertificatePath):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::generateProtectionSpaceFromMMRAuthChallenge):
        (WebCore::MediaPlayerPrivate::onAuthenticationNeeded):
        (WebCore::MediaPlayerPrivate::onAuthenticationAccepted):
        (WebCore::MediaPlayerPrivate::lookupMediaStream):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::engineDescription):
        * platform/network/blackberry/DNSBlackBerry.cpp:
        (WebCore::prefetchDNS):
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::initialize):
        (WebCore::NetworkJob::notifyStatusReceived):
        (WebCore::NetworkJob::notifyHeadersReceived):
        (WebCore::NetworkJob::handleNotifyClose):
        (WebCore::NetworkJob::sendRequestWithCredentials):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::initializePlatformRequest):
        * platform/network/blackberry/SocketStreamHandleBlackBerry.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        * platform/text/blackberry/StringBlackBerry.cpp:
        (WTF::String::String):
        (WTF::String::operator BlackBerry::Platform::String):
        * platform/text/blackberry/TextBreakIteratorInternalICUBlackBerry.cpp:

2012-10-15  Jay Civelli  <jcivelli@chromium.org>

        Calling WebCore::SharedBuffer::append(data, 0) on a shared buffer when
        its current position is at a segment boundary (4096) ends up adding an
        unitialized segment (with uninitialized memory) to the SharedBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=99000

        Reviewed by Adam Barth.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):

2012-10-15  Luke Macpherson   <macpherson@chromium.org>

        Make CSS variable names case-insensitive.
        https://bugs.webkit.org/show_bug.cgi?id=98712

        Reviewed by Tony Chang.

        This patch modifies the parser to normalize all variable names to lower case,
        making variable definitions consistent with other property names, which are also case insensitive.
        Spec: http://dev.w3.org/csswg/css-variables/#defining-variables

        Test: fast/css/variables/case-insensitive.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore):
        (WebCore::CSSParser::createPrimitiveVariableNameValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::storeVariableDeclaration):
        (WebCore::CSSParserString::lowerSubstring):
        Added function to compute a lower case substring as an AtomicString from a CSSParserString.
        * css/CSSParser.h:
        (CSSParser):
        * css/CSSParserValues.h:
        (CSSParserString):
        (WebCore::CSSParserString::lowerSubstring):

2012-10-15  Michael Saboff  <msaboff@apple.com>

        Update RenderText to use String instead of UChar* for text
        https://bugs.webkit.org/show_bug.cgi?id=96979

        Reviewed by Dan Bernstein.

        RenderText now uses a String for text.  It keeps a cached LCHar* or UChar* pointer to the
        actual text data for performance.  Added a characterAt() indexed accessor to RenderText to avoid the
        somewhat confusing construct for a RenderText* rt, e.g. (*re)[n] or rt->characters()[n].  This is
        now written as rt->characterAt(n).
        Enabled patch in the HTML parser to create 8 bit text data.  Modified TextRun to create 
        text runs using 8 bit string data where possible.  Added several flavors of RenderBlock::constructTextRun
        to create TextRuns from RenderText objects including with an offset.  Added an LChar flavor of constructTextRun()
        as well.  Eliminated the TextRunFlags argument to all but the String flavor as all other flavors used the default
        parameter.  
        Encased the code that creates 8 bit TextRun's in #if USE(8BIT_TEXTRUN).  Enabled WTF_USE_8BIT_TEXTRUN
        for PLATFORM(MAC).  Other platform can update this setting in Platform.h when their platform specific code is
        updated to TextRun's with 8 bit data.
        Added many 8/16 bit aware paths.  Cleanup up some int / unsigned confusion in RenderBlockLineLayout.cpp.

        No function change therefore no new tests.

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::vectorEqualsString):
        (WebCore::HTMLTokenizer::nextToken):
        * html/parser/HTMLTokenizer.h:
        (HTMLTokenizer):
        * html/track/WebVTTTokenizer.cpp:
        (WebCore::vectorEqualsString):
        (WebCore::WebVTTTokenizer::nextToken):
        * html/track/WebVTTTokenizer.h:
        (WebVTTTokenizer):
        * platform/graphics/Font.h:
        (WebCore::Font::glyphDataForCharacter):
        * platform/graphics/FontFastPath.cpp:
        (WebCore):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::subRun):
        (TextRun):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::TextLayout::isNeeded):
        (WebCore::TextLayout::constructTextRun):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::atTextParagraphSeparator):
        (WebCore::InlineIterator::current):
